aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog66
-rw-r--r--NEWS272
-rw-r--r--README126
-rw-r--r--a11y/e-table/.cvsignore4
-rw-r--r--a11y/e-table/gal-a11y-e-cell-popup.c144
-rw-r--r--a11y/e-table/gal-a11y-e-cell-popup.h64
-rw-r--r--a11y/e-table/gal-a11y-e-cell-registry.c132
-rw-r--r--a11y/e-table/gal-a11y-e-cell-registry.h58
-rw-r--r--a11y/e-table/gal-a11y-e-cell-text.c570
-rw-r--r--a11y/e-table/gal-a11y-e-cell-text.h48
-rw-r--r--a11y/e-table/gal-a11y-e-cell-toggle.c162
-rw-r--r--a11y/e-table/gal-a11y-e-cell-toggle.h47
-rw-r--r--a11y/e-table/gal-a11y-e-cell-tree.c209
-rw-r--r--a11y/e-table/gal-a11y-e-cell-tree.h50
-rw-r--r--a11y/e-table/gal-a11y-e-cell.c555
-rw-r--r--a11y/e-table/gal-a11y-e-cell.h99
-rw-r--r--a11y/e-table/gal-a11y-e-table-click-to-add-factory.c88
-rw-r--r--a11y/e-table/gal-a11y-e-table-click-to-add-factory.h34
-rw-r--r--a11y/e-table/gal-a11y-e-table-click-to-add.c269
-rw-r--r--a11y/e-table/gal-a11y-e-table-click-to-add.h35
-rw-r--r--a11y/e-table/gal-a11y-e-table-factory.c83
-rw-r--r--a11y/e-table/gal-a11y-e-table-factory.h36
-rw-r--r--a11y/e-table/gal-a11y-e-table-item-factory.c87
-rw-r--r--a11y/e-table/gal-a11y-e-table-item-factory.h34
-rw-r--r--a11y/e-table/gal-a11y-e-table-item.c1433
-rw-r--r--a11y/e-table/gal-a11y-e-table-item.h44
-rw-r--r--a11y/e-table/gal-a11y-e-table.c185
-rw-r--r--a11y/e-table/gal-a11y-e-table.h43
-rw-r--r--a11y/e-table/gal-a11y-e-tree-factory.c81
-rw-r--r--a11y/e-table/gal-a11y-e-tree-factory.h34
-rw-r--r--a11y/e-table/gal-a11y-e-tree.c162
-rw-r--r--a11y/e-table/gal-a11y-e-tree.h41
-rw-r--r--a11y/e-text/.cvsignore4
-rw-r--r--a11y/e-text/gal-a11y-e-text-factory.c87
-rw-r--r--a11y/e-text/gal-a11y-e-text-factory.h36
-rw-r--r--a11y/e-text/gal-a11y-e-text.c1121
-rw-r--r--a11y/e-text/gal-a11y-e-text.h40
-rw-r--r--a11y/gal-a11y-factory.h94
-rw-r--r--a11y/gal-a11y-util.c31
-rw-r--r--a11y/gal-a11y-util.h21
-rw-r--r--addressbook/ChangeLog133
-rw-r--r--addressbook/gui/component/addressbook-view.c133
-rw-r--r--addressbook/gui/component/apps_evolution_addressbook.schemas.in.in12
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor.c1
-rw-r--r--addressbook/gui/widgets/e-addressbook-view.c424
-rw-r--r--addressbook/tools/evolution-addressbook-export.c2
-rw-r--r--calendar/ChangeLog189
-rw-r--r--calendar/gui/alarm-notify/alarm-queue.c75
-rw-r--r--calendar/gui/calendar-component.c160
-rw-r--r--calendar/gui/e-week-view.c2
-rw-r--r--calendar/gui/gnome-cal.c125
-rw-r--r--calendar/gui/itip-utils.c3
-rw-r--r--calendar/gui/migration.c1
-rw-r--r--calendar/gui/tasks-component.c168
-rw-r--r--camel/ChangeLog96
-rw-r--r--camel/camel-filter-driver.c2
-rw-r--r--camel/camel-folder-search.c1
-rw-r--r--camel/camel-movemail.c3
-rw-r--r--camel/camel-sasl-digest-md5.c1
-rw-r--r--camel/camel-sasl-gssapi.c1
-rw-r--r--camel/camel-service.c6
-rw-r--r--camel/camel-tcp-stream-ssl.c1
-rw-r--r--camel/camel-vee-folder.c1
-rw-r--r--camel/camel-vee-store.c1
-rw-r--r--camel/providers/imap/camel-imap-store.c171
-rw-r--r--camel/providers/imapp/camel-imapp-store.c1
-rw-r--r--camel/providers/local/camel-local-folder.c2
-rw-r--r--camel/providers/local/camel-maildir-folder.c1
-rw-r--r--camel/providers/local/camel-mbox-folder.c1
-rw-r--r--camel/providers/local/camel-mbox-store.c1
-rw-r--r--camel/providers/local/camel-mh-folder.c1
-rw-r--r--camel/providers/local/camel-spool-folder.c2
-rw-r--r--camel/providers/local/camel-spool-store.c1
-rw-r--r--camel/providers/nntp/camel-nntp-folder.c1
-rw-r--r--camel/providers/nntp/camel-nntp-store.c131
-rw-r--r--camel/providers/pop3/camel-pop3-store.c162
-rw-r--r--camel/providers/smtp/camel-smtp-transport.c167
-rw-r--r--camel/providers/smtp/camel-smtp-transport.h8
-rw-r--r--camel/tests/data/messages/.cvsignore1
-rw-r--r--composer/ChangeLog38
-rw-r--r--composer/e-msg-composer.c178
-rw-r--r--composer/mail-composer-errors.xml2
-rw-r--r--composer/mail-composer-errors.xml.h2
-rw-r--r--configure.in119
-rw-r--r--doc/devel/executive-summary/evolution-services.hierarchy7
-rw-r--r--doc/devel/importer/evolution-shell-importer.hierarchy7
-rw-r--r--e-util/ChangeLog224
-rw-r--r--e-util/e-bit-array.c429
-rw-r--r--e-util/e-bit-array.h104
-rw-r--r--e-util/e-i18n.h74
-rw-r--r--e-util/e-iconv.c614
-rw-r--r--e-util/e-iconv.h49
-rw-r--r--e-util/e-marshal.list51
-rw-r--r--e-util/e-sorter-array.c259
-rw-r--r--e-util/e-sorter-array.h77
-rw-r--r--e-util/e-sorter.c153
-rw-r--r--e-util/e-sorter.h82
-rw-r--r--e-util/e-text-event-processor-emacs-like.c495
-rw-r--r--e-util/e-text-event-processor-emacs-like.h70
-rw-r--r--e-util/e-text-event-processor-types.h132
-rw-r--r--e-util/e-text-event-processor.c148
-rw-r--r--e-util/e-text-event-processor.h77
-rw-r--r--e-util/e-util.c1230
-rw-r--r--e-util/e-util.h231
-rw-r--r--e-util/e-xml-utils.c502
-rw-r--r--e-util/e-xml-utils.h101
-rwxr-xr-xhelp/C/figures/evo_email_a.pngbin87620 -> 99857 bytes
-rwxr-xr-xhelp/C/figures/evo_identity_a.pngbin46427 -> 29371 bytes
-rwxr-xr-xhelp/C/figures/evo_mail_callout_a.pngbin90552 -> 90095 bytes
-rwxr-xr-xhelp/C/figures/evo_receive_setup_a.pngbin60130 -> 38207 bytes
-rwxr-xr-xhelp/C/figures/evo_send_setup_a.pngbin62908 -> 40068 bytes
-rw-r--r--help/devel/executive-summary/evolution-services.hierarchy7
-rw-r--r--help/devel/importer/evolution-shell-importer.hierarchy7
-rw-r--r--mail/ChangeLog302
-rw-r--r--mail/em-composer-utils.c1
-rw-r--r--mail/em-folder-tree-model.c2
-rw-r--r--mail/em-folder-tree.c185
-rw-r--r--mail/em-folder-view.c372
-rw-r--r--mail/em-format-html-display.c47
-rw-r--r--mail/em-format-html.c4
-rw-r--r--mail/em-format.c49
-rw-r--r--mail/em-message-browser.c3
-rw-r--r--mail/em-popup.c800
-rw-r--r--mail/em-subscribe-editor.c1
-rw-r--r--mail/em-utils.c24
-rw-r--r--mail/mail-account-gui.c3
-rw-r--r--mail/mail-component.c15
-rw-r--r--mail/mail-config.glade578
-rw-r--r--mail/mail-errors.xml7
-rw-r--r--mail/mail-errors.xml.h6
-rw-r--r--mail/mail-ops.c1
-rw-r--r--mail/message-list.c46
-rw-r--r--po/be.po47808
-rw-r--r--shell/ChangeLog28
-rw-r--r--shell/e-shell.c2
-rw-r--r--shell/main.c25
-rw-r--r--widgets/menus/gal-define-views-dialog.c379
-rw-r--r--widgets/menus/gal-define-views-dialog.h78
-rw-r--r--widgets/menus/gal-define-views-model.c322
-rw-r--r--widgets/menus/gal-define-views-model.h72
-rw-r--r--widgets/menus/gal-define-views.glade192
-rw-r--r--widgets/menus/gal-view-collection.c823
-rw-r--r--widgets/menus/gal-view-collection.h151
-rw-r--r--widgets/menus/gal-view-etable.c305
-rw-r--r--widgets/menus/gal-view-etable.h78
-rw-r--r--widgets/menus/gal-view-factory-etable.c120
-rw-r--r--widgets/menus/gal-view-factory-etable.h62
-rw-r--r--widgets/menus/gal-view-factory.c107
-rw-r--r--widgets/menus/gal-view-factory.h79
-rw-r--r--widgets/menus/gal-view-instance-save-as-dialog.c307
-rw-r--r--widgets/menus/gal-view-instance-save-as-dialog.glade260
-rw-r--r--widgets/menus/gal-view-instance-save-as-dialog.h89
-rw-r--r--widgets/menus/gal-view-instance.c599
-rw-r--r--widgets/menus/gal-view-instance.h116
-rw-r--r--widgets/menus/gal-view-new-dialog.c285
-rw-r--r--widgets/menus/gal-view-new-dialog.glade175
-rw-r--r--widgets/menus/gal-view-new-dialog.h86
-rw-r--r--widgets/menus/gal-view.c206
-rw-r--r--widgets/menus/gal-view.h98
-rw-r--r--widgets/misc/ChangeLog23
-rw-r--r--widgets/misc/e-canvas-background.c496
-rw-r--r--widgets/misc/e-canvas-background.h71
-rw-r--r--widgets/misc/e-canvas-utils.c171
-rw-r--r--widgets/misc/e-canvas-utils.h55
-rw-r--r--widgets/misc/e-canvas-vbox.c381
-rw-r--r--widgets/misc/e-canvas-vbox.h93
-rw-r--r--widgets/misc/e-canvas.c1096
-rw-r--r--widgets/misc/e-canvas.h157
-rw-r--r--widgets/misc/e-colors.c103
-rw-r--r--widgets/misc/e-colors.h44
-rw-r--r--widgets/misc/e-cursors.c156
-rw-r--r--widgets/misc/e-cursors.h68
-rw-r--r--widgets/misc/e-gui-utils.c238
-rw-r--r--widgets/misc/e-gui-utils.h58
-rw-r--r--widgets/misc/e-hsv-utils.c178
-rw-r--r--widgets/misc/e-hsv-utils.h52
-rw-r--r--widgets/misc/e-popup-menu.c240
-rw-r--r--widgets/misc/e-popup-menu.h142
-rw-r--r--widgets/misc/e-printable.c209
-rw-r--r--widgets/misc/e-printable.h90
-rw-r--r--widgets/misc/e-reflow-model.c355
-rw-r--r--widgets/misc/e-reflow-model.h112
-rw-r--r--widgets/misc/e-reflow.c1507
-rw-r--r--widgets/misc/e-reflow.h146
-rw-r--r--widgets/misc/e-selection-model-array.c557
-rw-r--r--widgets/misc/e-selection-model-array.h96
-rw-r--r--widgets/misc/e-selection-model-simple.c115
-rw-r--r--widgets/misc/e-selection-model-simple.h70
-rw-r--r--widgets/misc/e-selection-model.c689
-rw-r--r--widgets/misc/e-selection-model.h170
-rw-r--r--widgets/misc/e-unicode.c2055
-rw-r--r--widgets/misc/e-unicode.h115
-rw-r--r--widgets/misc/gal-categories.glade173
-rw-r--r--widgets/misc/gal-combo-box.c834
-rw-r--r--widgets/misc/gal-combo-box.h91
-rw-r--r--widgets/misc/gal-combo-text.c433
-rw-r--r--widgets/misc/gal-combo-text.h76
-rw-r--r--widgets/misc/pixmaps/.cvsignore2
-rw-r--r--widgets/misc/pixmaps/cursor_cross.xpm38
-rw-r--r--widgets/misc/pixmaps/cursor_hand_closed.xpm38
-rw-r--r--widgets/misc/pixmaps/cursor_hand_open.xpm38
-rw-r--r--widgets/misc/pixmaps/cursor_zoom_in.xpm37
-rw-r--r--widgets/misc/pixmaps/cursor_zoom_out.xpm37
-rw-r--r--widgets/misc/test-color.c76
-rw-r--r--widgets/table/.cvsignore13
-rw-r--r--widgets/table/add-col.xpm22
-rw-r--r--widgets/table/arrow-down.xpm21
-rw-r--r--widgets/table/arrow-up.xpm21
-rw-r--r--widgets/table/check-empty.xpm21
-rw-r--r--widgets/table/check-filled.xpm21
-rw-r--r--widgets/table/clip.pngbin192 -> 0 bytes
-rw-r--r--widgets/table/e-cell-checkbox.c67
-rw-r--r--widgets/table/e-cell-checkbox.h50
-rw-r--r--widgets/table/e-cell-combo.c699
-rw-r--r--widgets/table/e-cell-combo.h63
-rw-r--r--widgets/table/e-cell-date.c166
-rw-r--r--widgets/table/e-cell-date.h49
-rw-r--r--widgets/table/e-cell-float.c93
-rw-r--r--widgets/table/e-cell-float.h53
-rw-r--r--widgets/table/e-cell-number.c85
-rw-r--r--widgets/table/e-cell-number.h49
-rw-r--r--widgets/table/e-cell-pixbuf.c417
-rw-r--r--widgets/table/e-cell-pixbuf.h53
-rw-r--r--widgets/table/e-cell-popup.c519
-rw-r--r--widgets/table/e-cell-popup.h101
-rw-r--r--widgets/table/e-cell-progress.c456
-rw-r--r--widgets/table/e-cell-progress.h74
-rw-r--r--widgets/table/e-cell-size.c110
-rw-r--r--widgets/table/e-cell-size.h49
-rw-r--r--widgets/table/e-cell-spin-button.c670
-rw-r--r--widgets/table/e-cell-spin-button.h103
-rw-r--r--widgets/table/e-cell-text.c2780
-rw-r--r--widgets/table/e-cell-text.h123
-rw-r--r--widgets/table/e-cell-toggle.c489
-rw-r--r--widgets/table/e-cell-toggle.h62
-rw-r--r--widgets/table/e-cell-tree.c911
-rw-r--r--widgets/table/e-cell-tree.h77
-rw-r--r--widgets/table/e-cell-vbox.c489
-rw-r--r--widgets/table/e-cell-vbox.h65
-rw-r--r--widgets/table/e-cell.c499
-rw-r--r--widgets/table/e-cell.h224
-rw-r--r--widgets/table/e-table-click-to-add.c573
-rw-r--r--widgets/table/e-table-click-to-add.h77
-rw-r--r--widgets/table/e-table-col-dnd.h39
-rw-r--r--widgets/table/e-table-col.c236
-rw-r--r--widgets/table/e-table-col.h101
-rw-r--r--widgets/table/e-table-column-specification.c150
-rw-r--r--widgets/table/e-table-column-specification.h73
-rw-r--r--widgets/table/e-table-column.c291
-rw-r--r--widgets/table/e-table-config-field.c300
-rw-r--r--widgets/table/e-table-config-field.h69
-rw-r--r--widgets/table/e-table-config-no-group.glade2112
-rw-r--r--widgets/table/e-table-config.c1215
-rw-r--r--widgets/table/e-table-config.glade2181
-rw-r--r--widgets/table/e-table-config.h115
-rw-r--r--widgets/table/e-table-defines.h45
-rw-r--r--widgets/table/e-table-example-1.c308
-rw-r--r--widgets/table/e-table-example-2.c349
-rw-r--r--widgets/table/e-table-extras.c292
-rw-r--r--widgets/table/e-table-extras.h82
-rw-r--r--widgets/table/e-table-field-chooser-dialog.c224
-rw-r--r--widgets/table/e-table-field-chooser-dialog.h79
-rw-r--r--widgets/table/e-table-field-chooser-item.c711
-rw-r--r--widgets/table/e-table-field-chooser-item.h75
-rw-r--r--widgets/table/e-table-field-chooser.c302
-rw-r--r--widgets/table/e-table-field-chooser.glade123
-rw-r--r--widgets/table/e-table-field-chooser.h79
-rw-r--r--widgets/table/e-table-group-container.c1512
-rw-r--r--widgets/table/e-table-group-container.h98
-rw-r--r--widgets/table/e-table-group-leaf.c686
-rw-r--r--widgets/table/e-table-group-leaf.h90
-rw-r--r--widgets/table/e-table-group.c712
-rw-r--r--widgets/table/e-table-group.h178
-rw-r--r--widgets/table/e-table-header-item.c1896
-rw-r--r--widgets/table/e-table-header-item.h118
-rw-r--r--widgets/table/e-table-header-utils.c480
-rw-r--r--widgets/table/e-table-header-utils.h55
-rw-r--r--widgets/table/e-table-header.c952
-rw-r--r--widgets/table/e-table-header.h120
-rw-r--r--widgets/table/e-table-item.c3734
-rw-r--r--widgets/table/e-table-item.h231
-rw-r--r--widgets/table/e-table-memory-callbacks.c208
-rw-r--r--widgets/table/e-table-memory-callbacks.h91
-rw-r--r--widgets/table/e-table-memory-store.c583
-rw-r--r--widgets/table/e-table-memory-store.h138
-rw-r--r--widgets/table/e-table-memory.c277
-rw-r--r--widgets/table/e-table-memory.h76
-rw-r--r--widgets/table/e-table-model.c616
-rw-r--r--widgets/table/e-table-model.h173
-rw-r--r--widgets/table/e-table-one.c241
-rw-r--r--widgets/table/e-table-one.h57
-rw-r--r--widgets/table/e-table-scrolled.c229
-rw-r--r--widgets/table/e-table-scrolled.h76
-rw-r--r--widgets/table/e-table-search.c223
-rw-r--r--widgets/table/e-table-search.h71
-rw-r--r--widgets/table/e-table-selection-model.c347
-rw-r--r--widgets/table/e-table-selection-model.h76
-rw-r--r--widgets/table/e-table-simple.c289
-rw-r--r--widgets/table/e-table-simple.h122
-rw-r--r--widgets/table/e-table-size-test.c307
-rw-r--r--widgets/table/e-table-sort-info.c481
-rw-r--r--widgets/table/e-table-sort-info.h107
-rw-r--r--widgets/table/e-table-sorted-variable.c230
-rw-r--r--widgets/table/e-table-sorted-variable.h65
-rw-r--r--widgets/table/e-table-sorted.c310
-rw-r--r--widgets/table/e-table-sorted.h65
-rw-r--r--widgets/table/e-table-sorter.c462
-rw-r--r--widgets/table/e-table-sorter.h74
-rw-r--r--widgets/table/e-table-sorting-utils.c349
-rw-r--r--widgets/table/e-table-sorting-utils.h83
-rw-r--r--widgets/table/e-table-specification.c432
-rw-r--r--widgets/table/e-table-specification.h89
-rw-r--r--widgets/table/e-table-state.c299
-rw-r--r--widgets/table/e-table-state.h74
-rw-r--r--widgets/table/e-table-subset-variable.c250
-rw-r--r--widgets/table/e-table-subset-variable.h82
-rw-r--r--widgets/table/e-table-subset.c482
-rw-r--r--widgets/table/e-table-subset.h89
-rw-r--r--widgets/table/e-table-tooltip.h44
-rw-r--r--widgets/table/e-table-tree.h48
-rw-r--r--widgets/table/e-table-utils.c191
-rw-r--r--widgets/table/e-table-utils.h49
-rw-r--r--widgets/table/e-table-without.c392
-rw-r--r--widgets/table/e-table-without.h91
-rw-r--r--widgets/table/e-table.c3338
-rw-r--r--widgets/table/e-table.diabin4514 -> 0 bytes
-rw-r--r--widgets/table/e-table.h358
-rw-r--r--widgets/table/e-tree-memory-callbacks.c275
-rw-r--r--widgets/table/e-tree-memory-callbacks.h119
-rw-r--r--widgets/table/e-tree-memory.c717
-rw-r--r--widgets/table/e-tree-memory.h101
-rw-r--r--widgets/table/e-tree-model.c1098
-rw-r--r--widgets/table/e-tree-model.h227
-rw-r--r--widgets/table/e-tree-scrolled.c228
-rw-r--r--widgets/table/e-tree-scrolled.h75
-rw-r--r--widgets/table/e-tree-selection-model.c816
-rw-r--r--widgets/table/e-tree-selection-model.h79
-rw-r--r--widgets/table/e-tree-simple.c208
-rw-r--r--widgets/table/e-tree-simple.h85
-rw-r--r--widgets/table/e-tree-sorted-variable.c477
-rw-r--r--widgets/table/e-tree-sorted-variable.h85
-rw-r--r--widgets/table/e-tree-sorted.c1390
-rw-r--r--widgets/table/e-tree-sorted.h86
-rw-r--r--widgets/table/e-tree-table-adapter.c1174
-rw-r--r--widgets/table/e-tree-table-adapter.h95
-rw-r--r--widgets/table/e-tree.c3327
-rw-r--r--widgets/table/e-tree.h312
-rw-r--r--widgets/table/image1.pngbin1858 -> 0 bytes
-rw-r--r--widgets/table/image2.pngbin1987 -> 0 bytes
-rw-r--r--widgets/table/image3.pngbin2051 -> 0 bytes
-rw-r--r--widgets/table/remove-col.xpm22
-rw-r--r--widgets/table/sample.table45
-rw-r--r--widgets/table/spec.xml21
-rw-r--r--widgets/table/table-test.c62
-rw-r--r--widgets/table/table-test.h27
-rw-r--r--widgets/table/test-check.c221
-rw-r--r--widgets/table/test-cols.c265
-rw-r--r--widgets/table/test-table.c478
-rw-r--r--widgets/table/tree-expanded.xpm23
-rw-r--r--widgets/table/tree-unexpanded.xpm23
-rw-r--r--widgets/text/.cvsignore11
-rw-r--r--widgets/text/e-completion-callbacks.c98
-rw-r--r--widgets/text/e-completion-callbacks.h68
-rw-r--r--widgets/text/e-completion-match.c184
-rw-r--r--widgets/text/e-completion-match.h67
-rw-r--r--widgets/text/e-completion-view.c859
-rw-r--r--widgets/text/e-completion-view.h98
-rw-r--r--widgets/text/e-completion.c343
-rw-r--r--widgets/text/e-completion.h91
-rw-r--r--widgets/text/e-entry-test.c83
-rw-r--r--widgets/text/e-entry.c1392
-rw-r--r--widgets/text/e-entry.h87
-rw-r--r--widgets/text/e-table-text-model.c234
-rw-r--r--widgets/text/e-table-text-model.h64
-rw-r--r--widgets/text/e-text-model-repos.c87
-rw-r--r--widgets/text/e-text-model-repos.h69
-rw-r--r--widgets/text/e-text-model-test.c91
-rw-r--r--widgets/text/e-text-model-uri.c344
-rw-r--r--widgets/text/e-text-model-uri.h56
-rw-r--r--widgets/text/e-text-model.c600
-rw-r--r--widgets/text/e-text-model.h113
-rw-r--r--widgets/text/e-text-test.c168
-rw-r--r--widgets/text/e-text.c3871
-rw-r--r--widgets/text/e-text.h244
384 files changed, 31249 insertions, 115464 deletions
diff --git a/ChangeLog b/ChangeLog
index 6a8803bd03..7c8427f6fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,15 +1,14 @@
-2004-10-01 Jeffrey Stedfast <fejj@novell.com>
+2004-10-11 JP Rosevear <jpr@novell.com>
- * configure.in (localedir): Enable imap4 plugin by default. We
- need to get people building this and testing it.
+ * NEWS: update
-2004-10-01 JP Rosevear <jpr@novell.com>
+ * configure.in: bump version
- * configure.in: set the GETTEXT_PACKAGE to evolution-2.2
-
-2004-10-01 JP Rosevear <jpr@novell.com>
+2004-09-24 JP Rosevear <jpr@novell.com>
- * configure.in: set a GTKHTML_API_VERSION variable
+ * NEWS: update
+
+ * configure.in: bump version, requirements
2004-09-13 Not Zed <NotZed@Ximian.com>
@@ -17,23 +16,41 @@
setting from getaddrinfo call check, and default to on if the
interfaces are available.
-2004-09-17 William Jon McCann <mccann@jhu.edu>
+2004-09-14 Danilo Å egan <dsegan@gmx.net>
+
+ * configure.in: Added "bs" to ALL_LINGUAS.
- * configure.in: Fix typos in gal dependency.
+2004-09-13 JP Rosevear <jpr@novell.com>
-2004-09-16 JP Rosevear <jpr@novell.com>
+ * configure.in: bump version, requires
- * configure.in: use AC_DEFINE properly
+2004-09-13 JP Rosevear <jpr@novell.com>
-2004-09-16 JP Rosevear <jpr@novell.com>
+ Fixes #63369
+
+ * README: Update
+
+2004-09-12 Abel Cheung <maddog@linuxhall.org>
+
+ * configure.in: Added "hi" "mk" "ml" "ta" to ALL_LINGUAS.
+
+2004-09-10 Mohammad DAMT <mdamt@bisnisweb.com>
- * configure.in: bump EDS and gal requirements
+ * configure.in: Added Indonesian "id" to ALL_LINGUAS
+ * po/id.po: Added Indonesian translation
-2004-09-16 JP Rosevear <jpr@novell.com>
+2004-09-09 Runa Bhattacharjee <runab@redhat.com>
+ * configure.in: Added Bengali "bn" to ALL_LINGUAS.
- * configure.in: bump version to 2.1.0 and set base version to 2.2;
- define DEVELOPMENT here so we don't have to alter code to change
- in future
+2004-09-04 Telsa Gwynne <hobbit@aloss.ukuu.org.uk>
+
+ * configure.in: Added "cy" (Welsh) to ALL_LINGUAS.
+
+2004-08-30 JP Rosevear <jpr@novell.com>
+
+ * configure.in: hard code BASE_VERSION to 2.0; reset
+ UPGRADE_VERSION to 0 because BASE_VERSION changed; base
+ GETTEXT_PACKAGE on BASE_VERSION
2004-09-13 Tomasz KÅ‚oczko <kloczek@pld.org.pl>
@@ -134,19 +151,6 @@
* configure.in: bump version, requirements
-2004-08-24 JP Rosevear <jpr@novell.com>
-
- * configure.in (plugindir): set a plugin dir so we can easily
- install to the same place everywhere
-
-2004-08-24 JP Rosevear <jpr@novell.com>
-
- * configure.in: Check for mono support properly
-
-2004-07-05 Not Zed <NotZed@Ximian.com>
-
- * configure.in: add some mono checks.
-
2004-06-24 Pablo Saratxaga <pablo@mandrakesoft.com>
* configure.in: Added Walloon (wa) to ALL_LINGUAS.
diff --git a/NEWS b/NEWS
index e2a3d81a35..13752d3523 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,260 @@
+Evolution 2.0.2, 2004-10-11
+----------------------------
+
+Bugzilla bugs fixed (see http://bugzilla.ximian.com/show_bug.cgi):
+
+ * Addressbook
+
+ #66520 - Crash deleting addressbooks (Michael)
+ #66369 - VCard import requires blank lines between contacts (Hans)
+ #65537 - Updating Contacts Causes Crash (Hans)
+
+ * Calendar
+
+ #65932 - Crash when accessing the details of an appointment notification (Rodrigo)
+ #64683 - meeting invite expands to larger than workspace (Rodrigo and JP)
+ #66736 - crash clicking Search Clear button twice (Michael)
+ #61766 - select personal calendar/tasks by default when migrating (JP)
+ #65599 - 'Evolution 1.5' crash in 'Free/Busy' editor (Rodrigo)
+ #62053 - select GroupWise calendar by default (Siva)
+ #66164 - popup date edit drop down in correct place (JP)
+ #45951 - Scroll properly in task description (Rodrigo)
+
+ * Mail
+
+ #67170 - Unable to subscribe to the alt hierarchy (Michael)
+ #67028 - 2.0.1 compilation fails on camel-service.c: In function `camel_getaddrinfo' (Jeff)
+ #67257 - evolution busy waits looking up hostname if network down (Michael)
+ #66509 - Evolution Crashes when deleteing a news group (Michael)
+ #65828 - Fix typo in error message (Jeff)
+ #63881 - "Cannot copy or move messages into a Virtual Folder" when
+ dragging from UNMATCHED vfolder into real folder (Ed Catmur)
+ #63521 - stale / bogus pop cache file (Michael)
+ #66991 - crash creating folders (Michael)
+ #66706 - Evolution Crashes while refreshing Folder Subscriptions (Michael)
+ #67408 - Seg Fault on exit (Michael)
+ #67211 - Evolution crashes when getting summary from folder (Michael)
+ #66703 - S/MIME signing fails randomly (Jeff)
+
+ * Shell
+
+ #61285 - use better query for config pages (Michael)
+ #66216 - don't show translator-credits directly in about box (Malcolm Treddinnick)
+
+Other bugs
+
+ * Address Book
+
+ - Crash when exiting (Hans)
+
+ * Mail
+
+ - Provide error dialogs if host/name lookups fail (Jeff)
+ - Improve NNTP locking (Michael)
+ - Work with complete MBox hierarchy (Michael)
+ - Forward as inline sends attachments (Michael)
+ - Fix possible migration bug from 1.2 (Dave Malcolm)
+
+ * Other
+
+ - Updated documentation (Rodney and Novell Doc Team)
+ - Don't dereference NULL nickname or emailAddr on certificate (Michael)
+
+Updated translations:
+
+ - el (ta panta rei, Nikos Charonitakis)
+ - ja (Takeshi AIHANA)
+ - hu (Laszlo Dvornik)
+ - pt (Duarte Loreto)
+ - sq (Laurent Dhima)
+ - es (Francisco Javier F. Serrador)
+ - nl (Vincent van Adrighem, Michel Klijmij)
+ - en_CA (Adam Weinberger)
+ - zh_CN (Funda Wang)
+ - cs (Miloslav Trmac)
+ - pl (GNOME PL Team)
+ - pt_BR (Raphael Higino)
+ - sr (Danilo Segan)
+ - sr@Latn (Danilo Segan)
+ - en_GB (David Lodge)
+ - ca (Xavier Conde Rueda)
+ - ko (Changwoo Ryu)
+ - ro (Mugurel Tudor)
+ - fr (Christophe Merlet)
+ - nb (Kjartan Maraas)
+ - no (Kjartan Maraas)
+ - da (Martin Willemoes Hansen)
+ - ru (Leonid Kanter)
+ - fa (Meelad Zakaria)
+
+Evolution 2.0.1, 2004-09-24
+----------------------------
+
+Bugzilla bugs fixed (see http://bugzilla.ximian.com/show_bug.cgi):
+
+ * Addressbook
+
+ #61070 - Fix improper grammar (hannah rebekah & fazlu huq)
+ #59725 - Conduit syncing to wrong desktop record (JP)
+ #63191 - Fix contact list editor title (JP)
+ #64080 - addressbook gui component needs to be linked with libcamel (Michael)
+ #64024 - Lower pane doesn't go away when you uncheck "Preview Pane" in Contacts (Siva)
+ #64011 - Remove C99-ism (Vicent Noel)
+ #62856 - in --offline mode, still get prompted for gw addressbook password, work around (Michael)
+
+ * Calendar
+
+ #66344 - Evolution crashes added start time column to tasks (JP)
+ #63513 - G/W appointment acceptance fails ('invalid object') (Chen)
+ #60904 - Show all appointments when work week longer than 5 days (JP)
+ #66158 - Completion status is not displayed immediately (JP)
+ #59194 - Crash editing location field in event list (JP)
+ #65682 - get error deleting appointments (Chen)
+ #55172 - sync montly recurrences properly (JP)
+ #62374 - alarms no function if run over night (Rodrigo)
+ #62728 - week day heading in month view does not update after changing week start day in settings (JP)
+ #62392 - Crash on close alarm notification (Rodrigo)
+
+ * Mail
+
+ #65329 - translate standar folder names (Michael)
+ #65058 - Specific mails don't display picture but picture data (Michael)
+ #64972 - signature auto-selection in composer with Maildir account is broken (Michael)
+ #65448 - Opening a mail does not mark it read (Jeff)
+ #64974 - Allow selecting of file or folder for maildir and mh accounts (Jeff)
+ #65703 - Display reply to all icon (JP)
+ #59717 - crash checking supported authentication types (Michael)
+ #47821 - try all host names available when connecting (Michael)
+ #66199 - Image loading fails with authenticated proxy (Michael)
+ #64023 - Forget NNTP password if it was wrong (Michael)
+ #64092 - Ambiguity in nomenclature of GW Tasks in Evolution (Siva)
+
+ * Shell
+
+ #61285 - use better query for config pages (Michael)
+ #66216 - don't show translator-credits directly in about box (Malcolm Treddinnick)
+
+Other bugs
+
+ * Addressbook
+
+ - point to correct documentation file (Rodney)
+ - check for LABEL supported (Siva)
+
+ * Calendar
+
+ - Don't allow deletion of system calendar or tasks (JP)
+ - Don't allow a task to be changed to an assigned task if the backend doesn't support it (Chen)
+
+ * Mail
+
+ - Fix typo setting the root node in folder tree (Dave Malcolm)
+ - Handle 0 length token read for summary (Michael)
+ - Make SSL connections async and cancellable (Michael)
+
+Updated translations:
+ - fr (Christophe Merlet, Craig Jeffares)
+ - pl (Artur Flinta)
+ - sq (Laurent Dhima)
+ - cs (Miloslav Trmac)
+ - es (Francisco Javier F. Serrador)
+ - nl (Vincent van Adrighem)
+ - zh_CN (Funda Wang)
+ - en_CA (Adam Weinberger)
+ - it (Craig Jeffares)
+ - zh_TW (Craig Jeffares)
+ - en_GB (Gareth Owen)
+ - fa (Roozbeh Pournader)
+ - el (Nikos Charonitakis)
+ - ja (Takeshi AIHANA)
+ - pt_BR (Raphael Higino)
+ - da (Martin Willemoes Hansen)
+ - ko (Changwoo Ryu)
+ - nn (Åsmund Skjæveland)
+ - sr (Danilo Segan)
+ - hu (Laszlo Dvornik)
+ - bs Danilo Segan
+ - id (Mohammad DAMT)
+ - nb (Sigurd Gartmann)
+ - no (Sigurd Gartmann)
+ - ar (Arafat Medini))
+
+Evolution 2.0.0, 2004-09-13
+----------------------------
+
+Bugzilla bugs fixed (see http://bugzilla.ximian.com/show_bug.cgi):
+
+ * Addressbook
+
+ #59582 - Contact incompletely updated to LDAP store, address information lost/not editable (Siva)
+ #64084 - addressbook gui component needs to be linked with libcamel (Michael)
+
+ * Calendar
+
+ #65454 - Evolution crashes while opening newly received e-mail (JP)
+ #62392 - Crash on close alarm notification (Rodrigo)
+ #64800 - broken timezone selector (Rodney)
+
+ * Mail
+
+ #60515 - signature setting is not preserved changing "Autogenerated" to "None" (Michael)
+ #63377 - Crash when replying to a (specific) message (Jeff)
+ #62665 - Wrong Folder is deleted (Jeff)
+ #64377 - crash creating new folder (Michael)
+ #63456 - crash replying to E-mail (Michael)
+
+Other bugs
+
+ * Addressbook
+
+ - Confirmation dialog was showing up on contact-editor close,
+ even if there were no changes (Hans Petter)
+
+ * Calendar
+
+ - 64 bit build fix (Rodrigo)
+
+ * Misc
+
+ - new documentation (Rodney)
+
+Updated translations:
+
+ - ar (Arafat Medini)
+ - bn (Runa Bhattacharjee)
+ - cs (Miloslav Trmac)
+ - cy (Dafydd Harries, Telsa Gwynne)
+ - da (Martin Willemoes Hansen)
+ - de (Hendrik Richter)
+ - el (Nikos Charonitakis)
+ - en_CA (Adam Weinberger)
+ - en_GB (David Lodge)
+ - es (Francisco Javier F. Serrador)
+ - et (Priit Laes)
+ - fi (Ilkka Tuohela)
+ - hi (Rajesh Ranjan)
+ - hu (Laszlo Dvornik)
+ - id (Mohammad DAMT)
+ - ja (Takeshi AIHANA)
+ - ko (Changwoo Ryu)
+ - ms (Hasbullah Bin Pit)
+ - nb (Sigurd Gartmann)
+ - nl (Vincent van Adrighem)
+ - nn (Åsmund Skjæveland)
+ - no (Kjartan Maraas)
+ - pl (Artur Flinta)
+ - pt (Duarte Loreto)
+ - pt_BR (Raphael Higino)
+ - ro (Mugurel Tudor)
+ - ru (Leonid Kanter)
+ - sq (Laurent Dhima)
+ - sr (Danilo Segan)
+ - sv (Christian Rose)
+ - tr (Baris Cicek)
+ - uk (Maxim Dziumanenko)
+ - zh_CN (Funda Wang)
+ - zh_TW (Abel Cheung)
+
Evolution 1.5.94, 2004-08-27
----------------------------
@@ -810,21 +1067,6 @@ Other bugs:
(Everyone)
- Fixed druid colors. (Dan)
-Updated translations:
-
- - cs (Miloslav Trmac)
- - de (Christian Neumair)
- - es (Francisco Javier Fernandez)
- - fi (Sami Pesonen)
- - hu (Andras Timar)
- - it (Marco Ciampa)
- - no (Kjartan Maraas)
- - pt (Duarte Loreto)
- - pt_BR (Gustavo Maciel Dias Vieira)
- - sk (Stanislav Visnovsky)
- - sv (Christian Rose)
- - uk (Yuriy Syrota)
- - zh_TW (Chao-Hsiung Liao)
Evolution 1.3.1, 2003-03-05
diff --git a/README b/README
index 56b4e1820f..4ec10e3c1b 100644
--- a/README
+++ b/README
@@ -1,14 +1,14 @@
Evolution is the integrated mail, calendar and address book suite from
-Ximian, Inc.
+the Evolution Team.
-See http://www.ximian.com/products/evolution for more information.
+See http://www.gnome.org/projects/evolution for more information.
If you are using Evolution, you may wish to subscribe to the Evolution
users mailing list. If you are interested in contributing to
development on it, you should certainly subscribe to the Evolution
Hackers mailing list. Visit
- http://developer.ximian.com/community/lists.html
+ http://lists.ximian.com
to subscribe or view archives of the Ximian mailing lists.
@@ -20,8 +20,8 @@ to change).
There is also a #evolution IRC channel on irc.gnome.org.
Help for Evolution is available in the user manual (select "Help" from
-the menu after running the application), at the Ximian knowledge base
-(http://support.ximian.com), in the Evolution man page (run "man
+the menu after running the application), at the Novell knowledge base
+(http://support.novell.com), in the Evolution man page (run "man
evolution" at the command line), and in the --help strings (run
"evolution --help" at the command line).
@@ -31,15 +31,12 @@ The rest of this file is dedicated to building Evolution.
DEPENDENCIES
------------
-In order to build Evolution you need to have the full set of GNOME 2
-or GNOME 2.2 development libraries installed.
+In order to build Evolution you need to have the full set of GNOME 2.2
+(or greater) development libraries installed.
-GNOME 2 comes with most of the modern distributions, so in most cases
-it should be enough to just install all the devel packages from your
-distribution. If, on the other hand, you want to build GNOME 2 from
-source, please refer to this page:
-
- http://gnome.org/start/2.2/notes/rninstallation.html
+GNOME 2.2 or greater comes with most of the modern distributions, so
+in most cases it should be enough to just install all the devel
+packages from your distribution.
Please make sure you have the most recent versions of the libraries
installed, since bugs in the libraries can cause bugs in Evolution.
@@ -47,16 +44,6 @@ installed, since bugs in the libraries can cause bugs in Evolution.
Additional dependencies, besides the stock GNOME libraries (the
dependencies should be compiled in the order they are listed here):
- * [If compiling against GNOME 2.0] libgnomeprint and
- libgnomeprintui 2.2.0 or later
-
- These library come with GNOME 2.2 installations, but not
- with GNOME 2.0 ones. The source code can be downloaded from
- the following locations:
-
- ftp://ftp.gnome.org/pub/gnome/sources/libgnomeprint
- ftp://ftp.gnome.org/pub/gnome/sources/libgnomeprintui
-
* [If compiling against GNOME 2.2] libgnomecanvas 2.2.0.2 or
later
@@ -65,28 +52,33 @@ dependencies should be compiled in the order they are listed here):
Evolution exposes a bug in the older versions of the library
which causes a crash.
- If you have a GNOME 2.0 installation, libgnomecanvas 2.0 is
- safe to use.
+ * [If compiling against GNOME 2.2] libbonobo and libbonoboui 2.4
- * gtkhtml 3.0.1 or later
+ * gnome-icon-theme 1.2.0 or later
- ftp://ftp.gnome.org/pub/gnome/sources/gtkhtml
+ * ORBit 2.9.8 or later
- * gal 1.99.8 or later
+ ftp://ftp.gnome.org/pub/gnome/sources/libsoup
+
+ * libsoup 2.2.0 or later
- ftp://ftp.gnome.org/pub/gnome/sources/gal
+ ftp://ftp.gnome.org/pub/gnome/sources/libsoup
- * Berkeley's libdb 3.1.17
+ * evolution-data-server 1.0.0 or later
- It is important to use *exactly* this version, and not a
- later one, to compile Evolution. Please check the "Building
- Berkeley DB" section below for more information.
+ ftp://ftp.gnome.org/pub/gnome/sources/evolution-data-server
- ftp://ftp.ximian.com/pub/source/evolution
+ * gtkhtml 3.2.0 or later
+
+ ftp://ftp.gnome.org/pub/gnome/sources/gtkhtml
+
+ * gal 2.2.0 or later
+
+ ftp://ftp.gnome.org/pub/gnome/sources/gal
* [Optional] Mozilla NSPR/NSS libraries
- These are needed if you want to compile Evolution with SSL
+ These are needed if you want to compile Evolution with SSL and S/MIME
support.
http://www.mozilla.org/
@@ -109,70 +101,6 @@ dependencies should be compiled in the order they are listed here):
ftp://ftp.gnome.org/pub/gnome/sources/gnome-spell
-
-COMPILING BERKELEY DB
----------------------
-
- --- IMPORTANT WARNING ---
-
- The on-disk format of DB files has been changing between versions 2, 3
- and 4. Also, because of the libdb API, there is no way to easily
- handle the different formats from within the application. For this
- reason, Evolution has chosen to use one specific version of the
- library (version 3) and stick to it, so that users do not need to
- convert their addressbook files to use them with different version of
- Evolution.
-
- That's why Evolution REQUIRES libdb 3.1.17, and NO OTHER VERSION.
-
- If you force the check to accept a version different from 3.1.17, your
- binary of Evolution will be using a different format from the chosen
- one; this means that it will not be able to read addressbook databases
- created by other versions of Evolution which were compiled in the
- standard way. Also, we DO NOT GUARRANTEE that Evolution will work
- with different versions of libdb at all, even if it can be trivially
- made to compile against them.
-
- SPECIAL NOTE FOR BINARY PACKAGERS:
-
- If you are making binary packages for end-users (e.g. if you are a
- distribution vendor), please statically link Evolution to Berkeley
- DB 3.1.17, as mandated by the configure.in check. DO NOT patch
- configure.in to work around the check. Forcing the check to link
- to a different version of the library will only give headaches and
- pain to your users, who will see their addressbook disappear and
- will complain to us (the Evolution team) about losing their data.
-
- Besides, libdb will be linked statically, which means that your
- distribution doesn't actually need to ship DB 3.1.17 itself
- separately.
-
- The Evolution team will be infinitely grateful for your
- co-operation. Thanks!
-
-If you don't have version 3.1.17 installed on your system or Evolution
-doesn't detect it for some reason, here is a way to get Evolution to
-link to it without messing up your system installation.
-
- * Install the content of the tarball somewhere *other* than the
- evolution source tree, e.g: NOT evolution/db-3.1.17 .
-
- * Compile according to instructions, but installing into some custom
- prefix, for example:
-
- ../dist/configure --prefix=/home/user/berkeleydb-3.1.17
-
- * Configure Evolution specifying that it has to look for the DB
- library there, for example:
-
- ./configure --prefix=/opt/gnome
- --with-db3-includes=/home/user/berkeleydb-3.1.17/include
- --with-db3-libs=/home/user/berkeleydb-3.1.17/lib
-
-Evolution links statically to the library, so after you have compiled
-Evolution you can remove the installed library from your system.
-
-
CONFIGURING EVOLUTION
---------------------
diff --git a/a11y/e-table/.cvsignore b/a11y/e-table/.cvsignore
deleted file mode 100644
index 5b48d3f593..0000000000
--- a/a11y/e-table/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.libs
-Makefile.in
-Makefile
-*.la
diff --git a/a11y/e-table/gal-a11y-e-cell-popup.c b/a11y/e-table/gal-a11y-e-cell-popup.c
deleted file mode 100644
index a3de45afb3..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-popup.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* vim:expandtab:shiftwidth=8:tabstop=8:
- */
-/* Evolution Accessibility: gal-a11y-e-cell-popup.h
- *
- * Copyright (C) 2003 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * 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: Yang Wu <yang.wu@sun.com> Sun Microsystem Inc., 2003
- *
- */
-
-#include <config.h>
-#include <gal/e-table/e-cell-popup.h>
-#include "gal-a11y-e-cell-popup.h"
-#include "gal-a11y-e-cell-registry.h"
-#include "gal-a11y-util.h"
-#include <atk/atkobject.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkwidget.h>
-
-static AtkObjectClass *parent_class = NULL;
-#define PARENT_TYPE (gal_a11y_e_cell_get_type ())
-
-static void gal_a11y_e_cell_popup_class_init (GalA11yECellPopupClass *klass);
-static void popup_cell_action (GalA11yECell *cell);
-
-/**
- * gal_a11y_e_cell_popup_get_type:
- * @void:
- *
- * Registers the &GalA11yECellPopup class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yECellPopup class.
- **/
-GType
-gal_a11y_e_cell_popup_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yECellPopupClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gal_a11y_e_cell_popup_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yECellPopup),
- 0,
- (GInstanceInitFunc) NULL,
- NULL /* value_cell_popup */
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yECellPopup", &info, 0);
- gal_a11y_e_cell_type_add_action_interface (type);
- }
-
- return type;
-}
-
-static void
-gal_a11y_e_cell_popup_class_init (GalA11yECellPopupClass *klass)
-{
- parent_class = g_type_class_ref (PARENT_TYPE);
-}
-
-AtkObject *
-gal_a11y_e_cell_popup_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- AtkObject *a11y;
- GalA11yECell *cell;
- ECellPopup *popupcell;
- ECellView* child_view = NULL;
-
- popupcell= E_CELL_POPUP(cell_view->ecell);
-
- if (popupcell && popupcell->popup_cell_view)
- child_view = popupcell->popup_cell_view->child_view;
-
- if (child_view && child_view->ecell) {
- a11y = gal_a11y_e_cell_registry_get_object (NULL,
- item,
- child_view,
- parent,
- model_col,
- view_col,
- row);
- } else {
- a11y = g_object_new (GAL_A11Y_TYPE_E_CELL_POPUP, NULL);
- gal_a11y_e_cell_construct (a11y,
- item,
- cell_view,
- parent,
- model_col,
- view_col,
- row);
- }
- g_return_val_if_fail (a11y != NULL, NULL);
- cell = GAL_A11Y_E_CELL(a11y);
- gal_a11y_e_cell_add_action (cell,
- "popup", /* action name*/
- "popup a child", /* action description */
- "<Alt>Down", /* action keybinding */
- popup_cell_action);
-
- a11y->role = ATK_ROLE_TABLE_CELL;
- return a11y;
-}
-
-static void
-popup_cell_action (GalA11yECell *cell)
-{
- gint finished;
- GdkEvent event;
-
- event.key.type = GDK_KEY_PRESS;
- event.key.window = GTK_LAYOUT(GNOME_CANVAS_ITEM(cell->item)->canvas)->bin_window;;
- event.key.send_event = TRUE;
- event.key.time = GDK_CURRENT_TIME;
- event.key.state = GDK_MOD1_MASK;
- event.key.keyval = GDK_Down;
-
- g_signal_emit_by_name (cell->item, "event", &event, &finished);
-}
diff --git a/a11y/e-table/gal-a11y-e-cell-popup.h b/a11y/e-table/gal-a11y-e-cell-popup.h
deleted file mode 100644
index 5809f9b4f4..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-popup.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* vim:expandtab:shiftwidth=8:tabstop=8:
- */
-/* Evolution Accessibility: gal-a11y-e-cell-popup.h
- *
- * Copyright (C) 2003 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * 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: Yang Wu <yang.wu@sun.com> Sun Microsystem Inc., 2003
- *
- */
-
-#ifndef __GAL_A11Y_E_CELL_POPUP_H__
-#define __GAL_A11Y_E_CELL_POPUP_H__
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-item.h>
-#include <a11y/e-table/gal-a11y-e-cell.h>
-#include <atk/atkgobjectaccessible.h>
-
-#define GAL_A11Y_TYPE_E_CELL_POPUP (gal_a11y_e_cell_popup_get_type ())
-#define GAL_A11Y_E_CELL_POPUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL_POPUP, GalA11yECellPopup))
-#define GAL_A11Y_E_CELL_POPUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_CELL_POPUP, GalA11yECellPopupClass))
-#define GAL_A11Y_IS_E_CELL_POPUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL_POPUP))
-#define GAL_A11Y_IS_E_CELL_POPUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL_POPUP))
-
-typedef struct _GalA11yECellPopup GalA11yECellPopup;
-typedef struct _GalA11yECellPopupClass GalA11yECellPopupClass;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yECellPopupPrivate comes right after the parent class structure.
- **/
-struct _GalA11yECellPopup {
- GalA11yECell object;
-};
-
-struct _GalA11yECellPopupClass {
- GalA11yECellClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_cell_popup_get_type (void);
-AtkObject *gal_a11y_e_cell_popup_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-
-#endif /* ! __GAL_A11Y_E_CELL_POPUP_H__ */
diff --git a/a11y/e-table/gal-a11y-e-cell-registry.c b/a11y/e-table/gal-a11y-e-cell-registry.c
deleted file mode 100644
index 7110179554..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-registry.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-e-cell-registry.h"
-#include "gal-a11y-e-cell.h"
-
-static GObjectClass *parent_class;
-static GalA11yECellRegistry *default_registry;
-#define PARENT_TYPE (G_TYPE_OBJECT)
-
-struct _GalA11yECellRegistryPrivate {
- GHashTable *table;
-};
-
-/* Static functions */
-
-static void
-gal_a11y_e_cell_registry_finalize (GObject *obj)
-{
- GalA11yECellRegistry *registry = GAL_A11Y_E_CELL_REGISTRY (obj);
-
- g_hash_table_destroy (registry->priv->table);
- g_free (registry->priv);
-}
-
-static void
-gal_a11y_e_cell_registry_class_init (GalA11yECellRegistryClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->finalize = gal_a11y_e_cell_registry_finalize;
-}
-
-static void
-gal_a11y_e_cell_registry_init (GalA11yECellRegistry *registry)
-{
- registry->priv = g_new (GalA11yECellRegistryPrivate, 1);
- registry->priv->table = g_hash_table_new (NULL, NULL);
-}
-
-/**
- * gal_a11y_e_cell_registry_get_type:
- * @void:
- *
- * Registers the &GalA11yECellRegistry class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yECellRegistry class.
- **/
-GType
-gal_a11y_e_cell_registry_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yECellRegistryClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gal_a11y_e_cell_registry_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yECellRegistry),
- 0,
- (GInstanceInitFunc) gal_a11y_e_cell_registry_init,
- NULL /* value_cell */
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yECellRegistry", &info, 0);
- }
-
- return type;
-}
-
-static void
-init_default_registry (void)
-{
- if (default_registry == NULL) {
- default_registry = g_object_new (gal_a11y_e_cell_registry_get_type(), NULL);
- }
-}
-
-
-AtkObject *
-gal_a11y_e_cell_registry_get_object (GalA11yECellRegistry *registry,
- ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- GalA11yECellRegistryFunc func = NULL;
- GType type;
-
- if (registry == NULL) {
- init_default_registry ();
- registry = default_registry;
- }
-
- type = GTK_OBJECT_TYPE (cell_view->ecell);
- while (func == NULL && type != 0) {
- func = g_hash_table_lookup (registry->priv->table, GINT_TO_POINTER (type));
- type = g_type_parent (type);
- }
-
- if (func)
- return func (item, cell_view, parent, model_col, view_col, row);
- else
- return gal_a11y_e_cell_new (item, cell_view, parent, model_col, view_col, row);
-}
-
-void
-gal_a11y_e_cell_registry_add_cell_type (GalA11yECellRegistry *registry,
- GType type,
- GalA11yECellRegistryFunc func)
-{
- if (registry == NULL) {
- init_default_registry ();
- registry = default_registry;
- }
-
- g_hash_table_insert (registry->priv->table, GINT_TO_POINTER (type), func);
-}
diff --git a/a11y/e-table/gal-a11y-e-cell-registry.h b/a11y/e-table/gal-a11y-e-cell-registry.h
deleted file mode 100644
index eecd41139c..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-registry.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_CELL_REGISTRY_H__
-#define __GAL_A11Y_E_CELL_REGISTRY_H__
-
-#include <glib-object.h>
-#include <atk/atkobject.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-cell.h>
-
-#define GAL_A11Y_TYPE_E_CELL_REGISTRY (gal_a11y_e_cell_registry_get_type ())
-#define GAL_A11Y_E_CELL_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL_REGISTRY, GalA11yECellRegistry))
-#define GAL_A11Y_E_CELL_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_CELL_REGISTRY, GalA11yECellRegistryClass))
-#define GAL_A11Y_IS_E_CELL_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL_REGISTRY))
-#define GAL_A11Y_IS_E_CELL_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL_REGISTRY))
-
-typedef struct _GalA11yECellRegistry GalA11yECellRegistry;
-typedef struct _GalA11yECellRegistryClass GalA11yECellRegistryClass;
-typedef struct _GalA11yECellRegistryPrivate GalA11yECellRegistryPrivate;
-
-typedef AtkObject *(*GalA11yECellRegistryFunc) (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-
-struct _GalA11yECellRegistry {
- GObject object;
-
- GalA11yECellRegistryPrivate *priv;
-};
-
-struct _GalA11yECellRegistryClass {
- GObjectClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_cell_registry_get_type (void);
-AtkObject *gal_a11y_e_cell_registry_get_object (GalA11yECellRegistry *registry,
- ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-void gal_a11y_e_cell_registry_add_cell_type (GalA11yECellRegistry *registry,
- GType type,
- GalA11yECellRegistryFunc func);
-
-#endif /* ! __GAL_A11Y_E_CELL_REGISTRY_H__ */
diff --git a/a11y/e-table/gal-a11y-e-cell-text.c b/a11y/e-table/gal-a11y-e-cell-text.c
deleted file mode 100644
index d94a3640a3..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-text.c
+++ /dev/null
@@ -1,570 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-#include "gal-a11y-e-cell-text.h"
-#include "gal-a11y-util.h"
-#include <gal/e-table/e-cell-text.h>
-#include <atk/atkobject.h>
-#include <atk/atktext.h>
-#include <atk/atkeditabletext.h>
-#include <atk/atkaction.h>
-
-#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yECellTextClass))
-static AtkObjectClass *parent_class;
-#define PARENT_TYPE (gal_a11y_e_cell_get_type ())
-
-/* Static functions */
-static G_CONST_RETURN gchar*
-ect_get_name (AtkObject * a11y)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
- return e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
-}
-
-static gchar *
-ect_get_text (AtkText *text,
- gint start_offset,
- gint end_offset)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
- gchar *ret_val;
- gchar *full_text = e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
-
- if (end_offset == -1)
- end_offset = strlen (full_text);
- else
- end_offset = g_utf8_offset_to_pointer (full_text, end_offset) - full_text;
-
- start_offset = g_utf8_offset_to_pointer (full_text, start_offset) - full_text;
-
- ret_val = g_strndup (full_text + start_offset, end_offset - start_offset);
-
- e_cell_text_free_text (ect, full_text);
-
- return ret_val;
-}
-
-static gchar *
-ect_get_text_after_offset (AtkText *text,
- gint offset,
- AtkTextBoundary boundary_type,
- gint *start_offset,
- gint *end_offset)
-{
- /* Unimplemented */
- return NULL;
-}
-
-static gchar *
-ect_get_text_at_offset (AtkText *text,
- gint offset,
- AtkTextBoundary boundary_type,
- gint *start_offset,
- gint *end_offset)
-{
- /* Unimplemented */
- return NULL;
-}
-
-static gunichar
-ect_get_character_at_offset (AtkText *text,
- gint offset)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
- gunichar ret_val;
- gchar *at_offset;
- gchar *full_text = e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
- at_offset = g_utf8_offset_to_pointer (full_text, offset);
- ret_val = g_utf8_get_char_validated (at_offset, -1);
- e_cell_text_free_text (ect, full_text);
-
- return ret_val;
-}
-
-
-static gchar*
-ect_get_text_before_offset (AtkText *text,
- gint offset,
- AtkTextBoundary boundary_type,
- gint *start_offset,
- gint *end_offset)
-{
- /* Unimplemented */
- return NULL;
-}
-
-
-static gint
-ect_get_caret_offset (AtkText *text)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = NULL;
- gint start, end;
-
- g_return_val_if_fail (gaec && gaec->cell_view && gaec->cell_view->ecell && E_IS_CELL_TEXT (gaec->cell_view->ecell), -1);
- ect = E_CELL_TEXT (gaec->cell_view->ecell);
-
- if (e_cell_text_get_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- &start, &end)) {
- gchar *full_text = e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
- end = g_utf8_pointer_to_offset (full_text, full_text + end);
- e_cell_text_free_text (ect, full_text);
-
- return end;
- }
- else
- return -1;
-}
-
-static AtkAttributeSet*
-ect_get_run_attributes (AtkText *text,
- gint offset,
- gint *start_offset,
- gint *end_offset)
-{
- /* Unimplemented */
- return NULL;
-}
-
-
-static AtkAttributeSet*
-ect_get_default_attributes (AtkText *text)
-{
- /* Unimplemented */
- return NULL;
-}
-
-
-static void
-ect_get_character_extents (AtkText *text,
- gint offset,
- gint *x,
- gint *y,
- gint *width,
- gint *height,
- AtkCoordType coords)
-{
- /* Unimplemented */
-}
-
-
-static gint
-ect_get_character_count (AtkText *text)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
- gint ret_val;
-
- gchar *full_text = e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
-
- ret_val = g_utf8_strlen (full_text, -1);
- e_cell_text_free_text (ect, full_text);
- return ret_val;
-}
-
-
-static gint
-ect_get_offset_at_point (AtkText *text,
- gint x,
- gint y,
- AtkCoordType coords)
-{
- /* Unimplemented */
- return 0;
-}
-
-
-static gint
-ect_get_n_selections (AtkText *text)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- gint selection_start, selection_end;
- if (e_cell_text_get_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- &selection_start,
- &selection_end)
- && selection_start != selection_end)
- return 1;
- return 0;
-}
-
-
-static gchar*
-ect_get_selection (AtkText *text,
- gint selection_num,
- gint *start_offset,
- gint *end_offset)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
- gchar *ret_val;
- gint selection_start, selection_end;
-
- if (selection_num == 0
- && e_cell_text_get_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- &selection_start,
- &selection_end)
- && selection_start != selection_end) {
- gint real_start, real_end, len;
- gchar *full_text = e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
- len = strlen (full_text);
- real_start = MIN (selection_start, selection_end);
- real_end = MAX (selection_start, selection_end);
- real_start = MIN (MAX (0, real_start), len);
- real_end = MIN (MAX (0, real_end), len);
-
- ret_val = g_strndup (full_text + real_start, real_end - real_start);
-
- real_start = g_utf8_pointer_to_offset (full_text, full_text + real_start);
- real_end = g_utf8_pointer_to_offset (full_text, full_text + real_end);
-
- if (start_offset)
- *start_offset = real_start;
- if (end_offset)
- *end_offset = real_end;
- e_cell_text_free_text (ect, full_text);
- } else {
- if (start_offset)
- *start_offset = 0;
- if (end_offset)
- *end_offset = 0;
- ret_val = NULL;
- }
-
- return ret_val;
-}
-
-
-static gboolean
-ect_add_selection (AtkText *text,
- gint start_offset,
- gint end_offset)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
-
- if (start_offset != end_offset) {
- gint real_start, real_end, len;
- gchar *full_text =
- e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
-
- len = g_utf8_strlen (full_text, -1);
- if (end_offset == -1)
- end_offset = len;
-
- real_start = MIN (start_offset, end_offset);
- real_end = MAX (start_offset, end_offset);
-
- real_start = MIN (MAX (0, real_start), len);
- real_end = MIN (MAX (0, real_end), len);
-
- real_start = g_utf8_offset_to_pointer (full_text, real_start) - full_text;
- real_end = g_utf8_offset_to_pointer (full_text, real_end) - full_text;
- e_cell_text_free_text (ect, full_text);
-
- if (e_cell_text_set_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- real_start, real_end)) {
- g_signal_emit_by_name (ATK_OBJECT(text), "text_selection_changed");
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-
-static gboolean
-ect_remove_selection (AtkText *text,
- gint selection_num)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- gint selection_start, selection_end;
-
- if (selection_num == 0
- && e_cell_text_get_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- &selection_start,
- &selection_end)
- && selection_start != selection_end
- && e_cell_text_set_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- selection_end, selection_end)) {
- g_signal_emit_by_name (ATK_OBJECT(text), "text_selection_changed");
- return TRUE;
- }
- else
- return FALSE;
-}
-
-
-static gboolean
-ect_set_selection (AtkText *text,
- gint selection_num,
- gint start_offset,
- gint end_offset)
-{
- if (selection_num == 0) {
- atk_text_add_selection (text, start_offset, end_offset);
- return TRUE;
- }
- else
- return FALSE;
-}
-
-
-static gboolean
-ect_set_caret_offset (AtkText *text,
- gint offset)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
- gchar *full_text;
- gint len;
-
- full_text = e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
-
- len = g_utf8_strlen (full_text, -1);
- if (offset == -1)
- offset = len;
- else
- offset = MIN (MAX (0, offset), len);
-
- offset = g_utf8_offset_to_pointer (full_text, offset) - full_text;
-
- e_cell_text_free_text (ect, full_text);
-
- return e_cell_text_set_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- offset, offset);
-}
-
-static gboolean
-ect_set_run_attributes (AtkEditableText *text,
- AtkAttributeSet *attrib_set,
- gint start_offset,
- gint end_offset)
-{
- /* Unimplemented */
- return FALSE;
-}
-
-static void
-ect_set_text_contents (AtkEditableText *text,
- const gchar *string)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
-
- e_cell_text_set_value (ect, gaec->item->table_model, gaec->model_col, gaec->row, string);
- e_table_item_enter_edit (gaec->item, gaec->view_col, gaec->row);
-}
-
-static void
-ect_insert_text (AtkEditableText *text,
- const gchar *string,
- gint length,
- gint *position)
-{
- /* Utf8 unimplemented */
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
-
- gchar *full_text = e_cell_text_get_text (ect, gaec->item->table_model, gaec->model_col, gaec->row);
- gchar *result = g_strdup_printf ("%.*s%.*s%s", *position, full_text, length, string, full_text + *position);
-
- e_cell_text_set_value (ect, gaec->item->table_model, gaec->model_col, gaec->row, result);
-
- *position += length;
-
- g_free (result);
- e_cell_text_free_text (ect, full_text);
-}
-
-static void
-ect_copy_text (AtkEditableText *text,
- gint start_pos,
- gint end_pos)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- if (start_pos != end_pos
- && atk_text_set_selection (ATK_TEXT (text), 0, start_pos, end_pos))
- e_cell_text_copy_clipboard (gaec->cell_view,
- gaec->view_col, gaec->row);
-}
-
-static void
-ect_delete_text (AtkEditableText *text,
- gint start_pos,
- gint end_pos)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- if (start_pos != end_pos
- && atk_text_set_selection (ATK_TEXT (text), 0, start_pos, end_pos))
- e_cell_text_delete_selection (gaec->cell_view,
- gaec->view_col, gaec->row);
-}
-
-static void
-ect_cut_text (AtkEditableText *text,
- gint start_pos,
- gint end_pos)
-{
- ect_copy_text (text, start_pos, end_pos);
- ect_delete_text (text, start_pos, end_pos);
-}
-
-static void
-ect_paste_text (AtkEditableText *text,
- gint position)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
-
- e_table_item_enter_edit (gaec->item, gaec->view_col, gaec->row);
-
- if (atk_text_set_caret_offset (ATK_TEXT (text), position))
- e_cell_text_paste_clipboard (gaec->cell_view,
- gaec->view_col, gaec->row);
-}
-
-static void
-ect_do_action_edit (AtkAction *action)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (action);
- e_table_item_enter_edit (a11y->item, a11y->view_col, a11y->row);
-}
-
-static void
-ect_atk_text_iface_init (AtkTextIface *iface)
-{
- iface->get_text = ect_get_text;
- iface->get_text_after_offset = ect_get_text_after_offset;
- iface->get_text_at_offset = ect_get_text_at_offset;
- iface->get_character_at_offset = ect_get_character_at_offset;
- iface->get_text_before_offset = ect_get_text_before_offset;
- iface->get_caret_offset = ect_get_caret_offset;
- iface->get_run_attributes = ect_get_run_attributes;
- iface->get_default_attributes = ect_get_default_attributes;
- iface->get_character_extents = ect_get_character_extents;
- iface->get_character_count = ect_get_character_count;
- iface->get_offset_at_point = ect_get_offset_at_point;
- iface->get_n_selections = ect_get_n_selections;
- iface->get_selection = ect_get_selection;
- iface->add_selection = ect_add_selection;
- iface->remove_selection = ect_remove_selection;
- iface->set_selection = ect_set_selection;
- iface->set_caret_offset = ect_set_caret_offset;
-}
-
-static void
-ect_atk_editable_text_iface_init (AtkEditableTextIface *iface)
-{
- iface->set_run_attributes = ect_set_run_attributes;
- iface->set_text_contents = ect_set_text_contents;
- iface->insert_text = ect_insert_text;
- iface->copy_text = ect_copy_text;
- iface->cut_text = ect_cut_text;
- iface->delete_text = ect_delete_text;
- iface->paste_text = ect_paste_text;
-}
-
-static void
-ect_class_init (GalA11yECellTextClass *klass)
-{
- AtkObjectClass *a11y = ATK_OBJECT_CLASS (klass);
- parent_class = g_type_class_ref (PARENT_TYPE);
- a11y->get_name = ect_get_name;
-}
-
-static void
-ect_init (GalA11yECellText *a11y)
-{
- gal_a11y_e_cell_add_action (GAL_A11Y_E_CELL (a11y),
- "edit",
- "begin editing this cell",
- NULL,
- (ACTION_FUNC)ect_do_action_edit);
-}
-
-/**
- * gal_a11y_e_cell_text_get_type:
- * @void:
- *
- * Registers the &GalA11yECellText class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yECellText class.
- **/
-GType
-gal_a11y_e_cell_text_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yECellTextClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) ect_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yECellText),
- 0,
- (GInstanceInitFunc) ect_init,
- NULL /* value_cell_text */
- };
-
- static const GInterfaceInfo atk_text_info = {
- (GInterfaceInitFunc) ect_atk_text_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- static const GInterfaceInfo atk_editable_text_info = {
- (GInterfaceInitFunc) ect_atk_editable_text_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yECellText", &info, 0);
- g_type_add_interface_static (type, ATK_TYPE_TEXT, &atk_text_info);
- g_type_add_interface_static (type, ATK_TYPE_EDITABLE_TEXT, &atk_editable_text_info);
- gal_a11y_e_cell_type_add_action_interface (type);
- }
-
- return type;
-}
-
-AtkObject *
-gal_a11y_e_cell_text_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- AtkObject *a11y;
-
- a11y = g_object_new (gal_a11y_e_cell_text_get_type (), NULL);
-
- gal_a11y_e_cell_construct (a11y,
- item,
- cell_view,
- parent,
- model_col,
- view_col,
- row);
- return a11y;
-}
diff --git a/a11y/e-table/gal-a11y-e-cell-text.h b/a11y/e-table/gal-a11y-e-cell-text.h
deleted file mode 100644
index 3d9a4447be..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-text.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_CELL_TEXT_H__
-#define __GAL_A11Y_E_CELL_TEXT_H__
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-cell-text.h>
-#include <a11y/e-table/gal-a11y-e-cell.h>
-
-#define GAL_A11Y_TYPE_E_CELL_TEXT (gal_a11y_e_cell_text_get_type ())
-#define GAL_A11Y_E_CELL_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL_TEXT, GalA11yECellText))
-#define GAL_A11Y_E_CELL_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_CELL_TEXT, GalA11yECellTextClass))
-#define GAL_A11Y_IS_E_CELL_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL_TEXT))
-#define GAL_A11Y_IS_E_CELL_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL_TEXT))
-
-typedef struct _GalA11yECellText GalA11yECellText;
-typedef struct _GalA11yECellTextClass GalA11yECellTextClass;
-typedef struct _GalA11yECellTextPrivate GalA11yECellTextPrivate;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yECellTextPrivate comes right after the parent class structure.
- **/
-struct _GalA11yECellText {
- GalA11yECell object;
-};
-
-struct _GalA11yECellTextClass {
- GalA11yECellClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_cell_text_get_type (void);
-AtkObject *gal_a11y_e_cell_text_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-
-#endif /* ! __GAL_A11Y_E_CELL_TEXT_H__ */
diff --git a/a11y/e-table/gal-a11y-e-cell-toggle.c b/a11y/e-table/gal-a11y-e-cell-toggle.c
deleted file mode 100644
index 0d01028cc9..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-toggle.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <gtk/gtk.h>
-#include "gal-a11y-e-cell-toggle.h"
-#include <gal/e-table/e-cell-toggle.h>
-#include <gal/e-table/e-table-model.h>
-
-#define PARENT_TYPE (gal_a11y_e_cell_get_type ())
-static GObjectClass *parent_class;
-
-static void gal_a11y_e_cell_toggle_class_init (GalA11yECellToggleClass *klass);
-
-static void
-gal_a11y_e_cell_toggle_dispose (GObject *object)
-{
- GalA11yECellToggle *a11y = GAL_A11Y_E_CELL_TOGGLE (object);
-
- ETableModel *e_table_model = GAL_A11Y_E_CELL (a11y)->item->table_model;
-
- if (e_table_model)
- g_signal_handler_disconnect (e_table_model, a11y->model_id);
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
-
-GType
-gal_a11y_e_cell_toggle_get_type (void)
-{
- static GType type = 0;
-
- if (!type)
- {
- static const GTypeInfo tinfo =
- {
- sizeof (GalA11yECellToggleClass),
- (GBaseInitFunc) NULL, /* base init */
- (GBaseFinalizeFunc) NULL, /* base finalize */
- (GClassInitFunc) gal_a11y_e_cell_toggle_class_init, /* class init */
- (GClassFinalizeFunc) NULL, /* class finalize */
- NULL, /* class data */
- sizeof (GalA11yECellToggle), /* instance size */
- 0, /* nb preallocs */
- NULL, /* instance init */
- NULL /* value table */
- };
-
-
- type = g_type_register_static (GAL_A11Y_TYPE_E_CELL,
- "GalA11yECellToggle", &tinfo, 0);
- gal_a11y_e_cell_type_add_action_interface (type);
-
- }
- return type;
-}
-
-
-static void
-gal_a11y_e_cell_toggle_class_init (GalA11yECellToggleClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = gal_a11y_e_cell_toggle_dispose;
- parent_class = g_type_class_ref (PARENT_TYPE);
-}
-
-static void
-toggle_cell_action (GalA11yECell *cell)
-{
- gint finished;
- GdkEventButton event;
- gint x, y, width, height;
- gint row, col;
-
- row = cell->row;
- col = cell->view_col;
-
- e_table_item_get_cell_geometry (cell->item, &row, &col,
- &x, &y, &width, &height);
-
- event.x = x + width / 2 + (int)(GNOME_CANVAS_ITEM (cell->item)->x1);
- event.y = y + height / 2 + (int)(GNOME_CANVAS_ITEM (cell->item)->y1);
-
- event.type = GDK_BUTTON_PRESS;
- event.window = GTK_LAYOUT(GNOME_CANVAS_ITEM(cell->item)->canvas)->bin_window;
- event.button = 1;
- event.send_event = TRUE;
- event.time = GDK_CURRENT_TIME;
- event.axes = NULL;
-
- g_signal_emit_by_name (cell->item, "event", &event, &finished);
-}
-
-static void
-model_change_cb (ETableModel *etm,
- gint row,
- gint col,
- GalA11yECell *cell)
-{
- gint value;
-
- if (col == cell->model_col && row == cell->row) {
-
- value = GPOINTER_TO_INT (
- e_table_model_value_at (cell->cell_view->e_table_model,
- cell->model_col, cell->row));
- if (value)
- gal_a11y_e_cell_add_state (cell, ATK_STATE_CHECKED, TRUE);
- else
- gal_a11y_e_cell_remove_state (cell, ATK_STATE_CHECKED, TRUE);
- }
-}
-
-
-AtkObject*
-gal_a11y_e_cell_toggle_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- AtkObject *a11y;
- GalA11yECell *cell;
- GalA11yECellToggle *toggle_cell;
- gint value;
-
- a11y = ATK_OBJECT(g_object_new (GAL_A11Y_TYPE_E_CELL_TOGGLE, NULL));
-
- g_return_val_if_fail (a11y != NULL, NULL);
-
- cell = GAL_A11Y_E_CELL(a11y);
- toggle_cell = GAL_A11Y_E_CELL_TOGGLE(a11y);
- a11y->role = ATK_ROLE_TABLE_CELL;
-
- gal_a11y_e_cell_construct (a11y,
- item,
- cell_view,
- parent,
- model_col,
- view_col,
- row);
-
- gal_a11y_e_cell_add_action (cell,
- "toggle", /* action name*/
- "toggle the cell", /* action description */
- NULL, /* action keybinding */
- toggle_cell_action);
-
- toggle_cell->model_id = g_signal_connect (item->table_model,
- "model_cell_changed",
- (GCallback) model_change_cb,
- a11y);
-
- value = GPOINTER_TO_INT (
- e_table_model_value_at (cell->cell_view->e_table_model,
- cell->model_col, cell->row));
- if (value)
- gal_a11y_e_cell_add_state (cell, ATK_STATE_CHECKED, FALSE);
- else
- gal_a11y_e_cell_remove_state (cell, ATK_STATE_CHECKED, FALSE);
-
- return a11y;
-}
diff --git a/a11y/e-table/gal-a11y-e-cell-toggle.h b/a11y/e-table/gal-a11y-e-cell-toggle.h
deleted file mode 100644
index 06f9448e02..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-toggle.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef __GAL_A11Y_E_CELL_TOGGLE_H__
-#define __GAL_A11Y_E_CELL_TOGGLE_H__
-
-#include <atk/atk.h>
-#include "gal-a11y-e-cell.h"
-#include "gal-a11y-e-cell-toggle.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_A11Y_TYPE_E_CELL_TOGGLE (gal_a11y_e_cell_toggle_get_type ())
-#define GAL_A11Y_E_CELL_TOGGLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL_TOGGLE, GalA11yECellToggle))
-#define GAL_A11Y_E_CELL_TOGGLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_E_CELL_TOGGLE, GalA11yECellToggleClass))
-#define GAL_A11Y_IS_E_CELL_TOGGLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL_TOGGLE))
-#define GAL_A11Y_IS_E_CELL_TOGGLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL_TOGGLE))
-#define GAL_A11Y_E_CELL_TOGGLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAL_A11Y_TYPE_E_CELL_TOGGLE, GalA11yECellToggleClass))
-
-typedef struct _GalA11yECellToggle GalA11yECellToggle;
-typedef struct _GalA11yECellToggleClass GalA11yECellToggleClass;
-
-struct _GalA11yECellToggle
-{
- GalA11yECell parent;
- gint model_id;
-};
-
-GType gal_a11y_e_cell_toggle_get_type (void);
-
-struct _GalA11yECellToggleClass
-{
- GalA11yECellClass parent_class;
-};
-
-AtkObject *gal_a11y_e_cell_toggle_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GAL_A11Y_E_CELL_TOGGLE_H__ */
diff --git a/a11y/e-table/gal-a11y-e-cell-tree.c b/a11y/e-table/gal-a11y-e-cell-tree.c
deleted file mode 100644
index ae833d9150..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-tree.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Tim Wo <tim.wo@sun.com>, Sun Microsystem Inc. 2003.
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include <atk/atk.h>
-#include "gal-a11y-e-cell-tree.h"
-#include "gal-a11y-e-cell-registry.h"
-#include "gal-a11y-util.h"
-#include "gal/e-table/e-cell-tree.h"
-#include "gal/e-table/e-table.h"
-#include "gal/e-table/e-tree-table-adapter.h"
-
-#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yECellTreeClass))
-static AtkObjectClass *a11y_parent_class;
-#define A11Y_PARENT_TYPE (gal_a11y_e_cell_get_type ())
-
-static void
-ectr_model_row_changed_cb (ETableModel *etm,
- gint row,
- GalA11yECell *a11y)
-{
- ETreePath node;
- ETreeModel *tree_model;
- ETreeTableAdapter *tree_table_adapter;
-
- g_return_if_fail (a11y);
- if (a11y->row != row)
- return;
-
- node = e_table_model_value_at (etm, -1, a11y->row);
- tree_model = e_table_model_value_at (etm, -2, a11y->row);
- tree_table_adapter = e_table_model_value_at (etm, -3, a11y->row);
-
- if (e_tree_model_node_is_expandable (tree_model, node)) {
- gboolean is_exp = e_tree_table_adapter_node_is_expanded (tree_table_adapter, node);
- if (is_exp)
- gal_a11y_e_cell_add_state (a11y, ATK_STATE_EXPANDED, TRUE);
- else
- gal_a11y_e_cell_remove_state (a11y, ATK_STATE_EXPANDED, TRUE);
- }
-}
-
-static void
-ectr_subcell_weak_ref (GalA11yECellTree *a11y,
- GalA11yECell *subcell_a11y)
-{
- g_signal_handler_disconnect (GAL_A11Y_E_CELL (a11y)->item->table_model,
- a11y->model_row_changed_id);
- g_object_unref (a11y);
-}
-
-static void
-ectr_do_action_expand (AtkAction *action)
-{
- GalA11yECell *a11y;
- ETableModel *table_model;
- ETreePath node;
- ETreeModel *tree_model;
- ETreeTableAdapter *tree_table_adapter;
-
- a11y = GAL_A11Y_E_CELL (action);
- table_model = a11y->item->table_model;
- node = e_table_model_value_at (table_model, -1, a11y->row);
- tree_model = e_table_model_value_at (table_model, -2, a11y->row);
- tree_table_adapter = e_table_model_value_at (table_model, -3, a11y->row);
-
- if (e_tree_model_node_is_expandable (tree_model, node)) {
- e_tree_table_adapter_node_set_expanded (tree_table_adapter,
- node,
- TRUE);
- gal_a11y_e_cell_add_state (a11y, ATK_STATE_EXPANDED, TRUE);
- }
-}
-
-static void
-ectr_do_action_collapse (AtkAction *action)
-{
- GalA11yECell *a11y;
- ETableModel *table_model;
- ETreePath node;
- ETreeModel *tree_model;
- ETreeTableAdapter *tree_table_adapter;
-
- a11y = GAL_A11Y_E_CELL (action);
- table_model = a11y->item->table_model;
- node = e_table_model_value_at (table_model, -1, a11y->row);
- tree_model = e_table_model_value_at (table_model, -2, a11y->row);
- tree_table_adapter = e_table_model_value_at (table_model, -3, a11y->row);
-
- if (e_tree_model_node_is_expandable (tree_model, node)) {
- e_tree_table_adapter_node_set_expanded (tree_table_adapter,
- node,
- FALSE);
- gal_a11y_e_cell_remove_state (a11y, ATK_STATE_EXPANDED, TRUE);
- }
-}
-
-static void
-ectr_class_init (GalA11yECellTreeClass *klass)
-{
- a11y_parent_class = g_type_class_ref (A11Y_PARENT_TYPE);
-}
-
-static void
-ectr_init (GalA11yECellTree *a11y)
-{
-}
-
-GType
-gal_a11y_e_cell_tree_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yECellTreeClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) ectr_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yECellTree),
- 0,
- (GInstanceInitFunc) ectr_init,
- NULL /* value_cell_text */
- };
-
- type = g_type_register_static (A11Y_PARENT_TYPE, "GalA11yECellTree", &info, 0);
- gal_a11y_e_cell_type_add_action_interface (type);
- }
-
- return type;
-}
-
-AtkObject *
-gal_a11y_e_cell_tree_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- AtkObject *subcell_a11y;
- GalA11yECellTree *a11y;
-
- ETreePath node;
- ETreeModel *tree_model;
- ETreeTableAdapter *tree_table_adapter;
-
- ECellView *subcell_view;
- subcell_view = e_cell_tree_view_get_subcell_view (cell_view);
-
- if (subcell_view->ecell) {
- subcell_a11y = gal_a11y_e_cell_registry_get_object (NULL,
- item,
- subcell_view,
- parent,
- model_col,
- view_col,
- row);
- gal_a11y_e_cell_add_action (GAL_A11Y_E_CELL (subcell_a11y),
- "expand",
- "expands the row in the ETree containing this cell",
- NULL,
- (ACTION_FUNC)ectr_do_action_expand);
-
- gal_a11y_e_cell_add_action (GAL_A11Y_E_CELL (subcell_a11y),
- "collapse",
- "collapses the row in the ETree containing this cell",
- NULL,
- (ACTION_FUNC)ectr_do_action_collapse);
-
- /* init AtkStates for the cell's a11y object */
- node = e_table_model_value_at (item->table_model, -1, row);
- tree_model = e_table_model_value_at (item->table_model, -2, row);
- tree_table_adapter = e_table_model_value_at (item->table_model, -3, row);
- if (e_tree_model_node_is_expandable (tree_model, node)) {
- gal_a11y_e_cell_add_state (GAL_A11Y_E_CELL (subcell_a11y), ATK_STATE_EXPANDABLE, FALSE);
- if (e_tree_table_adapter_node_is_expanded (tree_table_adapter, node))
- gal_a11y_e_cell_add_state (GAL_A11Y_E_CELL (subcell_a11y), ATK_STATE_EXPANDED, FALSE);
- }
- }
- else
- subcell_a11y = NULL;
-
- /* create a companion a11y object, this object has type GalA11yECellTree
- and it connects to some signals to determine whether a tree cell is
- expanded or collapsed */
- a11y = g_object_new (gal_a11y_e_cell_tree_get_type (), NULL);
- gal_a11y_e_cell_construct (ATK_OBJECT (a11y),
- item,
- cell_view,
- parent,
- model_col,
- view_col,
- row);
- a11y->model_row_changed_id =
- g_signal_connect (item->table_model, "model_row_changed",
- G_CALLBACK (ectr_model_row_changed_cb),
- subcell_a11y);
- g_object_weak_ref (G_OBJECT (subcell_a11y), (GWeakNotify) ectr_subcell_weak_ref, a11y);
-
- return subcell_a11y;
-}
diff --git a/a11y/e-table/gal-a11y-e-cell-tree.h b/a11y/e-table/gal-a11y-e-cell-tree.h
deleted file mode 100644
index 355670b5a4..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-tree.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Tim Wo <tim.wo@sun.com>, Sun Microsystem Inc. 2003.
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#ifndef __GAL_A11Y_E_CELL_TREE_H__
-#define __GAL_A11Y_E_CELL_TREE_H__
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-cell-tree.h>
-#include "gal-a11y-e-cell.h"
-
-#define GAL_A11Y_TYPE_E_CELL_TREE (gal_a11y_e_cell_tree_get_type ())
-#define GAL_A11Y_E_CELL_TREE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL_TREE, GalA11yECellTree))
-#define GAL_A11Y_E_CELL_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_CELL_TREE, GalA11yECellTreeClass))
-#define GAL_A11Y_IS_E_CELL_TREE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL_TREE))
-#define GAL_A11Y_IS_E_CELL_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL_TREE))
-
-typedef struct _GalA11yECellTree GalA11yECellTree;
-typedef struct _GalA11yECellTreeClass GalA11yECellTreeClass;
-typedef struct _GalA11yECellTreePrivate GalA11yECellTreePrivate;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yECellTreePrivate comes right after the parent class structure.
- **/
-struct _GalA11yECellTree {
- GalA11yECell object;
-
- int model_row_changed_id;
-};
-
-struct _GalA11yECellTreeClass {
- GalA11yECellClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_cell_tree_get_type (void);
-AtkObject *gal_a11y_e_cell_tree_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-
-#endif /* ! __GAL_A11Y_E_CELL_TREE_H__ */
diff --git a/a11y/e-table/gal-a11y-e-cell.c b/a11y/e-table/gal-a11y-e-cell.c
deleted file mode 100644
index 9df3568e6c..0000000000
--- a/a11y/e-table/gal-a11y-e-cell.c
+++ /dev/null
@@ -1,555 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal/e-table/e-table.h"
-#include "gal-a11y-e-cell.h"
-#include "gal-a11y-util.h"
-#include <atk/atkobject.h>
-#include <atk/atkcomponent.h>
-#include <atk/atkaction.h>
-#include <atk/atkstateset.h>
-#include <gtk/gtkwindow.h>
-
-#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yECellClass))
-static GObjectClass *parent_class;
-#define PARENT_TYPE (atk_object_get_type ())
-
-
-#if 0
-static void
-unref_item (gpointer user_data, GObject *obj_loc)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (user_data);
- a11y->item = NULL;
- g_object_unref (a11y);
-}
-
-static void
-unref_cell (gpointer user_data, GObject *obj_loc)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (user_data);
- a11y->cell_view = NULL;
- g_object_unref (a11y);
-}
-#endif
-
-static void
-eti_dispose (GObject *object)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (object);
-
-#if 0
- if (a11y->item)
- g_object_unref (G_OBJECT (a11y->item)); /*, unref_item, a11y); */
- if (a11y->cell_view)
- g_object_unref (G_OBJECT (a11y->cell_view)); /*, unref_cell, a11y); */
- if (a11y->parent)
- g_object_unref (a11y->parent);
-#endif
-
- if (a11y->state_set)
- g_object_unref (a11y->state_set);
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
-
-/* Static functions */
-static AtkStateSet *
-eti_ref_state_set (AtkObject *accessible)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL (accessible);
- g_return_val_if_fail (cell->state_set, NULL);
-
- g_object_ref(cell->state_set);
- return cell->state_set;
-}
-
-static AtkObject*
-eti_get_parent (AtkObject *accessible)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (accessible);
- return a11y->parent;
-}
-
-static gint
-eti_get_index_in_parent (AtkObject *accessible)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (accessible);
-
- return a11y->row * a11y->item->cols + a11y->view_col;
-}
-
-
-/* Component IFace */
-static void
-eti_get_extents (AtkComponent *component,
- gint *x,
- gint *y,
- gint *width,
- gint *height,
- AtkCoordType coord_type)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (component);
- int row;
- int col;
- int xval;
- int yval;
-
- row = a11y->row;
- col = a11y->view_col;
-
-
- e_table_item_get_cell_geometry (a11y->item,
- &row,
- &col,
- &xval,
- &yval,
- width,
- height);
-
- atk_component_get_position (ATK_COMPONENT (a11y->parent),
- x, y, coord_type);
- if (x && *x != G_MININT)
- *x += xval;
- if (y && *y != G_MININT)
- *y += yval;
-}
-
-static gboolean
-eti_grab_focus (AtkComponent *component)
-{
- GalA11yECell *a11y;
- gint view_row;
- GtkWidget *e_table, *toplevel;
-
- a11y = GAL_A11Y_E_CELL (component);
- e_table = gtk_widget_get_parent (GTK_WIDGET (GNOME_CANVAS_ITEM (a11y->item)->canvas));
- view_row = e_table_view_to_model_row (E_TABLE (e_table), a11y->row);
-
- e_selection_model_select_single_row (a11y->item->selection, view_row);
- e_selection_model_change_cursor (a11y->item->selection, view_row, a11y->view_col);
-
- gtk_widget_grab_focus (e_table);
- toplevel = gtk_widget_get_toplevel (e_table);
- if (GTK_WIDGET_TOPLEVEL (toplevel))
- gtk_window_present (GTK_WINDOW (toplevel));
-
- return TRUE;
-}
-
-/* Table IFace */
-
-static void
-eti_atk_component_iface_init (AtkComponentIface *iface)
-{
- iface->get_extents = eti_get_extents;
- iface->grab_focus = eti_grab_focus;
-}
-
-static void
-eti_class_init (GalA11yECellClass *klass)
-{
- AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = eti_dispose;
-
- atk_object_class->get_parent = eti_get_parent;
- atk_object_class->get_index_in_parent = eti_get_index_in_parent;
- atk_object_class->ref_state_set = eti_ref_state_set;
-}
-
-static void
-eti_init (GalA11yECell *a11y)
-{
- a11y->item = NULL;
- a11y->cell_view = NULL;
- a11y->parent = NULL;
- a11y->model_col = -1;
- a11y->view_col = -1;
- a11y->row = -1;
-
- a11y->state_set = atk_state_set_new ();
- atk_state_set_add_state (a11y->state_set, ATK_STATE_TRANSIENT);
- atk_state_set_add_state (a11y->state_set, ATK_STATE_ENABLED);
-}
-
-
-static ActionInfo *
-_gal_a11y_e_cell_get_action_info (GalA11yECell *cell,
- gint index)
-{
- GList *list_node;
-
- g_return_val_if_fail (GAL_A11Y_IS_E_CELL (cell), NULL);
- if (cell->action_list == NULL)
- return NULL;
- list_node = g_list_nth (cell->action_list, index);
- if (!list_node)
- return NULL;
- return (ActionInfo *) (list_node->data);
-}
-
-static void
-_gal_a11y_e_cell_destroy_action_info (gpointer action_info,
- gpointer user_data)
-{
- ActionInfo *info = (ActionInfo *)action_info;
-
- g_return_if_fail (info != NULL);
- g_free (info->name);
- g_free (info->description);
- g_free (info->keybinding);
- g_free (info);
-}
-
-
-gboolean
-gal_a11y_e_cell_add_action ( GalA11yECell * cell,
- const gchar *action_name,
- const gchar *action_description,
- const gchar *action_keybinding,
- ACTION_FUNC action_func)
-{
- ActionInfo *info;
- g_return_val_if_fail (GAL_A11Y_IS_E_CELL (cell), FALSE);
- info = g_new (ActionInfo, 1);
-
- if (action_name != NULL)
- info->name = g_strdup (action_name);
- else
- info->name = NULL;
-
- if (action_description != NULL)
- info->description = g_strdup (action_description);
- else
- info->description = NULL;
- if (action_keybinding != NULL)
- info->keybinding = g_strdup (action_keybinding);
- else
- info->keybinding = NULL;
- info->do_action_func = action_func;
-
- cell->action_list = g_list_append (cell->action_list, (gpointer) info);
- return TRUE;
-}
-
-gboolean
-gal_a11y_e_cell_remove_action (GalA11yECell *cell,
- gint action_index)
-{
- GList *list_node;
-
- g_return_val_if_fail (GAL_A11Y_IS_E_CELL (cell), FALSE);
- list_node = g_list_nth (cell->action_list, action_index);
- if (!list_node)
- return FALSE;
- g_return_val_if_fail (list_node->data != NULL, FALSE);
- _gal_a11y_e_cell_destroy_action_info (list_node->data, NULL);
- cell->action_list = g_list_remove_link (cell->action_list, list_node);
-
- return TRUE;
-}
-
-gboolean
-gal_a11y_e_cell_remove_action_by_name (GalA11yECell *cell,
- const gchar *action_name)
-{
- GList *list_node;
- gboolean action_found= FALSE;
-
- g_return_val_if_fail (GAL_A11Y_IS_E_CELL (cell), FALSE);
- for (list_node = cell->action_list; list_node && !action_found;
- list_node = list_node->next) {
- if (!g_strcasecmp (((ActionInfo *)(list_node->data))->name, action_name)) {
- action_found = TRUE;
- break;
- }
- }
-
- g_return_val_if_fail (action_found, FALSE);
- _gal_a11y_e_cell_destroy_action_info (list_node->data, NULL);
- cell->action_list = g_list_remove_link (cell->action_list, list_node);
-
- return TRUE;
-}
-
-static gint
-gal_a11y_e_cell_action_get_n_actions (AtkAction *action)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL(action);
- if (cell->action_list != NULL)
- return g_list_length (cell->action_list);
- else
- return 0;
-}
-
-static G_CONST_RETURN gchar *
-gal_a11y_e_cell_action_get_name (AtkAction *action,
- gint index)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL(action);
- ActionInfo *info = _gal_a11y_e_cell_get_action_info (cell, index);
-
- if (info == NULL)
- return NULL;
- return info->name;
-}
-
-static G_CONST_RETURN gchar *
-gal_a11y_e_cell_action_get_description (AtkAction *action,
- gint index)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL(action);
- ActionInfo *info = _gal_a11y_e_cell_get_action_info (cell, index);
-
- if (info == NULL)
- return NULL;
- return info->description;
-}
-
-static gboolean
-gal_a11y_e_cell_action_set_description (AtkAction *action,
- gint index,
- const gchar *desc)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL(action);
- ActionInfo *info = _gal_a11y_e_cell_get_action_info (cell, index);
-
- if (info == NULL)
- return FALSE;
- g_free (info->description);
- info->description = g_strdup (desc);
- return TRUE;
-}
-
-static G_CONST_RETURN gchar *
-gal_a11y_e_cell_action_get_keybinding (AtkAction *action,
- gint index)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL(action);
- ActionInfo *info = _gal_a11y_e_cell_get_action_info (cell, index);
- if (info == NULL)
- return NULL;
-
- return info->keybinding;
-}
-
-static gboolean
-idle_do_action (gpointer data)
-{
- GalA11yECell *cell;
-
- cell = GAL_A11Y_E_CELL (data);
- cell->action_idle_handler = 0;
- cell->action_func (cell);
-
- return FALSE;
-}
-
-static gboolean
-gal_a11y_e_cell_action_do_action (AtkAction *action,
- gint index)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL(action);
- ActionInfo *info = _gal_a11y_e_cell_get_action_info (cell, index);
-
- if (info == NULL)
- return FALSE;
- g_return_val_if_fail (info->do_action_func, FALSE);
- if (cell->action_idle_handler)
- return FALSE;
- cell->action_func = info->do_action_func;
- cell->action_idle_handler = g_idle_add (idle_do_action, cell);
-
- return TRUE;
-}
-
-static void
-gal_a11y_e_cell_atk_action_interface_init (AtkActionIface *iface)
-{
- g_return_if_fail (iface != NULL);
-
- iface->get_n_actions = gal_a11y_e_cell_action_get_n_actions;
- iface->do_action = gal_a11y_e_cell_action_do_action;
- iface->get_name = gal_a11y_e_cell_action_get_name;
- iface->get_description = gal_a11y_e_cell_action_get_description;
- iface->set_description = gal_a11y_e_cell_action_set_description;
- iface->get_keybinding = gal_a11y_e_cell_action_get_keybinding;
-}
-
-void
-gal_a11y_e_cell_type_add_action_interface (GType type)
-{
- static const GInterfaceInfo atk_action_info =
- {
- (GInterfaceInitFunc) gal_a11y_e_cell_atk_action_interface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- g_type_add_interface_static (type, ATK_TYPE_ACTION,
- &atk_action_info);
-}
-
-gboolean
-gal_a11y_e_cell_add_state (GalA11yECell *cell,
- AtkStateType state_type,
- gboolean emit_signal)
-{
- if (!atk_state_set_contains_state (cell->state_set, state_type)) {
- gboolean rc;
-
- rc = atk_state_set_add_state (cell->state_set, state_type);
- /*
- * The signal should only be generated if the value changed,
- * not when the cell is set up. So states that are set
- * initially should pass FALSE as the emit_signal argument.
- */
-
- if (emit_signal) {
- atk_object_notify_state_change (ATK_OBJECT (cell), state_type, TRUE);
- /* If state_type is ATK_STATE_VISIBLE, additional
- notification */
- if (state_type == ATK_STATE_VISIBLE)
- g_signal_emit_by_name (cell, "visible_data_changed");
- }
-
- return rc;
- }
- else
- return FALSE;
-}
-
-gboolean
-gal_a11y_e_cell_remove_state (GalA11yECell *cell,
- AtkStateType state_type,
- gboolean emit_signal)
-{
- if (atk_state_set_contains_state (cell->state_set, state_type)) {
- gboolean rc;
-
- rc = atk_state_set_remove_state (cell->state_set, state_type);
- /*
- * The signal should only be generated if the value changed,
- * not when the cell is set up. So states that are set
- * initially should pass FALSE as the emit_signal argument.
- */
-
- if (emit_signal) {
- atk_object_notify_state_change (ATK_OBJECT (cell), state_type, FALSE);
- /* If state_type is ATK_STATE_VISIBLE, additional notification */
- if (state_type == ATK_STATE_VISIBLE)
- g_signal_emit_by_name (cell, "visible_data_changed");
- }
-
- return rc;
- }
- else
- return FALSE;
-}
-
-/**
- * gal_a11y_e_cell_get_type:
- * @void:
- *
- * Registers the &GalA11yECell class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yECell class.
- **/
-GType
-gal_a11y_e_cell_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yECellClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) eti_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yECell),
- 0,
- (GInstanceInitFunc) eti_init,
- NULL /* value_cell */
- };
-
- static const GInterfaceInfo atk_component_info = {
- (GInterfaceInitFunc) eti_atk_component_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yECell", &info, 0);
- g_type_add_interface_static (type, ATK_TYPE_COMPONENT, &atk_component_info);
- }
-
- return type;
-}
-
-AtkObject *
-gal_a11y_e_cell_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- AtkObject *a11y;
-
- a11y = g_object_new (gal_a11y_e_cell_get_type (), NULL);
-
- gal_a11y_e_cell_construct (a11y,
- item,
- cell_view,
- parent,
- model_col,
- view_col,
- row);
- return a11y;
-}
-
-void
-gal_a11y_e_cell_construct (AtkObject *object,
- ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (object);
- a11y->item = item;
- a11y->cell_view = cell_view;
- a11y->parent = parent;
- a11y->model_col = model_col;
- a11y->view_col = view_col;
- a11y->row = row;
- ATK_OBJECT (a11y) ->role = ATK_ROLE_TABLE_CELL;
-
-#if 0
- if (parent)
- g_object_ref (parent);
-
- if (item)
- g_object_ref (G_OBJECT (item)); /*,
- unref_item,
- a11y);*/
- if (cell_view)
- g_object_ref (G_OBJECT (cell_view)); /*,
- unref_cell,
- a11y);*/
-#endif
-}
diff --git a/a11y/e-table/gal-a11y-e-cell.h b/a11y/e-table/gal-a11y-e-cell.h
deleted file mode 100644
index 53a6c0089d..0000000000
--- a/a11y/e-table/gal-a11y-e-cell.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_CELL_H__
-#define __GAL_A11Y_E_CELL_H__
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-cell.h>
-
-#define GAL_A11Y_TYPE_E_CELL (gal_a11y_e_cell_get_type ())
-#define GAL_A11Y_E_CELL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL, GalA11yECell))
-#define GAL_A11Y_E_CELL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_CELL, GalA11yECellClass))
-#define GAL_A11Y_IS_E_CELL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL))
-#define GAL_A11Y_IS_E_CELL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL))
-
-typedef struct _GalA11yECell GalA11yECell;
-typedef struct _GalA11yECellClass GalA11yECellClass;
-typedef struct _GalA11yECellPrivate GalA11yECellPrivate;
-typedef struct _ActionInfo ActionInfo;
-typedef void (*ACTION_FUNC) (GalA11yECell *cell);
-
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yECellPrivate comes right after the parent class structure.
- **/
-struct _GalA11yECell {
- AtkObject object;
-
- ETableItem *item;
- ECellView *cell_view;
- AtkObject *parent;
- int model_col;
- int view_col;
- int row;
- AtkStateSet *state_set;
- GList *action_list;
- gint action_idle_handler;
- ACTION_FUNC action_func;
-};
-
-struct _GalA11yECellClass {
- AtkObjectClass parent_class;
-};
-
-struct _ActionInfo {
- gchar *name;
- gchar *description;
- gchar *keybinding;
- ACTION_FUNC do_action_func;
-};
-
-
-
-/* Standard Glib function */
-GType gal_a11y_e_cell_get_type (void);
-AtkObject *gal_a11y_e_cell_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-void gal_a11y_e_cell_construct (AtkObject *object,
- ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row);
-
-void gal_a11y_e_cell_type_add_action_interface (GType type);
-
-gboolean gal_a11y_e_cell_add_action (GalA11yECell *cell,
- const gchar *action_name,
- const gchar *action_description,
- const gchar *action_keybinding,
- ACTION_FUNC action_func);
-
-gboolean gal_a11y_e_cell_remove_action (GalA11yECell *cell,
- gint action_id);
-
-gboolean gal_a11y_e_cell_remove_action_by_name (GalA11yECell *cell,
- const gchar *action_name);
-
-gboolean gal_a11y_e_cell_add_state (GalA11yECell *cell,
- AtkStateType state_type,
- gboolean emit_signal);
-
-gboolean gal_a11y_e_cell_remove_state (GalA11yECell *cell,
- AtkStateType state_type,
- gboolean emit_signal);
-
-
-#endif /* ! __GAL_A11Y_E_CELL_H__ */
diff --git a/a11y/e-table/gal-a11y-e-table-click-to-add-factory.c b/a11y/e-table/gal-a11y-e-table-click-to-add-factory.c
deleted file mode 100644
index 9c46b2badc..0000000000
--- a/a11y/e-table/gal-a11y-e-table-click-to-add-factory.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Authors: Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-e-table-click-to-add-factory.h"
-#include "gal-a11y-e-table-click-to-add.h"
-#include "gal-a11y-e-table.h"
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-table-click-to-add.h>
-#include <atk/atk.h>
-
-
-#define CS_CLASS(factory) (G_TYPE_INSTANCE_GET_CLASS ((factory), C_TYPE_STREAM, GalA11yETableClickToAddFactoryClass))
-static AtkObjectFactoryClass *parent_class;
-#define PARENT_TYPE (ATK_TYPE_OBJECT_FACTORY)
-
-/* Static functions */
-
-static GType
-gal_a11y_e_table_click_to_add_factory_get_accessible_type (void)
-{
- return GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD;
-}
-
-static AtkObject*
-gal_a11y_e_table_click_to_add_factory_create_accessible (GObject *obj)
-{
- AtkObject * atk_object;
-
- g_return_val_if_fail (E_IS_TABLE_CLICK_TO_ADD(obj), NULL);
-
- atk_object = gal_a11y_e_table_click_to_add_new (obj);
-
- return atk_object;
-}
-
-static void
-gal_a11y_e_table_click_to_add_factory_class_init (GalA11yETableClickToAddFactoryClass *klass)
-{
- AtkObjectFactoryClass *factory_class = ATK_OBJECT_FACTORY_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- factory_class->create_accessible = gal_a11y_e_table_click_to_add_factory_create_accessible;
- factory_class->get_accessible_type = gal_a11y_e_table_click_to_add_factory_get_accessible_type;
-}
-
-static void
-gal_a11y_e_table_click_to_add_factory_init (GalA11yETableClickToAddFactory *factory)
-{
-}
-
-/**
- * gal_a11y_e_table_factory_get_type:
- * @void:
- *
- * Registers the &GalA11yETableFactory class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETableFactory class.
- **/
-GType
-gal_a11y_e_table_click_to_add_factory_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yETableClickToAddFactoryClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gal_a11y_e_table_click_to_add_factory_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETableClickToAddFactory),
- 0,
- (GInstanceInitFunc) gal_a11y_e_table_click_to_add_factory_init,
- NULL /* value_table */
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yETableClickToAddFactory", &info, 0);
- }
-
- return type;
-}
diff --git a/a11y/e-table/gal-a11y-e-table-click-to-add-factory.h b/a11y/e-table/gal-a11y-e-table-click-to-add-factory.h
deleted file mode 100644
index d75453a780..0000000000
--- a/a11y/e-table/gal-a11y-e-table-click-to-add-factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Authors: * Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#ifndef __GAL_A11Y_E_TABLE_CLICK_TO_ADD_FACTORY_H__
-#define __GAL_A11Y_E_TABLE_CLICK_TO_ADD_FACTORY_H__
-
-#include <glib-object.h>
-#include <atk/atkobjectfactory.h>
-
-#define GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD_FACTORY (gal_a11y_e_table_item_factory_get_type ())
-#define GAL_A11Y_E_TABLE_CLICK_TO_ADD_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD_FACTORY, GalA11yETableClickToAddFactory))
-#define GAL_A11Y_E_TABLE_CLICK_TO_ADD_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD_FACTORY, GalA11yETableClickToAddFactoryClass))
-#define GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD_FACTORY))
-#define GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD_FACTORY))
-
-typedef struct _GalA11yETableClickToAddFactory GalA11yETableClickToAddFactory;
-typedef struct _GalA11yETableClickToAddFactoryClass GalA11yETableClickToAddFactoryClass;
-
-struct _GalA11yETableClickToAddFactory {
- AtkObject object;
-};
-
-struct _GalA11yETableClickToAddFactoryClass {
- AtkObjectClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_table_click_to_add_factory_get_type (void);
-
-#endif
diff --git a/a11y/e-table/gal-a11y-e-table-click-to-add.c b/a11y/e-table/gal-a11y-e-table-click-to-add.c
deleted file mode 100644
index 13214a7ddd..0000000000
--- a/a11y/e-table/gal-a11y-e-table-click-to-add.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-util.h"
-#include "gal-a11y-e-table-click-to-add.h"
-#include <gal/e-table/e-table-group.h>
-#include <gal/e-table/e-table-group-leaf.h>
-#include <gal/e-table/e-table-click-to-add.h>
-#include <atk/atkcomponent.h>
-#include <atk/atkaction.h>
-
-static AtkObjectClass *parent_class;
-static GType parent_type;
-static gint priv_offset;
-#define GET_PRIVATE(object) ((GalA11yETableClickToAddPrivate *) (((char *) object) + priv_offset))
-#define PARENT_TYPE (parent_type)
-
-struct _GalA11yETableClickToAddPrivate {
- gpointer rect;
- gpointer row;
-};
-
-
-static gint
-etcta_get_n_actions (AtkAction *action)
-{
- return 1;
-}
-
-static G_CONST_RETURN gchar*
-etcta_get_description (AtkAction *action,
- gint i)
-{
- if (i == 0)
- return "click to add";
-
- return NULL;
-}
-
-static G_CONST_RETURN gchar*
-etcta_action_get_name (AtkAction *action, gint i)
-{
- if (i == 0)
- return "click";
-
- return NULL;
-}
-
-
-static gboolean
-idle_do_action (gpointer data)
-{
- GdkEventButton event;
- ETableClickToAdd * etcta;
- gint finished;
-
- g_return_val_if_fail ( data!= NULL, FALSE);
-
- etcta = E_TABLE_CLICK_TO_ADD (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (data)));
- g_return_val_if_fail (etcta, FALSE);
-
- event.x = 0;
- event.y = 0;
-
- event.type = GDK_BUTTON_PRESS;
- event.window = GTK_LAYOUT(GNOME_CANVAS_ITEM(etcta)->canvas)->bin_window;
- event.button = 1;
- event.send_event = TRUE;
- event.time = GDK_CURRENT_TIME;
- event.axes = NULL;
-
- g_signal_emit_by_name (etcta, "event", &event, &finished);
-
- return FALSE;
-}
-
-static gboolean
-etcta_do_action (AtkAction * action, gint i)
-{
- g_return_val_if_fail (i == 0, FALSE);
-
- g_idle_add (idle_do_action, action);
-
- return TRUE;
-}
-
-static void
-atk_action_interface_init (AtkActionIface *iface)
-{
- g_return_if_fail (iface != NULL);
-
- iface->do_action = etcta_do_action;
- iface->get_n_actions = etcta_get_n_actions;
- iface->get_description = etcta_get_description;
- iface->get_name = etcta_action_get_name;
-}
-
-
-static G_CONST_RETURN gchar *
-etcta_get_name (AtkObject *obj)
-{
- g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD (obj), NULL);
-
- return "click to add";
-}
-
-static gint
-etcta_get_n_children (AtkObject *accessible)
-{
- return 1;
-}
-
-static AtkObject*
-etcta_ref_child (AtkObject *accessible,
- gint i)
-{
- AtkObject * atk_obj = NULL;
- ETableClickToAdd * etcta;
-
- if ( i != 0 )
- return NULL;
-
- etcta = E_TABLE_CLICK_TO_ADD(atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (accessible)));
-
- g_return_val_if_fail (etcta, NULL);
-
- if (etcta->rect) {
- atk_obj = atk_gobject_accessible_for_object (G_OBJECT(etcta->rect));
- } else if (etcta->row) {
- atk_obj = atk_gobject_accessible_for_object (G_OBJECT(etcta->row));
- }
-
- g_object_ref (atk_obj);
-
- return atk_obj;
-}
-
-static void
-etcta_class_init (GalA11yETableClickToAddClass *klass)
-{
- AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- atk_object_class->get_name = etcta_get_name;
- atk_object_class->get_n_children = etcta_get_n_children;
- atk_object_class->ref_child = etcta_ref_child;
-}
-
-static void
-etcta_init (GalA11yETableClickToAdd *a11y)
-{
-}
-
-/**
- * gal_a11y_e_table_click_to_add_get_type:
- * @void:
- *
- * Registers the &GalA11yETableClickToAdd class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETableClickToAdd class.
- **/
-GType
-gal_a11y_e_table_click_to_add_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- AtkObjectFactory *factory;
-
- GTypeInfo info = {
- sizeof (GalA11yETableClickToAddClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) etcta_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETableClickToAdd),
- 0,
- (GInstanceInitFunc) etcta_init,
- NULL /* value_table */
- };
-
- static const GInterfaceInfo atk_action_info = {
- (GInterfaceInitFunc) atk_action_interface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- factory = atk_registry_get_factory (atk_get_default_registry (), GNOME_TYPE_CANVAS_ITEM);
-
- parent_type = atk_object_factory_get_accessible_type (factory);
- type = gal_a11y_type_register_static_with_private (PARENT_TYPE,
- "GalA11yETableClickToAdd", &info, 0,
- sizeof(GalA11yETableClickToAddPrivate), &priv_offset);
-
- g_type_add_interface_static (type, ATK_TYPE_ACTION, &atk_action_info);
-
- }
-
- return type;
-}
-
-static gboolean
-etcta_event (GnomeCanvasItem *item, GdkEvent *e, gpointer data)
-{
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);
- GalA11yETableClickToAdd *a11y;
- GalA11yETableClickToAddPrivate *priv;
-
- g_return_val_if_fail (item, TRUE);
-
- g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD(data), FALSE);
- a11y = GAL_A11Y_E_TABLE_CLICK_TO_ADD (data);
-
- priv = GET_PRIVATE (a11y);
-
- /* rect replaced by row. */
- if (etcta->rect == NULL && priv->rect != NULL) {
- g_signal_emit_by_name (a11y, "children_changed::remove", 0, NULL, NULL);
-
- }
- /* row inserted, and/or replaced by a new row. */
- if (etcta->row != NULL && priv->row == NULL) {
- g_signal_emit_by_name (a11y, "children_changed::add", 0, NULL, NULL);
- } else if (etcta->row != NULL && priv->row != NULL && etcta->row != priv->row) {
- g_signal_emit_by_name (a11y, "children_changed::remove", 0, NULL, NULL);
- g_signal_emit_by_name (a11y, "children_changed::add", 0, NULL, NULL);
- }
-
-
- priv->rect = etcta->rect;
- priv->row = etcta->row;
-
- return TRUE;
-}
-
-AtkObject *
-gal_a11y_e_table_click_to_add_new (GObject *widget)
-{
- GalA11yETableClickToAdd *a11y;
- ETableClickToAdd * etcta;
- GalA11yETableClickToAddPrivate *priv;
-
- g_return_val_if_fail (widget != NULL, NULL);
-
- a11y = g_object_new (gal_a11y_e_table_click_to_add_get_type (), NULL);
- priv = GET_PRIVATE (a11y);
-
- etcta = E_TABLE_CLICK_TO_ADD(widget);
-
-
- atk_object_initialize (ATK_OBJECT (a11y), etcta);
-
- priv->rect = etcta->rect;
- priv->row = etcta->row;
-
-
- g_signal_connect_after (G_OBJECT(widget), "event",
- G_CALLBACK (etcta_event), a11y);
-
- return ATK_OBJECT (a11y);
-}
diff --git a/a11y/e-table/gal-a11y-e-table-click-to-add.h b/a11y/e-table/gal-a11y-e-table-click-to-add.h
deleted file mode 100644
index 98e3aa9b80..0000000000
--- a/a11y/e-table/gal-a11y-e-table-click-to-add.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-#ifndef __GAL_A11Y_E_TABLE_CLICK_TO_ADD_H__
-#define __GAL_A11Y_E_TABLE_CLICK_TO_ADD_H__
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-item.h>
-#include <atk/atkgobjectaccessible.h>
-
-#define GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD (gal_a11y_e_table_click_to_add_get_type ())
-#define GAL_A11Y_E_TABLE_CLICK_TO_ADD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD, GalA11yETableClickToAdd))
-#define GAL_A11Y_E_TABLE_CLICK_TO_ADD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD, GalA11yETableClickToAddClass))
-#define GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD))
-#define GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TABLE_CLICK_TO_ADD))
-
-typedef struct _GalA11yETableClickToAdd GalA11yETableClickToAdd;
-typedef struct _GalA11yETableClickToAddClass GalA11yETableClickToAddClass;
-typedef struct _GalA11yETableClickToAddPrivate GalA11yETableClickToAddPrivate;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yETableClickToAddPrivate comes right after the parent class structure.
- **/
-struct _GalA11yETableClickToAdd {
- AtkGObjectAccessible parent;
-};
-
-struct _GalA11yETableClickToAddClass {
- AtkGObjectAccessibleClass parent_class;
-};
-
-/* Standard Glib function */
-GType gal_a11y_e_table_click_to_add_get_type (void);
-AtkObject *gal_a11y_e_table_click_to_add_new (GObject *widget);
-
-#endif /* ! __GAL_A11Y_E_TABLE_CLICK_TO_ADD_H__ */
diff --git a/a11y/e-table/gal-a11y-e-table-factory.c b/a11y/e-table/gal-a11y-e-table-factory.c
deleted file mode 100644
index 14eaca3d19..0000000000
--- a/a11y/e-table/gal-a11y-e-table-factory.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-e-table-factory.h"
-#include "gal-a11y-e-table.h"
-
-#define CS_CLASS(factory) (G_TYPE_INSTANCE_GET_CLASS ((factory), C_TYPE_STREAM, GalA11yETableFactoryClass))
-static AtkObjectFactoryClass *parent_class;
-#define PARENT_TYPE (ATK_TYPE_OBJECT_FACTORY)
-
-/* Static functions */
-
-static GType
-gal_a11y_e_table_factory_get_accessible_type (void)
-{
- return GAL_A11Y_TYPE_E_TABLE;
-}
-
-static AtkObject*
-gal_a11y_e_table_factory_create_accessible (GObject *obj)
-{
- AtkObject *accessible;
-
- accessible = gal_a11y_e_table_new (obj);
-
- return accessible;
-}
-
-static void
-gal_a11y_e_table_factory_class_init (GalA11yETableFactoryClass *klass)
-{
- AtkObjectFactoryClass *factory_class = ATK_OBJECT_FACTORY_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- factory_class->create_accessible = gal_a11y_e_table_factory_create_accessible;
- factory_class->get_accessible_type = gal_a11y_e_table_factory_get_accessible_type;
-}
-
-static void
-gal_a11y_e_table_factory_init (GalA11yETableFactory *factory)
-{
-}
-
-/**
- * gal_a11y_e_table_factory_get_type:
- * @void:
- *
- * Registers the &GalA11yETableFactory class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETableFactory class.
- **/
-GType
-gal_a11y_e_table_factory_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yETableFactoryClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gal_a11y_e_table_factory_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETableFactory),
- 0,
- (GInstanceInitFunc) gal_a11y_e_table_factory_init,
- NULL /* value_table */
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yETableFactory", &info, 0);
- }
-
- return type;
-}
diff --git a/a11y/e-table/gal-a11y-e-table-factory.h b/a11y/e-table/gal-a11y-e-table-factory.h
deleted file mode 100644
index eb8eb55414..0000000000
--- a/a11y/e-table/gal-a11y-e-table-factory.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_TABLE_FACTORY_H__
-#define __GAL_A11Y_E_TABLE_FACTORY_H__
-
-#include <glib-object.h>
-#include <atk/atkobjectfactory.h>
-
-#define GAL_A11Y_TYPE_E_TABLE_FACTORY (gal_a11y_e_table_factory_get_type ())
-#define GAL_A11Y_E_TABLE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TABLE_FACTORY, GalA11yETableFactory))
-#define GAL_A11Y_E_TABLE_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TABLE_FACTORY, GalA11yETableFactoryClass))
-#define GAL_A11Y_IS_E_TABLE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TABLE_FACTORY))
-#define GAL_A11Y_IS_E_TABLE_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TABLE_FACTORY))
-
-typedef struct _GalA11yETableFactory GalA11yETableFactory;
-typedef struct _GalA11yETableFactoryClass GalA11yETableFactoryClass;
-
-struct _GalA11yETableFactory {
- AtkObject object;
-};
-
-struct _GalA11yETableFactoryClass {
- AtkObjectClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_table_factory_get_type (void);
-
-#endif /* ! __GAL_A11Y_E_TABLE_FACTORY_H__ */
diff --git a/a11y/e-table/gal-a11y-e-table-item-factory.c b/a11y/e-table/gal-a11y-e-table-item-factory.c
deleted file mode 100644
index 12cb978fde..0000000000
--- a/a11y/e-table/gal-a11y-e-table-item-factory.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Authors: Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-e-table-item-factory.h"
-#include "gal-a11y-e-table-item.h"
-#include "gal-a11y-e-table.h"
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-tree.h>
-#include <atk/atk.h>
-
-
-#define CS_CLASS(factory) (G_TYPE_INSTANCE_GET_CLASS ((factory), C_TYPE_STREAM, GalA11yETableItemFactoryClass))
-static AtkObjectFactoryClass *parent_class;
-#define PARENT_TYPE (ATK_TYPE_OBJECT_FACTORY)
-
-/* Static functions */
-
-static GType
-gal_a11y_e_table_item_factory_get_accessible_type (void)
-{
- return GAL_A11Y_TYPE_E_TABLE_ITEM;
-}
-
-static AtkObject*
-gal_a11y_e_table_item_factory_create_accessible (GObject *obj)
-{
- AtkObject *accessible;
-
- g_return_val_if_fail (E_IS_TABLE_ITEM(obj), NULL);
- accessible = gal_a11y_e_table_item_new(NULL, E_TABLE_ITEM (obj), 0);
-
- return accessible;
-}
-
-static void
-gal_a11y_e_table_item_factory_class_init (GalA11yETableItemFactoryClass *klass)
-{
- AtkObjectFactoryClass *factory_class = ATK_OBJECT_FACTORY_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- factory_class->create_accessible = gal_a11y_e_table_item_factory_create_accessible;
- factory_class->get_accessible_type = gal_a11y_e_table_item_factory_get_accessible_type;
-}
-
-static void
-gal_a11y_e_table_item_factory_init (GalA11yETableItemFactory *factory)
-{
-}
-
-/**
- * gal_a11y_e_table_factory_get_type:
- * @void:
- *
- * Registers the &GalA11yETableFactory class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETableFactory class.
- **/
-GType
-gal_a11y_e_table_item_factory_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yETableItemFactoryClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gal_a11y_e_table_item_factory_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETableItemFactory),
- 0,
- (GInstanceInitFunc) gal_a11y_e_table_item_factory_init,
- NULL /* value_table */
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yETableItemFactory", &info, 0);
- }
-
- return type;
-}
diff --git a/a11y/e-table/gal-a11y-e-table-item-factory.h b/a11y/e-table/gal-a11y-e-table-item-factory.h
deleted file mode 100644
index cbbff9fb18..0000000000
--- a/a11y/e-table/gal-a11y-e-table-item-factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Authors: * Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#ifndef __GAL_A11Y_E_TABLE_ITEM_FACTORY_H__
-#define __GAL_A11Y_E_TABLE_ITEM_FACTORY_H__
-
-#include <glib-object.h>
-#include <atk/atkobjectfactory.h>
-
-#define GAL_A11Y_TYPE_E_TABLE_ITEM_FACTORY (gal_a11y_e_table_item_factory_get_type ())
-#define GAL_A11Y_E_TABLE_ITEM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TABLE_ITEM_FACTORY, GalA11yETableItemFactory))
-#define GAL_A11Y_E_TABLE_ITEM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TABLE_ITEM_FACTORY, GalA11yETableItemFactoryClass))
-#define GAL_A11Y_IS_E_TABLE_ITEM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TABLE_ITEM_FACTORY))
-#define GAL_A11Y_IS_E_TABLE_ITEM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TABLE_ITEM_FACTORY))
-
-typedef struct _GalA11yETableItemFactory GalA11yETableItemFactory;
-typedef struct _GalA11yETableItemFactoryClass GalA11yETableItemFactoryClass;
-
-struct _GalA11yETableItemFactory {
- AtkObject object;
-};
-
-struct _GalA11yETableItemFactoryClass {
- AtkObjectClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_table_item_factory_get_type (void);
-
-#endif /* ! __GAL_A11Y_E_TABLE_FACTORY_H__ */
diff --git a/a11y/e-table/gal-a11y-e-table-item.c b/a11y/e-table/gal-a11y-e-table-item.c
deleted file mode 100644
index 627735ba04..0000000000
--- a/a11y/e-table/gal-a11y-e-table-item.c
+++ /dev/null
@@ -1,1433 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- * Bolian Yin <bolian.yin@sun.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-#include "gal-a11y-e-table-item.h"
-#include "gal-a11y-e-cell-registry.h"
-#include "gal-a11y-e-cell.h"
-#include "gal-a11y-util.h"
-#include <gal/e-table/e-table-subset.h>
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-tree.h>
-
-#include <atk/atkobject.h>
-#include <atk/atktable.h>
-#include <atk/atkcomponent.h>
-#include <atk/atkobjectfactory.h>
-#include <atk/atkregistry.h>
-#include <atk/atkgobjectaccessible.h>
-
-#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yETableItemClass))
-static GObjectClass *parent_class;
-static AtkComponentIface *component_parent_iface;
-static GType parent_type;
-static gint priv_offset;
-static GQuark quark_accessible_object = 0;
-#define GET_PRIVATE(object) ((GalA11yETableItemPrivate *) (((char *) object) + priv_offset))
-#define PARENT_TYPE (parent_type)
-
-struct _GalA11yETableItemPrivate {
- AtkObject *parent;
- gint index_in_parent;
- gint cols;
- gint rows;
- gpointer *cell_data;
- int selection_change_id;
- int cursor_change_id;
- ETableCol ** columns;
- ESelectionModel *selection;
- GtkWidget *widget;
-};
-
-static gboolean gal_a11y_e_table_item_ref_selection (GalA11yETableItem *a11y,
- ESelectionModel *selection);
-static gboolean gal_a11y_e_table_item_unref_selection (GalA11yETableItem *a11y);
-
-static gpointer *eti_reinit_data (AtkTable *table, ETableItem *item);
-
-#if 0
-static void
-unref_accessible (gpointer user_data, GObject *obj_loc)
-{
- GalA11yETableItem *a11y = GAL_A11Y_E_TABLE_ITEM (user_data);
- GET_PRIVATE (a11y)->item = NULL;
- g_object_unref (a11y);
-}
-#endif
-
-inline static gint
-view_to_model_row(ETableItem *eti, int row)
-{
- if (eti->uses_source_model) {
- ETableSubset *etss = E_TABLE_SUBSET(eti->table_model);
- if (row >= 0 && row < etss->n_map) {
- eti->row_guess = row;
- return etss->map_table[row];
- } else
- return -1;
- } else
- return row;
-}
-
-inline static gint
-view_to_model_col(ETableItem *eti, int col)
-{
- ETableCol *ecol = e_table_header_get_column (eti->header, col);
- return ecol ? ecol->col_idx : -1;
-}
-
-inline static gint
-model_to_view_row(ETableItem *eti, int row)
-{
- int i;
- if (row == -1)
- return -1;
- if (eti->uses_source_model) {
- ETableSubset *etss = E_TABLE_SUBSET(eti->table_model);
- if (eti->row_guess >= 0 && eti->row_guess < etss->n_map) {
- if (etss->map_table[eti->row_guess] == row) {
- return eti->row_guess;
- }
- }
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] == row)
- return i;
- }
- return -1;
- } else
- return row;
-}
-
-inline static gint
-model_to_view_col(ETableItem *eti, int col)
-{
- int i;
- if (col == -1)
- return -1;
- for (i = 0; i < eti->cols; i++) {
- ETableCol *ecol = e_table_header_get_column (eti->header, i);
- if (ecol->col_idx == col)
- return i;
- }
- return -1;
-}
-
-inline static GObject *
-eti_a11y_get_gobject (AtkObject *accessible)
-{
- return atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (accessible));
-}
-
-static void
-eti_dispose (GObject *object)
-{
- GalA11yETableItem *a11y = GAL_A11Y_E_TABLE_ITEM (object);
- GalA11yETableItemPrivate *priv = GET_PRIVATE (a11y);
-
- priv->parent = NULL;
-
- if ( priv->cell_data != NULL ) {
- g_free(priv->cell_data);
- priv->cell_data = NULL;
- }
-
- if (priv->columns) {
- g_free(priv->columns);
- priv->columns = NULL;
- }
-
- if (parent_class->dispose)
- parent_class->dispose (object);
- if (priv->selection)
- gal_a11y_e_table_item_unref_selection (a11y);
-}
-
-/* Static functions */
-static AtkObject *
-eti_get_parent (AtkObject *accessible)
-{
- GalA11yETableItem *a11y;
-
- g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), NULL);
- if (!eti_a11y_get_gobject (accessible))
- /* defunct */
- return NULL;
-
- a11y = GAL_A11Y_E_TABLE_ITEM (accessible);
- return GET_PRIVATE (a11y)->parent;
-}
-
-static gint
-eti_get_n_children (AtkObject *accessible)
-{
- g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), 0);
- if (!eti_a11y_get_gobject (accessible))
- return 0;
-
- return atk_table_get_n_columns (ATK_TABLE (accessible)) *
- atk_table_get_n_rows (ATK_TABLE (accessible));
-}
-
-static AtkObject*
-eti_ref_child (AtkObject *accessible, gint index)
-{
- ETableItem *item;
- gint col, row;
-
- g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), NULL);
- item = E_TABLE_ITEM (eti_a11y_get_gobject (accessible));
- if (!item)
- return NULL;
-
- if (index < item->cols) {
- AtkObject *child;
-
- /* A column header is required */
- child = atk_table_get_column_header (ATK_TABLE (accessible), index);
- if (child)
- g_object_ref (child);
- return child;
- }
-
- index -= item->cols;
- col = index % item->cols;
- row = index / item->cols;
-
- return atk_table_ref_at (ATK_TABLE (accessible), row, col);
-}
-
-static gint
-eti_get_index_in_parent (AtkObject *accessible)
-{
- GalA11yETableItem *a11y;
-
- g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), -1);
- if (!eti_a11y_get_gobject (accessible))
- return -1;
-
- a11y = GAL_A11Y_E_TABLE_ITEM (accessible);
- return GET_PRIVATE (a11y)->index_in_parent;
-}
-
-static void
-eti_get_extents (AtkComponent *component,
- gint *x,
- gint *y,
- gint *width,
- gint *height,
- AtkCoordType coord_type)
-{
- ETableItem *item;
- double real_width;
- double real_height;
- int fake_width;
- int fake_height;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (component)));
- if (!item)
- return;
-
- if (component_parent_iface &&
- component_parent_iface->get_extents)
- component_parent_iface->get_extents (component,
- x,
- y,
- &fake_width,
- &fake_height,
- coord_type);
-
- gtk_object_get (GTK_OBJECT (item),
- "width", &real_width,
- "height", &real_height,
- NULL);
-
- if (width)
- *width = real_width;
- if (height)
- *height = real_height;
-}
-
-static AtkObject*
-eti_ref_accessible_at_point (AtkComponent *component,
- gint x,
- gint y,
- AtkCoordType coord_type)
-{
- int row = -1;
- int col = -1;
- int x_origin, y_origin;
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (component)));
- if (!item)
- return NULL;
-
- atk_component_get_position (component,
- &x_origin,
- &y_origin,
- coord_type);
- x -= x_origin;
- y -= y_origin;
-
- e_table_item_compute_location (item, &x, &y,
- &row, &col);
-
- if (row != -1 && col != -1) {
- return atk_table_ref_at (ATK_TABLE (component), row, col);
- } else {
- return NULL;
- }
-}
-
-
-static void
-cell_destroyed (gpointer data)
-{
- gint index;
- GalA11yETableItem * item;
- GalA11yECell * cell;
-
- g_return_if_fail (GAL_A11Y_IS_E_CELL (data));
- cell = GAL_A11Y_E_CELL (data);
-
- item = GAL_A11Y_E_TABLE_ITEM (atk_gobject_accessible_for_object (G_OBJECT (GAL_A11Y_E_CELL(data)->item)));
-
- g_return_if_fail (item && GAL_A11Y_IS_E_TABLE_ITEM (item));
-
- g_return_if_fail (cell->row < GET_PRIVATE(item)->rows && cell->view_col < GET_PRIVATE(item)->cols);
-
- index = cell->row * cell->item->cols + cell->view_col;
-
- if (GET_PRIVATE (item)->cell_data && GET_PRIVATE (item)->cell_data [index] == data)
- GET_PRIVATE (item)->cell_data [index] = NULL;
-}
-
-/* atk table */
-static AtkObject*
-eti_ref_at (AtkTable *table, gint row, gint column)
-{
- ETableItem *item;
- AtkObject* ret;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return NULL;
-
- if (column >= 0 &&
- column < item->cols &&
- row >= 0 &&
- row < item->rows &&
- item->cell_views_realized) {
- ECellView *cell_view = item->cell_views[column];
- ETableCol *ecol = e_table_header_get_column (item->header, column);
- gpointer * cell_data;
-
- cell_data = eti_reinit_data (table, item);
- if (cell_data == NULL)
- return NULL;
-
- if (cell_data[row*item->cols + column] == NULL) {
- ret = gal_a11y_e_cell_registry_get_object (NULL,
- item,
- cell_view,
- ATK_OBJECT (table),
- ecol->col_idx,
- column,
- row);
- cell_data[row*item->cols + column] = ret;
- if (ATK_IS_OBJECT (ret)) {
- gal_a11y_e_cell_add_state(ret, ATK_STATE_SHOWING, FALSE);
- gal_a11y_e_cell_add_state(ret, ATK_STATE_VISIBLE, FALSE);
- g_object_weak_ref (G_OBJECT (ret),
- (GWeakNotify) cell_destroyed,
- ret);
- } else
- ret = NULL;
- } else {
- ret = (AtkObject *) cell_data[row*item->cols + column];
- if (ATK_IS_OBJECT (ret)) {
- g_object_ref (ret);
- } else {
- ret = NULL;
- }
- }
-
-
- return ret;
- }
-
- return NULL;
-}
-
-static gint
-eti_get_index_at (AtkTable *table, gint row, gint column)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return -1;
-
- return column + row * item->cols;
-}
-
-static gint
-eti_get_column_at_index (AtkTable *table, gint index)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return -1;
-
- return index % item->cols;
-}
-
-static gint
-eti_get_row_at_index (AtkTable *table, gint index)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return -1;
-
- return index / item->cols;
-}
-
-static gint
-eti_get_n_columns (AtkTable *table)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return -1;
-
- return item->cols;
-}
-
-static gint
-eti_get_n_rows (AtkTable *table)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return -1;
-
- return item->rows;
-}
-
-static gint
-eti_get_column_extent_at (AtkTable *table,
- gint row,
- gint column)
-{
- ETableItem *item;
- int width;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return -1;
-
- e_table_item_get_cell_geometry (item,
- &row,
- &column,
- NULL,
- NULL,
- &width,
- NULL);
-
- return width;
-}
-
-static gint
-eti_get_row_extent_at (AtkTable *table,
- gint row,
- gint column)
-{
- ETableItem *item;
- int height;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return -1;
-
- e_table_item_get_cell_geometry (item,
- &row,
- &column,
- NULL,
- NULL,
- NULL,
- &height);
-
- return height;
-}
-
-static AtkObject *
-eti_get_caption (AtkTable *table)
-{
- /* Unimplemented */
- return NULL;
-}
-
-static G_CONST_RETURN gchar *
-eti_get_column_description (AtkTable *table,
- gint column)
-{
- ETableItem *item;
- ETableCol *ecol;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return NULL;
-
- ecol = e_table_header_get_column (item->header, column);
-
- return ecol->text;
-}
-
-static AtkObject *
-eti_get_column_header (AtkTable *table, gint column)
-{
- ETableItem *item;
- ETableCol *ecol;
- AtkObject *atk_obj = NULL;
- ECell *ecell;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return NULL;
-
- ecol = e_table_header_get_column (item->header, column);
- ecell = ecol->ecell;
- if (ecell)
- atk_obj = atk_gobject_accessible_for_object (G_OBJECT (ecell));
- return atk_obj;
-}
-
-static G_CONST_RETURN gchar *
-eti_get_row_description (AtkTable *table,
- gint row)
-{
- /* Unimplemented */
- return NULL;
-}
-
-static AtkObject *
-eti_get_row_header (AtkTable *table,
- gint row)
-{
- /* Unimplemented */
- return NULL;
-}
-
-static AtkObject *
-eti_get_summary (AtkTable *table)
-{
- /* Unimplemented */
- return NULL;
-}
-
-static gboolean
-table_is_row_selected (AtkTable *table, gint row)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return FALSE;
-
- return e_selection_model_is_row_selected(item->selection, row);
-}
-
-static gboolean
-table_is_selected (AtkTable *table, gint row, gint column)
-{
- return table_is_row_selected (table, row);
-}
-
-static gint
-table_get_selected_rows (AtkTable *table, gint **rows_selected)
-{
- ETableItem *item;
- gint n_selected, row, index_selected;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return 0;
-
- n_selected = e_selection_model_selected_count (item->selection);
- if (rows_selected) {
- *rows_selected = (gint *) g_malloc (n_selected * sizeof (gint));
-
- index_selected = 0;
- for (row = 0; row < item->rows && index_selected < n_selected; ++row) {
- if (atk_table_is_row_selected (table, row)) {
- (*rows_selected)[index_selected] = row;
- ++index_selected;
- }
- }
- }
- return n_selected;
-}
-
-static gboolean
-table_add_row_selection (AtkTable *table, gint row)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return FALSE;
-
- if (table_is_row_selected (table, row))
- return TRUE;
- e_selection_model_toggle_single_row (item->selection,
- view_to_model_row (item, row));
-
- return TRUE;
-}
-
-static gboolean
-table_remove_row_selection (AtkTable *table, gint row)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return FALSE;
-
- if (!atk_table_is_row_selected (table, row))
- return TRUE;
- e_selection_model_toggle_single_row (item->selection, row);
- return TRUE;
-}
-
-static void
-eti_atk_table_iface_init (AtkTableIface *iface)
-{
- iface->ref_at = eti_ref_at;
- iface->get_index_at = eti_get_index_at;
- iface->get_column_at_index = eti_get_column_at_index;
- iface->get_row_at_index = eti_get_row_at_index;
- iface->get_n_columns = eti_get_n_columns;
- iface->get_n_rows = eti_get_n_rows;
- iface->get_column_extent_at = eti_get_column_extent_at;
- iface->get_row_extent_at = eti_get_row_extent_at;
- iface->get_caption = eti_get_caption;
- iface->get_column_description = eti_get_column_description;
- iface->get_column_header = eti_get_column_header;
- iface->get_row_description = eti_get_row_description;
- iface->get_row_header = eti_get_row_header;
- iface->get_summary = eti_get_summary;
-
- iface->is_row_selected = table_is_row_selected;
- iface->is_selected = table_is_selected;
- iface->get_selected_rows = table_get_selected_rows;
- iface->add_row_selection = table_add_row_selection;
- iface->remove_row_selection = table_remove_row_selection;
-}
-
-static void
-eti_atk_component_iface_init (AtkComponentIface *iface)
-{
- component_parent_iface = g_type_interface_peek_parent (iface);
-
- iface->ref_accessible_at_point = eti_ref_accessible_at_point;
- iface->get_extents = eti_get_extents;
-}
-
-static void
-eti_rows_inserted (ETableModel * model, int row, int count,
- AtkObject * table_item)
-{
- gint n_cols,n_rows,i,j;
- gpointer *cell_data;
- GalA11yETableItem * item_a11y;
- gint old_nrows;
-
- g_return_if_fail (table_item);
- item_a11y = GAL_A11Y_E_TABLE_ITEM (table_item);
-
- n_cols = atk_table_get_n_columns (ATK_TABLE(table_item));
- n_rows = atk_table_get_n_rows (ATK_TABLE(table_item));
-
- old_nrows = GET_PRIVATE(item_a11y)->rows;
-
- g_return_if_fail (n_cols > 0 && n_rows > 0);
- g_return_if_fail (old_nrows == n_rows - count);
-
- cell_data = GET_PRIVATE(table_item)->cell_data;
- GET_PRIVATE(table_item)->cell_data = g_realloc (cell_data, (n_rows*n_cols) * sizeof(gpointer));
- cell_data = GET_PRIVATE(table_item)->cell_data;
-
- GET_PRIVATE(table_item)->rows = n_rows;
-
- /* If rows are insert in the middle of a table. */
- if (row + count < n_rows ) {
- memmove(&cell_data[(row+count)*n_cols], &cell_data[row*n_cols],
- (old_nrows-row)*n_cols*sizeof(gpointer));
-
- /* Update cell's index. */
- for (i = row + count; i < n_rows; i ++) {
- for (j = 0; j < n_cols; j ++)
- if (cell_data[i*n_cols + j] != NULL) {
- AtkObject * a11y;
-
- a11y = ATK_OBJECT(cell_data[i*n_cols + j]);
- GAL_A11Y_E_CELL(a11y)->row = i;
- }
- }
- }
-
- /* Clear cache for the new added rows. */
- for (i = row ; i < row+count; i ++)
- for (j = 0 ; j < n_cols; j ++)
- cell_data [i*n_cols + j] = NULL;
-
- g_signal_emit_by_name (table_item, "row-inserted", row,
- count, NULL);
-
- for (i = row; i < (row + count); i ++) {
- for (j = 0; j < n_cols; j ++) {
- g_signal_emit_by_name (table_item,
- "children_changed::add",
- ( (i*n_cols) + j), NULL, NULL);
- }
- }
-
- g_signal_emit_by_name (table_item, "visible-data-changed");
-}
-
-/*
- * reinit the eti's private data
- * make sure it is synchronized with the gal-e-table-item
- */
-static gpointer *
-eti_reinit_data (AtkTable *table, ETableItem *item)
-{
- gpointer * cell_data;
-
- int oldsize, newsize;
- cell_data = GET_PRIVATE (table)->cell_data;
- if (GET_PRIVATE (table)->rows != item->rows
- || GET_PRIVATE (table)->cols != item->cols ) { /* reinit cell_data */
- oldsize = GET_PRIVATE (table)->cols * GET_PRIVATE (table)->rows;
- newsize = item->cols*item->rows;
- GET_PRIVATE (table)->cols = item->cols;
- GET_PRIVATE (table)->rows = item->rows;
-
- cell_data = g_realloc(cell_data, newsize*sizeof(gpointer));
- if (newsize > oldsize)
- memset(&cell_data[oldsize], 0, (newsize-oldsize)*sizeof(gpointer));
-
- GET_PRIVATE (table)->cell_data = cell_data;
- }
- return cell_data;
-}
-
-/*
- * clear all the AtkObjects stored in the cell_data
- * doesn't free the cell_data or resize it.
- */
-static void
-eti_clear_rows (ETableModel * model, AtkObject * table_item, int row, int count)
-{
- gint i,j, n_rows, n_cols;
- gpointer *cell_data;
-
- g_return_if_fail (model && table_item);
-
- cell_data = GET_PRIVATE (table_item)->cell_data;
- g_return_if_fail (cell_data);
-
- n_rows = GET_PRIVATE (table_item)->rows;
- n_cols = GET_PRIVATE (table_item)->cols;
-
- g_return_if_fail( row >= 0 && count > 0 && row+count <= n_rows);
-
- /* DEFUNCT the deleted cells. */
- for (i = row; i < row+count; i ++) {
- for (j = 0; j < n_cols; j ++) {
- if (cell_data[i*n_cols + j] != NULL) {
- AtkObject * a11y;
-
- a11y = ATK_OBJECT(cell_data[i*n_cols + j]);
- gal_a11y_e_cell_add_state (GAL_A11Y_E_CELL(a11y), ATK_STATE_DEFUNCT, TRUE);
- cell_data[i*n_cols + j] = NULL;
- }
- }
- }
-
- g_signal_emit_by_name (table_item, "row-deleted", row,
- count, NULL);
-
- for (i = row; i < row+count; i ++) {
- for (j = 0; j < n_cols; j ++) {
- g_signal_emit_by_name (table_item,
- "children_changed::remove",
- ( (i*n_cols) + j), NULL, NULL);
- }
- }
- g_signal_emit_by_name (table_item, "visible-data-changed");
-}
-
-static void
-eti_rows_deleted (ETableModel * model, int row, int count,
- AtkObject * table_item)
-{
- gint i,j, n_rows, n_cols, old_nrows;
- gpointer *cell_data;
-
- n_rows = atk_table_get_n_rows (ATK_TABLE(table_item));
- n_cols = atk_table_get_n_columns (ATK_TABLE(table_item));
-
- cell_data = GET_PRIVATE(table_item)->cell_data;
- old_nrows = GET_PRIVATE(table_item)->rows;
-
- g_return_if_fail ( row+count <= old_nrows);
- g_return_if_fail (old_nrows == n_rows + count);
- GET_PRIVATE(table_item)->rows = n_rows;
-
- /* DEFUNCT the deleted cells. */
- for (i = row; i < row+count; i ++) {
- for (j = 0; j < n_cols; j ++) {
- if (cell_data[i*n_cols + j] != NULL) {
- AtkObject * a11y;
-
- a11y = ATK_OBJECT(cell_data[i*n_cols + j]);
- gal_a11y_e_cell_add_state (GAL_A11Y_E_CELL(a11y), ATK_STATE_DEFUNCT, TRUE);
- cell_data[i*n_cols + j] = NULL;
- }
- }
- }
-
- /* If more rows left, update the a11y object. */
- if (old_nrows > row + count) {
-
- /* Remove the defunct cells in cache. */
- memmove (&cell_data[row*n_cols], &cell_data[(row+count)*n_cols],
- ( old_nrows-row-count)*n_cols*sizeof(gpointer));
-
- GET_PRIVATE(table_item)->cell_data = g_realloc (cell_data, n_rows*n_cols*sizeof(gpointer));
- cell_data = GET_PRIVATE(table_item)->cell_data;
-
- /* Update index of cells below the deleted rows. */
- for (i = row; i < n_rows; i ++) {
- for (j = 0; j < n_cols; j ++) {
- if (cell_data[i*n_cols + j] != NULL) {
- AtkObject * a11y;
-
- a11y = ATK_OBJECT(cell_data[i*n_cols + j]);
- GAL_A11Y_E_CELL(a11y)->row = i;
- }
- }
- }
- }
-
- g_signal_emit_by_name (table_item, "row-deleted", row,
- count, NULL);
-
- for (i = row; i < (row + count); i ++) {
- for (j = 0; j < n_cols; j ++) {
- g_signal_emit_by_name (table_item,
- "children_changed::remove",
- ( (i*n_cols) + j), NULL, NULL);
- }
- }
- g_signal_emit_by_name (table_item, "visible-data-changed");
-}
-
-static void
-eti_tree_model_node_changed_cb (ETreeModel *model, ETreePath node, ETableItem *eti)
-{
- AtkObject *atk_obj;
- GalA11yETableItem *a11y;
-
- g_return_if_fail (E_IS_TABLE_ITEM (eti));
-
- atk_obj = atk_gobject_accessible_for_object (G_OBJECT (eti));
- a11y = GAL_A11Y_E_TABLE_ITEM (atk_obj);
-
- /* we can't figure out which rows are changed, so just clear all of them ... */
- if (GET_PRIVATE (a11y)->rows > 0)
- eti_clear_rows (eti->table_model, atk_obj, 0, GET_PRIVATE (a11y)->rows);
-}
-
-enum {
- ETI_HEADER_UNCHANGED = 0,
- ETI_HEADER_REORDERED,
- ETI_HEADER_NEW_ADDED,
- ETI_HEADER_REMOVED,
-};
-
-/*
- * 1. Check what actually happened: column reorder, remove or add
- * 2. Update cache
- * 3. Emit signals
- */
-static void
-eti_header_structure_changed (ETableHeader *eth, AtkObject *a11y)
-{
-
- gboolean reorder_found=FALSE, added_found=FALSE, removed_found=FALSE;
- GalA11yETableItem * a11y_item;
- ETableCol ** cols, **prev_cols;
- GalA11yETableItemPrivate *priv;
- gint *state = NULL, *prev_state = NULL, *reorder = NULL;
- gint i,j,n_rows,n_cols, prev_n_cols;
- gpointer * cell_data, * tmp;
-
- a11y_item = GAL_A11Y_E_TABLE_ITEM (a11y);
- priv = GET_PRIVATE (a11y_item);
-
- g_return_if_fail (priv && priv->cell_data);
- cell_data = priv->cell_data ;
-
- /* Assume rows do not changed. */
- n_rows = priv->rows;
-
- prev_n_cols = priv->cols;
- prev_cols = priv->columns;
-
- cols = e_table_header_get_columns (eth);
- n_cols = eth->col_count;
-
- g_return_if_fail (cols && prev_cols && n_cols > 0);
-
- /* Init to ETI_HEADER_UNCHANGED. */
- state = g_malloc0 (sizeof (gint) * n_cols);
- prev_state = g_malloc0 (sizeof (gint) * prev_n_cols);
- reorder = g_malloc0 (sizeof (gint) * n_cols);
-
- /* Compare with previously saved column headers. */
- for ( i = 0 ; i < n_cols && cols[i]; i ++ ) {
- for ( j = 0 ; j < prev_n_cols && prev_cols[j]; j ++ ) {
- if ( prev_cols [j] == cols[i] && i != j ) {
-
- reorder_found = TRUE;
- state [i] = ETI_HEADER_REORDERED;
- reorder [i] = j;
-
- break;
- } else if (prev_cols[j] == cols[i]) {
- /* OK, this column is not changed. */
- break;
- }
- }
-
- /* cols[i] is new added column. */
- if ( j == prev_n_cols ) {
- added_found = TRUE;
- state[i] = ETI_HEADER_NEW_ADDED;
- }
- }
-
- /* Now try to find if there are removed columns. */
- for (i = 0 ; i < prev_n_cols && prev_cols[i]; i ++) {
- for (j = 0 ; j < n_cols && cols[j]; j ++)
- if ( prev_cols [j] == cols[i] )
- break;
-
- /* Removed columns found. */
- if ( j == n_cols ) {
- removed_found = TRUE;
- prev_state[j] = ETI_HEADER_REMOVED;
- }
- }
-
- /* If nothing interesting just return. */
- if (!reorder_found && !added_found && !removed_found)
- return;
-
- /* Now update our cache. */
- tmp = g_malloc0 (n_rows*n_cols*sizeof(gpointer));
- g_return_if_fail (tmp);
-
- for (i = 0 ; i < n_rows; i ++) {
- for ( j = 0 ; j < n_cols; j ++ ) {
- if ( state[j] == ETI_HEADER_REORDERED ) {
- tmp [i*n_cols+j] = cell_data[i*prev_n_cols+reorder[j]];
- if (tmp[i*n_cols+j] && ATK_IS_OBJECT(tmp[i*n_cols+j])) {
- GAL_A11Y_E_CELL(tmp[i*n_cols+j])->view_col = j;
- }
- } else if (state[j] == ETI_HEADER_UNCHANGED) {
- tmp [i*n_cols+j] = cell_data[i*prev_n_cols+j];
- } /* else: new added, keep NULL. */
- }
- }
-
- g_free (cell_data);
- priv->cell_data = tmp;
-
- /* Emit signals */
- if (reorder_found)
- g_signal_emit_by_name (G_OBJECT(a11y_item), "column_reordered");
-
-
- if (removed_found) {
- for (i = 0; i < prev_n_cols; i ++ ) {
- if (prev_state[i] == ETI_HEADER_REMOVED) {
- g_signal_emit_by_name (G_OBJECT(a11y_item), "column-deleted", i, 1);
- for (j = 0 ; j < n_rows; j ++)
- g_signal_emit_by_name (G_OBJECT(a11y_item), "children_changed::remove", (j*prev_n_cols+i), NULL, NULL);
- }
- }
- }
-
- if (added_found) {
- for ( i = 0; i < n_cols; i ++ ) {
- if (state[i] == ETI_HEADER_NEW_ADDED) {
- g_signal_emit_by_name (G_OBJECT(a11y_item), "column-inserted", i, 1);
- for (j = 0 ; j < n_rows; j ++)
- g_signal_emit_by_name (G_OBJECT(a11y_item), "children_changed::add", (j*n_cols+i), NULL, NULL);
- }
- }
- }
-
- priv->cols = n_cols;
-
- g_free (state);
- g_free (reorder);
- g_free (prev_state);
-
- g_free (priv->columns);
- priv->columns = cols;
-}
-
-
-static void
-eti_real_initialize (AtkObject *obj,
- gpointer data)
-{
- ETableItem * eti;
- ETableModel * model;
-
- ATK_OBJECT_CLASS (parent_class)->initialize (obj, data);
- eti = E_TABLE_ITEM (data);
-
- model = eti->table_model;
-
- g_signal_connect (model, "model-rows-inserted",
- G_CALLBACK (eti_rows_inserted),
- obj);
- g_signal_connect (model, "model-rows-deleted",
- G_CALLBACK (eti_rows_deleted),
- obj);
- g_signal_connect (G_OBJECT (eti->header), "structure_change",
- G_CALLBACK (eti_header_structure_changed), obj);
-
-}
-
-static void
-eti_class_init (GalA11yETableItemClass *klass)
-{
- AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- quark_accessible_object = g_quark_from_static_string ("gtk-accessible-object");
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = eti_dispose;
-
- atk_object_class->get_parent = eti_get_parent;
- atk_object_class->get_n_children = eti_get_n_children;
- atk_object_class->ref_child = eti_ref_child;
- atk_object_class->get_index_in_parent = eti_get_index_in_parent;
- atk_object_class->initialize = eti_real_initialize;
-}
-
-static void
-eti_init (GalA11yETableItem *a11y)
-{
- GalA11yETableItemPrivate *priv;
-
- priv = GET_PRIVATE (a11y);
-
- priv->parent = NULL;
- priv->index_in_parent = -1;
- priv->selection_change_id = 0;
- priv->cursor_change_id = 0;
- priv->selection = NULL;
-}
-
-/* atk selection */
-
-static void atk_selection_interface_init (AtkSelectionIface *iface);
-static gboolean selection_add_selection (AtkSelection *selection,
- gint i);
-static gboolean selection_clear_selection (AtkSelection *selection);
-static AtkObject* selection_ref_selection (AtkSelection *selection,
- gint i);
-static gint selection_get_selection_count (AtkSelection *selection);
-static gboolean selection_is_child_selected (AtkSelection *selection,
- gint i);
-
-/* callbacks */
-static void eti_a11y_selection_model_removed_cb (ETableItem *eti,
- ESelectionModel *selection,
- gpointer data);
-static void eti_a11y_selection_model_added_cb (ETableItem *eti,
- ESelectionModel *selection,
- gpointer data);
-static void eti_a11y_selection_changed_cb (ESelectionModel *selection,
- GalA11yETableItem *a11y);
-static void eti_a11y_cursor_changed_cb (ESelectionModel *selection,
- int row, int col,
- GalA11yETableItem *a11y);
-
-/**
- * gal_a11y_e_table_item_get_type:
- * @void:
- *
- * Registers the &GalA11yETableItem class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETableItem class.
- **/
-GType
-gal_a11y_e_table_item_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- AtkObjectFactory *factory;
-
- GTypeInfo info = {
- sizeof (GalA11yETableItemClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) eti_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETableItem),
- 0,
- (GInstanceInitFunc) eti_init,
- NULL /* value_table_item */
- };
-
- static const GInterfaceInfo atk_component_info = {
- (GInterfaceInitFunc) eti_atk_component_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
- static const GInterfaceInfo atk_table_info = {
- (GInterfaceInitFunc) eti_atk_table_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- static const GInterfaceInfo atk_selection_info = {
- (GInterfaceInitFunc) atk_selection_interface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
-
- factory = atk_registry_get_factory (atk_get_default_registry (), GNOME_TYPE_CANVAS_ITEM);
- parent_type = atk_object_factory_get_accessible_type (factory);
-
- type = gal_a11y_type_register_static_with_private (PARENT_TYPE, "GalA11yETableItem", &info, 0,
- sizeof (GalA11yETableItemPrivate), &priv_offset);
-
- g_type_add_interface_static (type, ATK_TYPE_COMPONENT, &atk_component_info);
- g_type_add_interface_static (type, ATK_TYPE_TABLE, &atk_table_info);
- g_type_add_interface_static (type, ATK_TYPE_SELECTION, &atk_selection_info);
- }
-
- return type;
-}
-
-AtkObject *
-gal_a11y_e_table_item_new (AtkObject *parent,
- ETableItem *item,
- int index_in_parent)
-{
- GalA11yETableItem *a11y;
- AtkObject *accessible;
- int n;
-
- g_return_val_if_fail (item && item->cols >= 0 && item->rows >= 0, NULL);
- a11y = g_object_new (gal_a11y_e_table_item_get_type (), NULL);
-
- atk_object_initialize (ATK_OBJECT (a11y), item);
-
- GET_PRIVATE (a11y)->parent = parent;
- GET_PRIVATE (a11y)->index_in_parent = index_in_parent;
-
- accessible = ATK_OBJECT(a11y);
- accessible->role = ATK_ROLE_TREE_TABLE;
-
- /* Initialize cell data. */
- n = item->cols * item->rows;
- GET_PRIVATE (a11y)->cols = item->cols;
- GET_PRIVATE (a11y)->rows = item->rows;
- if (n > 0) {
- GET_PRIVATE (a11y)->cell_data = g_malloc0(n*sizeof(gpointer));
- /* memory error. */
- if ( GET_PRIVATE (a11y)->cell_data == NULL)
- return NULL;
- } else
- GET_PRIVATE (a11y)->cell_data = NULL;
-
-
- GET_PRIVATE (a11y)->columns = e_table_header_get_columns (item->header);
- if ( GET_PRIVATE (a11y)->columns == NULL)
- return NULL;
-
- if (item) {
- g_signal_connect (G_OBJECT(item), "selection_model_removed",
- G_CALLBACK (eti_a11y_selection_model_removed_cb), NULL);
- g_signal_connect (G_OBJECT(item), "selection_model_added",
- G_CALLBACK (eti_a11y_selection_model_added_cb), NULL);
- if (item->selection)
- gal_a11y_e_table_item_ref_selection (a11y,
- item->selection);
-
- /* find the TableItem's parent: table or tree */
- GET_PRIVATE (a11y)->widget = gtk_widget_get_parent (GTK_WIDGET (item->parent.canvas));
- if (E_IS_TREE (GET_PRIVATE (a11y)->widget)) {
- ETreeModel *model;
- model = e_tree_get_model (E_TREE (GET_PRIVATE (a11y)->widget));
- g_signal_connect (G_OBJECT(model), "node_changed",
- G_CALLBACK (eti_tree_model_node_changed_cb), item);
- }
- }
- if (parent)
- g_object_ref (parent);
-
-#if 0
- if (item)
- g_object_weak_ref (G_OBJECT (item),
- unref_accessible,
- a11y);
-#endif
-
- return ATK_OBJECT (a11y);
-}
-
-static gboolean
-gal_a11y_e_table_item_ref_selection (GalA11yETableItem *a11y,
- ESelectionModel *selection)
-{
- GalA11yETableItemPrivate *priv;
-
- g_return_val_if_fail (a11y && selection, FALSE);
-
- priv = GET_PRIVATE (a11y);
- priv->selection_change_id = g_signal_connect (
- G_OBJECT(selection), "selection_changed",
- G_CALLBACK (eti_a11y_selection_changed_cb), a11y);
- priv->cursor_change_id = g_signal_connect (
- G_OBJECT(selection), "cursor_changed",
- G_CALLBACK (eti_a11y_cursor_changed_cb), a11y);
-
- priv->selection = selection;
- g_object_ref (selection);
-
- return TRUE;
-}
-
-static gboolean
-gal_a11y_e_table_item_unref_selection (GalA11yETableItem *a11y)
-{
- GalA11yETableItemPrivate *priv;
-
- g_return_val_if_fail (a11y, FALSE);
-
- priv = GET_PRIVATE (a11y);
-
- g_return_val_if_fail (priv->selection_change_id != 0, FALSE);
- g_return_val_if_fail (priv->cursor_change_id != 0, FALSE);
-
-
- g_signal_handler_disconnect (priv->selection,
- priv->selection_change_id);
- g_signal_handler_disconnect (priv->selection,
- priv->cursor_change_id);
- priv->cursor_change_id = 0;
- priv->selection_change_id = 0;
-
- g_object_unref (priv->selection);
- priv->selection = NULL;
-
- return TRUE;
-}
-
-/* callbacks */
-
-static void
-eti_a11y_selection_model_removed_cb (ETableItem *eti, ESelectionModel *selection,
- gpointer data)
-{
- AtkObject *atk_obj;
- GalA11yETableItem *a11y;
-
- g_return_if_fail (E_IS_TABLE_ITEM (eti));
- g_return_if_fail (E_IS_SELECTION_MODEL (selection));
-
- atk_obj = atk_gobject_accessible_for_object (G_OBJECT (eti));
- a11y = GAL_A11Y_E_TABLE_ITEM (atk_obj);
-
- if (selection == GET_PRIVATE (a11y)->selection)
- gal_a11y_e_table_item_unref_selection (a11y);
-}
-
-static void
-eti_a11y_selection_model_added_cb (ETableItem *eti, ESelectionModel *selection,
- gpointer data)
-{
- AtkObject *atk_obj;
- GalA11yETableItem *a11y;
-
- g_return_if_fail (E_IS_TABLE_ITEM (eti));
- g_return_if_fail (E_IS_SELECTION_MODEL (selection));
-
- atk_obj = atk_gobject_accessible_for_object (G_OBJECT (eti));
- a11y = GAL_A11Y_E_TABLE_ITEM (atk_obj);
-
- if (GET_PRIVATE (a11y)->selection)
- gal_a11y_e_table_item_unref_selection (a11y);
- gal_a11y_e_table_item_ref_selection (a11y, selection);
-}
-
-static void
-eti_a11y_selection_changed_cb (ESelectionModel *selection, GalA11yETableItem *a11y)
-{
- g_return_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (a11y));
-
- g_signal_emit_by_name (a11y, "selection_changed");
-}
-
-static void
-eti_a11y_cursor_changed_cb (ESelectionModel *selection,
- int row, int col, GalA11yETableItem *a11y)
-{
- AtkObject * cell;
- int view_row, view_col;
- ETableItem *item;
-
- g_return_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (a11y));
-
- g_signal_emit_by_name (a11y, "selection_changed");
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (a11y)));
-
- g_return_if_fail (item);
-
- view_row = model_to_view_row (item, row);
- view_col = model_to_view_col (item, col);
-
- cell = atk_table_ref_at (ATK_TABLE (a11y), view_row, view_col);
- if (cell != NULL) {
- gal_a11y_e_cell_add_state (GAL_A11Y_E_CELL (cell), ATK_STATE_FOCUSED, FALSE);
-
- if (ATK_IS_OBJECT (cell))
- g_signal_emit_by_name (a11y,
- "active-descendant-changed",
- cell);
- atk_focus_tracker_notify (cell);
- }
-
-}
-
-/* atk selection */
-
-static void atk_selection_interface_init (AtkSelectionIface *iface)
-{
- g_return_if_fail (iface != NULL);
- iface->add_selection = selection_add_selection;
- iface->clear_selection = selection_clear_selection;
- iface->ref_selection = selection_ref_selection;
- iface->get_selection_count = selection_get_selection_count;
- iface->is_child_selected = selection_is_child_selected;
-}
-
-static gboolean
-selection_add_selection (AtkSelection *selection, gint index)
-{
- AtkTable *table;
- gint row, col;
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (selection)));
- if (!item)
- return FALSE;
-
- table = ATK_TABLE (selection);
-
- row = atk_table_get_row_at_index (table, index);
- atk_table_add_row_selection (table, row);
-
- col = atk_table_get_column_at_index (table, index);
- e_selection_model_change_cursor (item->selection,
- view_to_model_row (item, row),
- view_to_model_col (item, col));
- e_selection_model_cursor_changed (item->selection,
- view_to_model_row (item, row),
- view_to_model_col (item, col));
- e_selection_model_cursor_activated (item->selection,
- view_to_model_row (item, row),
- view_to_model_col (item, col));
- return TRUE;
-}
-
-static gboolean
-selection_clear_selection (AtkSelection *selection)
-{
- ETableItem *item;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (selection)));
- if (!item)
- return FALSE;
-
- e_selection_model_clear (item->selection);
- return TRUE;
-}
-
-static AtkObject *
-selection_ref_selection (AtkSelection *selection, gint index)
-{
- AtkTable *table;
- gint row, col;
-
- table = ATK_TABLE (selection);
- row = atk_table_get_row_at_index (table, index);
- col = atk_table_get_column_at_index (table, index);
- if (!atk_table_is_row_selected (table, row))
- return NULL;
-
- return atk_table_ref_at (table, row, col);
-}
-
-static gint
-selection_get_selection_count (AtkSelection *selection)
-{
- AtkTable *table;
- gint n_selected;
-
- table = ATK_TABLE (selection);
- n_selected = atk_table_get_selected_rows (table, NULL);
- if (n_selected > 0)
- n_selected *= atk_table_get_n_columns (table);
- return n_selected;
-}
-
-static gboolean
-selection_is_child_selected (AtkSelection *selection, gint i)
-{
- gint row;
-
- row = atk_table_get_row_at_index (ATK_TABLE (selection), i);
- return atk_table_is_row_selected (ATK_TABLE (selection), row);
-}
diff --git a/a11y/e-table/gal-a11y-e-table-item.h b/a11y/e-table/gal-a11y-e-table-item.h
deleted file mode 100644
index f3a447131d..0000000000
--- a/a11y/e-table/gal-a11y-e-table-item.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_TABLE_ITEM_H__
-#define __GAL_A11Y_E_TABLE_ITEM_H__
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-item.h>
-#include <atk/atkgobjectaccessible.h>
-
-#define GAL_A11Y_TYPE_E_TABLE_ITEM (gal_a11y_e_table_item_get_type ())
-#define GAL_A11Y_E_TABLE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TABLE_ITEM, GalA11yETableItem))
-#define GAL_A11Y_E_TABLE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TABLE_ITEM, GalA11yETableItemClass))
-#define GAL_A11Y_IS_E_TABLE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TABLE_ITEM))
-#define GAL_A11Y_IS_E_TABLE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TABLE_ITEM))
-
-typedef struct _GalA11yETableItem GalA11yETableItem;
-typedef struct _GalA11yETableItemClass GalA11yETableItemClass;
-typedef struct _GalA11yETableItemPrivate GalA11yETableItemPrivate;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yETableItemPrivate comes right after the parent class structure.
- **/
-struct _GalA11yETableItem {
- AtkGObjectAccessible parent;
-};
-
-struct _GalA11yETableItemClass {
- AtkGObjectAccessibleClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_table_item_get_type (void);
-AtkObject *gal_a11y_e_table_item_new (AtkObject *parent,
- ETableItem *item,
- int index_in_parent);
-
-#endif /* ! __GAL_A11Y_E_TABLE_ITEM_H__ */
diff --git a/a11y/e-table/gal-a11y-e-table.c b/a11y/e-table/gal-a11y-e-table.c
deleted file mode 100644
index 8f4f246e70..0000000000
--- a/a11y/e-table/gal-a11y-e-table.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-e-table.h"
-#include "gal-a11y-e-table-item.h"
-#include "gal-a11y-util.h"
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-table-group.h>
-#include <gal/e-table/e-table-group-leaf.h>
-#include <gal/e-table/e-table-click-to-add.h>
-
-#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yETableClass))
-static AtkObjectClass *parent_class;
-static GType parent_type;
-static gint priv_offset;
-#define GET_PRIVATE(object) ((GalA11yETablePrivate *) (((char *) object) + priv_offset))
-#define PARENT_TYPE (parent_type)
-
-struct _GalA11yETablePrivate {
- AtkObject *child_item;
-};
-
-/* Static functions */
-
-static void
-init_child_item (GalA11yETable *a11y)
-{
- GalA11yETablePrivate *priv = GET_PRIVATE (a11y);
- ETable *table = E_TABLE (GTK_ACCESSIBLE (a11y)->widget);
- if (priv->child_item == NULL) {
- priv->child_item = atk_gobject_accessible_for_object (G_OBJECT(E_TABLE_GROUP_LEAF (table->group)->item));
- priv->child_item->role = ATK_ROLE_TABLE;
- }
-}
-
-static AtkObject*
-et_ref_accessible_at_point (AtkComponent *component,
- gint x,
- gint y,
- AtkCoordType coord_type)
-{
- GalA11yETable *a11y = GAL_A11Y_E_TABLE (component);
- init_child_item (a11y);
- return GET_PRIVATE (a11y)->child_item;
-}
-
-static gint
-et_get_n_children (AtkObject *accessible)
-{
- GalA11yETable *a11y = GAL_A11Y_E_TABLE (accessible);
- ETable * et;
-
- et = E_TABLE(GTK_ACCESSIBLE (a11y)->widget);
- if (et && et->use_click_to_add) {
- return 2;
- }
-
- return 1;
-}
-
-static AtkObject*
-et_ref_child (AtkObject *accessible,
- gint i)
-{
- GalA11yETable *a11y = GAL_A11Y_E_TABLE (accessible);
- ETable * et;
-
- et = E_TABLE(GTK_ACCESSIBLE (a11y)->widget);
-
- if (i == 0) {
- init_child_item (a11y);
- g_object_ref (GET_PRIVATE (a11y)->child_item);
- return GET_PRIVATE (a11y)->child_item;
- } else if (i == 1) {
- AtkObject * accessible;
- ETableClickToAdd * etcta;
-
- if (et && et->use_click_to_add && et->click_to_add) {
- etcta = E_TABLE_CLICK_TO_ADD(et->click_to_add);
- if (etcta->rect) {
- accessible = atk_gobject_accessible_for_object (G_OBJECT(etcta));
- } else {
- accessible = atk_gobject_accessible_for_object (G_OBJECT(etcta->row));
- }
- return accessible;
- }
- }
-
- return NULL;
-}
-
-static void
-et_class_init (GalA11yETableClass *klass)
-{
- AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- atk_object_class->get_n_children = et_get_n_children;
- atk_object_class->ref_child = et_ref_child;
-}
-
-static void
-et_atk_component_iface_init (AtkComponentIface *iface)
-{
- iface->ref_accessible_at_point = et_ref_accessible_at_point;
-}
-
-static void
-et_init (GalA11yETable *a11y)
-{
- GalA11yETablePrivate *priv;
-
- priv = GET_PRIVATE (a11y);
-
- priv->child_item = NULL;
-}
-
-/**
- * gal_a11y_e_table_get_type:
- * @void:
- *
- * Registers the &GalA11yETable class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETable class.
- **/
-GType
-gal_a11y_e_table_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- AtkObjectFactory *factory;
-
- GTypeInfo info = {
- sizeof (GalA11yETableClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) et_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETable),
- 0,
- (GInstanceInitFunc) et_init,
- NULL /* value_table */
- };
-
- static const GInterfaceInfo atk_component_info = {
- (GInterfaceInitFunc) et_atk_component_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- factory = atk_registry_get_factory (atk_get_default_registry (), GTK_TYPE_WIDGET);
- parent_type = atk_object_factory_get_accessible_type (factory);
-
- type = gal_a11y_type_register_static_with_private (PARENT_TYPE, "GalA11yETable", &info, 0,
- sizeof (GalA11yETablePrivate), &priv_offset);
- g_type_add_interface_static (type, ATK_TYPE_COMPONENT, &atk_component_info);
- }
-
- return type;
-}
-
-AtkObject *
-gal_a11y_e_table_new (GObject *widget)
-{
- GalA11yETable *a11y;
- ETable *table;
-
- table = E_TABLE (widget);
-
- a11y = g_object_new (gal_a11y_e_table_get_type (), NULL);
-
- GTK_ACCESSIBLE (a11y)->widget = GTK_WIDGET (widget);
-
- return ATK_OBJECT (a11y);
-}
diff --git a/a11y/e-table/gal-a11y-e-table.h b/a11y/e-table/gal-a11y-e-table.h
deleted file mode 100644
index 0a0901e3bc..0000000000
--- a/a11y/e-table/gal-a11y-e-table.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_TABLE_H__
-#define __GAL_A11Y_E_TABLE_H__
-
-#include <glib-object.h>
-#include <atk/atkobject.h>
-#include <atk/atkcomponent.h>
-#include <gtk/gtkaccessible.h>
-
-#define GAL_A11Y_TYPE_E_TABLE (gal_a11y_e_table_get_type ())
-#define GAL_A11Y_E_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TABLE, GalA11yETable))
-#define GAL_A11Y_E_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TABLE, GalA11yETableClass))
-#define GAL_A11Y_IS_E_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TABLE))
-#define GAL_A11Y_IS_E_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TABLE))
-
-typedef struct _GalA11yETable GalA11yETable;
-typedef struct _GalA11yETableClass GalA11yETableClass;
-typedef struct _GalA11yETablePrivate GalA11yETablePrivate;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yETablePrivate comes right after the parent class structure.
- **/
-struct _GalA11yETable {
- GtkAccessible object;
-};
-
-struct _GalA11yETableClass {
- GtkAccessibleClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_table_get_type (void);
-AtkObject *gal_a11y_e_table_new (GObject *table);
-
-#endif /* ! __GAL_A11Y_E_TABLE_H__ */
diff --git a/a11y/e-table/gal-a11y-e-tree-factory.c b/a11y/e-table/gal-a11y-e-tree-factory.c
deleted file mode 100644
index 2fa34c5fbc..0000000000
--- a/a11y/e-table/gal-a11y-e-tree-factory.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Authors: Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-e-tree-factory.h"
-#include "gal-a11y-e-tree.h"
-
-#define CS_CLASS(factory) (G_TYPE_INSTANCE_GET_CLASS ((factory), C_TYPE_STREAM, GalA11yETreeFactoryClass))
-static AtkObjectFactoryClass *parent_class;
-#define PARENT_TYPE (ATK_TYPE_OBJECT_FACTORY)
-
-/* Static functions */
-
-static GType
-gal_a11y_e_tree_factory_get_accessible_type (void)
-{
- return GAL_A11Y_TYPE_E_TREE;
-}
-
-static AtkObject*
-gal_a11y_e_tree_factory_create_accessible (GObject *obj)
-{
- AtkObject *accessible;
-
- accessible = gal_a11y_e_tree_new (obj);
-
- return accessible;
-}
-
-static void
-gal_a11y_e_tree_factory_class_init (GalA11yETreeFactoryClass *klass)
-{
- AtkObjectFactoryClass *factory_class = ATK_OBJECT_FACTORY_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- factory_class->create_accessible = gal_a11y_e_tree_factory_create_accessible;
- factory_class->get_accessible_type = gal_a11y_e_tree_factory_get_accessible_type;
-}
-
-static void
-gal_a11y_e_tree_factory_init (GalA11yETreeFactory *factory)
-{
-}
-
-/**
- * gal_a11y_e_tree_factory_get_type:
- * @void:
- *
- * Registers the &GalA11yETreeFactory class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETreeFactory class.
- **/
-GType
-gal_a11y_e_tree_factory_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yETreeFactoryClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gal_a11y_e_tree_factory_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETreeFactory),
- 0,
- (GInstanceInitFunc) gal_a11y_e_tree_factory_init,
- NULL /* value_tree */
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yETreeFactory", &info, 0);
- }
-
- return type;
-}
diff --git a/a11y/e-table/gal-a11y-e-tree-factory.h b/a11y/e-table/gal-a11y-e-tree-factory.h
deleted file mode 100644
index 434e526db9..0000000000
--- a/a11y/e-table/gal-a11y-e-tree-factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Authors: Yuedong Du <yuedong.du@ximian.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#ifndef __GAL_A11Y_E_TREE_FACTORY_H__
-#define __GAL_A11Y_E_TREE_FACTORY_H__
-
-#include <glib-object.h>
-#include <atk/atkobjectfactory.h>
-
-#define GAL_A11Y_TYPE_E_TREE_FACTORY (gal_a11y_e_table_factory_get_type ())
-#define GAL_A11Y_E_TREE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TREE_FACTORY, GalA11yETreeFactory))
-#define GAL_A11Y_E_TREE_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TREE_FACTORY, GalA11yETreeFactoryClass))
-#define GAL_A11Y_IS_E_TREE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TREE_FACTORY))
-#define GAL_A11Y_IS_E_TREE_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TREE_FACTORY))
-
-typedef struct _GalA11yETreeFactory GalA11yETreeFactory;
-typedef struct _GalA11yETreeFactoryClass GalA11yETreeFactoryClass;
-
-struct _GalA11yETreeFactory {
- AtkObject object;
-};
-
-struct _GalA11yETreeFactoryClass {
- AtkObjectClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_tree_factory_get_type (void);
-
-#endif /* ! __GAL_A11Y_E_TREE_FACTORY_H__ */
diff --git a/a11y/e-table/gal-a11y-e-tree.c b/a11y/e-table/gal-a11y-e-tree.c
deleted file mode 100644
index 9bb49496d4..0000000000
--- a/a11y/e-table/gal-a11y-e-tree.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Authors: Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-e-tree.h"
-#include "gal-a11y-util.h"
-#include "gal-a11y-e-table-item.h"
-#include <gal/e-table/e-tree.h>
-#include <gal/e-table/e-table-item.h>
-
-#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yETreeClass))
-static AtkObjectClass *parent_class;
-static GType parent_type;
-static gint priv_offset;
-#define GET_PRIVATE(object) ((GalA11yETreePrivate *) (((char *) object) + priv_offset))
-#define PARENT_TYPE (parent_type)
-
-struct _GalA11yETreePrivate {
- AtkObject *child_item;
-};
-
-/* Static functions */
-
-static void
-init_child_item (GalA11yETree *a11y)
-{
- GalA11yETreePrivate *priv = GET_PRIVATE (a11y);
- ETree *tree = E_TREE (GTK_ACCESSIBLE (a11y)->widget);
- ETableItem * eti;
-
- g_return_if_fail (tree);
- eti = e_tree_get_item (tree);
- if (priv->child_item == NULL) {
- priv->child_item = atk_gobject_accessible_for_object (G_OBJECT (eti));
- if (!priv->child_item)
- priv->child_item = gal_a11y_e_table_item_new (ATK_OBJECT (a11y),eti, 0);
-
- g_return_if_fail (priv->child_item);
- priv->child_item->role = ATK_ROLE_TREE_TABLE;
- }
-}
-
-static AtkObject*
-et_ref_accessible_at_point (AtkComponent *component,
- gint x,
- gint y,
- AtkCoordType coord_type)
-{
- GalA11yETree *a11y = GAL_A11Y_E_TREE (component);
- init_child_item (a11y);
- return GET_PRIVATE (a11y)->child_item;
-}
-
-static gint
-et_get_n_children (AtkObject *accessible)
-{
- return 1;
-}
-
-static AtkObject*
-et_ref_child (AtkObject *accessible,
- gint i)
-{
- GalA11yETree *a11y = GAL_A11Y_E_TREE (accessible);
- if (i != 0)
- return NULL;
- init_child_item (a11y);
- g_object_ref (GET_PRIVATE (a11y)->child_item);
- return GET_PRIVATE (a11y)->child_item;
-}
-
-static void
-et_class_init (GalA11yETreeClass *klass)
-{
- AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- atk_object_class->get_n_children = et_get_n_children;
- atk_object_class->ref_child = et_ref_child;
-}
-
-static void
-et_atk_component_iface_init (AtkComponentIface *iface)
-{
- iface->ref_accessible_at_point = et_ref_accessible_at_point;
-}
-
-static void
-et_init (GalA11yETree *a11y)
-{
- GalA11yETreePrivate *priv;
-
- priv = GET_PRIVATE (a11y);
-
- priv->child_item = NULL;
-}
-
-/**
- * gal_a11y_e_tree_get_type:
- * @void:
- *
- * Registers the &GalA11yETree class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETree class.
- **/
-GType
-gal_a11y_e_tree_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- AtkObjectFactory *factory;
-
- GTypeInfo info = {
- sizeof (GalA11yETreeClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) et_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETree),
- 0,
- (GInstanceInitFunc) et_init,
- NULL /* value_tree */
- };
-
- static const GInterfaceInfo atk_component_info = {
- (GInterfaceInitFunc) et_atk_component_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- factory = atk_registry_get_factory (atk_get_default_registry (), GTK_TYPE_WIDGET);
- parent_type = atk_object_factory_get_accessible_type (factory);
-
- type = gal_a11y_type_register_static_with_private (PARENT_TYPE, "GalA11yETree", &info, 0,
- sizeof (GalA11yETreePrivate), &priv_offset);
- g_type_add_interface_static (type, ATK_TYPE_COMPONENT, &atk_component_info);
- }
-
- return type;
-}
-
-AtkObject *
-gal_a11y_e_tree_new (GObject *widget)
-{
- GalA11yETree *a11y;
- ETree *tree;
-
- tree = E_TREE (widget);
-
- a11y = g_object_new (gal_a11y_e_tree_get_type (), NULL);
-
- GTK_ACCESSIBLE (a11y)->widget = GTK_WIDGET (widget);
-
- return ATK_OBJECT (a11y);
-}
diff --git a/a11y/e-table/gal-a11y-e-tree.h b/a11y/e-table/gal-a11y-e-tree.h
deleted file mode 100644
index 65b8deb6cf..0000000000
--- a/a11y/e-table/gal-a11y-e-tree.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Authors: Yuedong Du <yuedong.du@sun.com>
- *
- * Copyright (C) 2003 Ximian, Inc.
- */
-
-#ifndef __GAL_A11Y_E_TREE_H__
-#define __GAL_A11Y_E_TREE_H__
-
-#include <glib-object.h>
-#include <atk/atkobject.h>
-#include <atk/atkcomponent.h>
-#include <gtk/gtkaccessible.h>
-
-#define GAL_A11Y_TYPE_E_TREE (gal_a11y_e_tree_get_type ())
-#define GAL_A11Y_E_TREE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TREE, GalA11yETree))
-#define GAL_A11Y_E_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TREE, GalA11yETreeClass))
-#define GAL_A11Y_IS_E_TREE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TREE))
-#define GAL_A11Y_IS_E_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TREE))
-
-typedef struct _GalA11yETree GalA11yETree;
-typedef struct _GalA11yETreeClass GalA11yETreeClass;
-typedef struct _GalA11yETreePrivate GalA11yETreePrivate;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yETablePrivate comes right after the parent class structure.
- **/
-struct _GalA11yETree {
- GtkAccessible object;
-};
-
-struct _GalA11yETreeClass {
- GtkAccessibleClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_tree_get_type (void);
-AtkObject *gal_a11y_e_tree_new (GObject *tree);
-
-#endif /* ! __GAL_A11Y_E_TREE_H__ */
diff --git a/a11y/e-text/.cvsignore b/a11y/e-text/.cvsignore
deleted file mode 100644
index 5b48d3f593..0000000000
--- a/a11y/e-text/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.libs
-Makefile.in
-Makefile
-*.la
diff --git a/a11y/e-text/gal-a11y-e-text-factory.c b/a11y/e-text/gal-a11y-e-text-factory.c
deleted file mode 100644
index 24e3c28116..0000000000
--- a/a11y/e-text/gal-a11y-e-text-factory.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal/e-text/e-text.h"
-#include "gal-a11y-e-text-factory.h"
-#include "gal-a11y-e-text.h"
-
-#define CS_CLASS(factory) (G_TYPE_INSTANCE_GET_CLASS ((factory), C_TYPE_STREAM, GalA11yETextFactoryClass))
-static AtkObjectFactoryClass *parent_class;
-#define PARENT_TYPE (ATK_TYPE_OBJECT_FACTORY)
-
-/* Static functions */
-
-static GType
-gal_a11y_e_text_factory_get_accessible_type (void)
-{
- return GAL_A11Y_TYPE_E_TEXT;
-}
-
-static AtkObject*
-gal_a11y_e_text_factory_create_accessible (GObject *obj)
-{
- AtkObject *atk_object;
-
- g_return_val_if_fail (E_IS_TEXT (obj), NULL);
-
- atk_object = g_object_new (GAL_A11Y_TYPE_E_TEXT, NULL);
- atk_object_initialize (atk_object, obj);
-
- return atk_object;
-}
-
-static void
-gal_a11y_e_text_factory_class_init (GalA11yETextFactoryClass *klass)
-{
- AtkObjectFactoryClass *factory_class = ATK_OBJECT_FACTORY_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- factory_class->create_accessible = gal_a11y_e_text_factory_create_accessible;
- factory_class->get_accessible_type = gal_a11y_e_text_factory_get_accessible_type;
-}
-
-static void
-gal_a11y_e_text_factory_init (GalA11yETextFactory *factory)
-{
-}
-
-/**
- * gal_a11y_e_text_factory_get_type:
- * @void:
- *
- * Registers the &GalA11yETextFactory class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yETextFactory class.
- **/
-GType
-gal_a11y_e_text_factory_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yETextFactoryClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gal_a11y_e_text_factory_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yETextFactory),
- 0,
- (GInstanceInitFunc) gal_a11y_e_text_factory_init,
- NULL /* value_text */
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yETextFactory", &info, 0);
- }
-
- return type;
-}
diff --git a/a11y/e-text/gal-a11y-e-text-factory.h b/a11y/e-text/gal-a11y-e-text-factory.h
deleted file mode 100644
index 56a8d29ab9..0000000000
--- a/a11y/e-text/gal-a11y-e-text-factory.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_TEXT_FACTORY_H__
-#define __GAL_A11Y_E_TEXT_FACTORY_H__
-
-#include <glib-object.h>
-#include <atk/atkobjectfactory.h>
-
-#define GAL_A11Y_TYPE_E_TEXT_FACTORY (gal_a11y_e_text_factory_get_type ())
-#define GAL_A11Y_E_TEXT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TEXT_FACTORY, GalA11yETextFactory))
-#define GAL_A11Y_E_TEXT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TEXT_FACTORY, GalA11yETextFactoryClass))
-#define GAL_A11Y_IS_E_TEXT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TEXT_FACTORY))
-#define GAL_A11Y_IS_E_TEXT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TEXT_FACTORY))
-
-typedef struct _GalA11yETextFactory GalA11yETextFactory;
-typedef struct _GalA11yETextFactoryClass GalA11yETextFactoryClass;
-
-struct _GalA11yETextFactory {
- AtkObjectFactory object;
-};
-
-struct _GalA11yETextFactoryClass {
- AtkObjectFactoryClass parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_text_factory_get_type (void);
-
-#endif /* ! __GAL_A11Y_E_TEXT_FACTORY_H__ */
diff --git a/a11y/e-text/gal-a11y-e-text.c b/a11y/e-text/gal-a11y-e-text.c
deleted file mode 100644
index db066edd6e..0000000000
--- a/a11y/e-text/gal-a11y-e-text.c
+++ /dev/null
@@ -1,1121 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include <string.h>
-#include "gal-a11y-e-text.h"
-#include "gal-a11y-util.h"
-#include <atk/atkobject.h>
-#include <atk/atktable.h>
-#include <atk/atkcomponent.h>
-#include <atk/atkobjectfactory.h>
-#include <atk/atkregistry.h>
-#include <atk/atkgobjectaccessible.h>
-#include "gal/e-text/e-text.h"
-#include "gal/e-text/e-text-model-repos.h"
-#include <gtk/gtkmain.h>
-
-#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yETextClass))
-static GObjectClass *parent_class;
-static AtkComponentIface *component_parent_iface;
-static GType parent_type;
-static gint priv_offset;
-static GQuark quark_accessible_object = 0;
-#define GET_PRIVATE(object) ((GalA11yETextPrivate *) (((char *) object) + priv_offset))
-#define PARENT_TYPE (parent_type)
-
-struct _GalA11yETextPrivate {
- int dummy;
-};
-
-static void
-et_dispose (GObject *object)
-{
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
-
-/* Static functions */
-
-static void
-et_get_extents (AtkComponent *component,
- gint *x,
- gint *y,
- gint *width,
- gint *height,
- AtkCoordType coord_type)
-{
- EText *item = E_TEXT (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (component)));
- double real_width;
- double real_height;
- int fake_width;
- int fake_height;
-
- if (component_parent_iface &&
- component_parent_iface->get_extents)
- component_parent_iface->get_extents (component,
- x,
- y,
- &fake_width,
- &fake_height,
- coord_type);
-
- gtk_object_get (GTK_OBJECT (item),
- "text_width", &real_width,
- "text_height", &real_height,
- NULL);
-
- if (width)
- *width = real_width;
- if (height)
- *height = real_height;
-}
-
-static const gchar *
-et_get_full_text (AtkText *text)
-{
- EText *etext = E_TEXT (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text)));
- ETextModel *model;
- const char *full_text;
-
- gtk_object_get (GTK_OBJECT (etext),
- "model", &model,
- NULL);
-
- full_text = e_text_model_get_text (model);
-
- return full_text;
-}
-
-static void
-et_set_full_text (AtkEditableText *text,
- const char *full_text)
-{
- EText *etext = E_TEXT (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text)));
- ETextModel *model;
-
- gtk_object_get (GTK_OBJECT (etext),
- "model", &model,
- NULL);
-
- e_text_model_set_text (model, full_text);
-}
-
-static gchar *
-et_get_text (AtkText *text,
- gint start_offset,
- gint end_offset)
-{
- gint start, end, real_start, real_end, len;
- const char *full_text = et_get_full_text (text);
- if (full_text == NULL)
- return NULL;
- len = g_utf8_strlen (full_text, -1);
-
- start = MIN (MAX (0, start_offset), len);
- end = MIN (MAX (-1, end_offset), len);
-
- if (end_offset == -1)
- end = strlen (full_text);
- else
- end = g_utf8_offset_to_pointer (full_text, end) - full_text;
-
- start = g_utf8_offset_to_pointer (full_text, start) - full_text;
-
- real_start = MIN (start, end);
- real_end = MAX (start, end);
-
- return g_strndup (full_text + real_start, real_end - real_start);
-}
-
-static gboolean
-is_a_seperator (gunichar c)
-{
- return g_unichar_ispunct(c) || g_unichar_isspace(c);
-}
-
-static gint
-find_word_start (const char *text,
- gint begin_offset,
- gint step)
-{
- gint offset;
- char *at_offset;
- gunichar current, previous;
- gint len;
-
- offset = begin_offset;
- len = g_utf8_strlen (text, -1);
-
- while (offset > 0 && offset < len) {
- at_offset = g_utf8_offset_to_pointer (text, offset);
- current = g_utf8_get_char_validated (at_offset, -1);
- at_offset = g_utf8_offset_to_pointer (text, offset-1);
- previous = g_utf8_get_char_validated (at_offset, -1);
- if ((! is_a_seperator (current)) && is_a_seperator (previous))
- break;
- offset += step;
- }
-
- return offset;
-}
-
-static gint
-find_word_end (const char *text,
- gint begin_offset,
- gint step)
-{
- gint offset;
- char *at_offset;
- gunichar current, previous;
- gint len;
-
- offset = begin_offset;
- len = g_utf8_strlen (text, -1);
-
- while (offset > 0 && offset < len) {
- at_offset = g_utf8_offset_to_pointer (text, offset);
- current = g_utf8_get_char_validated (at_offset, -1);
- at_offset = g_utf8_offset_to_pointer (text, offset-1);
- previous = g_utf8_get_char_validated (at_offset, -1);
- if (is_a_seperator (current) && (! is_a_seperator (previous)))
- break;
- offset += step;
- }
-
- return offset;
-}
-
-static gint
-find_sentence_start (const char *text,
- gint begin_offset,
- gint step)
-{
- gint offset, last_word_end, len;
- char *at_offset;
- gunichar ch;
- int i;
-
- offset = find_word_start (text, begin_offset, step);
- len = g_utf8_strlen (text, -1);
-
- while (offset>0 && offset <len) {
- last_word_end = find_word_end (text, offset - 1, -1);
- if (last_word_end == 0)
- break;
- for (i = last_word_end; i < offset; i++) {
- at_offset = g_utf8_offset_to_pointer (text, i);
- ch = g_utf8_get_char_validated (at_offset, -1);
- if (ch == '.' || ch == '!' || ch == '?')
- return offset;
- }
-
- offset = find_word_start (text, offset + step, step);
- }
-
- return offset;
-}
-
-static gint
-find_sentence_end (const char *text,
- gint begin_offset,
- gint step)
-{
- gint offset;
- char *at_offset;
- gunichar previous;
- gint len;
-
- offset = begin_offset;
- len = g_utf8_strlen (text, -1);
-
- while (offset > 0 && offset < len) {
- at_offset = g_utf8_offset_to_pointer (text, offset - 1);
- previous = g_utf8_get_char_validated (at_offset, -1);
- if (previous == '.' || previous == '!' || previous == '?')
- break;
- offset += step;
- }
-
- return offset;
-}
-
-static gint
-find_line_start (const char *text,
- gint begin_offset,
- gint step)
-{
- gint offset;
- char *at_offset;
- gunichar previous;
- gint len;
-
- offset = begin_offset;
- len = g_utf8_strlen (text, -1);
-
- while (offset > 0 && offset < len) {
- at_offset = g_utf8_offset_to_pointer (text, offset - 1);
- previous = g_utf8_get_char_validated (at_offset, -1);
- if (previous == '\n' || previous == '\r')
- break;
- offset += step;
- }
-
- return offset;
-}
-
-static gint
-find_line_end (const char *text,
- gint begin_offset,
- gint step)
-{
- gint offset;
- char *at_offset;
- gunichar current;
- gint len;
-
- offset = begin_offset;
- len = g_utf8_strlen (text, -1);
-
- while (offset >= 0 && offset < len) {
- at_offset = g_utf8_offset_to_pointer (text, offset);
- current = g_utf8_get_char_validated (at_offset, -1);
- if (current == '\n' || current == '\r')
- break;
- offset += step;
- }
-
- return offset;
-}
-
-static gchar *
-et_get_text_after_offset (AtkText *text,
- gint offset,
- AtkTextBoundary boundary_type,
- gint *start_offset,
- gint *end_offset)
-{
- gint start, end, len;
- const char *full_text = et_get_full_text (text);
- g_return_val_if_fail (full_text, NULL);
-
- switch (boundary_type)
- {
- case ATK_TEXT_BOUNDARY_CHAR:
- start = offset + 1;
- end = offset + 2;
- break;
- case ATK_TEXT_BOUNDARY_WORD_START:
- start = find_word_start (full_text, offset + 1, 1);
- end = find_word_start (full_text, start + 1, 1);
- break;
- case ATK_TEXT_BOUNDARY_WORD_END:
- start = find_word_end (full_text, offset + 1, 1);
- end = find_word_end (full_text, start + 1, 1);
- break;
- case ATK_TEXT_BOUNDARY_SENTENCE_START:
- start = find_sentence_start (full_text, offset + 1, 1);
- end = find_sentence_start (full_text, start + 1, 1);
- break;
- case ATK_TEXT_BOUNDARY_SENTENCE_END:
- start = find_sentence_end (full_text, offset + 1, 1);
- end = find_sentence_end (full_text, start + 1, 1);
- break;
- case ATK_TEXT_BOUNDARY_LINE_START:
- start = find_line_start (full_text, offset + 1, 1);
- end = find_line_start (full_text, start + 1, 1);
- break;
- case ATK_TEXT_BOUNDARY_LINE_END:
- start = find_line_end (full_text, offset + 1, 1);
- end = find_line_end (full_text, start + 1, 1);
- break;
- default:
- return NULL;
- }
-
- len = g_utf8_strlen (full_text, -1);
- if (start_offset)
- *start_offset = MIN (MAX (0, start), len);
- if (end_offset)
- *end_offset = MIN (MAX (0, end), len);
- return et_get_text (text, start, end);
-}
-
-static gchar *
-et_get_text_at_offset (AtkText *text,
- gint offset,
- AtkTextBoundary boundary_type,
- gint *start_offset,
- gint *end_offset)
-{
- gint start, end, len;
- const char *full_text = et_get_full_text (text);
- g_return_val_if_fail (full_text, NULL);
-
- switch (boundary_type)
- {
- case ATK_TEXT_BOUNDARY_CHAR:
- start = offset;
- end = offset + 1;
- break;
- case ATK_TEXT_BOUNDARY_WORD_START:
- start = find_word_start (full_text, offset - 1, -1);
- end = find_word_start (full_text, offset, 1);
- break;
- case ATK_TEXT_BOUNDARY_WORD_END:
- start = find_word_end (full_text, offset, -1);
- end = find_word_end (full_text, offset + 1, 1);
- break;
- case ATK_TEXT_BOUNDARY_SENTENCE_START:
- start = find_sentence_start (full_text, offset - 1, -1);
- end = find_sentence_start (full_text, offset, 1);
- break;
- case ATK_TEXT_BOUNDARY_SENTENCE_END:
- start = find_sentence_end (full_text, offset, -1);
- end = find_sentence_end (full_text, offset + 1, 1);
- break;
- case ATK_TEXT_BOUNDARY_LINE_START:
- start = find_line_start (full_text, offset - 1, -1);
- end = find_line_start (full_text, offset, 1);
- break;
- case ATK_TEXT_BOUNDARY_LINE_END:
- start = find_line_end (full_text, offset, -1);
- end = find_line_end (full_text, offset + 1, 1);
- break;
- default:
- return NULL;
- }
-
- len = g_utf8_strlen (full_text, -1);
- if (start_offset)
- *start_offset = MIN (MAX (0, start), len);
- if (end_offset)
- *end_offset = MIN (MAX (0, end), len);
- return et_get_text (text, start, end);
-}
-
-static gunichar
-et_get_character_at_offset (AtkText *text,
- gint offset)
-{
- const char *full_text = et_get_full_text (text);
- char *at_offset;
-
- at_offset = g_utf8_offset_to_pointer (full_text, offset);
- return g_utf8_get_char_validated (at_offset, -1);
-}
-
-
-static gchar*
-et_get_text_before_offset (AtkText *text,
- gint offset,
- AtkTextBoundary boundary_type,
- gint *start_offset,
- gint *end_offset)
-{
- gint start, end, len;
- const char *full_text = et_get_full_text (text);
- g_return_val_if_fail (full_text, NULL);
-
- switch (boundary_type)
- {
- case ATK_TEXT_BOUNDARY_CHAR:
- start = offset - 1;
- end = offset;
- break;
- case ATK_TEXT_BOUNDARY_WORD_START:
- end = find_word_start (full_text, offset - 1, -1);
- start = find_word_start (full_text, end - 1, -1) ;
- break;
- case ATK_TEXT_BOUNDARY_WORD_END:
- end = find_word_end (full_text, offset, -1);
- start = find_word_end (full_text, end - 1, -1);
- break;
- case ATK_TEXT_BOUNDARY_SENTENCE_START:
- end = find_sentence_start (full_text, offset, -1);
- start = find_sentence_start (full_text, end - 1, -1);
- break;
- case ATK_TEXT_BOUNDARY_SENTENCE_END:
- end = find_sentence_end (full_text, offset, -1);
- start = find_sentence_end (full_text, end - 1, -1);
- break;
- case ATK_TEXT_BOUNDARY_LINE_START:
- end = find_line_start (full_text, offset, -1);
- start = find_line_start (full_text, end - 1, -1);
- break;
- case ATK_TEXT_BOUNDARY_LINE_END:
- end = find_line_end (full_text, offset, -1);
- start = find_line_end (full_text, end - 1, -1);
- break;
- default:
- return NULL;
- }
-
- len = g_utf8_strlen (full_text, -1);
- if (start_offset)
- *start_offset = MIN (MAX (0, start), len);
- if (end_offset)
- *end_offset = MIN (MAX (0, end), len);
- return et_get_text (text, start, end);
-}
-
-static gint
-et_get_caret_offset (AtkText *text)
-{
- GObject *obj;
- EText *etext;
- int offset;
-
- g_return_val_if_fail (ATK_IS_GOBJECT_ACCESSIBLE(text), -1);
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return -1;
-
- g_return_val_if_fail (E_IS_TEXT (obj), -1);
- etext = E_TEXT (obj);
-
- gtk_object_get (GTK_OBJECT (etext),
- "cursor_pos", &offset,
- NULL);
- return offset;
-}
-
-
-static AtkAttributeSet*
-et_get_run_attributes (AtkText *text,
- gint offset,
- gint *start_offset,
- gint *end_offset)
-{
- /* Unimplemented */
- return NULL;
-}
-
-
-static AtkAttributeSet*
-et_get_default_attributes (AtkText *text)
-{
- /* Unimplemented */
- return NULL;
-}
-
-
-static void
-et_get_character_extents (AtkText *text,
- gint offset,
- gint *x,
- gint *y,
- gint *width,
- gint *height,
- AtkCoordType coords)
-{
- GObject *obj;
- EText *etext;
- GnomeCanvas *canvas;
- gint x_widget, y_widget, x_window, y_window;
- GdkWindow *window;
- GtkWidget *widget;
- PangoRectangle pango_pos;
-
- g_return_if_fail (ATK_IS_GOBJECT_ACCESSIBLE(text));
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return;
- g_return_if_fail (E_IS_TEXT (obj));
- etext = E_TEXT(obj);
- canvas = GNOME_CANVAS_ITEM(etext)->canvas;
- widget = GTK_WIDGET(canvas);
- window = widget->window;
- gdk_window_get_origin (window, &x_widget, &y_widget);
-
- pango_layout_index_to_pos (etext->layout, offset, &pango_pos);
- pango_pos.x = PANGO_PIXELS (pango_pos.x);
- pango_pos.y = PANGO_PIXELS (pango_pos.y);
- pango_pos.width = (pango_pos.width + PANGO_SCALE / 2) / PANGO_SCALE;
- pango_pos.height = (pango_pos.height + PANGO_SCALE / 2) / PANGO_SCALE;
-
- *x = pango_pos.x + x_widget;
- *y = pango_pos.y + y_widget;
-
- *width = pango_pos.width;
- *height = pango_pos.height;
-
- if (etext->draw_borders) {
- *x += 3; /*BORDER_INDENT;*/
- *y += 3; /*BORDER_INDENT;*/
- }
-
- *x += etext->xofs;
- *y += etext->yofs;
-
- if (etext->editing) {
- *x -= etext->xofs_edit;
- *y -= etext->yofs_edit;
- }
-
- *x += etext->cx;
- *y += etext->cy;
-
- if (coords == ATK_XY_WINDOW) {
- window = gdk_window_get_toplevel (window);
- gdk_window_get_origin (window, &x_window, &y_window);
- *x -= x_window;
- *y -= y_window;
- }
- else if (coords == ATK_XY_SCREEN) {
- }
- else {
- *x = 0;
- *y = 0;
- *height = 0;
- *width = 0;
- }
-}
-
-
-static gint
-et_get_character_count (AtkText *text)
-{
- const char *full_text = et_get_full_text (text);
-
- return g_utf8_strlen (full_text, -1);
-}
-
-
-static gint
-et_get_offset_at_point (AtkText *text,
- gint x,
- gint y,
- AtkCoordType coords)
-{
- GObject *obj;
- EText *etext;
- GnomeCanvas *canvas;
- gint x_widget, y_widget, x_window, y_window;
- GdkWindow *window;
- GtkWidget *widget;
- int index;
- int trailing;
-
- g_return_val_if_fail (ATK_IS_GOBJECT_ACCESSIBLE(text), -1);
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return -1;
- g_return_val_if_fail (E_IS_TEXT (obj), -1);
- etext = E_TEXT(obj);
- canvas = GNOME_CANVAS_ITEM(etext)->canvas;
- widget = GTK_WIDGET(canvas);
- window = widget->window;
- gdk_window_get_origin (window, &x_widget, &y_widget);
-
- if (coords == ATK_XY_SCREEN) {
- x = x - x_widget;
- y = y - y_widget;
- }
- else if (coords == ATK_XY_WINDOW) {
- window = gdk_window_get_toplevel (window);
- gdk_window_get_origin (window, &x_window, &y_window);
- x = x - x_widget + x_window;
- y = y - y_widget + y_window;
- }
- else
- return -1;
-
- if (etext->draw_borders) {
- x -= 3; /*BORDER_INDENT;*/
- y -= 3; /*BORDER_INDENT;*/
- }
-
- x -= etext->xofs;
- y -= etext->yofs;
-
- if (etext->editing) {
- x += etext->xofs_edit;
- y += etext->yofs_edit;
- }
-
- x -= etext->cx;
- y -= etext->cy;
-
- pango_layout_xy_to_index (etext->layout,
- x * PANGO_SCALE - PANGO_SCALE / 2,
- y * PANGO_SCALE - PANGO_SCALE / 2,
- &index,
- &trailing);
-
- return g_utf8_pointer_to_offset (etext->text, etext->text + index + trailing);
-}
-
-
-static gint
-et_get_n_selections (AtkText *text)
-{
- EText *etext = E_TEXT (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text)));
- if (etext->selection_start !=
- etext->selection_end)
- return 1;
- return 0;
-}
-
-
-static gchar*
-et_get_selection (AtkText *text,
- gint selection_num,
- gint *start_offset,
- gint *end_offset)
-{
- gint start, end, real_start, real_end, len;
- EText *etext;
- if (selection_num == 0) {
- const char *full_text = et_get_full_text (text);
- if (full_text == NULL)
- return NULL;
- len = g_utf8_strlen (full_text, -1);
- etext = E_TEXT (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text)));
- start = MIN (etext->selection_start, etext->selection_end);
- end = MAX (etext->selection_start, etext->selection_end);
- start = MIN (MAX (0, start), len);
- end = MIN (MAX (0, end), len);
- if (start != end) {
- if (start_offset)
- *start_offset = start;
- if (end_offset)
- *end_offset = end;
- real_start = g_utf8_offset_to_pointer (full_text, start) - full_text;
- real_end = g_utf8_offset_to_pointer (full_text, end) - full_text;
- return g_strndup (full_text + real_start, real_end - real_start);
- }
- }
-
- return NULL;
-}
-
-
-static gboolean
-et_add_selection (AtkText *text,
- gint start_offset,
- gint end_offset)
-{
- GObject *obj;
- EText *etext;
-
- g_return_val_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (text), FALSE);
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return FALSE;
- g_return_val_if_fail (E_IS_TEXT (obj), FALSE);
- etext = E_TEXT (obj);
-
- g_return_val_if_fail (start_offset >= 0, FALSE);
- g_return_val_if_fail (start_offset >= -1, FALSE);
- if (end_offset == -1)
- end_offset = et_get_character_count (text);
-
- if (start_offset != end_offset) {
- gint real_start, real_end;
- real_start = MIN (start_offset, end_offset);
- real_end = MAX (start_offset, end_offset);
- etext->selection_start = real_start;
- etext->selection_end = real_end;
-
- gnome_canvas_item_grab_focus (GNOME_CANVAS_ITEM (etext));
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (etext));
-
- g_signal_emit_by_name (ATK_OBJECT (text), "text_selection_changed");
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-
-static gboolean
-et_remove_selection (AtkText *text,
- gint selection_num)
-{
- GObject *obj;
- EText *etext;
-
- g_return_val_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (text), FALSE);
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return FALSE;
- g_return_val_if_fail (E_IS_TEXT (obj), FALSE);
- etext = E_TEXT (obj);
-
- if (selection_num == 0
- && etext->selection_start != etext->selection_end) {
- etext->selection_end = etext->selection_start;
- g_signal_emit_by_name (ATK_OBJECT(text), "text_selection_changed");
- return TRUE;
- }
-
- return FALSE;
-}
-
-
-static gboolean
-et_set_selection (AtkText *text,
- gint selection_num,
- gint start_offset,
- gint end_offset)
-{
- GObject *obj;
- EText *etext;
-
- g_return_val_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (text), FALSE);
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return FALSE;
- g_return_val_if_fail (E_IS_TEXT (obj), FALSE);
- etext = E_TEXT (obj);
- if (selection_num == 0)
- return et_add_selection (text, start_offset, end_offset);
- return FALSE;
-}
-
-
-static gboolean
-et_set_caret_offset (AtkText *text,
- gint offset)
-{
- GObject *obj;
- EText *etext;
-
- g_return_val_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (text), FALSE);
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return FALSE;
-
- g_return_val_if_fail (E_IS_TEXT (obj), FALSE);
- etext = E_TEXT (obj);
-
- if (offset < -1)
- return FALSE;
- else {
- ETextEventProcessorCommand command;
-
- if (offset == -1)
- offset = et_get_character_count (text);
-
- command.action = E_TEP_MOVE;
- command.position = E_TEP_VALUE;
- command.value = offset;
- command.time = GDK_CURRENT_TIME;
- g_signal_emit_by_name (etext->tep, "command", &command);
- return TRUE;
- }
-}
-
-static gboolean
-et_set_run_attributes (AtkEditableText *text,
- AtkAttributeSet *attrib_set,
- gint start_offset,
- gint end_offset)
-{
- /* Unimplemented */
- return FALSE;
-}
-
-static void
-et_set_text_contents (AtkEditableText *text,
- const gchar *string)
-{
- et_set_full_text (text, string);
-}
-
-static void
-et_insert_text (AtkEditableText *text,
- const gchar *string,
- gint length,
- gint *position)
-{
- /* Utf8 unimplemented */
- char *result;
-
- const char *full_text = et_get_full_text (ATK_TEXT (text));
- if (full_text == NULL)
- return;
-
- result = g_strdup_printf ("%.*s%.*s%s", *position, full_text, length, string, full_text + *position);
-
- et_set_full_text (text, result);
-
- *position += length;
-
- g_free (result);
-}
-
-static void
-et_copy_text (AtkEditableText *text,
- gint start_pos,
- gint end_pos)
-{
- GObject *obj;
- EText *etext;
-
- g_return_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (text));
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return;
-
- g_return_if_fail (E_IS_TEXT (obj));
- etext = E_TEXT (obj);
-
- if (start_pos != end_pos) {
- etext->selection_start = start_pos;
- etext->selection_end = end_pos;
- e_text_copy_clipboard (etext);
- }
-}
-
-static void
-et_delete_text (AtkEditableText *text,
- gint start_pos,
- gint end_pos)
-{
- GObject *obj;
- EText *etext;
-
- g_return_if_fail (ATK_IS_GOBJECT_ACCESSIBLE(text));
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return;
-
- g_return_if_fail (E_IS_TEXT (obj));
- etext = E_TEXT (obj);
-
- etext->selection_start = start_pos;
- etext->selection_end = end_pos;
-
- e_text_delete_selection (etext);
-}
-
-static void
-et_cut_text (AtkEditableText *text,
- gint start_pos,
- gint end_pos)
-{
- et_copy_text (text, start_pos, end_pos);
- et_delete_text (text, start_pos, end_pos);
-}
-
-static void
-et_paste_text (AtkEditableText *text,
- gint position)
-{
- GObject *obj;
- EText *etext;
-
- g_return_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (text));
- obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (text));
- if (obj == NULL)
- return;
-
- g_return_if_fail (E_IS_TEXT (obj));
- etext = E_TEXT (obj);
-
- gtk_object_set (GTK_OBJECT (etext),
- "cursor_pos", position,
- NULL);
- e_text_paste_clipboard (etext);
-}
-
-static void
-et_atk_component_iface_init (AtkComponentIface *iface)
-{
- iface->get_extents = et_get_extents;
-}
-
-static void
-et_atk_text_iface_init (AtkTextIface *iface)
-{
- iface->get_text = et_get_text;
- iface->get_text_after_offset = et_get_text_after_offset;
- iface->get_text_at_offset = et_get_text_at_offset;
- iface->get_character_at_offset = et_get_character_at_offset;
- iface->get_text_before_offset = et_get_text_before_offset;
- iface->get_caret_offset = et_get_caret_offset;
- iface->get_run_attributes = et_get_run_attributes;
- iface->get_default_attributes = et_get_default_attributes;
- iface->get_character_extents = et_get_character_extents;
- iface->get_character_count = et_get_character_count;
- iface->get_offset_at_point = et_get_offset_at_point;
- iface->get_n_selections = et_get_n_selections;
- iface->get_selection = et_get_selection;
- iface->add_selection = et_add_selection;
- iface->remove_selection = et_remove_selection;
- iface->set_selection = et_set_selection;
- iface->set_caret_offset = et_set_caret_offset;
-}
-
-static void
-et_atk_editable_text_iface_init (AtkEditableTextIface *iface)
-{
- iface->set_run_attributes = et_set_run_attributes;
- iface->set_text_contents = et_set_text_contents;
- iface->insert_text = et_insert_text;
- iface->copy_text = et_copy_text;
- iface->cut_text = et_cut_text;
- iface->delete_text = et_delete_text;
- iface->paste_text = et_paste_text;
-}
-
-static void
-_et_reposition_cb (ETextModel *model,
- ETextModelReposFn fn,
- gpointer repos_data,
- gpointer user_data)
-{
- AtkObject *accessible;
- AtkText *text;
-
- accessible = ATK_OBJECT (user_data);
- text = ATK_TEXT (accessible);
-
- if (fn == e_repos_delete_shift) {
- EReposDeleteShift *info = (EReposDeleteShift *) repos_data;
- g_signal_emit_by_name (text, "text-changed::delete", info->pos, info->len);
- }
- else if (fn == e_repos_insert_shift) {
- EReposInsertShift *info = (EReposInsertShift *) repos_data;
- g_signal_emit_by_name (text, "text-changed::insert", info->pos, info->len);
- }
-}
-
-static void
-_et_command_cb (ETextEventProcessor *tep,
- ETextEventProcessorCommand *command,
- gpointer user_data)
-{
- AtkObject *accessible;
- AtkText *text;
-
- accessible = ATK_OBJECT (user_data);
- text = ATK_TEXT (accessible);
-
- switch (command->action) {
- case E_TEP_MOVE:
- g_signal_emit_by_name (text, "text-caret-moved", et_get_caret_offset (text));
- break;
- case E_TEP_SELECT:
- g_signal_emit_by_name (text, "text-selection-changed");
- break;
- default:
- break;
- }
-}
-
-static void
-et_real_initialize (AtkObject *obj,
- gpointer data)
-{
- GalA11yEText *a11y;
- EText *etext;
-
- ATK_OBJECT_CLASS (parent_class)->initialize (obj, data);
-
- g_return_if_fail (GAL_A11Y_IS_E_TEXT (obj));
- g_return_if_fail (E_IS_TEXT (data));
-
- a11y = GAL_A11Y_E_TEXT (obj);
- etext = E_TEXT (data);
-
- /* Set up signal callbacks */
- g_signal_connect (etext->model, "reposition",
- G_CALLBACK (_et_reposition_cb), obj);
-
- g_signal_connect_after (etext->tep, "command",
- (GCallback) _et_command_cb, obj);
-
- obj->role = ATK_ROLE_TEXT;
-}
-
-static void
-et_class_init (GalA11yETextClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
-
- quark_accessible_object = g_quark_from_static_string ("gtk-accessible-object");
- parent_class = g_type_class_ref (PARENT_TYPE);
- component_parent_iface = g_type_interface_peek(parent_class, ATK_TYPE_COMPONENT);
- object_class->dispose = et_dispose;
- atk_class->initialize = et_real_initialize;
-}
-
-static void
-et_init (GalA11yEText *a11y)
-{
-#if 0
- GalA11yETextPrivate *priv;
-
- priv = GET_PRIVATE (a11y);
-#endif
-}
-
-/**
- * gal_a11y_e_text_get_type:
- * @void:
- *
- * Registers the &GalA11yEText class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &GalA11yEText class.
- **/
-GType
-gal_a11y_e_text_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- AtkObjectFactory *factory;
-
- GTypeInfo info = {
- sizeof (GalA11yETextClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) et_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yEText),
- 0,
- (GInstanceInitFunc) et_init,
- NULL /* value_text */
- };
-
- static const GInterfaceInfo atk_component_info = {
- (GInterfaceInitFunc) et_atk_component_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
- static const GInterfaceInfo atk_text_info = {
- (GInterfaceInitFunc) et_atk_text_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
- static const GInterfaceInfo atk_editable_text_info = {
- (GInterfaceInitFunc) et_atk_editable_text_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- factory = atk_registry_get_factory (atk_get_default_registry (), GNOME_TYPE_CANVAS_ITEM);
- parent_type = atk_object_factory_get_accessible_type (factory);
-
- type = gal_a11y_type_register_static_with_private (PARENT_TYPE, "GalA11yEText", &info, 0,
- sizeof (GalA11yETextPrivate), &priv_offset);
-
- g_type_add_interface_static (type, ATK_TYPE_COMPONENT, &atk_component_info);
- g_type_add_interface_static (type, ATK_TYPE_TEXT, &atk_text_info);
- g_type_add_interface_static (type, ATK_TYPE_EDITABLE_TEXT, &atk_editable_text_info);
- }
-
- return type;
-}
diff --git a/a11y/e-text/gal-a11y-e-text.h b/a11y/e-text/gal-a11y-e-text.h
deleted file mode 100644
index 66d2d6283b..0000000000
--- a/a11y/e-text/gal-a11y-e-text.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_E_TEXT_H__
-#define __GAL_A11Y_E_TEXT_H__
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-item.h>
-
-#define GAL_A11Y_TYPE_E_TEXT (gal_a11y_e_text_get_type ())
-#define GAL_A11Y_E_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TEXT, GalA11yEText))
-#define GAL_A11Y_E_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_TEXT, GalA11yETextClass))
-#define GAL_A11Y_IS_E_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_TEXT))
-#define GAL_A11Y_IS_E_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_TEXT))
-
-typedef struct _GalA11yEText GalA11yEText;
-typedef struct _GalA11yETextClass GalA11yETextClass;
-typedef struct _GalA11yETextPrivate GalA11yETextPrivate;
-
-/* This struct should actually be larger as this isn't what we derive from.
- * The GalA11yETextPrivate comes right after the parent class structure.
- **/
-struct _GalA11yEText {
- AtkObject object;
-};
-
-struct _GalA11yETextClass {
- AtkObject parent_class;
-};
-
-
-/* Standard Glib function */
-GType gal_a11y_e_text_get_type (void);
-
-#endif /* ! __GAL_A11Y_E_TEXT_H__ */
diff --git a/a11y/gal-a11y-factory.h b/a11y/gal-a11y-factory.h
deleted file mode 100644
index 22da85eca8..0000000000
--- a/a11y/gal-a11y-factory.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* GAL A11Y
- * gal-a11y-factory.h
- *
- * Copyright 2003 Ximian Inc.
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Gilbert Fang <gilbert.fang@sun.com>, Sun Microsystem Inc. 2003.
- *
- * This file is mainly from the gailfactory.h of GAIL.
- */
-
-#ifndef _GAL_A11Y_FACTORY_H__
-#define _GAL_A11Y_FACTORY_H__
-
-#include <glib-object.h>
-#include <atk/atkobject.h>
-#include <atk/atkobjectfactory.h>
-
-#define GAL_A11Y_FACTORY(type, type_as_function, opt_create_accessible) \
- \
-static GType \
-type_as_function ## _factory_get_accessible_type (void) \
-{ \
- return type; \
-} \
- \
-static AtkObject* \
-type_as_function ## _factory_create_accessible (GObject *obj) \
-{ \
- GtkWidget *widget; \
- AtkObject *accessible; \
- \
- g_return_val_if_fail (GTK_IS_WIDGET (obj), NULL); \
- \
- widget = GTK_WIDGET (obj); \
- \
- accessible = opt_create_accessible (widget); \
- \
- return accessible; \
-} \
- \
-static void \
-type_as_function ## _factory_class_init (AtkObjectFactoryClass *klass) \
-{ \
- klass->create_accessible = type_as_function ## _factory_create_accessible; \
- klass->get_accessible_type = type_as_function ## _factory_get_accessible_type;\
-} \
- \
-static GType \
-type_as_function ## _factory_get_type (void) \
-{ \
- static GType t = 0; \
- \
- if (!t) \
- { \
- char *name; \
- static const GTypeInfo tinfo = \
- { \
- sizeof (AtkObjectFactoryClass), \
- NULL, NULL, (GClassInitFunc) type_as_function ## _factory_class_init, \
- NULL, NULL, sizeof (AtkObjectFactory), 0, NULL, NULL \
- }; \
- \
- name = g_strconcat (g_type_name (type), "Factory", NULL); \
- t = g_type_register_static ( \
- ATK_TYPE_OBJECT_FACTORY, name, &tinfo, 0); \
- g_free (name); \
- } \
- \
- return t; \
-}
-
-#define GAL_A11Y_WIDGET_SET_FACTORY(widget_type, type_as_function) \
- atk_registry_set_factory_type (atk_get_default_registry (), \
- widget_type, \
- type_as_function ## _factory_get_type ())
-
-#endif /* _GAL_A11Y_FACTORY_H__ */
diff --git a/a11y/gal-a11y-util.c b/a11y/gal-a11y-util.c
deleted file mode 100644
index 0cf7c69dbb..0000000000
--- a/a11y/gal-a11y-util.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-#include <config.h>
-#include "gal-a11y-util.h"
-
-GType
-gal_a11y_type_register_static_with_private (GType parent_type,
- const gchar *type_name,
- GTypeInfo *info,
- GTypeFlags flags,
- gint priv_size,
- gint *priv_offset)
-{
- GTypeQuery query;
-
- g_type_query (parent_type, &query);
-
- info->class_size = query.class_size;
- info->instance_size = query.instance_size + priv_size;
-
- if (priv_offset)
- *priv_offset = query.instance_size;
-
- return g_type_register_static (parent_type, type_name, info, flags);
-}
diff --git a/a11y/gal-a11y-util.h b/a11y/gal-a11y-util.h
deleted file mode 100644
index b7f742b122..0000000000
--- a/a11y/gal-a11y-util.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- * Christopher James Lahey <clahey@ximian.com>
- *
- * Copyright (C) 2001 Chris Lahey
- */
-
-#ifndef __GAL_A11Y_UTIL_H__
-#define __GAL_A11Y_UTIL_H__
-
-#include <glib-object.h>
-
-GType gal_a11y_type_register_static_with_private (GType parent_type,
- const gchar *type_name,
- GTypeInfo *info,
- GTypeFlags flags,
- int priv_size,
- gint *priv_offset);
-
-#endif /* ! __GAL_A11Y_UTIL_H__ */
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 25830df7b8..0251e7bc72 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -6,67 +6,12 @@
(addressbook_view_init): Unref views when removed from the hash
table.
-2004-10-06 Not Zed <NotZed@Ximian.com>
+2004-10-01 William Jon McCann <mccann@jhu.edu>
- * gui/component/addressbook-view.c (popup_event_callback):
- * gui/component/select-names/e-select-names.c (section_right_click_cb):
- * gui/widgets/e-addressbook-view.c (do_popup_menu): fix for
- e-popup api changes. Moved all mask specifiers to visible rather
- than enable in the menu table.
-
-2004-10-06 Not Zed <NotZed@Ximian.com>
-
- * gui/contact-editor/e-contact-editor.c: removed
- gnome-popup-menu.h (unused).
-
- * gui/widgets/e-addressbook-reflow-adapter.c:
- * gui/widgets/eab-popup-control.c: remove e-popup-menu.h (unused).
+ * gui/component/component-factory.c (factory): Quiet debug messages.
- * gui/component/select-names/e-select-names.c
- (section_right_click_cb): use e-popup. Somewhat overengineered
- for this use ...
- (remove_cb): api changes.
-
- * gui/widgets/eab-popup.c (eab_popup_target_new_select_names):
- added pretty useless wrapper for the select names popup. Added to
- hook maps.
-
-2004-10-01 Not Zed <NotZed@Ximian.com>
-
- * gui/widgets/e-addressbook-view.c (do_popup_menu): convert to
- using EABPopup.
- (sources): remove dead code.
- (has_email_address_1, get_has_email_address): removed now
- redundant code.
- (save_as, send_as, send_to, print, copy, paste, cut, delete)
- (copy_to_folder, move_to_folder, new_card, new_list): new api.
- (free_popup_info): dead.
- (print_envelope): not pining.
- (get_contact_list): take a popup target instead, don't ref.
- (get_contact_list_1): not required no more.
- (contact_and_book_free): same.
- (delete): call eab_view_delete_selection.
- (eab_view_delete_selection): do the actual delete here.
-
- * gui/widgets/eab-popup.c (eab_popup_target_new_select): implement.
-
-2004-10-01 Not Zed <NotZed@Ximian.com>
-
- * gui/widgets/eab-popup.[ch]: addressbook popup driver.
-
- * gui/component/addressbook-view.c (delete_addressbook_cb): use
- e-error for the message prompt. don't bother keeping it around,
- it can never be re-sensitised anyway.
- (book_removed): no longer destroy the original dialogue.
-
- * addressbook-errors.xml: add ask-delete for deleting
- addressbooks.
-
- * gui/component/addressbook-view.c (addressbook_view_init):
- connect to popup_event rather than fill_popup_menu now.
- (fill_popup_menu_callback): renamed to popup_event_callback,
- changed to use epopup.
- (add_popup_menu_item): remove, no longer needed.
+ * gui/component/apps_evolution_addressbook.schemas.in.in: Add
+ missing show_preview schema. Add missing long descriptions.
2004-09-29 Not Zed <NotZed@Ximian.com>
@@ -90,52 +35,45 @@
* gui/merging/eab-contact-compare.c (query_cb): Protect against NULL
UIDs, and make fewer calls to e_contact_get_const () as a bonus.
-2004-09-24 Hao Sheng <hao.sheng@sun.com>
-
- Fix for #66523
+2004-09-23 Fazlu & Hannah <hannah_lins@yahoo.co.in>
- * gui/contact-list-editor/e-contact-list-model.c:
- (e_contact_list_model_add_email): estimate the same mail address
- and popup a warning dialog.
- * addressbook-errors.xml: add the question message for the warning
- dialog.
+ Fixes bug #61070
-2004-09-23 Pamplona Hackers <gnome-desarrollo@es.gnome.org>
+ * addressbook/tools/evolution-addressbook-export.c (main):
+ Changed the string into proper grammar 'In normal mode,
+ there should not need size option.' to 'In normal mode, there
+ is no need for the size option.'
- Fixes #61978
+2004-09-23 JP Rosevear <jpr@novell.com>
- * tools/evolution-addressbook-export.c (main): use more
- meaningful error message.
+ * conduit/address-conduit.c (ecard_from_remote_record): only set
+ the file as address to the company if no full name exists
+ (delete_record): don't bail out if the record simply isn't found
-2004-09-23 Fazlu & Hannah <hannah_lins@yahoo.co.in>
+ Fixes #59725
+
+ * conduit/address-conduit.c (local_record_from_uid): remove
+ extraneous semicolon
- * tools/evolution-addressbook-export.c (main):
- Changed the string into proper grammar 'In normal mode, there
- should not need size option.' to 'In normal mode, there is no need
- for the size option.'
+2004-09-13 Rodney Dawes <dobey@novell.com>
-2004-09-23 JP Rosevear <jpr@novell.com>
-
- * conduit/address-conduit.c (ecard_from_remote_record): only set
- the file as address to the company if no full name exists
- (delete_record): don't bail out if the record simply isn't found
-
- Fixes #59725
-
- * conduit/address-conduit.c (local_record_from_uid): remove
- extraneous semicolon
-
-2004-09-21 William Jon McCann <mccann@jhu.edu>
+ * gui/contact-editor/e-contact-editor.c (show_help_cb):
+ Point at the correct XML file for documentation
- * gui/component/component-factory.c (factory): Quiet debug messages.
+2004-09-09 Sivaiah Nallagatla <snallagatla@novell.com>
- * gui/widgets/e-addressbook-view.c (eab_view_new): Remove
- unnecessary label widget placeholder. Make vertical scrollbar
- policy automatic. Use gtk_paned_add2 instead of
- gtk_container_add.
+ Part of fix for #59582.
- * gui/component/apps_evolution_addressbook.schemas.in.in: Add
- missing show_preview schema. Add missing long descriptions.
+ * gui/contact-editor/e-contact-editor.c
+ (sensitize_address): check for _LABEL type address fields also in
+ supported fileds while sensitizing the address fields.
+
+2004-09-08 Not Zed <NotZed@Ximian.com>
+
+ ** See bug #64080.
+
+ * gui/component/Makefile.am (libevolution_addressbook_la_LIBADD):
+ link addressbook to camel.
2004-09-13 Rodney Dawes <dobey@novell.com>
@@ -553,11 +491,6 @@
Don't set empty default value on an int, this causes gconf warning.
(bug #60859)
-2004-09-04 Not Zed <NotZed@Ximian.com>
-
- * util/e-destination.c: include gnome-i18n.h since camel-object no
- longer does(!).
-
2004-07-02 Hans Petter Jansson <hpj@ximian.com>
* gui/contact-list-editor/e-contact-list-editor.c
diff --git a/addressbook/gui/component/addressbook-view.c b/addressbook/gui/component/addressbook-view.c
index 0a51af0c43..368c0c4540 100644
--- a/addressbook/gui/component/addressbook-view.c
+++ b/addressbook/gui/component/addressbook-view.c
@@ -60,7 +60,6 @@
#include "addressbook/gui/merging/eab-contact-merging.h"
#include "addressbook/printing/e-contact-print.h"
#include "addressbook/util/eab-book-util.h"
-#include "addressbook/gui/widgets/eab-popup.h"
#define PARENT_TYPE G_TYPE_OBJECT
static GObjectClass *parent_class = NULL;
@@ -614,10 +613,45 @@ load_primary_selection (AddressbookView *view)
}
/* Folder popup menu callbacks */
+
+static void
+add_popup_menu_item (GtkMenu *menu, const char *label, const char *pixmap,
+ GCallback callback, gpointer user_data, gboolean sensitive)
+{
+ GtkWidget *item, *image;
+
+ if (pixmap) {
+ item = gtk_image_menu_item_new_with_label (label);
+
+ /* load the image */
+ if (g_file_test (pixmap, G_FILE_TEST_EXISTS))
+ image = gtk_image_new_from_file (pixmap);
+ else
+ image = gtk_image_new_from_stock (pixmap, GTK_ICON_SIZE_MENU);
+
+ if (image) {
+ gtk_widget_show (image);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ }
+ } else {
+ item = gtk_menu_item_new_with_label (label);
+ }
+
+ if (callback)
+ g_signal_connect (G_OBJECT (item), "activate", callback, user_data);
+
+ if (!sensitive)
+ gtk_widget_set_sensitive (item, FALSE);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+}
+
typedef struct {
AddressbookView *view;
ESource *selected_source;
GtkWidget *toplevel;
+ GtkWidget *dialog;
} BookRemovedClosure;
static void
@@ -627,6 +661,7 @@ book_removed (EBook *book, EBookStatus status, gpointer data)
AddressbookView *view = closure->view;
AddressbookViewPrivate *priv = view->priv;
ESource *source = closure->selected_source;
+ GtkWidget *dialog = closure->dialog;
GtkWidget *toplevel = closure->toplevel;
g_free (closure);
@@ -649,54 +684,73 @@ book_removed (EBook *book, EBookStatus status, gpointer data)
"addressbook:remove-addressbook",
NULL);
}
+
+ gtk_widget_destroy (dialog);
}
static void
-delete_addressbook_cb(EPopup *ep, EPopupItem *pitem, void *data)
+delete_addressbook_cb (GtkWidget *widget, AddressbookView *view)
{
- AddressbookView *view = data;
AddressbookViewPrivate *priv = view->priv;
ESource *selected_source;
+ GtkWidget *dialog;
EBook *book;
GError *error = NULL;
- GtkWindow *toplevel;
selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (priv->selector));
if (!selected_source)
return;
- toplevel = (GtkWindow *)gtk_widget_get_toplevel(ep->target->widget);
-
- if (e_error_run(toplevel, "addressbook:ask-delete-addressbook", e_source_peek_name(selected_source)) != GTK_RESPONSE_YES)
+ /* Create the confirmation dialog */
+ dialog = gtk_message_dialog_new (
+ GTK_WINDOW (gtk_widget_get_toplevel (widget)),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ _("Address book '%s' will be removed. Are you sure you want to continue?"),
+ e_source_peek_name (selected_source));
+#if !GTK_CHECK_VERSION (2,4,0)
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+#endif
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_YES) {
+ gtk_widget_destroy (dialog);
return;
+ }
/* Remove local data */
book = e_book_new (selected_source, &error);
if (book) {
BookRemovedClosure *closure = g_new (BookRemovedClosure, 1);
- closure->toplevel = (GtkWidget *)toplevel;
+ closure->toplevel = gtk_widget_get_toplevel (widget);
closure->view = view;
closure->selected_source = selected_source;
+ closure->dialog = dialog;
if (e_book_async_remove (book, book_removed, closure)) {
- e_error_run (toplevel, "addressbook:remove-addressbook", NULL);
+ e_error_run (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
+ "addressbook:remove-addressbook",
+ NULL);
+
g_free (closure);
+
g_object_unref (book);
}
}
+
+ gtk_widget_set_sensitive (dialog, FALSE);
}
static void
-new_addressbook_cb(EPopup *ep, EPopupItem *pitem, void *data)
+new_addressbook_cb (GtkWidget *widget, AddressbookView *view)
{
- addressbook_config_create_new_source (gtk_widget_get_toplevel(ep->target->widget));
+ addressbook_config_create_new_source (gtk_widget_get_toplevel (widget));
}
static void
-edit_addressbook_cb(EPopup *ep, EPopupItem *pitem, void *data)
+edit_addressbook_cb (GtkWidget *widget, AddressbookView *view)
{
- AddressbookView *view = data;
AddressbookViewPrivate *priv = view->priv;
ESource *selected_source;
const char *uid;
@@ -714,7 +768,7 @@ edit_addressbook_cb(EPopup *ep, EPopupItem *pitem, void *data)
char *uid_copy = g_strdup (uid);
closure = g_new (EditorUidClosure, 1);
- closure->editor = addressbook_config_edit_source (gtk_widget_get_toplevel(ep->target->widget), selected_source);
+ closure->editor = addressbook_config_edit_source (gtk_widget_get_toplevel (widget), selected_source);
closure->uid = uid_copy;
closure->view = view;
@@ -739,40 +793,25 @@ primary_source_selection_changed_callback (ESourceSelector *selector,
save_primary_selection (view);
}
-static EPopupItem abv_source_popups[] = {
- { E_POPUP_ITEM, "10.new", N_("New Address Book"), new_addressbook_cb, NULL, NULL, 0, 0 },
- { E_POPUP_ITEM, "20.delete", N_("Delete"), delete_addressbook_cb, NULL, "stock_delete", 0, EAB_POPUP_SOURCE_USER|EAB_POPUP_SOURCE_PRIMARY },
- { E_POPUP_ITEM, "30.properties", N_("Properties..."), edit_addressbook_cb, NULL, NULL, 0, EAB_POPUP_SOURCE_PRIMARY },
-};
static void
-abv_source_popup_free(EPopup *ep, GSList *list, void *data)
-{
- g_slist_free(list);
-}
-
-static gboolean
-popup_event_callback(ESourceSelector *selector, ESource *source, GdkEventButton *event, AddressbookView *view)
+fill_popup_menu_callback (ESourceSelector *selector, GtkMenu *menu, AddressbookView *view)
{
- EABPopup *ep;
- EABPopupTargetSource *t;
- GSList *menus = NULL;
- int i;
- GtkMenu *menu;
-
- ep = eab_popup_new("com.novell.evolution.addressbook.source.popup");
- t = eab_popup_target_new_source(ep, selector);
- t->target.widget = (GtkWidget *)view->priv->notebook;
-
- for (i=0;i<sizeof(abv_source_popups)/sizeof(abv_source_popups[0]);i++)
- menus = g_slist_prepend(menus, &abv_source_popups[i]);
-
- e_popup_add_items((EPopup *)ep, menus, abv_source_popup_free, view);
+ AddressbookViewPrivate *priv = view->priv;
+ gboolean sensitive;
+ gboolean local_addressbook;
+ ESource *selected_source;
+ char *uri;
- menu = e_popup_create_menu_once((EPopup *)ep, (EPopupTarget *)t, 0);
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event?event->button:0, event?event->time:gtk_get_current_event_time());
+ selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (priv->selector));
+ sensitive = selected_source ? TRUE : FALSE;
- return TRUE;
+ uri = e_source_peek_relative_uri (selected_source);
+ local_addressbook = (uri && !strcmp ("system", uri));
+
+ add_popup_menu_item (menu, _("New Address Book"), NULL, G_CALLBACK (new_addressbook_cb), view, TRUE);
+ add_popup_menu_item (menu, _("Delete"), GTK_STOCK_DELETE, G_CALLBACK (delete_addressbook_cb), view, sensitive && !local_addressbook);
+ add_popup_menu_item (menu, _("Properties..."), NULL, G_CALLBACK (edit_addressbook_cb), view, sensitive);
}
static gboolean
@@ -938,13 +977,15 @@ selector_tree_drag_data_received (GtkWidget *widget,
{
GtkTreePath *path = NULL;
GtkTreeViewDropPosition pos;
- gpointer target = NULL;
+ gpointer source, target = NULL;
GtkTreeModel *model;
GtkTreeIter iter;
gboolean success = FALSE;
+
EBook *source_book, *target_book;
MergeContext *merge_context;
GList *contactlist;
+ GList *l;
if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),
x, y, &path, &pos))
@@ -1128,8 +1169,8 @@ addressbook_view_init (AddressbookView *view)
g_signal_connect_object (priv->selector, "primary_selection_changed",
G_CALLBACK (primary_source_selection_changed_callback),
G_OBJECT (view), 0);
- g_signal_connect_object (priv->selector, "popup_event",
- G_CALLBACK (popup_event_callback),
+ g_signal_connect_object (priv->selector, "fill_popup_menu",
+ G_CALLBACK (fill_popup_menu_callback),
G_OBJECT (view), 0);
load_primary_selection (view);
diff --git a/addressbook/gui/component/apps_evolution_addressbook.schemas.in.in b/addressbook/gui/component/apps_evolution_addressbook.schemas.in.in
index 1f835d9414..0de9b142f7 100644
--- a/addressbook/gui/component/apps_evolution_addressbook.schemas.in.in
+++ b/addressbook/gui/component/apps_evolution_addressbook.schemas.in.in
@@ -10,8 +10,8 @@
<type>string</type>
<default></default>
<locale name="C">
- <short>EFolderList XML for the list of completion URIs</short>
- <long>EFolderList XML for the list of completion URIs.</long>
+ <short>EFolderList xml for the list of completion uris</short>
+ <long>EFolderList xml for the list of completion uris</long>
</locale>
</schema>
@@ -23,7 +23,7 @@
<default>3</default>
<locale name="C">
<short>The number of characters that must be typed before evolution will attempt to autocomplete</short>
- <long>The number of characters that must be typed before evolution will attempt to autocomplete.</long>
+ <long>The number of characters that must be typed before evolution will attempt to autocomplete</long>
</locale>
</schema>
@@ -37,7 +37,7 @@
<default></default>
<locale name="C">
<short>URI for the folder last used in the select names dialog</short>
- <long>URI for the folder last used in the select names dialog.</long>
+ <long>URI for the folder last used in the select names dialog</long>
</locale>
</schema>
@@ -50,7 +50,7 @@
<type>int</type>
<locale name="C">
<short>Position of the vertical pane in main view</short>
- <long>Position of the vertical pane in main view.</long>
+ <long>Position of the vertical pane in main view</long>
</locale>
</schema>
@@ -62,7 +62,7 @@
<default>true</default>
<locale name="C">
<short>Show the "Preview" pane</short>
- <long>Show the "Preview" pane.</long>
+ <long>Show the "Preview" pane</long>
</locale>
</schema>
diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c
index e3731cfbc6..5b447b7b99 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.c
+++ b/addressbook/gui/contact-editor/e-contact-editor.c
@@ -34,6 +34,7 @@
#include <gtk/gtkstock.h>
#include <gtk/gtkentry.h>
#include <gtk/gtklabel.h>
+#include <libgnomeui/gnome-popup-menu.h>
#include <libgnomeui/gnome-window-icon.h>
#include <libgnome/gnome-util.h>
#include <libgnome/gnome-i18n.h>
diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c
index ed55f42a89..b9f6b123e6 100644
--- a/addressbook/gui/widgets/e-addressbook-view.c
+++ b/addressbook/gui/widgets/e-addressbook-view.c
@@ -29,6 +29,7 @@
#include <gtk/gtkscrolledwindow.h>
#include <gal/e-table/e-table-scrolled.h>
#include <gal/e-table/e-table-model.h>
+#include <gal/widgets/e-popup-menu.h>
#include <gal/widgets/e-gui-utils.h>
#include <gal/menus/gal-view-factory-etable.h>
#include <gal/menus/gal-view-etable.h>
@@ -43,7 +44,6 @@
#include "addressbook/printing/e-contact-print.h"
#include "addressbook/printing/e-contact-print-envelope.h"
#include "addressbook/gui/search/e-addressbook-search-dialog.h"
-#include "addressbook/gui/widgets/eab-popup.h"
#include "e-util/e-categories-master-list-wombat.h"
#include "e-util/e-sexp.h"
@@ -475,12 +475,16 @@ eab_view_new (void)
g_signal_connect_swapped (eav->paned, "button_release_event",
G_CALLBACK (get_paned_position), eav);
+ eav->widget = gtk_label_new ("empty label here");
+ gtk_container_add (GTK_CONTAINER (eav->paned), eav->widget);
+ gtk_widget_show (eav->widget);
+
eav->contact_display = eab_contact_display_new ();
eav->contact_display_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (eav->contact_display_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (eav->contact_display_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (eav->contact_display_window), GTK_SHADOW_IN);
gtk_container_add (GTK_CONTAINER (eav->contact_display_window), eav->contact_display);
- gtk_paned_add2 (GTK_PANED (eav->paned), eav->contact_display_window);
+ gtk_container_add (GTK_CONTAINER (eav->paned), eav->contact_display_window);
gtk_widget_show (eav->contact_display);
gtk_widget_show (eav->contact_display_window);
gtk_widget_show (eav->paned);
@@ -771,6 +775,7 @@ get_selection_model (EABView *view)
/* Popup menu stuff */
typedef struct {
EABView *view;
+ EPopupMenu *submenu;
gpointer closure;
} ContactAndBook;
@@ -780,219 +785,371 @@ contact_and_book_get_selection_model (ContactAndBook *contact_and_book)
return get_selection_model (contact_and_book->view);
}
+static void
+contact_and_book_free (ContactAndBook *contact_and_book)
+{
+ EABView *view = contact_and_book->view;
+ ESelectionModel *selection;
+
+ if (contact_and_book->submenu)
+ gal_view_instance_free_popup_menu (view->view_instance,
+ contact_and_book->submenu);
+
+ selection = contact_and_book_get_selection_model (contact_and_book);
+ if (selection)
+ e_selection_model_right_click_up(selection);
+
+ g_object_unref (view);
+}
+
+static void
+get_contact_list_1(gint model_row,
+ gpointer closure)
+{
+ ContactAndBook *contact_and_book;
+ GList **list;
+ EABView *view;
+ EContact *contact;
+
+ contact_and_book = closure;
+ list = contact_and_book->closure;
+ view = contact_and_book->view;
+
+ contact = eab_model_get_contact(view->model, model_row);
+ *list = g_list_prepend(*list, contact);
+}
+
static GList *
-get_contact_list (EABPopupTargetSelect *t)
+get_contact_list (ContactAndBook *contact_and_book)
{
GList *list = NULL;
- int i;
+ ESelectionModel *selection;
- for (i=0;i<t->cards->len;i++)
- list = g_list_prepend(list, t->cards->pdata[i]);
+ selection = contact_and_book_get_selection_model (contact_and_book);
+
+ if (selection) {
+ contact_and_book->closure = &list;
+ e_selection_model_foreach (selection, get_contact_list_1, contact_and_book);
+ }
return list;
}
static void
-save_as (EPopup *ep, EPopupItem *pitem, void *data)
+has_email_address_1(gint model_row,
+ gpointer closure)
{
- /*ContactAndBook *contact_and_book = data;*/
- GList *contacts = get_contact_list ((EABPopupTargetSelect *)ep->target);
+ ContactAndBook *contact_and_book;
+ gboolean *has_email;
+ EABView *view;
+ const EContact *contact;
+ GList *email;
+
+ contact_and_book = closure;
+ has_email = contact_and_book->closure;
+ view = contact_and_book->view;
+
+ if (*has_email)
+ return;
+
+ contact = eab_model_contact_at(view->model, model_row);
+
+ email = e_contact_get (E_CONTACT (contact), E_CONTACT_EMAIL);
+
+ if (g_list_length (email) > 0)
+ *has_email = TRUE;
+
+ g_list_foreach (email, (GFunc)g_free, NULL);
+ g_list_free (email);
+}
+static gboolean
+get_has_email_address (ContactAndBook *contact_and_book)
+{
+ ESelectionModel *selection;
+ gboolean has_email = FALSE;
+
+ selection = contact_and_book_get_selection_model (contact_and_book);
+
+ if (selection) {
+ contact_and_book->closure = &has_email;
+ e_selection_model_foreach (selection, has_email_address_1, contact_and_book);
+ }
+
+ return has_email;
+}
+
+static void
+save_as (GtkWidget *widget, ContactAndBook *contact_and_book)
+{
+ GList *contacts = get_contact_list (contact_and_book);
if (contacts) {
eab_contact_list_save(_("Save as VCard..."), contacts, NULL);
- g_list_free(contacts);
+ e_free_object_list(contacts);
}
}
static void
-send_as (EPopup *ep, EPopupItem *pitem, void *data)
+send_as (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- /*ContactAndBook *contact_and_book = data;*/
- GList *contacts = get_contact_list ((EABPopupTargetSelect *)ep->target);
-
+ GList *contacts = get_contact_list (contact_and_book);
if (contacts) {
eab_send_contact_list(contacts, EAB_DISPOSITION_AS_ATTACHMENT);
- g_list_free(contacts);
+ e_free_object_list(contacts);
}
}
static void
-send_to (EPopup *ep, EPopupItem *pitem, void *data)
+send_to (GtkWidget *widget, ContactAndBook *contact_and_book)
+
{
- /*ContactAndBook *contact_and_book = data;*/
- GList *contacts = get_contact_list ((EABPopupTargetSelect *)ep->target);
+ GList *contacts = get_contact_list (contact_and_book);
if (contacts) {
eab_send_contact_list(contacts, EAB_DISPOSITION_AS_TO);
- g_list_free(contacts);
+ e_free_object_list(contacts);
}
}
static void
-print (EPopup *ep, EPopupItem *pitem, void *data)
+print (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- /*ContactAndBook *contact_and_book = data;*/
- EABPopupTargetSelect *t = (EABPopupTargetSelect *)ep->target;
-
- if (t->cards->len == 1) {
- gtk_widget_show(e_contact_print_contact_dialog_new(t->cards->pdata[0]));
- } else {
- GList *contacts = get_contact_list(t);
-
- gtk_widget_show(e_contact_print_contact_list_dialog_new(contacts));
- g_list_free(contacts);
+ GList *contacts = get_contact_list (contact_and_book);
+ if (contacts) {
+ if (contacts->next)
+ gtk_widget_show(e_contact_print_contact_list_dialog_new(contacts));
+ else
+ gtk_widget_show(e_contact_print_contact_dialog_new(contacts->data));
+ e_free_object_list(contacts);
}
}
+#if 0 /* Envelope printing is disabled for Evolution 1.0. */
static void
-copy (EPopup *ep, EPopupItem *pitem, void *data)
+print_envelope (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- ContactAndBook *contact_and_book = data;
+ GList *cards = get_card_list (contact_and_book);
+ if (cards) {
+ gtk_widget_show(e_contact_list_print_envelope_dialog_new(contact_and_book->card));
+ e_free_object_list(cards);
+ }
+}
+#endif
+static void
+copy (GtkWidget *widget, ContactAndBook *contact_and_book)
+{
eab_view_copy (contact_and_book->view);
}
static void
-paste (EPopup *ep, EPopupItem *pitem, void *data)
+paste (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- ContactAndBook *contact_and_book = data;
-
eab_view_paste (contact_and_book->view);
}
static void
-cut (EPopup *ep, EPopupItem *pitem, void *data)
+cut (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- ContactAndBook *contact_and_book = data;
-
eab_view_cut (contact_and_book->view);
}
static void
-delete (EPopup *ep, EPopupItem *pitem, void *data)
+delete (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- ContactAndBook *contact_and_book = data;
+ if (eab_editor_confirm_delete(GTK_WINDOW(gtk_widget_get_toplevel(contact_and_book->view->widget)))) {
+ EBook *book;
+ GList *list = get_contact_list(contact_and_book);
+ GList *iterator;
+ gboolean bulk_remove = FALSE;
+
+ bulk_remove = e_book_check_static_capability (contact_and_book->view->model->book,
+ "bulk-remove");
+
+ g_object_get(contact_and_book->view->model,
+ "book", &book,
+ NULL);
+
+ if (bulk_remove) {
+ GList *ids = NULL;
+
+ for (iterator = list; iterator; iterator = iterator->next) {
+ EContact *contact = iterator->data;
+ ids = g_list_prepend (ids, (char*)e_contact_get_const (contact, E_CONTACT_UID));
+ }
- eab_view_delete_selection(contact_and_book->view);
+ /* Remove the cards all at once. */
+ /* XXX no callback specified... ugh */
+ e_book_async_remove_contacts (book,
+ ids,
+ NULL,
+ NULL);
+
+ g_list_free (ids);
+ }
+ else {
+ for (iterator = list; iterator; iterator = iterator->next) {
+ EContact *contact = iterator->data;
+ /* Remove the card. */
+ /* XXX no callback specified... ugh */
+ e_book_async_remove_contact (book,
+ contact,
+ NULL,
+ NULL);
+ }
+ }
+ e_free_object_list(list);
+ g_object_unref(book);
+ }
}
static void
-copy_to_folder (EPopup *ep, EPopupItem *pitem, void *data)
+copy_to_folder (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- ContactAndBook *contact_and_book = data;
-
eab_view_copy_to_folder (contact_and_book->view);
}
static void
-move_to_folder (EPopup *ep, EPopupItem *pitem, void *data)
+move_to_folder (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- ContactAndBook *contact_and_book = data;
-
eab_view_move_to_folder (contact_and_book->view);
}
static void
-new_card (EPopup *ep, EPopupItem *pitem, void *data)
+free_popup_info (GtkWidget *w, ContactAndBook *contact_and_book)
{
- /*ContactAndBook *contact_and_book = data;*/
+ contact_and_book_free (contact_and_book);
+}
+
+static void
+new_card (GtkWidget *widget, ContactAndBook *contact_and_book)
+{
+ EBook *book;
EContact *contact = e_contact_new();
- eab_show_contact_editor (((EABPopupTargetSelect *)ep->target)->book, contact, TRUE, TRUE);
+ g_object_get(contact_and_book->view->model,
+ "book", &book,
+ NULL);
+
+ eab_show_contact_editor (book, contact, TRUE, TRUE);
+ g_object_unref (book);
g_object_unref (contact);
}
static void
-new_list (EPopup *ep, EPopupItem *pitem, void *data)
+new_list (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- /*ContactAndBook *contact_and_book = data;*/
+ EBook *book;
EContact *contact = e_contact_new ();
- eab_show_contact_list_editor (((EABPopupTargetSelect *)ep->target)->book, contact, TRUE, TRUE);
+ g_object_get(contact_and_book->view->model,
+ "book", &book,
+ NULL);
+ eab_show_contact_list_editor (book, contact, TRUE, TRUE);
+ g_object_unref(book);
g_object_unref(contact);
}
-static EPopupItem eabv_popup_items[] = {
- { E_POPUP_ITEM, "10.new", N_("New Contact..."), new_card, NULL, "stock_contact", 0, EAB_POPUP_SELECT_EDITABLE},
- { E_POPUP_ITEM, "15.newlist", N_("New Contact List..."), new_list, NULL, "stock_contact-list", 0, EAB_POPUP_SELECT_EDITABLE },
-
- { E_POPUP_BAR, "20.bar" },
- { E_POPUP_ITEM, "30.saveas", N_("Save as VCard..."), save_as, NULL, "stock_save-as", 0, EAB_POPUP_SELECT_MANY },
- { E_POPUP_ITEM, "40.forward", N_("Forward Contact"), send_as, NULL, "stock_mail-forward", 0, EAB_POPUP_SELECT_MANY },
- { E_POPUP_ITEM, "50.mailto", N_("Send Message to Contact"), send_to, NULL, "stock_mail-send", 0, EAB_POPUP_SELECT_MANY|EAB_POPUP_SELECT_EMAIL },
- { E_POPUP_ITEM, "60.print", N_("Print"), print, NULL, "stock_print", 0, EAB_POPUP_SELECT_MANY },
-
- { E_POPUP_BAR, "70.bar" },
- { E_POPUP_ITEM, "80.copyto", N_("Copy to Address Book..."), copy_to_folder, NULL, NULL, 0, EAB_POPUP_SELECT_MANY },
- { E_POPUP_ITEM, "90.moveto", N_("Move to Address Book..."), move_to_folder, NULL, NULL, 0, EAB_POPUP_SELECT_MANY|EAB_POPUP_SELECT_EDITABLE },
-
- { E_POPUP_BAR, "a0.bar" },
- { E_POPUP_BAR, "b0.cut", N_("Cut"), cut, NULL, "stock_cut", 0, EAB_POPUP_SELECT_MANY|EAB_POPUP_SELECT_EDITABLE },
- { E_POPUP_ITEM, "c0.copy", N_("Copy"), copy, NULL, "stock_copy", 0, EAB_POPUP_SELECT_MANY },
- { E_POPUP_ITEM, "d0.paste", N_("Paste"), paste, NULL, "stock_paste", 0, EAB_POPUP_SELECT_EDITABLE },
- { E_POPUP_ITEM, "e0.delete", N_("Delete"), delete, NULL, "stock_delete", 0, EAB_POPUP_SELECT_EDITABLE|EAB_POPUP_SELECT_MANY },
-};
-
+#if 0
static void
-get_card_1(gint model_row, void *data)
+sources (GtkWidget *widget, ContactAndBook *contact_and_book)
{
- ContactAndBook *contact_and_book = data;
- EContact *contact;
+ BonoboControl *control;
+ GNOME_Evolution_ShellView shell_view;
+ CORBA_Environment ev;
- contact = eab_model_get_contact(contact_and_book->view->model, model_row);
- if (contact)
- g_ptr_array_add((GPtrArray *)contact_and_book->closure, contact);
-}
+ control = g_object_get_data (G_OBJECT (gcal), "control");
+ if (control == NULL)
+ return;
-static void
-eabv_popup_free(EPopup *ep, GSList *list, void *data)
-{
- ContactAndBook *cab = data;
- ESelectionModel *selection;
+ shell_view = get_shell_view_interface (control);
+ if (shell_view == CORBA_OBJECT_NIL)
+ return;
- /* NB: this looks strange to me */
- selection = contact_and_book_get_selection_model(cab);
- if (selection)
- e_selection_model_right_click_up(selection);
+ CORBA_exception_init (&ev);
+
+ GNOME_Evolution_ShellView_showSettings (shell_view, &ev);
+
+ if (BONOBO_EX (&ev))
+ g_message ("control_util_show_settings(): Could not show settings");
- g_slist_free(list);
- g_object_unref(cab->view);
- g_free(cab);
+ CORBA_exception_free (&ev);
}
+#endif
+
+#define POPUP_READONLY_MASK 0x1
+#define POPUP_NOSELECTION_MASK 0x2
+#define POPUP_NOEMAIL_MASK 0x4
static void
do_popup_menu(EABView *view, GdkEvent *event)
{
- EABPopup *ep;
- EABPopupTargetSelect *t;
- GSList *menus = NULL;
- int i;
- GtkMenu *menu;
- GPtrArray *cards = g_ptr_array_new();
ContactAndBook *contact_and_book;
+ GtkMenu *popup;
+ EPopupMenu *submenu = NULL;
ESelectionModel *selection_model;
+ gboolean selection = FALSE;
+
+ EPopupMenu menu[] = {
+ E_POPUP_ITEM (N_("New Contact..."), G_CALLBACK(new_card), POPUP_READONLY_MASK),
+ E_POPUP_ITEM (N_("New Contact List..."), G_CALLBACK(new_list), POPUP_READONLY_MASK),
+ E_POPUP_SEPARATOR,
+#if 0
+ E_POPUP_ITEM (N_("Go to Folder..."), G_CALLBACK (goto_folder), 0),
+ E_POPUP_ITEM (N_("Import..."), G_CALLBACK (import), POPUP_READONLY_MASK),
+ E_POPUP_SEPARATOR,
+ E_POPUP_ITEM (N_("Search for Contacts..."), G_CALLBACK (search), 0),
+ E_POPUP_ITEM (N_("Address Book Sources..."), G_CALLBACK (sources), 0),
+ E_POPUP_SEPARATOR,
+ E_POPUP_ITEM (N_("Pilot Settings..."), G_CALLBACK (pilot_settings), 0),
+#endif
+ E_POPUP_SEPARATOR,
+ E_POPUP_ITEM (N_("Save as VCard..."), G_CALLBACK(save_as), POPUP_NOSELECTION_MASK),
+ E_POPUP_ITEM (N_("Forward Contact"), G_CALLBACK(send_as), POPUP_NOSELECTION_MASK),
+ E_POPUP_ITEM (N_("Send Message to Contact"), G_CALLBACK(send_to), POPUP_NOSELECTION_MASK | POPUP_NOEMAIL_MASK),
+ E_POPUP_ITEM (N_("Print"), G_CALLBACK(print), POPUP_NOSELECTION_MASK),
+#if 0 /* Envelope printing is disabled for Evolution 1.0. */
+ E_POPUP_ITEM (N_("Print Envelope"), G_CALLBACK(print_envelope), POPUP_NOSELECTION_MASK),
+#endif
+ E_POPUP_SEPARATOR,
+
+ E_POPUP_ITEM (N_("Copy to Address Book..."), G_CALLBACK(copy_to_folder), POPUP_NOSELECTION_MASK),
+ E_POPUP_ITEM (N_("Move to Address Book..."), G_CALLBACK(move_to_folder), POPUP_READONLY_MASK | POPUP_NOSELECTION_MASK),
+ E_POPUP_SEPARATOR,
+
+ E_POPUP_ITEM (N_("Cut"), G_CALLBACK (cut), POPUP_READONLY_MASK | POPUP_NOSELECTION_MASK),
+ E_POPUP_ITEM (N_("Copy"), G_CALLBACK (copy), POPUP_NOSELECTION_MASK),
+ E_POPUP_ITEM (N_("Paste"), G_CALLBACK (paste), POPUP_READONLY_MASK),
+ E_POPUP_ITEM (N_("Delete"), G_CALLBACK(delete), POPUP_READONLY_MASK | POPUP_NOSELECTION_MASK),
+ E_POPUP_SEPARATOR,
+
+#if 0
+ E_POPUP_SUBMENU (N_("Current View"), submenu = gal_view_instance_get_popup_menu (view->view_instance), 0),
+#endif
+ E_POPUP_TERMINATOR
+ };
contact_and_book = g_new(ContactAndBook, 1);
contact_and_book->view = view;
- g_object_ref(contact_and_book->view);
+ contact_and_book->submenu = submenu;
- selection_model = contact_and_book_get_selection_model(contact_and_book);
- if (selection_model) {
- contact_and_book->closure = cards;
- e_selection_model_foreach(selection_model, get_card_1, contact_and_book);
- }
+ g_object_ref (contact_and_book->view);
- ep = eab_popup_new("com.novell.evolution.addressbook.view.popup");
- t = eab_popup_target_new_select(ep, view->book, !eab_model_editable(view->model), cards);
- t->target.widget = (GtkWidget *)view;
+ selection_model = contact_and_book_get_selection_model (contact_and_book);
+ if (selection_model)
+ selection = e_selection_model_selected_count (selection_model) > 0;
- for (i=0;i<sizeof(eabv_popup_items)/sizeof(eabv_popup_items[0]);i++)
- menus = g_slist_prepend(menus, &eabv_popup_items[i]);
+ popup = e_popup_menu_create (menu,
+ 0,
+ (eab_model_editable (view->model) ? 0 : POPUP_READONLY_MASK) +
+ (selection ? 0 : POPUP_NOSELECTION_MASK) +
+ (get_has_email_address (contact_and_book) ? 0 : POPUP_NOEMAIL_MASK),
+ contact_and_book);
- e_popup_add_items((EPopup *)ep, menus, eabv_popup_free, contact_and_book);
+ g_signal_connect (popup, "selection-done",
+ G_CALLBACK (free_popup_info), contact_and_book);
+ e_popup_menu (popup, event);
- menu = e_popup_create_menu_once((EPopup *)ep, (EPopupTarget *)t, 0);
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event?event->button.button:0, event?event->button.time:gtk_get_current_event_time());
}
static void
@@ -1832,43 +1989,12 @@ eab_view_print_preview(EABView *view)
void
eab_view_delete_selection(EABView *view)
{
- GList *list, *l;
-
- if (!eab_editor_confirm_delete(GTK_WINDOW(gtk_widget_get_toplevel(view->widget))))
- return;
-
- list = get_selected_contacts(view);
- if (e_book_check_static_capability (view->book, "bulk-remove")) {
- GList *ids = NULL;
-
- for (l=list;l;l=g_list_next(l)) {
- EContact *contact = l->data;
-
- ids = g_list_prepend (ids, (char*)e_contact_get_const (contact, E_CONTACT_UID));
- }
+ ContactAndBook contact_and_book;
- /* Remove the cards all at once. */
- /* XXX no callback specified... ugh */
- e_book_async_remove_contacts (view->book,
- ids,
- NULL,
- NULL);
-
- g_list_free (ids);
- }
- else {
- for (l=list;l;l=g_list_next(l)) {
- EContact *contact = l->data;
- /* Remove the card. */
- /* XXX no callback specified... ugh */
- e_book_async_remove_contact (view->book,
- contact,
- NULL,
- NULL);
- }
- }
+ memset (&contact_and_book, 0, sizeof (contact_and_book));
+ contact_and_book.view = view;
- e_free_object_list(list);
+ delete (GTK_WIDGET (view), &contact_and_book);
}
static void
diff --git a/addressbook/tools/evolution-addressbook-export.c b/addressbook/tools/evolution-addressbook-export.c
index 0fc31587a1..0793db7aad 100644
--- a/addressbook/tools/evolution-addressbook-export.c
+++ b/addressbook/tools/evolution-addressbook-export.c
@@ -150,7 +150,7 @@ main (int argc, char **argv)
action_list_cards_init (&actctx);
} else {
- g_warning (_("Unhandled error"));
+ g_warning (_("Impossible internal error."));
exit (-1);
}
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 58363a96b9..208e1d1efb 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,9 +1,3 @@
-2004-10-11 Not Zed <NotZed@Ximian.com>
-
- * gui/alarm-notify/alarm-queue.c (tray_icon_clicked_cb): convert
- to epopup.
- (add_popup_menu_item): removed, now redundant.
-
2004-10-08 Rodrigo Moya <rodrigo@novell.com>
Fixes #45951
@@ -16,33 +10,6 @@
* gui/dialogs/comp-editor.c (setup_widgets): no need to create an extra
GtkVBox, just use the GtkDialog's one.
-2004-10-07 JP Rosevear <jpr@novell.com>
-
- * gui/dialogs/cal-prefs-dialog.c: remove useless include
-
- * gui/dialogs/url-editor-dialog.c: ditto
-
-2004-10-07 JP Rosevear <jpr@novell.com>
-
- * gui/print.c: guard config.h
-
- * gui/tasks-control.c: guard config.h, remove useless include
-
- * gui/migration.c: remove useless include
-
- * gui/main.c: remove useless include
-
- * gui/e-calendar-view.h: #define the type
-
- * gui/calendar-offline-handler.c: remove useless include
-
- * gui/calendar-config.c: tidy header
-
-2004-10-07 JP Rosevear <jpr@novell.com>
-
- * gui/calendar-commands.c: guard config.h include, kill warning
- and remove useless include
-
2004-10-06 Rodrigo Moya <rodrigo@novell.com>
Fixes #65932
@@ -55,86 +22,10 @@
* gui/comp-editor-factory.c (cal_opened_cb): don't assert on error
cases, just display an error dialog.
-2004-10-06 Not Zed <NotZed@Ximian.com>
-
- * gui/gnome-cal.c (gnome_calendar_setup_view_popup): rename to
- view_popup_factory. Make it build an epopup item list directly.
- Can't re-use the galview cruft :-/
- (gnome_calendar_discard_view_popup): no longer needed.
- (gc_set_view, gc_save_custom_view, gc_define_views_response)
- (gc_define_views): implement the gal-view popup menu items.
-
- * gui/gnome-cal.h:
- * gui/e-week-view.h:
- * gui/e-day-view.h:
- * gui/e-cal-list-view.h: removed old e-popup-menu header.
-
- * gui/e-calendar-view.c (setup_popup_icons): removed.
- (e_calendar_view_create_popup_menu): converted to use e-popup.
- (on_paste, on_copy, on_cut, on_delete_occurrence)
- (on_unrecur_appointment, on_delete_appointment, on_publish)
- (on_forward, on_meeting, on_move_to, on_copy_to, on_print_event)
- (on_save_as, on_print, on_edit_appointment, on_goto_today)
- (on_goto_date, on_new_task, on_new_meeting, on_new_event)
- (on_new_appointment): convert to use e-popup stuff.
-
- * gui/tasks-component.c (popup_event_cb): e-popup api changes.
+2004-10-06 JP Rosevear <jpr@novell.com>
- * gui/e-cal-popup.c (e_cal_popup_target_new_select): implement the
- selection target.
- (ecalp_target_free): and free it.
-
- * gui/e-cal-model.h: Make the ECalModel struct non-anonymous so it
- can be forward-declared.
-
- * gui/calendar-component.c (popup_event_cb): e-popup api changes.
-
-2004-10-06 Rodrigo Moya <rodrigo@novell.com>
-
- Revert fix for #60551
-
- * gui/dialogs/task-page.c (task_page_fill_component): start date
- can be after the due date, no need to compare.
-
-2004-10-02 Iván Frade <frade@asturlinux.org>
-
- Fixes #48116
-
- * gui/dialogs/task-details.page.c (task_details_page_fill_component):
- Validation: completed date is not a future date.
-
-2004-10-01 Not Zed <NotZed@Ximian.com>
-
- * gui/tasks-component.c (create_component_view): cast warning
- away.
- (create_component_view): connect to popup_event rather than
- fill_popup_menu.
-
- * gui/calendar-component.c (create_component_view): cast a warning
- away.
-
- * calendar-errors.xml: add prompt-delete-task-list.
-
- * gui/tasks-component.c (fill_popup_menu_cb): renamed to
- popup_event_cb, make use e-cal-popup.
- (edit_task_list_cb, new_task_list_cb, delete_task_list_cb)
- (copy_task_list_cb): deja-vu. update for api.
- (add_popup_menu_item): killed. murdered. drawn and quatered.
- (delete_task_list_cb): use e-error for the delete prompt.
-
- * gui/calendar-component.c (create_component_view): hook onto
- popup event instead of fill_popup_menu.
-
- * calendar-errors.xml: added prompt-delete-calendar.
-
- * gui/calendar-component.c (fill_popup_menu_cb): rename to
- popup_event_cb, make use e-cal-popup.
- (edit_calendar_cb, new_calendar_cb, delete_calendar_cb)
- (copy_calendar_cb): fix for api changes.
- (add_popup_menu_item): removed.
- (delete_calendar_cb): use e-error for the delete thing.
-
- * gui/e-cal-popup.[ch]: calendar popup driver.
+ * gui/itip-utils.c (comp_server_send): pass the variable in
+ correctly
2004-09-29 Rodrigo Moya <rodrigo@novell.com>
@@ -152,15 +43,15 @@
destroyed (priv == null).
2004-09-28 JP Rosevear <jpr@novell.com>
-
- Fixes #61766
-
- * gui/migration.c (create_calendar_contact_source): set a color
- for the contacts
- (create_calendar_sources): set a color for the personal source and
- make in primary and default if nothing else is either
- (create_task_sources): ditto for tasks personal source
+
+ Fixes #61766
+ * gui/migration.c (create_calendar_contact_source): set a color
+ for the contacts
+ (create_calendar_sources): set a color for the personal source and
+ make in primary and default if nothing else is either
+ (create_task_sources): ditto for tasks personal source
+
2004-09-24 Rodrigo Moya <rodrigo@novell.com>
Fixes #65599
@@ -171,12 +62,6 @@
instead of auth_new_cal_from_uri().
2004-09-24 JP Rosevear <jpr@novell.com>
-
- Fixes #64955, Vincent Noel <vnoel@cox.net>
-
- * libecal/e-cal.c (e_cal_get_alarms_in_range): fix c99-ism
-
-2004-09-24 JP Rosevear <jpr@novell.com>
Fixes #66344
@@ -220,14 +105,14 @@
* gui/e-cal-model-tasks.c (e_cal_model_tasks_mark_task_complete):
notify of change so completion status updates immediately
-
-2004-09-21 JP Rosevear <jpr@novell.com>
+2004-09-21 JP Rosevear <jpr@novell.com>
+
Fixes #59194
-
- * gui/e-cal-model-calendar.c (get_location): return "" instead of
- NULL
+ * gui/e-cal-model-calendar.c (get_location): return "" instead of
+ NULL
+
2004-09-21 Chenthill Palanisamy <pchenthill@novell.com>
Fixes #65682
@@ -235,27 +120,20 @@
(itip_send_comp): check the static capability before
booking the deletion.
-2004-09-15 JP Rosevear <jpr@novell.com>
-
+2004-09-20 JP Rosevear <jpr@novell.com>
+
Fixes #55172
* conduits/calendar/calendar-conduit.c (local_record_from_comp):
handle -1 (last) for monthly recurrences and check both by_set_pos
and by_day since either can indicate this type of recurrence
-
+
2004-09-20 Tony Tsui <ttsui9@gmail.com>
Fixes #66174
* gui/dialogs/meeting-page.c (existing_attendee): fixed memory leak.
-2004-09-10 Hannah & Fazlu <hannah_lins@yahoo.co.in>
-
- Fixes bug #65051
-
- * calendar/gui/dialogs/task-page.c (task_page_fill_component):
- Compared the dates and time
-
2004-09-10 Rodrigo Moya <rodrigo@novell.com>
Fixes #62374
@@ -271,6 +149,31 @@
only be called once per time range.
2004-09-09 JP Rosevear <jpr@novell.com>
+
+ Fixes #65454
+
+ * gui/e-itip-control.c (class_init): only use a destroy function,
+ no finalize
+ (cleanup_ecal): util function
+ (init): use above for hash table and killed destroyed flag
+ (weren't using it anywhere)
+ (destroy): collapse finalize work into here and guard against
+ multiple destroy calls
+
+2004-08-31 Rodrigo Moya <rodrigo@novell.com>
+
+ Fixes #62392
+
+ * gui/alarm-notify/alarm-queue.c (display_notification): ref the
+ client's query object so that it doesn't disappear on us.
+ (tray_icon_destroyed_cb): unref the query previously ref'ed.
+
+2004-08-31 Rodrigo Moya <rodrigo@novell.com>
+
+ * gui/e-cal-model-tasks.c: include missing string.h, to avoid
+ problems in 64 bit builds.
+
+2004-09-09 JP Rosevear <jpr@novell.com>
Fixes #65454
@@ -281,7 +184,7 @@
(weren't using it anywhere)
(destroy): collapse finalize work into here and guard against
multiple destroy calls
-
+
2004-09-08 JP Rosevear <jpr@novell.com>
Fixes #62728
@@ -998,7 +901,7 @@
Partially fixes #56171
-2004-07-11 Jürg Billeter <j@bitron.ch>
+2004-07-11 Jürg Billeter <j@bitron.ch>
* gui/dialogs/event-page.c (event_page_fill_component):
busy should be opaque, not transparent
diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c
index e9b4e6f8e0..223fd6fa9f 100644
--- a/calendar/gui/alarm-notify/alarm-queue.c
+++ b/calendar/gui/alarm-notify/alarm-queue.c
@@ -51,7 +51,6 @@
#include "alarm-queue.h"
#include "config-data.h"
#include "util.h"
-#include "e-util/e-popup.h"
@@ -801,6 +800,36 @@ tray_icon_destroyed_cb (GtkWidget *tray, gpointer user_data)
}
/* Callbacks. */
+static void
+add_popup_menu_item (GtkMenu *menu, const char *label, const char *pixmap,
+ GCallback callback, gpointer user_data)
+{
+ GtkWidget *item, *image;
+
+ if (pixmap) {
+ item = gtk_image_menu_item_new_with_label (label);
+
+ /* load the image */
+ if (g_file_test (pixmap, G_FILE_TEST_EXISTS))
+ image = gtk_image_new_from_file (pixmap);
+ else
+ image = gtk_image_new_from_stock (pixmap, GTK_ICON_SIZE_MENU);
+
+ if (image) {
+ gtk_widget_show (image);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ }
+ } else {
+ item = gtk_menu_item_new_with_label (label);
+ }
+
+ if (callback)
+ g_signal_connect (G_OBJECT (item), "activate", callback, user_data);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+}
+
static gboolean
open_alarm_dialog (TrayIconData *tray_data)
{
@@ -825,15 +854,13 @@ open_alarm_dialog (TrayIconData *tray_data)
}
static void
-popup_dismiss_cb (EPopup *ep, EPopupItem *pitem, void *data)
+popup_dismiss_cb (GtkWidget *widget, TrayIconData *tray_data)
{
- TrayIconData *tray_data = data;
-
gtk_widget_destroy (tray_data->tray_icon);
}
static void
-popup_dismiss_all_cb (EPopup *ep, EPopupItem *pitem, void *data)
+popup_dismiss_all_cb (GtkWidget *widget, TrayIconData *tray_data)
{
while (tray_icons_list != NULL) {
TrayIconData *tray_data = tray_icons_list->data;
@@ -845,25 +872,11 @@ popup_dismiss_all_cb (EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-popup_open_cb (EPopup *ep, EPopupItem *pitem, void *data)
+popup_open_cb (GtkWidget *widget, TrayIconData *tray_data)
{
- TrayIconData *tray_data = data;
-
open_alarm_dialog (tray_data);
}
-static EPopupItem tray_items[] = {
- { E_POPUP_ITEM, "00.open", N_("Open"), popup_open_cb, NULL, GTK_STOCK_OPEN },
- { E_POPUP_ITEM, "10.dismiss", N_("Dismiss"), popup_dismiss_cb, NULL, NULL },
- { E_POPUP_ITEM, "20.dismissall", N_("Dismiss All"), popup_dismiss_all_cb, NULL, NULL },
-};
-
-static void
-tray_popup_free(EPopup *ep, GSList *items, void *data)
-{
- g_slist_free(items);
-}
-
static gint
tray_icon_clicked_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
@@ -873,17 +886,17 @@ tray_icon_clicked_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_da
if (event->button == 1) {
return open_alarm_dialog (tray_data);
} else if (event->button == 3) {
- GtkMenu *menu;
- GSList *menus = NULL;
- EPopup *ep;
- int i;
-
- ep = e_popup_new("com.novell.evolution.alarmNotify.popup");
- for (i=0;i<sizeof(tray_items)/sizeof(tray_items[0]);i++)
- menus = g_slist_prepend(menus, &tray_items[i]);
- e_popup_add_items(ep, menus, tray_popup_free, tray_data);
- menu = e_popup_create_menu_once(ep, NULL, 0);
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time);
+ GtkWidget *menu;
+
+ /* display popup menu */
+ menu = gtk_menu_new ();
+ add_popup_menu_item (GTK_MENU (menu), _("Open"), GTK_STOCK_OPEN,
+ G_CALLBACK (popup_open_cb), tray_data);
+ add_popup_menu_item (GTK_MENU (menu), _("Dismiss"), NULL,
+ G_CALLBACK (popup_dismiss_cb), tray_data);
+ add_popup_menu_item (GTK_MENU (menu), _("Dismiss All"), NULL,
+ G_CALLBACK (popup_dismiss_all_cb), tray_data);
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time);
return TRUE;
}
diff --git a/calendar/gui/calendar-component.c b/calendar/gui/calendar-component.c
index b1d63987bd..41d5a0c8ab 100644
--- a/calendar/gui/calendar-component.c
+++ b/calendar/gui/calendar-component.c
@@ -51,9 +51,7 @@
#include "dialogs/event-editor.h"
#include "widgets/misc/e-source-selector.h"
#include "widgets/misc/e-info-label.h"
-#include "widgets/misc/e-error.h"
#include "e-util/e-icon-factory.h"
-#include "e-cal-popup.h"
/* IDs for user creatable items */
#define CREATE_EVENT_ID "event"
@@ -310,109 +308,133 @@ update_primary_task_selection (CalendarComponentView *component_view)
/* Callbacks. */
static void
-copy_calendar_cb (EPopup *ep, EPopupItem *pitem, void *data)
+add_popup_menu_item (GtkMenu *menu, const char *label, const char *icon_name,
+ GCallback callback, gpointer user_data, gboolean sensitive)
+{
+ GtkWidget *item, *image;
+ GdkPixbuf *pixbuf;
+
+ if (icon_name) {
+ item = gtk_image_menu_item_new_with_label (label);
+
+ /* load the image */
+ pixbuf = e_icon_factory_get_icon (icon_name, E_ICON_SIZE_MENU);
+ image = gtk_image_new_from_pixbuf (pixbuf);
+
+ if (image) {
+ gtk_widget_show (image);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ }
+ } else {
+ item = gtk_menu_item_new_with_label (label);
+ }
+
+ if (callback)
+ g_signal_connect (G_OBJECT (item), "activate", callback, user_data);
+
+ if (!sensitive)
+ gtk_widget_set_sensitive (item, FALSE);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+}
+
+static void
+copy_calendar_cb (GtkWidget *widget, CalendarComponentView *component_view)
{
- CalendarComponentView *component_view = data;
ESource *selected_source;
selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
if (!selected_source)
return;
- copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel (ep->target->widget)), selected_source, E_CAL_SOURCE_TYPE_EVENT);
+ copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source, E_CAL_SOURCE_TYPE_EVENT);
}
static void
-delete_calendar_cb (EPopup *ep, EPopupItem *pitem, void *data)
+delete_calendar_cb (GtkWidget *widget, CalendarComponentView *component_view)
{
- CalendarComponentView *component_view = data;
ESource *selected_source;
- ECal *cal;
- char *uri;
+ GtkWidget *dialog;
selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
if (!selected_source)
return;
- if (e_error_run((GtkWindow *)gtk_widget_get_toplevel(ep->target->widget),
- "calendar:prompt-delete-calendar", e_source_peek_name(selected_source)) != GTK_RESPONSE_YES)
- return;
-
- /* first, ask the backend to remove the calendar */
- uri = e_source_get_uri (selected_source);
- cal = e_cal_model_get_client_for_uri (gnome_calendar_get_calendar_model (component_view->calendar), uri);
- if (!cal)
- cal = e_cal_new_from_uri (uri, E_CAL_SOURCE_TYPE_EVENT);
- g_free (uri);
- if (cal) {
- if (e_cal_remove (cal, NULL)) {
- if (e_source_selector_source_is_selected (E_SOURCE_SELECTOR (component_view->source_selector),
- selected_source)) {
- gnome_calendar_remove_source (component_view->calendar, E_CAL_SOURCE_TYPE_EVENT, selected_source);
- e_source_selector_unselect_source (E_SOURCE_SELECTOR (component_view->source_selector),
- selected_source);
+ /* create the confirmation dialog */
+ dialog = gtk_message_dialog_new (
+ GTK_WINDOW (gtk_widget_get_toplevel (widget)),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ _("Calendar '%s' will be removed. Are you sure you want to continue?"),
+ e_source_peek_name (selected_source));
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) {
+ ECal *cal;
+ char *uri;
+
+ /* first, ask the backend to remove the calendar */
+ uri = e_source_get_uri (selected_source);
+ cal = e_cal_model_get_client_for_uri (gnome_calendar_get_calendar_model (component_view->calendar), uri);
+ if (!cal)
+ cal = e_cal_new_from_uri (uri, E_CAL_SOURCE_TYPE_EVENT);
+ g_free (uri);
+ if (cal) {
+ if (e_cal_remove (cal, NULL)) {
+ if (e_source_selector_source_is_selected (E_SOURCE_SELECTOR (component_view->source_selector),
+ selected_source)) {
+ gnome_calendar_remove_source (component_view->calendar, E_CAL_SOURCE_TYPE_EVENT, selected_source);
+ e_source_selector_unselect_source (E_SOURCE_SELECTOR (component_view->source_selector),
+ selected_source);
+ }
+
+ e_source_group_remove_source (e_source_peek_group (selected_source), selected_source);
+ e_source_list_sync (component_view->source_list, NULL);
}
-
- e_source_group_remove_source (e_source_peek_group (selected_source), selected_source);
- e_source_list_sync (component_view->source_list, NULL);
}
}
+
+ gtk_widget_destroy (dialog);
}
static void
-new_calendar_cb (EPopup *ep, EPopupItem *pitem, void *data)
+new_calendar_cb (GtkWidget *widget, CalendarComponentView *component_view)
{
- calendar_setup_new_calendar (GTK_WINDOW (gtk_widget_get_toplevel(ep->target->widget)));
+ calendar_setup_new_calendar (GTK_WINDOW (gtk_widget_get_toplevel (widget)));
}
static void
-edit_calendar_cb (EPopup *ep, EPopupItem *pitem, void *data)
+edit_calendar_cb (GtkWidget *widget, CalendarComponentView *component_view)
{
- CalendarComponentView *component_view = data;
ESource *selected_source;
selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
if (!selected_source)
return;
- calendar_setup_edit_calendar (GTK_WINDOW (gtk_widget_get_toplevel(ep->target->widget)), selected_source);
+ calendar_setup_edit_calendar (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source);
}
-static EPopupItem ecc_source_popups[] = {
- { E_POPUP_ITEM, "10.new", N_("New Calendar"), new_calendar_cb, NULL, "stock_calendar", 0, 0 },
- { E_POPUP_ITEM, "15.copy", N_("Copy"), copy_calendar_cb, NULL, "stock_folder-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY },
- { E_POPUP_ITEM, "20.delete", N_("Delete"), delete_calendar_cb, NULL, "stock_delete", 0, E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY },
- { E_POPUP_ITEM, "30.properties", N_("Properties..."), edit_calendar_cb, NULL, NULL, 0, E_CAL_POPUP_SOURCE_PRIMARY },
-};
-
static void
-ecc_source_popup_free(EPopup *ep, GSList *list, void *data)
-{
- g_slist_free(list);
-}
-
-static gboolean
-popup_event_cb(ESourceSelector *selector, ESource *insource, GdkEventButton *event, CalendarComponentView *component_view)
+fill_popup_menu_cb (ESourceSelector *selector, GtkMenu *menu, CalendarComponentView *component_view)
{
- ECalPopup *ep;
- ECalPopupTargetSource *t;
- GSList *menus = NULL;
- int i;
- GtkMenu *menu;
-
- ep = e_cal_popup_new("com.novell.evolution.calendar.source.popup");
- t = e_cal_popup_target_new_source(ep, selector);
- t->target.widget = (GtkWidget *)component_view->calendar;
-
- for (i=0;i<sizeof(ecc_source_popups)/sizeof(ecc_source_popups[0]);i++)
- menus = g_slist_prepend(menus, &ecc_source_popups[i]);
-
- e_popup_add_items((EPopup *)ep, menus, ecc_source_popup_free, component_view);
-
- menu = e_popup_create_menu_once((EPopup *)ep, (EPopupTarget *)t, 0);
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event?event->button:0, event?event->time:gtk_get_current_event_time());
+ ESource *source;
+ gboolean sensitive, system;
+ const char *source_uri;
+
+ source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
+ sensitive = source ? TRUE : FALSE;
- return TRUE;
+ /* FIXME Gross hack, should have a property or something */
+ source_uri = e_source_peek_relative_uri (source);
+ system = source_uri && !strcmp ("system", source_uri);
+
+ add_popup_menu_item (menu, _("New Calendar"), "stock_calendar",
+ G_CALLBACK (new_calendar_cb), component_view, TRUE);
+ add_popup_menu_item (menu, _("Copy"), "stock_folder-copy",
+ G_CALLBACK (copy_calendar_cb), component_view, sensitive);
+ add_popup_menu_item (menu, _("Delete"), "stock_delete", G_CALLBACK (delete_calendar_cb), component_view, sensitive && !system);
+ add_popup_menu_item (menu, _("Properties..."), NULL, G_CALLBACK (edit_calendar_cb), component_view, sensitive);
}
static void
@@ -1035,7 +1057,7 @@ create_component_view (CalendarComponent *calendar_component)
/* Create sidebar selector */
component_view->source_selector = e_source_selector_new (calendar_component->priv->source_list);
- e_source_selector_set_select_new ((ESourceSelector *)component_view->source_selector, TRUE);
+ e_source_selector_set_select_new (component_view->source_selector, TRUE);
g_signal_connect (component_view->source_selector, "drag-motion", G_CALLBACK (selector_tree_drag_motion),
calendar_component);
@@ -1102,8 +1124,8 @@ create_component_view (CalendarComponent *calendar_component)
G_CALLBACK (source_selection_changed_cb), component_view);
g_signal_connect (component_view->source_selector, "primary_selection_changed",
G_CALLBACK (primary_source_selection_changed_cb), component_view);
- g_signal_connect (component_view->source_selector, "popup_event",
- G_CALLBACK (popup_event_cb), component_view);
+ g_signal_connect (component_view->source_selector, "fill_popup_menu",
+ G_CALLBACK (fill_popup_menu_cb), component_view);
/* Set up the "new" item handler */
component_view->creatable_items_handler = e_user_creatable_items_handler_new ("calendar", create_local_item_cb, calendar_component);
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index 7802fa5da1..cfb0f208f1 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -3935,7 +3935,7 @@ e_week_view_show_popup_menu (EWeekView *week_view,
popup = e_calendar_view_create_popup_menu (E_CALENDAR_VIEW (week_view));
g_object_weak_ref (G_OBJECT (popup), popup_destroyed_cb, week_view);
- gtk_menu_popup (popup, NULL, NULL, NULL, NULL, bevent?bevent->button:0, bevent?bevent->time:gtk_get_current_event_time());
+ e_popup_menu (popup, (GdkEvent *) bevent);
}
static gboolean
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index f5ac1895d7..b8c97d5040 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -47,7 +47,6 @@
#include <libecal/e-cal-time-util.h>
#include <gal/menus/gal-view-factory-etable.h>
#include <gal/menus/gal-view-etable.h>
-#include <gal/menus/gal-define-views-dialog.h>
#include "widgets/menus/gal-view-menus.h"
#include "widgets/misc/e-error.h"
#include "e-comp-editor-registry.h"
@@ -78,7 +77,6 @@
#include "misc.h"
#include "ea-calendar.h"
#include "common/authentication.h"
-#include "e-cal-popup.h"
/* FIXME glib 2.4 and above has this */
#ifndef G_MAXINT32
@@ -1984,137 +1982,36 @@ gnome_calendar_discard_view_menus (GnomeCalendar *gcal)
priv->view_menus = NULL;
}
-/* This is copied/moved from gal-view-instance, only the calendar uses this for a popup menu */
-static void
-gc_set_view(EPopup *ep, EPopupItem *pitem, void *data)
-{
- GnomeCalendar *gcal = data;
-
- if (pitem->type & E_POPUP_ACTIVE)
- gal_view_instance_set_current_view_id(gcal->priv->view_instance, (char *)pitem->user_data);
-}
-
-static void
-gc_save_custom_view(EPopup *ep, EPopupItem *pitem, void *data)
-{
- GnomeCalendar *gcal = data;
-
- gal_view_instance_save_as(gcal->priv->view_instance);
-}
-
-static void
-gc_define_views_response(GtkWidget *d, int id, GnomeCalendar *gcal)
+EPopupMenu *
+gnome_calendar_setup_view_popup (GnomeCalendar *gcal)
{
- if (id == GTK_RESPONSE_OK)
- gal_view_collection_save(gcal->priv->view_instance->collection);
-
- gtk_widget_destroy(d);
-}
-
-static void
-gc_define_views(EPopup *ep, EPopupItem *pitem, void *data)
-{
- GnomeCalendar *gcal = data;
- GtkWidget *dialog = gal_define_views_dialog_new(gcal->priv->view_instance->collection);
-
- g_signal_connect(dialog, "response", G_CALLBACK(gc_define_views_response), data);
- gtk_widget_show(dialog);
-}
+ GnomeCalendarPrivate *priv;
-static EPopupItem gc_popups[] = {
- /* Code generates the path to fit */
- { E_POPUP_BAR, NULL },
- { E_POPUP_RADIO|E_POPUP_ACTIVE, NULL, N_("Custom View"), },
- { E_POPUP_ITEM, NULL, N_("Save Custom View"), gc_save_custom_view },
+ g_return_val_if_fail (gcal != NULL, NULL);
+ g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), NULL);
- /* index == 3, when we have non-custom view */
+ priv = gcal->priv;
- { E_POPUP_BAR, NULL },
- { E_POPUP_ITEM, NULL, N_("Define Views..."), gc_define_views },
-};
+ g_return_val_if_fail (priv->view_instance != NULL, NULL);
-static void
-gc_popup_free (EPopup *ep, GSList *list, void *data)
-{
- while (list) {
- GSList *n = list->next;
- EPopupItem *pitem = list->data;
-
- g_free(pitem->path);
- g_free(pitem->label);
- g_free(pitem->user_data);
- g_free(pitem);
- g_slist_free_1(list);
- list = n;
- }
+ return gal_view_instance_get_popup_menu (priv->view_instance);
}
-static void
-gc_popup_free_static (EPopup *ep, GSList *list, void *data)
+void
+gnome_calendar_discard_view_popup (GnomeCalendar *gcal, EPopupMenu *popup)
{
- while (list) {
- GSList *n = list->next;
- EPopupItem *pitem = list->data;
- g_free(pitem->path);
- g_free(pitem);
- g_slist_free_1(list);
- list = n;
- }
-}
-void
-gnome_calendar_view_popup_factory (GnomeCalendar *gcal, EPopup *ep, const char *prefix)
-{
GnomeCalendarPrivate *priv;
- int length;
- int i;
- gboolean found = FALSE;
- char *id;
- GSList *menus = NULL;
- EPopupItem *pitem;
g_return_if_fail (gcal != NULL);
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- g_return_if_fail (prefix != NULL);
priv = gcal->priv;
g_return_if_fail (priv->view_instance != NULL);
- length = gal_view_collection_get_count(priv->view_instance->collection);
- id = gal_view_instance_get_current_view_id (priv->view_instance);
-
- for (i = 0; i < length; i++) {
- GalViewCollectionItem *item = gal_view_collection_get_view_item(priv->view_instance->collection, i);
-
- pitem = g_malloc0(sizeof(*pitem));
- pitem->type = E_POPUP_RADIO;
- pitem->path = g_strdup_printf("%s/%02d.item", prefix, i);
- pitem->label = g_strdup(item->title);
- pitem->activate = gc_set_view;
- pitem->user_data = g_strdup(item->id);
-
- if (!found && id && !strcmp (id, item->id)) {
- found = TRUE;
- pitem->type |= E_POPUP_ACTIVE;
- }
-
- menus = g_slist_prepend(menus, pitem);
- }
-
- if (menus)
- e_popup_add_items(ep, menus, gc_popup_free, gcal);
-
- menus = NULL;
- for (i = found?3:0; i<sizeof(gc_popups)/sizeof(gc_popups[0]);i++) {
- pitem = g_malloc0(sizeof(*pitem));
- memcpy(pitem, &gc_popups[i], sizeof(*pitem));
- pitem->path = g_strdup_printf("%s/%02d.item", prefix, i+length);
- menus = g_slist_prepend(menus, pitem);
- }
-
- e_popup_add_items(ep, menus, gc_popup_free_static, gcal);
+ gal_view_instance_free_popup_menu (priv->view_instance, popup);
}
static void
diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c
index 9679cdcb45..b7309a21e8 100644
--- a/calendar/gui/itip-utils.c
+++ b/calendar/gui/itip-utils.c
@@ -30,6 +30,7 @@
#include <libgnome/gnome-i18n.h>
#include <gtk/gtkmessagedialog.h>
#include <gtk/gtkwidget.h>
+#include <gal/util/e-util.h>
#include <libical/ical.h>
#include <Evolution-Composer.h>
#include <e-util/e-dialog-utils.h>
@@ -1137,6 +1138,8 @@ itip_publish_comp (ECal *client, gchar *uri, gchar *username,
SoupMessage *msg;
SoupUri *real_uri;
char *ical_string;
+ char *prompt;
+ gboolean remember = FALSE;
toplevel = e_cal_util_new_top_level ();
icalcomponent_set_method (toplevel, ICAL_METHOD_PUBLISH);
diff --git a/calendar/gui/migration.c b/calendar/gui/migration.c
index de43d4bb5f..fa1b4bdeeb 100644
--- a/calendar/gui/migration.c
+++ b/calendar/gui/migration.c
@@ -40,6 +40,7 @@
#include <gtk/gtkmain.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkprogressbar.h>
+#include <gal/util/e-util.h>
#include <libecal/e-cal.h>
#include <e-util/e-bconf-map.h>
#include <e-util/e-folder-map.h>
diff --git a/calendar/gui/tasks-component.c b/calendar/gui/tasks-component.c
index d5455468eb..a817ca8546 100644
--- a/calendar/gui/tasks-component.c
+++ b/calendar/gui/tasks-component.c
@@ -40,7 +40,6 @@
#include "migration.h"
#include "comp-util.h"
#include "calendar-config.h"
-#include "e-cal-popup.h"
#include "common/authentication.h"
#include "dialogs/calendar-setup.h"
#include "dialogs/comp-editor.h"
@@ -48,7 +47,6 @@
#include "dialogs/task-editor.h"
#include "widgets/misc/e-source-selector.h"
#include "widgets/misc/e-info-label.h"
-#include "widgets/misc/e-error.h"
#include "e-util/e-icon-factory.h"
#define CREATE_TASK_ID "task"
@@ -254,111 +252,137 @@ update_primary_selection (TasksComponentView *component_view)
/* Callbacks. */
static void
-copy_task_list_cb (EPopup *ep, EPopupItem *pitem, void *data)
+add_popup_menu_item (GtkMenu *menu, const char *label, const char *icon_name,
+ GCallback callback, gpointer user_data, gboolean sensitive)
+{
+ GtkWidget *item, *image;
+ GdkPixbuf *pixbuf;
+
+ if (icon_name) {
+ item = gtk_image_menu_item_new_with_label (label);
+
+ /* load the image */
+ pixbuf = e_icon_factory_get_icon (icon_name, E_ICON_SIZE_MENU);
+ image = gtk_image_new_from_pixbuf (pixbuf);
+
+ if (image) {
+ gtk_widget_show (image);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ }
+ } else {
+ item = gtk_menu_item_new_with_label (label);
+ }
+
+ if (callback)
+ g_signal_connect (G_OBJECT (item), "activate", callback, user_data);
+
+ if (!sensitive)
+ gtk_widget_set_sensitive (item, FALSE);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+}
+
+static void
+copy_task_list_cb (GtkWidget *widget, TasksComponentView *component_view)
{
- TasksComponentView *component_view = data;
ESource *selected_source;
selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
if (!selected_source)
return;
- copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel(ep->target->widget)), selected_source, E_CAL_SOURCE_TYPE_TODO);
+ copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source, E_CAL_SOURCE_TYPE_TODO);
}
static void
-delete_task_list_cb (EPopup *ep, EPopupItem *pitem, void *data)
+delete_task_list_cb (GtkWidget *widget, TasksComponentView *component_view)
{
- TasksComponentView *component_view = data;
ESource *selected_source;
- ECal *cal;
- char *uri;
+ GtkWidget *dialog;
selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
if (!selected_source)
return;
- if (e_error_run((GtkWindow *)gtk_widget_get_toplevel(ep->target->widget),
- "calendar:prompt-delete-task-list", e_source_peek_name(selected_source)) != GTK_RESPONSE_YES)
- return;
-
- /* first, ask the backend to remove the task list */
- uri = e_source_get_uri (selected_source);
- cal = e_cal_model_get_client_for_uri (
- e_calendar_table_get_model (E_CALENDAR_TABLE (e_tasks_get_calendar_table (component_view->tasks))),
- uri);
- if (!cal)
- cal = e_cal_new_from_uri (uri, E_CAL_SOURCE_TYPE_TODO);
- g_free (uri);
- if (cal) {
- if (e_cal_remove (cal, NULL)) {
- if (e_source_selector_source_is_selected (E_SOURCE_SELECTOR (component_view->source_selector),
- selected_source)) {
- e_tasks_remove_todo_source (component_view->tasks, selected_source);
- e_source_selector_unselect_source (E_SOURCE_SELECTOR (component_view->source_selector),
- selected_source);
+ /* create the confirmation dialog */
+ dialog = gtk_message_dialog_new (
+ GTK_WINDOW (gtk_widget_get_toplevel (widget)),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ _("Task List '%s' will be removed. Are you sure you want to continue?"),
+ e_source_peek_name (selected_source));
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) {
+ ECal *cal;
+ char *uri;
+
+ /* first, ask the backend to remove the task list */
+ uri = e_source_get_uri (selected_source);
+ cal = e_cal_model_get_client_for_uri (
+ e_calendar_table_get_model (E_CALENDAR_TABLE (e_tasks_get_calendar_table (component_view->tasks))),
+ uri);
+ if (!cal)
+ cal = e_cal_new_from_uri (uri, E_CAL_SOURCE_TYPE_TODO);
+ g_free (uri);
+ if (cal) {
+ if (e_cal_remove (cal, NULL)) {
+ if (e_source_selector_source_is_selected (E_SOURCE_SELECTOR (component_view->source_selector),
+ selected_source)) {
+ e_tasks_remove_todo_source (component_view->tasks, selected_source);
+ e_source_selector_unselect_source (E_SOURCE_SELECTOR (component_view->source_selector),
+ selected_source);
+ }
+
+ e_source_group_remove_source (e_source_peek_group (selected_source), selected_source);
+ e_source_list_sync (component_view->source_list, NULL);
}
-
- e_source_group_remove_source (e_source_peek_group (selected_source), selected_source);
- e_source_list_sync (component_view->source_list, NULL);
}
}
+
+ gtk_widget_destroy (dialog);
}
static void
-new_task_list_cb (EPopup *ep, EPopupItem *pitem, void *data)
+new_task_list_cb (GtkWidget *widget, TasksComponentView *component_view)
{
- calendar_setup_new_task_list (GTK_WINDOW (gtk_widget_get_toplevel(ep->target->widget)));
+ calendar_setup_new_task_list (GTK_WINDOW (gtk_widget_get_toplevel (widget)));
}
static void
-edit_task_list_cb (EPopup *ep, EPopupItem *pitem, void *data)
+edit_task_list_cb (GtkWidget *widget, TasksComponentView *component_view)
{
- TasksComponentView *component_view = data;
ESource *selected_source;
selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
if (!selected_source)
return;
- calendar_setup_edit_task_list (GTK_WINDOW (gtk_widget_get_toplevel(ep->target->widget)), selected_source);
+ calendar_setup_edit_task_list (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source);
}
-static EPopupItem etc_source_popups[] = {
- { E_POPUP_ITEM, "10.new", N_("New Task List"), new_task_list_cb, NULL, "stock_todo", 0, 0 },
- { E_POPUP_ITEM, "15.copy", N_("Copy"), copy_task_list_cb, NULL, "stock_folder-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY },
- { E_POPUP_ITEM, "20.delete", N_("Delete"), delete_task_list_cb, NULL, "stock_delete", 0, E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY },
- { E_POPUP_ITEM, "30.properties", N_("Properties..."), edit_task_list_cb, NULL, NULL, 0, E_CAL_POPUP_SOURCE_PRIMARY },
-};
-
static void
-etc_source_popup_free(EPopup *ep, GSList *list, void *data)
+fill_popup_menu_cb (ESourceSelector *selector, GtkMenu *menu, TasksComponentView *component_view)
{
- g_slist_free(list);
-}
-
-static gboolean
-popup_event_cb(ESourceSelector *selector, ESource *insource, GdkEventButton *event, TasksComponentView *component_view)
-{
- ECalPopup *ep;
- ECalPopupTargetSource *t;
- GSList *menus = NULL;
- int i;
- GtkMenu *menu;
-
- ep = e_cal_popup_new("com.novell.evolution.tasks.source.popup");
- t = e_cal_popup_target_new_source(ep, selector);
- t->target.widget = (GtkWidget *)component_view->tasks;
-
- for (i=0;i<sizeof(etc_source_popups)/sizeof(etc_source_popups[0]);i++)
- menus = g_slist_prepend(menus, &etc_source_popups[i]);
-
- e_popup_add_items((EPopup *)ep, menus, etc_source_popup_free, component_view);
-
- menu = e_popup_create_menu_once((EPopup *)ep, (EPopupTarget *)t, 0);
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event?event->button:0, event?event->time:gtk_get_current_event_time());
-
- return TRUE;
+ ESource *source;
+ gboolean sensitive, system;
+ const char *source_uri;
+
+ source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (component_view->source_selector));
+ sensitive = source ? TRUE : FALSE;
+
+ /* FIXME Gross hack, should have a property or something */
+ source_uri = e_source_peek_relative_uri (source);
+ system = source_uri && !strcmp ("system", source_uri);
+
+ add_popup_menu_item (menu, _("New Task List"), "stock_todo",
+ G_CALLBACK (new_task_list_cb), component_view, TRUE);
+ add_popup_menu_item (menu, _("Copy"), "stock_folder-copy",
+ G_CALLBACK (copy_task_list_cb), component_view, sensitive);
+ add_popup_menu_item (menu, _("Delete"), "stock_delete", G_CALLBACK (delete_task_list_cb),
+ component_view, sensitive && !system);
+ add_popup_menu_item (menu, _("Properties..."), NULL, G_CALLBACK (edit_task_list_cb),
+ component_view, sensitive);
}
static void
@@ -843,7 +867,7 @@ create_component_view (TasksComponent *tasks_component)
/* Create sidebar selector */
component_view->source_selector = e_source_selector_new (tasks_component->priv->source_list);
- e_source_selector_set_select_new ((ESourceSelector *)component_view->source_selector, TRUE);
+ e_source_selector_set_select_new (component_view->source_selector, TRUE);
g_signal_connect (component_view->source_selector, "drag-motion", G_CALLBACK (selector_tree_drag_motion),
tasks_component);
@@ -912,8 +936,8 @@ create_component_view (TasksComponent *tasks_component)
G_CALLBACK (source_selection_changed_cb), component_view);
g_signal_connect (component_view->source_selector, "primary_selection_changed",
G_CALLBACK (primary_source_selection_changed_cb), component_view);
- g_signal_connect (component_view->source_selector, "popup_event",
- G_CALLBACK (popup_event_cb), component_view);
+ g_signal_connect (component_view->source_selector, "fill_popup_menu",
+ G_CALLBACK (fill_popup_menu_cb), component_view);
/* Set up the "new" item handler */
component_view->creatable_items_handler = e_user_creatable_items_handler_new ("tasks", create_local_item_cb, tasks_component);
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 3f75ad95c9..e677210378 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -42,22 +42,6 @@
EAI_AGAIN, it doesn't appear to mean the same as EAGAIN does with
system calls (i guess 'no shit sherlock' really).
-2004-10-04 JP Rosevear <jpr@novell.com>
-
- * providers/imap4/camel-imap4-provider.c: include camel-i18n.h
-
-2004-10-01 Jeffrey Stedfast <fejj@novell.com>
-
- * providers/imap4/camel-imap4-folder.c (imap4_sync): If we aren't
- online, we're done. nothing to do.
- (imap4_refresh_info): Same.
- (imap4_append_message): Same but set an exception.
- (imap4_transfer_messages_to): Same.
-
- * camel-service.c (camel_getaddrinfo): Avoid assigning a value to
- the member of a const struct (which newer gcc's apparently break
- over) by casting to non-const.
-
2004-09-28 Not Zed <NotZed@Ximian.com>
** See bug #66509.
@@ -101,7 +85,7 @@
* camel-vee-store.c:
* camel-vee-folder.c: move the unmatched
folder onto the camel-vee-store object. Removede the global
- unmatched folder and associated locks/etc, fixed all the code up
+ unmatched folder and associated locks/etc, fixed all the code up
to work with the new unmatched folder, if present.
2004-09-27 Not Zed <NotZed@Ximian.com>
@@ -127,24 +111,6 @@
(spool_get_meta_path): implement, this needs to work differnetly
to the parent classes implementations :-/.
-2004-09-22 Jeffrey Stedfast <fejj@novell.com>
-
- * providers/imap/camel-imap-store.c (connect_to_server): Instead
- of doing a host-lookup ourselves, get it passed in to us as an
- argument. Also simplified a bit (try_starttls is no longer an
- option).
- (connect_to_server_wrapper): Simplified (we no longer have
- fallback cases for SSL stuff). Also, perform host lookup here.
-
- * providers/imap4/camel-imap4-store.c: Same changes as above.
-
- * providers/pop3/camel-pop3-store.c: Same.
-
- * providers/smtp/camel-smtp-transport.c: Same. Other changes
- include making the code consistant with the other providers.
-
- * providers/nntp/camel-nntp-store.c: Same as pop/imap.
-
2004-09-21 Not Zed <NotZed@Ximian.com>
** See bug #63521.
@@ -229,12 +195,6 @@
* camel-http-stream.c: turn off debug.
-2004-09-08 Hannah & Fazlu <hannah_lins@yahoo.co.in>
-
- Fixes Bug#61088
-
- * camel/camel-smime-context.c: Change of strings.
-
2004-09-15 Not Zed <NotZed@Ximian.com>
** See bug #0xffff.
@@ -555,60 +515,6 @@
CAMEL_GROUPWISE_CFLAGS.
(libcamelgroupwise_la_LIBADD): use CAMEL_GROUPWISE_LIBS.
-2004-09-07 Not Zed <NotZed@Ximian.com>
-
- * providers/groupwise/camel-groupwise-provider.c: put the options
- in their own section.
-
-2004-09-06 Not Zed <NotZed@Ximian.com>
-
- * camel-search-private.c (utf8_get): remove this, and make the
- code use camel_utf8_getc instead. Quite a bit faster esp if
- optimising with inlines.
-
- * camel-object.c (check_magic_fail): change the check_magic code
- to mostly run from a macro, its worth it.
-
-2004-09-04 Not Zed <NotZed@Ximian.com>
-
- * providers/local/camel-mbox-summary.c (message_info_new): fix
- cast issue.
-
- * providers/pop3/camel-pop3-engine.c (get_capabilities): remove
- some unused variables.
-
- * camel-object.h: remove camel-i18n.h, fixed all c files where
- appropriate.
-
-2004-08-25 Not Zed <NotZed@Ximian.com>
-
- * camel-list-utils.[ch]: Copied e_dlist* stuff to here, part of
- removing e-util dependency on camel.
-
-2004-08-05 Not Zed <NotZed@Ximian.com>
-
- * providers/local/camel-local-provider.c: same.
-
- * providers/imap/camel-imap-provider.c: put the extra stuff into a
- 'general' section.
-
- * providers/imapp/camel-imapp-provider.c: same.
-
- * providers/pop3/camel-pop3-provider.c: make sure each section
- start has a name.
-
-2004-08-03 Not Zed <NotZed@Ximian.com>
-
- * camel-url.c (camel_url_set_param): when clearing a param, use
- remove_data instead of set_data_full. craptatious glib at it
- again.
-
- * providers/nntp/camel-nntp-provider.c: turn on ssl option.
-
-2004-07-07 Not Zed <NotZed@Ximian.com>
-
- * camel-folder.c: removed filter-rule.h ugh.
-
2004-07-02 Christian Neumair <chris@gnome-de.org>
* camel-smime-context.c: s/Can't/Cannot/.
diff --git a/camel/camel-filter-driver.c b/camel/camel-filter-driver.c
index dfb88b84ed..cd26c3c390 100644
--- a/camel/camel-filter-driver.c
+++ b/camel/camel-filter-driver.c
@@ -44,8 +44,8 @@
#include "camel-stream-fs.h"
#include "camel-stream-mem.h"
#include "camel-mime-message.h"
+
#include "camel-debug.h"
-#include "camel-i18n.h"
#include "e-util/e-sexp.h"
#include "e-util/e-memory.h"
diff --git a/camel/camel-folder-search.c b/camel/camel-folder-search.c
index b7578ba887..9dde9dd848 100644
--- a/camel/camel-folder-search.c
+++ b/camel/camel-folder-search.c
@@ -45,7 +45,6 @@
#include "camel-stream-mem.h"
#include "e-util/e-memory.h"
#include "camel-search-private.h"
-#include "camel-i18n.h"
#define d(x)
#define r(x)
diff --git a/camel/camel-movemail.c b/camel/camel-movemail.c
index 619d3dc33a..9684bf25e6 100644
--- a/camel/camel-movemail.c
+++ b/camel/camel-movemail.c
@@ -42,11 +42,12 @@
#include "camel-movemail.h"
#include "camel-exception.h"
+
#include "camel-mime-parser.h"
#include "camel-mime-filter.h"
#include "camel-mime-filter-from.h"
+
#include "camel-lock-client.h"
-#include "camel-i18n.h"
#define d(x)
diff --git a/camel/camel-sasl-digest-md5.c b/camel/camel-sasl-digest-md5.c
index b526ff47e7..91bbcda705 100644
--- a/camel/camel-sasl-digest-md5.c
+++ b/camel/camel-sasl-digest-md5.c
@@ -37,7 +37,6 @@
#include "camel-charset-map.h"
#include "camel-mime-utils.h"
#include "camel-sasl-digest-md5.h"
-#include "camel-i18n.h"
#define d(x)
diff --git a/camel/camel-sasl-gssapi.c b/camel/camel-sasl-gssapi.c
index 29724078b1..1efbefee16 100644
--- a/camel/camel-sasl-gssapi.c
+++ b/camel/camel-sasl-gssapi.c
@@ -204,6 +204,7 @@ gssapi_challenge (CamelSasl *sasl, GByteArray *token, CamelException *ex)
gss_buffer_desc inbuf, outbuf;
GByteArray *challenge = NULL;
gss_buffer_t input_token;
+ struct hostent *h;
int conf_state;
gss_qop_t qop;
gss_OID mech;
diff --git a/camel/camel-service.c b/camel/camel-service.c
index b916d5c05a..a4e27259f2 100644
--- a/camel/camel-service.c
+++ b/camel/camel-service.c
@@ -38,6 +38,7 @@
#include <sys/poll.h>
#include "e-util/e-msgport.h"
+
#include "e-util/e-host-utils.h"
#include "camel-service.h"
@@ -45,7 +46,6 @@
#include "camel-exception.h"
#include "camel-operation.h"
#include "camel-private.h"
-#include "camel-i18n.h"
#define d(x)
#define w(x)
@@ -896,7 +896,7 @@ camel_getaddrinfo(const char *name, const char *service, const struct addrinfo *
else
memcpy (&myhints, hints, sizeof (myhints));
- myhints.ai_family = AF_INET;
+ myhints.ai_faimily = AF_INET;
hints = &myhints;
#endif
@@ -917,7 +917,7 @@ camel_getaddrinfo(const char *name, const char *service, const struct addrinfo *
cs_freeinfo(msg);
} else
res = NULL;
-
+
camel_operation_end(NULL);
return res;
diff --git a/camel/camel-tcp-stream-ssl.c b/camel/camel-tcp-stream-ssl.c
index 19c534beff..39bf89d468 100644
--- a/camel/camel-tcp-stream-ssl.c
+++ b/camel/camel-tcp-stream-ssl.c
@@ -61,7 +61,6 @@
#include "camel-session.h"
#include "camel-certdb.h"
#include "camel-operation.h"
-#include "camel-i18n.h"
/* from md5-utils.h */
void md5_get_digest (const char *buffer, int buffer_size, unsigned char digest[16]);
diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c
index 34211a48aa..d7c29eefb4 100644
--- a/camel/camel-vee-folder.c
+++ b/camel/camel-vee-folder.c
@@ -38,7 +38,6 @@
#include "camel-vee-store.h" /* for open flags */
#include "camel-private.h"
#include "camel-debug.h"
-#include "camel-i18n.h"
#include "e-util/md5-utils.h"
diff --git a/camel/camel-vee-store.c b/camel/camel-vee-store.c
index 90c6ee1f95..b562ad4a60 100644
--- a/camel/camel-vee-store.c
+++ b/camel/camel-vee-store.c
@@ -27,7 +27,6 @@
#include "camel-vee-folder.h"
#include "camel-private.h"
-#include "camel-i18n.h"
#include <string.h>
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index bc89bae55b..c0c0bcc8a2 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -24,6 +24,7 @@
*
*/
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -58,10 +59,11 @@
#include "camel-sasl.h"
#include "camel-utf8.h"
#include "camel-string-utils.h"
+
#include "camel-imap-private.h"
#include "camel-private.h"
+
#include "camel-debug.h"
-#include "camel-i18n.h"
#define d(x)
@@ -503,52 +505,76 @@ imap_get_capability (CamelService *service, CamelException *ex)
}
enum {
- MODE_CLEAR,
- MODE_SSL,
- MODE_TLS,
+ USE_SSL_NEVER,
+ USE_SSL_ALWAYS,
+ USE_SSL_WHEN_POSSIBLE
};
#define SSL_PORT_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_SSL2 | CAMEL_TCP_STREAM_SSL_ENABLE_SSL3)
#define STARTTLS_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_TLS)
static gboolean
-connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, CamelException *ex)
+connect_to_server (CamelService *service, int ssl_mode, int try_starttls, CamelException *ex)
{
CamelImapStore *store = (CamelImapStore *) service;
CamelImapResponse *response;
CamelStream *tcp_stream;
CamelSockOptData sockopt;
gboolean force_imap4 = FALSE;
- int clean_quit, ret;
+ int clean_quit;
+ int ret;
char *buf;
+ struct addrinfo *ai, hints = { 0 };
+ char *serv;
+
+ /* FIXME: this connect stuff is duplicated everywhere */
+
+ if (service->url->port) {
+ serv = g_alloca(16);
+ sprintf(serv, "%d", service->url->port);
+ } else
+ serv = "imap";
- if (ssl_mode != MODE_CLEAR) {
+ if (ssl_mode != USE_SSL_NEVER) {
#ifdef HAVE_SSL
- if (ssl_mode == MODE_TLS) {
- tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, STARTTLS_FLAGS);
+ if (try_starttls) {
+ tcp_stream = camel_tcp_stream_ssl_new_raw (service->session, service->url->host, STARTTLS_FLAGS);
} else {
+ if (service->url->port == 0)
+ serv = "imaps";
tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, SSL_PORT_FLAGS);
}
#else
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host, _("SSL unavailable"));
+ if (!try_starttls && service->url->port == 0)
+ serv = "imaps";
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+ _("Could not connect to %s (port %s): %s"),
+ service->url->host, serv,
+ _("SSL unavailable"));
return FALSE;
#endif /* HAVE_SSL */
} else {
tcp_stream = camel_tcp_stream_raw_new ();
}
+
+ hints.ai_socktype = SOCK_STREAM;
+ ai = camel_getaddrinfo(service->url->host, serv, &hints, ex);
+ if (ai == NULL) {
+ camel_object_unref(tcp_stream);
+ return FALSE;
+ }
- if ((ret = camel_tcp_stream_connect ((CamelTcpStream *) tcp_stream, ai)) == -1) {
+ ret = camel_tcp_stream_connect(CAMEL_TCP_STREAM(tcp_stream), ai);
+ camel_freeaddrinfo(ai);
+ if (ret == -1) {
if (errno == EINTR)
camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
_("Connection cancelled"));
else
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host,
- g_strerror (errno));
+ _("Could not connect to %s (port %s): %s"),
+ service->url->host, serv, g_strerror (errno));
camel_object_unref (tcp_stream);
@@ -643,18 +669,32 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
store->server_level = IMAP_LEVEL_IMAP4;
}
- if (ssl_mode != MODE_TLS) {
- /* we're done */
- return TRUE;
+#ifdef HAVE_SSL
+ if (ssl_mode == USE_SSL_WHEN_POSSIBLE) {
+ if (store->capabilities & IMAP_CAPABILITY_STARTTLS)
+ goto starttls;
+ } else if (ssl_mode == USE_SSL_ALWAYS) {
+ if (try_starttls) {
+ if (store->capabilities & IMAP_CAPABILITY_STARTTLS) {
+ /* attempt to toggle STARTTLS mode */
+ goto starttls;
+ } else {
+ /* server doesn't support STARTTLS, abort */
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+ _("Failed to connect to IMAP server %s in secure mode: %s"),
+ service->url->host, _("SSL/TLS extension not supported."));
+ /* we have the possibility of quitting cleanly here */
+ clean_quit = TRUE;
+ goto exception;
+ }
+ }
}
+#endif /* HAVE_SSL */
- if (!(store->capabilities & IMAP_CAPABILITY_STARTTLS)) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
- _("Failed to connect to IMAP server %s in secure mode: %s"),
- service->url->host, _("STARTTLS not supported"));
-
- goto exception;
- }
+ return TRUE;
+
+#ifdef HAVE_SSL
+ starttls:
/* as soon as we send a STARTTLS command, all hope is lost of a clean QUIT if problems arise */
clean_quit = FALSE;
@@ -719,6 +759,7 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
store->connected = FALSE;
return FALSE;
+#endif /* HAVE_SSL */
}
static gboolean
@@ -866,54 +907,60 @@ connect_to_server_process (CamelService *service, const char *cmd, CamelExceptio
static struct {
char *value;
- char *serv;
int mode;
} ssl_options[] = {
- { "", "imaps", MODE_SSL }, /* really old (1.x) */
- { "always", "imaps", MODE_SSL },
- { "when-possible", "imap", MODE_TLS },
- { "never", "imap", MODE_CLEAR },
- { NULL, "imap", MODE_CLEAR },
+ { "", USE_SSL_ALWAYS },
+ { "always", USE_SSL_ALWAYS },
+ { "when-possible", USE_SSL_WHEN_POSSIBLE },
+ { "never", USE_SSL_NEVER },
+ { NULL, USE_SSL_NEVER },
};
static gboolean
connect_to_server_wrapper (CamelService *service, CamelException *ex)
{
- const char *command, *ssl_mode;
- struct addrinfo hints, *ai;
- int mode, ret, i;
- char *serv;
-
- if ((command = camel_url_get_param (service->url, "command")))
+ const char *command;
+#ifdef HAVE_SSL
+ const char *use_ssl;
+ int i, ssl_mode;
+#endif
+ command = camel_url_get_param (service->url, "command");
+ if (command)
return connect_to_server_process (service, command, ex);
-
- if ((ssl_mode = camel_url_get_param (service->url, "use_ssl"))) {
+
+#ifdef HAVE_SSL
+ use_ssl = camel_url_get_param (service->url, "use_ssl");
+ if (use_ssl) {
for (i = 0; ssl_options[i].value; i++)
- if (!strcmp (ssl_options[i].value, ssl_mode))
+ if (!strcmp (ssl_options[i].value, use_ssl))
break;
- mode = ssl_options[i].mode;
- serv = ssl_options[i].serv;
+ ssl_mode = ssl_options[i].mode;
+ } else
+ ssl_mode = USE_SSL_NEVER;
+
+ if (ssl_mode == USE_SSL_ALWAYS) {
+ /* First try the ssl port */
+ if (!connect_to_server (service, ssl_mode, FALSE, ex)) {
+ if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_UNAVAILABLE) {
+ /* The ssl port seems to be unavailable, lets try STARTTLS */
+ camel_exception_clear (ex);
+ return connect_to_server (service, ssl_mode, TRUE, ex);
+ } else {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ } else if (ssl_mode == USE_SSL_WHEN_POSSIBLE) {
+ /* If the server supports STARTTLS, use it */
+ return connect_to_server (service, ssl_mode, TRUE, ex);
} else {
- mode = MODE_CLEAR;
- serv = "imap";
+ /* User doesn't care about SSL */
+ return connect_to_server (service, ssl_mode, FALSE, ex);
}
-
- if (service->url->port) {
- serv = g_alloca (16);
- sprintf (serv, "%d", service->url->port);
- }
-
- memset (&hints, 0, sizeof (hints));
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_family = PF_UNSPEC;
- if (!(ai = camel_getaddrinfo (service->url->host, serv, &hints, ex)))
- return FALSE;
-
- ret = connect_to_server (service, ai, mode, ex);
-
- camel_freeaddrinfo (ai);
-
- return ret;
+#else
+ return connect_to_server (service, USE_SSL_NEVER, FALSE, ex);
+#endif
}
extern CamelServiceAuthType camel_imap_password_authtype;
diff --git a/camel/providers/imapp/camel-imapp-store.c b/camel/providers/imapp/camel-imapp-store.c
index 00ba0d00ce..2176c91cc6 100644
--- a/camel/providers/imapp/camel-imapp-store.c
+++ b/camel/providers/imapp/camel-imapp-store.c
@@ -48,7 +48,6 @@
#ifdef HAVE_SSL
#include "camel/camel-tcp-stream-ssl.h"
#endif
-#include "camel/camel-i18n.h"
#include "camel-imapp-store-summary.h"
#include "camel-imapp-store.h"
diff --git a/camel/providers/local/camel-local-folder.c b/camel/providers/local/camel-local-folder.c
index 70673d9687..b86d23221a 100644
--- a/camel/providers/local/camel-local-folder.c
+++ b/camel/providers/local/camel-local-folder.c
@@ -20,6 +20,7 @@
*
*/
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -47,7 +48,6 @@
#include "camel-stream-filter.h"
#include "camel-mime-filter-from.h"
#include "camel-exception.h"
-#include "camel-i18n.h"
#include "camel-local-private.h"
diff --git a/camel/providers/local/camel-maildir-folder.c b/camel/providers/local/camel-maildir-folder.c
index 669e636527..ba42b75f28 100644
--- a/camel/providers/local/camel-maildir-folder.c
+++ b/camel/providers/local/camel-maildir-folder.c
@@ -39,7 +39,6 @@
#include "camel-data-wrapper.h"
#include "camel-mime-message.h"
#include "camel-exception.h"
-#include "camel-i18n.h"
#define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
diff --git a/camel/providers/local/camel-mbox-folder.c b/camel/providers/local/camel-mbox-folder.c
index b4926b9b04..fa8f0b645d 100644
--- a/camel/providers/local/camel-mbox-folder.c
+++ b/camel/providers/local/camel-mbox-folder.c
@@ -42,7 +42,6 @@
#include "camel-stream-filter.h"
#include "camel-mime-filter-from.h"
#include "camel-exception.h"
-#include "camel-i18n.h"
#define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
diff --git a/camel/providers/local/camel-mbox-store.c b/camel/providers/local/camel-mbox-store.c
index f98c87a8ea..1277407dbb 100644
--- a/camel/providers/local/camel-mbox-store.c
+++ b/camel/providers/local/camel-mbox-store.c
@@ -37,7 +37,6 @@
#include "camel-text-index.h"
#include "camel-exception.h"
#include "camel-url.h"
-#include "camel-i18n.h"
#define d(x)
diff --git a/camel/providers/local/camel-mh-folder.c b/camel/providers/local/camel-mh-folder.c
index fd054933c5..78456b6daf 100644
--- a/camel/providers/local/camel-mh-folder.c
+++ b/camel/providers/local/camel-mh-folder.c
@@ -39,7 +39,6 @@
#include "camel-data-wrapper.h"
#include "camel-mime-message.h"
#include "camel-exception.h"
-#include "camel-i18n.h"
#define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
diff --git a/camel/providers/local/camel-spool-folder.c b/camel/providers/local/camel-spool-folder.c
index b9cb643189..6a1bbf798a 100644
--- a/camel/providers/local/camel-spool-folder.c
+++ b/camel/providers/local/camel-spool-folder.c
@@ -44,8 +44,8 @@
#include "camel-session.h"
#include "camel-file-utils.h"
#include "camel-lock-client.h"
+
#include "camel-local-private.h"
-#include "camel-i18n.h"
#define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
diff --git a/camel/providers/local/camel-spool-store.c b/camel/providers/local/camel-spool-store.c
index 3dc21886c8..2e3d9ea777 100644
--- a/camel/providers/local/camel-spool-store.c
+++ b/camel/providers/local/camel-spool-store.c
@@ -41,7 +41,6 @@
#include "camel-exception.h"
#include "camel-url.h"
#include "camel-private.h"
-#include "camel-i18n.h"
#define d(x)
diff --git a/camel/providers/nntp/camel-nntp-folder.c b/camel/providers/nntp/camel-nntp-folder.c
index 7f06555b43..ffb1b29742 100644
--- a/camel/providers/nntp/camel-nntp-folder.c
+++ b/camel/providers/nntp/camel-nntp-folder.c
@@ -49,7 +49,6 @@
#include "camel/camel-multipart.h"
#include "camel/camel-mime-part.h"
#include "camel/camel-stream-buffer.h"
-#include "camel/camel-i18n.h"
#include "camel/camel-private.h"
#include "camel-nntp-summary.h"
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index 1d4f43cc52..5813a965ff 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -52,7 +52,6 @@
#include "camel-nntp-folder.h"
#include "camel-nntp-private.h"
#include "camel-nntp-resp-codes.h"
-#include "camel-i18n.h"
#define w(x)
extern int camel_verbose_debug;
@@ -82,6 +81,12 @@ nntp_can_work_offline(CamelDiscoStore *store)
return TRUE;
}
+enum {
+ USE_SSL_NEVER,
+ USE_SSL_ALWAYS,
+ USE_SSL_WHEN_POSSIBLE
+};
+
static struct {
const char *name;
int type;
@@ -148,17 +153,8 @@ xover_setup(CamelNNTPStore *store, CamelException *ex)
return ret;
}
-enum {
- MODE_CLEAR,
- MODE_SSL,
- MODE_TLS,
-};
-
-#define SSL_PORT_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_SSL2 | CAMEL_TCP_STREAM_SSL_ENABLE_SSL3)
-#define STARTTLS_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_TLS)
-
static gboolean
-connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, CamelException *ex)
+connect_to_server (CamelService *service, int ssl_mode, CamelException *ex)
{
CamelNNTPStore *store = (CamelNNTPStore *) service;
CamelDiscoStore *disco_store = (CamelDiscoStore*) service;
@@ -168,6 +164,8 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
unsigned int len;
int ret;
char *path;
+ struct addrinfo *ai, hints = { 0 };
+ char *serv;
CAMEL_SERVICE_LOCK(store, connect_lock);
@@ -184,34 +182,42 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
camel_data_cache_set_expire_age (store->cache, 60*60*24*14);
camel_data_cache_set_expire_access (store->cache, 60*60*24*5);
}
+
+ if (service->url->port) {
+ serv = g_alloca(16);
+ sprintf(serv, "%d", service->url->port);
+ } else
+ serv = "nntp";
- if (ssl_mode != MODE_CLEAR) {
#ifdef HAVE_SSL
- if (ssl_mode == MODE_TLS) {
- tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, STARTTLS_FLAGS);
- } else {
- tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, SSL_PORT_FLAGS);
- }
-#else
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host, _("SSL unavailable"));
-
- goto fail;
-#endif /* HAVE_SSL */
+ if (ssl_mode != USE_SSL_NEVER) {
+ if (service->url->port == 0)
+ serv = "nntps";
+ tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, CAMEL_TCP_STREAM_SSL_ENABLE_SSL2 | CAMEL_TCP_STREAM_SSL_ENABLE_SSL3);
} else {
tcp_stream = camel_tcp_stream_raw_new ();
}
+#else
+ tcp_stream = camel_tcp_stream_raw_new ();
+#endif /* HAVE_SSL */
+
+ hints.ai_socktype = SOCK_STREAM;
+ ai = camel_getaddrinfo(service->url->host, serv, &hints, ex);
+ if (ai == NULL) {
+ camel_object_unref(tcp_stream);
+ goto fail;
+ }
- if ((ret = camel_tcp_stream_connect ((CamelTcpStream *) tcp_stream, ai)) == -1) {
+ ret = camel_tcp_stream_connect(CAMEL_TCP_STREAM(tcp_stream), ai);
+ camel_freeaddrinfo(ai);
+ if (ret == -1) {
if (errno == EINTR)
camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
_("Connection cancelled"));
else
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host,
- g_strerror (errno));
+ _("Could not connect to %s (port %s): %s"),
+ service->url->host, serv, g_strerror (errno));
camel_object_unref (tcp_stream);
@@ -273,51 +279,54 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
static struct {
char *value;
- char *serv;
int mode;
} ssl_options[] = {
- { "", "nntps", MODE_SSL }, /* really old (1.x) */
- { "always", "nntps", MODE_SSL },
- { "when-possible", "nntp", MODE_TLS },
- { "never", "nntp", MODE_CLEAR },
- { NULL, "nntp", MODE_CLEAR },
+ { "", USE_SSL_ALWAYS },
+ { "always", USE_SSL_ALWAYS },
+ { "when-possible", USE_SSL_WHEN_POSSIBLE },
+ { "never", USE_SSL_NEVER },
+ { NULL, USE_SSL_NEVER },
};
static gboolean
nntp_connect_online (CamelService *service, CamelException *ex)
{
- struct addrinfo hints, *ai;
- const char *ssl_mode;
- int mode, ret, i;
- char *serv;
+#ifdef HAVE_SSL
+ const char *use_ssl;
+ int i, ssl_mode;
- if ((ssl_mode = camel_url_get_param (service->url, "use_ssl"))) {
+ use_ssl = camel_url_get_param (service->url, "use_ssl");
+ if (use_ssl) {
for (i = 0; ssl_options[i].value; i++)
- if (!strcmp (ssl_options[i].value, ssl_mode))
+ if (!strcmp (ssl_options[i].value, use_ssl))
break;
- mode = ssl_options[i].mode;
- serv = ssl_options[i].serv;
+ ssl_mode = ssl_options[i].mode;
+ } else
+ ssl_mode = USE_SSL_NEVER;
+
+ if (ssl_mode == USE_SSL_ALWAYS) {
+ /* Connect via SSL */
+ return connect_to_server (service, ssl_mode, ex);
+ } else if (ssl_mode == USE_SSL_WHEN_POSSIBLE) {
+ /* If the server supports SSL, use it */
+ if (!connect_to_server (service, ssl_mode, ex)) {
+ if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_UNAVAILABLE) {
+ /* The ssl port seems to be unavailable, fall back to plain NNTP */
+ camel_exception_clear (ex);
+ return connect_to_server (service, USE_SSL_NEVER, ex);
+ } else {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
} else {
- mode = MODE_CLEAR;
- serv = "nntp";
- }
-
- if (service->url->port) {
- serv = g_alloca (16);
- sprintf (serv, "%d", service->url->port);
+ /* User doesn't care about SSL */
+ return connect_to_server (service, ssl_mode, ex);
}
-
- memset (&hints, 0, sizeof (hints));
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_family = PF_UNSPEC;
- if (!(ai = camel_getaddrinfo (service->url->host, serv, &hints, ex)))
- return FALSE;
-
- ret = connect_to_server (service, ai, mode, ex);
-
- camel_freeaddrinfo (ai);
-
- return ret;
+#else
+ return connect_to_server (service, USE_SSL_NEVER, ex);
+#endif
}
static gboolean
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index 1c7b9d025d..52d3d1a831 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -54,7 +54,6 @@
#ifdef HAVE_SSL
#include "camel-tcp-stream-ssl.h"
#endif
-#include "camel-i18n.h"
/* Specified in RFC 1939 */
#define POP3_PORT 110
@@ -135,16 +134,16 @@ finalize (CamelObject *object)
}
enum {
- MODE_CLEAR,
- MODE_SSL,
- MODE_TLS,
+ USE_SSL_NEVER,
+ USE_SSL_ALWAYS,
+ USE_SSL_WHEN_POSSIBLE
};
#define SSL_PORT_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_SSL2 | CAMEL_TCP_STREAM_SSL_ENABLE_SSL3)
#define STARTTLS_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_TLS)
static gboolean
-connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, CamelException *ex)
+connect_to_server (CamelService *service, int ssl_mode, int try_starttls, CamelException *ex)
{
CamelPOP3Store *store = CAMEL_POP3_STORE (service);
CamelStream *tcp_stream;
@@ -152,34 +151,56 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
guint32 flags = 0;
int clean_quit;
int ret;
-
- if (ssl_mode != MODE_CLEAR) {
+ struct addrinfo *ai, hints = { 0 };
+ char *serv;
+
+ if (service->url->port) {
+ serv = g_alloca(16);
+ sprintf(serv, "%d", service->url->port);
+ } else
+ serv = "pop3";
+
+ if (ssl_mode != USE_SSL_NEVER) {
#ifdef HAVE_SSL
- if (ssl_mode == MODE_TLS) {
- tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, STARTTLS_FLAGS);
+ if (try_starttls) {
+ tcp_stream = camel_tcp_stream_ssl_new_raw (service->session, service->url->host, STARTTLS_FLAGS);
} else {
+ if (service->url->port == 0)
+ serv = "pop3s";
tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, SSL_PORT_FLAGS);
}
#else
+ if (!try_starttls && service->url->port == 0)
+ serv = "pop3s";
+
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host, _("SSL unavailable"));
+ _("Could not connect to %s (port %s): %s"),
+ service->url->host, serv,
+ _("SSL unavailable"));
return FALSE;
#endif /* HAVE_SSL */
} else {
tcp_stream = camel_tcp_stream_raw_new ();
}
+
+ hints.ai_socktype = SOCK_STREAM;
+ ai = camel_getaddrinfo(service->url->host, serv, &hints, ex);
+ if (ai == NULL) {
+ camel_object_unref(tcp_stream);
+ return FALSE;
+ }
- if ((ret = camel_tcp_stream_connect ((CamelTcpStream *) tcp_stream, ai)) == -1) {
+ ret = camel_tcp_stream_connect(CAMEL_TCP_STREAM(tcp_stream), ai);
+ camel_freeaddrinfo(ai);
+ if (ret == -1) {
if (errno == EINTR)
camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
_("Connection cancelled"));
else
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host,
- g_strerror (errno));
+ _("Could not connect to POP server %s (port %s): %s"),
+ service->url->host, serv, g_strerror (errno));
camel_object_unref (tcp_stream);
@@ -197,24 +218,41 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
if (!(store->engine = camel_pop3_engine_new (tcp_stream, flags))) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
- _("Failed to read a valid greeting from POP server %s"),
- service->url->host);
-
+ _("Failed to read a valid greeting from POP server %s (port %s)"),
+ service->url->host, serv);
return FALSE;
}
- if (ssl_mode != MODE_TLS) {
- camel_object_unref (tcp_stream);
- return TRUE;
+#ifdef HAVE_SSL
+ if (store->engine) {
+ if (ssl_mode == USE_SSL_WHEN_POSSIBLE) {
+ if (store->engine->capa & CAMEL_POP3_CAP_STLS)
+ goto starttls;
+ } else if (ssl_mode == USE_SSL_ALWAYS) {
+ if (try_starttls) {
+ if (store->engine->capa & CAMEL_POP3_CAP_STLS) {
+ /* attempt to toggle STARTTLS mode */
+ goto starttls;
+ } else {
+ /* server doesn't support STARTTLS, abort */
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+ _("Failed to connect to POP server %s in secure mode: %s"),
+ service->url->host, _("SSL/TLS extension not supported."));
+ /* we have the possibility of quitting cleanly here */
+ clean_quit = TRUE;
+ goto stls_exception;
+ }
+ }
+ }
}
+#endif /* HAVE_SSL */
- if (!(store->engine->capa & CAMEL_POP3_CAP_STLS)) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
- _("Failed to connect to POP server %s in secure mode: %s"),
- service->url->host, _("STLS not supported"));
- goto stls_exception;
- }
+ camel_object_unref (tcp_stream);
+
+ return store->engine != NULL;
+#ifdef HAVE_SSL
+ starttls:
/* as soon as we send a STLS command, all hope is lost of a clean QUIT if problems arise */
clean_quit = FALSE;
@@ -264,55 +302,59 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
store->engine = NULL;
return FALSE;
+#endif /* HAVE_SSL */
}
static struct {
char *value;
- char *serv;
int mode;
} ssl_options[] = {
- { "", "pop3s", MODE_SSL }, /* really old (1.x) */
- { "always", "pop3s", MODE_SSL },
- { "when-possible", "pop3", MODE_TLS },
- { "never", "pop3", MODE_CLEAR },
- { NULL, "pop3", MODE_CLEAR },
+ { "", USE_SSL_ALWAYS },
+ { "always", USE_SSL_ALWAYS },
+ { "when-possible", USE_SSL_WHEN_POSSIBLE },
+ { "never", USE_SSL_NEVER },
+ { NULL, USE_SSL_NEVER },
};
static gboolean
connect_to_server_wrapper (CamelService *service, CamelException *ex)
{
- struct addrinfo hints, *ai;
- const char *ssl_mode;
- int mode, ret, i;
- char *serv;
+#ifdef HAVE_SSL
+ const char *use_ssl;
+ int i, ssl_mode;
- if ((ssl_mode = camel_url_get_param (service->url, "use_ssl"))) {
+ use_ssl = camel_url_get_param (service->url, "use_ssl");
+ if (use_ssl) {
for (i = 0; ssl_options[i].value; i++)
- if (!strcmp (ssl_options[i].value, ssl_mode))
+ if (!strcmp (ssl_options[i].value, use_ssl))
break;
- mode = ssl_options[i].mode;
- serv = ssl_options[i].serv;
+ ssl_mode = ssl_options[i].mode;
+ } else
+ ssl_mode = USE_SSL_NEVER;
+
+ if (ssl_mode == USE_SSL_ALWAYS) {
+ /* First try the ssl port */
+ if (!connect_to_server (service, ssl_mode, FALSE, ex)) {
+ if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_UNAVAILABLE) {
+ /* The ssl port seems to be unavailable, lets try STARTTLS */
+ camel_exception_clear (ex);
+ return connect_to_server (service, ssl_mode, TRUE, ex);
+ } else {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ } else if (ssl_mode == USE_SSL_WHEN_POSSIBLE) {
+ /* If the server supports STARTTLS, use it */
+ return connect_to_server (service, ssl_mode, TRUE, ex);
} else {
- mode = MODE_CLEAR;
- serv = "pop3";
+ /* User doesn't care about SSL */
+ return connect_to_server (service, ssl_mode, FALSE, ex);
}
-
- if (service->url->port) {
- serv = g_alloca (16);
- sprintf (serv, "%d", service->url->port);
- }
-
- memset (&hints, 0, sizeof (hints));
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_family = PF_UNSPEC;
- if (!(ai = camel_getaddrinfo (service->url->host, serv, &hints, ex)))
- return FALSE;
-
- ret = connect_to_server (service, ai, mode, ex);
-
- camel_freeaddrinfo (ai);
-
- return ret;
+#else
+ return connect_to_server (service, USE_SSL_NEVER, FALSE, ex);
+#endif
}
extern CamelServiceAuthType camel_pop3_password_authtype;
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index a6e555badf..fc313ed4d2 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -55,7 +55,7 @@
#include "camel-session.h"
#include "camel-exception.h"
#include "camel-sasl.h"
-#include "camel-i18n.h"
+
extern int camel_verbose_debug;
#define d(x) (camel_verbose_debug ? (x) : 0)
@@ -145,7 +145,18 @@ smtp_construct (CamelService *service, CamelSession *session,
CamelProvider *provider, CamelURL *url,
CamelException *ex)
{
+ CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT (service);
+ const char *use_ssl;
+
CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
+
+ if ((use_ssl = camel_url_get_param (url, "use_ssl"))) {
+ /* Note: previous versions would use "" to toggle use_ssl to 'on' */
+ if (!*use_ssl || !strcmp (use_ssl, "always"))
+ smtp_transport->flags |= CAMEL_SMTP_TRANSPORT_USE_SSL_ALWAYS;
+ else if (!strcmp (use_ssl, "when-possible"))
+ smtp_transport->flags |= CAMEL_SMTP_TRANSPORT_USE_SSL_WHEN_POSSIBLE;
+ }
}
static const char *
@@ -217,56 +228,70 @@ smtp_error_string (int error)
}
}
-enum {
- MODE_CLEAR,
- MODE_SSL,
- MODE_TLS,
-};
-
#define SSL_PORT_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_SSL2 | CAMEL_TCP_STREAM_SSL_ENABLE_SSL3)
#define STARTTLS_FLAGS (CAMEL_TCP_STREAM_SSL_ENABLE_TLS)
static gboolean
-connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, CamelException *ex)
+connect_to_server (CamelService *service, int try_starttls, CamelException *ex)
{
CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
CamelStream *tcp_stream;
char *respbuf = NULL;
int ret;
+ struct addrinfo *ai, hints = { 0 };
+ char *serv;
if (!CAMEL_SERVICE_CLASS (parent_class)->connect (service, ex))
return FALSE;
/* set some smtp transport defaults */
- transport->flags = 0;
+ transport->flags &= CAMEL_SMTP_TRANSPORT_USE_SSL; /* reset all but ssl flags */
transport->authtypes = NULL;
+
+ if (service->url->port) {
+ serv = g_alloca(16);
+ sprintf(serv, "%d", service->url->port);
+ } else
+ serv = "smtp";
- if (ssl_mode != MODE_CLEAR) {
+ if (transport->flags & CAMEL_SMTP_TRANSPORT_USE_SSL) {
#ifdef HAVE_SSL
- if (ssl_mode == MODE_TLS) {
- tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, STARTTLS_FLAGS);
+ if (try_starttls) {
+ tcp_stream = camel_tcp_stream_ssl_new_raw (service->session, service->url->host, STARTTLS_FLAGS);
} else {
+ if (service->url->port == 0)
+ serv = "smtps";
tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, SSL_PORT_FLAGS);
}
#else
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host, _("SSL unavailable"));
+ if (!try_starttls && service->url->port == 0)
+ serv = "smtps";
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+ _("Could not connect to %s (port %s): %s"),
+ service->url->host, serv,
+ _("SSL unavailable"));
+
return FALSE;
#endif /* HAVE_SSL */
} else {
tcp_stream = camel_tcp_stream_raw_new ();
}
+
+ hints.ai_socktype = SOCK_STREAM;
+ ai = camel_getaddrinfo(service->url->host, serv, &hints, ex);
+ if (ai == NULL) {
+ camel_object_unref(tcp_stream);
+ return FALSE;
+ }
- if ((ret = camel_tcp_stream_connect ((CamelTcpStream *) tcp_stream, ai)) == -1) {
- if (errno == EINTR)
- camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
- _("Connection cancelled"));
- else
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("Could not connect to %s: %s"),
- service->url->host, g_strerror (errno));
+ ret = camel_tcp_stream_connect(CAMEL_TCP_STREAM(tcp_stream), ai);
+ camel_freeaddrinfo(ai);
+ if (ret == -1) {
+ camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+ _("Could not connect to %s (port %s): %s"),
+ service->url->host, serv,
+ g_strerror (errno));
camel_object_unref (tcp_stream);
@@ -310,19 +335,30 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
/* clear any EHLO/HELO exception and assume that any SMTP errors encountered were non-fatal */
camel_exception_clear (ex);
- if (ssl_mode != MODE_TLS) {
- /* we're done */
- return TRUE;
+#ifdef HAVE_SSL
+ if (transport->flags & CAMEL_SMTP_TRANSPORT_USE_SSL_WHEN_POSSIBLE) {
+ /* try_starttls is always TRUE here */
+ if (transport->flags & CAMEL_SMTP_TRANSPORT_STARTTLS)
+ goto starttls;
+ } else if (transport->flags & CAMEL_SMTP_TRANSPORT_USE_SSL_ALWAYS) {
+ if (try_starttls) {
+ if (transport->flags & CAMEL_SMTP_TRANSPORT_STARTTLS) {
+ goto starttls;
+ } else {
+ /* server doesn't support STARTTLS, abort */
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+ _("Failed to connect to SMTP server %s in secure mode: %s"),
+ service->url->host, _("server does not appear to support SSL"));
+ goto exception_cleanup;
+ }
+ }
}
+#endif /* HAVE_SSL */
- if (!(transport->flags & CAMEL_SMTP_TRANSPORT_STARTTLS)) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
- _("Failed to connect to SMTP server %s in secure mode: %s"),
- service->url->host, _("STARTTLS not supported"));
-
- goto exception_cleanup;
- }
+ return TRUE;
+#ifdef HAVE_SSL
+ starttls:
d(fprintf (stderr, "sending : STARTTLS\r\n"));
if (camel_stream_write (tcp_stream, "STARTTLS\r\n", 10) == -1) {
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
@@ -372,55 +408,38 @@ connect_to_server (CamelService *service, struct addrinfo *ai, int ssl_mode, Cam
transport->connected = FALSE;
return FALSE;
+#endif /* HAVE_SSL */
}
-static struct {
- char *value;
- char *serv;
- int mode;
-} ssl_options[] = {
- { "", "smtps", MODE_SSL }, /* really old (1.x) */
- { "always", "smtps", MODE_SSL },
- { "when-possible", "smtp", MODE_TLS },
- { "never", "smtp", MODE_CLEAR },
- { NULL, "smtp", MODE_CLEAR },
-};
-
static gboolean
connect_to_server_wrapper (CamelService *service, CamelException *ex)
{
- struct addrinfo hints, *ai;
- const char *ssl_mode;
- int mode, ret, i;
- char *serv;
+#ifdef HAVE_SSL
+ CamelSmtpTransport *transport = (CamelSmtpTransport *) service;
- if ((ssl_mode = camel_url_get_param (service->url, "use_ssl"))) {
- for (i = 0; ssl_options[i].value; i++)
- if (!strcmp (ssl_options[i].value, ssl_mode))
- break;
- mode = ssl_options[i].mode;
- serv = ssl_options[i].serv;
+ if (transport->flags & CAMEL_SMTP_TRANSPORT_USE_SSL_ALWAYS) {
+ /* First try connecting to the SSL port */
+ if (!connect_to_server (service, FALSE, ex)) {
+ if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_UNAVAILABLE) {
+ /* Seems the SSL port is unavailable, lets try STARTTLS */
+ camel_exception_clear (ex);
+ return connect_to_server (service, TRUE, ex);
+ } else {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ } else if (transport->flags & CAMEL_SMTP_TRANSPORT_USE_SSL_WHEN_POSSIBLE) {
+ /* If the server supports STARTTLS, use it */
+ return connect_to_server (service, TRUE, ex);
} else {
- mode = MODE_CLEAR;
- serv = "smtp";
+ /* User doesn't care about SSL */
+ return connect_to_server (service, FALSE, ex);
}
-
- if (service->url->port) {
- serv = g_alloca (16);
- sprintf (serv, "%d", service->url->port);
- }
-
- memset (&hints, 0, sizeof (hints));
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_family = PF_UNSPEC;
- if (!(ai = camel_getaddrinfo (service->url->host, serv, &hints, ex)))
- return FALSE;
-
- ret = connect_to_server (service, ai, mode, ex);
-
- camel_freeaddrinfo (ai);
-
- return ret;
+#else
+ return connect_to_server (service, FALSE, ex);
+#endif
}
static gboolean
diff --git a/camel/providers/smtp/camel-smtp-transport.h b/camel/providers/smtp/camel-smtp-transport.h
index 7b5ad88f12..87fcafb58b 100644
--- a/camel/providers/smtp/camel-smtp-transport.h
+++ b/camel/providers/smtp/camel-smtp-transport.h
@@ -43,7 +43,13 @@ extern "C" {
#define CAMEL_SMTP_TRANSPORT_ENHANCEDSTATUSCODES (1 << 2)
#define CAMEL_SMTP_TRANSPORT_STARTTLS (1 << 3)
-#define CAMEL_SMTP_TRANSPORT_AUTH_EQUAL (1 << 4) /* set if we are using authtypes from a broken AUTH= */
+#define CAMEL_SMTP_TRANSPORT_USE_SSL_ALWAYS (1 << 4)
+#define CAMEL_SMTP_TRANSPORT_USE_SSL_WHEN_POSSIBLE (1 << 5)
+
+#define CAMEL_SMTP_TRANSPORT_USE_SSL (CAMEL_SMTP_TRANSPORT_USE_SSL_ALWAYS | \
+ CAMEL_SMTP_TRANSPORT_USE_SSL_WHEN_POSSIBLE)
+
+#define CAMEL_SMTP_TRANSPORT_AUTH_EQUAL (1 << 6) /* set if we are using authtypes from a broken AUTH= */
typedef struct {
CamelTransport parent_object;
diff --git a/camel/tests/data/messages/.cvsignore b/camel/tests/data/messages/.cvsignore
deleted file mode 100644
index e358dd1903..0000000000
--- a/camel/tests/data/messages/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.msg
diff --git a/composer/ChangeLog b/composer/ChangeLog
index a09bbbb640..8f45bf86a8 100644
--- a/composer/ChangeLog
+++ b/composer/ChangeLog
@@ -4,31 +4,10 @@
into the recipients list or else we end up free'ing them later
when we shouldn't. Fixes bug #66703
-2004-10-06 Not Zed <NotZed@Ximian.com>
+2004-10-08 JP Rosevear <jpr@novell.com>
- * e-msg-composer.c (drag_data_received):
- * e-msg-composer-attachment-bar.c (emcab_popup): e-popup api changes.
-
-2004-10-01 JP Rosevear <jpr@novell.com>
-
- * e-msg-composer.c: uses GTKHTML_API_VERSION for the bonobo server
- look up
-
-2004-10-01 Not Zed <NotZed@Ximian.com>
-
- * e-msg-composer.c (create_composer): enable ask drop action and
- hook onto drag motion.
- (drag_motion): implement.
- (drop_action): do the work here now.
- (drag_data_received): popup a menu if the action is ask.
- (drop_popup_copy, drop_popup_move, drop_popup_cancel):
- (drop_popup_free): Popup callbacks.
-
-2004-09-30 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-msg-composer.c: (autosave_manager_start),
- (autosave_manager_stop), (create_composer): Use non-deprecated
- functions.
+ * mail-composer-errors.xml: remove acceleratoer from _Save Message
+ to not break string freeze
2004-08-17 Michael Meeks <michael@ximian.com>
@@ -83,17 +62,6 @@
* e-msg-composer-attachment.c: include config.h. See #61395.
-2004-09-04 Not Zed <NotZed@Ximian.com>
-
- * e-msg-composer-*.c: include gnome-i18n.h if required.
-
-2004-08-30 Not Zed <NotZed@Ximian.com>
-
- * e-msg-composer-attachment-bar.c (emcab_popup): em-popup based
- popup menu to replace the gnome one.
- (popup_menu_event): use new func above.
- (button_press_event): ", some cleanup.
-
2004-06-18 Not Zed <NotZed@Ximian.com>
** Fix for #60387.
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 9d1dc1c347..5012637c67 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -70,7 +70,6 @@
#include <gconf/gconf-client.h>
#include <libgnome/gnome-exec.h>
-#include <libgnome/gnome-i18n.h>
#include <libgnomeui/gnome-uidefs.h>
#include <libgnomeui/gnome-window-icon.h>
@@ -117,7 +116,6 @@
#include "mail/mail-ops.h"
#include "mail/mail-mt.h"
#include "mail/mail-session.h"
-#include "mail/em-popup.h"
#include "e-msg-composer.h"
#include "e-msg-composer-attachment-bar.h"
@@ -130,7 +128,7 @@
#include "Editor.h"
#include "listener.h"
-#define GNOME_GTKHTML_EDITOR_CONTROL_ID "OAFIID:GNOME_GtkHTML_Editor:" GTKHTML_API_VERSION
+#define GNOME_GTKHTML_EDITOR_CONTROL_ID "OAFIID:GNOME_GtkHTML_Editor:3.1"
#define d(x) x
@@ -162,19 +160,6 @@ static GtkTargetEntry drop_types[] = {
#define num_drop_types (sizeof (drop_types) / sizeof (drop_types[0]))
-static struct {
- char *target;
- GdkAtom atom;
- guint32 actions;
-} drag_info[] = {
- { "message/rfc822", 0, GDK_ACTION_COPY },
- { "x-uid-list", 0, GDK_ACTION_ASK|GDK_ACTION_MOVE|GDK_ACTION_COPY },
- { "text/uri-list", 0, GDK_ACTION_COPY },
- { "_NETSCAPE_URL", 0, GDK_ACTION_COPY },
- { "text/x-vcard", 0, GDK_ACTION_COPY },
- { "text/calendar", 0, GDK_ACTION_COPY },
-};
-
static const char *emc_draft_format_names[] = { "pgp-sign", "pgp-encrypt", "smime-sign", "smime-encrypt" };
@@ -1458,14 +1443,14 @@ static void
autosave_manager_start (AutosaveManager *am)
{
if (am->id == 0)
- am->id = g_timeout_add (AUTOSAVE_INTERVAL, autosave_run, am);
+ am->id = gtk_timeout_add (AUTOSAVE_INTERVAL, autosave_run, am);
}
static void
autosave_manager_stop (AutosaveManager *am)
{
if (am->id) {
- g_source_remove (am->id);
+ gtk_timeout_remove (am->id);
am->id = 0;
}
}
@@ -2659,24 +2644,10 @@ attach_message(EMsgComposer *composer, CamelMimeMessage *msg)
camel_object_unref(mime_part);
}
-struct _drop_data {
- EMsgComposer *composer;
-
- GdkDragContext *context;
- /* Only selection->data and selection->length are valid */
- GtkSelectionData *selection;
-
- guint32 action;
- guint info;
- guint time;
-
- unsigned int move:1;
- unsigned int moved:1;
- unsigned int aborted:1;
-};
-
static void
-drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, GtkSelectionData *selection, guint info, guint time)
+drag_data_received (EMsgComposer *composer, GdkDragContext *context,
+ int x, int y, GtkSelectionData *selection,
+ guint info, guint time)
{
char *tmp, *str, **urls;
CamelMimePart *mime_part;
@@ -2684,8 +2655,8 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
CamelURL *url;
CamelMimeMessage *msg;
char *content_type;
- int i, success=FALSE, delete=FALSE;
-
+ int i;
+
switch (info) {
case DND_TYPE_MESSAGE_RFC822:
d(printf ("dropping a message/rfc822\n"));
@@ -2695,11 +2666,8 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
camel_stream_reset (stream);
msg = camel_mime_message_new ();
- if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)msg, stream) != -1) {
+ if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)msg, stream) != -1)
attach_message(composer, msg);
- success = TRUE;
- delete = action == GDK_ACTION_MOVE;
- }
camel_object_unref(msg);
camel_object_unref(stream);
@@ -2738,7 +2706,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
}
g_free (urls);
- success = TRUE;
break;
case DND_TYPE_TEXT_VCARD:
case DND_TYPE_TEXT_CALENDAR:
@@ -2756,7 +2723,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
camel_object_unref (mime_part);
g_free (content_type);
- success = TRUE;
break;
case DND_TYPE_X_UID_LIST: {
GPtrArray *uids;
@@ -2821,8 +2787,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
camel_object_unref(mime_part);
camel_object_unref(mp);
}
- success = TRUE;
- delete = action == GDK_ACTION_MOVE;
fail:
if (camel_exception_is_set(&ex)) {
char *name;
@@ -2848,117 +2812,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
d(printf ("dropping an unknown\n"));
break;
}
-
- printf("Drag finished, success %d delete %d\n", success, delete);
-
- gtk_drag_finish(context, success, delete, time);
-}
-
-static void
-drop_popup_copy(EPopup *ep, EPopupItem *item, void *data)
-{
- struct _drop_data *m = data;
- drop_action(m->composer, m->context, GDK_ACTION_COPY, m->selection, m->info, m->time);
-}
-
-static void
-drop_popup_move(EPopup *ep, EPopupItem *item, void *data)
-{
- struct _drop_data *m = data;
- drop_action(m->composer, m->context, GDK_ACTION_MOVE, m->selection, m->info, m->time);
-}
-
-static void
-drop_popup_cancel(EPopup *ep, EPopupItem *item, void *data)
-{
- struct _drop_data *m = data;
- gtk_drag_finish(m->context, FALSE, FALSE, m->time);
-}
-
-static EPopupItem drop_popup_menu[] = {
- { E_POPUP_ITEM, "00.emc.02", N_("_Copy"), drop_popup_copy, NULL, "stock_mail-copy", 0 },
- { E_POPUP_ITEM, "00.emc.03", N_("_Move"), drop_popup_move, NULL, "stock_mail-move", 0 },
- { E_POPUP_BAR, "10.emc" },
- { E_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), drop_popup_cancel, NULL, NULL, 0 },
-};
-
-static void
-drop_popup_free(EPopup *ep, GSList *items, void *data)
-{
- struct _drop_data *m = data;
-
- g_slist_free(items);
-
- g_object_unref(m->context);
- g_object_unref(m->composer);
- g_free(m->selection->data);
- g_free(m->selection);
- g_free(m);
-}
-
-static void
-drag_data_received (EMsgComposer *composer, GdkDragContext *context,
- int x, int y, GtkSelectionData *selection,
- guint info, guint time)
-{
- if (selection->data == NULL || selection->length == -1)
- return;
-
- if (context->action == GDK_ACTION_ASK) {
- EMPopup *emp;
- GSList *menus = NULL;
- GtkMenu *menu;
- int i;
- struct _drop_data *m;
-
- m = g_malloc0(sizeof(*m));
- m->context = context;
- g_object_ref(context);
- m->composer = composer;
- g_object_ref(composer);
- m->action = context->action;
- m->info = info;
- m->time = time;
- m->selection = g_malloc0(sizeof(*m->selection));
- m->selection->data = g_malloc(selection->length);
- memcpy(m->selection->data, selection->data, selection->length);
- m->selection->length = selection->length;
-
- emp = em_popup_new("com.ximian.mail.composer.popup.drop");
- for (i=0;i<sizeof(drop_popup_menu)/sizeof(drop_popup_menu[0]);i++)
- menus = g_slist_append(menus, &drop_popup_menu[i]);
-
- e_popup_add_items((EPopup *)emp, menus, drop_popup_free, m);
- menu = e_popup_create_menu_once((EPopup *)emp, NULL, 0);
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, 0, time);
- } else {
- drop_action(composer, context, context->action, selection, info, time);
- }
-}
-
-static gboolean
-drag_motion(GObject *o, GdkDragContext *context, gint x, gint y, guint time, EMsgComposer *composer)
-{
- GList *targets;
- GdkDragAction action, actions = 0;
-
- for (targets = context->targets; targets; targets = targets->next) {
- int i;
-
- for (i=0;i<sizeof(drag_info)/sizeof(drag_info[0]);i++)
- if (targets->data == (void *)drag_info[i].atom)
- actions |= drag_info[i].actions;
- }
-
- actions &= context->actions;
- action = context->suggested_action;
- /* we default to copy */
- if (action == GDK_ACTION_ASK && (actions & (GDK_ACTION_MOVE|GDK_ACTION_COPY)) != (GDK_ACTION_MOVE|GDK_ACTION_COPY))
- action = GDK_ACTION_COPY;
-
- gdk_drag_status(context, action, time);
-
- return action != 0;
}
static void
@@ -2967,10 +2820,6 @@ class_init (EMsgComposerClass *klass)
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GObjectClass *gobject_class;
- int i;
-
- for (i=0;i<sizeof(drag_info)/sizeof(drag_info[0]);i++)
- drag_info[i].atom = gdk_atom_intern(drag_info[i].target, FALSE);
gobject_class = G_OBJECT_CLASS(klass);
object_class = GTK_OBJECT_CLASS (klass);
@@ -3328,9 +3177,10 @@ create_composer (int visible_mask)
}
/* DND support */
- gtk_drag_dest_set (GTK_WIDGET (composer), GTK_DEST_DEFAULT_ALL, drop_types, num_drop_types, GDK_ACTION_COPY|GDK_ACTION_ASK|GDK_ACTION_MOVE);
- g_signal_connect(composer, "drag_data_received", G_CALLBACK (drag_data_received), NULL);
- g_signal_connect(composer, "drag-motion", G_CALLBACK(drag_motion), composer);
+ gtk_drag_dest_set (GTK_WIDGET (composer), GTK_DEST_DEFAULT_ALL,
+ drop_types, num_drop_types, GDK_ACTION_COPY);
+ g_signal_connect (composer, "drag_data_received",
+ G_CALLBACK (drag_data_received), NULL);
e_msg_composer_load_config (composer, visible_mask);
setup_ui (composer);
@@ -3429,7 +3279,7 @@ create_composer (int visible_mask)
composer->attachment_expander_icon = gtk_image_new_from_pixbuf (attachment_pixbuf);
gtk_misc_set_alignment (GTK_MISC (composer->attachment_expander_icon), 1, 0.5);
gtk_widget_set_size_request (composer->attachment_expander_icon, 100, -1);
- g_object_unref (attachment_pixbuf);
+ gdk_pixbuf_unref (attachment_pixbuf);
gtk_box_pack_start (GTK_BOX (expander_hbox), composer->attachment_expander_label,
TRUE, TRUE, 0);
diff --git a/composer/mail-composer-errors.xml b/composer/mail-composer-errors.xml
index 1a52225ca3..dc696a5f02 100644
--- a/composer/mail-composer-errors.xml
+++ b/composer/mail-composer-errors.xml
@@ -39,7 +39,7 @@
<secondary>Closing this composer window will discard the message permanently, unless you choose to save the message in your Drafts folder. This will allow you to continue the message at a later date.</secondary>
<button label="_Discard Changes" response="GTK_RESPONSE_NO"/>
<button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
- <button label="_Save Message" response="GTK_RESPONSE_YES"/>
+ <button label="Save Message" response="GTK_RESPONSE_YES"/>
</error>
<error id="no-build-message" type="error" modal="true">
diff --git a/composer/mail-composer-errors.xml.h b/composer/mail-composer-errors.xml.h
index 30f0005258..1f6668c58f 100644
--- a/composer/mail-composer-errors.xml.h
+++ b/composer/mail-composer-errors.xml.h
@@ -31,7 +31,7 @@ char *s = N_("Are you sure you want to discard the message, titled '{0}', you ar
/* mail-composer:exit-unsaved secondary */
char *s = N_("Closing this composer window will discard the message permanently, unless you choose to save the message in your Drafts folder. This will allow you to continue the message at a later date.");
char *s = N_("_Discard Changes");
-char *s = N_("_Save Message");
+char *s = N_("Save Message");
/* mail-composer:no-build-message primary */
char *s = N_("Could not create message.");
/* mail-composer:no-build-message secondary */
diff --git a/configure.in b/configure.in
index deb80a2d22..32d20d8846 100644
--- a/configure.in
+++ b/configure.in
@@ -1,7 +1,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.52)
-AC_INIT(evolution, 2.1.0, http://bugzilla.ximian.com/enter_bug.cgi?product=Evolution)
+AC_INIT(evolution, 2.0.2, http://bugzilla.ximian.com/enter_bug.cgi?product=Evolution)
AC_CONFIG_SRCDIR(README)
AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
@@ -16,38 +16,6 @@ ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
dnl Initialize maintainer mode
AM_MAINTAINER_MODE
-dnl *************************************************************************************************
-dnl Base Version
-dnl
-dnl This is for api/versioning tracking for things like bonobo .server files
-dnl
-dnl This should always be the major/minor of the stable version or stable version to be
-dnl *************************************************************************************************
-BASE_VERSION=2.2
-AC_SUBST(BASE_VERSION)
-AC_DEFINE_UNQUOTED(BASE_VERSION, "$BASE_VERSION", [Base version (Major.Minor)])
-
-dnl *************************************************************************************************
-dnl Updgrade Revision
-dnl
-dnl This is for triggering migration calls between varying versions.
-dnl
-dnl This should be reset to 0 whenever BASE_VERSION changes
-dnl *************************************************************************************************
-UPGRADE_REVISION=0
-AC_SUBST(UPGRADE_REVISION)
-AC_DEFINE_UNQUOTED(UPGRADE_REVISION, "$UPGRADE_REVISION", [The number of times we've upgraded since the BASE_VERSION release])
-
-dnl *************************************************************************************************
-dnl Development mode
-dnl
-dnl The controls whether things like the development warning in shell/main.c are displayed.
-dnl
-dnl This should be set to 0 for stable releases and 1 for unstable releases
-dnl *************************************************************************************************
-AC_DEFINE(DEVELOPMENT, 1, [If we are in development mode or not])
-AC_SUBST(DEVELOPMENT)
-
AC_ISC_POSIX
AC_PROG_CC
AC_PROG_CPP
@@ -78,10 +46,20 @@ AC_SUBST(HAVE_JW)
dnl I18N stuff
AC_PROG_INTLTOOL([0.30])
-ALL_LINGUAS="am ar az be bg bs ca cs da de el en_AU en_CA en_GB es et eu fa fi fr ga gl gu he hr hu is it ja ko lt lv mn ms nb nl nn no pa pl pt pt_BR ro ru sk sl sq sr sr@Latn sv tr uk vi wa zh_CN zh_TW"
+ALL_LINGUAS="am ar az be bg bn bs ca cs cy da de el en_AU en_CA en_GB es et eu fa fi fr ga gl gu he hi hr hu id is it ja ko lt lv mk ml mn ms nb nl nn no pa pl pt pt_BR ro ru sk sl sq sr sr@Latn sv ta tr uk vi wa zh_CN zh_TW"
AM_GLIB_GNU_GETTEXT
-GETTEXT_PACKAGE=evolution-2.2
+dnl The base version for OAFIIDs, install dirs, binary names
+BASE_VERSION=2.0
+AC_SUBST(BASE_VERSION)
+AC_DEFINE_UNQUOTED(BASE_VERSION, "$BASE_VERSION", [Base version (Major.Minor)])
+
+dnl Update/migration version
+UPGRADE_REVISION=0
+AC_SUBST(UPGRADE_REVISION)
+AC_DEFINE_UNQUOTED(UPGRADE_REVISION, "$UPGRADE_REVISION", [The number of times we've upgraded since the BASE_VERSION release])
+
+GETTEXT_PACKAGE=evolution-$BASE_VERSION
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Package name for gettext])
@@ -425,7 +403,7 @@ dnl **************************************************
dnl New IMAP code support.
dnl **************************************************
AC_ARG_ENABLE(imap4,
-[ --enable-imap4=[no/yes] Attempt to compile yet another, incomplete, very unsupported IMAPv4r1 implementation],,enable_imap4="yes")
+[ --enable-imap4=[no/yes] Attempt to compile yet another, incomplete, very unsupported IMAPv4r1 implementation],,enable_imap4=no)
if test "x$enable_imap4" = "xyes"; then
AC_DEFINE(ENABLE_IMAP4,1,[Really don't try this at home])
msg_imap4=yes
@@ -511,15 +489,11 @@ dnl *********
dnl Libraries
dnl *********
-PKG_CHECK_MODULES(GTKHTML, libgtkhtml-3.6)
+PKG_CHECK_MODULES(GTKHTML, libgtkhtml-3.1)
AC_SUBST(GTKHTML_CFLAGS)
AC_SUBST(GTKHTML_LIBS)
-GTKHTML_DATADIR=`$PKG_CONFIG --variable gtkhtml_datadir libgtkhtml-3.6`
+GTKHTML_DATADIR=`$PKG_CONFIG --variable gtkhtml_datadir libgtkhtml-3.1`
AC_SUBST(GTKHTML_DATADIR)
-GTKHTML_API_VERSION=`$PKG_CONFIG --variable gtkhtml_apiversion libgtkhtml-3.6`
-AC_DEFINE_UNQUOTED(GTKHTML_API_VERSION, "$GTKHTML_API_VERSION", [The gtkhtml api version])
-
-
dnl ******************************
@@ -687,16 +661,6 @@ AC_SUBST(KRB5_LDFLAGS)
AC_SUBST(KRB4_CFLAGS)
AC_SUBST(KRB4_LDFLAGS)
-dnl Mono hooks
-
-AC_ARG_ENABLE(mono, [ --enable-mono=[yes,no] Add Mono embedded hooks.],
- enable_mono="$enableval", enable_mono="no")
-
-if test "x${enable_mono}" = "xyes"; then
- AC_DEFINE(ENABLE_MONO,1,[Define if Mono embedding should be enabled])
- mono_package="mono"
-fi
-AM_CONDITIONAL(ENABLE_MONO, test x$enable_mono = xyes)
dnl ********************************************************************************
dnl security extension support (SSL and S/MIME)
@@ -1074,7 +1038,7 @@ esac
AM_PATH_ORBIT2(2.9.8)
AC_MSG_CHECKING(for CORBA include paths)
-IDL_INCLUDES="-I "`pkg-config --variable=idldir libbonobo-2.0`" -I "`pkg-config --variable=idldir bonobo-activation-2.0`" -I "`pkg-config --variable=idldir evolution-data-server-1.2`
+IDL_INCLUDES="-I "`pkg-config --variable=idldir libbonobo-2.0`" -I "`pkg-config --variable=idldir bonobo-activation-2.0`" -I "`pkg-config --variable=idldir evolution-data-server-1.0`
AC_MSG_RESULT($IDL_INCLUDES)
AC_SUBST(IDL_INCLUDES)
@@ -1098,25 +1062,19 @@ fi
dnl --- Required version numbers
-GAL_REQUIRED=2.3.0
-GAL_PACKAGE=2.4
-GTKHTML_REQUIRED=3.5.0
-GTKHTML_PACKAGE=3.6
-EDS_REQUIRED=1.1.0
-EDS_PACKAGE=1.2
+GAL_REQUIRED=2.2.3
+GTKHTML_REQUIRED=3.2.3
+EDS_REQUIRED=1.0.2
BONOBOUI_REQUIRED=2.4.2
AC_SUBST(GAL_REQUIRED)
-AC_SUBST(GAL_PACKAGE)
AC_SUBST(GTKHTML_REQUIRED)
-AC_SUBST(GTKHTML_PACKAGE)
AC_SUBST(EDS_REQUIRED)
-AC_SUBST(EDS_PACKAGE)
AC_SUBST(BONOBOUI_REQUIRED)
dnl --- Flags to get all the GNOME stuff
-FULL_GNOME_DEPS="glib-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gnome-vfs-2.0 libgnomeui-2.0 libglade-2.0 libgnomecanvas-2.0 libxml-2.0 gconf-2.0 gal-$GAL_PACKAGE >= $GAL_REQUIRED"
+FULL_GNOME_DEPS="glib-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gnome-vfs-2.0 libgnomeui-2.0 libglade-2.0 libgnomecanvas-2.0 libxml-2.0 gconf-2.0 gal-2.2 >= $GAL_REQUIRED"
EVO_SET_COMPILE_FLAGS(GNOME_FULL, $FULL_GNOME_DEPS)
AC_SUBST(GNOME_FULL_CFLAGS)
@@ -1130,13 +1088,13 @@ CPPFLAGS="$CPPFLAGS_save"
dnl --- Flags for the various libraries we build
-EVO_SET_COMPILE_FLAGS(CAMEL, glib-2.0 gthread-2.0 gal-2.4 >= $GAL_REQUIRED $mozilla_nss,
+EVO_SET_COMPILE_FLAGS(CAMEL, glib-2.0 gthread-2.0 gal-2.2 >= $GAL_REQUIRED $mozilla_nss,
$THREADS_CFLAGS $KRB4_CFLAGS $KRB5_CFLAGS $MANUAL_NSS_CFLAGS $OPENSSL_CFLAGS,
$THREADS_LIBS $KRB4_LDFLAGS $KRB5_LDFLAGS $MANUAL_NSS_LIBS $OPENSSL_LDFLAGS)
AC_SUBST(CAMEL_CFLAGS)
AC_SUBST(CAMEL_LIBS)
-EVO_SET_COMPILE_FLAGS(CAMEL_GROUPWISE, libegroupwise-$EDS_PACKAGE >= $EDS_REQUIRED,
+EVO_SET_COMPILE_FLAGS(CAMEL_GROUPWISE, libegroupwise-1.0 >= $EDS_REQUIRED,
$CAMEL_CFLAGS,
$CAMEL_LIBS)
AC_SUBST(CAMEL_GROUPWISE_CFLAGS)
@@ -1157,19 +1115,19 @@ EVO_SET_COMPILE_FLAGS(CERT_UI, glib-2.0 gobject-2.0 gthread-2.0,
AC_SUBST(CERT_UI_CFLAGS)
AC_SUBST(CERT_UI_LIBS)
-EVO_SET_COMPILE_FLAGS(E_NAME, libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gal-$GAL_PACKAGE >= $GAL_REQUIRED)
+EVO_SET_COMPILE_FLAGS(E_NAME, libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gal-2.2 >= $GAL_REQUIRED)
AC_SUBST(E_NAME_CFLAGS)
AC_SUBST(E_NAME_LIBS)
-EVO_SET_COMPILE_FLAGS(E_UTIL, gthread-2.0 gconf-2.0 libxml-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 gal-$GAL_PACKAGE >= $GAL_REQUIRED libgnomeui-2.0 libgnome-2.0 libgnomecanvas-2.0 libedataserver-$EDS_PACKAGE >= $EDS_REQUIRED $mozilla_nspr $mono_package, $THREADS_CFLAGS $MANUAL_NSPR_CFLAGS, $THREADS_LIBS $MANUAL_NSPR_LIBS)
+EVO_SET_COMPILE_FLAGS(E_UTIL, gthread-2.0 gconf-2.0 libxml-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 gal-2.2 >= $GAL_REQUIRED libgnomeui-2.0 libgnome-2.0 libgnomecanvas-2.0 libedataserver-1.0 >= $EDS_REQUIRED $mozilla_nspr, $THREADS_CFLAGS $MANUAL_NSPR_CFLAGS, $THREADS_LIBS $MANUAL_NSPR_LIBS)
AC_SUBST(E_UTIL_CFLAGS)
AC_SUBST(E_UTIL_LIBS)
-EVO_SET_COMPILE_FLAGS(TZDIALOG, libecal-$EDS_PACKAGE >= $EDS_REQUIRED, $GNOME_FULL_CFLAGS, $GNOME_FULL_LIBS)
+EVO_SET_COMPILE_FLAGS(TZDIALOG, libecal-1.0 >= $EDS_REQUIRED, $GNOME_FULL_CFLAGS, $GNOME_FULL_LIBS)
AC_SUBST(TZDIALOG_CFLAGS)
AC_SUBST(TZDIALOG_LIBS)
-EVO_SET_COMPILE_FLAGS(SOURCE_SEL, libedataserver-$EDS_PACKAGE >= $EDS_REQUIRED, $GNOME_FULL_CFLAGS, $GNOME_FULL_LIBS)
+EVO_SET_COMPILE_FLAGS(SOURCE_SEL, libedataserver-1.0 >= $EDS_REQUIRED, $GNOME_FULL_CFLAGS, $GNOME_FULL_LIBS)
AC_SUBST(SOURCE_SEL_CFLAGS)
AC_SUBST(SOURCE_SEL_LIBS)
@@ -1179,23 +1137,23 @@ dnl EVO_SET_COMPILE_FLAGS(E_WIDGETS, bonobo_conf bonobox_print gdk_pixbuf gnomec
dnl AC_SUBST(E_WIDGETS_CFLAGS)
dnl AC_SUBST(E_WIDGETS_LIBS)
dnl
-EVO_SET_COMPILE_FLAGS(IMPORTERS, gconf-2.0 libglade-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libgnomeui-2.0 libebook-$EDS_PACKAGE >= $EDS_REQUIRED)
+EVO_SET_COMPILE_FLAGS(IMPORTERS, gconf-2.0 libglade-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libgnomeui-2.0 libebook-1.0 >= $EDS_REQUIRED)
AC_SUBST(IMPORTERS_CFLAGS)
AC_SUBST(IMPORTERS_LIBS)
-EVO_SET_COMPILE_FLAGS(LIBFILTER, libgnome-2.0 libgnomeui-2.0 libglade-2.0 libxml-2.0 gconf-2.0 gal-$GAL_PACKAGE >= $GAL_REQUIRED)
+EVO_SET_COMPILE_FLAGS(LIBFILTER, libgnome-2.0 libgnomeui-2.0 libglade-2.0 libxml-2.0 gconf-2.0 gal-2.2 >= $GAL_REQUIRED)
AC_SUBST(LIBFILTER_CFLAGS)
AC_SUBST(LIBFILTER_LIBS)
dnl --- evolution (shell) flags
-EVO_SET_COMPILE_FLAGS(SHELL, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gal-$GAL_PACKAGE >= $GAL_REQUIRED libglade-2.0 gnome-vfs-2.0 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED)
+EVO_SET_COMPILE_FLAGS(SHELL, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gal-2.2 >= $GAL_REQUIRED libglade-2.0 gnome-vfs-2.0 libgtkhtml-3.1 >= $GTKHTML_REQUIRED)
AC_SUBST(SHELL_CFLAGS)
AC_SUBST(SHELL_LIBS)
dnl --- evolution-addressbook flags
-EVOLUTION_ADDRESSBOOK_DEPS="gconf-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 gal-$GAL_PACKAGE >= $GAL_REQUIRED libgnomeui-2.0 libgnome-2.0 libgnomecanvas-2.0 gnome-vfs-2.0 libgnomeprintui-2.2 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED libebook-$EDS_PACKAGE >= $EDS_REQUIRED"
+EVOLUTION_ADDRESSBOOK_DEPS="gconf-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 gal-2.2 >= $GAL_REQUIRED libgnomeui-2.0 libgnome-2.0 libgnomecanvas-2.0 gnome-vfs-2.0 libgnomeprintui-2.2 libgtkhtml-3.1 >= $GTKHTML_REQUIRED libebook-1.0 >= $EDS_REQUIRED"
EVO_SET_COMPILE_FLAGS(EVOLUTION_ADDRESSBOOK, $EVOLUTION_ADDRESSBOOK_DEPS)
AC_SUBST(EVOLUTION_ADDRESSBOOK_CFLAGS)
@@ -1208,11 +1166,11 @@ AC_SUBST(EVOLUTION_ADDRESSBOOK_CONDUIT_LIBS)
fi
dnl --- evolution-calendar flags
-EVO_SET_COMPILE_FLAGS(LIBSOUP, libsoup-2.2 >= 2.2.0)
+EVO_SET_COMPILE_FLAGS(LIBSOUP, libsoup-2.2 >= 2.2.1)
AC_SUBST(LIBSOUP_CFLAGS)
AC_SUBST(LIBSOUP_LIBS)
-EVO_SET_COMPILE_FLAGS(EVOLUTION_CALENDAR, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 gal-$GAL_PACKAGE >= $GAL_REQUIRED libglade-2.0 gnome-vfs-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED libebook-$EDS_PACKAGE >= $EDS_REQUIRED libecal-$EDS_PACKAGE >= $EDS_REQUIRED)
+EVO_SET_COMPILE_FLAGS(EVOLUTION_CALENDAR, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 gal-2.2 >= $GAL_REQUIRED libglade-2.0 gnome-vfs-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 libgtkhtml-3.1 >= $GTKHTML_REQUIRED libebook-1.0 >= $EDS_REQUIRED libecal-1.0 >= $EDS_REQUIRED)
AC_SUBST(EVOLUTION_CALENDAR_CFLAGS)
AC_SUBST(EVOLUTION_CALENDAR_LIBS)
@@ -1224,17 +1182,17 @@ fi
dnl --- evolution-mail flags
-EVO_SET_COMPILE_FLAGS(EVOLUTION_MAIL, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gal-$GAL_PACKAGE >= $GAL_REQUIRED libglade-2.0 gnome-vfs-module-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED libxml-2.0 bonobo-activation-2.0 gthread-2.0 gconf-2.0 $mozilla_nss libebook-$EDS_PACKAGE >= $EDS_REQUIRED)
+EVO_SET_COMPILE_FLAGS(EVOLUTION_MAIL, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gal-2.2 >= $GAL_REQUIRED libglade-2.0 gnome-vfs-module-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 libgtkhtml-3.1 >= $GTKHTML_REQUIRED libxml-2.0 bonobo-activation-2.0 gthread-2.0 gconf-2.0 $mozilla_nss libebook-1.0 >= $EDS_REQUIRED)
AC_SUBST(EVOLUTION_MAIL_CFLAGS)
AC_SUBST(EVOLUTION_MAIL_LIBS)
dnl -- evolution-data-server IDL and version
-AC_DEFINE(DATASERVER_API_VERSION, "1.2", evolution-data-server API version)
-AC_DEFINE_UNQUOTED(DATASERVER_VERSION, "`pkg-config --modversion evolution-data-server-1.2`", evolution-data-server version)
+AC_DEFINE(DATASERVER_API_VERSION, "1.0", evolution-data-server API version)
+AC_DEFINE_UNQUOTED(DATASERVER_VERSION, "`pkg-config --modversion evolution-data-server-1.0`", evolution-data-server version)
AC_MSG_CHECKING(for evolution-data-server IDL)
-DATASERVER_IDL=`pkg-config --variable=idldir evolution-data-server-1.2`/Evolution-DataServer.idl
+DATASERVER_IDL=`pkg-config --variable=idldir evolution-data-server-1.0`/Evolution-DataServer.idl
if test -f "$DATASERVER_IDL"; then
AC_MSG_RESULT($DATASERVER_IDL)
AC_SUBST(DATASERVER_IDL)
@@ -1274,9 +1232,6 @@ AC_SUBST(camel_providerdir)
componentdir="$privlibdir/components"
AC_SUBST(componentdir)
-plugindir="$privlibdir/plugins"
-AC_SUBST(plugindir)
-
idldir="$datadir/idl/evolution-$BASE_VERSION"
AC_SUBST(idldir)
diff --git a/doc/devel/executive-summary/evolution-services.hierarchy b/doc/devel/executive-summary/evolution-services.hierarchy
deleted file mode 100644
index 37559d819d..0000000000
--- a/doc/devel/executive-summary/evolution-services.hierarchy
+++ /dev/null
@@ -1,7 +0,0 @@
-GtkObject
- BonoboObject
- ExecutiveSummaryComponent
- ExecutiveSummaryComponentFactory
- Handle to remote Bonobo::Unknown
- ExecutiveSummaryComponentFactoryClient
- ExecutiveSummaryHtmlView
diff --git a/doc/devel/importer/evolution-shell-importer.hierarchy b/doc/devel/importer/evolution-shell-importer.hierarchy
deleted file mode 100644
index c46ebdf782..0000000000
--- a/doc/devel/importer/evolution-shell-importer.hierarchy
+++ /dev/null
@@ -1,7 +0,0 @@
-GtkObject
- BonoboObject
- BonoboXObject
- EvolutionImporter
- EvolutionImporterListener
- Handle to remote Bonobo::Unknown
- EvolutionImporterClient
diff --git a/e-util/ChangeLog b/e-util/ChangeLog
index c2b0fd4a99..80d2665544 100644
--- a/e-util/ChangeLog
+++ b/e-util/ChangeLog
@@ -1,48 +1,3 @@
-2004-10-12 Not Zed <NotZed@Ximian.com>
-
- * e-popup.c (e_popup_new): new method to create a targetless popup
- menu.
-
-2004-10-08 JP Rosevear <jpr@novell.com>
-
- * e-plugin.c (ep_load): fix typo
-
-2004-10-08 Not Zed <NotZed@Ximian.com>
-
- * e-plugin.c (ep_load): handle wrong root element properly. From
- David Trowbridge <David.Trowbridge@Colorado.edu>
-
-2004-10-07 Not Zed <NotZed@Ximian.com>
-
- * e-plugin.h: Fix the function pointer types!
-
- * e-plugin.c (epl_invoke): noop if we're disabled, and do some
- lifecycle stuff now, call e_plugin_lib_enable on the module if it
- exists.
-
-2004-10-07 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (ec_rebuild): show the toplevel notebook if we
- had to create one, always.
-
- * e-menu.c (e_menu_add_items): initialise node->menu properly.
-
- * e-plugin.c (ep_load): read/initialise a unique id for all
- plugins and track them in a hashtable.
- (ep_construct): refactor so we have more control over what
- happens. if the hook handling class isn't registered yet, just
- note it and keep going.
- (e_plugin_hook_new): remove this, its handled internally by above.
-
-2004-10-06 Not Zed <NotZed@Ximian.com>
-
- * e-popup.c (e_popup_create_menu): only take one mask parameter,
- and implement EPopupItem->enable to do what the other mask did.
- (ep_activate): if this is a toggle or radiobutton, set the active
- state on the item->type.
- (e_popup_create_menu): if a menu image starts with gtk-, then
- assume it is a gtk stock image instead.
-
2004-08-27 Not Zed <NotZed@Ximian.com>
* e-passwords.c (e_passwords_ask_password): return cancelled if
@@ -124,185 +79,6 @@
(d): turn off debugging
(expire_dir_rec): remove debug printfs
-2004-08-24 JP Rosevear <jpr@novell.com>
-
- * Makefile.am: define EVOLUTION_PLUGINDIR
-
- * e-plugin.c (e_plugin_get_type): add both a global and user
- specifc eplug path as defaults
- (e_plugin_load_plugins): just skip a directory if it can't be
- opened
-
-2004-09-10 Not Zed <NotZed@Ximian.com>
-
- * e-popup.c (emph_construct_menu): duh, setup the hook pointer.
-
- * e-menu.c (e_menu_add_items): pass pixmaps and ui files to this
- function now.
- (e_menu_add_pixmap): removed, covered by above.
- (e_menu_add_ui): removed, covered by above.
- (emph_construct_menu): setup the hook pointer properly.
-
- * e-menu.h: moved the pixmap and ui file structures to be public,
- removed hte hook equivalents.
-
-2004-09-09 Not Zed <NotZed@Ximian.com>
-
- * e-event.c (e_event_remove_items): implement a remove function.
- (e_event_add_items): return a handle to pass to above.
- (emph_event_handle): noop if we're disabled.
-
- * e-popup.c (emph_popup_factory): noop if the
- plugin is disabled.
-
- * e-plugin.c (ep_init): setup an enabled bit for the plugin.
- Preliminary work on being able to manage plugins.
- (e_plugin_hook_enable): set hook enable state.
- (e_plugin_enable): set plugin enable state.
-
-2004-09-07 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (ec_rebuild): pass the right old widget to the page
- factory.
- (ec_widget_destroy): unref the config and the target when done.
- (e_config_create_widget): force the notebook to page 0, workaround
- some other bug i don't understand.
- (e_config_create_window): set dialog hint on druid.
-
-2004-09-06 Not Zed <NotZed@Ximian.com>
-
- * e-account.c (e_account_import): emit a changed event on the dest.
- (e_account_set_from_xml): emit a changed event if we were.
-
- * e-config.c (ec_rebuild): add a table item for some type-safety.
- remove/alter the asserts so the code attemps to fail gracefully
- rather than just fail.
-
-2004-09-01 Not Zed <NotZed@Ximian.com>
-
- * e-menu.[ch]:
- * e-popup.[ch]:
- * e-config.[ch]:
- * e-event.[ch]: API syncrhonisation. Item callbacks now get the
- root object, the item, and user-supplied data. Removed
- now-redundant data and structures. Documentation updates.
-
-2004-08-30 Not Zed <NotZed@Ximian.com>
-
- * e-popup.c (emph_construct_item): just build a popupitem
- directly, use user_data to pass the activate method name.
-
- * e-popup.h: removed epopuphookitem.
-
- * e-popup.c (emph_construct_item): dont set hook on hookitem
- anymore, dont need to set user_data either.
-
- * e-popup.h: no longer pass parent pointer in EPopupHookItem, its
- handled by add_items's data now.
-
- * e-popup.c (ep_finalise): re-arrange and call freefunc with the
- new args.
- (e_popup_create_menu): change the activate data so we can pass the
- new api arguments.
- (ep_activate): changes for api changes.
- (emph_popup_factory): no longer takes target arg, taken from the
- popup, pass the popuphook to the add_items call.
- (emph_popup_activate): changed for new argument types.
-
- * e-popup.h: removed popup from epopupitem.
-
- * e-popup.c (e_popup_add_static_items): make private/rename to
- ep_add_static_items.
- (ep_add_static_items): dont pass target, it is set on the epopup
- structure.
- (e_popup_add_items): change the freefunc to be an EPopupItemsFunc
- and add a user-data field, and track the parent epopup.
-
- * e-popup.h: change the activatefunc to pass the target and data
- supplied to add_items.
-
-2004-08-25 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (e_config_new): removed, this shouldn't be here for
- an abstract class.
- (*): Added doco.
-
-2004-08-24 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (emph_construct_item): translate the label text.
-
- * e-popup.c (emph_construct_item): translate the label text.
-
- * e-plugin.c (e_plugin_xml_prop_domain): helper to get a property
- translated.
- (ep_construct): translate the name and description based on the
- new domain tag. get the description as tag content not property.
- (e_plugin_xml_content_domain): similar for xml node content.
-
-2004-08-24 Not Zed <NotZed@Ximian.com>
-
- * e-account.c (init): setup some defaults for the account.
-
- * e-config.c (e_config_create_widget): remove target arg actually.
- (ec_rebuild): add druid page start/end pages. fixes.
- (ec_druid_finish, ec_druid_cancel): handle finishing the druid.
-
-2004-08-23 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (ec_druid_prepare, ec_druid_prev, ec_druid_next):
- handle druid navigation.
-
-2004-08-20 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (e_config_target_changed): add 'how' changed arg.
- (e_config_create_widget): dont take target anymore, set that
- separately.
- (e_config_set_target): new virtual method to set the target.
- (ec_set_target): implementation.
-
-2004-08-19 Not Zed <NotZed@Ximian.com>
-
- * e-account.c (e_account_set_bool): only emit changed if it did.
-
-2004-08-17 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (e_config_page_check): fix a past-o.
- (e_config_target_changed): treat the returned page for a druid
- page factory as a gnomedruidpagestandard, so get_page works, etc.
-
-2004-08-16 Not Zed <NotZed@Ximian.com>
-
- * e-event.[ch]: Added event hook and dispatch router.
-
-2004-08-13 Not Zed <NotZed@Ximian.com>
-
- * e-plugin.c (e_plugin_load_plugins): don't take a path, load all
- paths set.
- (e_plugin_add_load_path): add a load path to the search path.
- (e_plugin_get_type): setup the initial load path from environment
- or defaults.
- (e_plugin_xml_int): helper to get a prop in int format.
-
-2004-08-11 Not Zed <NotZed@Ximian.com>
-
- * e-config.c (e_config_target_changed): handle DRUID root type.
-
-2004-08-05 Not Zed <NotZed@Ximian.com>
-
- * e-account.c (class_init): add a changed signal.
- (e_account_set_string, e_account_set_int, e_account_set_bool):
- emit changed signal if it did.
-
- * e-config.c (e_config_add_page_check): add a page verification
- function. It will be called for the given page, or all pages, to
- verify the page contains valid data.
-
-2004-07-29 Not Zed <NotZed@Ximian.com>
-
- * e-account.c (e_account_get_string, e_account_get_int)
- (e_account_get_bool, e_account_set_string, e_account_set_int)
- (e_account_set_bool): implement. completely table driven.
-
2004-07-02 Chris Toshok <toshok@ximian.com>
[ fixes #60691 ]
diff --git a/e-util/e-bit-array.c b/e-util/e-bit-array.c
deleted file mode 100644
index bb98a3f465..0000000000
--- a/e-util/e-bit-array.c
+++ /dev/null
@@ -1,429 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-bit-array.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtksignal.h>
-#include "e-bit-array.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-#define ONES ((guint32) 0xffffffff)
-
-#define BOX(n) ((n) / 32)
-#define OFFSET(n) (31 - ((n) % 32))
-#define BITMASK(n) ((guint32)(((guint32) 0x1) << OFFSET((n))))
-#define BITMASK_LEFT(n) ((((n) % 32) == 0) ? 0 : (ONES << (32 - ((n) % 32))))
-#define BITMASK_RIGHT(n) ((guint32)(((guint32) ONES) >> ((n) % 32)))
-
-static GObjectClass *parent_class;
-
-static void
-e_bit_array_insert_real(EBitArray *eba, int row)
-{
- int box;
- int i;
- if(eba->bit_count >= 0) {
- /* Add another word if needed. */
- if ((eba->bit_count & 0x1f) == 0) {
- eba->data = g_renew(guint32, eba->data, (eba->bit_count >> 5) + 1);
- eba->data[eba->bit_count >> 5] = 0;
- }
-
- /* The box is the word that our row is in. */
- box = BOX(row);
- /* Shift all words to the right of our box right one bit. */
- for (i = eba->bit_count >> 5; i > box; i--) {
- eba->data[i] = (eba->data[i] >> 1) | (eba->data[i - 1] << 31);
- }
-
- /* Shift right half of box one bit to the right. */
- eba->data[box] = (eba->data[box] & BITMASK_LEFT(row)) | ((eba->data[box] & BITMASK_RIGHT(row)) >> 1);
- eba->bit_count ++;
- }
-}
-
-static void
-e_bit_array_delete_real(EBitArray *eba, int row, gboolean move_selection_mode)
-{
- int box;
- int i;
- int last;
- int selected = FALSE;
- if(eba->bit_count >= 0) {
- guint32 bitmask;
- box = row >> 5;
- last = eba->bit_count >> 5;
-
- /* Build bitmasks for the left and right half of the box */
- bitmask = BITMASK_RIGHT(row) >> 1;
- if (move_selection_mode)
- selected = e_bit_array_value_at(eba, row);
- /* Shift right half of box one bit to the left. */
- eba->data[box] = (eba->data[box] & BITMASK_LEFT(row))| ((eba->data[box] & bitmask) << 1);
-
- /* Shift all words to the right of our box left one bit. */
- if (box < last) {
- eba->data[box] &= eba->data[box + 1] >> 31;
-
- for (i = box + 1; i < last; i++) {
- eba->data[i] = (eba->data[i] << 1) | (eba->data[i + 1] >> 31);
- }
- /* this over-runs our memory! */
- /*eba->data[i] = eba->data[i] << 1; */
- }
- eba->bit_count --;
- /* Remove the last word if not needed. */
- if ((eba->bit_count & 0x1f) == 0) {
- eba->data = g_renew(guint32, eba->data, eba->bit_count >> 5);
- }
- if (move_selection_mode && selected && eba->bit_count > 0) {
- e_bit_array_select_single_row (eba, row == eba->bit_count ? row - 1 : row);
- }
- }
-}
-
-/* FIXME : Improve efficiency here. */
-void
-e_bit_array_delete(EBitArray *eba, int row, int count)
-{
- int i;
- for (i = 0; i < count; i++)
- e_bit_array_delete_real(eba, row, FALSE);
-}
-
-/* FIXME : Improve efficiency here. */
-void
-e_bit_array_delete_single_mode(EBitArray *eba, int row, int count)
-{
- int i;
- for (i = 0; i < count; i++)
- e_bit_array_delete_real(eba, row, TRUE);
-}
-
-/* FIXME : Improve efficiency here. */
-void
-e_bit_array_insert(EBitArray *eba, int row, int count)
-{
- int i;
- for (i = 0; i < count; i++)
- e_bit_array_insert_real(eba, row);
-}
-
-/* FIXME: Implement this more efficiently. */
-void
-e_bit_array_move_row(EBitArray *eba, int old_row, int new_row)
-{
- e_bit_array_delete_real(eba, old_row, FALSE);
- e_bit_array_insert_real(eba, new_row);
-}
-
-static void
-eba_dispose (GObject *object)
-{
- EBitArray *eba;
-
- eba = E_BIT_ARRAY (object);
-
- if (eba->data)
- g_free(eba->data);
- eba->data = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-/**
- * e_selection_model_is_row_selected
- * @selection: #EBitArray to check
- * @n: The row to check
- *
- * This routine calculates whether the given row is selected.
- *
- * Returns: %TRUE if the given row is selected
- */
-gboolean
-e_bit_array_value_at (EBitArray *eba,
- gint n)
-{
- if (eba->bit_count < n || eba->bit_count == 0)
- return 0;
- else
- return (eba->data[BOX(n)] >> OFFSET(n)) & 0x1;
-}
-
-/**
- * e_selection_model_foreach
- * @selection: #EBitArray to traverse
- * @callback: The callback function to call back.
- * @closure: The closure
- *
- * This routine calls the given callback function once for each
- * selected row, passing closure as the closure.
- */
-void
-e_bit_array_foreach (EBitArray *eba,
- EForeachFunc callback,
- gpointer closure)
-{
- int i;
- int last = (eba->bit_count + 31) / 32;
- for (i = 0; i < last; i++) {
- if (eba->data[i]) {
- int j;
- guint32 value = eba->data[i];
- for (j = 0; j < 32; j++) {
- if (value & 0x80000000) {
- callback(i * 32 + j, closure);
- }
- value <<= 1;
- }
- }
- }
-}
-
-/**
- * e_selection_model_clear
- * @selection: #EBitArray to clear
- *
- * This routine clears the selection to no rows selected.
- */
-void
-e_bit_array_clear(EBitArray *eba)
-{
- g_free(eba->data);
- eba->data = NULL;
- eba->bit_count = 0;
-}
-
-#define PART(x,n) (((x) & (0x01010101 << n)) >> n)
-#define SECTION(x, n) (((x) >> (n * 8)) & 0xff)
-
-/**
- * e_selection_model_selected_count
- * @selection: #EBitArray to count
- *
- * This routine calculates the number of rows selected.
- *
- * Returns: The number of rows selected in the given model.
- */
-gint
-e_bit_array_selected_count (EBitArray *eba)
-{
- gint count;
- int i;
- int last;
-
- if (!eba->data)
- return 0;
-
- count = 0;
-
- last = BOX(eba->bit_count - 1);
-
- for (i = 0; i <= last; i++) {
- int j;
- guint32 thiscount = 0;
- for (j = 0; j < 8; j++)
- thiscount += PART(eba->data[i], j);
- for (j = 0; j < 4; j++)
- count += SECTION(thiscount, j);
- }
-
- return count;
-}
-
-/**
- * e_selection_model_select_all
- * @selection: #EBitArray to select all
- *
- * This routine selects all the rows in the given
- * #EBitArray.
- */
-void
-e_bit_array_select_all (EBitArray *eba)
-{
- int i;
-
- if (!eba->data)
- eba->data = g_new0 (guint32, (eba->bit_count + 31) / 32);
-
- for (i = 0; i < (eba->bit_count + 31) / 32; i ++) {
- eba->data[i] = ONES;
- }
-
- /* need to zero out the bits corresponding to the rows not
- selected in the last full 32 bit mask */
- if (eba->bit_count % 32) {
- int unselected_mask = 0;
- int num_unselected_in_last_byte = 32 - eba->bit_count % 32;
-
- for (i = 0; i < num_unselected_in_last_byte; i ++)
- unselected_mask |= 1 << i;
-
- eba->data[(eba->bit_count + 31) / 32 - 1] &= ~unselected_mask;
- }
-}
-
-/**
- * e_selection_model_invert_selection
- * @selection: #EBitArray to invert
- *
- * This routine inverts all the rows in the given
- * #EBitArray.
- */
-void
-e_bit_array_invert_selection (EBitArray *eba)
-{
- int i;
-
- if (!eba->data)
- eba->data = g_new0 (guint32, (eba->bit_count + 31) / 32);
-
- for (i = 0; i < (eba->bit_count + 31) / 32; i ++) {
- eba->data[i] = ~eba->data[i];
- }
-}
-
-int
-e_bit_array_bit_count (EBitArray *eba)
-{
- return eba->bit_count;
-}
-
-gboolean
-e_bit_array_cross_and (EBitArray *eba)
-{
- int i;
- for (i = 0; i < eba->bit_count / 32; i++) {
- if (eba->data[i] != ONES)
- return FALSE;
- }
- if ((eba->bit_count % 32) && ((eba->data[i] & BITMASK_LEFT(eba->bit_count)) != BITMASK_LEFT(eba->bit_count)))
- return FALSE;
- return TRUE;
-}
-
-gboolean
-e_bit_array_cross_or (EBitArray *eba)
-{
- int i;
- for (i = 0; i < eba->bit_count / 32; i++) {
- if (eba->data[i] != 0)
- return TRUE;
- }
- if ((eba->bit_count % 32) && ((eba->data[i] & BITMASK_LEFT(eba->bit_count)) != 0))
- return TRUE;
- return FALSE;
-}
-
-#define OPERATE(object, i,mask,grow) ((grow) ? (((object)->data[(i)]) |= ((guint32) ~(mask))) : (((object)->data[(i)]) &= (mask)))
-
-void
-e_bit_array_change_one_row(EBitArray *eba, int row, gboolean grow)
-{
- int i;
- i = BOX(row);
-
- OPERATE(eba, i, ~BITMASK(row), grow);
-}
-
-void
-e_bit_array_change_range(EBitArray *eba, int start, int end, gboolean grow)
-{
- int i, last;
- if (start != end) {
- i = BOX(start);
- last = BOX(end);
-
- if (i == last) {
- OPERATE(eba, i, BITMASK_LEFT(start) | BITMASK_RIGHT(end), grow);
- } else {
- OPERATE(eba, i, BITMASK_LEFT(start), grow);
- if (grow)
- for (i ++; i < last; i++)
- eba->data[i] = ONES;
- else
- for (i ++; i < last; i++)
- eba->data[i] = 0;
- OPERATE(eba, i, BITMASK_RIGHT(end), grow);
- }
- }
-}
-
-void
-e_bit_array_select_single_row (EBitArray *eba, int row)
-{
- int i;
- for (i = 0; i < ((eba->bit_count + 31) / 32); i++) {
- if (!((i == BOX(row) && eba->data[i] == BITMASK(row)) ||
- (i != BOX(row) && eba->data[i] == 0))) {
- g_free(eba->data);
- eba->data = g_new0(guint32, (eba->bit_count + 31) / 32);
- eba->data[BOX(row)] = BITMASK(row);
-
- break;
- }
- }
-}
-
-void
-e_bit_array_toggle_single_row (EBitArray *eba, int row)
-{
- if (eba->data[BOX(row)] & BITMASK(row))
- eba->data[BOX(row)] &= ~BITMASK(row);
- else
- eba->data[BOX(row)] |= BITMASK(row);
-}
-
-
-static void
-e_bit_array_init (EBitArray *eba)
-{
- eba->data = NULL;
- eba->bit_count = 0;
-}
-
-static void
-e_bit_array_class_init (EBitArrayClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS(klass);
-
- object_class->dispose = eba_dispose;
-}
-
-E_MAKE_TYPE(e_bit_array, "EBitArray", EBitArray,
- e_bit_array_class_init, e_bit_array_init, PARENT_TYPE)
-
-EBitArray *
-e_bit_array_new (int count)
-{
- EBitArray *eba = g_object_new (E_BIT_ARRAY_TYPE, NULL);
- eba->bit_count = count;
- eba->data = g_new0(guint32, (eba->bit_count + 31) / 32);
- return eba;
-}
diff --git a/e-util/e-bit-array.h b/e-util/e-bit-array.h
deleted file mode 100644
index ebfe644da6..0000000000
--- a/e-util/e-bit-array.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-bit-array.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_BIT_ARRAY_H_
-#define _E_BIT_ARRAY_H_
-
-#include <glib-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_BIT_ARRAY_TYPE (e_bit_array_get_type ())
-#define E_BIT_ARRAY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_BIT_ARRAY_TYPE, EBitArray))
-#define E_BIT_ARRAY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_BIT_ARRAY_TYPE, EBitArrayClass))
-#define E_IS_BIT_ARRAY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_BIT_ARRAY_TYPE))
-#define E_IS_BIT_ARRAY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_BIT_ARRAY_TYPE))
-
-#ifndef _E_FOREACH_FUNC_H_
-#define _E_FOREACH_FUNC_H_
-typedef void (*EForeachFunc) (int model_row,
- gpointer closure);
-#endif
-
-typedef struct {
- GObject base;
-
- gint bit_count;
- guint32 *data;
-} EBitArray;
-
-typedef struct {
- GObjectClass parent_class;
-} EBitArrayClass;
-
-
-GType e_bit_array_get_type (void);
-EBitArray *e_bit_array_new (int count);
-
-gboolean e_bit_array_value_at (EBitArray *selection,
- gint n);
-void e_bit_array_foreach (EBitArray *selection,
- EForeachFunc callback,
- gpointer closure);
-void e_bit_array_clear (EBitArray *selection);
-gint e_bit_array_selected_count (EBitArray *selection);
-void e_bit_array_select_all (EBitArray *selection);
-void e_bit_array_invert_selection (EBitArray *selection);
-int e_bit_array_bit_count (EBitArray *selection);
-void e_bit_array_change_one_row (EBitArray *selection,
- int row,
- gboolean grow);
-void e_bit_array_change_range (EBitArray *selection,
- int start,
- int end,
- gboolean grow);
-void e_bit_array_select_single_row (EBitArray *eba,
- int row);
-void e_bit_array_toggle_single_row (EBitArray *eba,
- int row);
-
-void e_bit_array_insert (EBitArray *esm,
- int row,
- int count);
-void e_bit_array_delete (EBitArray *esm,
- int row,
- int count);
-void e_bit_array_delete_single_mode (EBitArray *esm,
- int row,
- int count);
-void e_bit_array_move_row (EBitArray *esm,
- int old_row,
- int new_row);
-gint e_bit_array_bit_count (EBitArray *esm);
-
-gboolean e_bit_array_cross_and (EBitArray *esm);
-gboolean e_bit_array_cross_or (EBitArray *esm);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _E_BIT_ARRAY_H_ */
diff --git a/e-util/e-i18n.h b/e-util/e-i18n.h
deleted file mode 100644
index 829b2480aa..0000000000
--- a/e-util/e-i18n.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-i18n.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * Copied from gnome-i18nP.h, because this header is typically not installed
- *
- * This file has to be included before any file from the GNOME libraries
- * to have this override the definitions that are pulled from the gnome-i18n.h
- *
- * the difference is that gnome-i18n.h is used for applications, and this is
- * used by libraries (because libraries have to use dcgettext instead of
- * gettext and they need to provide the translation domain, unlike apps).
- *
- * So you can just put this after you include config.h
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_I18N_H__
-#define __E_I18N_H__
-
-#include <libgnome/gnome-i18n.h>
-
-G_BEGIN_DECLS
-
-#ifdef ENABLE_NLS
- /* this function is defined in e-util.c */
- extern char *e_gettext (const char *msgid);
-# undef _
-# ifdef GNOME_EXPLICIT_TRANSLATION_DOMAIN
-/* No parentheses allowed here since that breaks string concatenation. */
-# define E_I18N_DOMAIN GNOME_EXPLICIT_TRANSLATION_DOMAIN
-# else
-/* No parentheses allowed here since that breaks string concatenation. */
-# define E_I18N_DOMAIN PACKAGE
-# endif
-# define _(String) e_gettext (String)
-# ifdef gettext_noop
-# define N_(String) gettext_noop (String)
-# else
-# define N_(String) (String)
-# endif
-#else
-/* Stubs that do something close enough. */
-# define textdomain(String) (String)
-# define gettext(String) (String)
-# define dgettext(Domain,Message) (Message)
-# define dcgettext(Domain,Message,Type) (Message)
-# define bindtextdomain(Domain,Directory) (Domain)
-# define _(String) (String)
-# define N_(String) (String)
-/* No parentheses allowed here since that breaks string concatenation. */
-# define E_I18N_DOMAIN ""
-#endif
-
-G_END_DECLS
-
-#endif /* __E_I18N_H__ */
diff --git a/e-util/e-iconv.c b/e-util/e-iconv.c
deleted file mode 100644
index 3236521438..0000000000
--- a/e-util/e-iconv.c
+++ /dev/null
@@ -1,614 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-iconv.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Michael Zucchi <notzed@ximian.com>
- * Jeffery Stedfast <fejj@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <glib.h>
-#include "e-iconv.h"
-
-#include <locale.h>
-
-#ifdef HAVE_CODESET
-#include <langinfo.h>
-#endif
-
-#include "iconv-detect.h"
-
-#define cd(x)
-
-#ifdef G_THREADS_ENABLED
-static GStaticMutex lock = G_STATIC_MUTEX_INIT;
-#define LOCK() g_static_mutex_lock(&lock)
-#define UNLOCK() g_static_mutex_unlock(&lock)
-#else
-#define LOCK()
-#define UNLOCK()
-#endif
-
-typedef struct _EDListNode {
- struct _EDListNode *next;
- struct _EDListNode *prev;
-} EDListNode;
-
-typedef struct _EDList {
- struct _EDListNode *head;
- struct _EDListNode *tail;
- struct _EDListNode *tailpred;
-} EDList;
-
-#define E_DLIST_INITIALISER(l) { (EDListNode *)&l.tail, 0, (EDListNode *)&l.head }
-
-struct _iconv_cache_node {
- struct _iconv_cache_node *next;
- struct _iconv_cache_node *prev;
-
- struct _iconv_cache *parent;
-
- int busy;
- iconv_t ip;
-};
-
-struct _iconv_cache {
- struct _iconv_cache *next;
- struct _iconv_cache *prev;
-
- char *conv;
-
- EDList open; /* stores iconv_cache_nodes, busy ones up front */
-};
-
-#define E_ICONV_CACHE_SIZE (16)
-
-static EDList iconv_cache_list;
-static GHashTable *iconv_cache;
-static GHashTable *iconv_cache_open;
-static unsigned int iconv_cache_size = 0;
-
-static GHashTable *iconv_charsets = NULL;
-static char *locale_charset = NULL;
-static char *locale_lang = NULL;
-
-struct {
- char *charset;
- char *iconv_name;
-} known_iconv_charsets[] = {
-#if 0
- /* charset name, iconv-friendly charset name */
- { "iso-8859-1", "iso-8859-1" },
- { "iso8859-1", "iso-8859-1" },
- /* the above mostly serves as an example for iso-style charsets,
- but we have code that will populate the iso-*'s if/when they
- show up in e_iconv_charset_name() so I'm
- not going to bother putting them all in here... */
- { "windows-cp1251", "cp1251" },
- { "windows-1251", "cp1251" },
- { "cp1251", "cp1251" },
- /* the above mostly serves as an example for windows-style
- charsets, but we have code that will parse and convert them
- to their cp#### equivalents if/when they show up in
- e_iconv_charset_name() so I'm not going to bother
- putting them all in here either... */
-#endif
- /* charset name (lowercase!), iconv-friendly name (sometimes case sensitive) */
- { "utf-8", "UTF-8" },
-
- /* 10646 is a special case, its usually UCS-2 big endian */
- /* This might need some checking but should be ok for solaris/linux */
- { "iso-10646-1", "UCS-2BE" },
- { "iso_10646-1", "UCS-2BE" },
- { "iso10646-1", "UCS-2BE" },
- { "iso-10646", "UCS-2BE" },
- { "iso_10646", "UCS-2BE" },
- { "iso10646", "UCS-2BE" },
-
- { "ks_c_5601-1987", "EUC-KR" },
-
- /* FIXME: Japanese/Korean/Chinese stuff needs checking */
- { "euckr-0", "EUC-KR" },
- { "5601", "EUC-KR" },
- { "zh_TW-euc", "EUC-TW" },
- { "zh_CN.euc", "gb2312" },
- { "zh_TW-big5", "BIG5" },
- { "euc-cn", "gb2312" },
- { "big5-0", "BIG5" },
- { "big5.eten-0", "BIG5" },
- { "big5hkscs-0", "BIG5HKSCS" },
- { "gb2312-0", "gb2312" },
- { "gb2312.1980-0", "gb2312" },
- { "gb-2312", "gb2312" },
- { "gb18030-0", "gb18030" },
- { "gbk-0", "GBK" },
-
- { "eucjp-0", "eucJP" },
- { "ujis-0", "ujis" },
- { "jisx0208.1983-0","SJIS" },
- { "jisx0212.1990-0","SJIS" },
- { "pck", "SJIS" },
- { NULL, NULL }
-};
-
-
-
-/* Another copy of this trivial list implementation
- Why? This stuff gets called a lot (potentially), should run fast,
- and g_list's are f@@#$ed up to make this a hassle */
-static void e_dlist_init(EDList *v)
-{
- v->head = (EDListNode *)&v->tail;
- v->tail = 0;
- v->tailpred = (EDListNode *)&v->head;
-}
-
-static EDListNode *e_dlist_addhead(EDList *l, EDListNode *n)
-{
- n->next = l->head;
- n->prev = (EDListNode *)&l->head;
- l->head->prev = n;
- l->head = n;
- return n;
-}
-
-static EDListNode *e_dlist_addtail(EDList *l, EDListNode *n)
-{
- n->next = (EDListNode *)&l->tail;
- n->prev = l->tailpred;
- l->tailpred->next = n;
- l->tailpred = n;
- return n;
-}
-
-static EDListNode *e_dlist_remove(EDListNode *n)
-{
- n->next->prev = n->prev;
- n->prev->next = n->next;
- return n;
-}
-
-
-/* fucking glib... */
-static const char *
-e_strdown (char *str)
-{
- register char *s = str;
-
- while (*s) {
- if (*s >= 'A' && *s <= 'Z')
- *s += 0x20;
- s++;
- }
-
- return str;
-}
-
-static const char *
-e_strup (char *str)
-{
- register char *s = str;
-
- while (*s) {
- if (*s >= 'a' && *s <= 'z')
- *s -= 0x20;
- s++;
- }
-
- return str;
-}
-
-
-static void
-locale_parse_lang (const char *locale)
-{
- char *codeset, *lang;
-
- if ((codeset = strchr (locale, '.')))
- lang = g_strndup (locale, codeset - locale);
- else
- lang = g_strdup (locale);
-
- /* validate the language */
- if (strlen (lang) >= 2) {
- if (lang[2] == '-' || lang[2] == '_') {
- /* canonicalise the lang */
- e_strdown (lang);
-
- /* validate the country code */
- if (strlen (lang + 3) > 2) {
- /* invalid country code */
- lang[2] = '\0';
- } else {
- lang[2] = '-';
- e_strup (lang + 3);
- }
- } else if (lang[2] != '\0') {
- /* invalid language */
- g_free (lang);
- lang = NULL;
- }
-
- locale_lang = lang;
- } else {
- /* invalid language */
- locale_lang = NULL;
- g_free (lang);
- }
-}
-
-/* NOTE: Owns the lock on return if keep is TRUE ! */
-static void
-e_iconv_init(int keep)
-{
- char *from, *to, *locale;
- int i;
-
- LOCK();
-
- if (iconv_charsets != NULL) {
- if (!keep)
- UNLOCK();
- return;
- }
-
- iconv_charsets = g_hash_table_new(g_str_hash, g_str_equal);
-
- for (i = 0; known_iconv_charsets[i].charset != NULL; i++) {
- from = g_strdup(known_iconv_charsets[i].charset);
- to = g_strdup(known_iconv_charsets[i].iconv_name);
- e_strdown (from);
- g_hash_table_insert(iconv_charsets, from, to);
- }
-
- e_dlist_init(&iconv_cache_list);
- iconv_cache = g_hash_table_new(g_str_hash, g_str_equal);
- iconv_cache_open = g_hash_table_new(NULL, NULL);
-
- locale = setlocale (LC_ALL, NULL);
-
- if (!locale || !strcmp (locale, "C") || !strcmp (locale, "POSIX")) {
- /* The locale "C" or "POSIX" is a portable locale; its
- * LC_CTYPE part corresponds to the 7-bit ASCII character
- * set.
- */
-
- locale_charset = NULL;
- locale_lang = NULL;
- } else {
-#ifdef HAVE_CODESET
- locale_charset = g_strdup (nl_langinfo (CODESET));
- e_strdown (locale_charset);
-#else
- /* A locale name is typically of the form language[_terri-
- * tory][.codeset][@modifier], where language is an ISO 639
- * language code, territory is an ISO 3166 country code, and
- * codeset is a character set or encoding identifier like
- * ISO-8859-1 or UTF-8.
- */
- char *codeset, *p;
-
- codeset = strchr (locale, '.');
- if (codeset) {
- codeset++;
-
- /* ; is a hack for debian systems and / is a hack for Solaris systems */
- for (p = codeset; *p && !strchr ("@;/", *p); p++);
- locale_charset = g_strndup (codeset, p - codeset);
- e_strdown (locale_charset);
- } else {
- /* charset unknown */
- locale_charset = NULL;
- }
-#endif
-
- /* parse the locale lang */
- locale_parse_lang (locale);
-
- }
-
- if (!keep)
- UNLOCK();
-}
-
-const char *e_iconv_charset_name(const char *charset)
-{
- char *name, *ret, *tmp;
-
- if (charset == NULL)
- return NULL;
-
- name = g_alloca (strlen (charset) + 1);
- strcpy (name, charset);
- e_strdown (name);
-
- e_iconv_init(TRUE);
- ret = g_hash_table_lookup(iconv_charsets, name);
- if (ret != NULL) {
- UNLOCK();
- return ret;
- }
-
- /* Unknown, try canonicalise some basic charset types to something that should work */
- if (strncmp(name, "iso", 3) == 0) {
- /* Convert iso-nnnn-n or isonnnn-n or iso_nnnn-n to iso-nnnn-n or isonnnn-n */
- int iso, codepage;
- char *p;
-
- tmp = name + 3;
- if (*tmp == '-' || *tmp == '_')
- tmp++;
-
- iso = strtoul (tmp, &p, 10);
-
- if (iso == 10646) {
- /* they all become ICONV_10646 */
- ret = g_strdup (ICONV_10646);
- } else {
- tmp = p;
- if (*tmp == '-' || *tmp == '_')
- tmp++;
-
- codepage = strtoul (tmp, &p, 10);
-
- if (p > tmp) {
- /* codepage is numeric */
-#ifdef __aix__
- if (codepage == 13)
- ret = g_strdup ("IBM-921");
- else
-#endif /* __aix__ */
- ret = g_strdup_printf (ICONV_ISO_D_FORMAT, iso, codepage);
- } else {
- /* codepage is a string - probably iso-2022-jp or something */
- ret = g_strdup_printf (ICONV_ISO_S_FORMAT, iso, p);
- }
- }
- } else if (strncmp(name, "windows-", 8) == 0) {
- /* Convert windows-nnnnn or windows-cpnnnnn to cpnnnn */
- tmp = name+8;
- if (!strncmp(tmp, "cp", 2))
- tmp+=2;
- ret = g_strdup_printf("CP%s", tmp);
- } else if (strncmp(name, "microsoft-", 10) == 0) {
- /* Convert microsoft-nnnnn or microsoft-cpnnnnn to cpnnnn */
- tmp = name+10;
- if (!strncmp(tmp, "cp", 2))
- tmp+=2;
- ret = g_strdup_printf("CP%s", tmp);
- } else {
- /* Just assume its ok enough as is, case and all */
- ret = g_strdup(charset);
- }
-
- g_hash_table_insert(iconv_charsets, g_strdup(name), ret);
- UNLOCK();
-
- return ret;
-}
-
-static void
-flush_entry(struct _iconv_cache *ic)
-{
- struct _iconv_cache_node *in, *nn;
-
- in = (struct _iconv_cache_node *)ic->open.head;
- nn = in->next;
- while (nn) {
- if (in->ip != (iconv_t)-1) {
- g_hash_table_remove(iconv_cache_open, in->ip);
- iconv_close(in->ip);
- }
- g_free(in);
- in = nn;
- nn = in->next;
- }
- g_free(ic->conv);
- g_free(ic);
-}
-
-/* This should run pretty quick, its called a lot */
-iconv_t e_iconv_open(const char *oto, const char *ofrom)
-{
- const char *to, *from;
- char *tofrom;
- struct _iconv_cache *ic;
- struct _iconv_cache_node *in;
- int errnosav;
- iconv_t ip;
-
- if (oto == NULL || ofrom == NULL) {
- errno = EINVAL;
- return (iconv_t) -1;
- }
-
- to = e_iconv_charset_name (oto);
- from = e_iconv_charset_name (ofrom);
- tofrom = g_alloca (strlen (to) + strlen (from) + 2);
- sprintf(tofrom, "%s%%%s", to, from);
-
- LOCK();
-
- ic = g_hash_table_lookup(iconv_cache, tofrom);
- if (ic) {
- e_dlist_remove((EDListNode *)ic);
- } else {
- struct _iconv_cache *last = (struct _iconv_cache *)iconv_cache_list.tailpred;
- struct _iconv_cache *prev;
-
- prev = last->prev;
- while (prev && iconv_cache_size > E_ICONV_CACHE_SIZE) {
- in = (struct _iconv_cache_node *)last->open.head;
- if (in->next && !in->busy) {
- cd(printf("Flushing iconv converter '%s'\n", last->conv));
- e_dlist_remove((EDListNode *)last);
- g_hash_table_remove(iconv_cache, last->conv);
- flush_entry(last);
- iconv_cache_size--;
- }
- last = prev;
- prev = last->prev;
- }
-
- iconv_cache_size++;
-
- ic = g_malloc(sizeof(*ic));
- e_dlist_init(&ic->open);
- ic->conv = g_strdup(tofrom);
- g_hash_table_insert(iconv_cache, ic->conv, ic);
-
- cd(printf("Creating iconv converter '%s'\n", ic->conv));
- }
- e_dlist_addhead(&iconv_cache_list, (EDListNode *)ic);
-
- /* If we have a free iconv, use it */
- in = (struct _iconv_cache_node *)ic->open.tailpred;
- if (in->prev && !in->busy) {
- cd(printf("using existing iconv converter '%s'\n", ic->conv));
- ip = in->ip;
- if (ip != (iconv_t)-1) {
- /* work around some broken iconv implementations
- * that die if the length arguments are NULL
- */
- size_t buggy_iconv_len = 0;
- char *buggy_iconv_buf = NULL;
-
- /* resets the converter */
- iconv(ip, &buggy_iconv_buf, &buggy_iconv_len, &buggy_iconv_buf, &buggy_iconv_len);
- in->busy = TRUE;
- e_dlist_remove((EDListNode *)in);
- e_dlist_addhead(&ic->open, (EDListNode *)in);
- }
- } else {
- cd(printf("creating new iconv converter '%s'\n", ic->conv));
- ip = iconv_open(to, from);
- in = g_malloc(sizeof(*in));
- in->ip = ip;
- in->parent = ic;
- e_dlist_addhead(&ic->open, (EDListNode *)in);
- if (ip != (iconv_t)-1) {
- g_hash_table_insert(iconv_cache_open, ip, in);
- in->busy = TRUE;
- } else {
- errnosav = errno;
- g_warning("Could not open converter for '%s' to '%s' charset", from, to);
- in->busy = FALSE;
- errno = errnosav;
- }
- }
-
- UNLOCK();
-
- return ip;
-}
-
-size_t e_iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft, char ** outbuf, size_t *outbytesleft)
-{
- return iconv(cd, (char **) inbuf, inbytesleft, outbuf, outbytesleft);
-}
-
-void
-e_iconv_close(iconv_t ip)
-{
- struct _iconv_cache_node *in;
-
- if (ip == (iconv_t)-1)
- return;
-
- LOCK();
- in = g_hash_table_lookup(iconv_cache_open, ip);
- if (in) {
- cd(printf("closing iconv converter '%s'\n", in->parent->conv));
- e_dlist_remove((EDListNode *)in);
- in->busy = FALSE;
- e_dlist_addtail(&in->parent->open, (EDListNode *)in);
- } else {
- g_warning("trying to close iconv i dont know about: %p", ip);
- iconv_close(ip);
- }
- UNLOCK();
-
-}
-
-const char *e_iconv_locale_charset(void)
-{
- e_iconv_init(FALSE);
-
- return locale_charset;
-}
-
-
-const char *
-e_iconv_locale_language (void)
-{
- e_iconv_init (FALSE);
-
- return locale_lang;
-}
-
-/* map CJKR charsets to their language code */
-/* NOTE: only support charset names that will be returned by
- * e_iconv_charset_name() so that we don't have to keep track of all
- * the aliases too. */
-static struct {
- char *charset;
- char *lang;
-} cjkr_lang_map[] = {
- { "Big5", "zh" },
- { "BIG5HKSCS", "zh" },
- { "gb2312", "zh" },
- { "gb18030", "zh" },
- { "gbk", "zh" },
- { "euc-tw", "zh" },
- { "iso-2022-jp", "ja" },
- { "sjis", "ja" },
- { "ujis", "ja" },
- { "eucJP", "ja" },
- { "euc-jp", "ja" },
- { "euc-kr", "ko" },
- { "koi8-r", "ru" },
- { "koi8-u", "uk" }
-};
-
-#define NUM_CJKR_LANGS (sizeof (cjkr_lang_map) / sizeof (cjkr_lang_map[0]))
-
-const char *
-e_iconv_charset_language (const char *charset)
-{
- int i;
-
- if (!charset)
- return NULL;
-
- charset = e_iconv_charset_name (charset);
- for (i = 0; i < NUM_CJKR_LANGS; i++) {
- if (!strcasecmp (cjkr_lang_map[i].charset, charset))
- return cjkr_lang_map[i].lang;
- }
-
- return NULL;
-}
diff --git a/e-util/e-iconv.h b/e-util/e-iconv.h
deleted file mode 100644
index 14b93853d5..0000000000
--- a/e-util/e-iconv.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-iconv.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Michael Zucchi <notzed@ximian.com>
- * Jeffrey Stedfast <fejj@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_ICONV_H_
-#define _E_ICONV_H_
-
-#include <iconv.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-const char *e_iconv_charset_name(const char *charset);
-iconv_t e_iconv_open(const char *oto, const char *ofrom);
-size_t e_iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft, char ** outbuf, size_t *outbytesleft);
-void e_iconv_close(iconv_t ip);
-const char *e_iconv_locale_charset(void);
-
-/* languages */
-const char *e_iconv_locale_language (void);
-const char *e_iconv_charset_language (const char *charset);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* !_E_ICONV_H_ */
diff --git a/e-util/e-marshal.list b/e-util/e-marshal.list
deleted file mode 100644
index 92496dbd7b..0000000000
--- a/e-util/e-marshal.list
+++ /dev/null
@@ -1,51 +0,0 @@
-BOOLEAN:INT,INT,OBJECT,INT,INT,UINT
-BOOLEAN:INT,POINTER,INT,OBJECT,INT,INT,UINT
-BOOLEAN:NONE
-BOOLEAN:OBJECT
-BOOLEAN:OBJECT,DOUBLE,DOUBLE,BOOLEAN
-BOOLEAN:POINTER,POINTER,INT,INT,INT
-BOOLEAN:POINTER,POINTER,POINTER,INT,INT,INT
-BOOLEAN:STRING,INT
-DOUBLE:OBJECT,DOUBLE,DOUBLE,BOOLEAN
-INT:BOXED
-INT:INT
-INT:INT,INT,BOXED
-INT:INT,POINTER,INT,BOXED
-INT:OBJECT,BOXED
-INT:POINTER
-NONE:BOXED
-NONE:BOXED,INT
-NONE:BOXED,INT,INT
-NONE:DOUBLE
-NONE:INT
-NONE:INT,INT
-NONE:INT,INT,BOXED
-NONE:INT,INT,OBJECT
-NONE:INT,INT,OBJECT,BOXED,UINT,UINT
-NONE:INT,INT,OBJECT,INT,INT,BOXED,UINT,UINT
-NONE:INT,INT,OBJECT,POINTER,UINT,UINT
-NONE:INT,INT,OBJECT,UINT
-NONE:INT,INT,STRING,STRING
-NONE:INT,INT,STRING,STRING,POINTER
-NONE:INT,POINTER
-NONE:INT,POINTER,INT,BOXED
-NONE:INT,POINTER,INT,OBJECT
-NONE:INT,POINTER,INT,OBJECT,BOXED,UINT,UINT
-NONE:INT,POINTER,INT,OBJECT,INT,INT,BOXED,UINT,UINT
-NONE:INT,POINTER,INT,OBJECT,UINT
-NONE:INT,STRING
-NONE:NONE
-NONE:OBJECT
-NONE:OBJECT,OBJECT
-NONE:OBJECT,DOUBLE,DOUBLE,BOOLEAN
-NONE:POINTER
-NONE:POINTER,BOOLEAN
-NONE:POINTER,BOOLEAN,BOOLEAN,BOOLEAN
-NONE:POINTER,INT
-NONE:POINTER,INT,INT
-NONE:POINTER,INT,INT,INT
-NONE:POINTER,INT,OBJECT
-NONE:POINTER,POINTER
-NONE:POINTER,POINTER,INT
-OBJECT:OBJECT,DOUBLE,DOUBLE,BOOLEAN
-POINTER:NONE
diff --git a/e-util/e-sorter-array.c b/e-util/e-sorter-array.c
deleted file mode 100644
index ab1e748d9a..0000000000
--- a/e-util/e-sorter-array.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-sorter-array.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-util.h"
-#include "e-sorter-array.h"
-
-#define d(x)
-
-#define PARENT_TYPE E_SORTER_TYPE
-
-#define INCREMENT_AMOUNT 100
-
-static ESorterClass *parent_class;
-
-static void esa_sort (ESorterArray *esa);
-static void esa_backsort (ESorterArray *esa);
-
-static gint esa_model_to_sorted (ESorter *sorter, int row);
-static gint esa_sorted_to_model (ESorter *sorter, int row);
-static void esa_get_model_to_sorted_array (ESorter *sorter, int **array, int *count);
-static void esa_get_sorted_to_model_array (ESorter *sorter, int **array, int *count);
-static gboolean esa_needs_sorting (ESorter *esa);
-
-#define ESA_NEEDS_SORTING(esa) (((ESorterArray *) (esa))->compare != NULL)
-
-static int
-esort_callback(const void *data1, const void *data2, gpointer user_data)
-{
- ESorterArray *esa = user_data;
- int ret_val;
- int int1, int2;
-
- int1 = *(int *)data1;
- int2 = *(int *)data2;
-
- ret_val = esa->compare (int1, int2, esa->closure);
- if (ret_val != 0)
- return ret_val;
-
- if (int1 < int2)
- return -1;
- if (int1 > int2)
- return 1;
- return 0;
-}
-
-static void
-esa_sort(ESorterArray *esa)
-{
- int rows;
- int i;
-
- if (esa->sorted)
- return;
-
- rows = esa->rows;
-
- esa->sorted = g_new(int, rows);
- for (i = 0; i < rows; i++)
- esa->sorted[i] = i;
-
- if (esa->compare)
- e_sort (esa->sorted, rows, sizeof(int), esort_callback, esa);
-}
-
-static void
-esa_backsort(ESorterArray *esa)
-{
- int i, rows;
-
- if (esa->backsorted)
- return;
-
- esa_sort(esa);
-
- rows = esa->rows;
-
- esa->backsorted = g_new0(int, rows);
-
- for (i = 0; i < rows; i++) {
- esa->backsorted[esa->sorted[i]] = i;
- }
-}
-
-
-static gint
-esa_model_to_sorted (ESorter *es, int row)
-{
- ESorterArray *esa = E_SORTER_ARRAY(es);
-
- g_return_val_if_fail(row >= 0, -1);
- g_return_val_if_fail(row < esa->rows, -1);
-
- if (ESA_NEEDS_SORTING(es))
- esa_backsort(esa);
-
- if (esa->backsorted)
- return esa->backsorted[row];
- else
- return row;
-}
-
-static gint
-esa_sorted_to_model (ESorter *es, int row)
-{
- ESorterArray *esa = (ESorterArray *) es;
-
- g_return_val_if_fail(row >= 0, -1);
- g_return_val_if_fail(row < esa->rows, -1);
-
- if (ESA_NEEDS_SORTING(es))
- esa_sort(esa);
-
- if (esa->sorted)
- return esa->sorted[row];
- else
- return row;
-}
-
-static void
-esa_get_model_to_sorted_array (ESorter *es, int **array, int *count)
-{
- ESorterArray *esa = E_SORTER_ARRAY(es);
- if (array || count) {
- esa_backsort(esa);
-
- if (array)
- *array = esa->backsorted;
- if (count)
- *count = esa->rows;
- }
-}
-
-static void
-esa_get_sorted_to_model_array (ESorter *es, int **array, int *count)
-{
- ESorterArray *esa = E_SORTER_ARRAY(es);
- if (array || count) {
- esa_sort(esa);
-
- if (array)
- *array = esa->sorted;
- if (count)
- *count = esa->rows;
- }
-}
-
-static gboolean
-esa_needs_sorting(ESorter *es)
-{
- ESorterArray *esa = E_SORTER_ARRAY(es);
- return esa->compare != NULL;
-}
-
-void
-e_sorter_array_clean(ESorterArray *esa)
-{
- g_free(esa->sorted);
- esa->sorted = NULL;
-
- g_free(esa->backsorted);
- esa->backsorted = NULL;
-}
-
-void
-e_sorter_array_set_count (ESorterArray *esa, int count)
-{
- e_sorter_array_clean (esa);
- esa->rows = count;
-}
-
-void
-e_sorter_array_append (ESorterArray *esa, int count)
-{
- int i;
- g_free(esa->backsorted);
- esa->backsorted = NULL;
-
- if (esa->sorted) {
- esa->sorted = g_renew(int, esa->sorted, esa->rows + count);
- for (i = 0; i < count; i++) {
- int value = esa->rows;
- size_t pos;
- e_bsearch (&value, esa->sorted, esa->rows, sizeof (int), esort_callback, esa, &pos, NULL);
- memmove (esa->sorted + pos + 1, esa->sorted + pos, sizeof (int) * (esa->rows - pos));
- esa->sorted[pos] = value;
- esa->rows ++;
- }
- } else {
- esa->rows += count;
- }
-}
-
-ESorterArray *
-e_sorter_array_construct (ESorterArray *esa,
- ECompareRowsFunc compare,
- gpointer closure)
-{
- esa->compare = compare;
- esa->closure = closure;
- return esa;
-}
-
-ESorterArray *
-e_sorter_array_new (ECompareRowsFunc compare, gpointer closure)
-{
- ESorterArray *esa = g_object_new (E_SORTER_ARRAY_TYPE, NULL);
-
- return e_sorter_array_construct (esa, compare, closure);
-}
-
-static void
-esa_class_init (ESorterArrayClass *klass)
-{
- ESorterClass *sorter_class = E_SORTER_CLASS(klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- sorter_class->model_to_sorted = esa_model_to_sorted ;
- sorter_class->sorted_to_model = esa_sorted_to_model ;
- sorter_class->get_model_to_sorted_array = esa_get_model_to_sorted_array ;
- sorter_class->get_sorted_to_model_array = esa_get_sorted_to_model_array ;
- sorter_class->needs_sorting = esa_needs_sorting ;
-}
-
-static void
-esa_init (ESorterArray *esa)
-{
- esa->rows = 0;
- esa->compare = NULL;
- esa->closure = NULL;
- esa->sorted = NULL;
- esa->backsorted = NULL;
-}
-
-E_MAKE_TYPE(e_sorter_array, "ESorterArray", ESorterArray, esa_class_init, esa_init, PARENT_TYPE)
diff --git a/e-util/e-sorter-array.h b/e-util/e-sorter-array.h
deleted file mode 100644
index 227e437443..0000000000
--- a/e-util/e-sorter-array.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-sorter-array.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_SORTER_ARRAY_H_
-#define _E_SORTER_ARRAY_H_
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gal/util/e-sorter.h>
-
-G_BEGIN_DECLS
-
-#define E_SORTER_ARRAY_TYPE (e_sorter_array_get_type ())
-#define E_SORTER_ARRAY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_SORTER_ARRAY_TYPE, ESorterArray))
-#define E_SORTER_ARRAY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_SORTER_ARRAY_TYPE, ESorterArrayClass))
-#define E_IS_SORTER_ARRAY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_SORTER_ARRAY_TYPE))
-#define E_IS_SORTER_ARRAY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_SORTER_ARRAY_TYPE))
-
-#ifndef _E_COMPARE_ROWS_FUNC_H_
-#define _E_COMPARE_ROWS_FUNC_H_
-typedef int (*ECompareRowsFunc) (int row1,
- int row2,
- gpointer closure);
-#endif
-
-typedef struct {
- ESorter base;
-
- ECompareRowsFunc compare;
- gpointer closure;
-
- /* If needs_sorting is 0, then model_to_sorted and sorted_to_model are no-ops. */
- int *sorted;
- int *backsorted;
-
- int rows;
-} ESorterArray;
-
-typedef struct {
- ESorterClass parent_class;
-} ESorterArrayClass;
-
-GType e_sorter_array_get_type (void);
-ESorterArray *e_sorter_array_construct (ESorterArray *sorter,
- ECompareRowsFunc compare,
- gpointer closure);
-ESorterArray *e_sorter_array_new (ECompareRowsFunc compare,
- gpointer closure);
-void e_sorter_array_clean (ESorterArray *esa);
-void e_sorter_array_set_count (ESorterArray *esa,
- int count);
-void e_sorter_array_append (ESorterArray *esa,
- int count);
-
-G_END_DECLS
-
-#endif /* _E_SORTER_ARRAY_H_ */
diff --git a/e-util/e-sorter.c b/e-util/e-sorter.c
deleted file mode 100644
index adee6d0d98..0000000000
--- a/e-util/e-sorter.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-sorter.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-util.h"
-#include "e-sorter.h"
-
-#define d(x)
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-static GObjectClass *parent_class;
-
-static gint es_model_to_sorted (ESorter *es, int row);
-static gint es_sorted_to_model (ESorter *es, int row);
-static void es_get_model_to_sorted_array (ESorter *es, int **array, int *count);
-static void es_get_sorted_to_model_array (ESorter *es, int **array, int *count);
-static gboolean es_needs_sorting(ESorter *es);
-
-static void
-es_class_init (ESorterClass *klass)
-{
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- klass->model_to_sorted = es_model_to_sorted;
- klass->sorted_to_model = es_sorted_to_model;
- klass->get_model_to_sorted_array = es_get_model_to_sorted_array;
- klass->get_sorted_to_model_array = es_get_sorted_to_model_array;
- klass->needs_sorting = es_needs_sorting;
-}
-
-static void
-es_init (ESorter *es)
-{
-}
-
-E_MAKE_TYPE(e_sorter, "ESorter", ESorter, es_class_init, es_init, PARENT_TYPE)
-
-ESorter *
-e_sorter_new (void)
-{
- ESorter *es = g_object_new (E_SORTER_TYPE, NULL);
-
- return es;
-}
-
-
-static gint
-es_model_to_sorted (ESorter *es, int row)
-{
- return row;
-}
-
-static gint
-es_sorted_to_model (ESorter *es, int row)
-{
- return row;
-}
-
-
-static void
-es_get_model_to_sorted_array (ESorter *es, int **array, int *count)
-{
-}
-
-static void
-es_get_sorted_to_model_array (ESorter *es, int **array, int *count)
-{
-}
-
-
-static gboolean
-es_needs_sorting(ESorter *es)
-{
- return FALSE;
-}
-
-gint
-e_sorter_model_to_sorted (ESorter *es, int row)
-{
- g_return_val_if_fail(es != NULL, -1);
- g_return_val_if_fail(row >= 0, -1);
-
- if (E_SORTER_GET_CLASS(es)->model_to_sorted)
- return E_SORTER_GET_CLASS(es)->model_to_sorted (es, row);
- else
- return -1;
-}
-
-gint
-e_sorter_sorted_to_model (ESorter *es, int row)
-{
- g_return_val_if_fail(es != NULL, -1);
- g_return_val_if_fail(row >= 0, -1);
-
- if (E_SORTER_GET_CLASS(es)->sorted_to_model)
- return E_SORTER_GET_CLASS(es)->sorted_to_model (es, row);
- else
- return -1;
-}
-
-
-void
-e_sorter_get_model_to_sorted_array (ESorter *es, int **array, int *count)
-{
- g_return_if_fail(es != NULL);
-
- if (E_SORTER_GET_CLASS(es)->get_model_to_sorted_array)
- E_SORTER_GET_CLASS(es)->get_model_to_sorted_array (es, array, count);
-}
-
-void
-e_sorter_get_sorted_to_model_array (ESorter *es, int **array, int *count)
-{
- g_return_if_fail(es != NULL);
-
- if (E_SORTER_GET_CLASS(es)->get_sorted_to_model_array)
- E_SORTER_GET_CLASS(es)->get_sorted_to_model_array (es, array, count);
-}
-
-
-gboolean
-e_sorter_needs_sorting(ESorter *es)
-{
- g_return_val_if_fail (es != NULL, FALSE);
-
- if (E_SORTER_GET_CLASS(es)->needs_sorting)
- return E_SORTER_GET_CLASS(es)->needs_sorting (es);
- else
- return FALSE;
-}
diff --git a/e-util/e-sorter.h b/e-util/e-sorter.h
deleted file mode 100644
index a70c2bd2d7..0000000000
--- a/e-util/e-sorter.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-sorter.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_SORTER_H_
-#define _E_SORTER_H_
-
-#include <glib-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_SORTER_TYPE (e_sorter_get_type ())
-#define E_SORTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_SORTER_TYPE, ESorter))
-#define E_SORTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_SORTER_TYPE, ESorterClass))
-#define E_IS_SORTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_SORTER_TYPE))
-#define E_IS_SORTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_SORTER_TYPE))
-#define E_SORTER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_SORTER_TYPE, ESorterClass))
-
-typedef struct {
- GObject base;
-} ESorter;
-
-typedef struct {
- GObjectClass parent_class;
- gint (*model_to_sorted) (ESorter *sorter,
- int row);
- gint (*sorted_to_model) (ESorter *sorter,
- int row);
-
- void (*get_model_to_sorted_array) (ESorter *sorter,
- int **array,
- int *count);
- void (*get_sorted_to_model_array) (ESorter *sorter,
- int **array,
- int *count);
-
- gboolean (*needs_sorting) (ESorter *sorter);
-} ESorterClass;
-
-GType e_sorter_get_type (void);
-ESorter *e_sorter_new (void);
-
-gint e_sorter_model_to_sorted (ESorter *sorter,
- int row);
-gint e_sorter_sorted_to_model (ESorter *sorter,
- int row);
-
-void e_sorter_get_model_to_sorted_array (ESorter *sorter,
- int **array,
- int *count);
-void e_sorter_get_sorted_to_model_array (ESorter *sorter,
- int **array,
- int *count);
-
-gboolean e_sorter_needs_sorting (ESorter *sorter);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SORTER_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 478dc2d68b..0000000000
--- a/e-util/e-text-event-processor-emacs-like.c
+++ /dev/null
@@ -1,495 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-event-processor-emacs-like.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <string.h>
-#include <gdk/gdkkeysyms.h>
-#include <gal/util/e-util.h>
-#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);
-
-#define PARENT_TYPE E_TEXT_EVENT_PROCESSOR_TYPE
-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_NOP, 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_CAPS, E_TEP_CAPS_TITLE, "" },/* 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_CAPS, E_TEP_CAPS_LOWER, "" }, /* 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_CAPS, E_TEP_CAPS_UPPER, "" }, /* 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 */
-
-};
-
-E_MAKE_TYPE (e_text_event_processor_emacs_like,
- "ETextEventProcessorEmacsLike",
- ETextEventProcessorEmacsLike,
- e_text_event_processor_emacs_like_class_init,
- e_text_event_processor_emacs_like_init,
- PARENT_TYPE)
-
-static void
-e_text_event_processor_emacs_like_class_init (ETextEventProcessorEmacsLikeClass *klass)
-{
- ETextEventProcessorClass *processor_class;
-
- processor_class = (ETextEventProcessorClass*) klass;
-
- parent_class = g_type_class_ref (PARENT_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;
- g_signal_emit_by_name (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;
- tep_el->mouse_down = FALSE;
- } 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;
- g_signal_emit_by_name (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 if (key.state & GDK_MOD1_MASK)
- command.action = E_TEP_NOP;
- else
- command.action = E_TEP_MOVE;
- switch(key.keyval) {
- case GDK_Home:
- case GDK_KP_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:
- case GDK_KP_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:
- case GDK_KP_Page_Up: command.position = E_TEP_BACKWARD_PAGE; break;
-
- case GDK_Page_Down:
- case GDK_KP_Page_Down: command.position = E_TEP_FORWARD_PAGE; break;
- /* CUA has Ctrl-Up/Ctrl-Down as paragraph up down */
- case GDK_Up:
- case GDK_KP_Up: command.position = E_TEP_BACKWARD_LINE; break;
-
- case GDK_Down:
- case GDK_KP_Down: command.position = E_TEP_FORWARD_LINE; break;
-
- case GDK_Left:
- case GDK_KP_Left:
- if (key.state & GDK_CONTROL_MASK)
- command.position = E_TEP_BACKWARD_WORD;
- else
- command.position = E_TEP_BACKWARD_CHARACTER;
- break;
- case GDK_Right:
- case GDK_KP_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:
- case GDK_KP_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 -- FIXME */
- }
- break;
- case GDK_Delete:
- case GDK_KP_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;
- g_signal_emit_by_name (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:
- case GDK_KP_Tab:
- case GDK_ISO_Left_Tab:
- case GDK_3270_BackTab:
- /* Don't insert literally */
- command.action = E_TEP_NOP;
- command.position = E_TEP_SELECTION;
- break;
- case GDK_Return:
- case GDK_KP_Enter:
- if (tep->allow_newlines) {
- 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";
- }
- } else {
- if (key.state & GDK_CONTROL_MASK) {
- command.action = E_TEP_NOP;
- command.position = E_TEP_SELECTION;
- } else {
- command.action = E_TEP_ACTIVATE;
- command.position = E_TEP_SELECTION;
- }
- }
- break;
- case GDK_Escape:
- /* Don't insert literally */
- command.action = E_TEP_NOP;
- command.position = E_TEP_SELECTION;
- break;
-
- case GDK_KP_Space:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = " ";
- break;
- case GDK_KP_Equal:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "=";
- break;
- case GDK_KP_Multiply:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "*";
- break;
- case GDK_KP_Add:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "+";
- break;
- case GDK_KP_Subtract:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "-";
- break;
- case GDK_KP_Decimal:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = ".";
- break;
- case GDK_KP_Divide:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "/";
- break;
- case GDK_KP_0:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "0";
- break;
- case GDK_KP_1:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "1";
- break;
- case GDK_KP_2:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "2";
- break;
- case GDK_KP_3:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "3";
- break;
- case GDK_KP_4:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "4";
- break;
- case GDK_KP_5:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "5";
- break;
- case GDK_KP_6:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "6";
- break;
- case GDK_KP_7:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "7";
- break;
- case GDK_KP_8:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "8";
- break;
- case GDK_KP_9:
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.value = 1;
- command.string = "9";
- break;
-
- default:
- if ((key.state & GDK_CONTROL_MASK) && !(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 = 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 == ' ') {
- command.action = E_TEP_NOP;
- }
-
- if (key.keyval == 'x') {
- command.action = E_TEP_COPY;
- command.position = E_TEP_SELECTION;
- g_signal_emit_by_name (tep, "command", &command);
-
- command.action = E_TEP_DELETE;
- command.position = E_TEP_SELECTION;
- }
-
- break;
- } else if ((key.state & GDK_MOD1_MASK) && !(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 = 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.state & GDK_MOD1_MASK) && !(key.state & GDK_CONTROL_MASK) && key.length > 0) {
- if (key.keyval >= GDK_KP_0 && key.keyval <= GDK_KP_9) {
- key.keyval = '0';
- key.string = "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) {
- g_signal_emit_by_name (tep, "command", &command);
- return 1;
- }
- else
- return 0;
-}
-
-ETextEventProcessor *
-e_text_event_processor_emacs_like_new (void)
-{
- ETextEventProcessorEmacsLike *retval = g_object_new (E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE, NULL);
- 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 1fd74dacfe..0000000000
--- a/e-util/e-text-event-processor-emacs-like.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-event-processor-emacs-like.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 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 <gal/util/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) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE, ETextEventProcessorEmacsLike))
-#define E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE, ETextEventProcessorEmacsLikeClass))
-#define E_IS_TEXT_EVENT_PROCESSOR_EMACS_LIKE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE))
-#define E_IS_TEXT_EVENT_PROCESSOR_EMACS_LIKE_CLASS(klass) (G_TYPE_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 */
- guint mouse_down : 1;
-};
-
-struct _ETextEventProcessorEmacsLikeClass
-{
- ETextEventProcessorClass parent_class;
-};
-
-
-GType 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 5cb3f198d7..0000000000
--- a/e-util/e-text-event-processor-types.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-event-processor-types.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_TEXT_EVENT_PROCESSOR_TYPES_H__
-#define __E_TEXT_EVENT_PROCESSOR_TYPES_H__
-
-#include <glib/gmacros.h>
-
-G_BEGIN_DECLS
-
-#include <gdk/gdkevents.h>
-
-typedef union _ETextEventProcessorEvent ETextEventProcessorEvent;
-
-typedef enum {
- 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
-
-} ETextEventProcessorCommandPosition;
-
-typedef enum {
- E_TEP_MOVE,
- E_TEP_SELECT,
- E_TEP_DELETE,
- E_TEP_INSERT,
-
- E_TEP_CAPS,
-
- 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
-} ETextEventProcessorCommandAction;
-
-typedef struct {
- ETextEventProcessorCommandPosition position;
- ETextEventProcessorCommandAction action;
- int value;
- char *string;
- guint32 time;
-} ETextEventProcessorCommand;
-
-typedef struct {
- GdkEventType type;
- guint32 time;
- guint state;
- guint button;
- gint position;
-} ETextEventProcessorEventButton;
-
-typedef struct {
- GdkEventType type;
- guint32 time;
- guint state;
- guint keyval;
- gint length;
- gchar *string;
-} ETextEventProcessorEventKey;
-
-typedef struct {
- GdkEventType type;
- guint32 time;
- guint state;
- gint position;
-} ETextEventProcessorEventMotion;
-
-union _ETextEventProcessorEvent {
- GdkEventType type;
- ETextEventProcessorEventButton button;
- ETextEventProcessorEventKey key;
- ETextEventProcessorEventMotion motion;
-};
-
-typedef enum _ETextEventProcessorCaps {
- E_TEP_CAPS_UPPER,
- E_TEP_CAPS_LOWER,
- E_TEP_CAPS_TITLE
-} ETextEventProcessorCaps;
-
-G_END_DECLS
-
-#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 6b974d894e..0000000000
--- a/e-util/e-text-event-processor.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-event-processor.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include "e-text-event-processor.h"
-#include <gal/util/e-util.h>
-#include <gal/util/e-i18n.h>
-#include "gal/util/e-marshal.h"
-
-static void e_text_event_processor_init (ETextEventProcessor *card);
-static void e_text_event_processor_class_init (ETextEventProcessorClass *klass);
-
-static void e_text_event_processor_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void e_text_event_processor_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_ALLOW_NEWLINES
-};
-
-enum {
- E_TEP_EVENT,
- E_TEP_LAST_SIGNAL
-};
-
-static guint e_tep_signals[E_TEP_LAST_SIGNAL] = { 0 };
-
-E_MAKE_TYPE (e_text_event_processor,
- "ETextEventProcessor",
- ETextEventProcessor,
- e_text_event_processor_class_init,
- e_text_event_processor_init,
- PARENT_TYPE)
-
-static void
-e_text_event_processor_class_init (ETextEventProcessorClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass*) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->set_property = e_text_event_processor_set_property;
- object_class->get_property = e_text_event_processor_get_property;
-
- e_tep_signals[E_TEP_EVENT] =
- g_signal_new ("command",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextEventProcessorClass, command),
- NULL, NULL,
- e_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- g_object_class_install_property (object_class, PROP_ALLOW_NEWLINES,
- g_param_spec_boolean ("allow_newlines",
- _( "Allow newlines" ),
- _( "Allow newlines" ),
- FALSE,
- G_PARAM_READWRITE));
-
- klass->event = NULL;
- klass->command = NULL;
-
-}
-
-static void
-e_text_event_processor_init (ETextEventProcessor *tep)
-{
- tep->allow_newlines = TRUE;
-}
-
-gint
-e_text_event_processor_handle_event (ETextEventProcessor *tep, ETextEventProcessorEvent *event)
-{
- if (E_TEXT_EVENT_PROCESSOR_GET_CLASS(tep)->event)
- return E_TEXT_EVENT_PROCESSOR_GET_CLASS(tep)->event(tep, event);
- else
- return 0;
-}
-
-/* Set_arg handler for the text item */
-static void
-e_text_event_processor_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- ETextEventProcessor *tep = E_TEXT_EVENT_PROCESSOR (object);
-
- switch (prop_id) {
- case PROP_ALLOW_NEWLINES:
- tep->allow_newlines = g_value_get_boolean (value);
- break;
- default:
- return;
- }
-}
-
-/* Get_arg handler for the text item */
-static void
-e_text_event_processor_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ETextEventProcessor *tep = E_TEXT_EVENT_PROCESSOR (object);
-
- switch (prop_id) {
- case PROP_ALLOW_NEWLINES:
- g_value_set_boolean (value, tep->allow_newlines);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
diff --git a/e-util/e-text-event-processor.h b/e-util/e-text-event-processor.h
deleted file mode 100644
index 21f2550fde..0000000000
--- a/e-util/e-text-event-processor.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-event-processor.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_TEXT_EVENT_PROCESSOR_H__
-#define __E_TEXT_EVENT_PROCESSOR_H__
-
-#include <glib.h>
-#include <gtk/gtkobject.h>
-#include <gal/util/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) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TEXT_EVENT_PROCESSOR_TYPE, ETextEventProcessor))
-#define E_TEXT_EVENT_PROCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TEXT_EVENT_PROCESSOR_TYPE, ETextEventProcessorClass))
-#define E_IS_TEXT_EVENT_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TEXT_EVENT_PROCESSOR_TYPE))
-#define E_IS_TEXT_EVENT_PROCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TEXT_EVENT_PROCESSOR_TYPE))
-#define E_TEXT_EVENT_PROCESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_TEXT_EVENT_PROCESSOR_TYPE, ETextEventProcessorClass))
-typedef struct _ETextEventProcessor ETextEventProcessor;
-typedef struct _ETextEventProcessorClass ETextEventProcessorClass;
-
-struct _ETextEventProcessor
-{
- GObject parent;
-
- /* object specific fields */
- guint allow_newlines : 1;
-};
-
-struct _ETextEventProcessorClass
-{
- GtkObjectClass parent_class;
-
- /* signals */
- void (* command) (ETextEventProcessor *tep, ETextEventProcessorCommand *command);
-
- /* virtual functions */
- gint (* event) (ETextEventProcessor *tep, ETextEventProcessorEvent *event);
-};
-
-
-GType 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 2514cfc931..0000000000
--- a/e-util/e-util.c
+++ /dev/null
@@ -1,1230 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-util.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-util.h"
-#include "e-i18n.h"
-
-#include <glib.h>
-#include <gtk/gtkobject.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <libgnome/gnome-util.h>
-#include <math.h>
-
-#if 0
-#include <libgnomevfs/gnome-vfs.h>
-#endif
-
-int
-g_str_compare (const void *x, const void *y)
-{
- if (x == NULL || y == NULL) {
- if (x == y)
- return 0;
- else
- return x ? -1 : 1;
- }
-
- return strcmp (x, y);
-}
-
-int
-g_collate_compare (const void *x, const void *y)
-{
- if (x == NULL || y == NULL) {
- if (x == y)
- return 0;
- else
- return x ? -1 : 1;
- }
-
- return g_utf8_collate (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(const char *string)
-{
- int i;
- int length = 0;
- int initial = 0;
- for ( i = 0; string[i]; i++ ) {
- if (initial == i && isspace((unsigned char) string[i])) {
- initial ++;
- }
- if (!isspace((unsigned char) 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)
- g_object_unref (p->data);
-
- g_list_free (list);
-}
-
-void
-e_free_object_slist (GSList *list)
-{
- GSList *p;
-
- for (p = list; p != NULL; p = p->next)
- g_object_unref (p->data);
-
- g_slist_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);
-}
-
-void
-e_free_string_slist (GSList *list)
-{
- GSList *p;
-
- for (p = list; p != NULL; p = p->next)
- g_free (p->data);
- g_slist_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 | O_WRONLY, 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;
- }
- }
- }
- if (close(fd) != 0) {
- return errno;
- }
- return 0;
-}
-
-gint
-e_write_file_mkstemp(char *filename, const char *data)
-{
- int fd;
- int length = strlen(data);
- int bytes;
- fd = mkstemp (filename);
- 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;
- }
- }
- }
- if (close(fd) != 0) {
- return errno;
- }
- return 0;
-}
-
-/**
- * e_mkdir_hier:
- * @path: a directory path
- * @mode: a mode, as for mkdir(2)
- *
- * This creates the named directory with the given @mode, creating
- * any necessary intermediate directories (with the same @mode).
- *
- * Return value: 0 on success, -1 on error, in which case errno will
- * be set as for mkdir(2).
- **/
-int
-e_mkdir_hier(const char *path, mode_t mode)
-{
- char *copy, *p;
-
- if (path[0] == '/') {
- p = copy = g_strdup (path);
- } else {
- gchar *current_dir = g_get_current_dir();
- p = copy = g_concat_dir_and_file (current_dir, path);
- }
-
- do {
- p = strchr (p + 1, '/');
- if (p)
- *p = '\0';
- if (access (copy, F_OK) == -1) {
- if (mkdir (copy, mode) == -1) {
- g_free (copy);
- return -1;
- }
- }
- if (p)
- *p = '/';
- } while (p);
-
- g_free (copy);
- 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
-
-/* Include build marshalers */
-
-#include "e-marshal.h"
-#include "e-marshal.c"
-
-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;
-}
-
-gchar *
-e_strstrcase (const gchar *haystack, const gchar *needle)
-{
- /* find the needle in the haystack neglecting case */
- const 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 (gchar *) haystack;
-
- for (ptr = haystack; *(ptr + len - 1) != '\0'; ptr++)
- if (!g_strncasecmp (ptr, needle, len))
- return (gchar *) ptr;
-
- return NULL;
-}
-
-/* This only makes a filename safe for usage as a filename. It still may have shell meta-characters in it. */
-void
-e_filename_make_safe (gchar *string)
-{
- gchar *p, *ts;
- gunichar c;
-
- g_return_if_fail (string != NULL);
- p = string;
-
- while(p && *p) {
- c = g_utf8_get_char (p);
- ts = p;
- p = g_utf8_next_char (p);
- if (!g_unichar_isprint(c) || ( c < 0xff && strchr (" /'\"`&();|<>$%{}!", c&0xff ))) {
- while (ts<p)
- *ts++ = '_';
- }
- }
-}
-
-static gint
-epow10 (gint number) {
- gint value;
-
- for (value = 1; number > 0; number --) {
- value *= 10;
- }
- return value;
-}
-
-gchar *
-e_format_number (gint number)
-{
- GList *iterator, *list = NULL;
- struct lconv *locality;
- gint char_length = 0;
- gint group_count = 0;
- guchar *grouping;
- int last_count = 3;
- int divider;
- char *value;
- char *value_iterator;
-
- locality = localeconv();
- grouping = locality->grouping;
- while (number) {
- char *group;
- switch (*grouping) {
- default:
- last_count = *grouping;
- grouping++;
- case 0:
- divider = epow10(last_count);
- if (number >= divider) {
- group = g_strdup_printf("%0*d", last_count, number % divider);
- } else {
- group = g_strdup_printf("%d", number % divider);
- }
- number /= divider;
- break;
- case CHAR_MAX:
- group = g_strdup_printf("%d", number);
- number = 0;
- break;
- }
- char_length += strlen(group);
- list = g_list_prepend(list, group);
- group_count ++;
- }
-
- if (list) {
- value = g_new(char, 1 + char_length + (group_count - 1) * strlen(locality->thousands_sep));
-
- iterator = list;
- value_iterator = value;
-
- strcpy(value_iterator, iterator->data);
- value_iterator += strlen(iterator->data);
- for (iterator = iterator->next; iterator; iterator = iterator->next) {
- strcpy(value_iterator, locality->thousands_sep);
- value_iterator += strlen(locality->thousands_sep);
-
- strcpy(value_iterator, iterator->data);
- value_iterator += strlen(iterator->data);
- }
- e_free_string_list (list);
- return value;
- } else {
- return g_strdup("0");
- }
-}
-
-static gchar *
-do_format_number_as_float (double number)
-{
- GList *iterator, *list = NULL;
- struct lconv *locality;
- gint char_length = 0;
- gint group_count = 0;
- guchar *grouping;
- int last_count = 3;
- int divider;
- char *value;
- char *value_iterator;
- double fractional;
-
- locality = localeconv();
- grouping = locality->grouping;
- while (number >= 1.0) {
- char *group;
- switch (*grouping) {
- default:
- last_count = *grouping;
- grouping++;
- /* Fall through */
- case 0:
- divider = epow10(last_count);
- number /= divider;
- fractional = modf (number, &number);
- fractional *= divider;
- fractional = floor (fractional);
-
- if (number >= 1.0) {
- group = g_strdup_printf("%0*d", last_count, (int) fractional);
- } else {
- group = g_strdup_printf("%d", (int) fractional);
- }
- break;
- case CHAR_MAX:
- divider = epow10(last_count);
- number /= divider;
- fractional = modf (number, &number);
- fractional *= divider;
- fractional = floor (fractional);
-
- while (number >= 1.0) {
- group = g_strdup_printf("%0*d", last_count, (int) fractional);
-
- char_length += strlen(group);
- list = g_list_prepend(list, group);
- group_count ++;
-
- divider = epow10(last_count);
- number /= divider;
- fractional = modf (number, &number);
- fractional *= divider;
- fractional = floor (fractional);
- }
-
- group = g_strdup_printf("%d", (int) fractional);
- break;
- }
- char_length += strlen(group);
- list = g_list_prepend(list, group);
- group_count ++;
- }
-
- if (list) {
- value = g_new(char, 1 + char_length + (group_count - 1) * strlen(locality->thousands_sep));
-
- iterator = list;
- value_iterator = value;
-
- strcpy(value_iterator, iterator->data);
- value_iterator += strlen(iterator->data);
- for (iterator = iterator->next; iterator; iterator = iterator->next) {
- strcpy(value_iterator, locality->thousands_sep);
- value_iterator += strlen(locality->thousands_sep);
-
- strcpy(value_iterator, iterator->data);
- value_iterator += strlen(iterator->data);
- }
- e_free_string_list (list);
- return value;
- } else {
- return g_strdup("0");
- }
-}
-
-gchar *
-e_format_number_float (gfloat number)
-{
- gfloat int_part;
- gint fraction;
- struct lconv *locality;
- gchar *str_intpart;
- gchar *decimal_point;
- gchar *str_fraction;
- gchar *value;
-
- locality = localeconv();
-
- int_part = floor (number);
- str_intpart = do_format_number_as_float ((double) int_part);
-
- if (!strcmp(locality->mon_decimal_point, "")) {
- decimal_point = ".";
- }
- else {
- decimal_point = locality->mon_decimal_point;
- }
-
- fraction = (int) ((number - int_part) * 100);
-
- if (fraction == 0) {
- str_fraction = g_strdup ("00");
- } else {
- str_fraction = g_strdup_printf ("%02d", fraction);
- }
-
- value = g_strconcat (str_intpart, decimal_point, str_fraction, NULL);
-
- g_free (str_intpart);
- g_free (str_fraction);
-
- return value;
-}
-
-gboolean
-e_create_directory (gchar *directory)
-{
- gint ret_val = e_mkdir_hier (directory, 0777);
- if (ret_val == -1)
- return FALSE;
- else
- return TRUE;
-}
-
-
-/* Perform a binary search for key in base which has nmemb elements
- of size bytes each. The comparisons are done by (*compare)(). */
-void e_bsearch (const void *key,
- const void *base,
- size_t nmemb,
- size_t size,
- ESortCompareFunc compare,
- gpointer closure,
- size_t *start,
- size_t *end)
-{
- size_t l, u, idx;
- const void *p;
- int comparison;
- if (!(start || end))
- return;
-
- l = 0;
- u = nmemb;
- while (l < u) {
- idx = (l + u) / 2;
- p = (void *) (((const char *) base) + (idx * size));
- comparison = (*compare) (key, p, closure);
- if (comparison < 0)
- u = idx;
- else if (comparison > 0)
- l = idx + 1;
- else {
- size_t lsave, usave;
- lsave = l;
- usave = u;
- if (start) {
- while (l < u) {
- idx = (l + u) / 2;
- p = (void *) (((const char *) base) + (idx * size));
- comparison = (*compare) (key, p, closure);
- if (comparison <= 0)
- u = idx;
- else
- l = idx + 1;
- }
- *start = l;
-
- l = lsave;
- u = usave;
- }
- if (end) {
- while (l < u) {
- idx = (l + u) / 2;
- p = (void *) (((const char *) base) + (idx * size));
- comparison = (*compare) (key, p, closure);
- if (comparison < 0)
- u = idx;
- else
- l = idx + 1;
- }
- *end = l;
- }
- return;
- }
- }
-
- if (start)
- *start = l;
- if (end)
- *end = l;
-}
-
-static gpointer closure_closure;
-static ESortCompareFunc compare_closure;
-
-static int
-qsort_callback(const void *data1, const void *data2)
-{
- return (*compare_closure) (data1, data2, closure_closure);
-}
-
-/* Forget it. We're just going to use qsort. I lost the need for a stable sort. */
-void
-e_sort (void *base,
- size_t nmemb,
- size_t size,
- ESortCompareFunc compare,
- gpointer closure)
-{
- closure_closure = closure;
- compare_closure = compare;
- qsort(base, nmemb, size, qsort_callback);
-#if 0
- void *base_copy;
- int i;
- base_copy = g_malloc(nmemb * size);
-
- for (i = 0; i < nmemb; i++) {
- int position;
- e_bsearch(base + (i * size), base_copy, i, size, compare, closure, NULL, &position);
- memmove(base_copy + (position + 1) * size, base_copy + position * size, (i - position) * size);
- memcpy(base_copy + position * size, base + i * size, size);
- }
- memcpy(base, base_copy, nmemb * size);
- g_free(base_copy);
-#endif
-}
-
-size_t e_strftime(char *s, size_t max, const char *fmt, const struct tm *tm)
-{
-#ifdef HAVE_LKSTRFTIME
- return strftime(s, max, fmt, tm);
-#else
- char *c, *ffmt, *ff;
- size_t ret;
-
- ffmt = g_strdup(fmt);
- ff = ffmt;
- while ((c = strstr(ff, "%l")) != NULL) {
- c[1] = 'I';
- ff = c;
- }
-
- ff = fmt;
- while ((c = strstr(ff, "%k")) != NULL) {
- c[1] = 'H';
- ff = c;
- }
-
- ret = strftime(s, max, ffmt, tm);
- g_free(ffmt);
- return ret;
-#endif
-}
-
-size_t
-e_utf8_strftime(char *s, size_t max, const char *fmt, const struct tm *tm)
-{
- size_t sz, ret;
- char *locale_fmt, *buf;
-
- locale_fmt = g_locale_from_utf8(fmt, -1, NULL, &sz, NULL);
- if (!locale_fmt)
- return 0;
-
- ret = e_strftime(s, max, locale_fmt, tm);
- if (!ret) {
- g_free (locale_fmt);
- return 0;
- }
-
- buf = g_locale_to_utf8(s, ret, NULL, &sz, NULL);
- if (!buf) {
- g_free (locale_fmt);
- return 0;
- }
-
- if (sz >= max) {
- char *tmp = buf + max - 1;
- tmp = g_utf8_find_prev_char(buf, tmp);
- if (tmp)
- sz = tmp - buf;
- else
- sz = 0;
- }
- memcpy(s, buf, sz);
- s[sz] = '\0';
- g_free(locale_fmt);
- g_free(buf);
- return sz;
-}
-
-/**
- * Function to do a last minute fixup of the AM/PM stuff if the locale
- * and gettext haven't done it right. Most English speaking countries
- * except the USA use the 24 hour clock (UK, Australia etc). However
- * since they are English nobody bothers to write a language
- * translation (gettext) file. So the locale turns off the AM/PM, but
- * gettext does not turn on the 24 hour clock. Leaving a mess.
- *
- * This routine checks if AM/PM are defined in the locale, if not it
- * forces the use of the 24 hour clock.
- *
- * The function itself is a front end on strftime and takes exactly
- * the same arguments.
- *
- * TODO: Actually remove the '%p' from the fixed up string so that
- * there isn't a stray space.
- **/
-
-size_t e_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm)
-{
- char buf[10];
- char *sp;
- char *ffmt;
- size_t ret;
-
- if (strstr(fmt, "%p")==NULL && strstr(fmt, "%P")==NULL) {
- /* No AM/PM involved - can use the fmt string directly */
- ret=e_strftime(s, max, fmt, tm);
- } else {
- /* Get the AM/PM symbol from the locale */
- e_strftime (buf, 10, "%p", tm);
-
- if (buf[0]) {
- /**
- * AM/PM have been defined in the locale
- * so we can use the fmt string directly
- **/
- ret=e_strftime(s, max, fmt, tm);
- } else {
- /**
- * No AM/PM defined by locale
- * must change to 24 hour clock
- **/
- ffmt=g_strdup(fmt);
- for (sp=ffmt; (sp=strstr(sp, "%l")); sp++) {
- /**
- * Maybe this should be 'k', but I have never
- * seen a 24 clock actually use that format
- **/
- sp[1]='H';
- }
- for (sp=ffmt; (sp=strstr(sp, "%I")); sp++) {
- sp[1]='H';
- }
- ret=e_strftime(s, max, ffmt, tm);
- g_free(ffmt);
- }
- }
- return(ret);
-}
-
-size_t
-e_utf8_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm)
-{
- size_t sz, ret;
- char *locale_fmt, *buf;
-
- locale_fmt = g_locale_from_utf8(fmt, -1, NULL, &sz, NULL);
- if (!locale_fmt)
- return 0;
-
- ret = e_strftime_fix_am_pm(s, max, locale_fmt, tm);
- if (!ret) {
- g_free (locale_fmt);
- return 0;
- }
-
- buf = g_locale_to_utf8(s, ret, NULL, &sz, NULL);
- if (!buf) {
- g_free (locale_fmt);
- return 0;
- }
-
- if (sz >= max) {
- char *tmp = buf + max - 1;
- tmp = g_utf8_find_prev_char(buf, tmp);
- if (tmp)
- sz = tmp - buf;
- else
- sz = 0;
- }
- memcpy(s, buf, sz);
- s[sz] = '\0';
- g_free(locale_fmt);
- g_free(buf);
- return sz;
-}
-
-/**
- * e_flexible_strtod:
- * @nptr: the string to convert to a numeric value.
- * @endptr: if non-NULL, it returns the character after
- * the last character used in the conversion.
- *
- * Converts a string to a gdouble value. This function detects
- * strings either in the standard C locale or in the current locale.
- *
- * This function is typically used when reading configuration files or
- * other non-user input that should not be locale dependent, but may
- * have been in the past. To handle input from the user you should
- * normally use the locale-sensitive system strtod function.
- *
- * To convert from a double to a string in a locale-insensitive way, use
- * @g_ascii_dtostr.
- *
- * Return value: the gdouble value.
- **/
-gdouble
-e_flexible_strtod (const gchar *nptr,
- gchar **endptr)
-{
- gchar *fail_pos;
- gdouble val;
- struct lconv *locale_data;
- const char *decimal_point;
- int decimal_point_len;
- const char *p, *decimal_point_pos;
- const char *end = NULL; /* Silence gcc */
- char *copy, *c;
-
- g_return_val_if_fail (nptr != NULL, 0);
-
- fail_pos = NULL;
-
- locale_data = localeconv ();
- decimal_point = locale_data->decimal_point;
- decimal_point_len = strlen (decimal_point);
-
- g_assert (decimal_point_len != 0);
-
- decimal_point_pos = NULL;
- if (!strcmp (decimal_point, "."))
- return strtod (nptr, endptr);
-
- p = nptr;
-
- /* Skip leading space */
- while (isspace ((guchar)*p))
- p++;
-
- /* Skip leading optional sign */
- if (*p == '+' || *p == '-')
- p++;
-
- if (p[0] == '0' &&
- (p[1] == 'x' || p[1] == 'X')) {
- p += 2;
- /* HEX - find the (optional) decimal point */
-
- while (isxdigit ((guchar)*p))
- p++;
-
- if (*p == '.') {
- decimal_point_pos = p++;
-
- while (isxdigit ((guchar)*p))
- p++;
-
- if (*p == 'p' || *p == 'P')
- p++;
- if (*p == '+' || *p == '-')
- p++;
- while (isdigit ((guchar)*p))
- p++;
- end = p;
- } else if (strncmp (p, decimal_point, decimal_point_len) == 0) {
- return strtod (nptr, endptr);
- }
- } else {
- while (isdigit ((guchar)*p))
- p++;
-
- if (*p == '.') {
- decimal_point_pos = p++;
-
- while (isdigit ((guchar)*p))
- p++;
-
- if (*p == 'e' || *p == 'E')
- p++;
- if (*p == '+' || *p == '-')
- p++;
- while (isdigit ((guchar)*p))
- p++;
- end = p;
- } else if (strncmp (p, decimal_point, decimal_point_len) == 0) {
- return strtod (nptr, endptr);
- }
- }
- /* For the other cases, we need not convert the decimal point */
-
- if (!decimal_point_pos)
- return strtod (nptr, endptr);
-
- /* We need to convert the '.' to the locale specific decimal point */
- copy = g_malloc (end - nptr + 1 + decimal_point_len);
-
- c = copy;
- memcpy (c, nptr, decimal_point_pos - nptr);
- c += decimal_point_pos - nptr;
- memcpy (c, decimal_point, decimal_point_len);
- c += decimal_point_len;
- memcpy (c, decimal_point_pos + 1, end - (decimal_point_pos + 1));
- c += end - (decimal_point_pos + 1);
- *c = 0;
-
- val = strtod (copy, &fail_pos);
-
- if (fail_pos) {
- if (fail_pos > decimal_point_pos)
- fail_pos = (char *)nptr + (fail_pos - copy) - (decimal_point_len - 1);
- else
- fail_pos = (char *)nptr + (fail_pos - copy);
- }
-
- g_free (copy);
-
- if (endptr)
- *endptr = fail_pos;
-
- return val;
-}
-
-/**
- * e_ascii_dtostr:
- * @buffer: A buffer to place the resulting string in
- * @buf_len: The length of the buffer.
- * @format: The printf-style format to use for the
- * code to use for converting.
- * @d: The double to convert
- *
- * Converts a double to a string, using the '.' as
- * decimal_point. To format the number you pass in
- * a printf-style formating string. Allowed conversion
- * specifiers are eEfFgG.
- *
- * If you want to generates enough precision that converting
- * the string back using @g_strtod gives the same machine-number
- * (on machines with IEEE compatible 64bit doubles) use the format
- * string "%.17g". If you do this it is guaranteed that the size
- * of the resulting string will never be larger than
- * @G_ASCII_DTOSTR_BUF_SIZE bytes.
- *
- * Return value: The pointer to the buffer with the converted string.
- **/
-gchar *
-e_ascii_dtostr (gchar *buffer,
- gint buf_len,
- const gchar *format,
- gdouble d)
-{
- struct lconv *locale_data;
- const char *decimal_point;
- int decimal_point_len;
- gchar *p;
- int rest_len;
- gchar format_char;
-
- g_return_val_if_fail (buffer != NULL, NULL);
- g_return_val_if_fail (format[0] == '%', NULL);
- g_return_val_if_fail (strpbrk (format + 1, "'l%") == NULL, NULL);
-
- format_char = format[strlen (format) - 1];
-
- g_return_val_if_fail (format_char == 'e' || format_char == 'E' ||
- format_char == 'f' || format_char == 'F' ||
- format_char == 'g' || format_char == 'G',
- NULL);
-
- if (format[0] != '%')
- return NULL;
-
- if (strpbrk (format + 1, "'l%"))
- return NULL;
-
- if (!(format_char == 'e' || format_char == 'E' ||
- format_char == 'f' || format_char == 'F' ||
- format_char == 'g' || format_char == 'G'))
- return NULL;
-
-
- g_snprintf (buffer, buf_len, format, d);
-
- locale_data = localeconv ();
- decimal_point = locale_data->decimal_point;
- decimal_point_len = strlen (decimal_point);
-
- g_assert (decimal_point_len != 0);
-
- if (strcmp (decimal_point, ".")) {
- p = buffer;
-
- if (*p == '+' || *p == '-')
- p++;
-
- while (isdigit ((guchar)*p))
- p++;
-
- if (strncmp (p, decimal_point, decimal_point_len) == 0) {
- *p = '.';
- p++;
- if (decimal_point_len > 1) {
- rest_len = strlen (p + (decimal_point_len-1));
- memmove (p, p + (decimal_point_len-1),
- rest_len);
- p[rest_len] = 0;
- }
- }
- }
-
- return buffer;
-}
-
-gchar *
-e_strdup_append_strings (gchar *first_string, ...)
-{
- gchar *buffer;
- gchar *current;
- gint length;
- va_list args1;
- va_list args2;
- char *v_string;
- int v_int;
-
- va_start (args1, first_string);
- G_VA_COPY (args2, args1);
-
- length = 0;
-
- v_string = first_string;
- while (v_string) {
- v_int = va_arg (args1, int);
- if (v_int >= 0)
- length += v_int;
- else
- length += strlen (v_string);
- v_string = va_arg (args1, char *);
- }
-
- buffer = g_new (char, length + 1);
- current = buffer;
-
- v_string = first_string;
- while (v_string) {
- v_int = va_arg (args2, int);
- if (v_int < 0) {
- int i;
- for (i = 0; v_string[i]; i++) {
- *(current++) = v_string[i];
- }
- } else {
- int i;
- for (i = 0; v_string[i] && i < v_int; i++) {
- *(current++) = v_string[i];
- }
- }
- v_string = va_arg (args2, char *);
- }
- *(current++) = 0;
-
- va_end (args1);
- va_end (args2);
-
- return buffer;
-}
-
-gchar **
-e_strdupv (const gchar **str_array)
-{
- if (str_array) {
- gint i;
- gchar **retval;
-
- i = 0;
- while (str_array[i])
- i++;
-
- retval = g_new (gchar*, i + 1);
-
- i = 0;
- while (str_array[i]) {
- retval[i] = g_strdup (str_array[i]);
- i++;
- }
- retval[i] = NULL;
-
- return retval;
- } else {
- return NULL;
- }
-}
-
-char *
-e_gettext (const char *msgid)
-{
- static gboolean initialized = FALSE;
-
- if (!initialized) {
- bindtextdomain (E_I18N_DOMAIN, GNOMELOCALEDIR);
- bind_textdomain_codeset (E_I18N_DOMAIN, "UTF-8");
- initialized = TRUE;
- }
-
- return dgettext (E_I18N_DOMAIN, msgid);
-}
-
diff --git a/e-util/e-util.h b/e-util/e-util.h
deleted file mode 100644
index d9d51967d1..0000000000
--- a/e-util/e-util.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-util.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_UTIL_H_
-#define _E_UTIL_H_
-
-#include <sys/types.h>
-#include <glib-object.h>
-#include <limits.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#include <gal/util/e-marshal.h>
-
-#define E_MAKE_TYPE(l,str,t,ci,i,parent) \
-GType l##_get_type(void)\
-{\
- static GType type = 0; \
- if (!type){ \
- static GTypeInfo const object_info = { \
- sizeof (t##Class), \
- \
- (GBaseInitFunc) NULL, \
- (GBaseFinalizeFunc) NULL, \
- \
- (GClassInitFunc) ci, \
- (GClassFinalizeFunc) NULL, \
- NULL, /* class_data */ \
- \
- sizeof (t), \
- 0, /* n_preallocs */ \
- (GInstanceInitFunc) i, \
- }; \
- type = g_type_register_static (parent, str, &object_info, 0); \
- } \
- return type; \
-}
-
-
-#define E_MAKE_X_TYPE(l,str,t,ci,i,parent,poa_init,offset) \
-GtkType l##_get_type(void) \
-{ \
- static GtkType type = 0; \
- if (!type){ \
- GTypeInfo info = { \
- sizeof (t##Class), \
- \
- (GBaseInitFunc) NULL, \
- (GBaseFinalizeFunc) NULL, \
- \
- (GClassInitFunc) ci, \
- (GClassFinalizeFunc) NULL, \
- \
- NULL, /* class_data */ \
- \
- sizeof (t), \
- 0, /* n_preallocs */ \
- (GInstanceInitFunc) i, \
- }; \
- type = bonobo_x_type_unique ( \
- parent, poa_init, NULL, \
- offset, &info, str); \
- } \
- return type; \
-}
-
-#define GET_STRING_ARRAY_FROM_ELLIPSIS(labels, first_string) \
- { \
- va_list args; \
- int i; \
- char *s; \
- \
- va_start (args, (first_string)); \
- \
- i = 0; \
- for (s = (first_string); s; s = va_arg (args, char *)) \
- i++; \
- va_end (args); \
- \
- (labels) = g_new (char *, i + 1); \
- \
- va_start (args, (first_string)); \
- i = 0; \
- for (s = (first_string); s; s = va_arg (args, char *)) \
- (labels)[i++] = s; \
- \
- va_end (args); \
- (labels)[i] = NULL; \
- }
-
-
-#define GET_DUPLICATED_STRING_ARRAY_FROM_ELLIPSIS(labels, first_string) \
- { \
- int i; \
- GET_STRING_ARRAY_FROM_ELLIPSIS ((labels), (first_string)); \
- for (i = 0; labels[i]; i++) \
- labels[i] = g_strdup (labels[i]); \
- }
-
-
-#if 0
-# define E_OBJECT_CLASS_ADD_SIGNALS(oc,sigs,last) \
- gtk_object_class_add_signals (oc, sigs, last)
-# define E_OBJECT_CLASS_TYPE(oc) (oc)->type
-#else
-# define E_OBJECT_CLASS_ADD_SIGNALS(oc,sigs,last)
-# define E_OBJECT_CLASS_TYPE(oc) G_TYPE_FROM_CLASS (oc)
-#endif
-
-
-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_collate_compare (const void *x,
- const void *y);
-int g_int_compare (const void *x,
- const void *y);
-char *e_strdup_strip (const char *string);
-void e_free_object_list (GList *list);
-void e_free_object_slist (GSList *list);
-void e_free_string_list (GList *list);
-void e_free_string_slist (GSList *list);
-char *e_read_file (const char *filename);
-int e_write_file (const char *filename,
- const char *data,
- int flags);
-int e_write_file_mkstemp (char *filename,
- const char *data);
-int e_mkdir_hier (const char *path,
- mode_t mode);
-
-gchar **e_strsplit (const gchar *string,
- const gchar *delimiter,
- gint max_tokens);
-gchar *e_strstrcase (const gchar *haystack,
- const gchar *needle);
-/* This only makes a filename safe for usage as a filename. It still may have shell meta-characters in it. */
-void e_filename_make_safe (gchar *string);
-gchar *e_format_number (gint number);
-gchar *e_format_number_float (gfloat number);
-gboolean e_create_directory (gchar *directory);
-gchar **e_strdupv (const gchar **str_array);
-
-
-typedef int (*ESortCompareFunc) (const void *first,
- const void *second,
- gpointer closure);
-void e_sort (void *base,
- size_t nmemb,
- size_t size,
- ESortCompareFunc compare,
- gpointer closure);
-void e_bsearch (const void *key,
- const void *base,
- size_t nmemb,
- size_t size,
- ESortCompareFunc compare,
- gpointer closure,
- size_t *start,
- size_t *end);
-size_t e_strftime_fix_am_pm (char *s,
- size_t max,
- const char *fmt,
- const struct tm *tm);
-
-size_t e_strftime (char *s,
- size_t max,
- const char *fmt,
- const struct tm *tm);
-
-size_t e_utf8_strftime_fix_am_pm (char *s,
- size_t max,
- const char *fmt,
- const struct tm *tm);
-
-size_t e_utf8_strftime (char *s,
- size_t max,
- const char *fmt,
- const struct tm *tm);
-
-/* String to/from double conversion functions */
-gdouble e_flexible_strtod (const gchar *nptr,
- gchar **endptr);
-
-/* 29 bytes should enough for all possible values that
- * g_ascii_dtostr can produce with the %.17g format.
- * Then add 10 for good measure */
-#define E_ASCII_DTOSTR_BUF_SIZE (DBL_DIG + 12 + 10)
-gchar *e_ascii_dtostr (gchar *buffer,
- gint buf_len,
- const gchar *format,
- gdouble d);
-
-/* Alternating char * and int arguments with a NULL char * to end.
- Less than 0 for the int means copy the whole string. */
-gchar *e_strdup_append_strings (gchar *first_string,
- ...);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#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 437934be65..0000000000
--- a/e-util/e-xml-utils.c
+++ /dev/null
@@ -1,502 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-xml-utils.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-xml-utils.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <locale.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <math.h>
-#include <string.h>
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-
-xmlNode *
-e_xml_get_child_by_name (const 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->xmlChildrenNode; child != NULL; child = child->next) {
- if (xmlStrcmp (child->name, child_name) == 0) {
- 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 (const xmlNode *parent,
- const xmlChar *child_name,
- const gchar *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) {
-#ifdef HAVE_LC_MESSAGES
- lang = setlocale (LC_MESSAGES, NULL);
-#else
- lang = setlocale (LC_CTYPE, NULL);
-#endif
- }
- for (child = parent->xmlChildrenNode; child != NULL; child = child->next) {
- if (xmlStrcmp (child->name, child_name) == 0) {
- xmlChar *this_lang = xmlGetProp (child, "lang");
- if (this_lang == NULL) {
- C = child;
- } else if (xmlStrcmp(this_lang, "lang") == 0) {
- return child;
- }
- }
- }
- return C;
-}
-
-static xmlNode *
-e_xml_get_child_by_name_by_lang_list_with_score (const xmlNode *parent,
- const gchar *name,
- const GList *lang_list,
- gint *best_lang_score)
-{
- xmlNodePtr best_node = NULL, node;
-
- for (node = parent->xmlChildrenNode; node != NULL; node = node->next) {
- xmlChar *lang;
-
- if (node->name == NULL || strcmp (node->name, name) != 0) {
- continue;
- }
- lang = xmlGetProp (node, "xml:lang");
- if (lang != NULL) {
- const GList *l;
- gint i;
-
- for (l = lang_list, i = 0;
- l != NULL && i < *best_lang_score;
- l = l->next, i++) {
- if (strcmp ((gchar *) l->data, lang) == 0) {
- best_node = node;
- *best_lang_score = i;
- }
- }
- } else {
- if (best_node == NULL) {
- best_node = node;
- }
- }
- xmlFree (lang);
- if (*best_lang_score == 0) {
- return best_node;
- }
- }
-
- return best_node;
-}
-
-/*
- * e_xml_get_child_by_name_by_lang_list:
- *
- */
-xmlNode *
-e_xml_get_child_by_name_by_lang_list (const xmlNode *parent,
- const gchar *name,
- const GList *lang_list)
-{
- gint best_lang_score = INT_MAX;
-
- g_return_val_if_fail (parent != NULL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- if (lang_list == NULL) {
- lang_list = gnome_i18n_get_language_list ("LC_MESSAGES");
- }
- return e_xml_get_child_by_name_by_lang_list_with_score
- (parent,name,
- lang_list,
- &best_lang_score);
-}
-
-/*
- * e_xml_get_child_by_name_no_lang
- *
- */
-xmlNode *
-e_xml_get_child_by_name_no_lang (const xmlNode *parent, const gchar *name)
-{
- xmlNodePtr node;
-
- g_return_val_if_fail (parent != NULL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- for (node = parent->xmlChildrenNode; node != NULL; node = node->next) {
- xmlChar *lang;
-
- if (node->name == NULL || strcmp (node->name, name) != 0) {
- continue;
- }
- lang = xmlGetProp (node, "xml:lang");
- if (lang == NULL) {
- return node;
- }
- xmlFree (lang);
- }
-
- return NULL;
-}
-
-gint
-e_xml_get_integer_prop_by_name (const xmlNode *parent, const xmlChar *prop_name)
-{
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- return e_xml_get_integer_prop_by_name_with_default (parent, prop_name, 0);
-}
-
-gint
-e_xml_get_integer_prop_by_name_with_default (const xmlNode *parent,
- const xmlChar *prop_name,
- gint def)
-{
- xmlChar *prop;
- gint ret_val = def;
-
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- prop = xmlGetProp ((xmlNode *) parent, prop_name);
- if (prop != NULL) {
- (void) sscanf (prop, "%d", &ret_val);
- xmlFree (prop);
- }
- return ret_val;
-}
-
-void
-e_xml_set_integer_prop_by_name (xmlNode *parent,
- const xmlChar *prop_name,
- gint value)
-{
- gchar *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);
-}
-
-guint
-e_xml_get_uint_prop_by_name (const xmlNode *parent, const xmlChar *prop_name)
-{
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- return e_xml_get_uint_prop_by_name_with_default (parent, prop_name, 0);
-}
-
-guint
-e_xml_get_uint_prop_by_name_with_default (const xmlNode *parent,
- const xmlChar *prop_name,
- guint def)
-{
- xmlChar *prop;
- guint ret_val = def;
-
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- prop = xmlGetProp ((xmlNode *) parent, prop_name);
- if (prop != NULL) {
- (void) sscanf (prop, "%u", &ret_val);
- xmlFree (prop);
- }
- return ret_val;
-}
-
-void
-e_xml_set_uint_prop_by_name (xmlNode *parent,
- const xmlChar *prop_name,
- guint value)
-{
- gchar *valuestr;
-
- g_return_if_fail (parent != NULL);
- g_return_if_fail (prop_name != NULL);
-
- valuestr = g_strdup_printf ("%u", value);
- xmlSetProp (parent, prop_name, valuestr);
- g_free (valuestr);
-}
-
-gboolean
-e_xml_get_bool_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name)
-{
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- return e_xml_get_bool_prop_by_name_with_default (parent,
- prop_name,
- FALSE);
-}
-
-gboolean
-e_xml_get_bool_prop_by_name_with_default(const xmlNode *parent,
- const xmlChar *prop_name,
- gboolean def)
-{
- xmlChar *prop;
- gboolean ret_val = def;
-
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- prop = xmlGetProp ((xmlNode *) parent, prop_name);
- if (prop != NULL) {
- if (g_strcasecmp (prop, "true") == 0) {
- ret_val = TRUE;
- } else if (g_strcasecmp (prop, "false") == 0) {
- ret_val = FALSE;
- }
- xmlFree(prop);
- }
- return ret_val;
-}
-
-void
-e_xml_set_bool_prop_by_name (xmlNode *parent, const xmlChar *prop_name, gboolean value)
-{
- g_return_if_fail (parent != NULL);
- g_return_if_fail (prop_name != NULL);
-
- if (value) {
- xmlSetProp (parent, prop_name, "true");
- } else {
- xmlSetProp (parent, prop_name, "false");
- }
-}
-
-gdouble
-e_xml_get_double_prop_by_name (const xmlNode *parent, const xmlChar *prop_name)
-{
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- return e_xml_get_double_prop_by_name_with_default (parent, prop_name, 0.0);
-}
-
-gdouble
-e_xml_get_double_prop_by_name_with_default (const xmlNode *parent, const xmlChar *prop_name, gdouble def)
-{
- xmlChar *prop;
- gdouble ret_val = def;
-
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- prop = xmlGetProp ((xmlNode *) parent, prop_name);
- if (prop != NULL) {
- ret_val = e_flexible_strtod (prop, NULL);
- xmlFree (prop);
- }
- return ret_val;
-}
-
-void
-e_xml_set_double_prop_by_name(xmlNode *parent, const xmlChar *prop_name, gdouble value)
-{
- char buffer[E_ASCII_DTOSTR_BUF_SIZE];
- char *format;
-
- g_return_if_fail (parent != NULL);
- g_return_if_fail (prop_name != NULL);
-
- if (fabs (value) < 1e9 && fabs (value) > 1e-5) {
- format = g_strdup_printf ("%%.%df", DBL_DIG);
- } else {
- format = g_strdup_printf ("%%.%dg", DBL_DIG);
- }
- e_ascii_dtostr (buffer, sizeof (buffer), format, value);
- g_free (format);
-
- xmlSetProp (parent, prop_name, buffer);
-}
-
-gchar *
-e_xml_get_string_prop_by_name (const xmlNode *parent, const xmlChar *prop_name)
-{
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- return e_xml_get_string_prop_by_name_with_default (parent, prop_name, NULL);
-}
-
-gchar *
-e_xml_get_string_prop_by_name_with_default (const xmlNode *parent, const xmlChar *prop_name, const gchar *def)
-{
- xmlChar *prop;
- gchar *ret_val;
-
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- prop = xmlGetProp ((xmlNode *) parent, prop_name);
- if (prop != NULL) {
- ret_val = g_strdup (prop);
- xmlFree (prop);
- } else {
- ret_val = g_strdup (def);
- }
- return ret_val;
-}
-
-void
-e_xml_set_string_prop_by_name (xmlNode *parent, const xmlChar *prop_name, const gchar *value)
-{
- g_return_if_fail (parent != NULL);
- g_return_if_fail (prop_name != NULL);
-
- if (value != NULL) {
- xmlSetProp (parent, prop_name, value);
- }
-}
-
-gchar *
-e_xml_get_translated_string_prop_by_name (const xmlNode *parent, const xmlChar *prop_name)
-{
- xmlChar *prop;
- gchar *ret_val = NULL;
- gchar *combined_name;
-
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- prop = xmlGetProp ((xmlNode *) parent, prop_name);
- if (prop != NULL) {
- ret_val = g_strdup (prop);
- xmlFree (prop);
- return ret_val;
- }
-
- combined_name = g_strdup_printf("_%s", prop_name);
- prop = xmlGetProp ((xmlNode *) parent, combined_name);
- if (prop != NULL) {
- ret_val = g_strdup (gettext(prop));
- xmlFree (prop);
- }
- g_free(combined_name);
-
- return ret_val;
-}
-
-
-int
-e_xml_save_file (const char *filename, xmlDocPtr doc)
-{
- char *filesave, *slash, *xmlbuf;
- size_t n, written = 0;
- int ret, fd, size;
- int errnosave;
- ssize_t w;
-
- filesave = alloca (strlen (filename) + 5);
- slash = strrchr (filename, '/');
- if (slash)
- sprintf (filesave, "%.*s.#%s", slash - filename + 1, filename, slash + 1);
- else
- sprintf (filesave, ".#%s", filename);
-
- fd = open (filesave, O_WRONLY | O_CREAT | O_TRUNC, 0600);
- if (fd == -1)
- return -1;
-
- xmlDocDumpFormatMemory (doc, (xmlChar **) &xmlbuf, &size, TRUE);
- if (size <= 0) {
- close (fd);
- unlink (filesave);
- errno = ENOMEM;
- return -1;
- }
-
- n = (size_t) size;
- do {
- do {
- w = write (fd, xmlbuf + written, n - written);
- } while (w == -1 && errno == EINTR);
-
- if (w > 0)
- written += w;
- } while (w != -1 && written < n);
-
- xmlFree (xmlbuf);
-
- if (written < n || fsync (fd) == -1) {
- errnosave = errno;
- close (fd);
- unlink (filesave);
- errno = errnosave;
- return -1;
- }
-
- while ((ret = close (fd)) == -1 && errno == EINTR)
- ;
-
- if (ret == -1)
- return -1;
-
- if (rename (filesave, filename) == -1) {
- errnosave = errno;
- unlink (filesave);
- errno = errnosave;
- return -1;
- }
-
- return 0;
-}
diff --git a/e-util/e-xml-utils.h b/e-util/e-xml-utils.h
deleted file mode 100644
index 6c39ee6f79..0000000000
--- a/e-util/e-xml-utils.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-xml-utils.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_XML_UTILS__
-#define __E_XML_UTILS__
-
-#include <glib.h>
-#include <libxml/tree.h>
-
-G_BEGIN_DECLS
-
-xmlNode *e_xml_get_child_by_name (const xmlNode *parent,
- const xmlChar *child_name);
-/* lang set to NULL means use the current locale. */
-xmlNode *e_xml_get_child_by_name_by_lang (const xmlNode *parent,
- const xmlChar *child_name,
- const gchar *lang);
-/* lang_list set to NULL means use the current locale. */
-xmlNode *e_xml_get_child_by_name_by_lang_list (const xmlNode *parent,
- const gchar *name,
- const GList *lang_list);
-xmlNode *e_xml_get_child_by_name_no_lang (const xmlNode *parent,
- const gchar *name);
-
-
-gint e_xml_get_integer_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name);
-gint e_xml_get_integer_prop_by_name_with_default (const xmlNode *parent,
- const xmlChar *prop_name,
- gint def);
-void e_xml_set_integer_prop_by_name (xmlNode *parent,
- const xmlChar *prop_name,
- gint value);
-
-
-guint e_xml_get_uint_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name);
-guint e_xml_get_uint_prop_by_name_with_default (const xmlNode *parent,
- const xmlChar *prop_name,
- guint def);
-void e_xml_set_uint_prop_by_name (xmlNode *parent,
- const xmlChar *prop_name,
- guint value);
-
-
-gboolean e_xml_get_bool_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name);
-gboolean e_xml_get_bool_prop_by_name_with_default (const xmlNode *parent,
- const xmlChar *prop_name,
- gboolean def);
-void e_xml_set_bool_prop_by_name (xmlNode *parent,
- const xmlChar *prop_name,
- gboolean value);
-
-gdouble e_xml_get_double_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name);
-gdouble e_xml_get_double_prop_by_name_with_default (const xmlNode *parent,
- const xmlChar *prop_name,
- gdouble def);
-void e_xml_set_double_prop_by_name ( xmlNode *parent,
- const xmlChar *prop_name,
- gdouble value);
-
-
-gchar *e_xml_get_string_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name);
-gchar *e_xml_get_string_prop_by_name_with_default (const xmlNode *parent,
- const xmlChar *prop_name,
- const gchar *def);
-void e_xml_set_string_prop_by_name (xmlNode *parent,
- const xmlChar *prop_name,
- const gchar *value);
-
-gchar *e_xml_get_translated_string_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name);
-
-int e_xml_save_file (const char *filename, xmlDocPtr doc);
-
-G_END_DECLS
-
-#endif /* __E_XML_UTILS__ */
diff --git a/help/C/figures/evo_email_a.png b/help/C/figures/evo_email_a.png
index 5d1c6d609b..131ce9a4f1 100755
--- a/help/C/figures/evo_email_a.png
+++ b/help/C/figures/evo_email_a.png
Binary files differ
diff --git a/help/C/figures/evo_identity_a.png b/help/C/figures/evo_identity_a.png
index a2500b783a..3d58558566 100755
--- a/help/C/figures/evo_identity_a.png
+++ b/help/C/figures/evo_identity_a.png
Binary files differ
diff --git a/help/C/figures/evo_mail_callout_a.png b/help/C/figures/evo_mail_callout_a.png
index 2f9b438875..9c6f7c6d96 100755
--- a/help/C/figures/evo_mail_callout_a.png
+++ b/help/C/figures/evo_mail_callout_a.png
Binary files differ
diff --git a/help/C/figures/evo_receive_setup_a.png b/help/C/figures/evo_receive_setup_a.png
index 260d0d3e3b..b98a374ccb 100755
--- a/help/C/figures/evo_receive_setup_a.png
+++ b/help/C/figures/evo_receive_setup_a.png
Binary files differ
diff --git a/help/C/figures/evo_send_setup_a.png b/help/C/figures/evo_send_setup_a.png
index 08981edc8d..68d6646a69 100755
--- a/help/C/figures/evo_send_setup_a.png
+++ b/help/C/figures/evo_send_setup_a.png
Binary files differ
diff --git a/help/devel/executive-summary/evolution-services.hierarchy b/help/devel/executive-summary/evolution-services.hierarchy
deleted file mode 100644
index 37559d819d..0000000000
--- a/help/devel/executive-summary/evolution-services.hierarchy
+++ /dev/null
@@ -1,7 +0,0 @@
-GtkObject
- BonoboObject
- ExecutiveSummaryComponent
- ExecutiveSummaryComponentFactory
- Handle to remote Bonobo::Unknown
- ExecutiveSummaryComponentFactoryClient
- ExecutiveSummaryHtmlView
diff --git a/help/devel/importer/evolution-shell-importer.hierarchy b/help/devel/importer/evolution-shell-importer.hierarchy
deleted file mode 100644
index c46ebdf782..0000000000
--- a/help/devel/importer/evolution-shell-importer.hierarchy
+++ /dev/null
@@ -1,7 +0,0 @@
-GtkObject
- BonoboObject
- BonoboXObject
- EvolutionImporter
- EvolutionImporterListener
- Handle to remote Bonobo::Unknown
- EvolutionImporterClient
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 2b0d00aa6f..99f386fcdc 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -6,27 +6,10 @@
destroyed.
(emfv_destroy): set destroyed bit.
-2004-10-11 Not Zed <NotZed@Ximian.com>
-
- * mail-component.c (mc_startup): register the formatter types
- before registering the formatter hook.
-
-2004-10-08 JP Rosevear <jpr@novell.com>
-
- * mail-account-gui.c (browse_clicked): use "Select a file"
-
-2004-10-08 Harry Lu <harry.lu@sun.com>
+2004-10-07 JP Rosevear <jpr@novell.com>
- * em-folder-tree.c: (em_folder_tree_class_init), (real_popup_menu),
- (emft_popup_menu), (emft_tree_button_press): implement popup_menu
- so that popup menu can be shown with Shift+F10 on folder tree.
- * em-folder-view.c: (emfv_popup), (emfv_list_key_press):
- same as above.
-
-2004-10-07 Not Zed <NotZed@Ximian.com>
-
- * mail-component.c (mc_startup): dont init the base plugin system
- here anymore, only register the hook types for mail hooks.
+ * mail-account-gui.c (browse_clicked): use "Select a file" so as
+ not to break string freeze
2004-09-28 Not Zed <NotZed@Ximian.com>
@@ -36,12 +19,6 @@
2004-10-06 Not Zed <NotZed@Ximian.com>
- * em-folder-tree.c (emft_get_folder_info__desc): fix busted cast.
-
- * *.c: e-popup api changes.
-
-2004-10-06 Not Zed <NotZed@Ximian.com>
-
* em-folder-tree.c (emft_tree_button_press): remove some debug
that made it in accidentally.
@@ -61,10 +38,6 @@
* em-migrate.c (upgrade_passwords_1_2): fix uninitialised pointer.
-2004-09-27 Jeffrey Stedfast <fejj@novell.com>
-
- * em-account-editor.c: Changed the SSL option menu labels.
-
2004-09-21 Not Zed <NotZed@Ximian.com>
** See bug #63521.
@@ -132,6 +105,65 @@
emfv->mark_seen for deciding whether or not to mark the message as
seen. Fixes bug #65448.
+2004-09-08 Not Zed <NotZed@Ximian.com>
+
+ ** See bug #60515.
+
+ * mail-account-gui.c (sig_fill_menu): connect to the activate
+ signal for the none item.
+
+2004-09-01 Jeffrey Stedfast <fejj@novell.com>
+
+ Fix for bug #63377 and prevention of similar cases.
+
+ * em-format.c (emf_finalise): Free the default_charset.
+ (emf_format_clone): Clone the default_charset - this prevents the
+ particular crash described in bug #63377.
+
+ * em-utils.c (em_utils_message_to_html): If source is NULL, set
+ our own default charset (from the user's gconf key) on the
+ formatter to make sure there's always a source charset for
+ conversion to UTF-8.
+
+2004-08-30 Jeffrey Stedfast <fejj@novell.com>
+
+ * em-folder-tree.c (emft_popup_delete_folder): Set the store and
+ full_name info on the dialog.
+ (emft_popup_delete_response): Use the requisite data stored on the
+ dialog object rather than examining the selection again. Fixes bug
+ #62665.
+
+2004-08-30 Not Zed <NotZed@Ximian.com>
+
+ ** See bug #64377.
+
+ * em-folder-selector.c (emfs_response): only set the uri if we
+ have one to set.
+
+ * em-folder-tree.c (em_folder_tree_finalize): Removed
+ cose using selected_path and selected_uri strings.
+ (emft_popup_new_folder): "
+ (emft_popup_copy_folder_selected): "
+ (emft_tree_selection_changed):
+ (emft_tree_row_activated): ", free paths after use.
+
+ * em-folder-selector.c (emfs_create_name_changed): free
+ get_selected_uri return.
+ (emfs_create_name_activate): "
+ (em_folder_selector_get_selected_path): handle api change, store
+ the selected_path too.
+
+ * em-folder-tree.c (em_folder_tree_get_selected_uri):
+ de-constify,and get the selection directly from the tree.
+ (em_folder_tree_get_selected_path): same.
+
+2004-08-27 Not Zed <NotZed@Ximian.com>
+
+ ** See bug #63456.
+
+ * message-list.c (main_folder_changed): noop if the async_event
+ pointer is NULL which can happen during destroy.
+
2004-09-09 Jeffrey Stedfast <fejj@novell.com>
* mail-account-gui.c (mail_account_gui_new): If built with
@@ -539,216 +571,6 @@
* Makefile.am (SUBDIRS): Revert previous error change
-2004-09-10 Not Zed <NotZed@Ximian.com>
-
- * em-*: various doco updates.
-
- * em-format-quote.c (emfq_builtin_init): instead of removing the
- type, just add an override noop. Changed api's.
-
-2004-09-09 Not Zed <NotZed@Ximian.com>
-
- * em-format.c (em_format_class_remove_handler): Change this to use
- the original structure only, not by type.
-
- * em-format-hook.c (emfh_enable): implement hook enablation.
-
-2004-09-07 Not Zed <NotZed@Ximian.com>
-
- * em-account-editor.c (emae_setup_providers): set the provider
- shown selected on the store as well.
-
- * mail-config.glade: moved the druid 'help text' directly into the
- glade file.
-
- * em-account-editor.c (emae_check_complete): add pre-load for
- management page options.
-
- * em-utils.c (em_utils_configure_account): remove use of
- mail-config-druid.
-
- * em-account-editor.c (emae_remove_childen): removed.
- (*): removed service->url, always get it from/set it to the
- e-account so it doesn't have side-effects with plugins.
-
- * mail-dialogs.glade: fix up the names of the various license
- dialog fields.
-
-2004-09-06 Not Zed <NotZed@Ximian.com>
-
- * em-account-editor.c (emae_receive_options_extra_item): store the
- config widgets in the item entry itself.
- (emae_auto_detect): wasted a whole lot of time on this crap.
-
- * em-account-prefs.c (account_able_clicked): removed some redundant logic.
-
- * mail-send-recv.c (mail_autoreceive_setup): renamed to
- mail_autoreceive_init and rewrote all the callbacks. now it
- listens to events on the accountlist directly and doesn't need
- invoking manually. It also runs relative to the account always,
- rather than copying the uri. Removed all callers except the mail
- component one.
-
- * em-account-editor.c (em_account_editor_provider_selector_new):
- removed becaus eof below.
- (em_account_editor_construct): copy the account to a working
- object if supplied, else create a new one.
-
- * mail-config.glade: make the provider selectors just use
- em_account_editor_dropdown new for the dropdown menu.
-
- * em-account-editor.c (prepare_signatures): removed, merged into
- the identity page code.
- (sig_fill_menu): removed.
- (emae_setup_signatures): new function to setup signatures on a
- gtkcombobox.
- (clear_menu): removed.
- (signature_changed): removed.
- (emae_signature_changed): new function for changed.
- (signature_removed): removed.
- (emae_signature_removed): new function for removed.
- (emae_signature_get_iter): helper for finding the right row for
- this signature.
- (signature_added): removed.
- (emae_signature_added): new function for added.
- (sig_activate): removed.
- (emae_signaturetype_changed): new function to update the account
- info immediately.
- (sig_add_new_signature): renamed to emae_signature_new.
- (select_account_signature): no longer needed, this happens in the
- setup.
-
- * mail-config.glade: changed the signature thing to a custom
- widget (gtkcombobox).
-
- * em-account-editor.c (em_account_editor_construct): updates for
- api change, table sections require table items.
- (emae_setup_service): handle host:port hostname syntax.
- (emae_hostname_changed): and here too.
- (emae_commit): fill this out, and implement it.
-
-2004-09-04 Not Zed <NotZed@Ximian.com>
-
- * *.c: include gnome i18.h if needed since camel-object.h was
- fixed.
-
- * em-format.c (em_format_class_add_handler): if a handler is
- already set for type, link it in.
-
- * em-format.h: added a link pointer to EMFormatHanlder, so that
- overrides can also fallback. remove applications member - not
- used anymore.
-
-2004-09-01 Not Zed <NotZed@Ximian.com>
-
- * em-popup.h: added some docs.
-
- * em-popup.c (emp_standard_menu_factory):
- * em-folder-tree.c (tree_drag_data_received): popup api changes.
-
-2004-08-31 Not Zed <NotZed@Ximian.com>
-
- * em-format-html-display.c (efhd_attachment_button_show): use a
- wrapper for the button event since the popup event has changed
- signature.
-
-2004-08-30 Not Zed <NotZed@Ximian.com>
-
- * em-popup.c (emp_standard_menu_factory): changed args.
- (struct _open_in_item): removed, use user data instead.
- (*): fix callbacks for new apis.
- (emp_popup_open): Removed some dead popup callbacks never invoked.
- (em_popup_target_new_attachments): new target type for attachment
- bar in composer.
-
- * em-folder-tree.c (emft_popup*): convert to new e-popup apis.
-
- * em-folder-view.c: emfv_popup_*: convert to new e-poup callback
- signatures.
- (EMFV_MAP_CALLBACK): fix for e-popup callback change.
- (EMFV_POPUP_AUTO_TYPE): same.
- (emfv_popup): dont bother setting item callback data.
- (emfv_popup_labels_free): api changes.
- (emfv_popup_items_free): new free method.
- (EMFVPopupItem): No longer needed.
- (emfv_uri_popup_free): api changes.
- (emfv_format_popup_event): new api's == simpler code.
-
- * em-account-editor.c (emae_receive_options_extra_item): add a
- hack for the label item, which is only used by connector to
- override the hostname and username labels.
-
-2004-08-24 Not Zed <NotZed@Ximian.com>
-
- * em-account-editor.c (em_account_editor_construct): create the
- window rather than the widget here.
-
- * mail-config.glade: remove the extra_page from the druid, it is
- autogenerated now. renamed the "Receiving options" notebook page
- to "Receiving Email" since it isn't hte options page.
-
- * em-account-editor.c (emae_receive_options_page): no longer
- needed, autogenerated.
- (emae_receive_options_item): setup the auto-receive time values.
- (emae_receive_page): don't setup the auto check time values here.
-
- * mail-config.glade: Remove the Receiving Mail tab, it is now
- completely auto-generated.
-
-2004-08-17 Not Zed <NotZed@Ximian.com>
-
- * em-event.[ch]: mail event dispatcher.
-
- * mail-component.c (mc_startup): hook into events.
-
- * mail-folder-cache.c (update_1folder): always set the uri field.
- (real_flush_updates): emit a folder.changed:new event if we have new
- mail.
-
-2004-08-13 Not Zed <NotZed@Ximian.com>
-
- * mail-config.glade: replaced ssl selector with custom widget
- (gtkcombobox). Giv the preferences, composer toplevel unique
- names.
-
-2004-07-29 Not Zed <NotZed@Ximian.com>
-
- * mail-config.glade: replaced source and transport selector with
- custom widget (gtkcombobox).
-
- * em-account-editor.[ch]: copy over mail-account-gui.[ch] and
- rename stuff. Make a gobject. Move most internals, internal.
-
-2004-07-28 Not Zed <NotZed@Ximian.com>
-
- * em-composer-prefs.c (em_composer_prefs_construct): get the
- toplevel tab as the root.
- (em_composer_prefs_construct): setup plugin metadata for composer
- prefs.
-
- * em-mailer-prefs.c (em_mailer_prefs_construct): setup plugin
- metadata for mail preferences.
-
- * em-config.c (em_config_target_new_prefs): new target for 'prefs'
- mode, everything global via gconf.
-
- * em-mailer-prefs.c (em_mailer_prefs_construct): get the gui from
- the preferences_toplevel not the preferences_tab window which we
- don't need.
-
- * mail-config.glade: rename the preferences 'toplevel' to
- preferences_toplevel so we can get it unparented. And the
- composer toplevel to composer_toplevel.
-
- * em-folder-properties.c (em_folder_properties_show): remove test
- code.
-
- * em-format.h (struct _EMFormatPURI): add a free function
- callback.
-
- * em-format.c (emf_clear_puri_node): if the free function is set,
- call it.
-
2004-07-01 Rodney Dawes <dobey@novell.com>
* Makefile.am (BUILT_SOURCES): Remove $(error_i18n)
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index db5a280991..8041760ab0 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -28,7 +28,6 @@
#include <gtk/gtkdialog.h>
#include <gal/util/e-util.h>
-#include <libgnome/gnome-i18n.h>
#include "mail-mt.h"
#include "mail-ops.h"
diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c
index da31fd4c12..33c3c97843 100644
--- a/mail/em-folder-tree-model.c
+++ b/mail/em-folder-tree-model.c
@@ -20,6 +20,7 @@
*
*/
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -37,7 +38,6 @@
#include <e-util/e-mktemp.h>
#include <gal/util/e-xml-utils.h>
-#include <libgnome/gnome-i18n.h>
#include <camel/camel-file-utils.h>
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index c326e8daa4..90fe7de519 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -37,7 +37,6 @@
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <libgnome/gnome-i18n.h>
#include <camel/camel-session.h>
#include <camel/camel-store.h>
@@ -163,7 +162,6 @@ static void emft_tree_row_expanded (GtkTreeView *treeview, GtkTreeIter *root, Gt
static gboolean emft_tree_button_press (GtkTreeView *treeview, GdkEventButton *event, EMFolderTree *emft);
static void emft_tree_selection_changed (GtkTreeSelection *selection, EMFolderTree *emft);
static gboolean emft_tree_user_event (GtkTreeView *treeview, GdkEvent *e, EMFolderTree *emft);
-static gboolean emft_popup_menu (GtkWidget *widget);
struct _emft_selection_data {
GtkTreeModel *model;
@@ -202,14 +200,11 @@ em_folder_tree_class_init (EMFolderTreeClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
parent_class = g_type_class_ref (GTK_TYPE_VBOX);
object_class->finalize = em_folder_tree_finalize;
gtk_object_class->destroy = em_folder_tree_destroy;
-
- widget_class->popup_menu = emft_popup_menu;
signals[FOLDER_SELECTED] =
g_signal_new ("folder-selected",
@@ -992,48 +987,36 @@ tree_drag_data_action(struct _DragDataReceivedAsync *m)
}
static void
-emft_drop_popup_copy(EPopup *ep, EPopupItem *item, void *data)
+emft_drop_popup_copy(GtkWidget *item, struct _DragDataReceivedAsync *m)
{
- struct _DragDataReceivedAsync *m = data;
-
m->action = GDK_ACTION_COPY;
tree_drag_data_action(m);
}
static void
-emft_drop_popup_move(EPopup *ep, EPopupItem *item, void *data)
+emft_drop_popup_move(GtkWidget *item, struct _DragDataReceivedAsync *m)
{
- struct _DragDataReceivedAsync *m = data;
-
m->action = GDK_ACTION_MOVE;
tree_drag_data_action(m);
}
static void
-emft_drop_popup_cancel(EPopup *ep, EPopupItem *item, void *data)
+emft_drop_popup_cancel(GtkWidget *item, struct _DragDataReceivedAsync *m)
{
- struct _DragDataReceivedAsync *m = data;
-
m->aborted = TRUE;
mail_msg_free(&m->msg);
}
-static EPopupItem emft_drop_popup_menu[] = {
- { E_POPUP_ITEM, "00.emc.00", N_("_Copy to Folder"), emft_drop_popup_copy, NULL, NULL, 1 },
- { E_POPUP_ITEM, "00.emc.01", N_("_Move to Folder"), emft_drop_popup_move, NULL, NULL, 1 },
- { E_POPUP_ITEM, "00.emc.02", N_("_Copy"), emft_drop_popup_copy, NULL, "stock_folder-copy", 2 },
- { E_POPUP_ITEM, "00.emc.03", N_("_Move"), emft_drop_popup_move, NULL, "stock_folder-move", 2 },
- { E_POPUP_BAR, "10.emc" },
- { E_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), emft_drop_popup_cancel, NULL, "stock_cancel", 0 },
+static EMPopupItem emft_drop_popup_menu[] = {
+ { EM_POPUP_ITEM, "00.emc.00", N_("_Copy to Folder"), G_CALLBACK (emft_drop_popup_copy), NULL, NULL, 1 },
+ { EM_POPUP_ITEM, "00.emc.01", N_("_Move to Folder"), G_CALLBACK (emft_drop_popup_move), NULL, NULL, 1 },
+ { EM_POPUP_ITEM, "00.emc.02", N_("_Copy"), G_CALLBACK (emft_drop_popup_copy), NULL, "stock_folder-copy", 2 },
+ { EM_POPUP_ITEM, "00.emc.03", N_("_Move"), G_CALLBACK (emft_drop_popup_move), NULL, "stock_folder-move", 2 },
+ { EM_POPUP_BAR, "10.emc" },
+ { EM_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), G_CALLBACK (emft_drop_popup_cancel), NULL, "stock_cancel", 0 },
};
static void
-emft_drop_popup_free(EPopup *ep, GSList *items, void *data)
-{
- g_slist_free(items);
-}
-
-static void
tree_drag_data_received(GtkWidget *widget, GdkDragContext *context, int x, int y, GtkSelectionData *selection, guint info, guint time, EMFolderTree *emft)
{
struct _EMFolderTreePrivate *priv = emft->priv;
@@ -1099,13 +1082,15 @@ tree_drag_data_received(GtkWidget *widget, GdkDragContext *context, int x, int y
mask = ~2;
for (i=0;i<sizeof(emft_drop_popup_menu)/sizeof(emft_drop_popup_menu[0]);i++) {
- EPopupItem *item = &emft_drop_popup_menu[i];
+ EMPopupItem *item = &emft_drop_popup_menu[i];
- if ((item->visible & mask) == 0)
+ if ((item->mask & mask) == 0) {
+ item->activate_data = m;
menus = g_slist_append(menus, item);
+ }
}
- e_popup_add_items((EPopup *)emp, menus, emft_drop_popup_free, m);
- menu = e_popup_create_menu_once((EPopup *)emp, NULL, mask);
+ em_popup_add_items(emp, menus, (GDestroyNotify)g_slist_free);
+ menu = em_popup_create_menu_once(emp, NULL, mask, mask);
gtk_menu_popup(menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
} else {
tree_drag_data_action(m);
@@ -1715,7 +1700,7 @@ struct _EMFolderTreeGetFolderInfo {
static char *
emft_get_folder_info__desc(struct _mail_msg *mm, int done)
{
- struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *)mm;
+ struct _EMFolderTreeGetFolderInfo *m = (struct _get_folderinfo_msg *)mm;
char *ret, *name;
name = camel_service_get_name((CamelService *)m->store, TRUE);
@@ -2217,9 +2202,8 @@ fail:
}
static void
-emft_popup_copy(EPopup *ep, EPopupItem *item, void *data)
+emft_popup_copy (GtkWidget *item, EMFolderTree *emft)
{
- EMFolderTree *emft = data;
struct _copy_folder_data *cfd;
cfd = g_malloc (sizeof (*cfd));
@@ -2231,9 +2215,8 @@ emft_popup_copy(EPopup *ep, EPopupItem *item, void *data)
}
static void
-emft_popup_move(EPopup *ep, EPopupItem *item, void *data)
+emft_popup_move (GtkWidget *item, EMFolderTree *emft)
{
- EMFolderTree *emft = data;
struct _copy_folder_data *cfd;
cfd = g_malloc (sizeof (*cfd));
@@ -2446,10 +2429,8 @@ emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTr
}
static void
-emft_popup_new_folder (EPopup *ep, EPopupItem *pitem, void *data)
+emft_popup_new_folder (GtkWidget *item, EMFolderTree *emft)
{
- EMFolderTree *emft = data;
-
EMFolderTree *folder_tree;
GtkWidget *dialog;
char *uri;
@@ -2574,9 +2555,8 @@ emft_popup_delete_response (GtkWidget *dialog, int response, EMFolderTree *emft)
}
static void
-emft_popup_delete_folder (EPopup *ep, EPopupItem *pitem, void *data)
+emft_popup_delete_folder (GtkWidget *item, EMFolderTree *emft)
{
- EMFolderTree *emft = data;
struct _EMFolderTreePrivate *priv = emft->priv;
GtkTreeSelection *selection;
CamelStore *local, *store;
@@ -2610,9 +2590,8 @@ emft_popup_delete_folder (EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emft_popup_rename_folder (EPopup *ep, EPopupItem *pitem, void *data)
+emft_popup_rename_folder (GtkWidget *item, EMFolderTree *emft)
{
- EMFolderTree *emft = data;
struct _EMFolderTreePrivate *priv = emft->priv;
char *prompt, *full_name, *name, *new_name, *uri;
GtkTreeSelection *selection;
@@ -2707,9 +2686,8 @@ emft_popup_rename_folder (EPopup *ep, EPopupItem *pitem, void *data)
static void
-emft_popup_properties (EPopup *ep, EPopupItem *pitem, void *data)
+emft_popup_properties (GtkWidget *item, EMFolderTree *emft)
{
- EMFolderTree *emft = data;
struct _EMFolderTreePrivate *priv = emft->priv;
GtkTreeSelection *selection;
GtkTreeModel *model;
@@ -2725,40 +2703,34 @@ emft_popup_properties (EPopup *ep, EPopupItem *pitem, void *data)
g_free (uri);
}
-static EPopupItem emft_popup_items[] = {
+static EMPopupItem emft_popup_menu[] = {
#if 0
- { E_POPUP_ITEM, "00.emc.00", N_("_View"), emft_popup_view, NULL, NULL, EM_POPUP_FOLDER_SELECT },
- { E_POPUP_ITEM, "00.emc.01", N_("Open in _New Window"), emft_popup_open_new, NULL, NULL, EM_POPUP_FOLDER_SELECT },
+ { EM_POPUP_ITEM, "00.emc.00", N_("_View"), G_CALLBACK (emft_popup_view), NULL, NULL, EM_POPUP_FOLDER_SELECT },
+ { EM_POPUP_ITEM, "00.emc.01", N_("Open in _New Window"), G_CALLBACK (emft_popup_open_new), NULL, NULL, EM_POPUP_FOLDER_SELECT },
- { E_POPUP_BAR, "10.emc" },
+ { EM_POPUP_BAR, "10.emc" },
#endif
- { E_POPUP_ITEM, "10.emc.00", N_("_Copy..."), emft_popup_copy, NULL, "stock_folder-copy", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT },
- { E_POPUP_ITEM, "10.emc.01", N_("_Move..."), emft_popup_move, NULL, "stock_folder-move", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE },
+ { EM_POPUP_ITEM, "10.emc.00", N_("_Copy..."), G_CALLBACK (emft_popup_copy), NULL, "stock_folder-copy", EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT },
+ { EM_POPUP_ITEM, "10.emc.01", N_("_Move..."), G_CALLBACK (emft_popup_move), NULL, "stock_folder-move", EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE },
- { E_POPUP_BAR, "20.emc" },
+ { EM_POPUP_BAR, "20.emc" },
/* FIXME: need to disable for nochildren folders */
- { E_POPUP_ITEM, "20.emc.00", N_("_New Folder..."), emft_popup_new_folder, NULL, "stock_folder", 0, EM_POPUP_FOLDER_INFERIORS },
+ { EM_POPUP_ITEM, "20.emc.00", N_("_New Folder..."), G_CALLBACK (emft_popup_new_folder), NULL, "stock_folder", EM_POPUP_FOLDER_INFERIORS },
/* FIXME: need to disable for undeletable folders */
- { E_POPUP_ITEM, "20.emc.01", N_("_Delete"), emft_popup_delete_folder, NULL, "stock_delete", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE },
- { E_POPUP_ITEM, "20.emc.01", N_("_Rename..."), emft_popup_rename_folder, NULL, NULL, 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE },
+ { EM_POPUP_ITEM, "20.emc.01", N_("_Delete"), G_CALLBACK (emft_popup_delete_folder), NULL, "stock_delete", EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE },
+ { EM_POPUP_ITEM, "20.emc.01", N_("_Rename..."), G_CALLBACK (emft_popup_rename_folder), NULL, NULL, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE },
- { E_POPUP_BAR, "80.emc" },
- { E_POPUP_ITEM, "80.emc.00", N_("_Properties"), emft_popup_properties, NULL, "stock_folder-properties", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT }
+ { EM_POPUP_BAR, "80.emc" },
+ { EM_POPUP_ITEM, "80.emc.00", N_("_Properties"), G_CALLBACK (emft_popup_properties), NULL, "stock_folder-properties", EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT }
};
-static void
-emft_popup_free(EPopup *ep, GSList *items, void *data)
-{
- g_slist_free(items);
-}
-
static gboolean
-emft_popup (EMFolderTree *emft, GdkEvent *event)
+emft_tree_button_press (GtkTreeView *treeview, GdkEventButton *event, EMFolderTree *emft)
{
- GtkTreeView *treeview;
GtkTreeSelection *selection;
CamelStore *local, *store;
- EMPopupTargetFolder *target;
+ EMPopupTarget *target;
+ GtkTreePath *tree_path;
GtkTreeModel *model;
GtkTreeIter iter;
GSList *menus = NULL;
@@ -2770,13 +2742,29 @@ emft_popup (EMFolderTree *emft, GdkEvent *event)
EMPopup *emp;
int i;
- treeview = emft->priv->treeview;
-
/* this centralises working out when the user's done something */
emft_tree_user_event(treeview, (GdkEvent *)event, emft);
-
- /* FIXME: we really need the folderinfo to build a proper menu */
+
+ if (event->button != 3 && !(event->button == 1 && event->type == GDK_2BUTTON_PRESS))
+ return FALSE;
+
+ if (!gtk_tree_view_get_path_at_pos (treeview, (int) event->x, (int) event->y, &tree_path, NULL, NULL, NULL))
+ return FALSE;
+
+ /* select/focus the row that was right-clicked or double-clicked */
selection = gtk_tree_view_get_selection (treeview);
+ gtk_tree_selection_select_path(selection, tree_path);
+ gtk_tree_view_set_cursor (treeview, tree_path, NULL, FALSE);
+
+ if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
+ emft_tree_row_activated (treeview, tree_path, NULL, emft);
+ gtk_tree_path_free (tree_path);
+ return TRUE;
+ }
+
+ gtk_tree_path_free (tree_path);
+
+ /* FIXME: we really need the folderinfo to build a proper menu */
if (!emft_selection_get_selected (selection, &model, &iter))
return FALSE;
@@ -2812,63 +2800,30 @@ emft_popup (EMFolderTree *emft, GdkEvent *event)
emp = em_popup_new ("com.ximian.mail.storageset.popup.select");
/* FIXME: pass valid fi->flags here */
- target = em_popup_target_new_folder (emp, uri, info_flags, flags);
+ target = em_popup_target_new_folder (uri, info_flags, flags);
- for (i = 0; i < sizeof (emft_popup_items) / sizeof (emft_popup_items[0]); i++)
- menus = g_slist_prepend (menus, &emft_popup_items[i]);
+ for (i = 0; i < sizeof (emft_popup_menu) / sizeof (emft_popup_menu[0]); i++) {
+ EMPopupItem *item = &emft_popup_menu[i];
+
+ item->activate_data = emft;
+ menus = g_slist_prepend (menus, item);
+ }
- e_popup_add_items ((EPopup *)emp, menus, emft_popup_free, emft);
+ em_popup_add_items (emp, menus, (GDestroyNotify) g_slist_free);
- menu = e_popup_create_menu_once ((EPopup *)emp, (EPopupTarget *)target, 0);
+ menu = em_popup_create_menu_once (emp, target, 0, target->mask);
if (event == NULL || event->type == GDK_KEY_PRESS) {
/* FIXME: menu pos function */
- gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
+ gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, event->time);
} else {
- gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button.button, event->button.time);
+ gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button, event->time);
}
g_free (full_name);
g_free (uri);
-
- return TRUE;
-}
-
-static gboolean
-emft_popup_menu (GtkWidget *widget)
-{
- return emft_popup (EM_FOLDER_TREE (widget), NULL);
-}
-
-static gboolean
-emft_tree_button_press (GtkTreeView *treeview, GdkEventButton *event, EMFolderTree *emft)
-{
- GtkTreeSelection *selection;
- GtkTreePath *tree_path;
-
- /* this centralises working out when the user's done something */
- emft_tree_user_event(treeview, (GdkEvent *)event, emft);
- if (event->button != 3 && !(event->button == 1 && event->type == GDK_2BUTTON_PRESS))
- return FALSE;
-
- if (!gtk_tree_view_get_path_at_pos (treeview, (int) event->x, (int) event->y, &tree_path, NULL, NULL, NULL))
- return FALSE;
-
- /* select/focus the row that was right-clicked or double-clicked */
- selection = gtk_tree_view_get_selection (treeview);
- gtk_tree_selection_select_path(selection, tree_path);
- gtk_tree_view_set_cursor (treeview, tree_path, NULL, FALSE);
-
- if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
- emft_tree_row_activated (treeview, tree_path, NULL, emft);
- gtk_tree_path_free (tree_path);
- return TRUE;
- }
-
- gtk_tree_path_free (tree_path);
-
- return emft_popup (emft, (GdkEvent *)event);
+ return TRUE;
}
/* This is called for keyboard and mouse events, it seems the only way
diff --git a/mail/em-folder-view.c b/mail/em-folder-view.c
index ff53fa4eb0..a26c9fc9f1 100644
--- a/mail/em-folder-view.c
+++ b/mail/em-folder-view.c
@@ -77,7 +77,6 @@
#include "em-utils.h"
#include "em-composer-utils.h"
#include "em-marshal.h"
-#include "em-menu.h"
#include <gtkhtml/gtkhtml.h>
#include <gtkhtml/htmlobject.h>
@@ -121,8 +120,6 @@ static void emfv_setting_setup(EMFolderView *emfv);
static void emfv_on_url_cb(GObject *emitter, const char *url, EMFolderView *emfv);
static void emfv_on_url(EMFolderView *emfv, const char *uri, const char *nice_uri);
-static gboolean emfv_popup_menu (GtkWidget *widget);
-
static const EMFolderViewEnable emfv_enable_map[];
struct _EMFolderViewPrivate {
@@ -271,8 +268,6 @@ emfv_class_init(GObjectClass *klass)
((GtkObjectClass *) klass)->destroy = emfv_destroy;
- ((GtkWidgetClass *) klass)->popup_menu = emfv_popup_menu;
-
((EMFolderViewClass *) klass)->update_message_style = TRUE;
((EMFolderViewClass *)klass)->set_folder = emfv_set_folder;
@@ -598,17 +593,22 @@ emfv_selection_clear_event(GtkWidget *widget, GdkEventSelection *event, EMFolder
/* Popup menu
In many cases these are the functions called by the bonobo callbacks too */
+struct _emfv_label_item {
+ EMPopupItem item;
+
+ EMFolderView *emfv;
+ const char *label;
+};
+
static void
-emfv_popup_open(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_open(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
em_folder_view_open_selected(emfv);
}
static void
-emfv_popup_edit (EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_edit (GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids;
if (!em_utils_check_user_can_send_mail((GtkWidget *)emfv))
@@ -619,9 +619,8 @@ emfv_popup_edit (EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_saveas(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_saveas(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids;
uids = message_list_get_selected(emfv->list);
@@ -629,37 +628,32 @@ emfv_popup_saveas(EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_print(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_print(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
em_folder_view_print(emfv, FALSE);
}
static void
-emfv_popup_reply_sender(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_reply_sender(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
emfv_message_reply(emfv, REPLY_MODE_SENDER);
}
static void
-emfv_popup_reply_list(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_reply_list(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
emfv_message_reply(emfv, REPLY_MODE_LIST);
}
static void
-emfv_popup_reply_all(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_reply_all(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
emfv_message_reply(emfv, REPLY_MODE_ALL);
}
static void
-emfv_popup_forward(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_forward(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids;
if (!em_utils_check_user_can_send_mail((GtkWidget *)emfv))
@@ -670,18 +664,16 @@ emfv_popup_forward(EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_flag_followup(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_flag_followup(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids = message_list_get_selected(emfv->list);
em_utils_flag_for_followup((GtkWidget *)emfv, emfv->folder, uids);
}
static void
-emfv_popup_flag_completed(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_flag_completed(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids;
uids = message_list_get_selected(emfv->list);
@@ -689,25 +681,22 @@ emfv_popup_flag_completed(EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_flag_clear(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_flag_clear(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids = message_list_get_selected(emfv->list);
em_utils_flag_for_followup_clear((GtkWidget *)emfv, emfv->folder, uids);
}
static void
-emfv_popup_mark_read(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_mark_read(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
em_folder_view_mark_selected(emfv, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN);
}
static void
-emfv_popup_mark_unread(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_mark_unread(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
em_folder_view_mark_selected(emfv, CAMEL_MESSAGE_SEEN|CAMEL_MESSAGE_DELETED, 0);
if (emfv->priv->seen_id) {
@@ -717,23 +706,20 @@ emfv_popup_mark_unread(EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_mark_important(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_mark_important(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
em_folder_view_mark_selected(emfv, CAMEL_MESSAGE_FLAGGED|CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_FLAGGED);
}
static void
-emfv_popup_mark_unimportant(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_mark_unimportant(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
em_folder_view_mark_selected(emfv, CAMEL_MESSAGE_FLAGGED, 0);
}
static void
-emfv_popup_mark_junk (EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_mark_junk (GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids;
uids = message_list_get_selected(emfv->list);
@@ -747,9 +733,8 @@ emfv_popup_mark_junk (EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_mark_nojunk (EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_mark_nojunk (GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids;
uids = message_list_get_selected(emfv->list);
@@ -763,9 +748,8 @@ emfv_popup_mark_nojunk (EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_delete(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_delete(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids;
uids = message_list_get_selected(emfv->list);
@@ -779,9 +763,8 @@ emfv_popup_delete(EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_undelete(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_undelete(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
em_folder_view_mark_selected(emfv, CAMEL_MESSAGE_DELETED, 0);
}
@@ -810,9 +793,8 @@ emfv_popup_move_cb(const char *uri, void *data)
}
static void
-emfv_popup_move(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_move(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
struct _move_data *d;
d = g_malloc(sizeof(*d));
@@ -825,9 +807,8 @@ emfv_popup_move(EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_copy(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_copy(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
struct _move_data *d;
d = g_malloc(sizeof(*d));
@@ -852,24 +833,20 @@ emfv_set_label(EMFolderView *emfv, const char *label)
}
static void
-emfv_popup_label_clear(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_label_clear(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
emfv_set_label(emfv, NULL);
}
static void
-emfv_popup_label_set(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_label_set(GtkWidget *w, struct _emfv_label_item *item)
{
- EMFolderView *emfv = data;
-
- emfv_set_label(emfv, pitem->user_data);
+ emfv_set_label(item->emfv, item->label);
}
static void
-emfv_popup_add_sender(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_add_sender(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids = message_list_get_selected(emfv->list);
CamelMessageInfo *info;
const char *addr;
@@ -884,18 +861,16 @@ emfv_popup_add_sender(EPopup *ep, EPopupItem *pitem, void *data)
}
static void
-emfv_popup_apply_filters(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_apply_filters(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids = message_list_get_selected(emfv->list);
mail_filter_on_demand(emfv->folder, uids);
}
static void
-emfv_popup_filter_junk(EPopup *ep, EPopupItem *pitem, void *data)
+emfv_popup_filter_junk(GtkWidget *w, EMFolderView *emfv)
{
- EMFolderView *emfv = data;
GPtrArray *uids = message_list_get_selected(emfv->list);
mail_filter_junk(emfv->folder, uids);
@@ -906,9 +881,8 @@ emfv_popup_filter_junk(EPopup *ep, EPopupItem *pitem, void *data)
#define EMFV_POPUP_AUTO_TYPE(autotype, name, type) \
static void \
-name(EPopup *ep, EPopupItem *item, void *data) \
+name(GtkWidget *w, EMFolderView *emfv) \
{ \
- EMFolderView *emfv = data; \
autotype(emfv, type); \
}
@@ -924,87 +898,83 @@ EMFV_POPUP_AUTO_TYPE(filter_type_current, emfv_popup_filter_mlist, AUTO_MLIST)
/* TODO: Move some of these to be 'standard' menu's */
-static EPopupItem emfv_popup_items[] = {
- { E_POPUP_ITEM, "00.emfv.00", N_("_Open"), emfv_popup_open, NULL, NULL, 0 },
- { E_POPUP_ITEM, "00.emfv.01", N_("_Edit as New Message..."), emfv_popup_edit, NULL, NULL, EM_POPUP_SELECT_EDIT },
- { E_POPUP_ITEM, "00.emfv.02", N_("_Save As..."), emfv_popup_saveas, NULL, "stock_save-as", 0 },
- { E_POPUP_ITEM, "00.emfv.03", N_("_Print"), emfv_popup_print, NULL, "stock_print", 0 },
-
- { E_POPUP_BAR, "10.emfv" },
- { E_POPUP_ITEM, "10.emfv.00", N_("_Reply to Sender"), emfv_popup_reply_sender, NULL, "stock_mail-reply", EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "10.emfv.01", N_("Reply to _List"), emfv_popup_reply_list, NULL, NULL, EM_POPUP_SELECT_ONE|EM_POPUP_SELECT_MAILING_LIST },
- { E_POPUP_ITEM, "10.emfv.02", N_("Reply to _All"), emfv_popup_reply_all, NULL, "stock_mail-reply-to-all", EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "10.emfv.03", N_("_Forward"), emfv_popup_forward, NULL, "stock_mail-forward", EM_POPUP_SELECT_MANY },
-
- { E_POPUP_BAR, "20.emfv", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_FLAG_FOLLOWUP|EM_POPUP_SELECT_FLAG_COMPLETED|EM_POPUP_SELECT_FLAG_CLEAR },
- { E_POPUP_ITEM, "20.emfv.00", N_("Follo_w Up..."), emfv_popup_flag_followup, NULL, "stock_mail-flag-for-followup", EM_POPUP_SELECT_FLAG_FOLLOWUP },
- { E_POPUP_ITEM, "20.emfv.01", N_("Fla_g Completed"), emfv_popup_flag_completed, NULL, NULL, EM_POPUP_SELECT_FLAG_COMPLETED },
- { E_POPUP_ITEM, "20.emfv.02", N_("Cl_ear Flag"), emfv_popup_flag_clear, NULL, NULL, EM_POPUP_SELECT_FLAG_CLEAR },
-
- { E_POPUP_BAR, "30.emfv" },
- { E_POPUP_ITEM, "30.emfv.00", N_("Mar_k as Read"), emfv_popup_mark_read, NULL, "stock_mail-open", EM_POPUP_SELECT_MARK_READ },
- { E_POPUP_ITEM, "30.emfv.01", N_("Mark as _Unread"), emfv_popup_mark_unread, NULL, "stock_mail-unread", EM_POPUP_SELECT_MARK_UNREAD },
- { E_POPUP_ITEM, "30.emfv.02", N_("Mark as _Important"), emfv_popup_mark_important, NULL, "stock_mail-priority-high", EM_POPUP_SELECT_MARK_IMPORTANT },
- { E_POPUP_ITEM, "30.emfv.03", N_("_Mark as Unimportant"), emfv_popup_mark_unimportant, NULL, NULL, EM_POPUP_SELECT_MARK_UNIMPORTANT },
- { E_POPUP_ITEM, "30.emfv.04", N_("Mark as _Junk"), emfv_popup_mark_junk, NULL, "stock_spam", EM_POPUP_SELECT_MARK_JUNK },
- { E_POPUP_ITEM, "30.emfv.05", N_("Mark as _Not Junk"), emfv_popup_mark_nojunk, NULL, "stock_not-spam", EM_POPUP_SELECT_MARK_NOJUNK },
-
- { E_POPUP_BAR, "40.emfv" },
- { E_POPUP_ITEM, "40.emfv.00", N_("_Delete"), emfv_popup_delete, NULL, "stock_delete", EM_POPUP_SELECT_DELETE },
- { E_POPUP_ITEM, "40.emfv.01", N_("U_ndelete"), emfv_popup_undelete, NULL, "stock_undelete", EM_POPUP_SELECT_UNDELETE },
-
- { E_POPUP_BAR, "50.emfv" },
- { E_POPUP_ITEM, "50.emfv.00", N_("Mo_ve to Folder..."), emfv_popup_move },
- { E_POPUP_ITEM, "50.emfv.01", N_("_Copy to Folder..."), emfv_popup_copy },
-
- { E_POPUP_BAR, "60.label" },
- { E_POPUP_SUBMENU, "60.label.00", N_("Label") },
- { E_POPUP_IMAGE, "60.label.00/00.label", N_("None"), emfv_popup_label_clear },
- { E_POPUP_BAR, "60.label.00/00.label.00" },
-
- { E_POPUP_BAR, "70.emfv", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_ADD_SENDER },
- { E_POPUP_ITEM, "70.emfv.00", N_("Add Sender to Address_book"), emfv_popup_add_sender, NULL, NULL, EM_POPUP_SELECT_ADD_SENDER },
-
- { E_POPUP_BAR, "80.emfv" },
- { E_POPUP_ITEM, "80.emfv.00", N_("Appl_y Filters"), emfv_popup_apply_filters, NULL, "stock_mail-filters-apply" },
- { E_POPUP_ITEM, "80.emfv.01", N_("F_ilter Junk"), emfv_popup_filter_junk, NULL, "stock_spam" },
-
- { E_POPUP_BAR, "90.filter", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_SUBMENU, "90.filter.00", N_("Crea_te Rule From Message"), NULL, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/00.00", N_("VFolder on _Subject"), emfv_popup_vfolder_subject, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/00.01", N_("VFolder on Se_nder"), emfv_popup_vfolder_sender, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/00.02", N_("VFolder on _Recipients"), emfv_popup_vfolder_recipients, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/00.03", N_("VFolder on Mailing _List"),
- emfv_popup_vfolder_mlist, NULL, NULL, EM_POPUP_SELECT_ONE|EM_POPUP_SELECT_MAILING_LIST },
-
- { E_POPUP_BAR, "90.filter.00/10", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/10.00", N_("Filter on Sub_ject"), emfv_popup_filter_subject, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/10.01", N_("Filter on Sen_der"), emfv_popup_filter_sender, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/10.02", N_("Filter on Re_cipients"), emfv_popup_filter_recipients, NULL, NULL, EM_POPUP_SELECT_ONE },
- { E_POPUP_ITEM, "90.filter.00/10.03", N_("Filter on _Mailing List"),
- emfv_popup_filter_mlist, NULL, NULL, EM_POPUP_SELECT_ONE|EM_POPUP_SELECT_MAILING_LIST },
+static EMPopupItem emfv_popup_menu[] = {
+ { EM_POPUP_ITEM, "00.emfv.00", N_("_Open"), G_CALLBACK(emfv_popup_open), NULL, NULL, 0 },
+ { EM_POPUP_ITEM, "00.emfv.01", N_("_Edit as New Message..."), G_CALLBACK(emfv_popup_edit), NULL, NULL, EM_POPUP_SELECT_EDIT },
+ { EM_POPUP_ITEM, "00.emfv.02", N_("_Save As..."), G_CALLBACK(emfv_popup_saveas), NULL, "stock_save-as", 0 },
+ { EM_POPUP_ITEM, "00.emfv.03", N_("_Print"), G_CALLBACK(emfv_popup_print), NULL, "stock_print", 0 },
+
+ { EM_POPUP_BAR, "10.emfv" },
+ { EM_POPUP_ITEM, "10.emfv.00", N_("_Reply to Sender"), G_CALLBACK(emfv_popup_reply_sender), NULL, "stock_mail-reply", EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "10.emfv.01", N_("Reply to _List"), G_CALLBACK(emfv_popup_reply_list), NULL, NULL, EM_POPUP_SELECT_ONE|EM_POPUP_SELECT_MAILING_LIST },
+ { EM_POPUP_ITEM, "10.emfv.02", N_("Reply to _All"), G_CALLBACK(emfv_popup_reply_all), NULL, "stock_mail-reply-to-all", EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "10.emfv.03", N_("_Forward"), G_CALLBACK(emfv_popup_forward), NULL, "stock_mail-forward", EM_POPUP_SELECT_MANY },
+
+ { EM_POPUP_BAR, "20.emfv", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_FLAG_FOLLOWUP|EM_POPUP_SELECT_FLAG_COMPLETED|EM_POPUP_SELECT_FLAG_CLEAR },
+ { EM_POPUP_ITEM, "20.emfv.00", N_("Follo_w Up..."), G_CALLBACK(emfv_popup_flag_followup), NULL, "stock_mail-flag-for-followup", EM_POPUP_SELECT_FLAG_FOLLOWUP },
+ { EM_POPUP_ITEM, "20.emfv.01", N_("Fla_g Completed"), G_CALLBACK(emfv_popup_flag_completed), NULL, NULL, EM_POPUP_SELECT_FLAG_COMPLETED },
+ { EM_POPUP_ITEM, "20.emfv.02", N_("Cl_ear Flag"), G_CALLBACK(emfv_popup_flag_clear), NULL, NULL, EM_POPUP_SELECT_FLAG_CLEAR },
+
+ { EM_POPUP_BAR, "30.emfv" },
+ { EM_POPUP_ITEM, "30.emfv.00", N_("Mar_k as Read"), G_CALLBACK(emfv_popup_mark_read), NULL, "stock_mail-open", EM_POPUP_SELECT_MARK_READ },
+ { EM_POPUP_ITEM, "30.emfv.01", N_("Mark as _Unread"), G_CALLBACK(emfv_popup_mark_unread), NULL, "stock_mail-unread", EM_POPUP_SELECT_MARK_UNREAD },
+ { EM_POPUP_ITEM, "30.emfv.02", N_("Mark as _Important"), G_CALLBACK(emfv_popup_mark_important), NULL, "stock_mail-priority-high", EM_POPUP_SELECT_MARK_IMPORTANT },
+ { EM_POPUP_ITEM, "30.emfv.03", N_("_Mark as Unimportant"), G_CALLBACK(emfv_popup_mark_unimportant), NULL, NULL, EM_POPUP_SELECT_MARK_UNIMPORTANT },
+ { EM_POPUP_ITEM, "30.emfv.04", N_("Mark as _Junk"), G_CALLBACK(emfv_popup_mark_junk), NULL, "stock_spam", EM_POPUP_SELECT_MARK_JUNK },
+ { EM_POPUP_ITEM, "30.emfv.05", N_("Mark as _Not Junk"), G_CALLBACK(emfv_popup_mark_nojunk), NULL, "stock_not-spam", EM_POPUP_SELECT_MARK_NOJUNK },
+
+ { EM_POPUP_BAR, "40.emfv" },
+ { EM_POPUP_ITEM, "40.emfv.00", N_("_Delete"), G_CALLBACK(emfv_popup_delete), NULL, "stock_delete", EM_POPUP_SELECT_DELETE },
+ { EM_POPUP_ITEM, "40.emfv.01", N_("U_ndelete"), G_CALLBACK(emfv_popup_undelete), NULL, "stock_undelete", EM_POPUP_SELECT_UNDELETE },
+
+ { EM_POPUP_BAR, "50.emfv" },
+ { EM_POPUP_ITEM, "50.emfv.00", N_("Mo_ve to Folder..."), G_CALLBACK(emfv_popup_move) },
+ { EM_POPUP_ITEM, "50.emfv.01", N_("_Copy to Folder..."), G_CALLBACK(emfv_popup_copy) },
+
+ { EM_POPUP_BAR, "60.label" },
+ { EM_POPUP_SUBMENU, "60.label.00", N_("Label") },
+ { EM_POPUP_IMAGE, "60.label.00/00.label", N_("None"), G_CALLBACK(emfv_popup_label_clear) },
+ { EM_POPUP_BAR, "60.label.00/00.label.00" },
+
+ { EM_POPUP_BAR, "70.emfv", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_ADD_SENDER },
+ { EM_POPUP_ITEM, "70.emfv.00", N_("Add Sender to Address_book"), G_CALLBACK(emfv_popup_add_sender), NULL, NULL, EM_POPUP_SELECT_ADD_SENDER },
+
+ { EM_POPUP_BAR, "80.emfv" },
+ { EM_POPUP_ITEM, "80.emfv.00", N_("Appl_y Filters"), G_CALLBACK(emfv_popup_apply_filters), NULL, "stock_mail-filters-apply" },
+ { EM_POPUP_ITEM, "80.emfv.01", N_("F_ilter Junk"), G_CALLBACK(emfv_popup_filter_junk), NULL, "stock_spam" },
+
+ { EM_POPUP_BAR, "90.filter", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_SUBMENU, "90.filter.00", N_("Crea_te Rule From Message"), NULL, NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/00.00", N_("VFolder on _Subject"), G_CALLBACK(emfv_popup_vfolder_subject), NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/00.01", N_("VFolder on Se_nder"), G_CALLBACK(emfv_popup_vfolder_sender), NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/00.02", N_("VFolder on _Recipients"), G_CALLBACK(emfv_popup_vfolder_recipients), NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/00.03", N_("VFolder on Mailing _List"),
+ G_CALLBACK(emfv_popup_vfolder_mlist), NULL, NULL, EM_POPUP_SELECT_ONE|EM_POPUP_SELECT_MAILING_LIST },
+
+ { EM_POPUP_BAR, "90.filter.00/10", NULL, NULL, NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/10.00", N_("Filter on Sub_ject"), G_CALLBACK(emfv_popup_filter_subject), NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/10.01", N_("Filter on Sen_der"), G_CALLBACK(emfv_popup_filter_sender), NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/10.02", N_("Filter on Re_cipients"), G_CALLBACK(emfv_popup_filter_recipients), NULL, NULL, EM_POPUP_SELECT_ONE },
+ { EM_POPUP_ITEM, "90.filter.00/10.03", N_("Filter on _Mailing List"),
+ G_CALLBACK(emfv_popup_filter_mlist), NULL, NULL, EM_POPUP_SELECT_ONE|EM_POPUP_SELECT_MAILING_LIST },
};
static void
-emfv_popup_labels_free(EPopup *ep, GSList *l, void *data)
+emfv_popup_labels_free(void *data)
{
+ GSList *l = data;
+
while (l) {
GSList *n = l->next;
- EPopupItem *item = l->data;
+ struct _emfv_label_item *item = l->data;
- g_free(item->path);
+ g_free(item->item.path);
g_free(item);
g_slist_free_1(l);
l = n;
}
}
-
-static void
-emfv_popup_items_free(EPopup *ep, GSList *items, void *data)
-{
- g_slist_free(items);
-}
static void
emfv_popup(EMFolderView *emfv, GdkEvent *event)
@@ -1012,31 +982,37 @@ emfv_popup(EMFolderView *emfv, GdkEvent *event)
GSList *menus = NULL, *l, *label_list = NULL;
GtkMenu *menu;
EMPopup *emp;
- EMPopupTargetSelect *target;
+ EMPopupTarget *target;
int i;
emp = em_popup_new("com.ximian.mail.folderview.popup.select");
- target = em_folder_view_get_popup_target(emfv, emp);
+ target = em_folder_view_get_popup_target(emfv);
- for (i=0;i<sizeof(emfv_popup_items)/sizeof(emfv_popup_items[0]);i++)
- menus = g_slist_prepend(menus, &emfv_popup_items[i]);
+ for (i=0;i<sizeof(emfv_popup_menu)/sizeof(emfv_popup_menu[0]);i++) {
+ EMPopupItem *item = &emfv_popup_menu[i];
- e_popup_add_items((EPopup *)emp, menus, emfv_popup_items_free, emfv);
+ item->activate_data = emfv;
+ menus = g_slist_prepend(menus, item);
+ }
+
+ em_popup_add_items(emp, menus, (GDestroyNotify)g_slist_free);
i = 1;
for (l = mail_config_get_labels(); l; l = l->next) {
- EPopupItem *item;
+ struct _emfv_label_item *item;
MailConfigLabel *label = l->data;
GdkPixmap *pixmap;
GdkColor colour;
GdkGC *gc;
item = g_malloc0(sizeof(*item));
- item->type = E_POPUP_IMAGE;
- item->path = g_strdup_printf("60.label.00/00.label.%02d", i++);
- item->label = label->name;
- item->activate = emfv_popup_label_set;
- item->user_data = label->tag;
+ item->item.type = EM_POPUP_IMAGE;
+ item->item.path = g_strdup_printf("60.label.00/00.label.%02d", i++);
+ item->item.label = label->name;
+ item->item.activate = G_CALLBACK(emfv_popup_label_set);
+ item->item.activate_data = item;
+ item->emfv = emfv;
+ item->label = label->tag;
gdk_color_parse(label->colour, &colour);
gdk_color_alloc(gdk_colormap_get_system(), &colour);
@@ -1047,19 +1023,19 @@ emfv_popup(EMFolderView *emfv, GdkEvent *event)
gdk_draw_rectangle(pixmap, gc, TRUE, 0, 0, 16, 16);
gdk_gc_unref(gc);
- item->image = gtk_image_new_from_pixmap(pixmap, NULL);
- gtk_widget_show(item->image);
+ item->item.image = gtk_image_new_from_pixmap(pixmap, NULL);
+ gtk_widget_show(item->item.image);
label_list = g_slist_prepend(label_list, item);
}
- e_popup_add_items((EPopup *)emp, label_list, emfv_popup_labels_free, emfv);
+ em_popup_add_items(emp, label_list, emfv_popup_labels_free);
- menu = e_popup_create_menu_once((EPopup *)emp, (EPopupTarget *)target, 0);
+ menu = em_popup_create_menu_once(emp, target, target->mask, target->mask);
if (event == NULL || event->type == GDK_KEY_PRESS) {
/* FIXME: menu pos function */
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, 0, event ? event->key.time : gtk_get_current_event_time());
+ gtk_menu_popup(menu, NULL, NULL, NULL, NULL, 0, event ? event->key.time : time (NULL));
} else {
gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button.button, event->button.time);
}
@@ -1074,7 +1050,7 @@ emfv_popup(EMFolderView *emfv, GdkEvent *event)
static void \
from(BonoboUIComponent *uid, void *data, const char *path) \
{ \
- to(NULL, NULL, data); \
+ to(NULL, (EMFolderView *)data); \
}
EMFV_MAP_CALLBACK(emfv_add_sender_addressbook, emfv_popup_add_sender)
@@ -1646,31 +1622,15 @@ emfv_enable_menus(EMFolderView *emfv)
guint32 disable_mask;
GString *name;
GSList *l;
+ EMPopupTarget *t;
if (emfv->uic == NULL)
return;
- {
- if (emfv->menu) {
- if (emfv->folder) {
- EMMenuTargetSelect *t;
-
- t = em_menu_target_new_select(emfv->menu, emfv->folder, emfv->folder_uri, message_list_get_selected(emfv->list));
- e_menu_update_target((EMenu *)emfv->menu, t);
- } else {
- e_menu_update_target((EMenu *)emfv->menu, NULL);
- }
- }
- }
-
if (emfv->folder) {
- EMPopup *emp = em_popup_new("dummy");
- EMPopupTargetSelect *t;
-
- t = em_folder_view_get_popup_target(emfv, emp);
- disable_mask = t->target.mask;
- e_popup_target_free((EPopup *)emp, t);
- g_object_unref(emp);
+ t = em_folder_view_get_popup_target(emfv);
+ disable_mask = t->mask;
+ em_popup_target_free(t);
} else {
disable_mask = ~0;
}
@@ -1763,9 +1723,6 @@ emfv_activate(EMFolderView *emfv, BonoboUIComponent *uic, int act)
{
struct _EMFolderViewPrivate *p = emfv->priv;
- if (emfv->menu)
- e_menu_activate((EMenu *)emfv->menu, uic, act);
-
if (act) {
em_format_mode_t style;
gboolean state;
@@ -1902,29 +1859,29 @@ int em_folder_view_print(EMFolderView *emfv, int preview)
return 0;
}
-EMPopupTargetSelect *
-em_folder_view_get_popup_target(EMFolderView *emfv, EMPopup *emp)
+EMPopupTarget *
+em_folder_view_get_popup_target(EMFolderView *emfv)
{
- EMPopupTargetSelect *t;
+ EMPopupTarget *t;
- t = em_popup_target_new_select(emp, emfv->folder, emfv->folder_uri, message_list_get_selected(emfv->list));
- t->target.widget = (GtkWidget *)emfv;
+ t = em_popup_target_new_select(emfv->folder, emfv->folder_uri, message_list_get_selected(emfv->list));
+ t->widget = (GtkWidget *)emfv;
if (emfv->list->threaded)
- t->target.mask &= ~EM_FOLDER_VIEW_SELECT_THREADED;
+ t->mask &= ~EM_FOLDER_VIEW_SELECT_THREADED;
if (message_list_hidden(emfv->list) != 0)
- t->target.mask &= ~EM_FOLDER_VIEW_SELECT_HIDDEN;
+ t->mask &= ~EM_FOLDER_VIEW_SELECT_HIDDEN;
if (message_list_can_select(emfv->list, MESSAGE_LIST_SELECT_NEXT, 0, 0))
- t->target.mask &= ~EM_FOLDER_VIEW_SELECT_NEXT_MSG;
+ t->mask &= ~EM_FOLDER_VIEW_SELECT_NEXT_MSG;
if (message_list_can_select(emfv->list, MESSAGE_LIST_SELECT_PREVIOUS, 0, 0))
- t->target.mask &= ~EM_FOLDER_VIEW_SELECT_PREV_MSG;
+ t->mask &= ~EM_FOLDER_VIEW_SELECT_PREV_MSG;
/* See bug #54770 */
if (!emfv->hide_deleted)
- t->target.mask &= ~EM_POPUP_SELECT_DELETE;
+ t->mask &= ~EM_POPUP_SELECT_DELETE;
return t;
}
@@ -2081,6 +2038,10 @@ emfv_list_key_press(ETree *tree, int row, ETreePath path, int col, GdkEvent *ev,
case GDK_ISO_Enter:
em_folder_view_open_selected(emfv);
break;
+ case GDK_Menu:
+ /* FIXME: location of popup */
+ emfv_popup(emfv, NULL);
+ break;
case '!':
uids = message_list_get_selected(emfv->list);
@@ -2103,16 +2064,6 @@ emfv_list_key_press(ETree *tree, int row, ETreePath path, int col, GdkEvent *ev,
return TRUE;
}
-static gboolean
-emfv_popup_menu (GtkWidget *widget)
-{
- EMFolderView *emfv = (EMFolderView *)widget;
-
- emfv_popup (emfv, NULL);
-
- return TRUE;
-}
-
static void
emfv_list_selection_change(ETree *tree, EMFolderView *emfv)
{
@@ -2144,32 +2095,38 @@ emfv_format_link_clicked(EMFormatHTMLDisplay *efhd, const char *uri, EMFolderVie
}
}
+struct _EMFVPopupItem {
+ EMPopupItem item;
+
+ EMFolderView *emfv;
+ char *uri;
+};
+
static void
-emp_uri_popup_link_copy(EPopup *ep, EPopupItem *pitem, void *data)
+emp_uri_popup_link_copy(GtkWidget *w, struct _EMFVPopupItem *item)
{
- EMFolderView *emfv = data;
- struct _EMFolderViewPrivate *p = emfv->priv;
+ struct _EMFolderViewPrivate *p = item->emfv->priv;
g_free(p->selection_uri);
- p->selection_uri = g_strdup(pitem->user_data);
+ p->selection_uri = g_strdup(item->uri);
gtk_selection_owner_set(p->invisible, GDK_SELECTION_PRIMARY, gtk_get_current_event_time());
gtk_selection_owner_set(p->invisible, GDK_SELECTION_CLIPBOARD, gtk_get_current_event_time());
}
-static EPopupItem emfv_uri_popups[] = {
- { E_POPUP_ITEM, "00.uri.01", N_("_Copy Link Location"), emp_uri_popup_link_copy, NULL, NULL, EM_POPUP_URI_NOT_MAILTO },
+static struct _EMFVPopupItem emfv_uri_popups[] = {
+ { { EM_POPUP_ITEM, "00.uri.01", N_("_Copy Link Location"), G_CALLBACK(emp_uri_popup_link_copy), NULL, NULL, EM_POPUP_URI_NOT_MAILTO }, },
};
static void
-emfv_uri_popup_free(EPopup *ep, GSList *list, void *data)
+emfv_uri_popup_free(GSList *list)
{
while (list) {
GSList *n = list->next;
- struct _EPopupItem *item = list->data;
+ struct _EMFVPopupItem *item = list->data;
- g_free(item->user_data);
- item->user_data = NULL;
+ g_free(item->uri);
+ g_object_unref(item->emfv);
g_slist_free_1(list);
list = n;
@@ -2180,7 +2137,7 @@ static int
emfv_format_popup_event(EMFormatHTMLDisplay *efhd, GdkEventButton *event, const char *uri, CamelMimePart *part, EMFolderView *emfv)
{
EMPopup *emp;
- EPopupTarget *target;
+ EMPopupTarget *target;
GtkMenu *menu;
if (uri == NULL && part == NULL) {
@@ -2199,23 +2156,24 @@ emfv_format_popup_event(EMFormatHTMLDisplay *efhd, GdkEventButton *event, const
emp = em_popup_new("com.ximian.mail.folderview.popup.uri");
if (part)
- target = (EPopupTarget *)em_popup_target_new_part(emp, part, NULL);
+ target = em_popup_target_new_part(part, NULL);
else {
GSList *menus = NULL;
int i;
- EMPopupTargetURI *t;
- t = em_popup_target_new_uri(emp, uri);
- target = (EPopupTarget *)t;
+ target = em_popup_target_new_uri(uri);
for (i=0;i<sizeof(emfv_uri_popups)/sizeof(emfv_uri_popups[0]);i++) {
- emfv_uri_popups[i].user_data = g_strdup(t->uri);
+ emfv_uri_popups[i].item.activate_data = &emfv_uri_popups[i];
+ emfv_uri_popups[i].emfv = emfv;
+ g_object_ref(emfv);
+ emfv_uri_popups[i].uri = g_strdup(target->data.uri);
menus = g_slist_prepend(menus, &emfv_uri_popups[i]);
}
- e_popup_add_items((EPopup *)emp, menus, emfv_uri_popup_free, emfv);
+ em_popup_add_items(emp, menus, (GDestroyNotify)emfv_uri_popup_free);
}
- menu = e_popup_create_menu_once((EPopup *)emp, target, 0);
+ menu = em_popup_create_menu_once(emp, target, target->mask, target->mask);
gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time);
return TRUE;
diff --git a/mail/em-format-html-display.c b/mail/em-format-html-display.c
index 6b156daf1d..41f38c3a0b 100644
--- a/mail/em-format-html-display.c
+++ b/mail/em-format-html-display.c
@@ -52,7 +52,12 @@
#include <glade/glade.h>
#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-#include <libgnome/gnome-i18n.h>
+
+#if 0
+#include <libgnomevfs/gnome-vfs-utils.h>
+#include <libgnomevfs/gnome-vfs-mime-utils.h>
+#include <libgnomevfs/gnome-vfs-mime.h>
+#endif
#include <bonobo/bonobo-control-frame.h>
#include <bonobo/bonobo-stream-memory.h>
@@ -1038,35 +1043,21 @@ static void efhd_format_source(EMFormat *emf, CamelStream *stream, CamelMimePart
/* if it hasn't been processed yet, format the attachment */
static void
-efhd_attachment_show(EPopup *ep, EPopupItem *item, void *data)
+efhd_attachment_show(GtkWidget *w, struct _attach_puri *info)
{
- struct _attach_puri *info = data;
-
d(printf("show attachment button called\n"));
info->shown = ~info->shown;
em_format_set_inline(info->puri.format, info->puri.part_id, info->shown);
}
-static void
-efhd_attachment_button_show(GtkWidget *w, void *data)
-{
- efhd_attachment_show(NULL, NULL, data);
-}
-
-static EPopupItem efhd_menu_items[] = {
- { E_POPUP_BAR, "05.display", },
- { E_POPUP_ITEM, "05.display.00", N_("_View Inline"), efhd_attachment_show },
- { E_POPUP_ITEM, "05.display.00", N_("_Hide"), efhd_attachment_show },
+static EMPopupItem efhd_menu_items[] = {
+ { EM_POPUP_BAR, "05.display", },
+ { EM_POPUP_ITEM, "05.display.00", N_("_View Inline"), G_CALLBACK(efhd_attachment_show) },
+ { EM_POPUP_ITEM, "05.display.00", N_("_Hide"), G_CALLBACK(efhd_attachment_show) },
};
static void
-efhd_menu_items_free(EPopup *ep, GSList *items, void *data)
-{
- g_slist_free(items);
-}
-
-static void
efhd_popup_place_widget(GtkMenu *menu, int *x, int *y, gboolean *push_in, gpointer user_data)
{
GtkWidget *w = user_data;
@@ -1082,8 +1073,8 @@ efhd_attachment_popup(GtkWidget *w, GdkEventButton *event, struct _attach_puri *
GtkMenu *menu;
GSList *menus = NULL;
EMPopup *emp;
- EMPopupTargetPart *target;
- EPopupItem *item;
+ EMPopupTarget *target;
+ EMPopupItem *item;
d(printf("attachment popup, button %d\n", event->button));
@@ -1093,20 +1084,22 @@ efhd_attachment_popup(GtkWidget *w, GdkEventButton *event, struct _attach_puri *
}
emp = em_popup_new("com.ximian.mail.formathtmldisplay.popup.part");
- target = em_popup_target_new_part(emp, info->puri.part, info->handle?info->handle->mime_type:NULL);
- target->target.widget = w;
+ target = em_popup_target_new_part(info->puri.part, info->handle?info->handle->mime_type:NULL);
+ target->widget = w;
/* add our local menus */
if (info->handle) {
/* show/hide menus, only if we have an inline handler */
+ efhd_menu_items[0].activate_data = info;
menus = g_slist_prepend(menus, &efhd_menu_items[0]);
item = &efhd_menu_items[info->shown?2:1];
+ item->activate_data = info;
menus = g_slist_prepend(menus, item);
}
- e_popup_add_items((EPopup *)emp, menus, efhd_menu_items_free, info);
+ em_popup_add_items(emp, menus, (GDestroyNotify)g_slist_free);
- menu = e_popup_create_menu_once((EPopup *)emp, (EPopupTarget *)target, 0);
+ menu = em_popup_create_menu_once(emp, target, target->mask, target->mask);
if (event)
gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time);
else
@@ -1224,7 +1217,7 @@ efhd_attachment_button(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObje
button = gtk_button_new();
if (info->handle)
- g_signal_connect(button, "clicked", G_CALLBACK(efhd_attachment_button_show), info);
+ g_signal_connect(button, "clicked", G_CALLBACK(efhd_attachment_show), info);
else {
gtk_widget_set_sensitive(button, FALSE);
GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
diff --git a/mail/em-format-html.c b/mail/em-format-html.c
index 503a3053e2..09d0bc73ff 100644
--- a/mail/em-format-html.c
+++ b/mail/em-format-html.c
@@ -41,7 +41,9 @@
#include <gtkhtml/gtkhtml-stream.h>
#include <gtkhtml/htmlengine.h>
-#include <libgnome/gnome-i18n.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
+#include <libgnomevfs/gnome-vfs-mime-utils.h>
+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
#include <camel/camel-mime-message.h>
#include <camel/camel-stream.h>
diff --git a/mail/em-format.c b/mail/em-format.c
index df5ca50e65..737148fa4c 100644
--- a/mail/em-format.c
+++ b/mail/em-format.c
@@ -31,7 +31,6 @@
#include <libgnomevfs/gnome-vfs-mime.h>
#include <libgnomevfs/gnome-vfs-mime-utils.h>
#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-#include <libgnome/gnome-i18n.h>
#include <e-util/e-msgport.h>
#include <camel/camel-url.h>
@@ -202,10 +201,8 @@ em_format_get_type(void)
* @emfc: EMFormatClass
* @info: Callback information.
*
- * Add a mime type handler to this class. This is only used by
- * implementing classes. The @info.old pointer will automatically be
- * setup to point to the old hanlder if one was already set. This can
- * be used for overrides a fallback.
+ * Add a mime type handler to this class. This is only used by implementing
+ * classes.
*
* When a mime type described by @info is encountered, the callback will
* be invoked. Note that @info may be extended by sub-classes if
@@ -216,36 +213,26 @@ em_format_get_type(void)
void
em_format_class_add_handler(EMFormatClass *emfc, EMFormatHandler *info)
{
- printf("adding format handler to '%s' '%s'\n", g_type_name_from_class((GTypeClass *)emfc), info->mime_type);
- info->old = g_hash_table_lookup(emfc->type_handlers, info->mime_type);
g_hash_table_insert(emfc->type_handlers, info->mime_type, info);
+ /* FIXME: do we care? This is really gui stuff */
+ /*
+ if (info->applications == NULL)
+ info->applications = gnome_vfs_mime_get_short_list_applications(info->mime_type);*/
}
+
/**
* em_format_class_remove_handler:
- * @emfc:
- * @info:
- *
- * Remove a handler. @info must be a value which was previously
- * added.
+ * @emfc: EMFormatClass
+ * @mime_type: mime-type of handler to remove
+ *
+ * Remove a mime type handler from this class. This is only used by
+ * implementing classes.
**/
void
-em_format_class_remove_handler(EMFormatClass *emfc, EMFormatHandler *info)
+em_format_class_remove_handler (EMFormatClass *emfc, const char *mime_type)
{
- EMFormatHandler *current;
-
- /* TODO: thread issues? */
-
- current = g_hash_table_lookup(emfc->type_handlers, info->mime_type);
- if (current == info) {
- current = info->old;
- g_hash_table_insert(emfc->type_handlers, current->mime_type, current);
- } else {
- while (current && current->old != info)
- current = current->old;
- g_return_if_fail(current != NULL);
- current->old = info->old;
- }
+ g_hash_table_remove (emfc->type_handlers, mime_type);
}
/**
@@ -325,8 +312,6 @@ em_format_add_puri(EMFormat *emf, size_t size, const char *cid, CamelMimePart *p
EMFormatPURI *puri;
const char *tmp;
- printf("adding puri for part: %s\n", emf->part_id->str);
-
g_assert(size >= sizeof(*puri));
puri = g_malloc0(size);
@@ -439,13 +424,13 @@ em_format_find_visible_puri(EMFormat *emf, const char *uri)
EMFormatPURI *pw;
struct _EMFormatPURITree *ptree;
- (printf("checking for visible uri '%s'\n", uri));
+ d(printf("checking for visible uri '%s'\n", uri));
ptree = emf->pending_uri_level;
while (ptree) {
pw = (EMFormatPURI *)ptree->uri_list.head;
while (pw->next) {
- (printf(" pw->uri = '%s' pw->cid = '%s\n", pw->uri?pw->uri:"", pw->cid));
+ d(printf(" pw->uri = '%s' pw->cid = '%s\n", pw->uri?pw->uri:"", pw->cid));
if ((pw->uri && !strcmp(pw->uri, uri)) || !strcmp(pw->cid, uri))
return pw;
pw = pw->next;
@@ -482,8 +467,6 @@ emf_clear_puri_node(struct _EMFormatPURITree *node)
pw = (EMFormatPURI *)node->uri_list.head;
pn = pw->next;
while (pn) {
- if (pw->free)
- pw->free(pw);
g_free(pw->uri);
g_free(pw->cid);
g_free(pw->part_id);
diff --git a/mail/em-message-browser.c b/mail/em-message-browser.c
index 98fc1bd319..4f3a2aaa2c 100644
--- a/mail/em-message-browser.c
+++ b/mail/em-message-browser.c
@@ -41,7 +41,6 @@
#include "em-format-html-display.h"
#include "em-message-browser.h"
-#include "em-menu.h"
#include "evolution-shell-component-utils.h" /* Pixmap stuff, sigh */
@@ -176,8 +175,6 @@ GtkWidget *em_message_browser_new(void)
{
EMMessageBrowser *emmb = g_object_new(em_message_browser_get_type(), 0);
- ((EMFolderView *)emmb)->menu = em_menu_new("com.novell.evolution.mail.messagebrowser");
-
return (GtkWidget *)emmb;
}
diff --git a/mail/em-popup.c b/mail/em-popup.c
index 8b580e3147..28e5121c51 100644
--- a/mail/em-popup.c
+++ b/mail/em-popup.c
@@ -40,7 +40,6 @@
#include <libgnome/gnome-url.h>
#include <libgnomevfs/gnome-vfs-mime.h>
-#include <libgnome/gnome-i18n.h>
#include "em-popup.h"
#include "e-util/e-msgport.h"
@@ -64,69 +63,71 @@
#include <gal/util/e-util.h>
-static void emp_standard_menu_factory(EPopup *emp, void *data);
+static void emp_standard_menu_factory(EMPopup *emp, EMPopupTarget *target, void *data);
+
+struct _EMPopupFactory {
+ struct _EMPopupFactory *next, *prev;
+
+ char *menuid;
+ EMPopupFactoryFunc factory;
+ void *factory_data;
+};
+
+struct _menu_node {
+ struct _menu_node *next, *prev;
+
+ GSList *menu;
+ GDestroyNotify freefunc;
+};
+
+struct _EMPopupPrivate {
+ EDList menus;
+};
+
+static EDList emp_factories = E_DLIST_INITIALISER(emp_factories);
static GObjectClass *emp_parent;
static void
emp_init(GObject *o)
{
- /*EMPopup *emp = (EMPopup *)o; */
-}
+ EMPopup *emp = (EMPopup *)o;
+ struct _EMPopupPrivate *p;
-static void
-emp_finalise(GObject *o)
-{
- ((GObjectClass *)emp_parent)->finalize(o);
+ p = emp->priv = g_malloc0(sizeof(struct _EMPopupPrivate));
+
+ e_dlist_init(&p->menus);
}
static void
-emp_target_free(EPopup *ep, EPopupTarget *t)
+emp_finalise(GObject *o)
{
- switch (t->type) {
- case EM_POPUP_TARGET_SELECT: {
- EMPopupTargetSelect *s = (EMPopupTargetSelect *)t;
-
- if (s->folder)
- camel_object_unref(s->folder);
- g_free(s->uri);
- if (s->uids)
- em_utils_uids_free(s->uids);
- break; }
- case EM_POPUP_TARGET_URI: {
- EMPopupTargetURI *s = (EMPopupTargetURI *)t;
+ EMPopup *emp = (EMPopup *)o;
+ struct _EMPopupPrivate *p = emp->priv;
+ struct _menu_node *mnode, *nnode;
- g_free(s->uri);
- break; }
- case EM_POPUP_TARGET_PART: {
- EMPopupTargetPart *s = (EMPopupTargetPart *)t;
+ g_free(emp->menuid);
- camel_object_unref(s->part);
- g_free(s->mime_type);
- break; }
- case EM_POPUP_TARGET_FOLDER: {
- EMPopupTargetFolder *s = (EMPopupTargetFolder *)t;
-
- g_free(s->uri);
- break; }
- case EM_POPUP_TARGET_ATTACHMENTS: {
- EMPopupTargetAttachments *s = (EMPopupTargetAttachments *)t;
+ mnode = (struct _menu_node *)p->menus.head;
+ nnode = mnode->next;
+ while (nnode) {
+ if (mnode->freefunc)
+ mnode->freefunc(mnode->menu);
- g_slist_foreach(s->attachments, (GFunc)g_object_unref, NULL);
- g_slist_free(s->attachments);
- break; }
+ g_free(mnode);
+ mnode = nnode;
+ nnode = nnode->next;
}
- ((EPopupClass *)emp_parent)->target_free(ep, t);
+ g_free(p);
+
+ ((GObjectClass *)emp_parent)->finalize(o);
}
static void
emp_class_init(GObjectClass *klass)
{
klass->finalize = emp_finalise;
- ((EPopupClass *)klass)->target_free = emp_target_free;
-
- e_popup_class_add_factory((EPopupClass *)klass, NULL, emp_standard_menu_factory, NULL);
}
GType
@@ -143,8 +144,11 @@ em_popup_get_type(void)
sizeof(EMPopup), 0,
(GInstanceInitFunc)emp_init
};
- emp_parent = g_type_class_ref(e_popup_get_type());
- type = g_type_register_static(e_popup_get_type(), "EMPopup", &info, 0);
+ emp_parent = g_type_class_ref(G_TYPE_OBJECT);
+ type = g_type_register_static(G_TYPE_OBJECT, "EMPopup", &info, 0);
+
+ /* FIXME: this should probably sit somewhere in global setup */
+ em_popup_static_add_factory(NULL, (EMPopupFactoryFunc)emp_standard_menu_factory, NULL);
}
return type;
@@ -154,12 +158,291 @@ EMPopup *em_popup_new(const char *menuid)
{
EMPopup *emp = g_object_new(em_popup_get_type(), 0);
- e_popup_construct(&emp->popup, menuid);
+ emp->menuid = g_strdup(menuid);
return emp;
}
/**
+ * em_popup_add_items:
+ * @emp:
+ * @items:
+ * @freefunc:
+ *
+ * Add new EMPopupItems to the menu's. Any with the same path
+ * will override previously defined menu items, at menu building
+ * time.
+ **/
+void
+em_popup_add_items(EMPopup *emp, GSList *items, GDestroyNotify freefunc)
+{
+ struct _menu_node *node;
+
+ node = g_malloc(sizeof(*node));
+ node->menu = items;
+ node->freefunc = freefunc;
+ e_dlist_addtail(&emp->priv->menus, (EDListNode *)node);
+}
+
+/**
+ * em_popup_add_static_items:
+ * @emp:
+ * @target: Target of this menu.
+ *
+ * Will load up any matching menu items from an installed
+ * popup factory. If the menuid of @emp is NULL, then this
+ * has no effect.
+ *
+ **/
+void
+em_popup_add_static_items(EMPopup *emp, EMPopupTarget *target)
+{
+ struct _EMPopupFactory *f;
+
+ if (emp->menuid == NULL || target == NULL)
+ return;
+
+ /* setup the menu itself */
+ f = (struct _EMPopupFactory *)emp_factories.head;
+ while (f->next) {
+ if (f->menuid == NULL
+ || !strcmp(f->menuid, emp->menuid)) {
+ f->factory(emp, target, f->factory_data);
+ }
+ f = f->next;
+ }
+}
+
+static int
+emp_cmp(const void *ap, const void *bp)
+{
+ struct _EMPopupItem *a = *((void **)ap);
+ struct _EMPopupItem *b = *((void **)bp);
+
+ return strcmp(a->path, b->path);
+}
+
+/**
+ * em_popup_create:
+ * @menuitems:
+ * @hide_mask: used to hide menu items, not sure of it's utility,
+ * since you could just 'not add them' in the first place. Saves
+ * copying logic anyway.
+ * @disable_mask: used to disable menu items.
+ *
+ * TEMPORARY code to create a menu from a list of items.
+ *
+ * The menu items are merged based on their path element, and
+ * built into a menu tree.
+ *
+ * Return value:
+ **/
+GtkMenu *
+em_popup_create_menu(EMPopup *emp, guint32 hide_mask, guint32 disable_mask)
+{
+ struct _EMPopupPrivate *p = emp->priv;
+ struct _menu_node *mnode, *nnode;
+ GPtrArray *items = g_ptr_array_new();
+ GSList *l;
+ GString *ppath = g_string_new("");
+ GtkMenu *topmenu;
+ GHashTable *menu_hash = g_hash_table_new(g_str_hash, g_str_equal),
+ *group_hash = g_hash_table_new(g_str_hash, g_str_equal);
+ /*char *domain = NULL;*/
+ int i;
+
+ /* FIXME: need to override old ones with new names */
+ mnode = (struct _menu_node *)p->menus.head;
+ nnode = mnode->next;
+ while (nnode) {
+ for (l=mnode->menu; l; l = l->next)
+ g_ptr_array_add(items, l->data);
+ mnode = nnode;
+ nnode = nnode->next;
+ }
+
+ qsort(items->pdata, items->len, sizeof(items->pdata[0]), emp_cmp);
+
+ topmenu = (GtkMenu *)gtk_menu_new();
+ for (i=0;i<items->len;i++) {
+ GtkWidget *label;
+ struct _EMPopupItem *item = items->pdata[i];
+ GtkMenu *thismenu;
+ GtkMenuItem *menuitem;
+ char *tmp;
+
+ /* for bar's, the mask is exclusive or */
+ if (item->mask) {
+ if ((item->type & EM_POPUP_TYPE_MASK) == EM_POPUP_BAR) {
+ if ((item->mask & hide_mask) == item->mask)
+ continue;
+ } else if (item->mask & hide_mask)
+ continue;
+ }
+
+ g_string_truncate(ppath, 0);
+ tmp = strrchr(item->path, '/');
+ if (tmp) {
+ g_string_append_len(ppath, item->path, tmp-item->path);
+ thismenu = g_hash_table_lookup(menu_hash, ppath->str);
+ g_assert(thismenu != NULL);
+ } else {
+ thismenu = topmenu;
+ }
+
+ switch (item->type & EM_POPUP_TYPE_MASK) {
+ case EM_POPUP_ITEM:
+ if (item->image) {
+ GdkPixbuf *pixbuf;
+ GtkWidget *image;
+
+ pixbuf = e_icon_factory_get_icon ((char *)item->image, E_ICON_SIZE_MENU);
+ image = gtk_image_new_from_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+
+ gtk_widget_show(image);
+ menuitem = (GtkMenuItem *)gtk_image_menu_item_new();
+ gtk_image_menu_item_set_image((GtkImageMenuItem *)menuitem, image);
+ } else {
+ menuitem = (GtkMenuItem *)gtk_menu_item_new();
+ }
+ break;
+ case EM_POPUP_TOGGLE:
+ menuitem = (GtkMenuItem *)gtk_check_menu_item_new();
+ gtk_check_menu_item_set_active((GtkCheckMenuItem *)menuitem, item->type & EM_POPUP_ACTIVE);
+ break;
+ case EM_POPUP_RADIO:
+ menuitem = (GtkMenuItem *)gtk_radio_menu_item_new(g_hash_table_lookup(group_hash, ppath->str));
+ g_hash_table_insert(group_hash, ppath->str, gtk_radio_menu_item_get_group((GtkRadioMenuItem *)menuitem));
+ gtk_check_menu_item_set_active((GtkCheckMenuItem *)menuitem, item->type & EM_POPUP_ACTIVE);
+ break;
+ case EM_POPUP_IMAGE:
+ menuitem = (GtkMenuItem *)gtk_image_menu_item_new();
+ gtk_image_menu_item_set_image((GtkImageMenuItem *)menuitem, item->image);
+ break;
+ case EM_POPUP_SUBMENU: {
+ GtkMenu *submenu = (GtkMenu *)gtk_menu_new();
+
+ g_hash_table_insert(menu_hash, item->path, submenu);
+ menuitem = (GtkMenuItem *)gtk_menu_item_new();
+ gtk_menu_item_set_submenu(menuitem, (GtkWidget *)submenu);
+ break; }
+ case EM_POPUP_BAR:
+ /* TODO: double-bar, end-bar stuff? */
+ menuitem = (GtkMenuItem *)gtk_separator_menu_item_new();
+ break;
+ default:
+ continue;
+ }
+
+ if (item->label) {
+ label = gtk_label_new_with_mnemonic(_(item->label));
+ gtk_misc_set_alignment((GtkMisc *)label, 0.0, 0.5);
+ gtk_widget_show(label);
+ gtk_container_add((GtkContainer *)menuitem, label);
+ }
+
+ if (item->activate)
+ g_signal_connect(menuitem, "activate", item->activate, item->activate_data);
+
+ gtk_menu_shell_append((GtkMenuShell *)thismenu, (GtkWidget *)menuitem);
+
+ if (item->mask & disable_mask)
+ gtk_widget_set_sensitive((GtkWidget *)menuitem, FALSE);
+
+ gtk_widget_show((GtkWidget *)menuitem);
+ }
+
+ g_string_free(ppath, TRUE);
+ g_ptr_array_free(items, TRUE);
+ g_hash_table_destroy(menu_hash);
+ g_hash_table_destroy(group_hash);
+
+ return topmenu;
+}
+
+static void
+emp_popup_done(GtkWidget *w, EMPopup *emp)
+{
+ gtk_widget_destroy(w);
+ g_object_unref(emp);
+}
+
+/**
+ * em_popup_create_menu_once:
+ * @emp: EMPopup, once the menu is shown, this cannot be
+ * considered a valid pointer.
+ * @target: If set, the target of the selection. Static menu
+ * items will be added. The target will be freed once complete.
+ * @hide_mask:
+ * @disable_mask:
+ *
+ * Like popup_create_menu, but automatically sets up the menu
+ * so that it is destroyed once a selection takes place, and
+ * the EMPopup is unreffed.
+ *
+ * Return value: A menu, to popup.
+ **/
+GtkMenu *
+em_popup_create_menu_once(EMPopup *emp, EMPopupTarget *target, guint32 hide_mask, guint32 disable_mask)
+{
+ GtkMenu *menu;
+
+ if (target)
+ em_popup_add_static_items(emp, target);
+
+ menu = em_popup_create_menu(emp, hide_mask, disable_mask);
+
+ if (target)
+ g_signal_connect_swapped(menu, "selection_done", G_CALLBACK(em_popup_target_free), target);
+ g_signal_connect(menu, "selection_done", G_CALLBACK(emp_popup_done), emp);
+
+ return menu;
+}
+
+/* ********************************************************************** */
+
+/**
+ * em_popup_static_add_factory:
+ * @menuid:
+ * @func:
+ * @data:
+ *
+ * Add a popup factory which will be called to add_items() any
+ * extra menu's if wants to do the current PopupTarget.
+ *
+ * TODO: Make the menuid a pattern?
+ *
+ * Return value: A handle to the factory.
+ **/
+EMPopupFactory *
+em_popup_static_add_factory(const char *menuid, EMPopupFactoryFunc func, void *data)
+{
+ struct _EMPopupFactory *f = g_malloc0(sizeof(*f));
+
+ f->menuid = g_strdup(menuid);
+ f->factory = func;
+ f->factory_data = data;
+ e_dlist_addtail(&emp_factories, (EDListNode *)f);
+
+ return f;
+}
+
+/**
+ * em_popup_static_remove_factory:
+ * @f:
+ *
+ * Remove a popup factory.
+ **/
+void
+em_popup_static_remove_factory(EMPopupFactory *f)
+{
+ e_dlist_remove((EDListNode *)f);
+ g_free(f->menuid);
+ g_free(f);
+}
+
+/**
* em_popup_target_new_select:
* @folder: The selection will ref this for the life of it.
* @folder_uri:
@@ -169,20 +452,21 @@ EMPopup *em_popup_new(const char *menuid)
*
* Return value:
**/
-EMPopupTargetSelect *
-em_popup_target_new_select(EMPopup *emp, struct _CamelFolder *folder, const char *folder_uri, GPtrArray *uids)
+EMPopupTarget *
+em_popup_target_new_select(struct _CamelFolder *folder, const char *folder_uri, GPtrArray *uids)
{
- EMPopupTargetSelect *t = e_popup_target_new(&emp->popup, EM_POPUP_TARGET_SELECT, sizeof(*t));
+ EMPopupTarget *t = g_malloc0(sizeof(*t));
guint32 mask = ~0;
int i;
const char *tmp;
- t->uids = uids;
- t->folder = folder;
- t->uri = g_strdup(folder_uri);
+ t->type = EM_POPUP_TARGET_SELECT;
+ t->data.select.uids = uids;
+ t->data.select.folder = folder;
+ t->data.select.folder_uri = g_strdup(folder_uri);
if (folder == NULL) {
- t->target.mask = mask;
+ t->mask = mask;
return t;
}
@@ -247,18 +531,19 @@ em_popup_target_new_select(EMPopup *emp, struct _CamelFolder *folder, const char
camel_folder_free_message_info(folder, info);
}
- t->target.mask = mask;
+ t->mask = mask;
return t;
}
-EMPopupTargetURI *
-em_popup_target_new_uri(EMPopup *emp, const char *uri)
+EMPopupTarget *
+em_popup_target_new_uri(const char *uri)
{
- EMPopupTargetURI *t = e_popup_target_new(&emp->popup, EM_POPUP_TARGET_URI, sizeof(*t));
+ EMPopupTarget *t = g_malloc0(sizeof(*t));
guint32 mask = ~0;
- t->uri = g_strdup(uri);
+ t->type = EM_POPUP_TARGET_URI;
+ t->data.uri = g_strdup(uri);
if (g_ascii_strncasecmp(uri, "http:", 5) == 0
|| g_ascii_strncasecmp(uri, "https:", 6) == 0)
@@ -268,46 +553,48 @@ em_popup_target_new_uri(EMPopup *emp, const char *uri)
else
mask &= ~EM_POPUP_URI_NOT_MAILTO;
- t->target.mask = mask;
+ t->mask = mask;
return t;
}
-EMPopupTargetPart *
-em_popup_target_new_part(EMPopup *emp, struct _CamelMimePart *part, const char *mime_type)
+EMPopupTarget *
+em_popup_target_new_part(struct _CamelMimePart *part, const char *mime_type)
{
- EMPopupTargetPart *t = e_popup_target_new(&emp->popup, EM_POPUP_TARGET_PART, sizeof(*t));
+ EMPopupTarget *t = g_malloc0(sizeof(*t));
guint32 mask = ~0;
- t->part = part;
+ t->type = EM_POPUP_TARGET_PART;
+ t->data.part.part = part;
camel_object_ref(part);
if (mime_type)
- t->mime_type = g_strdup(mime_type);
+ t->data.part.mime_type = g_strdup(mime_type);
else
- t->mime_type = camel_data_wrapper_get_mime_type((CamelDataWrapper *)part);
+ t->data.part.mime_type = camel_data_wrapper_get_mime_type((CamelDataWrapper *)part);
- camel_strdown(t->mime_type);
+ camel_strdown(t->data.part.mime_type);
if (CAMEL_IS_MIME_MESSAGE(camel_medium_get_content_object((CamelMedium *)part)))
mask &= ~EM_POPUP_PART_MESSAGE;
- if (strncmp(t->mime_type, "image/", 6) == 0)
+ if (strncmp(t->data.part.mime_type, "image/", 6) == 0)
mask &= ~EM_POPUP_PART_IMAGE;
- t->target.mask = mask;
+ t->mask = mask;
return t;
}
/* TODO: This should be based on the CamelFolderInfo, but ... em-folder-tree doesn't keep it? */
-EMPopupTargetFolder *
-em_popup_target_new_folder (EMPopup *emp, const char *uri, guint32 info_flags, guint32 popup_flags)
+EMPopupTarget *
+em_popup_target_new_folder (const char *uri, guint32 info_flags, guint32 popup_flags)
{
- EMPopupTargetFolder *t = e_popup_target_new(&emp->popup, EM_POPUP_TARGET_FOLDER, sizeof(*t));
+ EMPopupTarget *t = g_malloc0(sizeof(*t));
guint32 mask = ~0;
CamelURL *url;
- t->uri = g_strdup(uri);
+ t->type = EM_POPUP_TARGET_FOLDER;
+ t->data.folder.folder_uri = g_strdup(uri);
if (popup_flags & EM_POPUP_FOLDER_STORE)
mask &= ~(EM_POPUP_FOLDER_STORE|EM_POPUP_FOLDER_INFERIORS);
@@ -342,63 +629,91 @@ em_popup_target_new_folder (EMPopup *emp, const char *uri, guint32 info_flags, g
camel_url_free(url);
done:
- t->target.mask = mask;
+ t->mask = mask;
return t;
}
-/**
- * em_popup_target_new_attachments:
- * @emp:
- * @attachments: A list of EMsgComposerAttachment objects, reffed for
- * the list. Will be unreff'd once finished with.
- *
- * Owns the list @attachments and their items after they're passed in.
- *
- * Return value:
- **/
-EMPopupTargetAttachments *
-em_popup_target_new_attachments(EMPopup *emp, GSList *attachments)
+void
+em_popup_target_free(EMPopupTarget *t)
{
- EMPopupTargetAttachments *t = e_popup_target_new(&emp->popup, EM_POPUP_TARGET_ATTACHMENTS, sizeof(*t));
- guint32 mask = ~0;
- int len = g_slist_length(attachments);
-
- t->attachments = attachments;
- if (len > 0)
- mask &= ~ EM_POPUP_ATTACHMENTS_MANY;
- if (len == 1)
- mask &= ~ EM_POPUP_ATTACHMENTS_ONE;
- t->target.mask = mask;
+ switch (t->type) {
+ case EM_POPUP_TARGET_SELECT:
+ if (t->data.select.folder)
+ camel_object_unref(t->data.select.folder);
+ g_free(t->data.select.folder_uri);
+ if (t->data.select.uids)
+ em_utils_uids_free(t->data.select.uids);
+ break;
+ case EM_POPUP_TARGET_URI:
+ g_free(t->data.uri);
+ break;
+ case EM_POPUP_TARGET_PART:
+ camel_object_unref(t->data.part.part);
+ g_free(t->data.part.mime_type);
+ break;
+ case EM_POPUP_TARGET_FOLDER:
+ g_free(t->data.folder.folder_uri);
+ break;
+ }
- return t;
+ g_free(t);
}
/* ********************************************************************** */
+#if 0
+/* TODO: flesh these out where possible */
+static void
+emp_popup_open(GtkWidget *w, EMFolderView *emfv)
+{
+ em_folder_view_open_selected(emfv);
+}
+
+static void
+emp_popup_edit (GtkWidget *w, EMPopupTarget *t)
+{
+ if (!em_utils_check_user_can_send_mail(t->widget))
+ return;
+
+ em_utils_edit_messages(t->widget, t->data.select.folder, em_utils_uids_copy(t->data.select.uids), FALSE);
+}
+
static void
-emp_part_popup_saveas(EPopup *ep, EPopupItem *item, void *data)
+emp_popup_saveas(GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetPart *t = (EMPopupTargetPart *)ep->target;
+ em_utils_save_messages(t->widget, t->data.select.folder, em_utils_uids_copy(t->data.select.uids));
+}
- em_utils_save_part(ep->target->widget, _("Save As..."), t->part);
+static EMPopupItem emp_standard_select_popups[] = {
+ /*{ EM_POPUP_ITEM, "00.select.00", N_("_Open"), G_CALLBACK(emp_popup_open), NULL, NULL, 0 },*/
+ { EM_POPUP_ITEM, "00.select.01", N_("_Edit as New Message..."), G_CALLBACK(emp_popup_edit), NULL, NULL, EM_POPUP_SELECT_EDIT },
+ { EM_POPUP_ITEM, "00.select.02", N_("_Save As..."), G_CALLBACK(emp_popup_saveas), NULL, "stock_save-as", 0 },
+};
+#endif
+
+/* ********************************************************************** */
+
+static void
+emp_part_popup_saveas(GtkWidget *w, EMPopupTarget *t)
+{
+ em_utils_save_part(w, _("Save As..."), t->data.part.part);
}
static void
-emp_part_popup_set_background(EPopup *ep, EPopupItem *item, void *data)
+emp_part_popup_set_background(GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetPart *t = (EMPopupTargetPart *)ep->target;
GConfClient *gconf;
char *str, *filename, *path, *extension;
unsigned int i=1;
- filename = g_strdup(camel_mime_part_get_filename(t->part));
+ filename = g_strdup(camel_mime_part_get_filename(t->data.part.part));
/* if filename is blank, create a default filename based on MIME type */
if (!filename || !filename[0]) {
CamelContentType *ct;
- ct = camel_mime_part_get_content_type(t->part);
+ ct = camel_mime_part_get_content_type(t->data.part.part);
g_free (filename);
filename = g_strdup_printf (_("untitled_image.%s"), ct->subtype);
}
@@ -422,7 +737,7 @@ emp_part_popup_set_background(EPopup *ep, EPopupItem *item, void *data)
g_free(filename);
- if (em_utils_save_part_to_file(ep->target->widget, path, t->part)) {
+ if (em_utils_save_part_to_file(w, path, t->data.part.part)) {
gconf = gconf_client_get_default();
/* if the filename hasn't changed, blank the filename before
@@ -452,68 +767,64 @@ emp_part_popup_set_background(EPopup *ep, EPopupItem *item, void *data)
}
static void
-emp_part_popup_reply_sender(EPopup *ep, EPopupItem *item, void *data)
+emp_part_popup_reply_sender (GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetPart *t = (EMPopupTargetPart *)ep->target;
CamelMimeMessage *message;
- message = (CamelMimeMessage *)camel_medium_get_content_object((CamelMedium *)t->part);
- em_utils_reply_to_message(NULL, NULL, message, REPLY_MODE_SENDER, NULL);
+ message = (CamelMimeMessage *) camel_medium_get_content_object ((CamelMedium *) t->data.part.part);
+ em_utils_reply_to_message (NULL, NULL, message, REPLY_MODE_SENDER, NULL);
}
static void
-emp_part_popup_reply_list (EPopup *ep, EPopupItem *item, void *data)
+emp_part_popup_reply_list (GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetPart *t = (EMPopupTargetPart *)ep->target;
CamelMimeMessage *message;
- message = (CamelMimeMessage *)camel_medium_get_content_object((CamelMedium *)t->part);
- em_utils_reply_to_message(NULL, NULL, message, REPLY_MODE_LIST, NULL);
+ message = (CamelMimeMessage *) camel_medium_get_content_object ((CamelMedium *) t->data.part.part);
+ em_utils_reply_to_message (NULL, NULL, message, REPLY_MODE_LIST, NULL);
}
static void
-emp_part_popup_reply_all (EPopup *ep, EPopupItem *item, void *data)
+emp_part_popup_reply_all (GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetPart *t = (EMPopupTargetPart *)ep->target;
CamelMimeMessage *message;
- message = (CamelMimeMessage *)camel_medium_get_content_object((CamelMedium *)t->part);
- em_utils_reply_to_message(NULL, NULL, message, REPLY_MODE_ALL, NULL);
+ message = (CamelMimeMessage *) camel_medium_get_content_object ((CamelMedium *) t->data.part.part);
+ em_utils_reply_to_message (NULL, NULL, message, REPLY_MODE_ALL, NULL);
}
static void
-emp_part_popup_forward (EPopup *ep, EPopupItem *item, void *data)
+emp_part_popup_forward (GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetPart *t = (EMPopupTargetPart *)ep->target;
CamelMimeMessage *message;
/* TODO: have a emfv specific override so we can get the parent folder uri */
- message = (CamelMimeMessage *)camel_medium_get_content_object((CamelMedium *) t->part);
- em_utils_forward_message(message, NULL);
+ message = (CamelMimeMessage *) camel_medium_get_content_object ((CamelMedium *) t->data.part.part);
+ em_utils_forward_message (message, NULL);
}
static EMPopupItem emp_standard_object_popups[] = {
- { E_POPUP_ITEM, "00.part.00", N_("_Save As..."), emp_part_popup_saveas, NULL, "stock_save-as", 0 },
- { E_POPUP_ITEM, "00.part.10", N_("Set as _Background"), emp_part_popup_set_background, NULL, NULL, EM_POPUP_PART_IMAGE },
- { E_POPUP_BAR, "10.part", NULL, NULL, NULL, NULL, EM_POPUP_PART_MESSAGE },
- { E_POPUP_ITEM, "10.part.00", N_("_Reply to sender"), emp_part_popup_reply_sender, NULL, "stock_mail-reply" , EM_POPUP_PART_MESSAGE },
- { E_POPUP_ITEM, "10.part.01", N_("Reply to _List"), emp_part_popup_reply_list, NULL, NULL, EM_POPUP_PART_MESSAGE},
- { E_POPUP_ITEM, "10.part.03", N_("Reply to _All"), emp_part_popup_reply_all, NULL, "stock_mail-reply-to-all", EM_POPUP_PART_MESSAGE},
- { E_POPUP_BAR, "20.part", NULL, NULL, NULL, NULL, EM_POPUP_PART_MESSAGE },
- { E_POPUP_ITEM, "20.part.00", N_("_Forward"), emp_part_popup_forward, NULL, "stock_mail-forward", EM_POPUP_PART_MESSAGE },
+ { EM_POPUP_ITEM, "00.part.00", N_("_Save As..."), G_CALLBACK(emp_part_popup_saveas), NULL, "stock_save-as", 0 },
+ { EM_POPUP_ITEM, "00.part.10", N_("Set as _Background"), G_CALLBACK(emp_part_popup_set_background), NULL, NULL, EM_POPUP_PART_IMAGE },
+ { EM_POPUP_BAR, "10.part", NULL, NULL, NULL, NULL, EM_POPUP_PART_MESSAGE },
+ { EM_POPUP_ITEM, "10.part.00", N_("_Reply to sender"), G_CALLBACK(emp_part_popup_reply_sender), NULL, "stock_mail-reply" , EM_POPUP_PART_MESSAGE },
+ { EM_POPUP_ITEM, "10.part.01", N_("Reply to _List"), G_CALLBACK(emp_part_popup_reply_list), NULL, NULL, EM_POPUP_PART_MESSAGE},
+ { EM_POPUP_ITEM, "10.part.03", N_("Reply to _All"), G_CALLBACK(emp_part_popup_reply_all), NULL, "stock_mail-reply-to-all", EM_POPUP_PART_MESSAGE},
+ { EM_POPUP_BAR, "20.part", NULL, NULL, NULL, NULL, EM_POPUP_PART_MESSAGE },
+ { EM_POPUP_ITEM, "20.part.00", N_("_Forward"), G_CALLBACK(emp_part_popup_forward), NULL, "stock_mail-forward", EM_POPUP_PART_MESSAGE },
+
};
-static const EPopupItem emp_standard_part_apps_bar = { E_POPUP_BAR, "99.object" };
+static const EMPopupItem emp_standard_part_apps_bar = { EM_POPUP_BAR, "99.object" };
/* ********************************************************************** */
static void
-emp_uri_popup_link_open(EPopup *ep, EPopupItem *item, void *data)
+emp_uri_popup_link_open(GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target;
GError *err = NULL;
- gnome_url_show(t->uri, &err);
+ gnome_url_show(t->data.uri, &err);
if (err) {
g_warning("gnome_url_show: %s", err->message);
g_error_free(err);
@@ -521,36 +832,33 @@ emp_uri_popup_link_open(EPopup *ep, EPopupItem *item, void *data)
}
static void
-emp_uri_popup_address_send(EPopup *ep, EPopupItem *item, void *data)
+emp_uri_popup_address_send (GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target;
-
/* TODO: have an emfv specific override to get the from uri */
- em_utils_compose_new_message_with_mailto(t->uri, NULL);
+ em_utils_compose_new_message_with_mailto (t->data.uri, NULL);
}
static void
-emp_uri_popup_address_add(EPopup *ep, EPopupItem *item, void *data)
+emp_uri_popup_address_add(GtkWidget *w, EMPopupTarget *t)
{
- EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target;
CamelURL *url;
- url = camel_url_new(t->uri, NULL);
+ url = camel_url_new(t->data.uri, NULL);
if (url == NULL) {
- g_warning("cannot parse url '%s'", t->uri);
+ g_warning("cannot parse url '%s'", t->data.uri);
return;
}
if (url->path && url->path[0])
- em_utils_add_address(ep->target->widget, url->path);
+ em_utils_add_address(w, url->path);
camel_url_free(url);
}
-static EPopupItem emp_standard_uri_popups[] = {
- { E_POPUP_ITEM, "00.uri.00", N_("_Open Link in Browser"), emp_uri_popup_link_open, NULL, NULL, EM_POPUP_URI_NOT_MAILTO },
- { E_POPUP_ITEM, "00.uri.10", N_("Se_nd message to..."), emp_uri_popup_address_send, NULL, NULL, EM_POPUP_URI_MAILTO },
- { E_POPUP_ITEM, "00.uri.20", N_("_Add to Addressbook"), emp_uri_popup_address_add, NULL, NULL, EM_POPUP_URI_MAILTO },
+static EMPopupItem emp_standard_uri_popups[] = {
+ { EM_POPUP_ITEM, "00.uri.00", N_("_Open Link in Browser"), G_CALLBACK(emp_uri_popup_link_open), NULL, NULL, EM_POPUP_URI_NOT_MAILTO },
+ { EM_POPUP_ITEM, "00.uri.10", N_("Se_nd message to..."), G_CALLBACK(emp_uri_popup_address_send), NULL, NULL, EM_POPUP_URI_MAILTO },
+ { EM_POPUP_ITEM, "00.uri.20", N_("_Add to Addressbook"), G_CALLBACK(emp_uri_popup_address_add), NULL, NULL, EM_POPUP_URI_MAILTO },
};
/* ********************************************************************** */
@@ -559,21 +867,23 @@ static EPopupItem emp_standard_uri_popups[] = {
#include <libgnomevfs/gnome-vfs-mime-handlers.h>
- EMPopupTargetPart *target;
+struct _open_in_item {
+ EMPopupItem item;
+ EMPopupTarget *target;
+ GnomeVFSMimeApplication *app;
+};
static void
-emp_apps_open_in(EPopup *ep, EPopupItem *item, void *data)
+emp_apps_open_in(GtkWidget *w, struct _open_in_item *item)
{
char *path;
- EMPopupTargetPart *target = (EMPopupTargetPart *)ep->target;
- path = em_utils_temp_save_part(target->target.widget, target->part);
+ path = em_utils_temp_save_part(item->target->widget, item->target->data.part.part);
if (path) {
- GnomeVFSMimeApplication *app = item->user_data;
- int douri = (app->expects_uris == GNOME_VFS_MIME_APPLICATION_ARGUMENT_TYPE_URIS);
+ int douri = (item->app->expects_uris == GNOME_VFS_MIME_APPLICATION_ARGUMENT_TYPE_URIS);
char *command;
- if (app->requires_terminal) {
+ if (item->app->requires_terminal) {
char *term, *args = NULL;
GConfClient *gconf;
@@ -586,11 +896,11 @@ emp_apps_open_in(EPopup *ep, EPopupItem *item, void *data)
return;
command = g_strdup_printf ("%s%s%s %s %s%s &", term, args ? " " : "", args ? args : "",
- app->command, douri ? "file://" : "", path);
+ item->app->command, douri ? "file://" : "", path);
g_free (term);
g_free (args);
} else {
- command = g_strdup_printf ("%s %s%s &", app->command, douri ? "file://" : "", path);
+ command = g_strdup_printf ("%s %s%s &", item->app->command, douri ? "file://" : "", path);
}
/* FIXME: Do not use system here */
@@ -601,14 +911,14 @@ emp_apps_open_in(EPopup *ep, EPopupItem *item, void *data)
}
static void
-emp_apps_popup_free(EPopup *ep, GSList *free_list, void *data)
+emp_apps_popup_free(GSList *free_list)
{
while (free_list) {
GSList *n = free_list->next;
- EPopupItem *item = free_list->data;
+ struct _open_in_item *item = free_list->data;
- g_free(item->path);
- g_free(item->label);
+ g_free(item->item.path);
+ g_free(item->item.label);
g_free(item);
g_slist_free_1(free_list);
@@ -617,19 +927,13 @@ emp_apps_popup_free(EPopup *ep, GSList *free_list, void *data)
}
static void
-emp_standard_items_free(EPopup *ep, GSList *items, void *data)
-{
- g_slist_free(items);
-}
-
-static void
-emp_standard_menu_factory(EPopup *emp, void *data)
+emp_standard_menu_factory(EMPopup *emp, EMPopupTarget *target, void *data)
{
int i, len;
- EPopupItem *items;
+ EMPopupItem *items;
GSList *menus = NULL;
- switch (emp->target->type) {
+ switch (target->type) {
#if 0
case EM_POPUP_TARGET_SELECT:
return;
@@ -637,21 +941,18 @@ emp_standard_menu_factory(EPopup *emp, void *data)
len = LEN(emp_standard_select_popups);
break;
#endif
- case EM_POPUP_TARGET_URI: {
- /*EMPopupTargetURI *t = (EMPopupTargetURI *)target;*/
-
+ case EM_POPUP_TARGET_URI:
items = emp_standard_uri_popups;
len = LEN(emp_standard_uri_popups);
- break; }
+ break;
case EM_POPUP_TARGET_PART: {
- EMPopupTargetPart *t = (EMPopupTargetPart *)emp->target;
- GList *apps = gnome_vfs_mime_get_short_list_applications(t->mime_type);
+ GList *apps = gnome_vfs_mime_get_short_list_applications(target->data.part.mime_type);
/* FIXME: use the snoop_part stuff from em-format.c */
- if (apps == NULL && strcmp(t->mime_type, "application/octet-stream") == 0) {
+ if (apps == NULL && strcmp(target->data.part.mime_type, "application/octet-stream") == 0) {
const char *filename, *name_type;
- filename = camel_mime_part_get_filename(t->part);
+ filename = camel_mime_part_get_filename(target->data.part.part);
if (filename) {
/* GNOME-VFS will misidentify TNEF attachments as MPEG */
@@ -673,23 +974,25 @@ emp_standard_menu_factory(EPopup *emp, void *data)
for (l = apps, i = 0; l; l = l->next, i++) {
GnomeVFSMimeApplication *app = l->data;
- EPopupItem *item;
+ struct _open_in_item *item;
if (app->requires_terminal)
continue;
item = g_malloc0(sizeof(*item));
- item->type = E_POPUP_ITEM;
- item->path = g_strdup_printf("99.object.%02d", i);
- item->label = g_strdup_printf(_("Open in %s..."), app->name);
- item->activate = emp_apps_open_in;
- item->user_data = app;
+ item->item.type = EM_POPUP_ITEM;
+ item->item.path = g_strdup_printf("99.object.%02d", i);
+ item->item.label = g_strdup_printf(_("Open in %s..."), app->name);
+ item->item.activate = G_CALLBACK(emp_apps_open_in);
+ item->item.activate_data = item;
+ item->target = target;
+ item->app = app;
open_menus = g_slist_prepend(open_menus, item);
}
if (open_menus)
- e_popup_add_items(emp, open_menus, emp_apps_popup_free, NULL);
+ em_popup_add_items(emp, open_menus, (GDestroyNotify)emp_apps_popup_free);
g_string_free(label, TRUE);
g_list_free(apps);
@@ -704,139 +1007,12 @@ emp_standard_menu_factory(EPopup *emp, void *data)
}
for (i=0;i<len;i++) {
- if ((items[i].visible & emp->target->mask) == 0)
+ if ((items[i].mask & target->mask) == 0) {
+ items[i].activate_data = target;
menus = g_slist_prepend(menus, &items[i]);
+ }
}
if (menus)
- e_popup_add_items(emp, menus, emp_standard_items_free, NULL);
-}
-
-/* ********************************************************************** */
-
-/* Popup menu plugin handler */
-
-/*
-<e-plugin
- class="com.ximian.mail.plugin.popup:1.0"
- id="com.ximian.mail.plugin.popup.item:1.0"
- type="shlib"
- location="/opt/gnome2/lib/camel/1.0/libcamelimap.so"
- name="imap"
- description="IMAP4 and IMAP4v1 mail store">
- <hook class="com.ximian.mail.popupMenu:1.0"
- handler="HandlePopup">
- <menu id="any" target="select">
- <item
- type="item|toggle|radio|image|submenu|bar"
- active
- path="foo/bar"
- label="label"
- icon="foo"
- mask="select_one"
- activate="emp_view_emacs"/>
- </menu>
- </extension>
-
-*/
-
-static void *emph_parent_class;
-#define emph ((EMPopupHook *)eph)
-
-static const EPopupHookTargetMask emph_select_masks[] = {
- { "one", EM_POPUP_SELECT_ONE },
- { "many", EM_POPUP_SELECT_MANY },
- { "mark_read", EM_POPUP_SELECT_MARK_READ },
- { "mark_unread", EM_POPUP_SELECT_MARK_UNREAD },
- { "delete", EM_POPUP_SELECT_DELETE },
- { "undelete", EM_POPUP_SELECT_UNDELETE },
- { "mailing_list", EM_POPUP_SELECT_MAILING_LIST },
- { "resend", EM_POPUP_SELECT_EDIT },
- { "mark_important", EM_POPUP_SELECT_MARK_IMPORTANT },
- { "mark_unimportant", EM_POPUP_SELECT_MARK_UNIMPORTANT },
- { "flag_followup", EM_POPUP_SELECT_FLAG_FOLLOWUP },
- { "flag_completed", EM_POPUP_SELECT_FLAG_COMPLETED },
- { "flag_clear", EM_POPUP_SELECT_FLAG_CLEAR },
- { "add_sender", EM_POPUP_SELECT_ADD_SENDER },
- { "mark_junk", EM_POPUP_SELECT_MARK_JUNK },
- { "mark_nojunk", EM_POPUP_SELECT_MARK_NOJUNK },
- { "folder", EM_POPUP_SELECT_FOLDER },
- { 0 }
-};
-
-static const EPopupHookTargetMask emph_uri_masks[] = {
- { "http", EM_POPUP_URI_HTTP },
- { "mailto", EM_POPUP_URI_MAILTO },
- { "notmailto", EM_POPUP_URI_NOT_MAILTO },
- { 0 }
-};
-
-static const EPopupHookTargetMask emph_part_masks[] = {
- { "message", EM_POPUP_PART_MESSAGE },
- { "image", EM_POPUP_PART_IMAGE },
- { 0 }
-};
-
-static const EPopupHookTargetMask emph_folder_masks[] = {
- { "folder", EM_POPUP_FOLDER_FOLDER },
- { "store", EM_POPUP_FOLDER_STORE },
- { "inferiors", EM_POPUP_FOLDER_INFERIORS },
- { "delete", EM_POPUP_FOLDER_DELETE },
- { "select", EM_POPUP_FOLDER_SELECT },
- { 0 }
-};
-
-static const EPopupHookTargetMask emph_attachments_masks[] = {
- { "one", EM_POPUP_ATTACHMENTS_ONE },
- { "many", EM_POPUP_ATTACHMENTS_MANY },
- { 0 }
-};
-
-static const EPopupHookTargetMap emph_targets[] = {
- { "select", EM_POPUP_TARGET_SELECT, emph_select_masks },
- { "uri", EM_POPUP_TARGET_URI, emph_uri_masks },
- { "part", EM_POPUP_TARGET_PART, emph_part_masks },
- { "folder", EM_POPUP_TARGET_FOLDER, emph_folder_masks },
- { "attachments", EM_POPUP_TARGET_ATTACHMENTS, emph_attachments_masks },
- { 0 }
-};
-
-static void
-emph_finalise(GObject *o)
-{
- /*EPluginHook *eph = (EPluginHook *)o;*/
-
- ((GObjectClass *)emph_parent_class)->finalize(o);
-}
-
-static void
-emph_class_init(EPluginHookClass *klass)
-{
- int i;
-
- ((GObjectClass *)klass)->finalize = emph_finalise;
- ((EPluginHookClass *)klass)->id = "com.ximian.evolution.mail.popup:1.0";
-
- for (i=0;emph_targets[i].type;i++)
- e_popup_hook_class_add_target_map((EPopupHookClass *)klass, &emph_targets[i]);
-
- ((EPopupHookClass *)klass)->popup_class = g_type_class_ref(em_popup_get_type());
-}
-
-GType
-em_popup_hook_get_type(void)
-{
- static GType type = 0;
-
- if (!type) {
- static const GTypeInfo info = {
- sizeof(EMPopupHookClass), NULL, NULL, (GClassInitFunc) emph_class_init, NULL, NULL,
- sizeof(EMPopupHook), 0, (GInstanceInitFunc) NULL,
- };
-
- emph_parent_class = g_type_class_ref(e_popup_hook_get_type());
- type = g_type_register_static(e_popup_hook_get_type(), "EMPopupHook", &info, 0);
- }
-
- return type;
+ em_popup_add_items(emp, menus, (GDestroyNotify)g_slist_free);
}
diff --git a/mail/em-subscribe-editor.c b/mail/em-subscribe-editor.c
index e3958076af..ab0b098b36 100644
--- a/mail/em-subscribe-editor.c
+++ b/mail/em-subscribe-editor.c
@@ -43,7 +43,6 @@
#include "mail-config.h"
#include <glade/glade.h>
-#include <libgnome/gnome-i18n.h>
#include <gtk/gtkdialog.h>
#include <gtk/gtkscrolledwindow.h>
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 2adf723f67..8c22fe8926 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -44,13 +44,13 @@
#include <libgnomevfs/gnome-vfs-mime.h>
#include <libgnomevfs/gnome-vfs-mime-utils.h>
#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-#include <libgnome/gnome-i18n.h>
#include "mail-component.h"
#include "mail-mt.h"
#include "mail-ops.h"
#include "mail-tools.h"
#include "mail-config.h"
+#include "mail-config-druid.h"
#include "message-tag-followup.h"
#include <e-util/e-mktemp.h>
@@ -63,7 +63,6 @@
#include "em-utils.h"
#include "em-composer-utils.h"
#include "em-format-quote.h"
-#include "em-account-editor.h"
static void emu_save_part_done (CamelMimePart *part, char *name, int done, void *data);
@@ -179,18 +178,19 @@ druid_destroy_cb (gpointer user_data, GObject *deadbeef)
gboolean
em_utils_configure_account (GtkWidget *parent)
{
- EMAccountEditor *emae;
-
- emae = em_account_editor_new(NULL, EMAE_DRUID);
+ MailConfigDruid *druid;
+
+ druid = mail_config_druid_new ();
+
if (parent != NULL)
- e_dialog_set_transient_for((GtkWindow *)emae->editor, parent);
-
- g_object_weak_ref((GObject *)emae->editor, (GWeakNotify) druid_destroy_cb, NULL);
- gtk_widget_show(emae->editor);
- gtk_grab_add(emae->editor);
- gtk_main();
+ e_dialog_set_transient_for ((GtkWindow *) druid, parent);
+
+ g_object_weak_ref ((GObject *) druid, (GWeakNotify) druid_destroy_cb, NULL);
+ gtk_widget_show ((GtkWidget *) druid);
+ gtk_grab_add ((GtkWidget *) druid);
+ gtk_main ();
- return mail_config_is_configured();
+ return mail_config_is_configured ();
}
/**
diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c
index 3d1065acd6..7c888aa361 100644
--- a/mail/mail-account-gui.c
+++ b/mail/mail-account-gui.c
@@ -45,7 +45,6 @@
#include <gtk/gtknotebook.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkdialog.h>
-#include <libgnome/gnome-i18n.h>
#ifdef USE_GTKFILECHOOSER
#include <gtk/gtkfilechooser.h>
#include <gtk/gtkradiobutton.h>
@@ -2443,6 +2442,8 @@ mail_account_gui_save (MailAccountGui *gui)
mail_config_save_accounts ();
+ mail_autoreceive_setup ();
+
return TRUE;
}
diff --git a/mail/mail-component.c b/mail/mail-component.c
index 54f544762b..f753e37931 100644
--- a/mail/mail-component.c
+++ b/mail/mail-component.c
@@ -36,7 +36,6 @@
#include <errno.h>
#include "em-popup.h"
-#include "em-menu.h"
#include "em-utils.h"
#include "em-composer-utils.h"
#include "em-format.h"
@@ -76,7 +75,6 @@
#include <gal/e-table/e-tree.h>
#include <gal/e-table/e-tree-memory.h>
-#include <libgnome/gnome-i18n.h>
#include <camel/camel-file-utils.h>
#include <camel/camel-vtrash-folder.h>
@@ -322,17 +320,6 @@ mc_startup(MailComponent *mc)
mc_setup_local_store(mc);
load_accounts(mc, mail_config_get_accounts());
vfolder_load_storage();
-
- e_plugin_hook_register_type(em_popup_hook_get_type());
- e_plugin_hook_register_type(em_menu_hook_get_type());
- e_plugin_hook_register_type(em_config_hook_get_type());
-
- em_format_hook_register_type(em_format_get_type());
- em_format_hook_register_type(em_format_html_get_type());
- em_format_hook_register_type(em_format_html_display_get_type());
- e_plugin_hook_register_type(em_format_hook_get_type());
-
- e_plugin_hook_register_type(em_event_hook_get_type());
}
static void
@@ -871,7 +858,7 @@ mail_component_init (MailComponent *component)
priv->async_event = mail_async_event_new();
priv->store_hash = g_hash_table_new (NULL, NULL);
- mail_autoreceive_init();
+ mail_autoreceive_setup();
offline = mail_offline_handler_new();
bonobo_object_add_interface((BonoboObject *)component, (BonoboObject *)offline);
diff --git a/mail/mail-config.glade b/mail/mail-config.glade
index 701d8fcaca..2103e332e5 100644
--- a/mail/mail-config.glade
+++ b/mail/mail-config.glade
@@ -47,27 +47,6 @@ Click &quot;Forward&quot; to begin. </property>
<property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="identity_help">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please enter your name and email address below. The &quot;optional&quot; fields below do not need to be filled in, unless you wish to include this information in email you send.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_FILL</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
<placeholder/>
</child>
</widget>
@@ -88,25 +67,24 @@ Click &quot;Forward&quot; to begin. </property>
<property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="extra_help">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please select among the following options</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_FILL</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
+ <placeholder/>
</child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="extra_page">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Receiving Email</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="druid_extra_vbox">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
<child>
<placeholder/>
@@ -129,27 +107,6 @@ Click &quot;Forward&quot; to begin. </property>
<property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="transport_help">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please enter information about the way you will send mail. If you are not sure, ask your system administrator or Internet Service Provider.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_FILL</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
<placeholder/>
</child>
</widget>
@@ -170,27 +127,6 @@ Click &quot;Forward&quot; to begin. </property>
<property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="management_help">
- <property name="visible">True</property>
- <property name="label" translatable="yes">You are almost done with the mail configuration process. The identity, incoming mail server and outgoing mail transport method which you provided will be grouped together to make an Evolution mail account. Please enter a name for this account in the space below. This name will be used for display purposes only.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_FILL</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
<placeholder/>
</child>
</widget>
@@ -690,7 +626,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">signature_dropdown</property>
+ <property name="mnemonic_widget">sigOption</property>
</widget>
<packing>
<property name="left_attach">0</property>
@@ -709,12 +645,24 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="spacing">6</property>
<child>
- <widget class="Custom" id="signature_dropdown">
+ <widget class="GtkOptionMenu" id="sigOption">
<property name="visible">True</property>
- <property name="creation_function">em_account_editor_dropdown_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Mon, 06 Sep 2004 01:00:22 GMT</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget1">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Default</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
@@ -946,7 +894,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">source_type_dropdown</property>
+ <property name="mnemonic_widget">source_type_omenu</property>
</widget>
<packing>
<property name="left_attach">0</property>
@@ -1007,12 +955,56 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
</child>
<child>
- <widget class="Custom" id="source_type_dropdown">
+ <widget class="GtkOptionMenu" id="source_type_omenu">
<property name="visible">True</property>
- <property name="creation_function">em_account_editor_dropdown_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 29 Jul 2004 05:31:24 GMT</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget3">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">POP</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">IMAPv4 </property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Standard Unix mbox</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Qmail maildir </property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget8">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">None</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -1361,7 +1353,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<child>
<widget class="GtkLabel" id="lblSourceUseSSL">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Use Secure Connection:</property>
+ <property name="label" translatable="yes">_Use Secure Connection (SSL):</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
@@ -1381,12 +1373,40 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
</child>
<child>
- <widget class="Custom" id="source_use_ssl">
+ <widget class="GtkOptionMenu" id="source_use_ssl">
<property name="visible">True</property>
- <property name="creation_function">em_account_editor_ssl_selector_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 03 Aug 2004 07:22:52 GMT</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget9">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Always</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget11">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Whenever Possible</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget12">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Never</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
@@ -1541,12 +1561,32 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="spacing">6</property>
<child>
- <widget class="Custom" id="source_auth_dropdown">
+ <widget class="GtkOptionMenu" id="source_auth_omenu">
<property name="visible">True</property>
- <property name="creation_function">em_account_editor_dropdown_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 29 Jul 2004 08:38:30 GMT</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget13">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget14">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Password</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget15">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Kerberos </property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
@@ -1633,9 +1673,229 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
</child>
<child>
+ <widget class="GtkLabel" id="label32">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Receiving Mail</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vboxExtraTableBorder">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkTable" id="extra_table">
+ <property name="visible">True</property>
+ <property name="n_rows">1</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">18</property>
+ <property name="column_spacing">6</property>
+
+ <child>
+ <widget class="GtkVBox" id="extra_mailcheck_frame">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkTable" id="extra_mailcheck_table">
+ <property name="visible">True</property>
+ <property name="n_rows">1</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+
+ <child>
+ <widget class="GtkTable" id="extra_table">
+ <property name="visible">True</property>
+ <property name="n_rows">1</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="extra_mailcheck_frame">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="lblMailCheck">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot;&gt;Checking for New Mail&lt;/span&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="extra_mailcheck_table">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="n_rows">1</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="extra_mailcheck_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">4</property>
+
+ <child>
+ <widget class="GtkCheckButton" id="extra_auto_check">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Automatically check for _new mail every</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="extra_auto_check_min">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">10 1 1440 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="lblMinutes">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkLabel" id="label33">
<property name="visible">True</property>
- <property name="label" translatable="yes">Receiving Email</property>
+ <property name="label" translatable="yes">Receiving Options</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
@@ -1686,7 +1946,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">transport_type_dropdown</property>
+ <property name="mnemonic_widget">transport_type_omenu</property>
</widget>
<packing>
<property name="left_attach">0</property>
@@ -1722,12 +1982,32 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
</child>
<child>
- <widget class="Custom" id="transport_type_dropdown">
+ <widget class="GtkOptionMenu" id="transport_type_omenu">
<property name="visible">True</property>
- <property name="creation_function">em_account_editor_dropdown_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 29 Jul 2004 05:42:00 GMT</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget16">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget17">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">SMTP</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget18">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Sendmail</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -2035,7 +2315,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<child>
<widget class="GtkLabel" id="lblTransportUseSSL">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Use Secure Connection:</property>
+ <property name="label" translatable="yes">_Use Secure Connection (SSL):</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
@@ -2055,12 +2335,40 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
</child>
<child>
- <widget class="Custom" id="transport_use_ssl">
+ <widget class="GtkOptionMenu" id="transport_use_ssl">
<property name="visible">True</property>
- <property name="creation_function">em_account_editor_ssl_selector_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 03 Aug 2004 07:23:50 GMT</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget19">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget20">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Always</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget21">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Whenever Possible</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget22">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Never</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
@@ -2239,7 +2547,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">transport_auth_dropdown</property>
+ <property name="mnemonic_widget">transport_auth_omenu</property>
</widget>
<packing>
<property name="left_attach">0</property>
@@ -2304,12 +2612,32 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="spacing">6</property>
<child>
- <widget class="Custom" id="transport_auth_dropdown">
+ <widget class="GtkOptionMenu" id="transport_auth_omenu">
<property name="visible">True</property>
- <property name="creation_function">em_account_editor_dropdown_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 29 Jul 2004 08:37:13 GMT</property>
+ <property name="can_focus">True</property>
+ <property name="history">0</property>
+
+ <child internal-child="menu">
+ <widget class="GtkMenu" id="convertwidget23">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget24">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Password</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="convertwidget25">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Kerberos </property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
@@ -4024,7 +4352,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<child>
- <widget class="GtkNotebook" id="preferences_toplevel">
+ <widget class="GtkNotebook" id="toplevel">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="show_tabs">True</property>
@@ -6122,7 +6450,7 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<child>
- <widget class="GtkNotebook" id="composer_toplevel">
+ <widget class="GtkNotebook" id="toplevel">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="show_tabs">True</property>
diff --git a/mail/mail-errors.xml b/mail/mail-errors.xml
index 44717434d3..9e32d5aba2 100644
--- a/mail/mail-errors.xml
+++ b/mail/mail-errors.xml
@@ -311,13 +311,6 @@ You can choose to ignore this folder, overwrite or append its contents, or quit.
<button label="_Append" response="GTK_RESPONSE_OK"/>
</error>
- <error id="no-load-license" type="error">
- <primary>Unable to read license file.</primary>
- <secondary>Cannot read the license file &quot;{0}&quot;, due to an
- installation problem. You will not be able to use this provider until
- you can accept its license.</secondary>
- </error>
-
<error id="gw-accountsetup-error" type="error">
<primary><span weight="bold" size="larger">Unable to connect to the GroupWise
server.</span></primary>
diff --git a/mail/mail-errors.xml.h b/mail/mail-errors.xml.h
index 52c4ece276..74cdecfc92 100644
--- a/mail/mail-errors.xml.h
+++ b/mail/mail-errors.xml.h
@@ -230,12 +230,6 @@ char *s = N_("A non-empty folder at \"{1}\" already exists.\n"
char *s = N_("Ignore");
char *s = N_("_Overwrite");
char *s = N_("_Append");
-/* mail:no-load-license primary */
-char *s = N_("Unable to read license file.");
-/* mail:no-load-license secondary */
-char *s = N_("Cannot read the license file \"{0}\", due to an\n"
- " installation problem. You will not be able to use this provider until\n"
- " you can accept its license.");
/* mail:gw-accountsetup-error primary */
char *s = N_("Unable to connect to the GroupWise\n"
"server.");
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index 51de559c8e..1e080a684e 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -36,7 +36,6 @@
#include <errno.h>
#include <libgnome/gnome-exec.h>
#include <gal/util/e-util.h>
-#include <libgnome/gnome-i18n.h>
#include <camel/camel-mime-filter-from.h>
#include <camel/camel-stream-filter.h>
diff --git a/mail/message-list.c b/mail/message-list.c
index 45860c536e..4c0fdff1fd 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -39,7 +39,6 @@
#include <gtk/gtkmain.h>
#include <gtk/gtkinvisible.h>
-#include <libgnome/gnome-i18n.h>
#include <gal/util/e-util.h>
#include <gal/widgets/e-gui-utils.h>
@@ -1679,48 +1678,34 @@ ml_drop_action(struct _drop_msg *m)
}
static void
-ml_drop_popup_copy(EPopup *ep, EPopupItem *item, void *data)
+ml_drop_popup_copy(GtkWidget *item, struct _drop_msg *m)
{
- struct _drop_msg *m = data;
-
m->action = GDK_ACTION_COPY;
ml_drop_action(m);
}
static void
-ml_drop_popup_move(EPopup *ep, EPopupItem *item, void *data)
+ml_drop_popup_move(GtkWidget *item, struct _drop_msg *m)
{
- struct _drop_msg *m = data;
-
m->action = GDK_ACTION_MOVE;
ml_drop_action(m);
}
static void
-ml_drop_popup_cancel(EPopup *ep, EPopupItem *item, void *data)
+ml_drop_popup_cancel(GtkWidget *item, struct _drop_msg *m)
{
- struct _drop_msg *m = data;
-
m->aborted = TRUE;
mail_msg_free(&m->msg);
}
-static EPopupItem ml_drop_popup_menu[] = {
- { E_POPUP_ITEM, "00.emc.02", N_("_Copy"), ml_drop_popup_copy, NULL, "stock_folder-copy", 0 },
- { E_POPUP_ITEM, "00.emc.03", N_("_Move"), ml_drop_popup_move, NULL, "stock_folder-move", 0 },
- { E_POPUP_BAR, "10.emc" },
- { E_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), ml_drop_popup_cancel, NULL, NULL, 0 },
+static EMPopupItem ml_drop_popup_menu[] = {
+ { EM_POPUP_ITEM, "00.emc.02", N_("_Copy"), G_CALLBACK(ml_drop_popup_copy), NULL, "stock_folder-copy", 0 },
+ { EM_POPUP_ITEM, "00.emc.03", N_("_Move"), G_CALLBACK(ml_drop_popup_move), NULL, "stock_folder-move", 0 },
+ { EM_POPUP_BAR, "10.emc" },
+ { EM_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), G_CALLBACK(ml_drop_popup_cancel), NULL, NULL, 0 },
};
static void
-ml_drop_popup_free(EPopup *ep, GSList *items, void *data)
-{
- g_slist_free(items);
-
- /* FIXME: free data if no item was selected? */
-}
-
-static void
ml_tree_drag_data_received (ETree *tree, int row, ETreePath path, int col,
GdkDragContext *context, gint x, gint y,
GtkSelectionData *data, guint info,
@@ -1753,11 +1738,14 @@ ml_tree_drag_data_received (ETree *tree, int row, ETreePath path, int col,
int i;
emp = em_popup_new("com.ximian.mail.messagelist.popup.drop");
- for (i=0;i<sizeof(ml_drop_popup_menu)/sizeof(ml_drop_popup_menu[0]);i++)
- menus = g_slist_append(menus, &ml_drop_popup_menu[i]);
+ for (i=0;i<sizeof(ml_drop_popup_menu)/sizeof(ml_drop_popup_menu[0]);i++) {
+ EMPopupItem *item = &ml_drop_popup_menu[i];
- e_popup_add_items((EPopup *)emp, menus, ml_drop_popup_free, m);
- menu = e_popup_create_menu_once((EPopup *)emp, NULL, 0);
+ item->activate_data = m;
+ menus = g_slist_append(menus, item);
+ }
+ em_popup_add_items(emp, menus, (GDestroyNotify)g_slist_free);
+ menu = em_popup_create_menu_once(emp, NULL, 0, 0);
gtk_menu_popup(menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
} else {
ml_drop_action(m);
@@ -1860,7 +1848,7 @@ message_list_destroy(GtkObject *object)
mail_async_event_destroy(message_list->async_event);
message_list->async_event = NULL;
}
-
+
if (message_list->folder) {
/* need to do this before removing folder, folderinfo's might not exist after */
save_tree_state(message_list);
@@ -2750,7 +2738,7 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
{
CamelFolderChangeInfo *changes;
MessageList *ml = MESSAGE_LIST (user_data);
-
+
if (event_data) {
changes = camel_folder_change_info_new();
camel_folder_change_info_cat(changes, (CamelFolderChangeInfo *)event_data);
diff --git a/po/be.po b/po/be.po
index a8b9932ec2..dd579f8cd9 100644
--- a/po/be.po
+++ b/po/be.po
@@ -1,19348 +1,28460 @@
-# translation of evolution.HEAD.be.po to belarusian
-# translation of evolution.HEAD.be.po to Belarusian
-# Vital Khilko <dojlid@mova.org>, 2003.
-# Vital Khilko <v.khilko@sam-solutions.net>, 2004.
-msgid ""
-msgstr ""
-"Project-Id-Version: evolution.HEAD.be\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-07-27 03:09+0200\n"
-"PO-Revision-Date: 2004-08-13 09:34+0300\n"
-"Last-Translator: Vital Khilko <v.khilko@sam-solutions.net>\n"
-"Language-Team: belarusian <i18n@mova.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.3.1\n"
-
-#: a11y/addressbook/ea-addressbook-view.c:94
-#: a11y/addressbook/ea-addressbook-view.c:103
-#: a11y/addressbook/ea-minicard-view.c:119
-msgid "evolution addressbook"
-msgstr "Кніга адраÑоў \"Эвалюцыі\""
-
-#: a11y/addressbook/ea-minicard-view.c:101
-msgid "current addressbook folder "
-msgstr "бÑÐ³ÑƒÑ‡Ð°Ñ Ñ‚Ñчка кнігі адраÑоў "
-
-#: a11y/addressbook/ea-minicard-view.c:102
-msgid "have "
-msgstr "мае "
-
-#: a11y/addressbook/ea-minicard-view.c:102
-msgid "has "
-msgstr "мае "
-
-#: a11y/addressbook/ea-minicard-view.c:104
-msgid " cards"
-msgstr " карткі"
-
-#: a11y/addressbook/ea-minicard-view.c:104
-msgid " card"
-msgstr " картка"
-
-#: a11y/addressbook/ea-minicard.c:105
-msgid "contact's header: "
-msgstr "загаловак: "
-
-#: a11y/addressbook/ea-minicard.c:166
-msgid "evolution minicard"
-msgstr "мінікартка \"Эвалюцыі\""
-
-#. addressbook:ldap-init primary
-#: addressbook/addressbook-errors.xml.h:2
-msgid "This addressbook could not be opened."
-msgstr "Кніга адраÑоў Ð½Ñ Ð¼Ð¾Ð¶Ð° быць загружана."
-
-#. addressbook:ldap-init secondary
-#: addressbook/addressbook-errors.xml.h:4
-msgid ""
-"This addressbook server might unreachable or the server name may be "
-"misspelled or your network connection could be down."
-msgstr ""
-
-#. addressbook:ldap-auth primary
-#: addressbook/addressbook-errors.xml.h:6
-msgid "Failed to authenticate with LDAP server."
-msgstr "Збой аўтарызацыі на паÑлужніку LDAP."
-
-#. addressbook:ldap-auth secondary
-#: addressbook/addressbook-errors.xml.h:8
-msgid ""
-"Check to make sure your password is spelled correctly and that you are using "
-"a supported login method. Remember that many passwords are case sensitive; "
-"your caps lock might be on."
-msgstr ""
-
-#. addressbook:ldap-search-base primary
-#: addressbook/addressbook-errors.xml.h:10
-msgid "This addressbook server does not have any suggested search bases."
-msgstr "ПаÑлужнік кнігі адраÑоў не здолеў прапанаваць ніÑкай базы пошуку."
-
-#. addressbook:ldap-search-base secondary
-#: addressbook/addressbook-errors.xml.h:12
-msgid ""
-"This LDAP server may use an older version of LDAP, which does not support "
-"this functionality or it may be misconfigured. Ask your administrator for "
-"supported search bases."
-msgstr ""
-
-#. addressbook:ldap-v3-schema primary
-#: addressbook/addressbook-errors.xml.h:14
-msgid "This server does not support LDAPv3 schema information."
-msgstr "ПаÑлужнік не падтрымлівае зьвеÑткі Ñхемы LDAPv3."
-
-#. addressbook:ldap-get-schema primary
-#: addressbook/addressbook-errors.xml.h:16
-msgid "Could not get schema information for LDAP server."
-msgstr "Ðемагчыма атрымаць зьвеÑткі Ñхемы Ð´Ð»Ñ Ð¿Ð°Ñлужніку LDAP."
-
-#. addressbook:ldap-invalid-schema primary
-#: addressbook/addressbook-errors.xml.h:18
-msgid "LDAP server did not respond with valid schema information."
-msgstr "ПаÑлужнік не адказаў з Ñ€ÑчаіÑнымі зьвеÑткамі Ñхемы."
-
-#. addressbook:remove-addressbook primary
-#: addressbook/addressbook-errors.xml.h:20
-msgid "Could not remove addressbook."
-msgstr "Ðемагчыма выдаліць кнігу адраÑоў."
-
-#. addressbook:remove-addressbook secondary
-#. addressbook:generic-error primary
-#. addressbook:load-error secondary
-#. addressbook:search-error secondary
-#. mail:session-message-info secondary
-#. mail:session-message-info-cancel secondary
-#. mail:session-message-warning secondary
-#. mail:session-message-warning-cancel secondary
-#. mail:session-message-error secondary
-#. mail:session-message-error-cancel secondary
-#. mail:ask-session-password secondary
-#. mail:filter-load-error secondary
-#: addressbook/addressbook-errors.xml.h:22
-#: addressbook/addressbook-errors.xml.h:26
-#: addressbook/addressbook-errors.xml.h:34
-#: addressbook/addressbook-errors.xml.h:38 mail/mail-errors.xml.h:70
-#: mail/mail-errors.xml.h:72 mail/mail-errors.xml.h:74
-#: mail/mail-errors.xml.h:76 mail/mail-errors.xml.h:78
-#: mail/mail-errors.xml.h:80 mail/mail-errors.xml.h:84
-#: mail/mail-errors.xml.h:88
-msgid "{0}"
-msgstr "{0}"
-
-#. addressbook:edit-categories primary
-#: addressbook/addressbook-errors.xml.h:24
-msgid "Category editor not available."
-msgstr "ÐдÑутнічае катÑÐ³Ð¾Ñ€Ñ‹Ñ Ñ€Ñдактара."
-
-#. addressbook:generic-error secondary
-#. mail-composer:no-attach secondary
-#. mail:no-save-path secondary
-#: addressbook/addressbook-errors.xml.h:28
-#: composer/mail-composer-errors.xml.h:4 mail/mail-errors.xml.h:92
-msgid "{1}"
-msgstr "{1}"
-
-#. addressbook:load-error title
-#: addressbook/addressbook-errors.xml.h:30
-msgid "Unable to open addressbook"
-msgstr "Ðемагчыма адкрыць кнігу адраÑоў"
-
-#. addressbook:load-error primary
-#: addressbook/addressbook-errors.xml.h:32
-msgid "Error loading addressbook."
-msgstr "Памылка загрузкі кнігі адраÑоў."
-
-#. addressbook:search-error primary
-#: addressbook/addressbook-errors.xml.h:36
-msgid "Unable to perform search."
-msgstr "Ðемагчыма выканаць пошук."
-
-#. addressbook:prompt-save primary
-#: addressbook/addressbook-errors.xml.h:40
-msgid "Would you like to save your changes?"
-msgstr "Жадаеце захаваць зьмены?"
-
-#. addressbook:prompt-save secondary
-#: addressbook/addressbook-errors.xml.h:42
-msgid ""
-"You have made modifications to this contact. Do you want to save these "
-"changes?"
-msgstr ""
-
-#: addressbook/addressbook-errors.xml.h:43
-#: addressbook/gui/contact-editor/e-contact-editor.c:2803
-#: addressbook/gui/contact-editor/e-contact-editor.c:2827
-msgid "_Discard"
-msgstr "_Ðдмовіць"
-
-#. addressbook:prompt-move primary
-#: addressbook/addressbook-errors.xml.h:45
-msgid "Cannot move contact."
-msgstr "Ðемагчыма перанеÑьці кантакт."
-
-#. addressbook:prompt-move secondary
-#: addressbook/addressbook-errors.xml.h:47
-msgid ""
-"You are attempting to move a contact from one addressbook to another but it "
-"cannot be removed from the source. Do you want to save a copy instead?"
-msgstr ""
-
-#. addressbook:save-error primary
-#: addressbook/addressbook-errors.xml.h:49
-msgid "Unable to save contact(s)."
-msgstr "Ðемагчыма захаваць кантакт(Ñ‹)."
-
-#. addressbook:save-error secondary
-#: addressbook/addressbook-errors.xml.h:51
-msgid "Error saving contacts to {0}: {1}"
-msgstr "Памылка Ñž чаÑе Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž у {0}:·{1}"
-
-#. addressbook:backend-died primary
-#: addressbook/addressbook-errors.xml.h:53
-msgid "The Evolution addressbook has quit unexpectedly."
-msgstr "Кніга адраÑоў \"Эвалюцыі\" нечакана Ñкончыла працу."
-
-#. addressbook:backend-died secondary
-#: addressbook/addressbook-errors.xml.h:55
-msgid "Your contacts for {0} will not be available until Evolution is restarted."
-msgstr ""
-
-#: addressbook/conduit/address-conduit.c:275
-msgid "Default Sync Address:"
-msgstr "ÐÐ´Ñ€Ð°Ñ Ð´Ð°Ð¿Ð¾Ð¼Ð½Ð°Ðµ Ñынхранізацыі:"
-
-#: addressbook/conduit/address-conduit.c:1156
-#: addressbook/conduit/address-conduit.c:1157
-msgid "Could not load addressbook"
-msgstr "Ðемагчыма загрузіць кнігу адраÑоў"
-
-#: addressbook/conduit/address-conduit.c:1225
-#: addressbook/conduit/address-conduit.c:1228
-msgid "Could not read pilot's Address application block"
-msgstr "Ðемагчыма прачытаць блёк даÑтаÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð°Ð´Ñ€Ð°Ñоў Пілёта"
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:1
-msgid "*Control*F2"
-msgstr "*Control*F2"
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:2
-msgid "Autocompletion"
-msgstr "ÐўтазавÑршÑньне"
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:3
-msgid "C_ontacts"
-msgstr "Кантакты"
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:4
-msgid "Certificates"
-msgstr "СÑртыфікаты"
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:5
-msgid "Configure autocomplete here"
-msgstr "Ðаладка аўтазавÑршÑÐ½ÑŒÐ½Ñ Ñ€Ð¾Ð±Ñ–Ñ†Ñ†Ð° тут"
-
-#. Create the contacts group
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:6
-#: addressbook/gui/component/addressbook-view.c:1044
-#: calendar/gui/migration.c:377
-msgid "Contacts"
-msgstr "Кантакты"
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:7
-msgid "Evolution Addressbook"
-msgstr "Кніга адраÑоў \"Эвалюцыі\""
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:8
-msgid "Evolution Addressbook address pop-up"
-msgstr "Раптоўнае акенца кнігі адраÑоў \"Эвалюцыі\""
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:9
-msgid "Evolution Addressbook address viewer"
-msgstr "ПраглÑдальнік кнігі адраÑоў \"Эвалюцыі\""
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:10
-msgid "Evolution Addressbook card viewer"
-msgstr "ПраглÑдальнік візытовак кнігі адраÑоў \"Эвалюцыі\""
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:11
-msgid "Evolution Addressbook component"
-msgstr "КампанÑнт кнігі адраÑоў \"Эвалюцыі\""
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:12
-msgid "Evolution S/Mime Certificate Management Control"
-msgstr "Кіраваньне \"Эвалюцыі\" ÑÑртыфікатамі S/Mime \""
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:13
-msgid "Evolution folder settings configuration control"
-msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð½Ð°Ð»Ð°Ð´ÐºÐ°Ð¼Ñ– Ñ‚Ñчак \"Эвалюцыі\""
-
-#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:14
-msgid "Manage your S/MIME certificates here"
-msgstr ""
-
-#: addressbook/gui/component/addressbook-component.c:93
-msgid "New Contact"
-msgstr "Ðовы кантакт"
-
-#: addressbook/gui/component/addressbook-component.c:94
-msgid "_Contact"
-msgstr "_Кантакт"
-
-#: addressbook/gui/component/addressbook-component.c:95
-msgid "Create a new contact"
-msgstr "Стварыць новы кантакт"
-
-#: addressbook/gui/component/addressbook-component.c:101
-msgid "New Contact List"
-msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
-
-#: addressbook/gui/component/addressbook-component.c:102
-msgid "Contact _List"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
-
-#: addressbook/gui/component/addressbook-component.c:103
-msgid "Create a new contact list"
-msgstr "Стварыць новы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
-
-#: addressbook/gui/component/addressbook-component.c:109
-#: addressbook/gui/component/addressbook-view.c:714
-msgid "New Address Book"
-msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÐ½Ñ–Ð³Ð° адраÑоў"
-
-#: addressbook/gui/component/addressbook-component.c:110
-msgid "Address _Book"
-msgstr "Кніга адраÑоў"
-
-#: addressbook/gui/component/addressbook-component.c:111
-msgid "Create a new address book"
-msgstr "Стварыць новую кнігу адраÑоў"
-
-#: addressbook/gui/component/addressbook-component.c:184
-msgid "Failed upgrading Addressbook settings or folders."
-msgstr ""
-
-#: addressbook/gui/component/addressbook-migrate.c:72
-#: calendar/gui/migration.c:141 mail/em-migrate.c:1160
-msgid "Migrating..."
-msgstr "МіграцыÑ..."
-
-#: addressbook/gui/component/addressbook-migrate.c:124
-#: calendar/gui/migration.c:188 mail/em-migrate.c:1201
-#, c-format
-msgid "Migrating `%s':"
-msgstr "ÐœÑ–Ð³Ñ€Ð°Ñ†Ñ‹Ñ Ð· %s"
-
-#. create the local source group
-#. On This Computer is always first and VFolders is always last
-#: addressbook/gui/component/addressbook-migrate.c:493
-#: calendar/gui/migration.c:450 calendar/gui/migration.c:532
-#: mail/em-folder-tree-model.c:196 mail/em-folder-tree-model.c:198
-#: mail/mail-component.c:245 mail/mail-vfolder.c:218
-msgid "On This Computer"
-msgstr "Ðа гÑтым кампутары"
-
-#. Create the default Person addressbook
-#. Create the default Person calendar
-#. Create the default Person task list
-#. orange
-#: addressbook/gui/component/addressbook-migrate.c:501
-#: addressbook/gui/contact-editor/contact-editor.glade.h:34
-#: calendar/gui/migration.c:458 calendar/gui/migration.c:540
-#: filter/filter-label.c:123 mail/em-migrate.c:1013 mail/mail-config.c:78
-#: mail/mail-config.glade.h:109
-msgid "Personal"
-msgstr "ПÑÑ€Ñанальнае"
-
-#. Create the LDAP source group
-#: addressbook/gui/component/addressbook-migrate.c:509
-msgid "On LDAP Servers"
-msgstr "Ðа паÑлужніку LDAP"
-
-#: addressbook/gui/component/addressbook-migrate.c:637
-msgid "LDAP Servers"
-msgstr "ПаÑлужнікі LDAP"
-
-#: addressbook/gui/component/addressbook-migrate.c:752
-msgid "Autocompletion Settings"
-msgstr "УÑталёўкі аўтазавÑршÑньнÑ"
-
-#: addressbook/gui/component/addressbook-migrate.c:1123
-msgid ""
-"The location and hierarchy of the Evolution contact folders has changed "
-"since Evolution 1.x.\n"
-"\n"
-"Please be patient while Evolution migrates your folders..."
-msgstr ""
-
-#: addressbook/gui/component/addressbook-migrate.c:1137
-msgid ""
-"The format of mailing list contacts has changed.\n"
-"\n"
-"Please be patient while Evolution migrates your folders..."
-msgstr ""
-
-#: addressbook/gui/component/addressbook-migrate.c:1146
-msgid ""
-"The way Evolution stores some phone numbers has changed.\n"
-"\n"
-"Please be patient while Evolution migrates your folders..."
-msgstr ""
-
-#: addressbook/gui/component/addressbook-migrate.c:1156
-msgid ""
-"Evolution's Palm Sync changelog and map files have changed.\n"
-"\n"
-"Please be patient while Evolution migrates your Pilot Sync data..."
-msgstr ""
-
-#: addressbook/gui/component/addressbook-view.c:633
-#, c-format
-msgid "Address book '%s' will be removed. Are you sure you want to continue?"
-msgstr ""
-
-#: addressbook/gui/component/addressbook-view.c:715
-#: addressbook/gui/widgets/e-addressbook-view.c:1124
-#: calendar/gui/calendar-component.c:430 calendar/gui/tasks-component.c:376
-#: mail/em-filter-i18n.h:11 ui/evolution-addressbook.xml.h:8
-#: ui/evolution-calendar.xml.h:5 ui/evolution-comp-editor.xml.h:4
-#: ui/evolution-contact-editor.xml.h:3
-#: ui/evolution-contact-list-editor.xml.h:3 ui/evolution-mail-message.xml.h:24
-#: ui/evolution-tasks.xml.h:6
-msgid "Delete"
-msgstr "Выдаліць"
-
-#: addressbook/gui/component/addressbook-view.c:716
-#: calendar/gui/calendar-component.c:431 calendar/gui/tasks-component.c:378
-msgid "Properties..."
-msgstr "УлаÑьціваÑьці..."
-
-#: addressbook/gui/component/addressbook.c:89
-msgid "Accessing LDAP Server anonymously"
-msgstr "Далучацца да паÑлужніка LDAP ананімна"
-
-#: addressbook/gui/component/addressbook.c:173
-#: camel/providers/groupwise/camel-gw-listener.c:388
-msgid "Failed to authenticate.\n"
-msgstr "Збой аўтарызацыі.\n"
-
-#: addressbook/gui/component/addressbook.c:179
-#: camel/providers/groupwise/camel-gw-listener.c:377
-#, c-format
-msgid "%sEnter password for %s (user %s)"
-msgstr "%sУвÑдзіце пароль Ð´Ð»Ñ %s (карыÑтальнік %s)"
-
-#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:1
-msgid "EFolderList xml for the list of completion uris"
-msgstr ""
-
-#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:2
-msgid "Position of the vertical pane in main view"
-msgstr ""
-
-#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:3
-msgid ""
-"The number of characters that must be typed before evolution will attempt to "
-"autocomplete"
-msgstr ""
-
-#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:4
-msgid "URI for the folder last used in the select names dialog"
-msgstr "URI for the folder last used in the select names dialog"
-
-#: addressbook/gui/component/ldap-config.glade.h:1
-#: addressbook/gui/component/select-names/select-names.glade.h:1
-#: addressbook/gui/contact-editor/contact-editor.glade.h:1
-#: addressbook/gui/contact-editor/fulladdr.glade.h:1
-#: addressbook/gui/contact-editor/fullname.glade.h:1
-#: addressbook/gui/contact-editor/im.glade.h:1
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:3
-#: calendar/gui/dialogs/alarm-dialog.glade.h:1
-#: calendar/gui/dialogs/calendar-setup.glade.h:1
-#: calendar/gui/dialogs/event-page.glade.h:1
-#: calendar/gui/dialogs/meeting-page.glade.h:1
-#: calendar/gui/dialogs/new-calendar.glade.h:1
-#: calendar/gui/dialogs/new-task-list.glade.h:1
-#: calendar/gui/dialogs/task-page.glade.h:1
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:1
-#: composer/e-msg-composer-attachment.glade.h:1 mail/mail-config.glade.h:3
-#: mail/mail-dialogs.glade.h:6 mail/message-tags.glade.h:1
-#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:1
-msgid "*"
-msgstr "*"
-
-#: addressbook/gui/component/ldap-config.glade.h:2
-msgid "1"
-msgstr "1"
-
-#: addressbook/gui/component/ldap-config.glade.h:3
-msgid "3268"
-msgstr "3268"
-
-#: addressbook/gui/component/ldap-config.glade.h:4
-msgid "389"
-msgstr "389"
-
-#: addressbook/gui/component/ldap-config.glade.h:5
-msgid "5"
-msgstr "5"
-
-#: addressbook/gui/component/ldap-config.glade.h:6
-msgid "636"
-msgstr "636"
-
-#: addressbook/gui/component/ldap-config.glade.h:7
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:2
-msgid "<b>Authentication</b>"
-msgstr "<b>ÐўтарызацыÑ</b>"
-
-#: addressbook/gui/component/ldap-config.glade.h:8
-msgid "<b>Display</b>"
-msgstr "<b>ÐдлюÑтраваньне:</b>"
-
-#: addressbook/gui/component/ldap-config.glade.h:9
-msgid "<b>Downloading</b>"
-msgstr "<b>Пампаваньне</b>"
-
-#: addressbook/gui/component/ldap-config.glade.h:10
-msgid "<b>Searching</b>"
-msgstr "<b>Пошук</b>"
-
-#: addressbook/gui/component/ldap-config.glade.h:11
-msgid "<b>Server Information</b>"
-msgstr "<b>ЗьвеÑткі паÑлужніку</b>"
-
-#: addressbook/gui/component/ldap-config.glade.h:12
-msgid "<b>Type:</b>"
-msgstr "<b>Тып:</b> "
-
-#: addressbook/gui/component/ldap-config.glade.h:13
-msgid "Add Address Book"
-msgstr "Дадаць кніга адраÑоў"
-
-#: addressbook/gui/component/ldap-config.glade.h:14
-msgid "Address Book Properties"
-msgstr "УлаÑьціваÑьці кнігі адраÑоў"
-
-#: addressbook/gui/component/ldap-config.glade.h:15 mail/mail-account-gui.c:79
-#: mail/mail-config.glade.h:42
-msgid "Always"
-msgstr "ЗаўÑёды"
-
-#: addressbook/gui/component/ldap-config.glade.h:16
-msgid "Anonymously"
-msgstr "Ðнанімна"
-
-#: addressbook/gui/component/ldap-config.glade.h:17
-msgid "Basic"
-msgstr "ÐÑноўнае"
-
-#: addressbook/gui/component/ldap-config.glade.h:18
-#: mail/mail-dialogs.glade.h:13 smime/gui/smime-ui.glade.h:19
-msgid "Details"
-msgstr "ДÑталі"
-
-#: addressbook/gui/component/ldap-config.glade.h:19
-msgid "Distinguished name"
-msgstr "Ð£Ð´Ð°ÐºÐ»Ð°Ð´Ð½ÐµÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð°"
-
-#: addressbook/gui/component/ldap-config.glade.h:20
-msgid "Email address"
-msgstr "ÐдраÑÑ‹ Ñ.пошты"
-
-#: addressbook/gui/component/ldap-config.glade.h:21
-msgid "Evolution will use this email address to authenticate you with the server."
-msgstr ""
-"\"ЭвалюцыÑ\" будзе выкарыÑтоўваць гÑÑ‚Ñ‹ Ð°Ð´Ñ€Ð°Ñ Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ– Ð²Ð°Ñ Ð½Ð° "
-"паÑлужніку."
-
-#: addressbook/gui/component/ldap-config.glade.h:22
-msgid "Find Possible Search Bases"
-msgstr "Пошук магчымых базаў пошуку"
-
-#: addressbook/gui/component/ldap-config.glade.h:23
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:20
-#: mail/mail-config.glade.h:86 smime/gui/smime-ui.glade.h:27
-msgid "General"
-msgstr "ÐÑноўнае"
-
-#: addressbook/gui/component/ldap-config.glade.h:24
-msgid "Lo_gin:"
-msgstr "Уваход:"
-
-#: addressbook/gui/component/ldap-config.glade.h:25 mail/mail-account-gui.c:81
-#: mail/mail-config.glade.h:102
-msgid "Never"
-msgstr "Ðіколі"
-
-#: addressbook/gui/component/ldap-config.glade.h:26
-msgid "One"
-msgstr "Ðдзін"
-
-#: addressbook/gui/component/ldap-config.glade.h:27
-msgid "Search _base:"
-msgstr "_База пошуку:"
-
-#: addressbook/gui/component/ldap-config.glade.h:28
-msgid ""
-"Selecting this option means that Evolution will only connect to your LDAP "
-"server if your LDAP server supports SSL or TLS."
-msgstr ""
-"ВыбÑрыце гÑтую можнаÑьць калі \"ЭвалюцыÑ\" будзе далучацца да вашага "
-"паÑлужніка LDAP калі той падтрымлівае SSL ці TLS."
-
-#: addressbook/gui/component/ldap-config.glade.h:29
-msgid ""
-"Selecting this option means that Evolution will only try to use SSL/TLS if "
-"you are in a insecure environment. For example, if you and your LDAP server "
-"are behind a firewall at work, then Evolution doesn't need to use SSL/TLS "
-"because your connection is already secure."
-msgstr ""
-"Выбар гÑтага парамÑтра азначае што \"ЭвалюцыÑ\" будзе Ñпрабаваць "
-"выкарыÑтоўваць толькі SSL/TLS калі вы выкарыÑтоўваеце небÑÑьпечнае "
-"аÑÑродзьдзе. Да прыкладу, калі вы Ñ– ваш паÑлужнік LDAP працуеце "
-"па-за брандмаўÑрам, \"ЭвалюцыÑ\" не патрабуе выкарыÑÑ‚Ð°Ð½ÑŒÐ½Ñ SSL/TLS "
-"да таго чаÑу пакуль вашае злучÑньне бÑÑьпечнае."
-
-#: addressbook/gui/component/ldap-config.glade.h:30
-msgid ""
-"Selecting this option means that your server does not support either SSL or "
-"TLS. This means that your connection will be insecure, and that you will be "
-"vulnerable to security exploits. "
-msgstr ""
-"Выбар гÑтага парамÑтра азначае што ваш паÑлужнік не падтрымлівае альбо SSL "
-"альбо TLS. ГÑта азначае што вашае злучÑньне будзе небÑÑьпечным, Ñ– гÑта будзе "
-"нетрывалым да ÑкÑплойтаў бÑÑьпекі. "
-
-#: addressbook/gui/component/ldap-config.glade.h:31
-msgid "Sub"
-msgstr "Пад"
-
-#: addressbook/gui/component/ldap-config.glade.h:32
-msgid "Supported Search Bases"
-msgstr "Базы пошуку, ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð°"
-
-#: addressbook/gui/component/ldap-config.glade.h:33
-msgid ""
-"The search base is the distinguished name (DN) of the entry where your "
-"searches will begin. If you leave this blank, the search will begin at the "
-"root of the directory tree."
-msgstr ""
-"База пошуку гÑта ÑƒÐ´Ð°ÐºÐ»Ð°Ð´Ð½ÐµÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð° (DN) запіÑу дзе вы муÑіце пачынаць "
-"ваш пошук. Калі вы пакінеце гÑтае поле пуÑтым, пошук будзе пачаты з ÐºÐ¾Ñ€Ð°Ð½Ñ "
-"дрÑва каталёгаў."
-
-#: addressbook/gui/component/ldap-config.glade.h:34
-msgid ""
-"The search scope defines how deep you would like the search to extend down "
-"the directory tree. A search scope of \"sub\" will include all entries below "
-"your search base. A search scope of \"one\" will only include the entries "
-"one level beneath your base."
-msgstr ""
-"Межы пошуку вызначае Ñк глыбока вы зьбіраецеÑÑ ÑˆÑƒÐºÐ°Ñ†ÑŒ у дрÑве каталёгаў. "
-"Межы пошуку Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñк \"пад\" будуць уключаць уÑе запіÑÑ‹ пад базай "
-"пошуку. Межы пошуку Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñк \"адзін\" будуць уключаць уÑе запіÑÑ‹ "
-"ніжÑй на узровень за базу пошуку."
-
-#: addressbook/gui/component/ldap-config.glade.h:35
-msgid ""
-"This is the full name of your ldap server. For example, \"ldap.mycompany.com"
-"\"."
-msgstr "ГÑта Ð¿Ð¾ÑžÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð° вашага паÑлужніка LDAP. Да прыкладу, \"mova.linux.by\""
-
-#: addressbook/gui/component/ldap-config.glade.h:36
-msgid ""
-"This is the maximum number of entries to download. Setting this number to be "
-"too large will slow down your address book."
-msgstr ""
-"ГÑта макÑÑ‹Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñьць запіÑаў Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ–. УÑталÑваньне гÑтае "
-"лічбы Ñž вÑлікае значÑньне запаволіць вашу кнігу адраÑоў."
-
-#: addressbook/gui/component/ldap-config.glade.h:37
-msgid ""
-"This is the method evolution will use to authenticate you. Note that "
-"setting this to \"Email Address\" requires anonymous access to your ldap "
-"server."
-msgstr ""
-"ГÑÑ‚Ñ‹ мÑтад \"ЭвалюцыÑ\" будзе выкарыÑтоўваць Ð´Ð»Ñ Ð²Ð°ÑˆÐ°Ðµ аўтарызацыі. "
-"УÑталёўка значÑÐ½ÑŒÐ½Ñ Ñƒ \"ÐÐ´Ñ€Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹\"прадÑтаўлÑе ананімны доÑтуп да вашага "
-"паÑлужніка LDAP."
-
-#: addressbook/gui/component/ldap-config.glade.h:38
-msgid ""
-"This is the name for this server that will appear in your Evolution folder "
-"list. It is for display purposes only. "
-msgstr ""
-"ГÑта назва паÑлужніку ÑÐºÐ°Ñ Ð±ÑƒÐ´Ð·Ðµ адлюÑтроўвацца Ñž ÑьпіÑе Ñ‚Ñчак "
-"\"Эвалюцыі\". ГÑта толькі Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑтраваньнÑ. "
-
-#: addressbook/gui/component/ldap-config.glade.h:39
-msgid ""
-"This is the port on the LDAP server that Evolution will try to connect to. A "
-"list of standard ports has been provided. Ask your system administrator what "
-"port you should specify."
-msgstr ""
-"ГÑта порт на паÑлужніку LDAP Ñкі выкарыÑтоўвае \"ЭвалюцыÑ\" Ð´Ð»Ñ "
-"далучÑньнÑ. ЗапытайцеÑÑ Ð²Ð°ÑˆÐ°Ð³Ð° адмініÑтратара каб даведацца Ñкі "
-"порт выкарыÑтоўвае ваш паÑлужнік."
-
-#: addressbook/gui/component/ldap-config.glade.h:40
-msgid "Using distinguished name (DN)"
-msgstr "ВыкарыÑтоўваць удакладненую назву (DN)"
-
-#: addressbook/gui/component/ldap-config.glade.h:41
-msgid "Using email address"
-msgstr "ВыкарыÑтоўваць паштовую адраÑу"
-
-#: addressbook/gui/component/ldap-config.glade.h:42 mail/mail-account-gui.c:80
-#: mail/mail-config.glade.h:156
-msgid "Whenever Possible"
-msgstr "Калі магчыма"
-
-#: addressbook/gui/component/ldap-config.glade.h:43
-msgid "_Add Contacts Group"
-msgstr "Дадаць групу кантактаў"
-
-#: addressbook/gui/component/ldap-config.glade.h:44
-msgid "_Download limit:"
-msgstr "Ðб_межаваньне загрузкі:"
-
-#: addressbook/gui/component/ldap-config.glade.h:45
-msgid "_Find Possible Search Bases"
-msgstr "Пошук магчымых базаў пошуку"
-
-#: addressbook/gui/component/ldap-config.glade.h:46
-msgid "_Log in method:"
-msgstr "_ÐœÑтад уваходу:"
-
-#: addressbook/gui/component/ldap-config.glade.h:47
-#: calendar/gui/dialogs/calendar-setup.glade.h:8 mail/mail-config.glade.h:171
-msgid "_Name:"
-msgstr "_Ðазва:"
-
-#: addressbook/gui/component/ldap-config.glade.h:48
-msgid "_Port:"
-msgstr "_Порт:"
-
-#: addressbook/gui/component/ldap-config.glade.h:49
-msgid "_Search scope:"
-msgstr "Межы _пошуку:"
-
-#: addressbook/gui/component/ldap-config.glade.h:50
-msgid "_Server:"
-msgstr "ПаÑлужнік:"
-
-#: addressbook/gui/component/ldap-config.glade.h:51
-#, fuzzy
-msgid "_Timeout:"
-msgstr "Фармат чаÑу:"
-
-#: addressbook/gui/component/ldap-config.glade.h:52
-msgid "_Use secure connection:"
-msgstr "_ВыкарыÑтоўваць бÑÑьпечнае далучÑньне:"
-
-#: addressbook/gui/component/ldap-config.glade.h:53
-msgid "cards"
-msgstr "карткі"
-
-#: addressbook/gui/component/ldap-config.glade.h:54
-#: calendar/gui/dialogs/alarm-dialog.glade.h:27
-#: calendar/gui/dialogs/calendar-setup.glade.h:14 filter/filter.glade.h:15
-#: mail/mail-config.glade.h:183
-msgid "minutes"
-msgstr "хвіліны"
-
-#: addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.server.in.in.h:1
-msgid "Evolution Addressbook name selection interface"
-msgstr "ІнтÑрфÑÐ¹Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ Ñ–Ð¼Ñ Ð· кнігі адраÑоў \"Эвалюцыі\""
-
-#: addressbook/gui/component/select-names/e-select-names-popup.c:208
-msgid "Remove All"
-msgstr "Выдаліць уÑÑ‘"
-
-#: addressbook/gui/component/select-names/e-select-names-popup.c:215
-#: addressbook/gui/component/select-names/e-select-names.c:702
-#: calendar/gui/dialogs/cal-prefs-dialog.c:724
-msgid "Remove"
-msgstr "Выдаліць"
-
-#: addressbook/gui/component/select-names/e-select-names-popup.c:222
-msgid "View Contact List"
-msgstr "ПраглÑд ÑьпіÑа кантактаў"
-
-#: addressbook/gui/component/select-names/e-select-names-popup.c:222
-msgid "View Contact Info"
-msgstr "ПраглÑд кантактных зьвеÑтак"
-
-#: addressbook/gui/component/select-names/e-select-names-popup.c:229
-#: addressbook/gui/component/select-names/e-select-names-popup.c:330
-msgid "Send HTML Mail?"
-msgstr "ДаÑлаць ліÑÑ‚ у фармаце HTML?"
-
-#: addressbook/gui/component/select-names/e-select-names-popup.c:322
-#: addressbook/gui/widgets/eab-popup-control.c:982
-msgid "Add to Contacts"
-msgstr "Дадаць да кантактаў"
-
-#: addressbook/gui/component/select-names/e-select-names-popup.c:348
-msgid "Unnamed Contact"
-msgstr "Кантакт бÑз назвы"
-
-#: addressbook/gui/component/select-names/e-select-names-section.etspec.h:1
-#: addressbook/gui/component/select-names/e-select-names.etspec.h:1
-#: addressbook/gui/contact-editor/e-contact-editor-fullname.c:89
-msgid "Name"
-msgstr "ІмÑ"
-
-#: addressbook/gui/component/select-names/e-select-names-table-model.c:351
-#: addressbook/gui/component/select-names/e-select-names-text-model.c:104
-#: addressbook/gui/widgets/e-addressbook-view.c:228
-msgid "Source"
-msgstr "Крыніца"
-
-#: addressbook/gui/component/select-names/e-select-names.c:503
-#: addressbook/gui/component/select-names/select-names.glade.h:6
-msgid "Select Contacts from Address Book"
-msgstr "Выбар кантактаў з кнігі адраÑоў"
-
-#: addressbook/gui/component/select-names/select-names.glade.h:2
-msgid "<b>Contacts</b>"
-msgstr "<b>Кантакты</b>"
-
-#: addressbook/gui/component/select-names/select-names.glade.h:3
-msgid "<b>Show Contacts</b>"
-msgstr "<b>Паказаць·кантакты</b>"
-
-#: addressbook/gui/component/select-names/select-names.glade.h:4
-msgid "Address _Book:"
-msgstr "Кніга адраÑоў:"
-
-#: addressbook/gui/component/select-names/select-names.glade.h:5
-msgid "C_ategory:"
-msgstr "_КатÑгорыÑ:"
-
-#: addressbook/gui/component/select-names/select-names.glade.h:7
-msgid "_Find"
-msgstr "Пошук"
-
-#: addressbook/gui/component/select-names/select-names.glade.h:8
-msgid "_Search:"
-msgstr "По_шук:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:2
-msgid "<b>Email</b>"
-msgstr "<b>Э.пошта</b>"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:3
-msgid "<b>Home</b>"
-msgstr "<b>Хатні</b> "
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:4
-msgid "<b>Instant Messaging</b>"
-msgstr "<b>Ð¥ÑƒÑ‚ÐºÐ°Ñ Ð´Ð°Ñтаўка</b>"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:5
-msgid "<b>Job</b>"
-msgstr "<b>ПрацоўныÑ</b> "
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:6
-msgid "<b>Miscellaneous</b>"
-msgstr "<b> РозныÑ</b>"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:7
-msgid "<b>Other</b>"
-msgstr "<b>Іншы</b> "
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:8
-msgid "<b>Telephone</b>"
-msgstr "<b>ТÑлефон</b> "
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:9
-msgid "<b>Web Addresses</b>"
-msgstr "<b>Ðб ÑžÑб адраÑах</b>"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:10
-msgid "<b>Work</b>"
-msgstr "<b>Працоўны</b>"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:11
-#: addressbook/gui/contact-editor/e-contact-editor.c:184
-#: addressbook/gui/widgets/eab-contact-display.c:333
-msgid "AIM"
-msgstr "AIM"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:12
-msgid "Address:"
-msgstr "ÐдраÑ:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:13
-msgid "Anniversary:"
-msgstr "Юбілей:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:14
-msgid "Assistant:"
-msgstr "Памочнік:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:15
-msgid "Birthday:"
-msgstr "Дзень народзінаў:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:16
-msgid "Calendar:"
-msgstr "КалÑндар:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:17
-msgid "City:"
-msgstr "МеÑта:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:18
-msgid "Company:"
-msgstr "ПрадпрыемÑтва:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:19
-#: addressbook/gui/contact-editor/e-contact-editor.c:272
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:170
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.etspec.h:1
-#: addressbook/gui/widgets/e-minicard.c:181
-msgid "Contact"
-msgstr "Кантакт"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:20
-#: addressbook/gui/contact-editor/e-contact-editor.c:526
-msgid "Contact Editor"
-msgstr "РÑдактар кантактаў"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:21
-msgid "Country:"
-msgstr "Краіна:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:22
-msgid "Department:"
-msgstr "ПадразьдзÑленьне:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:23
-msgid "Free/Busy:"
-msgstr "Вольны/ЗанÑÑ‚Ñ‹ URL:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:24
-msgid "Full _Name..."
-msgstr "Поўнае _ІмÑ..."
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:25
-msgid "Home Page:"
-msgstr "ХатнÑÑ Ñтаронка:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:26
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:66
-msgid "MSN Messenger"
-msgstr "MSN Messenger"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:27
-msgid "Mailing Address"
-msgstr "Паштовы адраÑ"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:28
-msgid "Manager:"
-msgstr "ÐœÑнÑджÑÑ€:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:29
-msgid "Ni_ckname:"
-msgstr "ÐœÑнушка:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:30
-msgid "Notes:"
-msgstr "Заўвагі:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:31
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:63
-msgid "Novell Groupwise"
-msgstr "Novell Groupwise"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:32
-msgid "Office:"
-msgstr "КанцылÑрыÑ:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:33
-msgid "PO Box:"
-msgstr "ÐŸÐ°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑкрынÑ:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:35
-msgid "Personal Information"
-msgstr "ÐÑабіÑÑ‚Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:36
-msgid "Profession:"
-msgstr "ПрафÑÑÑ–Ñ:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:37
-msgid "Spouse:"
-msgstr "Супруг(а):"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:38
-msgid "State/Province:"
-msgstr "ВоблаÑьць/Раён:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:39
-msgid "Title:"
-msgstr "ПаÑада:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:40
-msgid "Video Chat:"
-msgstr "ВідÑаканфÑÑ€ÑнцыÑ:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:41
-msgid "Wants to receive HTML mail"
-msgstr "Жадае атрымліваць пошту ў HTML"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:42
-msgid "Web Log:"
-msgstr "УÑб-чаÑопіÑ:"
-
-#. red
-#: addressbook/gui/contact-editor/contact-editor.glade.h:43
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:244
-#: addressbook/gui/contact-editor/e-contact-editor.c:201
-#: filter/filter-label.c:122 mail/em-migrate.c:1012 mail/mail-config.c:77
-#: mail/mail-config.glade.h:157
-msgid "Work"
-msgstr "Праца"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:44
-msgid "Zip/Postal Code:"
-msgstr "Паштовы індÑкÑ:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:45
-msgid "_Categories"
-msgstr "_КатÑгорыі"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:46
-msgid "_File under:"
-msgstr "Ðазва файла:"
-
-#: addressbook/gui/contact-editor/contact-editor.glade.h:47
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:12
-msgid "_Where:"
-msgstr "Дзе:"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:96
-#: addressbook/gui/widgets/eab-contact-display.c:352
-#: addressbook/gui/widgets/eab-contact-display.c:367
-msgid "Address"
-msgstr "ÐдраÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:103
-#: addressbook/gui/contact-editor/e-contact-editor-fullname.c:95
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:141
-#: addressbook/gui/contact-editor/e-contact-editor.c:293
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:184
-#: addressbook/gui/widgets/e-addressbook-model.c:309
-#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:392
-#: addressbook/gui/widgets/e-minicard-label.c:164
-#: addressbook/gui/widgets/e-minicard-view-widget.c:119
-#: addressbook/gui/widgets/e-minicard-view.c:498
-#: addressbook/gui/widgets/e-minicard.c:174
-msgid "Editable"
-msgstr "Можа Ñ€Ñдагавацца"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:136
-msgid "United States"
-msgstr "Ð—Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¨Ñ‚Ð°Ñ‚Ñ‹"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:137
-msgid "Afghanistan"
-msgstr "ÐўганіÑтан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:138
-msgid "Albania"
-msgstr "ÐльбаніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:139
-msgid "Algeria"
-msgstr "Ðльжыр"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:140
-msgid "American Samoa"
-msgstr "ÐмÑрыканÑкае Самоа"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:141
-msgid "Andorra"
-msgstr "Ðндора"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:142
-msgid "Angola"
-msgstr "Ðнгола"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:143
-msgid "Anguilla"
-msgstr "Ðнгулла"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:144
-msgid "Antarctica"
-msgstr "Ðнтарктыка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:145
-msgid "Antigua And Barbuda"
-msgstr "Ðнцігуа Ñ– Барбуда"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:146
-msgid "Argentina"
-msgstr "Ðргентына"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:147
-msgid "Armenia"
-msgstr "ÐрмÑніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:148
-msgid "Aruba"
-msgstr "Ðруба"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:149
-msgid "Australia"
-msgstr "ÐÑžÑтраліÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:150
-msgid "Austria"
-msgstr "ÐÑžÑтрыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:151
-msgid "Azerbaijan"
-msgstr "ÐзÑрбайджан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:152
-msgid "Bahamas"
-msgstr "Багамы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:153
-msgid "Bahrain"
-msgstr "БахрÑйн"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:154
-msgid "Bangladesh"
-msgstr "БанглÑдÑш"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:155
-msgid "Barbados"
-msgstr "БарбадаÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:156
-msgid "Belarus"
-msgstr "БеларуÑÑŒ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:157
-msgid "Belgium"
-msgstr "БÑльгіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:158
-msgid "Belize"
-msgstr "Беліз"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:159
-msgid "Benin"
-msgstr "Бенін"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:160
-msgid "Bermuda"
-msgstr "БÑрмуды"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:161
-msgid "Bhutan"
-msgstr "Бутан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:162
-msgid "Bolivia"
-msgstr "БалівіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:163
-msgid "Bosnia And Herzegowina"
-msgstr "БоÑÑŒÐ½Ñ–Ñ Ñ– Герцагавіна"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:164
-msgid "Botswana"
-msgstr "БатÑвана"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:165
-msgid "Bouvet Island"
-msgstr "Ð’Ñ‹Ñпа Боўвіт"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:166
-msgid "Brazil"
-msgstr "БразыліÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:167
-msgid "British Indian Ocean Territory"
-msgstr "БрытанÑÐºÐ°Ñ Ñ‚ÑÑ€Ñ‹Ñ‚Ð¾Ñ€Ñ‹Ñ Ð†Ð½Ð´Ñ‹Ð¹Ñкага акіÑна"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:168
-msgid "Brunei Darussalam"
-msgstr "Брунеі ДураÑалÑм"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:169
-msgid "Bulgaria"
-msgstr "БаўгарыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:170
-msgid "Burkina Faso"
-msgstr "Буркіна ХваÑо"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:171
-msgid "Burundi"
-msgstr "Бурундзі"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:172
-msgid "Cambodia"
-msgstr "Камбоджа"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:173
-msgid "Cameroon"
-msgstr "КамÑрун"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:174
-msgid "Canada"
-msgstr "Канада"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:175
-msgid "Cape Verde"
-msgstr "Капа Ð’ÑрдÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:176
-msgid "Cayman Islands"
-msgstr "ÐšÐ°Ð¹Ð¼Ð°Ð½Ð°Ð²Ñ‹Ñ Ð²Ñ‹Ñпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:177
-msgid "Central African Republic"
-msgstr "ЦÑÐ½Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ ÐфрыканÑÐºÐ°Ñ Ð ÑÑпубліка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:178
-msgid "Chad"
-msgstr "Чад"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:179
-msgid "Chile"
-msgstr "Чылі"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:180
-msgid "China"
-msgstr "Кітай"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:181
-msgid "Christmas Island"
-msgstr "Ð’Ñ‹Ñпа РаÑÑтва"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:182
-msgid "Cocos (Keeling) Islands"
-msgstr "КакоÑÐ°Ð²Ñ‹Ñ Ð²Ñ‹Ñпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:183
-msgid "Colombia"
-msgstr "КалюмбіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:184
-msgid "Comoros"
-msgstr "КамараÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:185
-msgid "Congo"
-msgstr "Конга"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:186
-msgid "Congo, The Democratic Republic Of The"
-msgstr "ДÑÐ¼Ð°ÐºÑ€Ð°Ñ‚Ñ‹Ñ‡Ð½Ð°Ñ Ð ÑÑпубліка Конга"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:187
-msgid "Cook Islands"
-msgstr "Ð’Ñ‹Ñпы Кука"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:188
-msgid "Costa Rica"
-msgstr "КоÑта-Рыка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:189
-msgid "Cote d'Ivoire"
-msgstr "ÐšÐ¾Ñ‚Ñ Ð´Ñ Ð†Ð½Ð²Ð¾Ñ€Ñ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:190
-msgid "Croatia"
-msgstr "ХарватыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:191
-msgid "Cuba"
-msgstr "Куба"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:192
-msgid "Cyprus"
-msgstr "Кіпр"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:193
-msgid "Czech Republic"
-msgstr "ЧÑÑÐºÐ°Ñ Ð ÑÑпубліка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:194
-msgid "Denmark"
-msgstr "ДаніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:195
-msgid "Djibouti"
-msgstr "Джыбуці"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:196
-msgid "Dominica"
-msgstr "Дамініка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:197
-msgid "Dominican Republic"
-msgstr "ДамініканÑÐºÐ°Ñ Ð ÑÑпубліка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:198
-msgid "Ecuador"
-msgstr "Эквадор"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:199
-msgid "Egypt"
-msgstr "Эгіпт"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:200
-msgid "El Salvador"
-msgstr "Эль Сальвадор"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:201
-msgid "Equatorial Guinea"
-msgstr "ЭкватарыÑÐ»ÑŒÐ½Ð°Ñ Ð“Ð²Ñ–Ð½ÑÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:202
-msgid "Eritrea"
-msgstr "ЭрытрÑÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:203
-msgid "Estonia"
-msgstr "ЭÑтоніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:204
-msgid "Ethiopia"
-msgstr "ЭтыёпіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:205
-msgid "Falkland Islands"
-msgstr "ФолклÑндÑÐºÑ–Ñ Ð²Ñ‹Ñпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:206
-msgid "Faroe Islands"
-msgstr "Ð’Ñ‹Ñпы Фаро"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:207
-msgid "Fiji"
-msgstr "Хвіджі"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:208
-msgid "Finland"
-msgstr "ФінлÑндыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:209
-msgid "France"
-msgstr "ФранцыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:210
-msgid "French Guiana"
-msgstr "ФранцуÑÐºÐ°Ñ Ð“Ð²Ñ–Ñна"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:211
-msgid "French Polynesia"
-msgstr "ФранцуÑÐºÐ°Ñ ÐŸÐ°Ð»Ñ–Ð½ÑзіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:212
-msgid "French Southern Territories"
-msgstr "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ñ‹Ñ Ð¤Ñ€Ð°Ð½Ñ†ÑƒÑÐºÑ–Ñ Ð¢Ñрыторыі"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:213
-msgid "Gabon"
-msgstr "Габон"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:214
-msgid "Gambia"
-msgstr "ГамбіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:215
-msgid "Georgia"
-msgstr "ГрузіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:216
-msgid "Germany"
-msgstr "ÐÑмеччына"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:217
-msgid "Ghana"
-msgstr "Гана"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:218
-msgid "Gibraltar"
-msgstr "Гібральтар"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:219
-msgid "Greece"
-msgstr "ГрÑцыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:220
-msgid "Greenland"
-msgstr "ГрÑнлÑндыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:221
-msgid "Grenada"
-msgstr "ГрÑнада"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:222
-msgid "Guadeloupe"
-msgstr "ГвадÑлупа"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:223
-msgid "Guam"
-msgstr "Гуам"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:224
-msgid "Guatemala"
-msgstr "ГватÑмала"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:225
-msgid "Guernsey"
-msgstr ""
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:226
-msgid "Guinea"
-msgstr "ГвінÑÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:227
-msgid "Guinea-bissau"
-msgstr "ГвінÑÑ-БіÑаў"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:228
-msgid "Guyana"
-msgstr "ГаÑна"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:229
-msgid "Haiti"
-msgstr "Гаіці"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:230
-msgid "Heard And McDonald Islands"
-msgstr "Ð’Ñ‹Ñпы Херда Ñ– МакДональда"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:231
-msgid "Holy See"
-msgstr "СьвÑтое мора"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:232
-msgid "Honduras"
-msgstr "ГандураÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:233
-msgid "Hong Kong"
-msgstr "СÑн-Ган"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:234
-msgid "Hungary"
-msgstr "Вугоршчына"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:235
-msgid "Iceland"
-msgstr "ІÑьлÑндыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:236
-msgid "India"
-msgstr "ІндыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:237
-msgid "Indonesia"
-msgstr "ІнданÑзіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:238
-msgid "Iran"
-msgstr "Іран"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:239
-msgid "Iraq"
-msgstr "Ірак"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:240
-msgid "Ireland"
-msgstr "ІрлÑндыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:241
-msgid "Isle of Man"
-msgstr ""
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:242
-msgid "Israel"
-msgstr "Ізраіль"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:243
-msgid "Italy"
-msgstr "ІталіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:244
-msgid "Jamaica"
-msgstr "Ямайка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:245
-msgid "Japan"
-msgstr "ЯпоніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:246
-msgid "Jersey"
-msgstr "ДжÑÑ€ÑÑ–"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:247
-msgid "Jordan"
-msgstr "Ярдан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:248
-msgid "Kazakhstan"
-msgstr "КазахÑтан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:249
-msgid "Kenya"
-msgstr "КеніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:250
-msgid "Kiribati"
-msgstr "Кірыбаці"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:251
-msgid "Korea, Democratic People's Republic Of"
-msgstr "КарÑйÑÐºÐ°Ñ ÐÐ°Ñ€Ð¾Ð´Ð½Ð°Ñ Ð”ÑÐ¼Ð°ÐºÑ€Ð°Ñ‚Ñ‹Ñ‡Ð½Ð°Ñ Ð ÑÑпубліка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:252
-msgid "Korea, Republic Of"
-msgstr "КарÑйÑÐºÐ°Ñ Ð ÑÑпубліка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:253
-msgid "Kuwait"
-msgstr "КувÑйт"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:254
-msgid "Kyrgyzstan"
-msgstr "КыргызÑтан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:255
-msgid "Laos"
-msgstr "ЛаоÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:256
-msgid "Latvia"
-msgstr "ЛатвіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:257
-msgid "Lebanon"
-msgstr "Лібан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:258
-msgid "Lesotho"
-msgstr "ЛіÑота"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:259
-msgid "Liberia"
-msgstr "ЛібÑрыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:260
-msgid "Libya"
-msgstr "ЛібіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:261
-msgid "Liechtenstein"
-msgstr "ЛіхтÑнштÑйн"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:262
-msgid "Lithuania"
-msgstr "Жамойць"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:263
-msgid "Luxembourg"
-msgstr "ЛюкÑÑмбург"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:264
-msgid "Macao"
-msgstr "Макао"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:265
-msgid "Macedonia"
-msgstr "МакедоніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:266
-msgid "Madagascar"
-msgstr "МадагаÑкар"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:267
-msgid "Malawi"
-msgstr "МалÑві"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:268
-msgid "Malaysia"
-msgstr "МалазіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:269
-msgid "Maldives"
-msgstr "Мальды"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:270
-msgid "Mali"
-msgstr "Малі"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:271
-msgid "Malta"
-msgstr "Мальта"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:272
-msgid "Marshall Islands"
-msgstr "Маршалавы выÑпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:273
-msgid "Martinique"
-msgstr "Марцінік"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:274
-msgid "Mauritania"
-msgstr "МаўрытаніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:275
-msgid "Mauritius"
-msgstr "МарыцыюÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:276
-msgid "Mayotte"
-msgstr "МайотÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:277
-msgid "Mexico"
-msgstr "ÐœÑкÑыка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:278
-msgid "Micronesia"
-msgstr "МікранÑзіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:279
-msgid "Moldova, Republic Of"
-msgstr "Малдова"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:280
-msgid "Monaco"
-msgstr "Манака"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:281
-msgid "Mongolia"
-msgstr "МанголіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:282
-msgid "Montserrat"
-msgstr "МанÑÑрат"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:283
-msgid "Morocco"
-msgstr "Марока"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:284
-msgid "Mozambique"
-msgstr "Мазамбік"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:285
-msgid "Myanmar"
-msgstr "МаÑнмар"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:286
-msgid "Namibia"
-msgstr "ÐамібіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:287
-msgid "Nauru"
-msgstr "Ðаўру"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:288
-msgid "Nepal"
-msgstr "ÐÑпал"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:289
-msgid "Netherlands"
-msgstr "ÐідÑрлÑнды"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:290
-msgid "Netherlands Antilles"
-msgstr "ÐідÑрлÑÐ½Ð´Ð·ÐºÐ°Ñ ÐнцыліÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:291
-msgid "New Caledonia"
-msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÐµÐ´Ð¾Ð½Ñ–Ñ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:292
-msgid "New Zealand"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð—ÑлÑндыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:293
-msgid "Nicaragua"
-msgstr "Ðікарагуа"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:294
-msgid "Niger"
-msgstr "Ðігер"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:295
-msgid "Nigeria"
-msgstr "ÐігерыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:296
-msgid "Niue"
-msgstr "ÐÑŽ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:297
-msgid "Norfolk Island"
-msgstr "ÐорфалÑÐºÑ–Ñ Ð²Ñ‹Ñпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:298
-msgid "Northern Mariana Islands"
-msgstr "Ð’Ñ‹Ñпы Паўночнае Мар'Ñны"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:299
-msgid "Norway"
-msgstr "ÐарвÑгіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:300
-msgid "Oman"
-msgstr "Ðман"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:301
-msgid "Pakistan"
-msgstr "ПакіÑтан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:302
-msgid "Palau"
-msgstr "Палаў"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:303
-msgid "Palestinian Territory"
-msgstr "ПалеÑтына"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:304
-msgid "Panama"
-msgstr "Панама"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:305
-msgid "Papua New Guinea"
-msgstr "Папуа ÐÐ¾Ð²Ð°Ñ Ð“Ð²Ñ–Ð½ÑÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:306
-msgid "Paraguay"
-msgstr "Парагвай"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:307
-msgid "Peru"
-msgstr "Перу"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:308
-msgid "Philippines"
-msgstr "Філіпіны"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:309
-msgid "Pitcairn"
-msgstr "Паткаірн"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:310
-msgid "Poland"
-msgstr "Польшча"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:311
-msgid "Portugal"
-msgstr "ПартугаліÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:312
-msgid "Puerto Rico"
-msgstr "ПуÑрта Рыка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:313
-msgid "Qatar"
-msgstr "КватÑÑ€"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:314
-msgid "Reunion"
-msgstr "Перааб'Ñднаньне"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:315
-msgid "Romania"
-msgstr "РумыніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:316
-msgid "Russian Federation"
-msgstr "РаÑейÑÐºÐ°Ñ Ð¤ÑдÑрацыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:317
-msgid "Rwanda"
-msgstr "Руанда"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:318
-msgid "Saint Kitts And Nevis"
-msgstr "СьвÑÑ‚Ñ‹Ñ ÐšÑ–Ñ‚Ñ Ñ– ÐÑвіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:319
-msgid "Saint Lucia"
-msgstr "Санта Лючыо"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:320
-msgid "Saint Vincent And The Grena-dines"
-msgstr "СьвÑÑ‚Ñ‹Ñ Ð’Ñ–Ð½Ñ†Ñнт Ñ– ГрÑнады"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:321
-msgid "Samoa"
-msgstr "Самоа"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:322
-msgid "San Marino"
-msgstr "Сан Марына"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:323
-msgid "Sao Tome And Principe"
-msgstr "Сао Том і Прынцып"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:324
-msgid "Saudi Arabia"
-msgstr "СаудаўÑÐºÐ°Ñ ÐравіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:325
-msgid "Senegal"
-msgstr "Сенегал"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:326
-msgid "Serbia And Montenegro"
-msgstr "СÑÑ€Ð±Ñ–Ñ Ð¹ ЧарнагорыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:327
-msgid "Seychelles"
-msgstr "СейшÑлы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:328
-msgid "Sierra Leone"
-msgstr "Сьера ЛіонÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:329
-msgid "Singapore"
-msgstr "Сынгапур"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:330
-msgid "Slovakia"
-msgstr "СлавакіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:331
-msgid "Slovenia"
-msgstr "СлавеніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:332
-msgid "Solomon Islands"
-msgstr "СалÑмонавы выÑпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:333
-msgid "Somalia"
-msgstr "СамаліÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:334
-msgid "South Africa"
-msgstr "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ð°Ñ Ðфрыка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:335
-msgid "South Georgia And The South Sandwich Islands"
-msgstr "Ð’Ñ‹Ñпы ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ð°Ñ Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ñ‹Ñ Ñ– Паўднёвы Сандвіч"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:336
-msgid "Spain"
-msgstr "ГішпаніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:337
-msgid "Sri Lanka"
-msgstr "Шры Ланка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:338
-msgid "St. Helena"
-msgstr "Св. ГÑлена"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:339
-msgid "St. Pierre And Miquelon"
-msgstr "Сьв. П'ер і Мігель"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:340
-msgid "Sudan"
-msgstr "Судан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:341
-msgid "Suriname"
-msgstr "Сарынам"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:342
-msgid "Svalbard And Jan Mayen Islands"
-msgstr "Ð’Ñ‹Ñпы Свальбард Ñ– Ян Майен"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:343
-msgid "Swaziland"
-msgstr "СвазілÑнд"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:344
-msgid "Sweden"
-msgstr "ШвÑцыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:345
-msgid "Switzerland"
-msgstr "ШвÑйцарыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:346
-msgid "Syria"
-msgstr "СірыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:347
-msgid "Taiwan"
-msgstr "Тайвань"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:348
-msgid "Tajikistan"
-msgstr "ТаджыкіÑтан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:349
-msgid "Tanzania, United Republic Of"
-msgstr "Ð—Ð»ÑƒÑ‡Ð°Ð½Ð°Ñ Ð ÑÑпубліка ТанзаніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:350
-msgid "Thailand"
-msgstr "Тайланд"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:351
-msgid "Timor-Leste"
-msgstr ""
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:352
-msgid "Togo"
-msgstr "Тога"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:353
-msgid "Tokelau"
-msgstr "Такелаў"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:354
-msgid "Tonga"
-msgstr "Тонга"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:355
-msgid "Trinidad And Tobago"
-msgstr "Трынідад і Табага"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:356
-msgid "Tunisia"
-msgstr "ТуніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:357
-msgid "Turkey"
-msgstr "ТурцыÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:358
-msgid "Turkmenistan"
-msgstr "ТуркмÑніÑтан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:359
-msgid "Turks And Caicos Islands"
-msgstr "ТурÑÑ†ÐºÑ–Ñ Ñ– КейкоÑавы выÑпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:360
-msgid "Tuvalu"
-msgstr "Туалю"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:361
-msgid "Uganda"
-msgstr "Уганда"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:362
-msgid "Ukraine"
-msgstr "Украіна"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:363
-msgid "United Arab Emirates"
-msgstr "Ð—Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐрабÑÐºÑ–Ñ Ð­Ð¼Ñ–Ñ€Ð°Ñ‚Ñ‹"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:364
-msgid "United Kingdom"
-msgstr "Злучанае КаралеўÑтва"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:365
-msgid "United States Minor Outlying Islands"
-msgstr "ÐеіÑтотна Ð±Ð»Ñ–Ð·ÐºÑ–Ñ Ð´Ð° Злучаных штатаў выÑпы"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:366
-msgid "Uruguay"
-msgstr "Уругвай"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:367
-msgid "Uzbekistan"
-msgstr "УзбÑкіÑтан"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:368
-msgid "Vanuatu"
-msgstr "Ванааці"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:369
-msgid "Venezuela"
-msgstr "Ð’ÑнÑÑуÑла"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:370
-msgid "Viet Nam"
-msgstr "Віетнам"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:371
-msgid "Virgin Islands, British"
-msgstr "ВіргінÑÐºÑ–Ñ Ð²Ñ‹Ñпы, БрытаніÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:372
-msgid "Virgin Islands, U.S."
-msgstr "ВірджынÑÐºÑ–Ñ Ð²Ñ‹Ñпы, ЗШÐ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:373
-msgid "Wallis And Futuna Islands"
-msgstr "Ð’Ñ‹Ñпы ВаліÑа Ñ– Хватана"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:374
-msgid "Western Sahara"
-msgstr "ЗаходнÑÑ Ð¡Ð°Ñ…Ð°Ñ€Ð°"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:375
-msgid "Yemen"
-msgstr "ЕмÑн"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:376
-msgid "Zambia"
-msgstr "ЗамбіÑ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-address.c:377
-msgid "Zimbabwe"
-msgstr "Зімбабве"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:62
-msgid "AOL Instant Messenger"
-msgstr "AOL Instant Messenger"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:64
-#: addressbook/gui/contact-editor/e-contact-editor.c:185
-#: addressbook/gui/widgets/eab-contact-display.c:336
-msgid "Jabber"
-msgstr "Jabber"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:65
-msgid "Yahoo Messenger"
-msgstr "Yahoo Messenger"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:67
-#: addressbook/gui/contact-editor/e-contact-editor.c:188
-#: addressbook/gui/widgets/eab-contact-display.c:335
-msgid "ICQ"
-msgstr "ICQ"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:118
-msgid "Service"
-msgstr "ПаÑлуга"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:127
-#: calendar/gui/dialogs/cal-prefs-dialog.c:578
-#: calendar/gui/e-cal-list-view.etspec.h:3
-msgid "Location"
-msgstr "МейÑца"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:134
-msgid "Username"
-msgstr "Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:240
-#: addressbook/gui/contact-editor/e-contact-editor.c:202
-msgid "Home"
-msgstr "Хатні"
-
-#: addressbook/gui/contact-editor/e-contact-editor-im.c:248
-#: addressbook/gui/contact-editor/e-contact-editor.c:203
-msgid "Other"
-msgstr "Іншы"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:186
-#: addressbook/gui/widgets/eab-contact-display.c:338
-msgid "Yahoo"
-msgstr "Yahoo"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:187
-#: addressbook/gui/widgets/eab-contact-display.c:337
-msgid "MSN"
-msgstr "MSN"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:189
-#: addressbook/gui/widgets/eab-contact-display.c:334
-msgid "GroupWise"
-msgstr "GroupWise"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:258
-msgid "Source Book"
-msgstr "Крыніца кнігі"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:265
-msgid "Target Book"
-msgstr ""
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:279
-msgid "Is New Contact"
-msgstr "ГÑта новы кантакт"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:286
-msgid "Writable Fields"
-msgstr "Палі у ÑÐºÑ–Ñ Ð¼Ð¾Ð¶Ð½Ð° піÑаць"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:300
-msgid "Changed"
-msgstr "Зьменена"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:2428
-msgid "This contact belongs to these categories:"
-msgstr "ГÑÑ‚Ñ‹ кантакт належыць наÑтупным катÑгорыÑм:"
-
-#. Create the selector
-#: addressbook/gui/contact-editor/e-contact-editor.c:2505
-msgid "Please select an image for this contact"
-msgstr "Калі лаÑка выберыце Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ Ð´Ð»Ñ Ð³Ñтага кантакту"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:2509
-msgid "No image"
-msgstr "ÐÑма відарыÑу"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:2712
-msgid ""
-"The contact data is invalid:\n"
-"\n"
-msgstr ""
-"ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° кантакту:\n"
-"\n"
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:2740
-msgid "Invalid contact."
-msgstr "Памылковы кантакт."
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:2799
-msgid ""
-"The contact cannot be saved to the selected address book. Do you want to "
-"discard changes?"
-msgstr ""
-
-#: addressbook/gui/contact-editor/e-contact-editor.c:2822
-msgid ""
-"You are moving the contact from one address book to another, but it cannot "
-"be removed from the source. Do you want to save a copy instead?"
-msgstr ""
-
-#: addressbook/gui/contact-editor/e-contact-quick-add.c:280
-msgid "Contact Quick-Add"
-msgstr "Хуткае даданьне кантакту"
-
-#: addressbook/gui/contact-editor/e-contact-quick-add.c:283
-msgid "_Edit Full"
-msgstr "РÑдагаваньне поўнага імÑ"
-
-#: addressbook/gui/contact-editor/e-contact-quick-add.c:301
-#: mail/mail-config.glade.h:166
-msgid "_Full Name:"
-msgstr "Поўнае імÑ:"
-
-#: addressbook/gui/contact-editor/e-contact-quick-add.c:307
-msgid "E-_mail:"
-msgstr "Э. пошта:"
-
-#: addressbook/gui/contact-editor/eab-editor.c:319
-msgid ""
-"Are you sure you want\n"
-"to delete these contacts?"
-msgstr ""
-"Ð’Ñ‹ ўпÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце\n"
-"выдаліць гÑÑ‚Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹?"
-
-#: addressbook/gui/contact-editor/eab-editor.c:322
-msgid ""
-"Are you sure you want\n"
-"to delete this contact?"
-msgstr ""
-"Ð’Ñ‹ ўпÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце\n"
-"выдаліць гÑÑ‚Ñ‹ кантакт?"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:2
-msgid "Address _2:"
-msgstr "ÐÐ´Ñ€Ð°Ñ _2:"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:3
-msgid "Ci_ty:"
-msgstr "_МеÑта:"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:4
-msgid "Countr_y:"
-msgstr "_Краіна:"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:5
-msgid "Full Address"
-msgstr "Поўны адраÑ"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:6
-msgid "_Address:"
-msgstr "_ÐдраÑ:"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:7
-msgid "_PO Box:"
-msgstr "_ÐŸÐ°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑкрынÑ:"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:8
-msgid "_State/Province:"
-msgstr "_ВоблаÑьць/Раён:"
-
-#: addressbook/gui/contact-editor/fulladdr.glade.h:9
-msgid "_ZIP Code:"
-msgstr "_Паштовы індÑкÑ:"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:2
-msgid "Dr."
-msgstr "Доктар"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:3
-msgid "Esq."
-msgstr "ЭÑкв."
-
-#: addressbook/gui/contact-editor/fullname.glade.h:4
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:15
-msgid "Full Name"
-msgstr "Поўнае імÑ"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:5
-msgid "I"
-msgstr "І"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:6
-msgid "II"
-msgstr "II"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:7
-msgid "III"
-msgstr "III"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:8
-msgid "Jr."
-msgstr "мл."
-
-#: addressbook/gui/contact-editor/fullname.glade.h:9
-msgid "Miss"
-msgstr "Спадарычна"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:10
-msgid "Mr."
-msgstr "Сп."
-
-#: addressbook/gui/contact-editor/fullname.glade.h:11
-msgid "Mrs."
-msgstr "Сп."
-
-#: addressbook/gui/contact-editor/fullname.glade.h:12
-msgid "Ms."
-msgstr "Сп."
-
-#: addressbook/gui/contact-editor/fullname.glade.h:13
-msgid "Sr."
-msgstr "Сп."
-
-#: addressbook/gui/contact-editor/fullname.glade.h:14
-msgid "_First:"
-msgstr "_ІмÑ:"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:15
-msgid "_Last:"
-msgstr "Прозьвішча:"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:16
-msgid "_Middle:"
-msgstr "_Ð†Ð¼Ñ Ð¿Ð° бацьку:"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:17
-msgid "_Suffix:"
-msgstr "_СуфікÑ:"
-
-#: addressbook/gui/contact-editor/fullname.glade.h:18
-msgid "_Title:"
-msgstr "_ПаÑада:"
-
-#: addressbook/gui/contact-editor/im.glade.h:2
-msgid "Add IM Account"
-msgstr "Дадаць уліковы Ð·Ð°Ð¿Ñ–Ñ Ñ…ÑƒÑ‚ÐºÐ°Ð¹ даÑтаўкі паведамленьнÑÑž"
-
-#: addressbook/gui/contact-editor/im.glade.h:3
-msgid "_Account name:"
-msgstr "Ðазва уліковага запіÑу:"
-
-#: addressbook/gui/contact-editor/im.glade.h:4
-msgid "_IM Service:"
-msgstr "ПаÑлуга хуткай даÑтаўкі:"
-
-#: addressbook/gui/contact-editor/im.glade.h:5
-msgid "_Location:"
-msgstr "_МейÑца:"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:4
-msgid "Add an email to the List"
-msgstr ""
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:5
-msgid "Insert email adresses from Adress Book"
-msgstr "УÑтаўка адраÑу з кнігі адраÑоў"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:6
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:704
-msgid "Members"
-msgstr "Удзельнікі"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:7
-msgid "Remove an email address from the List"
-msgstr "Выдаліць Ñ.паштовы Ð°Ð´Ñ€Ð°Ñ Ñа ÑьпіÑу"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:8
-msgid "Select"
-msgstr "Вылучаны"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:9
-msgid "_Hide addresses when sending mail to this list"
-msgstr "Хаваць адраÑÑ‹ пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– пошты Ñž гÑÑ‚Ñ‹ ÑьпіÑ"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:10
-msgid "_List name:"
-msgstr "Ðазва ÑьпіÑа:"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:11
-msgid "_Type an email address or drag a contact into the list below:"
-msgstr "Пазначце Ñ. пошту ці перацÑгніце кантакт у ÑÑŒÐ¿Ñ–Ñ Ð½Ñ–Ð¶Ñй:"
-
-#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:13
-#: smime/gui/smime-ui.glade.h:48
-msgid "dialog1"
-msgstr "дыÑлёг1"
-
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:163
-#: addressbook/gui/widgets/e-addressbook-model.c:295
-#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:378
-#: addressbook/gui/widgets/e-addressbook-view.c:221
-#: addressbook/gui/widgets/e-minicard-view-widget.c:105
-#: addressbook/gui/widgets/e-minicard-view.c:484
-msgid "Book"
-msgstr "Кніга"
-
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:177
-msgid "Is New List"
-msgstr "ГÑта новы ÑьпіÑ"
-
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:726
-#: calendar/gui/e-meeting-list-view.c:60
-#: calendar/gui/e-meeting-list-view.c:457
-msgid "Required Participants"
-msgstr "ПатрÑÐ±Ð°Ð²Ð°Ð½Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
-
-#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:803
-msgid "Contact List Editor"
-msgstr "РÑдактар ÑьпіÑу кантактаў"
-
-#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:1
-msgid "Changed Contact:"
-msgstr "Зьменены кантакт:"
-
-#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:2
-msgid "Conflicting Contact:"
-msgstr "Канфліктны кантакт:"
-
-#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:3
-#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:1
-msgid "Duplicate Contact Detected"
-msgstr "Вызначана дублÑваньне кантактаў"
-
-#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:4
-msgid ""
-"The changed email or name of this contact already\n"
-"exists in this folder. Would you like to add it anyway?"
-msgstr ""
-"Зьменены Ð°Ð´Ñ€Ð°Ñ Ñ†Ñ– Ñ–Ð¼Ñ Ð³Ñтае кантактнае аÑобы ужо\n"
-"прыÑутнічаюць у гÑтае Ñ‚Ñчцы. УÑÑ‘ адно жадаеце дадаць?"
-
-#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:2
-msgid "New Contact:"
-msgstr "Ðовы кантакт:"
-
-#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:3
-msgid "Original Contact:"
-msgstr "Ðрыгінальны кантакт:"
-
-#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:4
-msgid ""
-"The name or email address of this contact already exists\n"
-"in this folder. Would you like to add it anyway?"
-msgstr ""
-"Ð†Ð¼Ñ Ñ†Ñ– Ñ. пошта гÑтае кантактнае аÑобы ужо Ñ–Ñнуюць\n"
-"у гÑтае Ñ‚Ñчцы. УÑÑ‘ адно жадаеце дадаць?"
-
-#. FIXME: get the toplevel window...
-#: addressbook/gui/search/e-addressbook-search-dialog.c:170
-#: widgets/misc/e-filter-bar.c:156
-msgid "Advanced Search"
-msgstr "ÐдмыÑловы пошук"
-
-#: addressbook/gui/widgets/e-addressbook-model.c:148
-msgid "No contacts"
-msgstr "ÐÑма кантактаў"
-
-#: addressbook/gui/widgets/e-addressbook-model.c:151
-#, c-format
-msgid "%d contact"
-msgstr "%d кантакт"
-
-#: addressbook/gui/widgets/e-addressbook-model.c:302
-#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:385
-#: addressbook/gui/widgets/e-addressbook-view.c:235
-#: addressbook/gui/widgets/e-minicard-view-widget.c:112
-#: addressbook/gui/widgets/e-minicard-view.c:491
-msgid "Query"
-msgstr "Запыт"
-
-#: addressbook/gui/widgets/e-addressbook-model.c:445
-msgid "Error getting book view"
-msgstr "Памылка Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ñ€Ð°Ð³Ð»Ñду кнігі"
-
-#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:399
-msgid "Model"
-msgstr "МадÑль"
-
-#: addressbook/gui/widgets/e-addressbook-table-adapter.c:103
-msgid "Error modifying card"
-msgstr "Памылка пад Ñ‡Ð°Ñ Ð·ÑŒÐ¼ÐµÐ½Ñ‹ карткі"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:167
-msgid "Name begins with"
-msgstr "Ðазва пачынаецца з"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:168
-msgid "Email begins with"
-msgstr "Э. пошта пачынаецца з"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:169
-#: calendar/gui/cal-search-bar.c:54
-msgid "Category is"
-msgstr "КатÑгорыÑ"
-
-#. We attach subitems below
-#: addressbook/gui/widgets/e-addressbook-view.c:170
-#: calendar/gui/cal-search-bar.c:49
-msgid "Any field contains"
-msgstr "Любое поле ўтрымлівае"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:171
-#: addressbook/gui/widgets/e-addressbook-view.c:176
-msgid "Advanced..."
-msgstr "ÐдмыÑловае..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:242
-#: calendar/gui/dialogs/meeting-page.etspec.h:11
-#: calendar/gui/e-calendar-table.etspec.h:13
-#: calendar/gui/e-meeting-list-view.c:227
-#: calendar/gui/e-meeting-time-sel.etspec.h:11
-msgid "Type"
-msgstr "Тып"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:544
-msgid "Address Book"
-msgstr "Кніга адраÑоў"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:888
-#: addressbook/gui/widgets/e-addressbook-view.c:1108
-#: addressbook/gui/widgets/e-addressbook-view.c:2098
-#: ui/evolution-addressbook.xml.h:19
-msgid "Save as VCard..."
-msgstr "Захаваць Ñк візытоўку (VCard)..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1095
-msgid "New Contact..."
-msgstr "Ðовы кантакт..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1096
-msgid "New Contact List..."
-msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1099
-msgid "Go to Folder..."
-msgstr "Пераход у Ñ‚Ñчку..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1100
-msgid "Import..."
-msgstr "Імпарт..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1102
-msgid "Search for Contacts..."
-msgstr "Пошук кантактаў..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1103
-msgid "Address Book Sources..."
-msgstr "Крыніцы кнігі адраÑоў..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1105
-msgid "Pilot Settings..."
-msgstr "УÑталёўкі \"Пілёта\"..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1109
-#: ui/evolution-addressbook.xml.h:10
-msgid "Forward Contact"
-msgstr "ПераÑлаць кантакт"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1110
-msgid "Send Message to Contact"
-msgstr "ДаÑлаць паведамленьне кантактнае аÑобе"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1111 calendar/gui/print.c:2480
-#: ui/evolution-addressbook.xml.h:16 ui/evolution-calendar.xml.h:19
-#: ui/evolution-comp-editor.xml.h:8 ui/evolution-contact-editor.xml.h:5
-#: ui/evolution-mail-message.xml.h:80 ui/evolution-tasks.xml.h:14
-msgid "Print"
-msgstr "Друк"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1113
-msgid "Print Envelope"
-msgstr "Друкаваць паштоўку"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1117
-msgid "Copy to Address Book..."
-msgstr "КапіÑваць у кнігу адраÑоў..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1118
-msgid "Move to Address Book..."
-msgstr "ПеранеÑьці у кнігу адраÑоў..."
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1121
-#: ui/evolution-addressbook.xml.h:6 ui/evolution-tasks.xml.h:4
-msgid "Cut"
-msgstr "Выразаць"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1122
-#: calendar/gui/calendar-component.c:428 calendar/gui/tasks-component.c:374
-#: ui/evolution-addressbook.xml.h:2 ui/evolution-mail-message.xml.h:9
-#: ui/evolution-tasks.xml.h:2
-msgid "Copy"
-msgstr "КапіÑваць"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1123
-#: ui/evolution-addressbook.xml.h:13 ui/evolution-tasks.xml.h:11
-msgid "Paste"
-msgstr "УÑтавіць"
-
-#: addressbook/gui/widgets/e-addressbook-view.c:1128
-#: calendar/gui/e-calendar-view.c:1351
-msgid "Current View"
-msgstr "БÑгучы выглÑд"
-
-#. All, unmatched, separator
-#: addressbook/gui/widgets/e-addressbook-view.c:1683
-#: calendar/gui/cal-search-bar.c:358
-msgid "Any Category"
-msgstr "Ð›ÑŽÐ±Ð°Ñ ÐºÐ°Ñ‚ÑгорыÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:1
-msgid "Assistant"
-msgstr "Памочнік"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:2
-msgid "Assistant Phone"
-msgstr "ТÑлефон памочніка"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:3
-msgid "Business Fax"
-msgstr "Працоўны факÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:4
-msgid "Business Phone"
-msgstr "Працоўны Ñ‚Ñлефон"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:5
-msgid "Business Phone 2"
-msgstr "Працоўны Ñ‚Ñлефон 2"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:6
-msgid "Callback Phone"
-msgstr "ТÑлефон зваротнага выкліку"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:7
-msgid "Car Phone"
-msgstr "ТÑлефон у аўтамабілі"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:8
-#: calendar/gui/e-cal-list-view.etspec.h:1
-#: calendar/gui/e-calendar-table.etspec.h:3
-msgid "Categories"
-msgstr "КатÑгорыі"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:9
-msgid "Company Phone"
-msgstr "ТÑлефон уÑтановы"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:10
-#: addressbook/gui/widgets/eab-contact-display.c:547 smime/lib/e-cert.c:826
-msgid "Email"
-msgstr "Э. пошта"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:11
-#: addressbook/gui/widgets/eab-popup-control.c:441
-msgid "Email 2"
-msgstr "Э. пошта 2"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:12
-#: addressbook/gui/widgets/eab-popup-control.c:451
-msgid "Email 3"
-msgstr "Э. пошта 3"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:13
-msgid "Family Name"
-msgstr "Прозьвішча"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:14
-msgid "File As"
-msgstr "Файл Ñк"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:16
-msgid "Given Name"
-msgstr "Ðададзенае імÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:17
-msgid "Home Fax"
-msgstr "Хатні факÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:18
-msgid "Home Phone"
-msgstr "Хатні Ñ‚Ñлефон"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:19
-msgid "Home Phone 2"
-msgstr "Хатні Ñ‚Ñлефон 2"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:20
-msgid "ISDN Phone"
-msgstr "ТÑлефон ISDN"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:21
-msgid "Journal"
-msgstr "Ярдан"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:22
-msgid "Manager"
-msgstr "ÐœÑнÑджÑÑ€"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:23
-#: addressbook/gui/widgets/eab-contact-display.c:366
-msgid "Mobile Phone"
-msgstr "Мабільны Ñ‚Ñлефон"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:24
-msgid "Nickname"
-msgstr "ÐœÑнушка"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:25
-#: addressbook/gui/widgets/eab-contact-display.c:377
-msgid "Note"
-msgstr "Заўвага"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:26
-msgid "Office"
-msgstr "ОфіÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:27
-#: addressbook/gui/widgets/eab-contact-display.c:347
-msgid "Organization"
-msgstr "УÑтанова"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:28
-msgid "Other Fax"
-msgstr "Іншы факÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:29
-msgid "Other Phone"
-msgstr "Ð†Ð½ÑˆÑ‹Ñ Ñ‚Ñлефоны"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:30
-msgid "Pager"
-msgstr "ПÑйджар"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:31
-msgid "Primary Phone"
-msgstr "ПершаÑны Ñ‚Ñлефон"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:32
-msgid "Radio"
-msgstr "Радыё"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:33
-#: calendar/gui/dialogs/meeting-page.etspec.h:9
-#: calendar/gui/e-meeting-list-view.c:234
-#: calendar/gui/e-meeting-time-sel.etspec.h:9
-msgid "Role"
-msgstr "РолÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:34
-msgid "Spouse"
-msgstr "Супруг(а)"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:35
-msgid "TTYTDD"
-msgstr "TTYTDD"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:36
-msgid "Telex"
-msgstr "ТÑлекÑ"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:37
-msgid "Title"
-msgstr "ПаÑада"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:38
-msgid "Unit"
-msgstr "Ðдзінка"
-
-#: addressbook/gui/widgets/e-addressbook-view.etspec.h:39
-msgid "Web Site"
-msgstr "І-нÑÑ‚ плÑцоўка"
-
-#: addressbook/gui/widgets/e-minicard-label.c:115
-#: addressbook/gui/widgets/e-minicard.c:137
-msgid "Width"
-msgstr "ШырынÑ"
-
-#: addressbook/gui/widgets/e-minicard-label.c:122
-#: addressbook/gui/widgets/e-minicard.c:144
-msgid "Height"
-msgstr "ВышынÑ"
-
-#: addressbook/gui/widgets/e-minicard-label.c:129
-#: addressbook/gui/widgets/e-minicard.c:152
-msgid "Has Focus"
-msgstr "Мае заÑÑроджаньне"
-
-#: addressbook/gui/widgets/e-minicard-label.c:136
-msgid "Field"
-msgstr "Поле"
-
-#: addressbook/gui/widgets/e-minicard-label.c:143
-msgid "Field Name"
-msgstr "Ðазва полÑ"
-
-#: addressbook/gui/widgets/e-minicard-label.c:150
-msgid "Text Model"
-msgstr "МадÑль Ñ‚ÑкÑту"
-
-#: addressbook/gui/widgets/e-minicard-label.c:157
-msgid "Max field name length"
-msgstr "МакÑÑ‹Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð°ÑžÐ¶Ñ‹Ð½Ñ Ð¿Ð¾Ð»Ñ Ñ–Ð¼Ñ"
-
-#: addressbook/gui/widgets/e-minicard-view-widget.c:126
-msgid "Column Width"
-msgstr "Ð¨Ñ‹Ñ€Ñ‹Ð½Ñ Ñлупка"
-
-#: addressbook/gui/widgets/e-minicard-view.c:164
-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/widgets/e-minicard-view.c:167
-msgid ""
-"\n"
-"\n"
-"There are no items to show in this view."
-msgstr ""
-"\n"
-"\n"
-"ÐдÑутнічаюць запіÑÑ‹ Ð´Ð»Ñ Ð¿Ñ€Ð°Ð³Ð»Ñду."
-
-#: addressbook/gui/widgets/e-minicard-view.c:477
-msgid "Adapter"
-msgstr "Ðдаптар"
-
-#: addressbook/gui/widgets/e-minicard.c:160
-msgid "Selected"
-msgstr "Вылучаны"
-
-#: addressbook/gui/widgets/e-minicard.c:167
-msgid "Has Cursor"
-msgstr "Мае курÑор"
-
-#: addressbook/gui/widgets/eab-contact-display.c:133
-#: addressbook/gui/widgets/eab-contact-display.c:196
-msgid "(map)"
-msgstr "(мапа)"
-
-#: addressbook/gui/widgets/eab-contact-display.c:143
-#: addressbook/gui/widgets/eab-contact-display.c:209
-msgid "map"
-msgstr "мапа"
-
-#: addressbook/gui/widgets/eab-contact-display.c:261
-#: addressbook/gui/widgets/eab-contact-display.c:528
-msgid "List Members"
-msgstr "Удзельнікі ÑьпіÑу"
-
-#: addressbook/gui/widgets/eab-contact-display.c:324
-#: addressbook/gui/widgets/eab-contact-display.c:326
-msgid "E-mail"
-msgstr "Э. пошта"
-
-#: addressbook/gui/widgets/eab-contact-display.c:348
-msgid "Position"
-msgstr "ПазыцыÑ"
-
-#: addressbook/gui/widgets/eab-contact-display.c:349
-msgid "Video Conferencing"
-msgstr "ВідÑаканфÑÑ€ÑнцыÑ"
-
-#: addressbook/gui/widgets/eab-contact-display.c:350
-#: addressbook/gui/widgets/eab-contact-display.c:365
-msgid "Phone"
-msgstr "ТÑлефон"
-
-#: addressbook/gui/widgets/eab-contact-display.c:351
-msgid "Fax"
-msgstr "ФакÑ"
-
-#: addressbook/gui/widgets/eab-contact-display.c:355
-msgid "work"
-msgstr "праца"
-
-#: addressbook/gui/widgets/eab-contact-display.c:362
-msgid "WWW"
-msgstr "УÑб"
-
-#: addressbook/gui/widgets/eab-contact-display.c:363
-#: addressbook/gui/widgets/eab-contact-display.c:582
-msgid "Blog"
-msgstr "Блог"
-
-#: addressbook/gui/widgets/eab-contact-display.c:370
-msgid "personal"
-msgstr "пÑÑ€ÑанальнаÑ"
-
-#: addressbook/gui/widgets/eab-contact-display.c:543
-msgid "Job Title"
-msgstr "ПаÑада"
-
-#: addressbook/gui/widgets/eab-contact-display.c:574
-msgid "Home page"
-msgstr "ХатнÑÑ Ñтаронка"
-
-#. E_BOOK_ERROR_OK
-#: addressbook/gui/widgets/eab-gui-util.c:49
-msgid "Success"
-msgstr "ПаÑьпÑхова"
-
-#. E_BOOK_ERROR_INVALID_ARG
-#. E_BOOK_ERROR_BUSY
-#: addressbook/gui/widgets/eab-gui-util.c:51
-msgid "Backend busy"
-msgstr ""
-
-#. E_BOOK_ERROR_REPOSITORY_OFFLINE
-#: addressbook/gui/widgets/eab-gui-util.c:52
-msgid "Repository offline"
-msgstr "Сховішча знаходзіцца Ñž адлучаным Ñтане"
-
-#. E_BOOK_ERROR_NO_SUCH_BOOK
-#: addressbook/gui/widgets/eab-gui-util.c:53
-msgid "Address Book does not exist"
-msgstr "Кніга адраÑоў адÑутнічае"
-
-#. E_BOOK_ERROR_NO_SELF_CONTACT
-#: addressbook/gui/widgets/eab-gui-util.c:54
-msgid "No Self Contact defined"
-msgstr "Ðе вызначаны улаÑны кантакт"
-
-#. E_BOOK_ERROR_URI_NOT_LOADED
-#. E_BOOK_ERROR_URI_ALREADY_LOADED
-#. E_BOOK_ERROR_PERMISSION_DENIED
-#: addressbook/gui/widgets/eab-gui-util.c:57
-msgid "Permission denied"
-msgstr "Ðдмоўлена Ñž доÑтупе"
-
-#. E_BOOK_ERROR_CONTACT_NOT_FOUND
-#: addressbook/gui/widgets/eab-gui-util.c:58
-msgid "Contact not found"
-msgstr "Кантакт не адшуканы"
-
-#. E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS
-#: addressbook/gui/widgets/eab-gui-util.c:59
-msgid "Contact ID already exists"
-msgstr "Ід кантакту ўжо Ñ–Ñнуе"
-
-#. E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED
-#: addressbook/gui/widgets/eab-gui-util.c:60
-msgid "Protocol not supported"
-msgstr "Пратакол не падтрымліваецца"
-
-#. E_BOOK_ERROR_CANCELLED
-#: addressbook/gui/widgets/eab-gui-util.c:61
-#: calendar/gui/dialogs/task-details-page.glade.h:3
-#: calendar/gui/e-cal-component-preview.c:233
-#: calendar/gui/e-cal-model-tasks.c:352 calendar/gui/e-cal-model-tasks.c:655
-#: calendar/gui/e-calendar-table.c:473 calendar/gui/print.c:2349
-#: camel/camel-service.c:724 camel/camel-service.c:762
-#: camel/camel-service.c:846 camel/camel-service.c:886
-#: camel/providers/pop3/camel-pop3-store.c:456
-#: camel/providers/pop3/camel-pop3-store.c:537
-msgid "Cancelled"
-msgstr "Ðдменена"
-
-#. E_BOOK_ERROR_COULD_NOT_CANCEL
-#: addressbook/gui/widgets/eab-gui-util.c:62
-msgid "Could not cancel"
-msgstr "Ðе атрымалаÑÑ ÑкаÑаваць"
-
-#. E_BOOK_ERROR_AUTHENTICATION_FAILED
-#: addressbook/gui/widgets/eab-gui-util.c:63
-msgid "Authentication Failed"
-msgstr "Збой аўтарызацыі"
-
-#. E_BOOK_ERROR_AUTHENTICATION_REQUIRED
-#: addressbook/gui/widgets/eab-gui-util.c:64
-msgid "Authentication Required"
-msgstr "Патрабуе аўтарызацыю"
-
-#. E_BOOK_ERROR_TLS_NOT_AVAILABLE
-#: addressbook/gui/widgets/eab-gui-util.c:65
-msgid "TLS not Available"
-msgstr "TLS адÑутнічае"
-
-#. E_BOOK_ERROR_CORBA_EXCEPTION
-#. E_BOOK_ERROR_NO_SUCH_SOURCE
-#: addressbook/gui/widgets/eab-gui-util.c:67
-msgid "No such source"
-msgstr "ÐÑма крыніцы"
-
-#. E_BOOK_ERROR_OTHER_ERROR
-#: addressbook/gui/widgets/eab-gui-util.c:68
-msgid "Other error"
-msgstr "Ð†Ð½ÑˆÐ°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
-
-#: addressbook/gui/widgets/eab-gui-util.c:91
-msgid ""
-"We were unable to open this addressbook. Please check that the path exists "
-"and that you have permission to access it."
-msgstr ""
-"Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ гÑтую кнігу адраÑоў. Праверце, што шлÑÑ… Ñ–Ñнуе "
-"Ñ– што у Ð²Ð°Ñ Ñ‘Ñьць Ð½ÐµÐ°Ð±Ñ…Ð¾Ð´Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ð²Ñ‹ доÑтупу."
-
-#: addressbook/gui/widgets/eab-gui-util.c:98
-msgid ""
-"We were unable to open this addressbook. This either means you have entered "
-"an incorrect URI, or the LDAP server is unreachable."
-msgstr ""
-"Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ гÑтую кнігу адраÑоў. Магчыма "
-"вы пазначылі нерÑчаіÑны URI, ці паÑлужнік LDAP не адказвае."
-
-#: addressbook/gui/widgets/eab-gui-util.c:103
-msgid ""
-"This version of Evolution does not have LDAP support compiled in to it. If "
-"you want to use LDAP in Evolution, you must install an LDAP-enabled "
-"Evolution package."
-msgstr ""
-"ГÑÑ‚Ð°Ñ Ð²ÑÑ€ÑÑ–Ñ \"Эвалюцыі\" не мае ўбудаванае падтрымкі LDAP."
-"Калі Ð’Ñ‹ жадаеце выкарыÑтоўваць LDAP у \"Эвалюцыі\", муÑіце "
-"пераÑабраць праграму з крынічнага Ñ‚ÑкÑту ці уÑталÑваць пакет "
-"\"Эвалюцыі\" з уключанай падтрымкай LDAP."
-
-#: addressbook/gui/widgets/eab-gui-util.c:110
-msgid ""
-"We were unable to open this addressbook. This either means you have entered "
-"an incorrect URI, or the server is unreachable."
-msgstr ""
-"Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ гÑтую кнігу адраÑоў. Магчыма "
-"вы пазначылі нерÑчаіÑны URI, ці паÑлужнік не адказвае."
-
-#: addressbook/gui/widgets/eab-gui-util.c:130
-msgid ""
-"More cards matched this query than either the server is \n"
-"configured to return or Evolution is configured to display.\n"
-"Please make your search more specific or raise the result limit in\n"
-"the directory server preferences for this addressbook."
-msgstr ""
-"Зашмат картак Ñупала з вашым запытам, Ñ– \n"
-"\"ЭвалюцыÑ\" Ð½Ñ Ð¼Ð¾Ð¶Ð° адлюÑтраваць Ñ–Ñ… уÑе.\n"
-"Калі лаÑка, зрабіце больш падрабÑзны пошук,\n"
-"ці абмÑжуйце памер адказу кнігі адраÑоў у\n"
-"перавагах паÑлужніка каталёгаў."
-
-#: addressbook/gui/widgets/eab-gui-util.c:136
-msgid ""
-"The time to execute this query exceeded the server limit or the limit\n"
-"you have configured for this addressbook. Please make your search\n"
-"more specific or raise the time limit in the directory server\n"
-"preferences for this addressbook."
-msgstr ""
-"Ð§Ð°Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ паÑлужніка перавышаны ці вы маеце абмежаваньне\n"
-"Ð´Ð»Ñ Ð³Ñтае кнігі адраÑоў. Калі лаÑка, зрабіце больш падрабÑзны\n"
-"пошук ці зьмÑніце абмежаваньне чаÑу Ð´Ð»Ñ Ð³Ñтае кнігі адраÑоў у\n"
-"перавагах паÑлужніка каталёгаў."
-
-#: addressbook/gui/widgets/eab-gui-util.c:142
-msgid "The backend for this addressbook was unable to parse this query."
-msgstr "Праграма гÑтае кнігі адраÑаў Ð½Ñ Ð·Ð´Ð¾Ð»ÐµÐ»Ð° разабраць запыт."
-
-#: addressbook/gui/widgets/eab-gui-util.c:145
-msgid "The backend for this addressbook refused to perform this query."
-msgstr "Праграма гÑтае кнігі адраÑаў адмовіла Ñž запыце."
-
-#: addressbook/gui/widgets/eab-gui-util.c:148
-msgid "This query did not complete successfully."
-msgstr "Запыт Ð½Ñ Ð±Ñ‹Ñž паÑьпÑхова выкананы."
-
-#: addressbook/gui/widgets/eab-gui-util.c:170
-msgid "Error adding list"
-msgstr "Памылка пад Ñ‡Ð°Ñ Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ ÑьпіÑу"
-
-#: addressbook/gui/widgets/eab-gui-util.c:170
-#: addressbook/gui/widgets/eab-gui-util.c:581
-msgid "Error adding contact"
-msgstr "Памылка Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñƒ"
-
-#: addressbook/gui/widgets/eab-gui-util.c:181
-msgid "Error modifying list"
-msgstr "Памылка Ñ€ÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑьпіÑу"
-
-#: addressbook/gui/widgets/eab-gui-util.c:181
-msgid "Error modifying contact"
-msgstr "Памылка зьмены кантакту"
-
-#: addressbook/gui/widgets/eab-gui-util.c:193
-msgid "Error removing list"
-msgstr "Памылка Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑьпіÑу"
-
-#: addressbook/gui/widgets/eab-gui-util.c:193
-#: addressbook/gui/widgets/eab-gui-util.c:539
-msgid "Error removing contact"
-msgstr "Памылка Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñƒ"
-
-#: addressbook/gui/widgets/eab-gui-util.c:275
-#, c-format
-msgid ""
-"Opening %d contacts will open %d new windows as well.\n"
-"Do you really want to display all of these contacts?"
-msgstr ""
-"Ðдкрыцьцё %d кантактаў прывÑдзе да Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒÑ†Ñ %d новых вокнаў.\n"
-"Ð’Ñ‹ Ñапраўды жадаеце адлюÑтраваць уÑе гÑÑ‚Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹?"
-
-#: addressbook/gui/widgets/eab-gui-util.c:301
-#, c-format
-msgid ""
-"%s already exists\n"
-"Do you want to overwrite it?"
-msgstr ""
-"%s ужо Ñ–Ñнуе\n"
-"Жадаеце перапіÑаць?"
-
-#: addressbook/gui/widgets/eab-gui-util.c:305
-msgid "Overwrite"
-msgstr "ПерапіÑаць"
-
-#. This is a filename. Translators take note.
-#: addressbook/gui/widgets/eab-gui-util.c:366
-msgid "card.vcf"
-msgstr "card.vcf"
-
-#: addressbook/gui/widgets/eab-gui-util.c:500
-msgid "list"
-msgstr "ÑьпіÑ"
-
-#: addressbook/gui/widgets/eab-gui-util.c:635
-msgid "Move contact to"
-msgstr "ПеранеÑьці кантакт Ñž"
-
-#: addressbook/gui/widgets/eab-gui-util.c:637
-msgid "Copy contact to"
-msgstr "КапіÑваць кантакт у"
-
-#: addressbook/gui/widgets/eab-gui-util.c:640
-msgid "Move contacts to"
-msgstr "ПеранеÑьці кантакты Ñž"
-
-#: addressbook/gui/widgets/eab-gui-util.c:642
-msgid "Copy contacts to"
-msgstr "КапіÑваць кантакты Ñž"
-
-#: addressbook/gui/widgets/eab-gui-util.c:645
-msgid "Select target addressbook."
-msgstr "Выберыце кнігу адраÑоў."
-
-#: addressbook/gui/widgets/eab-gui-util.c:868
-msgid "Multiple VCards"
-msgstr "Ð¨Ð¼Ð°Ñ‚Ð»Ñ–ÐºÑ–Ñ VCard"
-
-#: addressbook/gui/widgets/eab-gui-util.c:871
-#, c-format
-msgid "VCard for %s"
-msgstr "VCard Ð´Ð»Ñ %s"
-
-#.
-#. * This is the code for the UI thingie that lets you manipulate the e-mail
-#. * addresses (and *only* the e-mail addresses) associated with an existing
-#. * contact.
-#.
-#: addressbook/gui/widgets/eab-popup-control.c:198
-msgid "(none)"
-msgstr "(нÑма)"
-
-#: addressbook/gui/widgets/eab-popup-control.c:431
-msgid "Primary Email"
-msgstr "ПершаÑÐ½Ð°Ñ Ð­. пошта"
-
-#: addressbook/gui/widgets/eab-popup-control.c:567
-msgid "Select an Action"
-msgstr "Выбраць дзеÑньне"
-
-#: addressbook/gui/widgets/eab-popup-control.c:575
-#, c-format
-msgid "Create a new contact \"%s\""
-msgstr "Стварыць новы кантакт \"%s\""
-
-#: addressbook/gui/widgets/eab-popup-control.c:591
-#, c-format
-msgid "Add address to existing contact \"%s\""
-msgstr "Дадаць Ð°Ð´Ñ€Ð°Ñ Ð´Ð° кантакту \"%s\", Ñкі ўжо Ñ–Ñнуе"
-
-#: addressbook/gui/widgets/eab-popup-control.c:869
-msgid "Querying Address Book..."
-msgstr "Запыт да кнігі адраÑоў..."
-
-#: addressbook/gui/widgets/eab-popup-control.c:952
-msgid "Edit Contact Info"
-msgstr "РÑдагаваньне кантактных зьвеÑтак"
-
-#: addressbook/gui/widgets/eab-popup-control.c:1007
-msgid "Merge E-Mail Address"
-msgstr "Ðб'Ñднаць адраÑÑ‹ Э. пошты"
-
-#: addressbook/gui/widgets/eab-vcard-control.c:139
-#, c-format
-msgid "and one other contact."
-msgstr "і адзін іншы кантакт."
-
-#: addressbook/gui/widgets/eab-vcard-control.c:223
-#: addressbook/gui/widgets/eab-vcard-control.c:272
-msgid "Show Full VCard"
-msgstr "Паказаць уÑÑŽ візытоўку"
-
-#: addressbook/gui/widgets/eab-vcard-control.c:227
-msgid "Show Compact VCard"
-msgstr "Паказаць Ñкарочаную візытоўку"
-
-#: addressbook/gui/widgets/eab-vcard-control.c:277
-msgid "Save in addressbook"
-msgstr "Захаваць у кнізе адраÑоў"
-
-#: addressbook/gui/widgets/gal-view-factory-minicard.c:24
-msgid "Card View"
-msgstr "ВыглÑд карткі"
-
-#: addressbook/gui/widgets/gal-view-factory-treeview.c:25
-msgid "GTK Tree View"
-msgstr "ПраглÑд дрÑва GTK"
-
-#: addressbook/gui/widgets/test-reflow.c:119
-msgid "Reflow Test"
-msgstr ""
-
-#: addressbook/gui/widgets/test-reflow.c:120
-#: addressbook/printing/test-contact-print-style-editor.c:54
-#: addressbook/printing/test-print.c:53
-msgid "Copyright (C) 2000, Ximian, Inc."
-msgstr "ÐўтарÑкае права (C) 2000, Ximian, Inc."
-
-#: addressbook/gui/widgets/test-reflow.c:122
-msgid "This should test the reflow canvas item"
-msgstr ""
-
-#: addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:1
-msgid "Evolution LDIF importer"
-msgstr "Імпарт LDIF \"Эвалюцыі\""
-
-#: addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:2
-msgid "LDAP Data Interchange Format (.ldif)"
-msgstr "Фармат узаемаабмену даньнÑмі LDAP (.ldif)"
-
-#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:1
-msgid "Evolution VCard Importer"
-msgstr "Імпарт візытовак \"Эвалюцыі\"."
-
-#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:2
-msgid "Evolution VCard importer"
-msgstr "Імпарт візытовак \"Эвалюцыі\"."
-
-#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:3
-msgid "VCard (.vcf, .gcrd)"
-msgstr "Візытоўка (.vcf, .gcrd)"
-
-#: addressbook/printing/e-contact-print-envelope.c:212
-#: addressbook/printing/e-contact-print-envelope.c:233
-msgid "Print envelope"
-msgstr "Друк паштоўкі"
-
-#: addressbook/printing/e-contact-print.c:1000
-msgid "Print contacts"
-msgstr "Друкаваць кантакты"
-
-#: addressbook/printing/e-contact-print.c:1066
-#: addressbook/printing/e-contact-print.c:1093
-msgid "Print contact"
-msgstr "Друкаваць кантакт"
-
-#: addressbook/printing/e-contact-print.glade.h:1
-msgid "10 pt. Tahoma"
-msgstr "10 пт. Tahoma"
-
-#: addressbook/printing/e-contact-print.glade.h:2
-msgid "8 pt. Tahoma"
-msgstr "8 пт. Tahoma"
-
-#: addressbook/printing/e-contact-print.glade.h:3
-msgid "Blank forms at end:"
-msgstr "ПуÑÑ‚Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° на канцы:"
-
-#: addressbook/printing/e-contact-print.glade.h:4
-msgid "Body"
-msgstr "Цела"
-
-#: addressbook/printing/e-contact-print.glade.h:5
-msgid "Bottom:"
-msgstr "У нізе:"
-
-#: addressbook/printing/e-contact-print.glade.h:6
-msgid "Dimensions:"
-msgstr "РазьмернаÑьць:"
-
-#: addressbook/printing/e-contact-print.glade.h:7
-msgid "F_ont..."
-msgstr "Шрыфт..."
-
-#: addressbook/printing/e-contact-print.glade.h:8
-msgid "Fonts"
-msgstr "Шрыфты"
-
-#: addressbook/printing/e-contact-print.glade.h:9
-msgid "Footer:"
-msgstr "ЗноÑка:"
-
-#: addressbook/printing/e-contact-print.glade.h:10
-msgid "Format"
-msgstr "Фармат"
-
-#: addressbook/printing/e-contact-print.glade.h:11
-msgid "Header"
-msgstr "Загаловак"
-
-#: addressbook/printing/e-contact-print.glade.h:12
-msgid "Header/Footer"
-msgstr "Загаловак/ЗноÑка"
-
-#: addressbook/printing/e-contact-print.glade.h:13
-msgid "Headings"
-msgstr "Загалоўкі"
-
-#: addressbook/printing/e-contact-print.glade.h:14
-msgid "Headings for each letter"
-msgstr "Загалоўкі Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð°Ðµ літары"
-
-#: addressbook/printing/e-contact-print.glade.h:15
-msgid "Height:"
-msgstr "ВышынÑ:"
-
-#: addressbook/printing/e-contact-print.glade.h:16
-msgid "Immediately follow each other"
-msgstr "Ðдно за адным"
-
-#: addressbook/printing/e-contact-print.glade.h:17
-msgid "Include:"
-msgstr "Уключае:"
-
-#: addressbook/printing/e-contact-print.glade.h:18
-msgid "Landscape"
-msgstr "Ðльбом"
-
-#: addressbook/printing/e-contact-print.glade.h:19
-msgid "Left:"
-msgstr "Зь левага боку:"
-
-#: addressbook/printing/e-contact-print.glade.h:20
-msgid "Letter tabs on side"
-msgstr "Закладкі літар збоку"
-
-#: addressbook/printing/e-contact-print.glade.h:21
-msgid "Margins"
-msgstr "Палі"
-
-#: addressbook/printing/e-contact-print.glade.h:22
-msgid "Number of columns:"
-msgstr "КолькаÑьць Ñлупкоў:"
-
-#: addressbook/printing/e-contact-print.glade.h:23
-msgid "Options"
-msgstr "ПарамÑтры"
-
-#: addressbook/printing/e-contact-print.glade.h:24
-msgid "Orientation"
-msgstr "ÐрыентацыÑ"
-
-#: addressbook/printing/e-contact-print.glade.h:25
-msgid "Page"
-msgstr "Старонка"
-
-#: addressbook/printing/e-contact-print.glade.h:26
-msgid "Page Setup:"
-msgstr "УÑталёўкі Ñтаронкі:"
-
-#: addressbook/printing/e-contact-print.glade.h:27
-msgid "Paper"
-msgstr "Папера"
-
-#: addressbook/printing/e-contact-print.glade.h:28
-msgid "Paper source:"
-msgstr "Крыніца паперы:"
-
-#: addressbook/printing/e-contact-print.glade.h:29
-msgid "Portrait"
-msgstr "ПартрÑÑ‚"
-
-#: addressbook/printing/e-contact-print.glade.h:30
-msgid "Preview:"
-msgstr "Прыклад:"
-
-#: addressbook/printing/e-contact-print.glade.h:31
-msgid "Print using gray shading"
-msgstr "Друк з выкарыÑтаньнем паўтонаў"
-
-#: addressbook/printing/e-contact-print.glade.h:32
-msgid "Reverse on even pages"
-msgstr "Паварочваць на цотных Ñтаронках"
-
-#: addressbook/printing/e-contact-print.glade.h:33
-msgid "Right:"
-msgstr "З правага боку:"
-
-#: addressbook/printing/e-contact-print.glade.h:34
-msgid "Sections:"
-msgstr "Падзелы:"
-
-#: addressbook/printing/e-contact-print.glade.h:35
-msgid "Shading"
-msgstr "Паўтон"
-
-#: addressbook/printing/e-contact-print.glade.h:36
-msgid "Size:"
-msgstr "Памер:"
-
-#: addressbook/printing/e-contact-print.glade.h:37
-msgid "Start on a new page"
-msgstr "Пачаць з новае Ñтаронкі"
-
-#: addressbook/printing/e-contact-print.glade.h:38
-msgid "Style name:"
-msgstr "Ðазва Ñтылю:"
-
-#: addressbook/printing/e-contact-print.glade.h:39
-msgid "Top:"
-msgstr "Зьверху:"
-
-#: addressbook/printing/e-contact-print.glade.h:40
-msgid "Type:"
-msgstr "Тып:"
-
-#: addressbook/printing/e-contact-print.glade.h:41
-msgid "Width:"
-msgstr "ШырынÑ:"
-
-#: addressbook/printing/e-contact-print.glade.h:42
-msgid "_Font..."
-msgstr "Шрыфт..."
-
-#: addressbook/printing/test-contact-print-style-editor.c:53
-#, fuzzy
-msgid "Contact Print Style Editor Test"
-msgstr "РÑдактар ÑьпіÑу кантактаў"
-
-#: addressbook/printing/test-contact-print-style-editor.c:56
-msgid "This should test the contact print style editor widget"
-msgstr ""
-
-#: addressbook/printing/test-print.c:52
-#, fuzzy
-msgid "Contact Print Test"
-msgstr "_Ð¡ÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
-
-#: addressbook/printing/test-print.c:55
-msgid "This should test the contact print code"
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export-list-cards.c:657
-#: addressbook/tools/evolution-addressbook-export-list-cards.c:693
-#: addressbook/tools/evolution-addressbook-export-list-folders.c:49
-msgid "Can not open file"
-msgstr "Ðемагчыма адкрыць файл"
-
-#: addressbook/tools/evolution-addressbook-export-list-folders.c:43
-msgid "Couldn't get list of addressbooks"
-msgstr "Ðемагчыма атрымаць ÑÑŒÐ¿Ñ–Ñ ÐºÐ½Ñ–Ð³Ð°Ñž адраÑоў"
-
-#: addressbook/tools/evolution-addressbook-export-list-folders.c:71
-msgid "failed to open book"
-msgstr "збой Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒÑ†Ñ ÐºÐ½Ñ–Ð³Ñ– адраÑоў"
-
-#: addressbook/tools/evolution-addressbook-export.c:56
-msgid "Specify the output file instead of standard output"
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:57
-msgid "OUTPUTFILE"
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:58
-msgid "List local addressbook folders"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð¼ÑÑцовых Ñ‚Ñчак кнігі адраÑоў"
-
-#: addressbook/tools/evolution-addressbook-export.c:60
-msgid "Show cards as vcard or csv file"
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:60
-msgid "[vcard|csv]"
-msgstr "[vcard|csv]"
-
-#: addressbook/tools/evolution-addressbook-export.c:61
-msgid "Export in asynchronous mode "
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:63
-msgid "The number of cards in one output file in asychronous mode,default size 100."
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:63
-msgid "NUMBER"
-msgstr "ÐУМÐР"
-
-#: addressbook/tools/evolution-addressbook-export.c:91
-msgid "Command line arguments error, please use --help option to see the usage."
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:105
-msgid "Only support csv or vcard format."
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:114
-msgid "In async mode, output must be file."
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:122
-msgid "In normal mode, there should not need size option."
-msgstr ""
-
-#: addressbook/tools/evolution-addressbook-export.c:153
-msgid "Impossible internal error."
-msgstr "ÐÐµÐ¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñ ÑƒÐ½ÑƒÑ‚Ñ€Ð°Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°."
-
-#: addressbook/tools/evolution-addressbook-import.c:46
-msgid "Error loading default addressbook."
-msgstr "Памылка загрузкі дапомнае кнігі адраÑоў."
-
-#: addressbook/tools/evolution-addressbook-import.c:67
-msgid "Input File"
-msgstr "Уваходны файл"
-
-#: addressbook/tools/evolution-addressbook-import.c:82
-msgid "No filename provided."
-msgstr "Ðазва файла не пазначана."
-
-#: addressbook/util/e-destination.c:577
-msgid "Unnamed List"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð±Ñз назвы"
-
-#. calendar:prompt-cancel-meeting primary
-#. calendar:prompt-cancel-task primary
-#: calendar/calendar-errors.xml.h:2 calendar/calendar-errors.xml.h:12
-msgid "Would you like to send all the participants a cancellation notice?"
-msgstr ""
-
-#. calendar:prompt-cancel-meeting secondary
-#: calendar/calendar-errors.xml.h:4
-msgid ""
-"If you don't send a cancellation notice, the other participants may not know "
-"the meeting is canceled."
-msgstr ""
-
-#: calendar/calendar-errors.xml.h:5 calendar/calendar-errors.xml.h:15
-#: calendar/calendar-errors.xml.h:25 calendar/calendar-errors.xml.h:79
-#: calendar/calendar-errors.xml.h:85 calendar/calendar-errors.xml.h:91
-#: calendar/calendar-errors.xml.h:97
-msgid "Don't Send"
-msgstr "Ðе даÑылаць"
-
-#: calendar/calendar-errors.xml.h:6 calendar/calendar-errors.xml.h:16
-#: calendar/calendar-errors.xml.h:26
-msgid "Send Notice"
-msgstr "ДаÑлаць папÑÑ€Ñджаньне"
-
-#. calendar:prompt-delete-meeting primary
-#: calendar/calendar-errors.xml.h:8
-msgid "Are you sure you want to delete this meeting?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ Ñƒ тым, што жадаеце выдаліць гÑтую ÑуÑÑ‚Ñ€Ñчу?"
-
-#. calendar:prompt-delete-meeting secondary
-#: calendar/calendar-errors.xml.h:10
-msgid "All information on this meeting will be deleted and can not be restored."
-msgstr ""
-
-#. calendar:prompt-cancel-task secondary
-#: calendar/calendar-errors.xml.h:14
-msgid ""
-"If you don't send a cancellation notice, the other participants may not know "
-"the task has been deleted."
-msgstr ""
-
-#. calendar:prompt-delete-task primary
-#: calendar/calendar-errors.xml.h:18 calendar/calendar-errors.xml.h:44
-msgid "Are you sure you want to delete this task?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць гÑтае заданьне?"
-
-#. calendar:prompt-delete-task secondary
-#. calendar:prompt-delete-named-task secondary
-#. calendar:prompt-delete-task secondary
-#: calendar/calendar-errors.xml.h:20 calendar/calendar-errors.xml.h:42
-#: calendar/calendar-errors.xml.h:46
-msgid "All information on this task will be deleted and can not be restored."
-msgstr ""
-
-#. calendar:prompt-cancel-journal primary
-#: calendar/calendar-errors.xml.h:22
-#, fuzzy
-msgid "Would you like to send a cancellation notice for this journal entry?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ Ñž тым, што жадаеце адмÑніць Ñ– выдаліць гÑÑ‚Ñ‹ Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа?"
-
-#. calendar:prompt-cancel-journal secondary
-#: calendar/calendar-errors.xml.h:24
-msgid ""
-"If you don't send a cancellation notice, the other participants may not know "
-"the journal has been deleted."
-msgstr ""
-
-#. calendar:prompt-delete-journal primary
-#: calendar/calendar-errors.xml.h:28 calendar/calendar-errors.xml.h:52
-msgid "Are you sure you want to delete this journal entry?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць гÑÑ‚Ñ‹ Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа?"
-
-#. calendar:prompt-delete-journal secondary
-#: calendar/calendar-errors.xml.h:30
-msgid ""
-"All information on this journal entry will be deleted and can not be "
-"restored."
-msgstr ""
-
-#. calendar:prompt-delete-titled-appointment primary
-#: calendar/calendar-errors.xml.h:32
-msgid "Are you sure you want to delete the appointment titled '{0}'?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць ÑуÑÑ‚Ñ€Ñчу '{0}'?"
-
-#. calendar:prompt-delete-titled-appointment secondary
-#. calendar:prompt-delete-appointment secondary
-#: calendar/calendar-errors.xml.h:34 calendar/calendar-errors.xml.h:38
-msgid "All information on this appointment will be deleted and can not be restored."
-msgstr ""
-
-#. calendar:prompt-delete-appointment primary
-#: calendar/calendar-errors.xml.h:36
-msgid "Are you sure you want to delete this appointment?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць гÑтую ÑуÑÑ‚Ñ€Ñчу?"
-
-#. calendar:prompt-delete-named-task primary
-#: calendar/calendar-errors.xml.h:40
-msgid "Are you sure you want to delete the '{0}' task?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць заданьне '{0}'?"
-
-#. calendar:prompt-delete-named-journal primary
-#: calendar/calendar-errors.xml.h:48
-msgid "Are you sure you want to delete the journal entry '{0}'?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа '{0}'?"
-
-#. calendar:prompt-delete-named-journal secondary
-#. calendar:prompt-delete-journal secondary
-#: calendar/calendar-errors.xml.h:50 calendar/calendar-errors.xml.h:54
-msgid "All information in this journal will be deleted and can not be restored."
-msgstr ""
-
-#. calendar:prompt-delete-appointments primary
-#: calendar/calendar-errors.xml.h:56
-msgid "Are you sure you want to delete these {0} appointments?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць ÑуÑÑ‚Ñ€Ñчу {0}?"
-
-#. calendar:prompt-delete-appointments secondary
-#: calendar/calendar-errors.xml.h:58
-msgid ""
-"All information on these appointments will be deleted and can not be "
-"restored."
-msgstr ""
-
-#. calendar:prompt-delete-tasks primary
-#: calendar/calendar-errors.xml.h:60
-msgid "Are you sure you want to delete these {0} tasks?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць гÑÑ‚Ñ‹Ñ {0}·заданьні?"
-
-#. calendar:prompt-delete-tasks secondary
-#: calendar/calendar-errors.xml.h:62
-msgid "All information on these tasks will be deleted and can not be restored."
-msgstr ""
-
-#. calendar:prompt-delete-journals primary
-#: calendar/calendar-errors.xml.h:64
-msgid "Are you sure you want to delete these {0} journal entries?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць гÑÑ‚Ñ‹Ñ {0} запіÑÑ‹ чаÑопіÑа?"
-
-#. calendar:prompt-delete-journals secondary
-#: calendar/calendar-errors.xml.h:66
-msgid ""
-"All information in these journal entries will be deleted and can not be "
-"restored."
-msgstr ""
-
-#. calendar:prompt-save-appointment title
-#: calendar/calendar-errors.xml.h:68
-msgid "Save Appointment"
-msgstr "Захаваць ÑуÑÑ‚Ñ€Ñчу"
-
-#. calendar:prompt-save-appointment primary
-#: calendar/calendar-errors.xml.h:70
-msgid "Would you like to save your changes to this appointment?"
-msgstr "Ці жадаеце захаваць зьмены да гÑтае ÑуÑÑ‚Ñ€Ñчы?"
-
-#. calendar:prompt-save-appointment secondary
-#: calendar/calendar-errors.xml.h:72
-msgid "You have made changes to this appointment, but not yet saved them."
-msgstr "Ð’Ñ‹ ўнеÑьлі зьмены у гÑтую ÑуÑÑ‚Ñ€Ñчу, але Ñны ÑÑˆÑ‡Ñ Ð½Ðµ захаваныÑ."
-
-#: calendar/calendar-errors.xml.h:73 composer/mail-composer-errors.xml.h:33
-msgid "Discard Changes"
-msgstr "Ðдкінуць зьмены"
-
-#: calendar/calendar-errors.xml.h:74
-msgid "Save Changes"
-msgstr "Захаваць зьмены"
-
-#. calendar:prompt-meeting-invite primary
-#: calendar/calendar-errors.xml.h:76
-msgid "Would you like to send meeting invitations to participants?"
-msgstr ""
-
-#. calendar:prompt-meeting-invite secondary
-#: calendar/calendar-errors.xml.h:78
-msgid "Email invitations will be sent to all participants and allow them to RSVP."
-msgstr ""
-
-#: calendar/calendar-errors.xml.h:80 calendar/calendar-errors.xml.h:86
-#: calendar/calendar-errors.xml.h:92 calendar/calendar-errors.xml.h:98
-#: ui/evolution-message-composer.xml.h:24
-msgid "Send"
-msgstr "ДаÑлаць"
-
-#. calendar:prompt-send-updated-meeting-info primary
-#: calendar/calendar-errors.xml.h:82
-msgid "Would you like to send updated meeting information to participants?"
-msgstr ""
-
-#. calendar:prompt-send-updated-meeting-info secondary
-#: calendar/calendar-errors.xml.h:84
-msgid ""
-"Sending updated information allows other participants to keep their "
-"calendars up to date."
-msgstr ""
-
-#. calendar:prompt-send-task primary
-#: calendar/calendar-errors.xml.h:88
-msgid "Would you like to send this task to participants?"
-msgstr ""
-
-#. calendar:prompt-send-task secondary
-#: calendar/calendar-errors.xml.h:90
-msgid ""
-"Email invitations will be sent to all participants and allow them to accept "
-"this task."
-msgstr ""
-
-#. calendar:prompt-send-updated-task-info primary
-#: calendar/calendar-errors.xml.h:94
-msgid "Would you like to send updated task information to participants?"
-msgstr ""
-
-#. calendar:prompt-send-updated-task-info secondary
-#: calendar/calendar-errors.xml.h:96
-msgid ""
-"Sending updated information allows other participants to keep their task "
-"lists up to date."
-msgstr ""
-
-#. calendar:tasks-crashed primary
-#: calendar/calendar-errors.xml.h:100
-msgid "The Evolution tasks have quit unexpectedly."
-msgstr ""
-
-#. calendar:tasks-crashed secondary
-#: calendar/calendar-errors.xml.h:102
-msgid "Your tasks will not be available until Evolution is restarted."
-msgstr ""
-
-#. calendar:calendar-crashed primary
-#: calendar/calendar-errors.xml.h:104
-msgid "The Evolution calendar has quit unexpectedly."
-msgstr "КалÑндар \"Эвалюцыі\" нечакана Ñкончыў Ñваю працу."
-
-#. calendar:calendar-crashed secondary
-#: calendar/calendar-errors.xml.h:106
-msgid "Your calendars will not be available until Evolution is restarted."
-msgstr ""
-
-#: calendar/common/authentication.c:48 calendar/gui/e-pub-utils.c:301
-#: smime/gui/component.c:48
-msgid "Enter password"
-msgstr "Пазначце пароль"
-
-#: calendar/conduits/calendar/calendar-conduit.c:223
-msgid "Split Multi-Day Events:"
-msgstr "ПадзÑліць ÑˆÐ¼Ð°Ñ‚Ð´Ð·Ñ‘Ð½Ð½Ñ‹Ñ Ð¿Ð°Ð´Ð·ÐµÑ–:"
-
-#: calendar/conduits/calendar/calendar-conduit.c:1330
-#: calendar/conduits/calendar/calendar-conduit.c:1331
-#: calendar/conduits/todo/todo-conduit.c:852
-#: calendar/conduits/todo/todo-conduit.c:853
-msgid "Could not start evolution-data-server"
-msgstr "Ðе магчыма запуÑьціць evolution-data-server"
-
-#: calendar/conduits/calendar/calendar-conduit.c:1439
-#: calendar/conduits/calendar/calendar-conduit.c:1442
-msgid "Could not read pilot's Calendar application block"
-msgstr "Ðемагчыма прачытаць блёк даÑтаÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñƒ \"Пілёта\""
-
-#: calendar/conduits/todo/todo-conduit.c:209
-msgid "Default Priority:"
-msgstr "Дапомны прыÑрытÑÑ‚:"
-
-#: calendar/conduits/todo/todo-conduit.c:932
-#: calendar/conduits/todo/todo-conduit.c:935
-msgid "Could not read pilot's ToDo application block"
-msgstr "Ðемагчыма прачытаць блёк даÑтаÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž \"Пілёта\""
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:1
-msgid "*Control*F3"
-msgstr "*Control*F3"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:2
-msgid "*Control*F4"
-msgstr "*Control*F4"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:3
-msgid "Calendar and Tasks"
-msgstr "КалÑндар Ñ– заданьні"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:4
-#: calendar/gui/calendar-component.c:1072
-msgid "Calendars"
-msgstr "Календары"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:5
-msgid "Configure your timezone, Calendar and Task List here "
-msgstr "Ðаладка вашае чаÑавае зоны, калÑндру Ñ– ÑьпіÑу задачаў"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:6
-msgid "Evolution Calendar and Tasks"
-msgstr "КалÑндар Ñ– заданьні \"Эвалюцыі\""
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:7
-msgid "Evolution Calendar configuration control"
-msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð¾Ð¼ \"Эвалюцыі\""
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:8
-msgid "Evolution Calendar scheduling message viewer"
-msgstr "ПраглÑдальнік Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð»ÑÐ½Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñƒ \"Эвалюцыі\""
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:9
-msgid "Evolution Calendar/Task editor"
-msgstr "РÑдактар календара/Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ \"Эвалюцыі\""
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:10
-msgid "Evolution's Calendar component"
-msgstr "КампанÑнт \"Эвалюцыі\" - калÑндар"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:11
-msgid "Evolution's Tasks component"
-msgstr "КампанÑнт \"Эвалюцыі\" - заданьні"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:12
-#: calendar/gui/e-tasks.c:1194 calendar/gui/print.c:1819
-#: calendar/gui/tasks-component.c:419 calendar/gui/tasks-component.c:884
-#: calendar/gui/tasks-control.c:405 calendar/importers/icalendar-importer.c:83
-#: calendar/importers/icalendar-importer.c:709
-msgid "Tasks"
-msgstr "Заданьні"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:13
-msgid "_Calendars"
-msgstr "Календары"
-
-#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:14
-#: views/tasks/galview.xml.h:3
-msgid "_Tasks"
-msgstr "_Заданьні"
-
-#: calendar/gui/alarm-notify/GNOME_Evolution_Calendar_AlarmNotify.server.in.in.h:1
-msgid "Evolution Calendar alarm notification service"
-msgstr "ПаÑлуга Ð½Ð°Ð³Ð°Ð´Ð²Ð°Ð½ÑŒÐ½Ñ Ñыгналу календара \"Эвалюцыі\""
-
-#: calendar/gui/alarm-notify/alarm-notify-dialog.c:213
-msgid "Starting:"
-msgstr "ЗапуÑкаецца:"
-
-#: calendar/gui/alarm-notify/alarm-notify-dialog.c:215
-msgid "Ending:"
-msgstr "ЗавÑршаецца:"
-
-#: calendar/gui/alarm-notify/alarm-notify-dialog.c:259
-msgid "Evolution Alarm"
-msgstr "Ðагадваньне \"Эвалюцыі\""
-
-#: calendar/gui/alarm-notify/alarm-notify-dialog.c:358
-#, c-format
-msgid "Alarm on %s"
-msgstr "Ðагадваньне на %s"
-
-#: calendar/gui/alarm-notify/alarm-notify.glade.h:1
-#, fuzzy
-msgid "Snooze _time (minutes):"
-msgstr "Ðагадаць паÑÑŒÐ»Ñ (хвіліны)"
-
-#: calendar/gui/alarm-notify/alarm-notify.glade.h:2
-msgid "_Edit appointment"
-msgstr "_РÑдагаваць ÑуÑÑ‚Ñ€Ñчу"
-
-#: calendar/gui/alarm-notify/alarm-notify.glade.h:3
-#, fuzzy
-msgid "_Snooze"
-msgstr "Ðагадаць _пазьней"
-
-#: calendar/gui/alarm-notify/alarm-queue.c:881
-#: ui/evolution-message-composer.xml.h:10
-msgid "Open"
-msgstr "Ðдкрыць"
-
-#: calendar/gui/alarm-notify/alarm-queue.c:883
-msgid "Dismiss"
-msgstr ""
-
-#: calendar/gui/alarm-notify/alarm-queue.c:885
-msgid "Dismiss All"
-msgstr ""
-
-#: calendar/gui/alarm-notify/alarm-queue.c:949
-msgid "No description available."
-msgstr "ÐпіÑаньне недаÑтупна."
-
-#: calendar/gui/alarm-notify/alarm-queue.c:969
-#, c-format
-msgid ""
-"Alarm on %s\n"
-"%s\n"
-"Starting at %s\n"
-"Ending at %s"
-msgstr ""
-
-#: calendar/gui/alarm-notify/alarm-queue.c:1069
-#: calendar/gui/alarm-notify/alarm-queue.c:1093
-msgid "Warning"
-msgstr "ПапÑÑ€Ñджаньне"
-
-#: calendar/gui/alarm-notify/alarm-queue.c:1073
-msgid ""
-"Evolution does not support calendar reminders with\n"
-"email notifications yet, but this reminder was\n"
-"configured to send an email. Evolution will display\n"
-"a normal reminder dialog box instead."
-msgstr ""
-"\"ЭвалюцыÑ\" не падтрымлівае ÑÑˆÑ‡Ñ Ð½Ð°Ð³Ð°Ð´Ð²Ð°Ð½ÑŒÐ½Ñ– календару праз\n"
-"пошту, але гÑтае нагадваньне наладжана Ð´Ð»Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– пошты.\n"
-"\"ЭвалюцыÑ\" будзе адлюÑтроўваць замеÑÑ‚ гÑтага звычайны дыÑлёг\n"
-"нагадваньнÑ."
-
-#: calendar/gui/alarm-notify/alarm-queue.c:1099
-#, c-format
-msgid ""
-"An Evolution Calendar reminder is about to trigger. This reminder is "
-"configured to run the following program:\n"
-"\n"
-" %s\n"
-"\n"
-"Are you sure you want to run this program?"
-msgstr ""
-"ГÑтае нагадваньне наладжана на выкананьне праграмы:\n"
-"\n"
-" %s\n"
-"\n"
-"Ð’Ñ‹ Ñапраўды жадаеце выканаць гÑтую праграму?"
-
-#: calendar/gui/alarm-notify/alarm-queue.c:1113
-msgid "Do not ask me about this program again."
-msgstr "Болей не раÑпавÑдаць мне пра гÑтую праграму."
-
-#: calendar/gui/alarm-notify/notify-main.c:139
-msgid "Could not initialize Bonobo"
-msgstr "Ðе атрымалаÑÑ Ñ–Ð½Ñ–Ñ†Ñ‹Ñлізаваць Bonobo"
-
-#: calendar/gui/alarm-notify/notify-main.c:150
-msgid "Could not create the alarm notify service factory"
-msgstr "Ðемагчыма Ñтварыць вытворчаÑьць паÑлугі нагадваньнÑ"
-
-#: calendar/gui/alarm-notify/util.c:41
-msgid "invalid time"
-msgstr "нерÑчаіÑны чаÑ"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:1
-msgid "Allocate less space to weekend appointments"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:2
-#, fuzzy
-msgid "Calendars to run alarms for"
-msgstr "Памылка iCalendar"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:3
-msgid "Color of tasks that are due today"
-msgstr "Колер Ð´Ð»Ñ ÑƒÐ¼Ð¾ÑžÐ»ÐµÐ½Ñ‹Ñ… на дзень заданьнÑÑž"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:4
-msgid "Color of tasks that are overdue"
-msgstr "Колер Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž ÑÐºÑ–Ñ Ð¿Ñ€Ð°Ñ‚ÑрмінаваныÑ"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:5
-msgid "Days that are work days"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:6
-msgid "Default timezone for meetings"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:7
-msgid "Hour the workday ends on"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:8
-msgid "Hour the workday starts on"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:9
-msgid "Intervals shown in Day and Work Week views"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:10
-msgid "List of urls for free/busy publishing"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:11
-msgid "Minute the workday ends on"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:12
-msgid "Minute the workday starts on"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:13
-msgid "Number of units for default reminder"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:14
-msgid "Number of units for determining when to hide tasks"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:15
-msgid "Position of the horizontal pane"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:16
-msgid "Position of the horizontal pane in the month view"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:17
-msgid "Position of the vertical pane"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:18
-msgid "Position of the vertical pane in the month view"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:19
-msgid "Position of the vertical pane in the task view"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:20
-msgid "Programs that can run as part of alarms"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:21
-#, fuzzy
-msgid "Show where events end in week and month views"
-msgstr "_ÐдлюÑтраваць ÑуÑÑ‚Ñ€Ñчу Ñ– Ñ‡Ð°Ñ Ñƒ выглÑдзе тыднÑÑž Ñ– меÑÑцаў"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:22
-msgid "Time last alarm ran"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:23
-msgid "Units for determining when to hide tasks"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:24
-msgid "Units of default reminder"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:25
-msgid "Weekday the week starts on"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:26
-msgid "Whether or not to use the notification tray for display alarms"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:27
-#, fuzzy
-msgid "Whether to ask for confirmation on appointment deletion"
-msgstr "Запыт на падцьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:28
-#, fuzzy
-msgid "Whether to ask for confirmation when folder is expunged"
-msgstr "Запыт на падцьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:29
-msgid "Whether to hide completed tasks"
-msgstr "Ці хаваць ÑÐºÐ¾Ð½Ñ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:30
-msgid "Whether to set a default reminder for events"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:31
-msgid "Whether to show times in 24h format instead of using am/pm"
-msgstr ""
-
-#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:32
-msgid "Whether to show week numbers in date navigator"
-msgstr "Ці паказваць нумары тыднÑÑž у навігатары па датах"
-
-#: calendar/gui/cal-search-bar.c:50
-msgid "Summary contains"
-msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі утрымліваюць"
-
-#: calendar/gui/cal-search-bar.c:51
-msgid "Description contains"
-msgstr "ÐпіÑаньне ўтрымлівае"
-
-#: calendar/gui/cal-search-bar.c:52
-msgid "Comment contains"
-msgstr "КамÑнтар утрымлівае"
-
-#: calendar/gui/cal-search-bar.c:53
-msgid "Location contains"
-msgstr "РазьмÑшчÑньне ўтрымлівае"
-
-#: calendar/gui/cal-search-bar.c:362 camel/camel-vee-store.c:327
-msgid "Unmatched"
-msgstr "Ð†Ð½ÑˆÐ°Ñ Ð¿Ð¾ÑˆÑ‚Ð°"
-
-#: calendar/gui/calendar-commands.c:117 calendar/gui/calendar-component.c:564
-#: calendar/gui/dialogs/select-source-dialog.c:112
-#: calendar/gui/gnome-cal.c:1858
-#: camel/providers/groupwise/camel-gw-listener.c:315
-#: camel/providers/groupwise/camel-gw-listener.c:338
-msgid "Calendar"
-msgstr "КалÑндар"
-
-#: calendar/gui/calendar-commands.c:352
-msgid ""
-"This operation will permanently erase all events older than the selected "
-"amount of time. If you continue, you will not be able to recover these "
-"events."
-msgstr ""
-"ГÑÑ‚Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ назаўÑёды уÑе падзеі, ÑÐºÑ–Ñ ÑтарÑÐ¹ÑˆÑ‹Ñ Ð·Ð° "
-"пазначаны чаÑ. Калі вы працÑгніце, тады Ð½Ñ Ð·Ð´Ð¾Ð»ÐµÐµÑ†Ðµ вÑрнуць гÑÑ‚Ñ‹Ñ "
-"падзеі."
-
-#: calendar/gui/calendar-commands.c:358
-msgid "Purge events older than"
-msgstr "ВыдалÑць падзеі ÑтарÑÐ¹ÑˆÑ‹Ñ Ð·Ð°"
-
-#: calendar/gui/calendar-commands.c:363
-#: calendar/gui/dialogs/alarm-dialog.glade.h:21
-#: calendar/gui/dialogs/calendar-setup.glade.h:12 filter/filter.glade.h:13
-msgid "days"
-msgstr "дні"
-
-#: calendar/gui/calendar-commands.c:432
-msgid "%A %d %B %Y"
-msgstr "%A %d %B %Y"
-
-#. strftime format %a = abbreviated weekday name, %d = day of month,
-#. %b = abbreviated month name. Don't use any other specifiers.
-#. strftime format %a = abbreviated weekday name,
-#. %d = day of month, %b = abbreviated month name.
-#. You can change the order but don't change the
-#. specifiers or add anything.
-#: calendar/gui/calendar-commands.c:435 calendar/gui/calendar-component.c:519
-#: calendar/gui/e-day-view-top-item.c:714 calendar/gui/e-day-view.c:1588
-#: calendar/gui/e-week-view-main-item.c:329
-msgid "%a %d %b"
-msgstr "%a %d %b"
-
-#: calendar/gui/calendar-commands.c:437 calendar/gui/calendar-commands.c:442
-#: calendar/gui/calendar-commands.c:444 calendar/gui/calendar-component.c:521
-#: calendar/gui/calendar-component.c:526 calendar/gui/calendar-component.c:528
-msgid "%a %d %b %Y"
-msgstr "%a %d %b %Y"
-
-#: calendar/gui/calendar-commands.c:461 calendar/gui/calendar-commands.c:467
-#: calendar/gui/calendar-commands.c:473 calendar/gui/calendar-commands.c:475
-msgid "%d %B %Y"
-msgstr "%d %B %Y"
-
-#. strftime format %d = day of month, %B = full
-#. month name. You can change the order but don't
-#. change the specifiers or add anything.
-#: calendar/gui/calendar-commands.c:465
-#: calendar/gui/e-week-view-main-item.c:337 calendar/gui/print.c:1498
-msgid "%d %B"
-msgstr "%d %B"
-
-#: calendar/gui/calendar-component.c:370
-#, c-format
-msgid "Calendar '%s' will be removed. Are you sure you want to continue?"
-msgstr ""
-
-#: calendar/gui/calendar-component.c:426
-msgid "New Calendar"
-msgstr "Ðовы калÑндар"
-
-#: calendar/gui/calendar-component.c:516
-msgid "%A %d %b %Y"
-msgstr "%A %d %b %Y"
-
-#: calendar/gui/calendar-component.c:540 calendar/gui/calendar-component.c:547
-#: calendar/gui/calendar-component.c:553 calendar/gui/calendar-component.c:555
-msgid "%d %b %Y"
-msgstr "%d %b %Y"
-
-#. strftime format %d = day of month, %b = abbreviated month name.
-#. Don't use any other specifiers.
-#. strftime format %d = day of month, %b = abbreviated
-#. month name. You can change the order but don't
-#. change the specifiers or add anything.
-#: calendar/gui/calendar-component.c:545
-#: calendar/gui/e-day-view-top-item.c:718 calendar/gui/e-day-view.c:1604
-#: calendar/gui/e-week-view-main-item.c:343
-msgid "%d %b"
-msgstr "%d %b"
-
-#: calendar/gui/calendar-component.c:635
-msgid "Failed upgrading calendars."
-msgstr "Збой Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñƒ."
-
-#: calendar/gui/calendar-component.c:929
-#, c-format
-msgid "Unable to open the calendar '%s' for creating events and meetings"
-msgstr ""
-
-#: calendar/gui/calendar-component.c:941
-msgid "There is no calendar available for creating events and meetings"
-msgstr ""
-
-#: calendar/gui/calendar-component.c:1238
-msgid "New appointment"
-msgstr "ÐÐ¾Ð²Ð°Ñ ÑуÑÑ‚Ñ€Ñча"
-
-#: calendar/gui/calendar-component.c:1239
-msgid "_Appointment"
-msgstr "_СуÑÑ‚Ñ€Ñча"
-
-#: calendar/gui/calendar-component.c:1240
-msgid "Create a new appointment"
-msgstr "Стварыць новую ÑуÑÑ‚Ñ€Ñчу"
-
-#: calendar/gui/calendar-component.c:1246
-msgid "New meeting"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð½Ð°Ñ€Ð°Ð´Ð°"
-
-#: calendar/gui/calendar-component.c:1247
-msgid "M_eeting"
-msgstr "Ðарада"
-
-#: calendar/gui/calendar-component.c:1248
-msgid "Create a new meeting request"
-msgstr "Стварыць запыт новае нарады"
-
-#: calendar/gui/calendar-component.c:1254
-msgid "New all day appointment"
-msgstr "ÐÐ¾Ð²Ð°Ñ ÑуÑÑ‚Ñ€Ñча на увеÑÑŒ дзень"
-
-#: calendar/gui/calendar-component.c:1255
-msgid "All Day A_ppointment"
-msgstr "СуÑÑ‚Ñ€Ñча на ўвеÑÑŒ _дзень"
-
-#: calendar/gui/calendar-component.c:1256
-msgid "Create a new all-day appointment"
-msgstr "Стварыць новую ÑуÑÑ‚Ñ€Ñчу \"на ўвеÑÑŒ дзень\""
-
-#: calendar/gui/calendar-component.c:1262
-msgid "New calendar"
-msgstr "Ðовы калÑндар"
-
-#: calendar/gui/calendar-component.c:1263
-msgid "Cale_ndar"
-msgstr "Ка_лÑндар"
-
-#: calendar/gui/calendar-component.c:1264
-msgid "Create a new calendar"
-msgstr "Стварыць новы калÑндар "
-
-#: calendar/gui/calendar-offline-handler.c:192
-#, c-format
-msgid "backend_go_offline(): %s"
-msgstr ""
-
-#: calendar/gui/calendar-offline-handler.c:215
-#, c-format
-msgid "backend_go_online(): %s"
-msgstr ""
-
-#: calendar/gui/calendar-view-factory.c:118
-msgid "Day View"
-msgstr "ПраглÑд дню"
-
-#: calendar/gui/calendar-view-factory.c:121
-msgid "Work Week View"
-msgstr "ПраглÑд працоўнага тыдню"
-
-#: calendar/gui/calendar-view-factory.c:124
-msgid "Week View"
-msgstr "ПраглÑд тыдню"
-
-#: calendar/gui/calendar-view-factory.c:127
-msgid "Month View"
-msgstr "ПраглÑд меÑÑцу"
-
-#: calendar/gui/comp-editor-factory.c:409
-msgid "Error while opening the calendar"
-msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒÑ†Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñƒ"
-
-#: calendar/gui/comp-editor-factory.c:420
-msgid "Method not supported when opening the calendar"
-msgstr "ÐœÑтад не падтрымліваецца калі адкрываецца калÑндар"
-
-#: calendar/gui/comp-editor-factory.c:426
-msgid "Permission denied to open the calendar"
-msgstr "ÐдÑутнічаюць правы на адкрыцьцё календару"
-
-#: calendar/gui/comp-editor-factory.c:474
-#, c-format
-msgid "open_client(): %s"
-msgstr ""
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:2
-msgid "<b>Alarm</b>\t"
-msgstr "<b>Сыгнал</b>\t"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:3
-msgid "<b>Options</b>"
-msgstr "<b>Выбары</b>"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:4
-msgid "<b>Repeat</b>"
-msgstr "<b>Паўтор</b>"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:5
-msgid "Add Alarm"
-msgstr "Дадаць Ñыгнал"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:6
-msgid "Custom _message"
-msgstr "Паведамленьне вызначанае карыÑтальнікам"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:7
-msgid "Custom alarm sound"
-msgstr "Сыгналь вызначаны карыÑтальнікам"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:8
-msgid "Mes_sage:"
-msgstr "Паведамленьне:"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:9 calendar/gui/e-alarm-list.c:444
-msgid "Play a sound"
-msgstr "Граць гук"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:10
-#: calendar/gui/e-alarm-list.c:448
-msgid "Pop up an alert"
-msgstr ""
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:11
-#: calendar/gui/e-alarm-list.c:456
-msgid "Run a program"
-msgstr "ЗапуÑьціць праграму"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:12
-msgid "Send To:"
-msgstr "ДаÑлаць на:"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:13
-#: calendar/gui/e-alarm-list.c:452
-msgid "Send an email"
-msgstr "ДаÑлаць пошту"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:14
-msgid "_Arguments:"
-msgstr "ÐргумÑнты:"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:15
-msgid "_Program:"
-msgstr "Праграма:"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:16
-#, fuzzy
-msgid "_Repeat the alarm"
-msgstr "Паўтор нагадваньнÑ"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:17
-msgid "_Sound:"
-msgstr "_Гук:"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:18
-msgid "after"
-msgstr "паÑьлÑ"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:19
-msgid "before"
-msgstr "перад"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:20
-#: calendar/gui/dialogs/recurrence-page.glade.h:7
-msgid "day(s)"
-msgstr "дзень(дзён)"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:22
-msgid "end of appointment"
-msgstr "канец ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:23
-msgid "extra times every"
-msgstr "дадатковы Ñ‡Ð°Ñ ÐºÐ¾Ð¶Ð½Ñ‹Ñ"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:24
-msgid "hour(s)"
-msgstr "гадзіна (ы)"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:25
-#: calendar/gui/dialogs/calendar-setup.glade.h:13 filter/filter.glade.h:14
-msgid "hours"
-msgstr "гадзіны"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:26
-msgid "minute(s)"
-msgstr "хвіліна(ы)"
-
-#: calendar/gui/dialogs/alarm-dialog.glade.h:28
-msgid "start of appointment"
-msgstr "пачатак ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/alarm-list-dialog.c:192
-msgid "Action/Trigger"
-msgstr ""
-
-#: calendar/gui/dialogs/alarm-list-dialog.glade.h:1
-msgid "A_dd"
-msgstr "_Дадаць"
-
-#: calendar/gui/dialogs/alarm-list-dialog.glade.h:2
-msgid "Alarms"
-msgstr "Сыгналы"
-
-#. FIXME: This routine should just be a "toggled" event handler on the checkbox cell renderer which
-#. has "activatable" set.
-#: calendar/gui/dialogs/cal-prefs-dialog.c:567 mail/em-account-prefs.c:466
-#: mail/em-composer-prefs.c:677 mail/em-composer-prefs.c:905
-msgid "Enabled"
-msgstr "Уключана"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.c:721
-msgid "Are you sure you want to remove this URL?"
-msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑÑ‚Ñ‹ URL?"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.c:729
-msgid "Don't Remove"
-msgstr "Ðе выдалÑць"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.c:778
-#: calendar/gui/dialogs/cal-prefs-dialog.c:811
-#: calendar/gui/dialogs/cal-prefs-dialog.c:844 mail/em-account-prefs.c:288
-#: mail/em-account-prefs.c:329 mail/em-account-prefs.c:372
-#: mail/em-composer-prefs.c:596 mail/em-composer-prefs.c:654
-#: mail/em-composer-prefs.c:684
-msgid "Disable"
-msgstr "Выключыць"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.c:778
-#: calendar/gui/dialogs/cal-prefs-dialog.c:811
-#: calendar/gui/dialogs/cal-prefs-dialog.c:846 mail/em-account-prefs.c:288
-#: mail/em-account-prefs.c:329 mail/em-account-prefs.c:374
-#: mail/em-composer-prefs.c:596 mail/em-composer-prefs.c:654
-#: mail/em-composer-prefs.c:684
-msgid "Enable"
-msgstr "Уключыць"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:1
-msgid "05 minutes"
-msgstr " 5 хвілін"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:2
-msgid "10 minutes"
-msgstr "10 хвілін"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:3
-msgid "15 minutes"
-msgstr "15 хвілін"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:4
-msgid "30 minutes"
-msgstr "30 хвілін"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:5
-msgid "60 minutes"
-msgstr "60 хвілін"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:6
-#, fuzzy
-msgid "<b>Alerts</b>"
-msgstr "<b>Пачынаецца:</b> "
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:7
-msgid "<b>General</b>"
-msgstr "<b>ÐÑноўнае</b>"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:8
-msgid "<b>Task List</b>"
-msgstr "<b>Ð¡ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž</b>"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:9
-msgid "<b>Time</b>"
-msgstr "<b>Умоўлены:</b> "
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:10
-msgid "<b>Work Week</b>"
-msgstr "<b>Працоўны тыдзень</b>"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:11
-msgid "Calendar and Tasks Settings"
-msgstr "УÑталёўкі календара Ñ– заданьнÑÑž..."
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:12
-msgid "Color for overdue tasks"
-msgstr "Колер Ð´Ð»Ñ Ð½Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½Ñ‹Ñ… заданьнÑÑž"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:13
-msgid "Color for tasks due today"
-msgstr "Колер Ð´Ð»Ñ ÑƒÐ¼Ð¾ÑžÐ»ÐµÐ½Ñ‹Ñ… на дзень заданьнÑÑž "
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:14
-msgid "Day _ends:"
-msgstr "Дзень канчаецца:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:15
-msgid "Days"
-msgstr "Дні"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:16
-msgid "Display"
-msgstr "Паказаць"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:17
-#: mail/mail-config.glade.h:76
-msgid "E_nable"
-msgstr "Уключыць"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:18
-msgid "Free/Busy Publishing"
-msgstr "Публікаваньне зьвеÑтак \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:19
-#: calendar/gui/dialogs/recurrence-page.c:1038
-#: calendar/gui/e-itip-control.c:556
-msgid "Friday"
-msgstr "ПÑтніца"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:21
-msgid "Hours"
-msgstr "Гадзіны"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:22
-msgid "Minutes"
-msgstr "Хвіліны"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:23
-#: calendar/gui/dialogs/recurrence-page.c:1034
-#: calendar/gui/e-itip-control.c:552
-msgid "Monday"
-msgstr "ПанÑдзелак"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:24
-msgid "S_un"
-msgstr "ÐÑд"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:25
-#: calendar/gui/dialogs/recurrence-page.c:1039
-#: calendar/gui/e-itip-control.c:557
-msgid "Saturday"
-msgstr "Субота"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:26
-msgid "Sh_ow a reminder"
-msgstr "Паказаць нагадваньне"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:27
-msgid "Show week _numbers in date navigator"
-msgstr "Паказаць нумары тыднÑÑž у навігатары па датах"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:28
-#: calendar/gui/dialogs/recurrence-page.c:1040
-#: calendar/gui/e-itip-control.c:551
-msgid "Sunday"
-msgstr "ÐÑдзелÑ"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:29
-msgid "T_asks due today:"
-msgstr "Заданьні уÑталÑÐ²Ð°Ð½Ñ‹Ñ Ð½Ð° ÑёньнÑ:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:30
-msgid "T_hu"
-msgstr "Чцв"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:31
-#: calendar/gui/dialogs/recurrence-page.c:1037
-#: calendar/gui/e-itip-control.c:555
-msgid "Thursday"
-msgstr "Чацьвер"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:32
-msgid "Time _zone:"
-msgstr "ЧаÑÐ°Ð²Ð°Ñ Ð·Ð¾Ð½Ð°: "
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:33
-msgid "Time format:"
-msgstr "Фармат чаÑу:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:34
-#: calendar/gui/dialogs/recurrence-page.c:1035
-#: calendar/gui/e-itip-control.c:553
-msgid "Tuesday"
-msgstr "Ðўторак"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:35
-msgid "W_eek starts:"
-msgstr "Тыдзень пачынаецца з:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:36
-#: calendar/gui/dialogs/recurrence-page.c:1036
-#: calendar/gui/e-itip-control.c:554
-msgid "Wednesday"
-msgstr "Серада"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:37
-msgid "Work days:"
-msgstr "ÐŸÑ€Ð°Ñ†Ð¾ÑžÐ½Ñ‹Ñ Ð´Ð½Ñ–:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:38
-msgid "_12 hour (AM/PM)"
-msgstr "12 гадзін"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:39
-msgid "_24 hour"
-msgstr "24 гадзіны"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:40
-msgid "_Add URL"
-msgstr "_Дадаць URL"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:41
-msgid "_Ask for confirmation when deleting items"
-msgstr "Запыт на пацьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:42
-msgid "_Compress weekends in month view"
-msgstr "СьціÑнуць Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ñ Ñž праглÑдзе меÑÑца"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:43
-msgid "_Day begins:"
-msgstr "Дзень пачынаецца:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:44
-#: calendar/gui/dialogs/recurrence-page.glade.h:6 filter/filter.glade.h:10
-#: mail/mail-config.glade.h:162 ui/evolution-addressbook.xml.h:34
-#: ui/evolution-calendar.xml.h:41 ui/evolution-composer-entries.xml.h:8
-#: ui/evolution-mail-list.xml.h:24 ui/evolution-mail-messagedisplay.xml.h:6
-#: ui/evolution-message-composer.xml.h:43
-#: ui/evolution-signature-editor.xml.h:12 ui/evolution-subscribe.xml.h:10
-#: ui/evolution-tasks.xml.h:22
-msgid "_Edit"
-msgstr "_РÑдагаваньне"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:45
-msgid "_Fri"
-msgstr "_Птн"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:46
-msgid "_Hide completed tasks after"
-msgstr "Схаваць выкананьне Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ Ð¿Ñ€Ð°Ð·"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:47
-msgid "_Mon"
-msgstr "_Пан"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:48
-msgid "_Overdue tasks:"
-msgstr "_ÐÑÐ²Ñ‹ÐºÐ°Ð½Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:49
-msgid "_Sat"
-msgstr "Суб"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:50
-msgid "_Show appointment end times in week and month views"
-msgstr "_ÐдлюÑтраваць ÑуÑÑ‚Ñ€Ñчу Ñ– Ñ‡Ð°Ñ Ñƒ выглÑдзе тыднÑÑž Ñ– меÑÑцаў"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:51
-msgid "_Time divisions:"
-msgstr "ЧаÑÐ°Ð²Ñ‹Ñ Ð¿Ð°Ð´Ð·ÐµÐ»Ñ‹:"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:52
-msgid "_Tue"
-msgstr "Ðўт"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:53
-msgid "_Wed"
-msgstr "Срд"
-
-#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:54
-msgid "before every appointment"
-msgstr "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
-
-#: calendar/gui/dialogs/calendar-setup.c:172
-msgid "You must specify a location to get the calendar from."
-msgstr "Ð’Ñ‹ муÑіце пазначыць разьмÑшчÑньне адкуль забіраецца калÑндар."
-
-#: calendar/gui/dialogs/calendar-setup.c:180
-#, c-format
-msgid "The source location '%s' is not well-formed."
-msgstr "РазьмÑшчÑньне крыніцы \"%s\" не Ñž падыходзÑчым фармаце."
-
-#: calendar/gui/dialogs/calendar-setup.c:195
-#, c-format
-msgid "The source location '%s' is not a webcal source."
-msgstr ""
-
-#: calendar/gui/dialogs/calendar-setup.c:275
-#, c-format
-msgid "Source with name '%s' already exists in the selected group"
-msgstr ""
-
-#: calendar/gui/dialogs/calendar-setup.c:288
-#, c-format
-msgid ""
-"The group '%s' is remote. You must specify a location to get the calendar "
-"from"
-msgstr ""
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:2
-msgid "Add Calendar"
-msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÐµÐ´Ð¾Ð½Ñ–Ñ"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:3
-msgid "Add Task List"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:4
-msgid "C_olor:"
-msgstr "Колер:"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:5 mail/mail-config.glade.h:110
-msgid "Pick a color"
-msgstr "Выберыце колер"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:6
-msgid "_Add Calendar"
-msgstr "_Дадаць календар"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:7
-msgid "_Add Group"
-msgstr "_Дадаць групу"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:9
-msgid "_Refresh:"
-msgstr "Ðбнавіць:"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:10
-msgid "_Type:"
-msgstr "Тып:"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:11
-msgid "_URL:"
-msgstr "URL:"
-
-#: calendar/gui/dialogs/calendar-setup.glade.h:15 filter/filter.glade.h:20
-msgid "weeks"
-msgstr "тыдні"
-
-#: calendar/gui/dialogs/changed-comp.c:60
-msgid "This event has been deleted."
-msgstr "ГÑÑ‚Ð°Ñ Ð¿Ð°Ð´Ð·ÐµÑ Ð±Ñ‹Ð»Ð° выдалена."
-
-#: calendar/gui/dialogs/changed-comp.c:64
-msgid "This task has been deleted."
-msgstr "ГÑтае заданьне было выдалена."
-
-#: calendar/gui/dialogs/changed-comp.c:68
-msgid "This journal entry has been deleted."
-msgstr "ГÑÑ‚Ñ‹ Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа быў выдалены."
-
-#: calendar/gui/dialogs/changed-comp.c:77
-#, c-format
-msgid "%s You have made changes. Forget those changes and close the editor?"
-msgstr "%s Ð’Ñ‹ зрабілі зьмены. Забыцца на Ñ–Ñ… Ñ– закрыць Ñ€Ñдактар?"
-
-#: calendar/gui/dialogs/changed-comp.c:79
-#, c-format
-msgid "%s You have made no changes, close the editor?"
-msgstr "%s Ð’Ñ‹ анічога не зьмÑнілі. Зачыніць Ñ€Ñдактар?"
-
-#: calendar/gui/dialogs/changed-comp.c:84
-msgid "This event has been changed."
-msgstr "ГÑÑ‚Ð°Ñ Ð¿Ð°Ð´Ð·ÐµÑ Ð±Ñ‹Ð»Ð° зьменена."
-
-#: calendar/gui/dialogs/changed-comp.c:88
-msgid "This task has been changed."
-msgstr "ГÑтае заданьне было зьменена."
-
-#: calendar/gui/dialogs/changed-comp.c:92
-msgid "This journal entry has been changed."
-msgstr "ГÑÑ‚Ñ‹ Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа быў зьменены."
-
-#: calendar/gui/dialogs/changed-comp.c:101
-#, c-format
-msgid "%s You have made changes. Forget those changes and update the editor?"
-msgstr "%s Ð’Ñ‹ ўнеÑьлі зьмены. Забыцца на Ñ–Ñ… Ñ– абнавіць Ñ€Ñдактар?"
-
-#: calendar/gui/dialogs/changed-comp.c:103
-#, c-format
-msgid "%s You have made no changes, update the editor?"
-msgstr "%s Ð’Ñ‹ ўнеÑьлі зьмены, абнавіць Ñ€Ñдактар?"
-
-#: calendar/gui/dialogs/comp-editor-page.c:464
-#, c-format
-msgid "Validation error: %s"
-msgstr "Памылка зацьвÑрджÑньнÑ: %s"
-
-#: calendar/gui/dialogs/comp-editor-util.c:187 calendar/gui/print.c:2258
-msgid " to "
-msgstr " да "
-
-#: calendar/gui/dialogs/comp-editor-util.c:191 calendar/gui/print.c:2262
-msgid " (Completed "
-msgstr " (Выканана "
-
-#: calendar/gui/dialogs/comp-editor-util.c:193 calendar/gui/print.c:2264
-msgid "Completed "
-msgstr "Выканана "
-
-#: calendar/gui/dialogs/comp-editor-util.c:198 calendar/gui/print.c:2269
-msgid " (Due "
-msgstr " (ПатрÑба "
-
-#: calendar/gui/dialogs/comp-editor-util.c:200 calendar/gui/print.c:2271
-msgid "Due "
-msgstr "Умоўленае"
-
-#: calendar/gui/dialogs/comp-editor.c:264
-msgid "Could not update object"
-msgstr "Ðемагчыма абнавіць аб'ект"
-
-#: calendar/gui/dialogs/comp-editor.c:878
-#: calendar/gui/dialogs/comp-editor.c:915
-msgid "Edit Appointment"
-msgstr "РÑдагаваньне ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/comp-editor.c:883
-#: calendar/gui/dialogs/comp-editor.c:920
-#, c-format
-msgid "Appointment - %s"
-msgstr "СуÑÑ‚Ñ€Ñча - %s"
-
-#: calendar/gui/dialogs/comp-editor.c:886
-#: calendar/gui/dialogs/comp-editor.c:923
-#, c-format
-msgid "Task - %s"
-msgstr "Заданьне - %s"
-
-#: calendar/gui/dialogs/comp-editor.c:889
-#: calendar/gui/dialogs/comp-editor.c:926
-#, c-format
-msgid "Journal entry - %s"
-msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа - %s"
-
-#: calendar/gui/dialogs/comp-editor.c:900
-#: calendar/gui/dialogs/comp-editor.c:936
-msgid "No summary"
-msgstr "ÐÑма агульных зьвеÑтак"
-
-#: calendar/gui/dialogs/comp-editor.c:1302
-#: calendar/gui/dialogs/comp-editor.c:1335
-#: calendar/gui/dialogs/comp-editor.c:1359
-msgid "Changes made to this item may be discarded if an update arrives"
-msgstr ""
-
-#: calendar/gui/dialogs/comp-editor.c:1383
-msgid "Unable to use current version!"
-msgstr "Ðемагчыма атрымаць бÑгучую вÑÑ€ÑÑ–ÑŽ!"
-
-#: calendar/gui/dialogs/copy-source-dialog.c:61
-msgid "Could not open source"
-msgstr "Ðе магчыма адкрыць крыніцу"
-
-#: calendar/gui/dialogs/copy-source-dialog.c:69
-msgid "Could not open destination"
-msgstr "Ðе магчыма адкрыць прызначÑньне"
-
-#: calendar/gui/dialogs/copy-source-dialog.c:78
-msgid "Destination is read only"
-msgstr ""
-
-#: calendar/gui/dialogs/delete-error.c:54
-msgid "The event could not be deleted due to a corba error"
-msgstr "ÐŸÐ°Ð´Ð·ÐµÑ Ð½Ðµ можа быць выдалена з-за памылкі corba"
-
-#: calendar/gui/dialogs/delete-error.c:57
-msgid "The task could not be deleted due to a corba error"
-msgstr "Заданьне не можа быць выдалена з-за памылкі corba"
-
-#: calendar/gui/dialogs/delete-error.c:60
-msgid "The journal entry could not be deleted due to a corba error"
-msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа не можа быць выдалены з-за памылкі corba"
-
-#: calendar/gui/dialogs/delete-error.c:63
-msgid "The item could not be deleted due to a corba error"
-msgstr "ЭлемÑнт не можа быць выдалена з-за памылкі corba"
-
-#: calendar/gui/dialogs/delete-error.c:70
-msgid "The event could not be deleted because permission was denied"
-msgstr "ÐŸÐ°Ð´Ð·ÐµÑ Ð½Ðµ можа быць выдалена пакуль доÑтуп забаронены"
-
-#: calendar/gui/dialogs/delete-error.c:73
-msgid "The task could not be deleted because permission was denied"
-msgstr "Заданьне не можа быць выдалена пакуль доÑтуп забаронены"
-
-#: calendar/gui/dialogs/delete-error.c:76
-msgid "The journal entry could not be deleted because permission was denied"
-msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа не можа быць выдалены пакуль доÑтуп забаронены"
-
-#: calendar/gui/dialogs/delete-error.c:79
-msgid "The item could not be deleted because permission was denied"
-msgstr "ЭлемÑнт не можа быць выдалена пакуль доÑтуп забаронены"
-
-#: calendar/gui/dialogs/delete-error.c:86
-msgid "The event could not be deleted due to an error"
-msgstr "ÐŸÐ°Ð´Ð·ÐµÑ Ð½Ðµ можа быць выдалена з-за памылкі"
-
-#: calendar/gui/dialogs/delete-error.c:89
-msgid "The task could not be deleted due to an error"
-msgstr "Заданьне не можа быць выдалена з-за памылкі"
-
-#: calendar/gui/dialogs/delete-error.c:92
-msgid "The journal entry could not be deleted due to an error"
-msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа не можа быць выдалены з-за памылкі"
-
-#: calendar/gui/dialogs/delete-error.c:95
-msgid "The item could not be deleted due to an error"
-msgstr "ЭлемÑнт не можа быць выдалена з-за памылкі"
-
-#: calendar/gui/dialogs/e-delegate-dialog.glade.h:1
-msgid "Contacts..."
-msgstr "Кантакты..."
-
-#: calendar/gui/dialogs/e-delegate-dialog.glade.h:2
-msgid "Delegate To:"
-msgstr "ДÑлегаваць да:"
-
-#: calendar/gui/dialogs/e-delegate-dialog.glade.h:3
-msgid "Enter Delegate"
-msgstr "Пазначце дÑлегата"
-
-#: calendar/gui/dialogs/event-editor.c:153 calendar/gui/print.c:2295
-msgid "Appointment"
-msgstr "СуÑÑ‚Ñ€Ñча"
-
-#: calendar/gui/dialogs/event-editor.c:162
-msgid "Recurrence"
-msgstr "Ð’Ñртаньне"
-
-#: calendar/gui/dialogs/event-editor.c:169
-#: calendar/gui/dialogs/event-editor.c:239
-#: calendar/gui/dialogs/event-editor.c:381
-msgid "Scheduling"
-msgstr "ПлÑнаваньне"
-
-#: calendar/gui/dialogs/event-editor.c:176
-msgid "Invitations"
-msgstr "ЗапрашÑньні"
-
-#: calendar/gui/dialogs/event-editor.c:242
-#: calendar/gui/dialogs/event-editor.c:384 ui/evolution-event-editor.xml.h:6
-msgid "Meeting"
-msgstr "Ðарада"
-
-#: calendar/gui/dialogs/event-page.c:692
-msgid "Event with no start date"
-msgstr ""
-
-#: calendar/gui/dialogs/event-page.c:695
-msgid "Event with no end date"
-msgstr ""
-
-#: calendar/gui/dialogs/event-page.c:855 calendar/gui/dialogs/task-page.c:523
-msgid "Start date is wrong"
-msgstr "Дата пачатку памылковаÑ"
-
-#: calendar/gui/dialogs/event-page.c:865
-msgid "End date is wrong"
-msgstr "Дата завÑршÑÐ½ÑŒÐ½Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ"
-
-#: calendar/gui/dialogs/event-page.c:888
-msgid "Start time is wrong"
-msgstr "Ð§Ð°Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÑƒ памылковы"
-
-#: calendar/gui/dialogs/event-page.c:895
-msgid "End time is wrong"
-msgstr "Ð§Ð°Ñ Ð·Ð°ÐºÐ°Ð½Ñ‡ÑÐ½ÑŒÐ½Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ñ‹"
-
-#: calendar/gui/dialogs/event-page.c:1605
-#, c-format
-msgid "Unable to open the calendar '%s'."
-msgstr "Ðемагчыма адкрыць калÑндар '%s'."
-
-#: calendar/gui/dialogs/event-page.c:1799
-#, c-format
-msgid "%d day before appointment"
-msgstr "%d дзён да ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/event-page.c:1807
-#, c-format
-msgid "%d hour before appointment"
-msgstr "%d гадзін да ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/event-page.c:1815
-#, c-format
-msgid "%d minute before appointement"
-msgstr "%d хвілін да ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/event-page.glade.h:2
-msgid "1 day before appointment"
-msgstr "1 дзень да ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/event-page.glade.h:3
-msgid "1 hour before appointment"
-msgstr "1 гадзіна да ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/event-page.glade.h:4
-msgid "15 minutes before appointment"
-msgstr "15 хвілін да ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/dialogs/event-page.glade.h:5
-msgid "<b>Basics</b>"
-msgstr "<b>ÐÑноўнае</b>"
-
-#: calendar/gui/dialogs/event-page.glade.h:6
-msgid "<b>Date and Time</b>"
-msgstr "<b>Дата·й·чаÑ</b>"
-
-#: calendar/gui/dialogs/event-page.glade.h:7
-msgid "A_ll day event"
-msgstr "ÐŸÐ°Ð´Ð·ÐµÑ _уÑÑго днÑ"
-
-#: calendar/gui/dialogs/event-page.glade.h:8
-msgid "C_ustomize..."
-msgstr "Ðаладзіць..."
-
-#: calendar/gui/dialogs/event-page.glade.h:9
-#: calendar/gui/dialogs/task-page.glade.h:4
-msgid "Ca_tegories..."
-msgstr "_КатÑгорыі..."
-
-#: calendar/gui/dialogs/event-page.glade.h:10
-msgid "Cale_ndar:"
-msgstr "Ка_лÑндар:"
-
-#: calendar/gui/dialogs/event-page.glade.h:11
-#: calendar/gui/dialogs/task-page.glade.h:5
-msgid "Classi_fication:"
-msgstr "КлÑÑыфікацыÑ"
-
-#: calendar/gui/dialogs/event-page.glade.h:12
-#: calendar/gui/dialogs/task-page.glade.h:6 calendar/gui/e-cal-list-view.c:259
-#: calendar/gui/e-cal-model.c:353 calendar/gui/e-calendar-table.c:377
-msgid "Confidential"
-msgstr "СакрÑтнае"
-
-#: calendar/gui/dialogs/event-page.glade.h:13
-msgid "Locat_ion:"
-msgstr "МейÑца:"
-
-#: calendar/gui/dialogs/event-page.glade.h:14
-#: calendar/gui/dialogs/task-page.glade.h:8 calendar/gui/e-cal-list-view.c:258
-#: calendar/gui/e-cal-model.c:351 calendar/gui/e-calendar-table.c:376
-msgid "Private"
-msgstr "Прыватнае"
-
-#: calendar/gui/dialogs/event-page.glade.h:15
-#: calendar/gui/dialogs/task-page.glade.h:9 calendar/gui/e-cal-list-view.c:257
-#: calendar/gui/e-cal-model.c:342 calendar/gui/e-cal-model.c:349
-#: calendar/gui/e-calendar-table.c:375
-msgid "Public"
-msgstr "Публічнае"
-
-#: calendar/gui/dialogs/event-page.glade.h:16
-#, fuzzy
-msgid "Show time as _busy"
-msgstr "Паказаць дату Ñк"
-
-#: calendar/gui/dialogs/event-page.glade.h:17
-#: calendar/gui/dialogs/task-page.glade.h:11
-msgid "Su_mmary:"
-msgstr "Ð_гулам:"
-
-#: calendar/gui/dialogs/event-page.glade.h:18
-msgid "This appointment has customized alarms"
-msgstr ""
-
-#: calendar/gui/dialogs/event-page.glade.h:19
-msgid "_Alarm"
-msgstr "Сыгнал"
-
-#: calendar/gui/dialogs/event-page.glade.h:20
-msgid "_Description:"
-msgstr "ÐпіÑаньне:"
-
-#: calendar/gui/dialogs/event-page.glade.h:21
-#: calendar/gui/e-meeting-time-sel.c:613
-msgid "_End time:"
-msgstr "_Ð§Ð°Ñ Ð·Ð°ÐºÐ°Ð½Ñ‡ÑньнÑ:"
-
-#: calendar/gui/dialogs/event-page.glade.h:22
-#: calendar/gui/e-meeting-time-sel.c:594
-msgid "_Start time:"
-msgstr "_Ð§Ð°Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÑƒ:"
-
-#. an empty string is the same as 'None'
-#. add a "None" option to the stores menu
-#. Put the "None" and "UTC" entries at the top of the combo's list.
-#. When "None" is selected we want the field to be cleared.
-#. Note that we don't show this here, since by default a 'None' date
-#. is not permitted.
-#: calendar/gui/dialogs/meeting-page.c:316
-#: calendar/gui/dialogs/meeting-page.glade.h:5
-#: calendar/gui/e-cal-model-tasks.c:647 calendar/gui/e-itip-control.c:928
-#: composer/e-msg-composer.c:2094 filter/filter-rule.c:877
-#: mail/em-account-prefs.c:427 mail/em-folder-view.c:933
-#: mail/mail-account-gui.c:1571 mail/mail-account-gui.c:1967
-#: mail/mail-config.glade.h:103
-#: widgets/e-timezone-dialog/e-timezone-dialog.c:192
-#: widgets/misc/e-cell-date-edit.c:257 widgets/misc/e-dateedit.c:443
-#: widgets/misc/e-dateedit.c:1480 widgets/misc/e-dateedit.c:1595
-msgid "None"
-msgstr "ÐÑма"
-
-#: calendar/gui/dialogs/meeting-page.c:449
-msgid "The organizer selected no longer has an account."
-msgstr ""
-
-#: calendar/gui/dialogs/meeting-page.c:455
-msgid "An organizer is required."
-msgstr "Ðеабходны арганізатар."
-
-#: calendar/gui/dialogs/meeting-page.c:470
-msgid "At least one attendee is required."
-msgstr "Патрабуе Ñ…Ð°Ñ†Ñ Ð± аднаго удзельніка."
-
-#: calendar/gui/dialogs/meeting-page.c:764
-msgid "_Delegate To..."
-msgstr "_ДÑлегаваць у..."
-
-#: calendar/gui/dialogs/meeting-page.c:768
-#: composer/e-msg-composer-attachment-bar.c:453
-msgid "_Remove"
-msgstr "_Выдаліць"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:1
-#: calendar/gui/e-meeting-list-view.c:218
-#: calendar/gui/e-meeting-time-sel.etspec.h:1
-msgid "Attendee"
-msgstr "Удзельнік"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:2
-#: calendar/gui/e-meeting-time-sel.etspec.h:2
-msgid "Click here to add an attendee"
-msgstr "Клікніце тутака каб дадаць удзельніка"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:3
-#: calendar/gui/e-meeting-time-sel.etspec.h:3
-msgid "Common Name"
-msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð°"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:4
-#: calendar/gui/e-meeting-time-sel.etspec.h:4
-msgid "Delegated From"
-msgstr "ДÑлегаваць з"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:5
-#: calendar/gui/e-meeting-time-sel.etspec.h:5
-msgid "Delegated To"
-msgstr "ДÑлегаваць у"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:6
-#: calendar/gui/e-meeting-time-sel.etspec.h:6
-msgid "Language"
-msgstr "Мова"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:7
-#: calendar/gui/e-meeting-time-sel.etspec.h:7
-msgid "Member"
-msgstr "Удзельнік"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:8
-#: calendar/gui/e-itip-control.c:1060 calendar/gui/e-meeting-list-view.c:241
-#: calendar/gui/e-meeting-time-sel.etspec.h:8
-msgid "RSVP"
-msgstr "RSVP"
-
-#: calendar/gui/dialogs/meeting-page.etspec.h:10
-#: calendar/gui/dialogs/task-editor.c:158
-#: calendar/gui/e-calendar-table.etspec.h:10
-#: calendar/gui/e-meeting-list-view.c:248
-#: calendar/gui/e-meeting-time-sel.etspec.h:10 mail/em-filter-i18n.h:62
-#: mail/message-list.etspec.h:12
-msgid "Status"
-msgstr "Стан"
-
-#: calendar/gui/dialogs/meeting-page.glade.h:2
-#, fuzzy
-msgid "<b>Att_endees</b>"
-msgstr "<b>Пачынаецца</b>"
-
-#: calendar/gui/dialogs/meeting-page.glade.h:3
-msgid "C_hange Organizer"
-msgstr "_ЗьмÑніць арганізатара"
-
-#: calendar/gui/dialogs/meeting-page.glade.h:4
-#: calendar/gui/e-meeting-time-sel.c:415
-msgid "Con_tacts..."
-msgstr "_Кантакты..."
-
-#: calendar/gui/dialogs/meeting-page.glade.h:6
-msgid "Or_ganizer:"
-msgstr "Ðрганізатар:"
-
-#: calendar/gui/dialogs/meeting-page.glade.h:7
-#: calendar/gui/e-itip-control.glade.h:9
-msgid "Organizer:"
-msgstr "Ðрганізатар:"
-
-#: calendar/gui/dialogs/new-calendar.glade.h:2
-msgid "<b>Calendar options</b>"
-msgstr "<b>Выбары календару</b>"
-
-#: calendar/gui/dialogs/new-calendar.glade.h:3
-msgid "Add New Calendar"
-msgstr "Дадаць новы калÑндар"
-
-#: calendar/gui/dialogs/new-calendar.glade.h:4
-msgid "Calendar Group"
-msgstr "Група календару"
-
-#: calendar/gui/dialogs/new-calendar.glade.h:5
-msgid "Calendar Location"
-msgstr "РазьмÑшчÑньне календару"
-
-#: calendar/gui/dialogs/new-calendar.glade.h:6
-msgid "Calendar Name"
-msgstr "Ðазва календару"
-
-#: calendar/gui/dialogs/new-task-list.glade.h:2
-msgid "<b>Task List Options</b>"
-msgstr "<b>Выбары ÑьпіÑу заданьнÑÑž</b>"
-
-#: calendar/gui/dialogs/new-task-list.glade.h:3
-msgid "Add New Task List"
-msgstr "Дадаць новы ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: calendar/gui/dialogs/new-task-list.glade.h:4
-msgid "Task List Group"
-msgstr "Група ÑьпіÑу заданьнÑÑž"
-
-#: calendar/gui/dialogs/new-task-list.glade.h:5
-msgid "Task List Name"
-msgstr "Ðазва ÑьпіÑу заданьнÑÑž"
-
-#: calendar/gui/dialogs/recur-comp.c:51
-msgid "You are modifying a recurring event, what would you like to modify?"
-msgstr ""
-
-#: calendar/gui/dialogs/recur-comp.c:55
-msgid "You are modifying a recurring task, what would you like to modify?"
-msgstr ""
-
-#: calendar/gui/dialogs/recur-comp.c:59
-msgid "You are modifying a recurring journal entry, what would you like to modify?"
-msgstr ""
-
-#: calendar/gui/dialogs/recur-comp.c:85
-msgid "This Instance Only"
-msgstr "Толькі гÑÑ‚Ñ‹ ÑкзÑмплÑÑ€"
-
-#: calendar/gui/dialogs/recur-comp.c:89
-msgid "This and Prior Instances"
-msgstr "ГÑÑ‚Ñ‹ й папÑÑ€Ñдні ÑкзÑмплÑры"
-
-#: calendar/gui/dialogs/recur-comp.c:95
-msgid "This and Future Instances"
-msgstr "ГÑÑ‚Ñ‹ й будучы ÑкзÑмплÑры"
-
-#: calendar/gui/dialogs/recur-comp.c:100
-msgid "All Instances"
-msgstr "УÑе ÑкзÑмплÑры"
-
-#: calendar/gui/dialogs/recurrence-page.c:511
-msgid "This appointment contains recurrences that Evolution cannot edit."
-msgstr ""
-"ГÑÑ‚Ð°Ñ ÑуÑÑ‚Ñ€Ñча мае правілы паўтору, ÑÐºÑ–Ñ Ð½Ñ Ð¼Ð¾Ð³ÑƒÑ†ÑŒ быць адрÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½Ñ‹Ñ Ñƒ "
-"\"Эвалюцыі\"."
-
-#: calendar/gui/dialogs/recurrence-page.c:806
-msgid "Recurrence date is invalid"
-msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° вÑртаньнÑ"
-
-#: calendar/gui/dialogs/recurrence-page.c:917
-msgid "on"
-msgstr "на"
-
-#: calendar/gui/dialogs/recurrence-page.c:978
-msgid "first"
-msgstr "першы"
-
-#: calendar/gui/dialogs/recurrence-page.c:979
-msgid "second"
-msgstr "другі"
-
-#: calendar/gui/dialogs/recurrence-page.c:980
-msgid "third"
-msgstr "Ñ‚Ñ€Ñці"
-
-#: calendar/gui/dialogs/recurrence-page.c:981
-msgid "fourth"
-msgstr "чацьверты"
-
-#: calendar/gui/dialogs/recurrence-page.c:982
-msgid "last"
-msgstr "апошні"
-
-#: calendar/gui/dialogs/recurrence-page.c:1005
-msgid "Other Date"
-msgstr "Ð†Ð½ÑˆÐ°Ñ Ð´Ð°Ñ‚Ð°"
-
-#: calendar/gui/dialogs/recurrence-page.c:1033
-msgid "day"
-msgstr "дзень"
-
-#: calendar/gui/dialogs/recurrence-page.c:1170
-msgid "on the"
-msgstr "на"
-
-#: calendar/gui/dialogs/recurrence-page.c:1356
-msgid "occurrences"
-msgstr "выпадкі"
-
-#: calendar/gui/dialogs/recurrence-page.c:2309
-msgid "Date/Time"
-msgstr "Дата/ЧаÑ"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:1
-msgid "<b>Exceptions</b>"
-msgstr "<b>ВынÑтак</b>"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:2 mail/mail-config.glade.h:4
-msgid "<b>Preview</b>"
-msgstr "<b>ПерадпраглÑд</b>"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:3
-msgid "<b>Recurrence</b>"
-msgstr "<b>Паўтор</b>"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:4
-msgid "Every"
-msgstr "Кожны"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:5
-#, fuzzy
-msgid "This appointment rec_urs"
-msgstr "_РÑдагаваць ÑуÑÑ‚Ñ€Ñчу"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:8
-msgid "for"
-msgstr "длÑ"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:9
-msgid "forever"
-msgstr "назаўÑёды"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:10
-msgid "month(s)"
-msgstr "меÑÑц(Ñ‹)"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:11
-msgid "until"
-msgstr "пакуль"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:12
-msgid "week(s)"
-msgstr "тыдзень(і)"
-
-#: calendar/gui/dialogs/recurrence-page.glade.h:13
-msgid "year(s)"
-msgstr "год(гады)"
-
-#: calendar/gui/dialogs/select-source-dialog.c:88
-msgid "Select destination"
-msgstr "Выберыце мейÑца прызначÑньнÑ"
-
-#: calendar/gui/dialogs/select-source-dialog.c:110
-msgid "_Destination"
-msgstr "_МейÑцапрызначÑньне"
-
-#: calendar/gui/dialogs/select-source-dialog.c:112
-msgid "Task List"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: calendar/gui/dialogs/task-details-page.c:427
-msgid "Completed date is wrong"
-msgstr "Дата заканчÑÐ½ÑŒÐ½Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:1
-msgid "<span weight=\"bold\">Miscellaneous\t</span>"
-msgstr "<span weight=\"bold\">Рознае\t</span>"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:2
-msgid "<span weight=\"bold\">Status</span>"
-msgstr "<span weight=\"bold\">Стан</span>"
-
-#. Pass TRUE as is_utc, so it gets converted to the current
-#. timezone.
-#: calendar/gui/dialogs/task-details-page.glade.h:4
-#: calendar/gui/e-cal-component-preview.c:230
-#: calendar/gui/e-cal-model-tasks.c:350 calendar/gui/e-cal-model-tasks.c:653
-#: calendar/gui/e-calendar-table.c:472 calendar/gui/e-itip-control.c:720
-#: calendar/gui/e-meeting-store.c:187 calendar/gui/e-meeting-store.c:210
-#: calendar/gui/print.c:2346
-msgid "Completed"
-msgstr "Выканана"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:5
-#: calendar/gui/e-cal-component-preview.c:249
-#: calendar/gui/e-calendar-table.c:397 mail/message-list.c:965
-msgid "High"
-msgstr "Ð’Ñ‹Ñокі"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:6
-#: calendar/gui/e-cal-component-preview.c:227
-#: calendar/gui/e-cal-model-tasks.c:348 calendar/gui/e-cal-model-tasks.c:651
-#: calendar/gui/e-cal-model-tasks.c:726 calendar/gui/e-calendar-table.c:471
-#: calendar/gui/print.c:2343
-msgid "In Progress"
-msgstr "Выконваецца"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:7
-#: calendar/gui/e-cal-component-preview.c:253
-#: calendar/gui/e-calendar-table.c:399 mail/message-list.c:963
-msgid "Low"
-msgstr "Ðізкі"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:8
-#: calendar/gui/e-cal-component-preview.c:251 calendar/gui/e-cal-model.c:934
-#: calendar/gui/e-calendar-table.c:398 mail/message-list.c:964
-msgid "Normal"
-msgstr "Ðармальны"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:9
-#: calendar/gui/e-cal-component-preview.c:237
-#: calendar/gui/e-cal-model-tasks.c:346 calendar/gui/e-cal-model-tasks.c:649
-#: calendar/gui/e-calendar-table.c:470 calendar/gui/print.c:2340
-msgid "Not Started"
-msgstr "Ðе раÑпачаты"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:10
-msgid "P_ercent complete:"
-msgstr "ÐдÑоткі выкананьнÑ:"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:11
-#: calendar/gui/e-calendar-table.c:400
-msgid "Undefined"
-msgstr "ÐÑвызначаны"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:12
-msgid "_Date completed:"
-msgstr "Дата заканчÑньнÑ:"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:13
-msgid "_Priority:"
-msgstr "_ПрыÑрытÑÑ‚:"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:14
-msgid "_Status:"
-msgstr "_Стан:"
-
-#: calendar/gui/dialogs/task-details-page.glade.h:15
-msgid "_Web Page:"
-msgstr "ÐÐ´Ñ€Ð°Ñ ÑžÑб-Ñтаронкі:"
-
-#: calendar/gui/dialogs/task-editor.c:149 calendar/gui/print.c:2297
-msgid "Task"
-msgstr "Заданьне"
-
-#: calendar/gui/dialogs/task-editor.c:165
-#: calendar/gui/dialogs/task-editor.c:225
-#: calendar/gui/dialogs/task-editor.c:361
-msgid "Assignment"
-msgstr "ПрызначÑньне"
-
-#: calendar/gui/dialogs/task-page.c:496
-msgid "Due date is wrong"
-msgstr "Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° памылковаÑ"
-
-#: calendar/gui/dialogs/task-page.c:831
-#, c-format
-msgid "Unable to open tasks in '%s'."
-msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž у '%s'."
-
-#: calendar/gui/dialogs/task-page.glade.h:2
-msgid "<span weight=\"bold\">Basics</span>"
-msgstr "<span weight=\"bold\">Базавае</span>"
-
-#: calendar/gui/dialogs/task-page.glade.h:3
-msgid "<span weight=\"bold\">Date and Time</span>"
-msgstr "<span weight=\"bold\">Дата Ñ– чаÑ</span>"
-
-#: calendar/gui/dialogs/task-page.glade.h:7
-msgid "D_escription:"
-msgstr "ÐпіÑаньне:"
-
-#: calendar/gui/dialogs/task-page.glade.h:10
-msgid "Sta_rt date:"
-msgstr "Дата пачатку:"
-
-#: calendar/gui/dialogs/task-page.glade.h:12
-msgid "_Due date:"
-msgstr "_Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°:"
-
-#: calendar/gui/dialogs/task-page.glade.h:13
-msgid "_Group:"
-msgstr "Група:"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:3
-msgid "<b>Free/Busy C_alendars</b>"
-msgstr "<b>Календары \"Вольны/занÑÑ‚Ñ‹\"</b>"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:4
-msgid "<b>Publishing Frequency</b>"
-msgstr ""
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:5
-msgid "<b>Publishing _Location</b>"
-msgstr "<b>РазьмÑшчÑньне публікацыÑÑž</b>"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:6
-msgid "Free/Busy Editor"
-msgstr "РÑдактар зьвеÑтак \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:7
-msgid "_Daily"
-msgstr "Што_дзённа"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:8
-msgid "_Manual"
-msgstr "_УлаÑна"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:9
-msgid "_Password:"
-msgstr "Пароль:"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:10
-msgid "_Remember password"
-msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:11
-msgid "_Username:"
-msgstr "_Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка:"
-
-#: calendar/gui/dialogs/url-editor-dialog.glade.h:12
-msgid "_Weekly"
-msgstr "Што_тыднёва"
-
-#: calendar/gui/e-alarm-list.c:395
-#, c-format
-msgid "%d day"
-msgstr "%d дні"
-
-#: calendar/gui/e-alarm-list.c:400
-#, c-format
-msgid "%d week"
-msgstr "%d тыдні"
-
-#: calendar/gui/e-alarm-list.c:405
-#, c-format
-msgid "%d hour"
-msgstr "%d гадзіны"
-
-#: calendar/gui/e-alarm-list.c:410
-#, c-format
-msgid "%d minute"
-msgstr "%d хвіліны"
-
-#: calendar/gui/e-alarm-list.c:415
-#, c-format
-msgid "%d second"
-msgstr "%d ÑÑкунды"
-
-#: calendar/gui/e-alarm-list.c:462
-msgid "Unknown action to be performed"
-msgstr "ÐевÑдомае дзеÑньне Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ"
-
-#: calendar/gui/e-alarm-list.c:474
-#, c-format
-msgid "%s %s before the start of the appointment"
-msgstr "%s %s да пачатку ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/e-alarm-list.c:477
-#, c-format
-msgid "%s %s after the start of the appointment"
-msgstr "%s %s паÑÑŒÐ»Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÑƒ ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/e-alarm-list.c:482
-#, c-format
-msgid "%s at the start of the appointment"
-msgstr "%s у пачатку ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/e-alarm-list.c:491
-#, c-format
-msgid "%s %s before the end of the appointment"
-msgstr "%s %s перад заканчÑньнем ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/e-alarm-list.c:494
-#, c-format
-msgid "%s %s after the end of the appointment"
-msgstr "%s %s паÑÑŒÐ»Ñ Ð·Ð°ÐºÐ°Ð½Ñ‡ÑÐ½ÑŒÐ½Ñ ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/e-alarm-list.c:499
-#, c-format
-msgid "%s at the end of the appointment"
-msgstr "%s напрыканцы ÑуÑÑ‚Ñ€Ñчы"
-
-#: calendar/gui/e-alarm-list.c:521
-#, c-format
-msgid "%s at %s"
-msgstr "%s на %s"
-
-#: calendar/gui/e-alarm-list.c:527
-#, c-format
-msgid "%s for an unknown trigger type"
-msgstr "%s Ð´Ð»Ñ Ð½ÐµÐ²Ñдомага тыпу трыгера"
-
-#: calendar/gui/e-cal-component-preview.c:71 mail/em-folder-view.c:2379
-#, c-format
-msgid "Click to open %s"
-msgstr "Шчоўкніце каб адкрыць %s"
-
-#: calendar/gui/e-cal-component-preview.c:156 filter/filter-rule.c:794
-msgid "Untitled"
-msgstr "БÑз назвы"
-
-#: calendar/gui/e-cal-component-preview.c:187
-#: calendar/gui/e-itip-control.c:932 calendar/gui/e-itip-control.glade.h:11
-msgid "Summary:"
-msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі:"
-
-#: calendar/gui/e-cal-component-preview.c:194
-#: calendar/gui/e-cal-component-preview.c:205
-msgid "Start Date:"
-msgstr "Дата пачатку:"
-
-#: calendar/gui/e-cal-component-preview.c:216
-msgid "Due Date:"
-msgstr "Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°:"
-
-#. write status
-#: calendar/gui/e-cal-component-preview.c:223
-#: calendar/gui/e-itip-control.c:956
-msgid "Status:"
-msgstr "Стан:"
-
-#: calendar/gui/e-cal-component-preview.c:247
-msgid "Priority:"
-msgstr "ПрыÑрытÑÑ‚:"
-
-#: calendar/gui/e-cal-component-preview.c:268
-#: calendar/gui/e-itip-control.c:988 calendar/gui/e-itip-control.glade.h:6
-#: composer/e-msg-composer-attachment.glade.h:3 mail/mail-config.glade.h:71
-msgid "Description:"
-msgstr "ÐпіÑаньне:"
-
-#: calendar/gui/e-cal-component-preview.c:300
-msgid "Web Page:"
-msgstr "ÐÐ´Ñ€Ð°Ñ ÑžÑб-Ñтаронкі:"
-
-#: calendar/gui/e-cal-list-view.etspec.h:2
-msgid "End Date"
-msgstr "Дата завÑршÑньнÑ"
-
-#: calendar/gui/e-cal-list-view.etspec.h:4
-msgid "Start Date"
-msgstr "Дата пачатку"
-
-#: calendar/gui/e-cal-list-view.etspec.h:5
-#: calendar/gui/e-calendar-table.etspec.h:11 mail/mail-dialogs.glade.h:22
-msgid "Summary"
-msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі"
-
-#: calendar/gui/e-cal-model-calendar.c:163 calendar/gui/e-calendar-table.c:449
-msgid "Free"
-msgstr "Вольны"
-
-#: calendar/gui/e-cal-model-calendar.c:166 calendar/gui/e-calendar-table.c:450
-#: calendar/gui/e-meeting-time-sel.c:399
-msgid "Busy"
-msgstr "ЗанÑÑ‚Ñ‹"
-
-#: calendar/gui/e-cal-model-tasks.c:302
-msgid "N"
-msgstr "N"
-
-#: calendar/gui/e-cal-model-tasks.c:302
-msgid "S"
-msgstr "S"
-
-#: calendar/gui/e-cal-model-tasks.c:304 smime/lib/e-cert.c:681
-msgid "E"
-msgstr "E"
-
-#: calendar/gui/e-cal-model-tasks.c:304
-msgid "W"
-msgstr "W"
-
-#: calendar/gui/e-cal-model-tasks.c:601
-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/e-cal-model-tasks.c:1012 calendar/gui/e-cal-model.c:940
-#: calendar/gui/e-meeting-list-view.c:146 calendar/gui/e-meeting-store.c:159
-#: calendar/gui/e-meeting-store.c:169 calendar/gui/e-meeting-store.c:765
-msgid "Yes"
-msgstr "Так"
-
-#: calendar/gui/e-cal-model-tasks.c:1012 calendar/gui/e-cal-model.c:940
-#: calendar/gui/e-meeting-list-view.c:147 calendar/gui/e-meeting-store.c:171
-msgid "No"
-msgstr "Ðе"
-
-#. This is the default filename used for temporary file creation
-#: calendar/gui/e-cal-model.c:355 calendar/gui/e-cal-model.c:358
-#: calendar/gui/e-itip-control.c:973 calendar/gui/e-itip-control.c:1187
-#: calendar/gui/e-meeting-list-view.c:122
-#: calendar/gui/e-meeting-list-view.c:136 calendar/gui/e-meeting-store.c:115
-#: calendar/gui/e-meeting-store.c:150 calendar/gui/e-meeting-store.c:215
-#: camel/camel-gpg-context.c:1763 camel/camel-gpg-context.c:1814
-#: camel/camel-tcp-stream-openssl.c:631
-#: camel/providers/imap4/camel-imap4-engine.c:1368
-#: camel/providers/imap4/camel-imap4-engine.c:1398
-#: camel/providers/imap4/camel-imap4-engine.c:1430
-#: camel/providers/imap4/camel-imap4-engine.c:1472
-#: camel/providers/imap4/camel-imap4-store.c:1224
-#: camel/providers/imap4/camel-imap4-utils.c:457
-#: camel/providers/smtp/camel-smtp-transport.c:172
-#: camel/providers/smtp/camel-smtp-transport.c:227 mail/em-utils.c:1123
-#: shell/e-component-registry.c:207 shell/e-component-registry.c:211
-#: widgets/misc/e-charset-picker.c:62
-msgid "Unknown"
-msgstr "ÐевÑдома"
-
-#: calendar/gui/e-cal-model.c:936
-msgid "Recurring"
-msgstr "Паўтор"
-
-#: calendar/gui/e-cal-model.c:938
-msgid "Assigned"
-msgstr "Прызначана"
-
-#: calendar/gui/e-calendar-table.c:419
-msgid "0%"
-msgstr "0%"
-
-#: calendar/gui/e-calendar-table.c:420
-msgid "10%"
-msgstr "10%"
-
-#: calendar/gui/e-calendar-table.c:421
-msgid "20%"
-msgstr "20%"
-
-#: calendar/gui/e-calendar-table.c:422
-msgid "30%"
-msgstr "30%"
-
-#: calendar/gui/e-calendar-table.c:423
-msgid "40%"
-msgstr "40%"
-
-#: calendar/gui/e-calendar-table.c:424
-msgid "50%"
-msgstr "50%"
-
-#: calendar/gui/e-calendar-table.c:425
-msgid "60%"
-msgstr "60%"
-
-#: calendar/gui/e-calendar-table.c:426
-msgid "70%"
-msgstr "70%"
-
-#: calendar/gui/e-calendar-table.c:427
-msgid "80%"
-msgstr "80%"
-
-#: calendar/gui/e-calendar-table.c:428
-msgid "90%"
-msgstr "90%"
-
-#: calendar/gui/e-calendar-table.c:429
-msgid "100%"
-msgstr "100%"
-
-#: calendar/gui/e-calendar-table.c:703 calendar/gui/e-calendar-view.c:658
-msgid "Deleting selected objects"
-msgstr "Выдаленьне вылучаных аб'ектаў"
-
-#: calendar/gui/e-calendar-table.c:867 calendar/gui/e-calendar-view.c:762
-msgid "Updating objects"
-msgstr "Ðбнаўленьне аб'ектаў"
-
-#: calendar/gui/e-calendar-table.c:1043 calendar/gui/e-calendar-table.c:1084
-#: calendar/gui/e-calendar-view.c:1364 calendar/gui/e-calendar-view.c:1444
-#: mail/em-folder-view.c:899 ui/evolution-addressbook.xml.h:37
-msgid "_Open"
-msgstr "_Ðдкрыць"
-
-#: calendar/gui/e-calendar-table.c:1044
-msgid "Open _Web Page"
-msgstr "Ðдкрыць уÑб-Ñтаронку"
-
-#: calendar/gui/e-calendar-table.c:1045 calendar/gui/e-calendar-table.c:1090
-#: calendar/gui/e-calendar-view.c:1365 calendar/gui/e-calendar-view.c:1450
-#: mail/em-folder-view.c:901 mail/em-popup.c:691 mail/em-popup.c:807
-#: ui/evolution-mail-message.xml.h:128
-msgid "_Save As..."
-msgstr "Захаваць _Ñк..."
-
-#: calendar/gui/e-calendar-table.c:1046 calendar/gui/e-calendar-table.c:1088
-#: calendar/gui/e-calendar-view.c:1343 calendar/gui/e-calendar-view.c:1366
-#: calendar/gui/e-calendar-view.c:1448 ui/evolution-addressbook.xml.h:40
-#: ui/evolution-calendar.xml.h:44 ui/evolution-comp-editor.xml.h:19
-#: ui/evolution-contact-editor.xml.h:17 ui/evolution-mail-message.xml.h:125
-#: ui/evolution-tasks.xml.h:25
-msgid "_Print..."
-msgstr "_Друкаваць..."
-
-#: calendar/gui/e-calendar-table.c:1050 calendar/gui/e-calendar-table.c:1079
-#: calendar/gui/e-calendar-view.c:1371 calendar/gui/e-calendar-view.c:1414
-#: ui/evolution-addressbook.xml.h:1 ui/evolution-calendar.xml.h:1
-#: ui/evolution-tasks.xml.h:1
-msgid "C_ut"
-msgstr "Вы_разаць"
-
-#: calendar/gui/e-calendar-table.c:1051 calendar/gui/e-calendar-table.c:1077
-#: calendar/gui/e-calendar-view.c:1372 calendar/gui/e-calendar-view.c:1412
-#: mail/em-folder-tree.c:965 mail/message-list.c:1655
-#: ui/evolution-addressbook.xml.h:31 ui/evolution-calendar.xml.h:39
-#: ui/evolution-composer-entries.xml.h:7 ui/evolution-mail-message.xml.h:109
-#: ui/evolution-tasks.xml.h:20
-msgid "_Copy"
-msgstr "_КапіÑваць"
-
-#: calendar/gui/e-calendar-table.c:1052 calendar/gui/e-calendar-table.c:1086
-#: calendar/gui/e-calendar-view.c:1347 calendar/gui/e-calendar-view.c:1373
-#: calendar/gui/e-calendar-view.c:1446 ui/evolution-addressbook.xml.h:38
-#: ui/evolution-calendar.xml.h:43 ui/evolution-composer-entries.xml.h:9
-#: ui/evolution-mail-message.xml.h:123 ui/evolution-tasks.xml.h:24
-msgid "_Paste"
-msgstr "_УÑтавіць"
-
-#: calendar/gui/e-calendar-table.c:1056
-msgid "_Assign Task"
-msgstr "_Прызначыць заданьне"
-
-#: calendar/gui/e-calendar-table.c:1057
-msgid "_Forward as iCalendar"
-msgstr "_ПерадаÑлаць Ñк iCalendar"
-
-#: calendar/gui/e-calendar-table.c:1058
-msgid "_Mark as Complete"
-msgstr "Пазначыць Ñк выкананае"
-
-#: calendar/gui/e-calendar-table.c:1059
-msgid "_Mark Selected Tasks as Complete"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ– Ñк выкананыÑ"
-
-#. FIXME: need to disable for undeletable folders
-#: calendar/gui/e-calendar-table.c:1063 calendar/gui/e-calendar-table.c:1081
-#: calendar/gui/e-calendar-view.c:1384 calendar/gui/e-calendar-view.c:1416
-#: mail/em-folder-tree.c:2615 mail/em-folder-view.c:924
-#: ui/evolution-addressbook.xml.h:33 ui/evolution-calendar.xml.h:40
-#: ui/evolution-comp-editor.xml.h:17 ui/evolution-contact-editor.xml.h:14
-#: ui/evolution-mail-message.xml.h:112 ui/evolution-tasks.xml.h:21
-msgid "_Delete"
-msgstr "Вы_даліць"
-
-#: calendar/gui/e-calendar-table.c:1064 calendar/gui/e-calendar-table.c:1082
-msgid "_Delete Selected Tasks"
-msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
-
-#: calendar/gui/e-calendar-table.c:1196 calendar/gui/e-calendar-view.c:1064
-#: composer/e-msg-composer.c:1175
-msgid "Save as..."
-msgstr "Захаваць Ñк..."
-
-#: calendar/gui/e-calendar-table.c:1374
-#: calendar/gui/e-calendar-table.etspec.h:4
-msgid "Click to add a task"
-msgstr "Клікніце каб дадаць заданьне"
-
-#: calendar/gui/e-calendar-table.etspec.h:2
-#, no-c-format
-msgid "% Complete"
-msgstr "% Завершана"
-
-#: calendar/gui/e-calendar-table.etspec.h:5 camel/camel-filter-driver.c:1178
-#: camel/camel-filter-driver.c:1270 mail/mail-send-recv.c:615
-msgid "Complete"
-msgstr "Выкананьне"
-
-#: calendar/gui/e-calendar-table.etspec.h:6
-msgid "Completion date"
-msgstr "Дата выкананьнÑ"
-
-#: calendar/gui/e-calendar-table.etspec.h:7
-msgid "Due date"
-msgstr "Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°"
-
-#: calendar/gui/e-calendar-table.etspec.h:8
-msgid "Priority"
-msgstr "ПрыÑрытÑÑ‚"
-
-#: calendar/gui/e-calendar-table.etspec.h:9
-msgid "Start date"
-msgstr "Дата пачатку"
-
-#: calendar/gui/e-calendar-table.etspec.h:12
-msgid "Task sort"
-msgstr "Сартаваньне заданьнÑÑž"
-
-#: calendar/gui/e-calendar-view.c:1180
-msgid "Moving items"
-msgstr "ПерамÑшчÑньне ÑлемÑнтаў"
-
-#: calendar/gui/e-calendar-view.c:1182
-msgid "Copying items"
-msgstr "КапіÑваньне ÑлемÑнтаў"
-
-#: calendar/gui/e-calendar-view.c:1336 calendar/gui/e-calendar-view.c:1424
-msgid "New _Appointment..."
-msgstr "ÐÐ¾Ð²Ð°Ñ _ÑуÑÑ‚Ñ€Ñча..."
-
-#: calendar/gui/e-calendar-view.c:1337 calendar/gui/e-calendar-view.c:1429
-msgid "New All Day _Event"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ð´Ð·ÐµÑ Ð½Ð° ўвеÑÑŒ дзень"
-
-#: calendar/gui/e-calendar-view.c:1338 calendar/gui/e-calendar-view.c:1434
-msgid "New Meeting"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð½Ð°Ñ€Ð°Ð´Ð°"
-
-#: calendar/gui/e-calendar-view.c:1339 calendar/gui/e-calendar-view.c:1439
-msgid "New Task"
-msgstr "Ðовае заданьне"
-
-#: calendar/gui/e-calendar-view.c:1353 ui/evolution-calendar.xml.h:26
-#, fuzzy
-msgid "Select _Today"
-msgstr "Вылучыць абмеркаваньне Ñ‚Ñмы"
-
-#: calendar/gui/e-calendar-view.c:1354
-msgid "_Select Date..."
-msgstr "ВыбÑрыце дату..."
-
-#: calendar/gui/e-calendar-view.c:1358 ui/evolution-calendar.xml.h:45
-msgid "_Publish Free/Busy Information"
-msgstr "_Ðпублікаваць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/e-calendar-view.c:1377
-msgid "Cop_y to Calendar..."
-msgstr "КапіÑваць у калÑндар..."
-
-#: calendar/gui/e-calendar-view.c:1378
-msgid "Mo_ve to Calendar..."
-msgstr "ПерамÑÑьціць у калÑндар..."
-
-#: calendar/gui/e-calendar-view.c:1379
-msgid "_Schedule Meeting..."
-msgstr "_ЗаплÑнаваць нараду..."
-
-#: calendar/gui/e-calendar-view.c:1380
-msgid "_Forward as iCalendar..."
-msgstr "_ПерадаÑлаць Ñк iCalendar..."
-
-#: calendar/gui/e-calendar-view.c:1385 calendar/gui/e-calendar-view.c:1417
-msgid "Delete this _Occurrence"
-msgstr "Выдаліць гÑтую зьÑву"
-
-#: calendar/gui/e-calendar-view.c:1386 calendar/gui/e-calendar-view.c:1418
-msgid "Delete _All Occurrences"
-msgstr "Выдаліць _уÑе зьÑвы"
-
-#: calendar/gui/e-calendar-view.c:1420
-msgid "Go to _Today"
-msgstr "ПерайÑьці да _ÑёньнÑ"
-
-#: calendar/gui/e-calendar-view.c:1422
-msgid "_Go to Date..."
-msgstr "Пера_йÑьці да даты..."
-
-#: calendar/gui/e-calendar-view.c:1452 ui/evolution.xml.h:35
-msgid "_Settings..."
-msgstr "_УÑталёўкі..."
-
-#. strftime format of a weekday, a date and a time, 24-hour.
-#. strptime format of a weekday, a date and a time,
-#. in 24-hour format.
-#. strftime format of a weekday, a date and a
-#. time, in 24-hour format.
-#: calendar/gui/e-cell-date-edit-text.c:117 e-util/e-time-utils.c:180
-#: e-util/e-time-utils.c:393
-msgid "%a %m/%d/%Y %H:%M:%S"
-msgstr "%a %d/%m/%Y %H:%M:%S"
-
-#. strftime format of a weekday, a date and a time, 12-hour.
-#. strptime format of a weekday, a date and a time,
-#. in 12-hour format.
-#. strftime format of a weekday, a date and a
-#. time, in 12-hour format.
-#: calendar/gui/e-cell-date-edit-text.c:120 e-util/e-time-utils.c:175
-#: e-util/e-time-utils.c:402
-msgid "%a %m/%d/%Y %I:%M:%S %p"
-msgstr "%a %d/%m/%Y %I:%M:%S %p"
-
-#: calendar/gui/e-cell-date-edit-text.c:125
-#, c-format
-msgid ""
-"The date must be entered in the format: \n"
-"\n"
-"%s"
-msgstr ""
-"Дата муÑіць быць пазначана у фармаце:\n"
-"\n"
-"%s"
-
-#: calendar/gui/e-day-view-time-item.c:532
-#, c-format
-msgid "%02i minute divisions"
-msgstr "дзÑленьні %02i хвіліны"
-
-#. strftime format %A = full weekday name, %d = day of month,
-#. %B = full month name. Don't use any other specifiers.
-#. strftime format %A = full weekday name, %d = day of
-#. month, %B = full month name. You can change the
-#. order but don't change the specifiers or add
-#. anything.
-#: calendar/gui/e-day-view-top-item.c:710 calendar/gui/e-day-view.c:1571
-#: calendar/gui/e-week-view-main-item.c:320 calendar/gui/print.c:1514
-msgid "%A %d %B"
-msgstr "%A %d %B"
-
-#. String to use in 12-hour time format for times in the morning.
-#: calendar/gui/e-day-view.c:817 calendar/gui/e-week-view.c:573
-#: calendar/gui/print.c:838
-msgid "am"
-msgstr "am"
-
-#. String to use in 12-hour time format for times in the afternoon.
-#: calendar/gui/e-day-view.c:820 calendar/gui/e-week-view.c:576
-#: calendar/gui/print.c:840
-msgid "pm"
-msgstr "pm"
-
-#: calendar/gui/e-itip-control.c:585
-msgid "Yes. (Complex Recurrence)"
-msgstr "Так (КомплекÑнае вÑртаньне)"
-
-#: calendar/gui/e-itip-control.c:596
-#, c-format
-msgid "Every day"
-msgstr "Штодзённа"
-
-#: calendar/gui/e-itip-control.c:601
-#, c-format
-msgid "Every week"
-msgstr "Штотыдзень"
-
-#: calendar/gui/e-itip-control.c:603
-#, c-format
-msgid "Every week on "
-msgstr "Штотыдзень на "
-
-#: calendar/gui/e-itip-control.c:611
-msgid " and "
-msgstr " Ñ– "
-
-#: calendar/gui/e-itip-control.c:618
-#, c-format
-msgid "The %s day of "
-msgstr "%s дзень "
-
-#: calendar/gui/e-itip-control.c:631
-#, c-format
-msgid "The %s %s of "
-msgstr "%s %s"
-
-#: calendar/gui/e-itip-control.c:638
-#, c-format
-msgid "every month"
-msgstr "штомеÑÑц"
-
-#: calendar/gui/e-itip-control.c:642
-#, c-format
-msgid "Every year"
-msgstr "Штогод"
-
-#: calendar/gui/e-itip-control.c:653
-#, c-format
-msgid "a total of %d time"
-msgstr " агулам з %d чаÑу"
-
-#: calendar/gui/e-itip-control.c:662
-msgid ", ending on "
-msgstr ", Ñканчаецца на "
-
-#: calendar/gui/e-itip-control.c:686
-msgid "Starts"
-msgstr "Пачатак"
-
-#: calendar/gui/e-itip-control.c:699
-msgid "Ends"
-msgstr "Канец"
-
-#: calendar/gui/e-itip-control.c:733
-msgid "Due"
-msgstr "Умоўленае"
-
-#: calendar/gui/e-itip-control.c:773 calendar/gui/e-itip-control.c:830
-msgid "iCalendar Information"
-msgstr "ЗьвеÑткі iCalendar"
-
-#. Title
-#: calendar/gui/e-itip-control.c:790
-msgid "iCalendar Error"
-msgstr "Памылка iCalendar"
-
-#: calendar/gui/e-itip-control.c:862 calendar/gui/e-itip-control.c:878
-#: calendar/gui/e-itip-control.c:889 calendar/gui/e-itip-control.c:906
-msgid "An unknown person"
-msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿ÑÑ€Ñона"
-
-#. Describe what the user can do
-#: calendar/gui/e-itip-control.c:913
-msgid ""
-"<br> Please review the following information, and then select an action from "
-"the menu below."
-msgstr ""
-"<br>Калі лаÑка, прагледзьце наÑтупную інфармацыю, Ñ– выберыце дзеÑньне з мÑню "
-"ніжÑй."
-
-#: calendar/gui/e-itip-control.c:942
-msgid "Location:"
-msgstr "МейÑца:"
-
-#: calendar/gui/e-itip-control.c:961 calendar/gui/e-meeting-list-view.c:158
-#: calendar/gui/e-meeting-store.c:179 calendar/gui/e-meeting-store.c:202
-#: calendar/gui/itip-utils.c:422
-msgid "Accepted"
-msgstr "ПрынÑтае"
-
-#: calendar/gui/e-itip-control.c:965 calendar/gui/itip-utils.c:425
-msgid "Tentatively Accepted"
-msgstr "ПрынÑтае Ð´Ð»Ñ Ñпробы"
-
-#: calendar/gui/e-itip-control.c:969 calendar/gui/e-meeting-list-view.c:159
-#: calendar/gui/e-meeting-store.c:181 calendar/gui/e-meeting-store.c:204
-#: calendar/gui/itip-utils.c:428 calendar/gui/itip-utils.c:454
-msgid "Declined"
-msgstr "Ðдхілена"
-
-#: calendar/gui/e-itip-control.c:1028 calendar/gui/e-itip-control.c:1056
-#: calendar/gui/e-itip-control.c:1082 calendar/gui/e-itip-control.c:1095
-#: calendar/gui/e-itip-control.c:1108 calendar/gui/e-itip-control.c:1133
-msgid "Choose an action:"
-msgstr "Выбраць дзеÑньне:"
-
-#: calendar/gui/e-itip-control.c:1029
-msgid "Update"
-msgstr "Ðбнавіць"
-
-#: calendar/gui/e-itip-control.c:1030 calendar/gui/e-itip-control.c:1061
-#: calendar/gui/e-itip-control.c:1084 calendar/gui/e-itip-control.c:1097
-#: calendar/gui/e-itip-control.c:1110 calendar/gui/e-itip-control.c:1135
-#: shell/e-shell.c:1114 widgets/misc/e-cell-date-edit.c:265
-msgid "OK"
-msgstr "Так"
-
-#: calendar/gui/e-itip-control.c:1057
-msgid "Accept"
-msgstr "ПрынÑць"
-
-#: calendar/gui/e-itip-control.c:1058
-msgid "Tentatively accept"
-msgstr "ПрынÑць Ð´Ð»Ñ Ñпробы"
-
-#: calendar/gui/e-itip-control.c:1059
-msgid "Decline"
-msgstr "Ðдхіліць"
-
-#: calendar/gui/e-itip-control.c:1083
-msgid "Send Free/Busy Information"
-msgstr "ДаÑлаць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/e-itip-control.c:1096
-msgid "Update respondent status"
-msgstr "Ðбнавіць Ñтан удзельнікаў"
-
-#: calendar/gui/e-itip-control.c:1109
-msgid "Send Latest Information"
-msgstr "ДаÑлаць апошнюю інфармацыю"
-
-#: calendar/gui/e-itip-control.c:1119
-msgid ""
-"The meeting has been cancelled, however it could not be found in your "
-"calendars"
-msgstr ""
-
-#: calendar/gui/e-itip-control.c:1121
-msgid "The task has been cancelled, however it could not be found in your task lists"
-msgstr ""
-
-#: calendar/gui/e-itip-control.c:1134 calendar/gui/itip-utils.c:442
-#: mail/mail-send-recv.c:410 mail/mail-send-recv.c:464
-#: ui/evolution-mail-global.xml.h:1
-msgid "Cancel"
-msgstr "ÐдмÑніць"
-
-#: calendar/gui/e-itip-control.c:1210
-#, c-format
-msgid "<b>%s</b> has published meeting information."
-msgstr "<b>%s</b> разьмÑÑьціў(ла) зьвеÑткі аб нарадзе."
-
-#: calendar/gui/e-itip-control.c:1211
-msgid "Meeting Information"
-msgstr "ЗьвеÑткі аб нарадзе"
-
-#: calendar/gui/e-itip-control.c:1216
-#, c-format
-msgid "<b>%s</b> requests the presence of %s at a meeting."
-msgstr "<b>%s</b> запытваецца прыÑутнаÑьці %s на нарадзе."
-
-#: calendar/gui/e-itip-control.c:1218
-#, c-format
-msgid "<b>%s</b> requests your presence at a meeting."
-msgstr "<b>%s</b> запытваецца вашае прыÑутнаÑьці на нарадзе."
-
-#: calendar/gui/e-itip-control.c:1219
-msgid "Meeting Proposal"
-msgstr "ПлÑн нарады"
-
-#: calendar/gui/e-itip-control.c:1253
-#, c-format
-msgid "<b>%s</b> wishes to add to an existing meeting."
-msgstr "<b>%s</b> жадае далучыць да раÑпачатае нарады."
-
-#: calendar/gui/e-itip-control.c:1254
-msgid "Meeting Update"
-msgstr "Ðбнаўленьне нарады"
-
-#: calendar/gui/e-itip-control.c:1258
-#, c-format
-msgid "<b>%s</b> wishes to receive the latest meeting information."
-msgstr "<b>%s</b> запытвае апошнюю інфармацыю па нарадзе."
-
-#: calendar/gui/e-itip-control.c:1259
-msgid "Meeting Update Request"
-msgstr "Запыт на абнаўленьне нарады"
-
-#: calendar/gui/e-itip-control.c:1266
-#, c-format
-msgid "<b>%s</b> has replied to a meeting request."
-msgstr "<b>%s</b> мае адказ на запыт нарады."
-
-#: calendar/gui/e-itip-control.c:1267
-msgid "Meeting Reply"
-msgstr "Ðдказ па нарадзе"
-
-#: calendar/gui/e-itip-control.c:1274
-#, c-format
-msgid "<b>%s</b> has cancelled a meeting."
-msgstr "<b>%s</b> мае адмÑніць нараду."
-
-#: calendar/gui/e-itip-control.c:1275
-msgid "Meeting Cancellation"
-msgstr "Ðдмена нарады"
-
-#: calendar/gui/e-itip-control.c:1282 calendar/gui/e-itip-control.c:1350
-#: calendar/gui/e-itip-control.c:1385
-#, c-format
-msgid "<b>%s</b> has sent an unintelligible message."
-msgstr "<b>%s</b> мае даÑлаць не інтÑлігентнае паведамленьне."
-
-#: calendar/gui/e-itip-control.c:1283
-msgid "Bad Meeting Message"
-msgstr "ДрÑннае паведамленьне нарады"
-
-#: calendar/gui/e-itip-control.c:1308
-#, c-format
-msgid "<b>%s</b> has published task information."
-msgstr "<b>%s</b> мае апублікаваць зьвеÑткі аб заданьні."
-
-#: calendar/gui/e-itip-control.c:1309
-msgid "Task Information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ð°Ð± заданьні"
-
-#: calendar/gui/e-itip-control.c:1314
-#, c-format
-msgid "<b>%s</b> requests %s to perform a task."
-msgstr "<b>%s</b> пытаецца %s аб выкананьні заданьнÑ."
-
-#: calendar/gui/e-itip-control.c:1316
-#, c-format
-msgid "<b>%s</b> requests you perform a task."
-msgstr "<b>%s</b> пытаецца Ð²Ð°Ñ Ð°Ð± выкананьні заданьнÑ."
-
-#: calendar/gui/e-itip-control.c:1317
-msgid "Task Proposal"
-msgstr "ПлÑн заданьнÑ"
-
-#: calendar/gui/e-itip-control.c:1321
-#, c-format
-msgid "<b>%s</b> wishes to add to an existing task."
-msgstr "<b>%s</b> жадае дадаць да раÑпачатага заданьнÑ."
-
-#: calendar/gui/e-itip-control.c:1322
-msgid "Task Update"
-msgstr "Ðбнаўленьне заданьнÑ"
-
-#: calendar/gui/e-itip-control.c:1326
-#, c-format
-msgid "<b>%s</b> wishes to receive the latest task information."
-msgstr "<b>%s</b> жадае атрымаць Ð°Ð¿Ð¾ÑˆÐ½Ñ–Ñ Ð·ÑŒÐ²ÐµÑткі па заданьні."
-
-#: calendar/gui/e-itip-control.c:1327
-msgid "Task Update Request"
-msgstr "Запыт на абнаўленьне заданьнÑ"
-
-#: calendar/gui/e-itip-control.c:1334
-#, c-format
-msgid "<b>%s</b> has replied to a task assignment."
-msgstr "<b>%s</b> мае адказ на заданьне."
-
-#: calendar/gui/e-itip-control.c:1335
-msgid "Task Reply"
-msgstr "Ðдказ на заданьне"
-
-#: calendar/gui/e-itip-control.c:1342
-#, c-format
-msgid "<b>%s</b> has cancelled a task."
-msgstr "<b>%s</b> мае адмÑніць заданьне."
-
-#: calendar/gui/e-itip-control.c:1343
-msgid "Task Cancellation"
-msgstr "Ðдмена заданьнÑ"
-
-#: calendar/gui/e-itip-control.c:1351
-msgid "Bad Task Message"
-msgstr "ДрÑннае паведамленьне па заданьні"
-
-#: calendar/gui/e-itip-control.c:1370
-#, c-format
-msgid "<b>%s</b> has published free/busy information."
-msgstr "<b>%s</b> мае апублікаваць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\"."
-
-#: calendar/gui/e-itip-control.c:1371
-msgid "Free/Busy Information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/e-itip-control.c:1375
-#, c-format
-msgid "<b>%s</b> requests your free/busy information."
-msgstr "<b>%s</b> патрабуе ад Ð²Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹ÑŽ \"Вольны/ЗанÑÑ‚Ñ‹\"."
-
-#: calendar/gui/e-itip-control.c:1376
-msgid "Free/Busy Request"
-msgstr "Запыт \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/e-itip-control.c:1380
-#, c-format
-msgid "<b>%s</b> has replied to a free/busy request."
-msgstr "<b>%s</b> мае адказаць на запыт аб інфармацыі \"ЗанÑÑ‚Ñ‹/Вольны\"."
-
-#: calendar/gui/e-itip-control.c:1381
-msgid "Free/Busy Reply"
-msgstr "Ðдказ на \"ЗанÑÑ‚Ñ‹/Вольны\""
-
-#: calendar/gui/e-itip-control.c:1386
-msgid "Bad Free/Busy Message"
-msgstr "ДрÑннае паведамленьне \"Вольны /ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/e-itip-control.c:1461
-msgid "The message does not appear to be properly formed"
-msgstr "Падобна што паведамленьне не было правільна Ñфармавана"
-
-#: calendar/gui/e-itip-control.c:1520
-msgid "The message contains only unsupported requests."
-msgstr "Паведамленьне утрымлівае толькі запыты, ÑÐºÑ–Ñ Ð½Ðµ падтрымліваюцца."
-
-#: calendar/gui/e-itip-control.c:1551
-msgid "The attachment does not contain a valid calendar message"
-msgstr "Укладаньне Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ Ñ€ÑчаіÑнага Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
-
-#: calendar/gui/e-itip-control.c:1583
-msgid "The attachment has no viewable calendar items"
-msgstr "Укладаньне мае ÑлемÑнты календара, ÑÐºÑ–Ñ Ð½ÐµÐ»ÑŒÐ³Ð° адлюÑтраваць"
-
-#: calendar/gui/e-itip-control.c:1817
-msgid "Update complete\n"
-msgstr "Ðбнаўленьне завершана\n"
-
-#: calendar/gui/e-itip-control.c:1845
-msgid "Object is invalid and cannot be updated\n"
-msgstr "Ðб'ект нерÑчаіÑны Ñ– Ð½Ñ Ð±ÑƒÐ´Ð·Ðµ абноўлены\n"
-
-#: calendar/gui/e-itip-control.c:1855
-msgid "This response is not from a current attendee. Add as an attendee?"
-msgstr "Ðдказ не ад бÑгучага удзельніка. Дадаць Ñк ад Ñго?"
-
-#: calendar/gui/e-itip-control.c:1867
-msgid "Attendee status could not be updated because of an invalid status!\n"
-msgstr "Стан удзельніка Ð½Ñ Ð¼Ð¾Ð¶Ð° быць абноўлены, таму што ён нерÑчаіÑны!\n"
-
-#: calendar/gui/e-itip-control.c:1884
-msgid "Attendee status updated\n"
-msgstr "Стан удзельніка абноўлены\n"
-
-#: calendar/gui/e-itip-control.c:1887
-msgid "Attendee status can not be updated because the item no longer exists"
-msgstr "Стан удзельніка Ð½Ñ Ð¼Ð¾Ð¶Ð° быць абноўлены таму, што ÑлемÑнт ужо не Ñ–Ñнуе"
-
-#: calendar/gui/e-itip-control.c:1914
-msgid "Removal Complete"
-msgstr "Выдаленьне Ñкончана"
-
-#: calendar/gui/e-itip-control.c:1937 calendar/gui/e-itip-control.c:1985
-msgid "Item sent!\n"
-msgstr "ЭлемÑнт даÑланы!\n"
-
-#: calendar/gui/e-itip-control.c:1939 calendar/gui/e-itip-control.c:1989
-msgid "The item could not be sent!\n"
-msgstr "ЭлемÑнт Ð½Ñ Ð¼Ð¾Ð¶Ð° быць даÑланы!\n"
-
-#: calendar/gui/e-itip-control.glade.h:2
-#, no-c-format
-msgid "%P %%"
-msgstr "%P %%"
-
-#: calendar/gui/e-itip-control.glade.h:3
-msgid "--to--"
-msgstr "--у--"
-
-#: calendar/gui/e-itip-control.glade.h:4
-msgid "Calendar Message"
-msgstr "Паведамленьне календару"
-
-#: calendar/gui/e-itip-control.glade.h:5
-msgid "Date:"
-msgstr "Дата:"
-
-#: calendar/gui/e-itip-control.glade.h:7
-msgid "Loading Calendar"
-msgstr "Загрузка календару"
-
-#: calendar/gui/e-itip-control.glade.h:8
-msgid "Loading calendar..."
-msgstr "Загрузка календару..."
-
-#: calendar/gui/e-itip-control.glade.h:10
-msgid "Server Message:"
-msgstr "Паведамленьне паÑлужніка:"
-
-#: calendar/gui/e-itip-control.glade.h:12
-msgid "date-end"
-msgstr "дата-завÑршÑньнÑ"
-
-#: calendar/gui/e-itip-control.glade.h:13
-msgid "date-start"
-msgstr "дата-пачатку"
-
-#: calendar/gui/e-meeting-list-view.c:59
-msgid "Chair Persons"
-msgstr "Кіраўнікі"
-
-#: calendar/gui/e-meeting-list-view.c:61
-msgid "Optional Participants"
-msgstr "Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
-
-#: calendar/gui/e-meeting-list-view.c:62
-msgid "Resources"
-msgstr "РÑÑурÑÑ‹"
-
-#: calendar/gui/e-meeting-list-view.c:118 calendar/gui/e-meeting-store.c:90
-#: calendar/gui/e-meeting-store.c:107 calendar/gui/e-meeting-store.c:759
-msgid "Individual"
-msgstr "ÐÑабіÑта"
-
-#: calendar/gui/e-meeting-list-view.c:119 calendar/gui/e-meeting-store.c:92
-#: calendar/gui/e-meeting-store.c:109
-msgid "Group"
-msgstr "Група"
-
-#: calendar/gui/e-meeting-list-view.c:120 calendar/gui/e-meeting-store.c:94
-#: calendar/gui/e-meeting-store.c:111
-msgid "Resource"
-msgstr "РÑÑурÑ"
-
-#: calendar/gui/e-meeting-list-view.c:121 calendar/gui/e-meeting-store.c:96
-#: calendar/gui/e-meeting-store.c:113
-msgid "Room"
-msgstr "Пакой"
-
-#: calendar/gui/e-meeting-list-view.c:132 calendar/gui/e-meeting-store.c:125
-#: calendar/gui/e-meeting-store.c:142
-msgid "Chair"
-msgstr "Кіраўнік"
-
-#: calendar/gui/e-meeting-list-view.c:133 calendar/gui/e-meeting-store.c:127
-#: calendar/gui/e-meeting-store.c:144 calendar/gui/e-meeting-store.c:762
-msgid "Required Participant"
-msgstr "ПатрÑбаваны ўдзельнік"
-
-#: calendar/gui/e-meeting-list-view.c:134 calendar/gui/e-meeting-store.c:129
-#: calendar/gui/e-meeting-store.c:146
-msgid "Optional Participant"
-msgstr "Дадатковы удзельнік"
-
-#: calendar/gui/e-meeting-list-view.c:135 calendar/gui/e-meeting-store.c:131
-#: calendar/gui/e-meeting-store.c:148
-msgid "Non-Participant"
-msgstr "Ðе ўдзельнічае"
-
-#: calendar/gui/e-meeting-list-view.c:157 calendar/gui/e-meeting-store.c:177
-#: calendar/gui/e-meeting-store.c:200 calendar/gui/e-meeting-store.c:772
-msgid "Needs Action"
-msgstr "Ðеабходна дзеÑньне"
-
-#: calendar/gui/e-meeting-list-view.c:160 calendar/gui/e-meeting-store.c:183
-#: calendar/gui/e-meeting-store.c:206 calendar/gui/e-meeting-time-sel.c:398
-msgid "Tentative"
-msgstr "Пробны"
-
-#: calendar/gui/e-meeting-list-view.c:161 calendar/gui/e-meeting-store.c:185
-#: calendar/gui/e-meeting-store.c:208
-msgid "Delegated"
-msgstr "ДÑлегаваны"
-
-#: calendar/gui/e-meeting-store.c:189 calendar/gui/e-meeting-store.c:212
-msgid "In Process"
-msgstr "У выкананьні"
-
-#. This is a strftime() format string %A = full weekday name,
-#. %B = full month name, %d = month day, %Y = full year.
-#: calendar/gui/e-meeting-time-sel-item.c:452
-#: calendar/gui/e-meeting-time-sel.c:2069
-msgid "%A, %B %d, %Y"
-msgstr "%A, %B %d, %Y"
-
-#. This is a strftime() format string %a = abbreviated weekday
-#. name, %m = month number, %d = month day, %Y = full year.
-#. This is a strftime() format string %a = abbreviated weekday name,
-#. %m = month number, %d = month day, %Y = full year.
-#. strptime format of a weekday and a date.
-#. strftime format of a weekday and a date.
-#: calendar/gui/e-meeting-time-sel-item.c:456
-#: calendar/gui/e-meeting-time-sel.c:2102 e-util/e-time-utils.c:203
-#: e-util/e-time-utils.c:296 e-util/e-time-utils.c:384
-msgid "%a %m/%d/%Y"
-msgstr "%a %d/%m/%Y"
-
-#. This is a strftime() format string %m = month number,
-#. %d = month day, %Y = full year.
-#. strptime format of a weekday and a date.
-#. This is the preferred date format for the locale.
-#. This is a strftime() format for a short date. %m = month,
-#. %d = day of month, %Y = year (all digits).
-#: calendar/gui/e-meeting-time-sel-item.c:460 e-util/e-time-utils.c:238
-#: e-util/e-time-utils.c:299 widgets/misc/e-dateedit.c:1604
-msgid "%m/%d/%Y"
-msgstr "%d/%m/%Y"
-
-#: calendar/gui/e-meeting-time-sel.c:400 designs/OOA/ooa.glade.h:11
-msgid "Out of Office"
-msgstr "Пакінуў офіÑ"
-
-#: calendar/gui/e-meeting-time-sel.c:401
-msgid "No Information"
-msgstr "ЗьвеÑткі адÑутнічаюць"
-
-#: calendar/gui/e-meeting-time-sel.c:432
-msgid "O_ptions"
-msgstr "Выбары"
-
-#: calendar/gui/e-meeting-time-sel.c:449
-msgid "Show _only working hours"
-msgstr "ÐдлюÑтроўваць толькі _Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐ½Ñ‹Ñ Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹"
-
-#: calendar/gui/e-meeting-time-sel.c:459
-msgid "Show _zoomed out"
-msgstr "Паказаць Ñк паменшанае"
-
-#: calendar/gui/e-meeting-time-sel.c:474
-msgid "_Update free/busy"
-msgstr "Ðб_навіць зьвеÑткі \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/e-meeting-time-sel.c:489
-msgid "_<<"
-msgstr "_<<"
-
-#: calendar/gui/e-meeting-time-sel.c:507
-msgid "_Autopick"
-msgstr "Ðўтавыбар"
-
-#: calendar/gui/e-meeting-time-sel.c:522
-msgid ">_>"
-msgstr ">_>"
-
-#: calendar/gui/e-meeting-time-sel.c:539
-msgid "_All people and resources"
-msgstr "УÑе людзі й Ñ€ÑÑурÑÑ‹"
-
-#: calendar/gui/e-meeting-time-sel.c:548
-msgid "All _people and one resource"
-msgstr "УÑе людзі й адзін Ñ€ÑÑурÑ"
-
-#: calendar/gui/e-meeting-time-sel.c:557
-msgid "_Required people"
-msgstr "ПатрÑÐ±Ð°Ð²Ð°Ð½Ñ‹Ñ Ð»ÑŽÐ´Ð·Ñ–"
-
-#: calendar/gui/e-meeting-time-sel.c:566
-msgid "Required people and _one resource"
-msgstr "ПатрÑÐ±Ð°Ð²Ð°Ð½Ñ‹Ñ Ð»ÑŽÐ´Ð·Ñ– й адзін Ñ€ÑÑурÑ"
-
-#: calendar/gui/e-pub-utils.c:300
-#, c-format
-msgid "Enter the password for %s"
-msgstr "Пазначце пароль Ð´Ð»Ñ %s"
-
-#: calendar/gui/e-tasks.c:744 calendar/gui/gnome-cal.c:2250
-#, c-format
-msgid ""
-"Error on %s:\n"
-" %s"
-msgstr ""
-"Памылка на %s\n"
-" %s"
-
-#: calendar/gui/e-tasks.c:792
-msgid "Loading tasks"
-msgstr "Загрузка заданьнÑÑž"
-
-#: calendar/gui/e-tasks.c:869
-#, c-format
-msgid "Opening tasks at %s"
-msgstr "Ðдкрыцьцё заданьнÑÑž %s"
-
-#: calendar/gui/e-tasks.c:1066
-msgid "Completing tasks..."
-msgstr "ЗавÑршÑньне заданьнÑÑž..."
-
-#: calendar/gui/e-tasks.c:1089
-msgid "Deleting selected objects..."
-msgstr "Выдаленьне вылучаных аб'ектаў..."
-
-#: calendar/gui/e-tasks.c:1116
-msgid "Expunging"
-msgstr "ВыкрÑÑьленьне"
-
-#: calendar/gui/gnome-cal.c:705
-#, fuzzy
-msgid "Updating query"
-msgstr "Ðбнаўленьне аб'ектаў"
-
-#: calendar/gui/gnome-cal.c:2036
-#, c-format
-msgid "Loading appointments at %s"
-msgstr "Загрузка ÑуÑÑ‚Ñ€Ñчаў на %s"
-
-#: calendar/gui/gnome-cal.c:2055
-#, c-format
-msgid "Loading tasks at %s"
-msgstr "Загрузка заданьнÑÑž на %s"
-
-#: calendar/gui/gnome-cal.c:2139
-#, c-format
-msgid "Opening %s"
-msgstr "Ðдкрыцьцё %s"
-
-#: calendar/gui/gnome-cal.c:3106
-msgid "Purging"
-msgstr "ÐчышчÑньне"
-
-#: calendar/gui/goto-dialog.glade.h:1
-msgid "April"
-msgstr "КраÑавік"
-
-#: calendar/gui/goto-dialog.glade.h:2
-msgid "August"
-msgstr "Жнівень"
-
-#: calendar/gui/goto-dialog.glade.h:3
-msgid "December"
-msgstr "Сьнежань"
-
-#: calendar/gui/goto-dialog.glade.h:4
-msgid "February"
-msgstr "Люты"
-
-#: calendar/gui/goto-dialog.glade.h:5
-msgid "January"
-msgstr "Студзень"
-
-#: calendar/gui/goto-dialog.glade.h:6
-msgid "July"
-msgstr "Ліпень"
-
-#: calendar/gui/goto-dialog.glade.h:7
-msgid "June"
-msgstr "ЧÑрвень"
-
-#: calendar/gui/goto-dialog.glade.h:8
-msgid "March"
-msgstr "Сакавік"
-
-#: calendar/gui/goto-dialog.glade.h:9
-msgid "May"
-msgstr "Травень"
-
-#: calendar/gui/goto-dialog.glade.h:10
-msgid "November"
-msgstr "ЛіÑтапад"
-
-#: calendar/gui/goto-dialog.glade.h:11
-msgid "October"
-msgstr "КаÑтрычнік"
-
-#: calendar/gui/goto-dialog.glade.h:12
-msgid "Select Date"
-msgstr "Выберыце дату"
-
-#: calendar/gui/goto-dialog.glade.h:13
-msgid "September"
-msgstr "ВераÑень"
-
-#: calendar/gui/goto-dialog.glade.h:14
-#, fuzzy
-msgid "_Select Today"
-msgstr "Выбраць Ñ‚Ñчку"
-
-#: calendar/gui/itip-utils.c:271 calendar/gui/itip-utils.c:319
-#: calendar/gui/itip-utils.c:351
-msgid "An organizer must be set."
-msgstr "Ðрганізатар муÑіць быць пазначаны."
-
-#: calendar/gui/itip-utils.c:306
-msgid "At least one attendee is necessary"
-msgstr "ПатрÑбны мінімум адзін удзельнік"
-
-#: calendar/gui/itip-utils.c:394 calendar/gui/itip-utils.c:503
-msgid "Event information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ð°Ð± падзеі"
-
-#: calendar/gui/itip-utils.c:396 calendar/gui/itip-utils.c:505
-msgid "Task information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ð°Ð± заданьні"
-
-#: calendar/gui/itip-utils.c:398 calendar/gui/itip-utils.c:507
-msgid "Journal information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‡Ð°ÑопіÑа"
-
-#: calendar/gui/itip-utils.c:400 calendar/gui/itip-utils.c:525
-msgid "Free/Busy information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ \"Вольны/ЗанÑÑ‚Ñ‹\""
-
-#: calendar/gui/itip-utils.c:402
-msgid "Calendar information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
-
-#: calendar/gui/itip-utils.c:438
-msgid "Updated"
-msgstr "Ðбноўлена"
-
-#: calendar/gui/itip-utils.c:446
-msgid "Refresh"
-msgstr "Ðбнавіць"
-
-#: calendar/gui/itip-utils.c:450
-msgid "Counter-proposal"
-msgstr "Контар-прапанова"
-
-#: calendar/gui/itip-utils.c:521
-#, c-format
-msgid "Free/Busy information (%s to %s)"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ \"Вольны/ЗанÑÑ‚Ñ‹\" (%s да %s)"
-
-#: calendar/gui/itip-utils.c:531
-msgid "iCalendar information"
-msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ iCalendar"
-
-#: calendar/gui/itip-utils.c:673
-msgid "You must be an attendee of the event."
-msgstr "Ð’Ñ‹ муÑіце быць удзельнікам падзеі"
-
-#: calendar/gui/migration.c:150
-msgid ""
-"The location and hierarchy of the Evolution task folders has changed since "
-"Evolution 1.x.\n"
-"\n"
-"Please be patient while Evolution migrates your folders..."
-msgstr ""
-
-#: calendar/gui/migration.c:154
-msgid ""
-"The location and hierarchy of the Evolution calendar folders has changed "
-"since Evolution 1.x.\n"
-"\n"
-"Please be patient while Evolution migrates your folders..."
-msgstr ""
-
-#: calendar/gui/migration.c:380
-msgid "Birthdays & Anniversaries"
-msgstr ""
-
-#. Create the Webcal source group
-#: calendar/gui/migration.c:466 calendar/gui/migration.c:548
-msgid "On The Web"
-msgstr "Ðа ÐŽÑб"
-
-#. FIXME: set proper domain/code
-#: calendar/gui/migration.c:712 calendar/gui/migration.c:864
-msgid "Unable to migrate old settings from evolution/config.xmldb"
-msgstr ""
-
-#. FIXME: domain/code
-#: calendar/gui/migration.c:741
-#, c-format
-msgid "Unable to migrate calendar `%s'"
-msgstr "Ðемагчыма міграваць на калÑндар `%s'"
-
-#. FIXME: domain/code
-#: calendar/gui/migration.c:893
-#, c-format
-msgid "Unable to migrate tasks `%s'"
-msgstr "Ðе магчыма міграваць заданьні `%s'"
-
-#: calendar/gui/print.c:489
-msgid "1st"
-msgstr "1-га"
-
-#: calendar/gui/print.c:489
-msgid "2nd"
-msgstr "2-га"
-
-#: calendar/gui/print.c:489
-msgid "3rd"
-msgstr "3-га"
-
-#: calendar/gui/print.c:489
-msgid "4th"
-msgstr "4-га"
-
-#: calendar/gui/print.c:489
-msgid "5th"
-msgstr "5-га"
-
-#: calendar/gui/print.c:490
-msgid "6th"
-msgstr "6-га"
-
-#: calendar/gui/print.c:490
-msgid "7th"
-msgstr "7-га"
-
-#: calendar/gui/print.c:490
-msgid "8th"
-msgstr "8-га"
-
-#: calendar/gui/print.c:490
-msgid "9th"
-msgstr "9-га"
-
-#: calendar/gui/print.c:490
-msgid "10th"
-msgstr "10-га"
-
-#: calendar/gui/print.c:491
-msgid "11th"
-msgstr "11-га"
-
-#: calendar/gui/print.c:491
-msgid "12th"
-msgstr "12-га"
-
-#: calendar/gui/print.c:491
-msgid "13th"
-msgstr "13-га"
-
-#: calendar/gui/print.c:491
-msgid "14th"
-msgstr "14-га"
-
-#: calendar/gui/print.c:491
-msgid "15th"
-msgstr "15-га"
-
-#: calendar/gui/print.c:492
-msgid "16th"
-msgstr "16-га"
-
-#: calendar/gui/print.c:492
-msgid "17th"
-msgstr "17-е"
-
-#: calendar/gui/print.c:492
-msgid "18th"
-msgstr "18-е"
-
-#: calendar/gui/print.c:492
-msgid "19th"
-msgstr "19-е"
-
-#: calendar/gui/print.c:492
-msgid "20th"
-msgstr "20-е"
-
-#: calendar/gui/print.c:493
-msgid "21st"
-msgstr "21-га"
-
-#: calendar/gui/print.c:493
-msgid "22nd"
-msgstr "22-га"
-
-#: calendar/gui/print.c:493
-msgid "23rd"
-msgstr "23-га"
-
-#: calendar/gui/print.c:493
-msgid "24th"
-msgstr "24-га"
-
-#: calendar/gui/print.c:493
-msgid "25th"
-msgstr "25-га"
-
-#: calendar/gui/print.c:494
-msgid "26th"
-msgstr "26-га"
-
-#: calendar/gui/print.c:494
-msgid "27th"
-msgstr "27-га"
-
-#: calendar/gui/print.c:494
-msgid "28th"
-msgstr "28-га"
-
-#: calendar/gui/print.c:494
-msgid "29th"
-msgstr "29-га"
-
-#: calendar/gui/print.c:494
-msgid "30th"
-msgstr "30-га"
-
-#: calendar/gui/print.c:495
-msgid "31st"
-msgstr "31-га"
-
-#: calendar/gui/print.c:570
-msgid "Su"
-msgstr "Ðд"
-
-#: calendar/gui/print.c:570
-msgid "Mo"
-msgstr "Пн"
-
-#: calendar/gui/print.c:570
-msgid "Tu"
-msgstr "ÐÑ‚"
-
-#: calendar/gui/print.c:570
-msgid "We"
-msgstr "Ср"
-
-#: calendar/gui/print.c:571
-msgid "Th"
-msgstr "Чт"
-
-#: calendar/gui/print.c:571
-msgid "Fr"
-msgstr "Пт"
-
-#: calendar/gui/print.c:571
-msgid "Sa"
-msgstr "Сб"
-
-#. Day
-#: calendar/gui/print.c:1914
-msgid "Selected day (%a %b %d %Y)"
-msgstr "Вылучаны дзень (%a %b %d %Y)"
-
-#: calendar/gui/print.c:1939 calendar/gui/print.c:1943
-msgid "%a %b %d"
-msgstr "%a %b %d"
-
-#: calendar/gui/print.c:1940
-msgid "%a %d %Y"
-msgstr "%a %d %Y"
-
-#: calendar/gui/print.c:1944 calendar/gui/print.c:1946
-#: calendar/gui/print.c:1947
-msgid "%a %b %d %Y"
-msgstr "%a %b %d %Y"
-
-#: calendar/gui/print.c:1951
-#, c-format
-msgid "Selected week (%s - %s)"
-msgstr "Вылучаны тыдзень (%s - %s)"
-
-#. Month
-#: calendar/gui/print.c:1959
-msgid "Selected month (%b %Y)"
-msgstr "Вылучаны меÑÑц (%b %Y)"
-
-#. Year
-#: calendar/gui/print.c:1966
-msgid "Selected year (%Y)"
-msgstr "Вылучаны год (%Y)"
-
-#: calendar/gui/print.c:2356
-#, c-format
-msgid "Status: %s"
-msgstr "Стан: %s"
-
-#: calendar/gui/print.c:2373
-#, c-format
-msgid "Priority: %s"
-msgstr "ПрыÑрытÑÑ‚: %s"
-
-#: calendar/gui/print.c:2385
-#, c-format
-msgid "Percent Complete: %i"
-msgstr "ÐдÑоткі выкананьнÑ: %i"
-
-#: calendar/gui/print.c:2397
-#, c-format
-msgid "URL: %s"
-msgstr "URL: %s"
-
-#: calendar/gui/print.c:2411
-#, c-format
-msgid "Categories: %s"
-msgstr "КатÑгорыі: %s"
-
-#: calendar/gui/print.c:2422
-msgid "Contacts: "
-msgstr "Кантакты: "
-
-#: calendar/gui/print.c:2559 calendar/gui/print.c:2645
-#: calendar/gui/print.c:2737 mail/em-format-html-print.c:178
-msgid "Print Preview"
-msgstr "Перад-праглÑд друку"
-
-#: calendar/gui/print.c:2593
-msgid "Print Item"
-msgstr "Друк ÑлемÑнта"
-
-#: calendar/gui/print.c:2759
-msgid "Print Setup"
-msgstr "Ðаладка друку"
-
-#: calendar/gui/tasks-component.c:314
-#, c-format
-msgid "Task List '%s' will be removed. Are you sure you want to continue?"
-msgstr ""
-
-#: calendar/gui/tasks-component.c:372
-msgid "New Task List"
-msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: calendar/gui/tasks-component.c:415
-#, c-format
-msgid "%d task"
-msgstr "%d заданьні"
-
-#: calendar/gui/tasks-component.c:417 mail/mail-component.c:498
-#, c-format
-msgid ", %d selected"
-msgstr ", %d выбраныÑ"
-
-#: calendar/gui/tasks-component.c:464
-msgid "Failed upgrading tasks."
-msgstr "Збой Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž."
-
-#: calendar/gui/tasks-component.c:756
-#, c-format
-msgid "Unable to open the task list '%s' for creating events and meetings"
-msgstr ""
-
-#: calendar/gui/tasks-component.c:768
-msgid "There is no calendar available for creating tasks"
-msgstr ""
-
-#: calendar/gui/tasks-component.c:1042
-msgid "New task"
-msgstr "Ðовае заданьне"
-
-#: calendar/gui/tasks-component.c:1043
-msgid "_Task"
-msgstr "_Заданьне"
-
-#: calendar/gui/tasks-component.c:1044
-msgid "Create a new task"
-msgstr "Стварыць новае заданьне"
-
-#: calendar/gui/tasks-component.c:1050
-#, fuzzy
-msgid "New assigned task"
-msgstr "Прызначыць заданьне"
-
-#: calendar/gui/tasks-component.c:1051
-#, fuzzy
-msgid "Assigne_d Task"
-msgstr "Прызначыць заданьне"
-
-#: calendar/gui/tasks-component.c:1052
-#, fuzzy
-msgid "Create a new assigned task"
-msgstr "Стварыць новае заданьне"
-
-#: calendar/gui/tasks-component.c:1058
-msgid "New task list"
-msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: calendar/gui/tasks-component.c:1059
-msgid "Task l_ist"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: calendar/gui/tasks-component.c:1060
-msgid "Create a new task list"
-msgstr "Стварыць новы ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: calendar/gui/tasks-control.c:367
-msgid ""
-"This operation will permanently erase all tasks marked as completed. If you "
-"continue, you will not be able to recover these tasks.\n"
-"\n"
-"Really erase these tasks?"
-msgstr ""
-"ГÑÑ‚Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ назаўÑёды уÑе заданьні, ÑÐºÑ–Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹ Ñк выкананыÑ. "
-"Калі працÑгніце, тады Ð½Ñ Ð·Ð´Ð¾Ð»ÐµÐµÑ†Ðµ вÑрнуць гÑтую апÑрацыю.\n"
-"\n"
-"Выдаліць гÑÑ‚Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–?"
-
-#: calendar/gui/tasks-control.c:370
-msgid "Do not ask me again."
-msgstr "Ðе пытацца наÑтупнага разу."
-
-#: calendar/gui/tasks-control.c:428
-msgid "Print Tasks"
-msgstr "Друк заданьнÑÑž"
-
-#: calendar/gui/weekday-picker.c:326
-msgid "SMTWTFS"
-msgstr "ПÐСЧПСÐ"
-
-#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:1
-msgid "Evolution Calendar intelligent importer"
-msgstr "ІнтÑлектуальны імпарт календару \"Эвалюцыі\""
-
-#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:2
-msgid "Evolution iCalendar importer"
-msgstr "Імпарт календару \"Эвалюцыі\" (iCalendar)"
-
-#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:3
-msgid "Evolution vCalendar importer"
-msgstr "Імпарт календару \"Эвалюцыі\" (vCalendar)"
-
-#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:4
-msgid "iCalendar files (.ics)"
-msgstr "Файлы календару \"iCalendar\" (.ics)"
-
-#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:5
-msgid "vCalendar files (.vcf)"
-msgstr "Файлы календару \"vCalendar\" (.vcf)"
-
-#: calendar/importers/icalendar-importer.c:82
-msgid "Appointments and Meetings"
-msgstr "СуÑÑ‚Ñ€Ñчы й нарады"
-
-#: calendar/importers/icalendar-importer.c:494
-msgid "Reminder!!"
-msgstr "Ðагадваньне!!!"
-
-#: calendar/importers/icalendar-importer.c:702
-msgid "Calendar Events"
-msgstr "Падзеі календару"
-
-#: calendar/importers/icalendar-importer.c:727
-msgid ""
-"Evolution has found Gnome Calendar files.\n"
-"Would you like to import them into Evolution?"
-msgstr ""
-"\"ЭвалюцыÑ\" адшукала файлы календару Gnome.\n"
-"Ці жадаеце імпартаваць іх у \"Эвалюцыю\"?"
-
-#: calendar/importers/icalendar-importer.c:734
-msgid "Gnome Calendar"
-msgstr "КалÑндар GNOME"
-
-#.
-#. * These are the timezone names from the Olson timezone data.
-#. * We only place them here so gettext picks them up for translation.
-#. * Don't include in any C files.
-#.
-#: calendar/zones.h:7
-msgid "Africa/Abidjan"
-msgstr "Ðфрыка/Ðбіджан"
-
-#: calendar/zones.h:8
-msgid "Africa/Accra"
-msgstr "Ðфрыка/Ðкра"
-
-#: calendar/zones.h:9
-msgid "Africa/Addis_Ababa"
-msgstr "Ðфрыка/ÐдыÑ-Ðбеба"
-
-#: calendar/zones.h:10
-msgid "Africa/Algiers"
-msgstr "Ðфрыка/Ðльжыр"
-
-#: calendar/zones.h:11
-msgid "Africa/Asmera"
-msgstr "Ðфрыка/ÐÑьмера"
-
-#: calendar/zones.h:12
-msgid "Africa/Bamako"
-msgstr "Ðфрыка/Бамако"
-
-#: calendar/zones.h:13
-msgid "Africa/Bangui"
-msgstr "Ðфрыка/Бангуі"
-
-#: calendar/zones.h:14
-msgid "Africa/Banjul"
-msgstr "Ðфрыка/Банджул"
-
-#: calendar/zones.h:15
-msgid "Africa/Bissau"
-msgstr "Ðфрыка/БіÑау"
-
-#: calendar/zones.h:16
-msgid "Africa/Blantyre"
-msgstr "Ðфрыка/БлантÑÑ€"
-
-#: calendar/zones.h:17
-msgid "Africa/Brazzaville"
-msgstr "Ðфрыка/Браззавіль"
-
-#: calendar/zones.h:18
-msgid "Africa/Bujumbura"
-msgstr "Ðфрыка/Бужумбура"
-
-#: calendar/zones.h:19
-msgid "Africa/Cairo"
-msgstr "Ðфрыка/Каір"
-
-#: calendar/zones.h:20
-msgid "Africa/Casablanca"
-msgstr "Ðфрыка/КаÑаблÑнка"
-
-#: calendar/zones.h:21
-msgid "Africa/Ceuta"
-msgstr "Ðфрыка/Кеўта"
-
-#: calendar/zones.h:22
-msgid "Africa/Conakry"
-msgstr "Ðфрыка/Конакры"
-
-#: calendar/zones.h:23
-msgid "Africa/Dakar"
-msgstr "Ðфрыка/Дакар"
-
-#: calendar/zones.h:24
-msgid "Africa/Dar_es_Salaam"
-msgstr "Ðфрыка/Дар ÑÑ Ð¡Ð°Ð»Ñм"
-
-#: calendar/zones.h:25
-msgid "Africa/Djibouti"
-msgstr "Ðфрыка/Джыбуці"
-
-#: calendar/zones.h:26
-msgid "Africa/Douala"
-msgstr "Ðфрыка/Доўла"
-
-#: calendar/zones.h:27
-msgid "Africa/El_Aaiun"
-msgstr "Ðфрыка/Эль Ðйюн"
-
-#: calendar/zones.h:28
-msgid "Africa/Freetown"
-msgstr "Ðфрыка/Фрытаўн"
-
-#: calendar/zones.h:29
-msgid "Africa/Gaborone"
-msgstr "Ðфрыка/Габарон"
-
-#: calendar/zones.h:30
-msgid "Africa/Harare"
-msgstr "Ðфрыка/Гарар"
-
-#: calendar/zones.h:31
-msgid "Africa/Johannesburg"
-msgstr "Ðфрыка/ЯганÑÑбург"
-
-#: calendar/zones.h:32
-msgid "Africa/Kampala"
-msgstr "Ðфрыка/Кампала"
-
-#: calendar/zones.h:33
-msgid "Africa/Khartoum"
-msgstr "Ðфрыка/Хартум"
-
-#: calendar/zones.h:34
-msgid "Africa/Kigali"
-msgstr "Ðфрыка/Кігалі"
-
-#: calendar/zones.h:35
-msgid "Africa/Kinshasa"
-msgstr "Ðфрыка/КіншаÑа"
-
-#: calendar/zones.h:36
-msgid "Africa/Lagos"
-msgstr "Ðфрыка/ЛагаÑ"
-
-#: calendar/zones.h:37
-msgid "Africa/Libreville"
-msgstr "Ðфрыка/ЛібрÑвіль"
-
-#: calendar/zones.h:38
-msgid "Africa/Lome"
-msgstr "Ðфрыка/Лома"
-
-#: calendar/zones.h:39
-msgid "Africa/Luanda"
-msgstr "Ðфрыка/Люанда"
-
-#: calendar/zones.h:40
-msgid "Africa/Lubumbashi"
-msgstr "Ðфрыка/Любумбашы"
-
-#: calendar/zones.h:41
-msgid "Africa/Lusaka"
-msgstr "Ðфрыка/ЛуÑака"
-
-#: calendar/zones.h:42
-msgid "Africa/Malabo"
-msgstr "Ðфрыка/Малаба"
-
-#: calendar/zones.h:43
-msgid "Africa/Maputo"
-msgstr "Ðфрыка/Мапата"
-
-#: calendar/zones.h:44
-msgid "Africa/Maseru"
-msgstr "Ðфрыка/МазÑру"
-
-#: calendar/zones.h:45
-msgid "Africa/Mbabane"
-msgstr "Ðфрыка/Мбабан"
-
-#: calendar/zones.h:46
-msgid "Africa/Mogadishu"
-msgstr "Ðфрыка/Магадыша"
-
-#: calendar/zones.h:47
-msgid "Africa/Monrovia"
-msgstr "Ðфрыка/МанровіÑ"
-
-#: calendar/zones.h:48
-msgid "Africa/Nairobi"
-msgstr "Ðфрыка/Ðайробі"
-
-#: calendar/zones.h:49
-msgid "Africa/Ndjamena"
-msgstr "Ðфрыка/ÐдзÑмÑна"
-
-#: calendar/zones.h:50
-msgid "Africa/Niamey"
-msgstr "Ðфрыка/ÐÑмей"
-
-#: calendar/zones.h:51
-msgid "Africa/Nouakchott"
-msgstr "Ðфрыка/Ðуакшот"
-
-#: calendar/zones.h:52
-msgid "Africa/Ouagadougou"
-msgstr "Ðфрыка/Оўагадоўгоў"
-
-#: calendar/zones.h:53
-msgid "Africa/Porto-Novo"
-msgstr "Ðфрыка/Порта-Ðова"
-
-#: calendar/zones.h:54
-msgid "Africa/Sao_Tome"
-msgstr "Ðфрыка/СÑо-Томе"
-
-#: calendar/zones.h:55
-msgid "Africa/Timbuktu"
-msgstr "Ðфрыка/Цімбукту"
-
-#: calendar/zones.h:56
-msgid "Africa/Tripoli"
-msgstr "Ðфрыка/Трыпалі"
-
-#: calendar/zones.h:57
-msgid "Africa/Tunis"
-msgstr "Ðфрыка/ТуніÑ"
-
-#: calendar/zones.h:58
-msgid "Africa/Windhoek"
-msgstr "Ðфрыка/Віндгук"
-
-#: calendar/zones.h:59
-msgid "America/Adak"
-msgstr "ÐмÑрыка/Ðдак"
-
-#: calendar/zones.h:60
-msgid "America/Anchorage"
-msgstr "ÐмÑрыка/Ðнчураг"
-
-#: calendar/zones.h:61
-msgid "America/Anguilla"
-msgstr "ÐмÑрыка/ÐнджуліÑ"
-
-#: calendar/zones.h:62
-msgid "America/Antigua"
-msgstr "ÐмÑрыка/Ðнцігуа"
-
-#: calendar/zones.h:63
-msgid "America/Araguaina"
-msgstr "ÐмÑрыка/ÐрагуÑна"
-
-#: calendar/zones.h:64
-msgid "America/Aruba"
-msgstr "ÐмÑрыка/Ðруба"
-
-#: calendar/zones.h:65
-msgid "America/Asuncion"
-msgstr "ÐмÑрыка/ÐÑунÑьён"
-
-#: calendar/zones.h:66
-msgid "America/Barbados"
-msgstr "ÐмÑрыка/БарбадаÑ"
-
-#: calendar/zones.h:67
-msgid "America/Belem"
-msgstr "ÐмÑрыка/БÑлем"
-
-#: calendar/zones.h:68
-msgid "America/Belize"
-msgstr "ÐмÑрыка/Беліз"
-
-#: calendar/zones.h:69
-msgid "America/Boa_Vista"
-msgstr "ÐмÑрыка/Боа-Ð’Ñ–Ñта"
-
-#: calendar/zones.h:70
-msgid "America/Bogota"
-msgstr "ÐмÑрыка/Багата"
-
-#: calendar/zones.h:71
-msgid "America/Boise"
-msgstr "ÐмÑрыка/Бойзе"
-
-#: calendar/zones.h:72
-msgid "America/Buenos_Aires"
-msgstr "ÐмÑрыка/БуанаÑ-ÐйрÑÑ"
-
-#: calendar/zones.h:73
-msgid "America/Cambridge_Bay"
-msgstr "ÐмÑрыка/КÑмбрыдж-Бай"
-
-#: calendar/zones.h:74
-msgid "America/Cancun"
-msgstr "ÐмÑрыка/Канкун"
-
-#: calendar/zones.h:75
-msgid "America/Caracas"
-msgstr "ÐмÑрыка/КаракаÑ"
-
-#: calendar/zones.h:76
-msgid "America/Catamarca"
-msgstr "ÐмÑрыка/Катамарка"
-
-#: calendar/zones.h:77
-msgid "America/Cayenne"
-msgstr "ÐмÑрыка/Кайін"
-
-#: calendar/zones.h:78
-msgid "America/Cayman"
-msgstr "ÐмÑрыка/Кайман"
-
-#: calendar/zones.h:79
-msgid "America/Chicago"
-msgstr "ÐмÑрыка/Чыкага"
-
-#: calendar/zones.h:80
-msgid "America/Chihuahua"
-msgstr "ÐмÑрыка/Чыхуахуа"
-
-#: calendar/zones.h:81
-msgid "America/Cordoba"
-msgstr "ÐмÑрыка/Кардоба"
-
-#: calendar/zones.h:82
-msgid "America/Costa_Rica"
-msgstr "ÐмÑрыка/КоÑта-Рыка"
-
-#: calendar/zones.h:83
-msgid "America/Cuiaba"
-msgstr "ÐмÑрыка/КуÑба"
-
-#: calendar/zones.h:84
-msgid "America/Curacao"
-msgstr "ÐмÑрыка/Курацао"
-
-#: calendar/zones.h:85
-msgid "America/Danmarkshavn"
-msgstr "ÐмÑрыка/Данмаркшаўн"
-
-#: calendar/zones.h:86
-msgid "America/Dawson"
-msgstr "ÐмÑрыка/ДаўнÑан"
-
-#: calendar/zones.h:87
-msgid "America/Dawson_Creek"
-msgstr "ÐмÑрыка/ДаўнÑан-Крык"
-
-#: calendar/zones.h:88
-msgid "America/Denver"
-msgstr "ÐмÑрыка/ДÑнвÑÑ€"
-
-#: calendar/zones.h:89
-msgid "America/Detroit"
-msgstr "ÐмÑрыка/ДÑтройт"
-
-#: calendar/zones.h:90
-msgid "America/Dominica"
-msgstr "ÐмÑрыка/Дамініка"
-
-#: calendar/zones.h:91
-msgid "America/Edmonton"
-msgstr "ÐмÑрыка/Эдмантан"
-
-#: calendar/zones.h:92
-msgid "America/Eirunepe"
-msgstr "ÐмÑрыка/Эйрунеп"
-
-#: calendar/zones.h:93
-msgid "America/El_Salvador"
-msgstr "ÐмÑрыка/Эль-Сальвадор"
-
-#: calendar/zones.h:94
-msgid "America/Fortaleza"
-msgstr "ÐмÑрыка/Фарталіза"
-
-#: calendar/zones.h:95
-msgid "America/Glace_Bay"
-msgstr "ÐмÑрыка/ГлÑцÑ-Бай"
-
-#: calendar/zones.h:96
-msgid "America/Godthab"
-msgstr "ÐмÑрыка/ГудÑаб"
-
-#: calendar/zones.h:97
-msgid "America/Goose_Bay"
-msgstr "ÐмÑрыка/Гузе-Бай"
-
-#: calendar/zones.h:98
-msgid "America/Grand_Turk"
-msgstr "ÐмÑрыка/Гранд-Турк"
-
-#: calendar/zones.h:99
-msgid "America/Grenada"
-msgstr "ÐмÑрыка/ГрÑнада"
-
-#: calendar/zones.h:100
-msgid "America/Guadeloupe"
-msgstr "ÐмÑрыка/ГвадÑлупа"
-
-#: calendar/zones.h:101
-msgid "America/Guatemala"
-msgstr "ÐмÑрыка/ГватÑмала"
-
-#: calendar/zones.h:102
-msgid "America/Guayaquil"
-msgstr "ÐмÑрыка/ГуÑквіл"
-
-#: calendar/zones.h:103
-msgid "America/Guyana"
-msgstr "ÐмÑрыка/ГаÑна"
-
-#: calendar/zones.h:104
-msgid "America/Halifax"
-msgstr "ÐмÑрыка/ГаліхвакÑ"
-
-#: calendar/zones.h:105
-msgid "America/Havana"
-msgstr "ÐмÑрыка/Гавана"
-
-#: calendar/zones.h:106
-msgid "America/Hermosillo"
-msgstr "ÐмÑрыка/ГермаÑіла"
-
-#: calendar/zones.h:107
-msgid "America/Indiana/Indianapolis"
-msgstr "ÐмÑрыка/ІндыÑна/ІндыÑнаполіÑ"
-
-#: calendar/zones.h:108
-msgid "America/Indiana/Knox"
-msgstr "ÐмÑрыка/ІндыÑна/КнокÑ"
-
-#: calendar/zones.h:109
-msgid "America/Indiana/Marengo"
-msgstr "ÐмÑрыка/ІндыÑна/МарÑнга"
-
-#: calendar/zones.h:110
-msgid "America/Indiana/Vevay"
-msgstr "ÐмÑрыка/ІндыÑна/ВівÑй"
-
-#: calendar/zones.h:111
-msgid "America/Indianapolis"
-msgstr "ÐмÑрыка/ІндыÑнаполіÑ"
-
-#: calendar/zones.h:112
-msgid "America/Inuvik"
-msgstr "ÐмÑрыка/Інівік"
-
-#: calendar/zones.h:113
-msgid "America/Iqaluit"
-msgstr "ÐмÑрыка/Іквілют"
-
-#: calendar/zones.h:114
-msgid "America/Jamaica"
-msgstr "ÐмÑрыка/Ямайка"
-
-#: calendar/zones.h:115
-msgid "America/Jujuy"
-msgstr "ÐмÑрыка/Яджі"
-
-#: calendar/zones.h:116
-msgid "America/Juneau"
-msgstr "ÐмÑрыка/ЯнеÑ"
-
-#: calendar/zones.h:117
-msgid "America/Kentucky/Louisville"
-msgstr "ÐмÑрыка/Кентукі/ЛёўÑьвіль"
-
-#: calendar/zones.h:118
-msgid "America/Kentucky/Monticello"
-msgstr "ÐмÑрыка/Кентукі/МанцічÑла"
-
-#: calendar/zones.h:119
-msgid "America/La_Paz"
-msgstr "ÐмÑрыка/ЛÑ-паз"
-
-#: calendar/zones.h:120
-msgid "America/Lima"
-msgstr "ÐмÑрыка/Ліма"
-
-#: calendar/zones.h:121
-msgid "America/Los_Angeles"
-msgstr "ÐмÑрыка/ЛоÑ-ÐнжÑлеÑ"
-
-#: calendar/zones.h:122
-msgid "America/Louisville"
-msgstr "ÐмÑрыка/ЛёўÑьвіль"
-
-#: calendar/zones.h:123
-msgid "America/Maceio"
-msgstr "ÐмÑрыка/Мацейо"
-
-#: calendar/zones.h:124
-msgid "America/Managua"
-msgstr "ÐмÑрыка/Манагуа"
-
-#: calendar/zones.h:125
-msgid "America/Manaus"
-msgstr "ÐмÑрыка/МанаўÑ"
-
-#: calendar/zones.h:126
-msgid "America/Martinique"
-msgstr "ÐмÑрыка/Марцінікві"
-
-#: calendar/zones.h:127
-msgid "America/Mazatlan"
-msgstr "ÐмÑрыка/МазатлÑн"
-
-#: calendar/zones.h:128
-msgid "America/Mendoza"
-msgstr "ÐмÑрыка/ÐœÑндоза"
-
-#: calendar/zones.h:129
-msgid "America/Menominee"
-msgstr "ÐмÑрыка/ÐœÑнаміні"
-
-#: calendar/zones.h:130
-msgid "America/Merida"
-msgstr "ÐмÑрыка/ÐœÑрыда"
-
-#: calendar/zones.h:131
-msgid "America/Mexico_City"
-msgstr "ÐмÑрыка/ÐœÑкÑцка-Сіці"
-
-#: calendar/zones.h:132
-msgid "America/Miquelon"
-msgstr "ÐмÑрыка/Міквуелён"
-
-#: calendar/zones.h:133
-msgid "America/Monterrey"
-msgstr "ÐмÑрыка/МонтÑÑ€Ñй"
-
-#: calendar/zones.h:134
-msgid "America/Montevideo"
-msgstr "ÐмÑрыка/МонтÑвідÑа"
-
-#: calendar/zones.h:135
-msgid "America/Montreal"
-msgstr "ÐмÑрыка/МонрÑаль"
-
-#: calendar/zones.h:136
-msgid "America/Montserrat"
-msgstr "ÐмÑрыка/МанÑÑрат"
-
-#: calendar/zones.h:137
-msgid "America/Nassau"
-msgstr "ÐмÑрыка/ÐаÑÑаў"
-
-#: calendar/zones.h:138
-msgid "America/New_York"
-msgstr "ÐмÑрыка/Ð'ÑŽ-Ðрк"
-
-#: calendar/zones.h:139
-msgid "America/Nipigon"
-msgstr "ÐмÑрыка/Ðіпігон"
-
-#: calendar/zones.h:140
-msgid "America/Nome"
-msgstr "ÐмÑрыка/Ðом"
-
-#: calendar/zones.h:141
-msgid "America/Noronha"
-msgstr "ÐмÑрыка/Ðаронга"
-
-#: calendar/zones.h:142
-msgid "America/North_Dakota/Center"
-msgstr "ÐмÑрыка/ÐŸÐ°ÑžÐ½Ð¾Ñ‡Ð½Ð°Ñ Ð”Ð°ÐºÐ¾Ñ‚Ð°/ЦÑнтар"
-
-#: calendar/zones.h:143
-msgid "America/Panama"
-msgstr "ÐмÑрыка/Панама"
-
-#: calendar/zones.h:144
-msgid "America/Pangnirtung"
-msgstr "ÐмÑрыка/Пангніцюнг"
-
-#: calendar/zones.h:145
-msgid "America/Paramaribo"
-msgstr "ÐмÑрыка/Парамарыба"
-
-#: calendar/zones.h:146
-msgid "America/Phoenix"
-msgstr "ÐмÑрыка/ФенікÑ"
-
-#: calendar/zones.h:147
-msgid "America/Port-au-Prince"
-msgstr "ÐмÑрыка/Порт-аў-Прынц"
-
-#: calendar/zones.h:148
-msgid "America/Port_of_Spain"
-msgstr "ÐмÑрыка/ГішпанÑкі порт"
-
-#: calendar/zones.h:149
-msgid "America/Porto_Velho"
-msgstr "ÐмÑрыка/Порта-Ð’Ñльга"
-
-#: calendar/zones.h:150
-msgid "America/Puerto_Rico"
-msgstr "ÐмÑрыка/ПуÑрта-РÑка"
-
-#: calendar/zones.h:151
-msgid "America/Rainy_River"
-msgstr "ÐмÑрыка/РÑйні-Рыва"
-
-#: calendar/zones.h:152
-msgid "America/Rankin_Inlet"
-msgstr "ÐмÑрыка/Ранкін-Інлет"
-
-#: calendar/zones.h:153
-msgid "America/Recife"
-msgstr "ÐмÑрыка/РÑцыф"
-
-#: calendar/zones.h:154
-msgid "America/Regina"
-msgstr "ÐмÑрыка/РÑгуна"
-
-#: calendar/zones.h:155
-msgid "America/Rio_Branco"
-msgstr "ÐмÑрыка/РыÑ-Бранка"
-
-#: calendar/zones.h:156
-msgid "America/Rosario"
-msgstr "ÐмÑрыка/Разаліё"
-
-#: calendar/zones.h:157
-msgid "America/Santiago"
-msgstr "ÐмÑрыка/Санц'Ñга"
-
-#: calendar/zones.h:158
-msgid "America/Santo_Domingo"
-msgstr "ÐмÑрыка/Санта-Дамінга"
-
-#: calendar/zones.h:159
-msgid "America/Sao_Paulo"
-msgstr "ÐмÑрыка/СÑо-Паўла"
-
-#: calendar/zones.h:160
-msgid "America/Scoresbysund"
-msgstr "ÐмÑрыка/СкорÑбыÑанд"
-
-#: calendar/zones.h:161
-msgid "America/Shiprock"
-msgstr "ÐмÑрыка/Шыпрок"
-
-#: calendar/zones.h:162
-msgid "America/St_Johns"
-msgstr "ÐмÑрыка/Санта-ДжонÑ"
-
-#: calendar/zones.h:163
-msgid "America/St_Kitts"
-msgstr "ÐмÑрыка/Санта-КітÑ"
-
-#: calendar/zones.h:164
-msgid "America/St_Lucia"
-msgstr "ÐмÑрыка/Санта-ЛючыÑ"
-
-#: calendar/zones.h:165
-msgid "America/St_Thomas"
-msgstr "ÐмÑрыка/Sанта-ТомаÑ"
-
-#: calendar/zones.h:166
-msgid "America/St_Vincent"
-msgstr "ÐмÑрыка/Санта-ВінцÑнт"
-
-#: calendar/zones.h:167
-msgid "America/Swift_Current"
-msgstr "ÐмÑрыка/Свіфт-КарÑнт"
-
-#: calendar/zones.h:168
-msgid "America/Tegucigalpa"
-msgstr "ÐмÑрыка/ТÑгуцыгалпа"
-
-#: calendar/zones.h:169
-msgid "America/Thule"
-msgstr "ÐмÑрыка/Тал"
-
-#: calendar/zones.h:170
-msgid "America/Thunder_Bay"
-msgstr "ÐмÑрыка/ТандÑÑ€-Бай"
-
-#: calendar/zones.h:171
-msgid "America/Tijuana"
-msgstr "ÐмÑрыка/ЦіÑна"
-
-#: calendar/zones.h:172
-msgid "America/Tortola"
-msgstr "ÐмÑрыка/Тартала"
-
-#: calendar/zones.h:173
-msgid "America/Vancouver"
-msgstr "ÐмÑрыка/ВанкувÑÑ€"
-
-#: calendar/zones.h:174
-msgid "America/Whitehorse"
-msgstr "ÐмÑрыка/ВайтхоÑ"
-
-#: calendar/zones.h:175
-msgid "America/Winnipeg"
-msgstr "ÐмÑрыка/Вініпег"
-
-#: calendar/zones.h:176
-msgid "America/Yakutat"
-msgstr "ÐмÑрыка/Якутат"
-
-#: calendar/zones.h:177
-msgid "America/Yellowknife"
-msgstr "ÐмÑрыка/Елаўкніф"
-
-#: calendar/zones.h:178
-msgid "Antarctica/Casey"
-msgstr "Aнтарктыда/КаÑей"
-
-#: calendar/zones.h:179
-msgid "Antarctica/Davis"
-msgstr "Ðнтарктыда/ДÑвіÑ"
-
-#: calendar/zones.h:180
-msgid "Antarctica/DumontDUrville"
-msgstr "Ðнтарктыда/Д'юмонтдьюрвіль"
-
-#: calendar/zones.h:181
-msgid "Antarctica/Mawson"
-msgstr "Ðнтарктыда/МаўÑан"
-
-#: calendar/zones.h:182
-msgid "Antarctica/McMurdo"
-msgstr "Ðнтарктыда/Макмарда"
-
-#: calendar/zones.h:183
-msgid "Antarctica/Palmer"
-msgstr "Ðнтарктыда/Пальмер"
-
-#: calendar/zones.h:184
-msgid "Antarctica/South_Pole"
-msgstr "Ðнтарктыда/Сыдполен"
-
-#: calendar/zones.h:185
-msgid "Antarctica/Syowa"
-msgstr "Ðнтарктыда/Сыёва"
-
-#: calendar/zones.h:186
-msgid "Antarctica/Vostok"
-msgstr "Ðнтарктыда/УÑход"
-
-#: calendar/zones.h:187
-msgid "Arctic/Longyearbyen"
-msgstr "Ðрктыка/Лёнгырбаен"
-
-#: calendar/zones.h:188
-msgid "Asia/Aden"
-msgstr "ÐзіÑ/ÐдÑн"
-
-#: calendar/zones.h:189
-msgid "Asia/Almaty"
-msgstr "ÐзіÑ/Ðлма-ÐÑ‚Ñ‹"
-
-#: calendar/zones.h:190
-msgid "Asia/Amman"
-msgstr "ÐзіÑ/Ðман"
-
-#: calendar/zones.h:191
-msgid "Asia/Anadyr"
-msgstr "ÐзіÑ/Ðнадыр"
-
-#: calendar/zones.h:192
-msgid "Asia/Aqtau"
-msgstr "ÐзіÑ/Ðктаў"
-
-#: calendar/zones.h:193
-msgid "Asia/Aqtobe"
-msgstr "ÐзіÑ/Ðктобе"
-
-#: calendar/zones.h:194
-msgid "Asia/Ashgabat"
-msgstr "ÐзіÑ/Ðшхабад"
-
-#: calendar/zones.h:195
-msgid "Asia/Baghdad"
-msgstr "ÐзіÑ/Багдад"
-
-#: calendar/zones.h:196
-msgid "Asia/Bahrain"
-msgstr "ÐзіÑ/БахрÑйн"
-
-#: calendar/zones.h:197
-msgid "Asia/Baku"
-msgstr "ÐзіÑ/Баку"
-
-#: calendar/zones.h:198
-msgid "Asia/Bangkok"
-msgstr "ÐзіÑ/Бангкок"
-
-#: calendar/zones.h:199
-msgid "Asia/Beirut"
-msgstr "ÐзіÑ/Бейрут"
-
-#: calendar/zones.h:200
-msgid "Asia/Bishkek"
-msgstr "ÐзіÑ/Бішкек"
-
-#: calendar/zones.h:201
-msgid "Asia/Brunei"
-msgstr "ÐзіÑ/Брунеі"
-
-#: calendar/zones.h:202
-msgid "Asia/Calcutta"
-msgstr "ÐзіÑ/Калькута"
-
-#: calendar/zones.h:203
-msgid "Asia/Choibalsan"
-msgstr "ÐзіÑ/ЧайбалÑан"
-
-#: calendar/zones.h:204
-msgid "Asia/Chongqing"
-msgstr "ÐзіÑ/Чонгквінг"
-
-#: calendar/zones.h:205
-msgid "Asia/Colombo"
-msgstr "ÐзіÑ/Калюмба"
-
-#: calendar/zones.h:206
-msgid "Asia/Damascus"
-msgstr "ÐзіÑ/ДамаÑк"
-
-#: calendar/zones.h:207
-msgid "Asia/Dhaka"
-msgstr "ÐзіÑ/Дгака"
-
-#: calendar/zones.h:208
-msgid "Asia/Dili"
-msgstr "ÐзіÑ/Ділі"
-
-#: calendar/zones.h:209
-msgid "Asia/Dubai"
-msgstr "ÐзіÑ/Дубаі"
-
-#: calendar/zones.h:210
-msgid "Asia/Dushanbe"
-msgstr "ÐзіÑ/ДушанбÑ"
-
-#: calendar/zones.h:211
-msgid "Asia/Gaza"
-msgstr "ÐзіÑ/Газа"
-
-#: calendar/zones.h:212
-msgid "Asia/Harbin"
-msgstr "ÐзіÑ/Гарбін"
-
-#: calendar/zones.h:213
-msgid "Asia/Hong_Kong"
-msgstr "ÐзіÑ/СÑн-Ган"
-
-#: calendar/zones.h:214
-msgid "Asia/Hovd"
-msgstr "ÐзіÑ/Гоўд"
-
-#: calendar/zones.h:215
-msgid "Asia/Irkutsk"
-msgstr "ÐзіÑ/Іркуцк"
-
-#: calendar/zones.h:216
-msgid "Asia/Istanbul"
-msgstr "ÐзіÑ/Стамбул"
-
-#: calendar/zones.h:217
-msgid "Asia/Jakarta"
-msgstr "ÐзіÑ/Джакарта"
-
-#: calendar/zones.h:218
-msgid "Asia/Jayapura"
-msgstr "ÐзіÑ/ДжаÑпура"
-
-#: calendar/zones.h:219
-msgid "Asia/Jerusalem"
-msgstr "ÐзіÑ/ІеруÑалім"
-
-#: calendar/zones.h:220
-msgid "Asia/Kabul"
-msgstr "ÐзіÑ/Кабул"
-
-#: calendar/zones.h:221
-msgid "Asia/Kamchatka"
-msgstr "ÐзіÑ/Камчатка"
-
-#: calendar/zones.h:222
-msgid "Asia/Karachi"
-msgstr "ÐзіÑ/Карачы"
-
-#: calendar/zones.h:223
-msgid "Asia/Kashgar"
-msgstr "ÐзіÑ/Кашгар"
-
-#: calendar/zones.h:224
-msgid "Asia/Katmandu"
-msgstr "ÐзіÑ/Катманду"
-
-#: calendar/zones.h:225
-msgid "Asia/Krasnoyarsk"
-msgstr "ÐзіÑ/КраÑнаÑÑ€Ñк"
-
-#: calendar/zones.h:226
-msgid "Asia/Kuala_Lumpur"
-msgstr "ÐзіÑ/Куала-Люмпур"
-
-#: calendar/zones.h:227
-msgid "Asia/Kuching"
-msgstr "ÐзіÑ/Качынг"
-
-#: calendar/zones.h:228
-msgid "Asia/Kuwait"
-msgstr "ÐзіÑ/КувÑйт"
-
-#: calendar/zones.h:229
-msgid "Asia/Macao"
-msgstr "ÐзіÑ/Макао"
-
-#: calendar/zones.h:230
-msgid "Asia/Macau"
-msgstr "ÐзіÑ/Макаў"
-
-#: calendar/zones.h:231
-msgid "Asia/Magadan"
-msgstr "ÐзіÑ/Магадан"
-
-#: calendar/zones.h:232
-msgid "Asia/Makassar"
-msgstr "ÐзіÑ/МакаÑар"
-
-#: calendar/zones.h:233
-msgid "Asia/Manila"
-msgstr "ÐзіÑ/Маніла"
-
-#: calendar/zones.h:234
-msgid "Asia/Muscat"
-msgstr "ÐзіÑ/МуÑкат"
-
-#: calendar/zones.h:235
-msgid "Asia/Nicosia"
-msgstr "ÐзіÑ/ÐікоÑÑ"
-
-#: calendar/zones.h:236
-msgid "Asia/Novosibirsk"
-msgstr "ÐзіÑ/ÐоваÑыбірÑк"
-
-#: calendar/zones.h:237
-msgid "Asia/Omsk"
-msgstr "ÐзіÑ/ОмÑк"
-
-#: calendar/zones.h:238
-msgid "Asia/Oral"
-msgstr "ÐзіÑ/Ðрол"
-
-#: calendar/zones.h:239
-msgid "Asia/Phnom_Penh"
-msgstr "ÐзіÑ/Хном-ПÑнг"
-
-#: calendar/zones.h:240
-msgid "Asia/Pontianak"
-msgstr "ÐзіÑ/ПонціÑнак"
-
-#: calendar/zones.h:241
-msgid "Asia/Pyongyang"
-msgstr "ÐзіÑ/ПёнгÑнг"
-
-#: calendar/zones.h:242
-msgid "Asia/Qatar"
-msgstr "ÐзіÑ/КватÑÑ€"
-
-#: calendar/zones.h:243
-msgid "Asia/Qyzylorda"
-msgstr "ÐзіÑ/Квізылёрда"
-
-#: calendar/zones.h:244
-msgid "Asia/Rangoon"
-msgstr "ÐзіÑ/Рангун"
-
-#: calendar/zones.h:245
-msgid "Asia/Riyadh"
-msgstr "ÐзіÑ/РыÑд"
-
-#: calendar/zones.h:246
-msgid "Asia/Saigon"
-msgstr "ÐзіÑ/Сайгон"
-
-#: calendar/zones.h:247
-msgid "Asia/Sakhalin"
-msgstr "ÐзіÑ/Сахалін"
-
-#: calendar/zones.h:248
-msgid "Asia/Samarkand"
-msgstr "ÐзіÑ/Самарканд"
-
-#: calendar/zones.h:249
-msgid "Asia/Seoul"
-msgstr "ÐзіÑ/Сеул"
-
-#: calendar/zones.h:250
-msgid "Asia/Shanghai"
-msgstr "ÐзіÑ/Шанхай"
-
-#: calendar/zones.h:251
-msgid "Asia/Singapore"
-msgstr "ÐзіÑ/Сынгапур"
-
-#: calendar/zones.h:252
-msgid "Asia/Taipei"
-msgstr "ÐзіÑ/ТайбÑй"
-
-#: calendar/zones.h:253
-msgid "Asia/Tashkent"
-msgstr "ÐзіÑ/Ташкент"
-
-#: calendar/zones.h:254
-msgid "Asia/Tbilisi"
-msgstr "ÐзіÑ/ТбіліÑÑ–"
-
-#: calendar/zones.h:255
-msgid "Asia/Tehran"
-msgstr "ÐзіÑ/ТÑгеран"
-
-#: calendar/zones.h:256
-msgid "Asia/Thimphu"
-msgstr "ÐзіÑ/Цімпху"
-
-#: calendar/zones.h:257
-msgid "Asia/Tokyo"
-msgstr "ÐзіÑ/Токіо"
-
-#: calendar/zones.h:258
-msgid "Asia/Ujung_Pandang"
-msgstr "ÐзіÑ/Ðнг-Панданг"
-
-#: calendar/zones.h:259
-msgid "Asia/Ulaanbaatar"
-msgstr "ÐзіÑ/Улан-Батар"
-
-#: calendar/zones.h:260
-msgid "Asia/Urumqi"
-msgstr "ÐзіÑ/Юрумкві"
-
-#: calendar/zones.h:261
-msgid "Asia/Vientiane"
-msgstr "ÐзіÑ/Ð’Ñнцын"
-
-#: calendar/zones.h:262
-msgid "Asia/Vladivostok"
-msgstr "ÐзіÑ/УладзіваÑток"
-
-#: calendar/zones.h:263
-msgid "Asia/Yakutsk"
-msgstr "ÐзіÑ/Якутцк"
-
-#: calendar/zones.h:264
-msgid "Asia/Yekaterinburg"
-msgstr "ÐзіÑ/Екацерынбург"
-
-#: calendar/zones.h:265
-msgid "Asia/Yerevan"
-msgstr "ÐзіÑ/ЕрÑван"
-
-#: calendar/zones.h:266
-msgid "Atlantic/Azores"
-msgstr "ÐтлÑнтыка/ÐзорÑÑ"
-
-#: calendar/zones.h:267
-msgid "Atlantic/Bermuda"
-msgstr "ÐтлÑнтыка/Бермуды"
-
-#: calendar/zones.h:268
-msgid "Atlantic/Canary"
-msgstr "ÐтлÑнтыка/Канары"
-
-#: calendar/zones.h:269
-msgid "Atlantic/Cape_Verde"
-msgstr "ÐтлÑнтыка/Капе-Ð’Ñрдзі"
-
-#: calendar/zones.h:270
-msgid "Atlantic/Faeroe"
-msgstr "ÐтлÑнтыка/Фару"
-
-#: calendar/zones.h:271
-msgid "Atlantic/Jan_Mayen"
-msgstr "ÐтлÑнтыка/Ян-Майен"
-
-#: calendar/zones.h:272
-msgid "Atlantic/Madeira"
-msgstr "ÐтлÑнтыка/МадÑйра"
-
-#: calendar/zones.h:273
-msgid "Atlantic/Reykjavik"
-msgstr "ÐтлÑнтыка/РÑйк'Ñвік"
-
-#: calendar/zones.h:274
-msgid "Atlantic/South_Georgia"
-msgstr "ÐтлÑнтыка/ÐŸÐ°ÑžÐ´Ð·ÐµÐ½Ð½Ð°Ñ Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ñ‹Ñ"
-
-#: calendar/zones.h:275
-msgid "Atlantic/St_Helena"
-msgstr "ÐтлÑнтыка/Сан-Галена"
-
-#: calendar/zones.h:276
-msgid "Atlantic/Stanley"
-msgstr "ÐтлÑнтыка/СтÑнлі"
-
-#: calendar/zones.h:277
-msgid "Australia/Adelaide"
-msgstr "ÐÑžÑтраліÑ/ÐдÑлÑйд"
-
-#: calendar/zones.h:278
-msgid "Australia/Brisbane"
-msgstr "ÐÑžÑтраліÑ/Брышбан"
-
-#: calendar/zones.h:279
-msgid "Australia/Broken_Hill"
-msgstr "ÐÑžÑтраліÑ/Брокен-Хіл"
-
-#: calendar/zones.h:280
-msgid "Australia/Darwin"
-msgstr "ÐÑžÑтраліÑ/Дарвін"
-
-#: calendar/zones.h:281
-msgid "Australia/Hobart"
-msgstr "ÐÑžÑтраліÑ/Губерт"
-
-#: calendar/zones.h:282
-msgid "Australia/Lindeman"
-msgstr "ÐÑžÑтраліÑ/ЛіндÑман"
-
-#: calendar/zones.h:283
-msgid "Australia/Lord_Howe"
-msgstr "ÐÑžÑтраліÑ/Лорд-Хоў"
-
-#: calendar/zones.h:284
-msgid "Australia/Melbourne"
-msgstr "ÐÑžÑтраліÑ/ÐœÑльбурн"
-
-#: calendar/zones.h:285
-msgid "Australia/Perth"
-msgstr "ÐÑžÑтраліÑ/ПÑÑ€Ñ"
-
-#: calendar/zones.h:286
-msgid "Australia/Sydney"
-msgstr "ÐÑžÑтраліÑ/Сідней"
-
-#: calendar/zones.h:287
-msgid "Europe/Amsterdam"
-msgstr "Эўропа/ÐмÑÑ‚Ñрдам"
-
-#: calendar/zones.h:288
-msgid "Europe/Andorra"
-msgstr "Эўропа/Ðндора"
-
-#: calendar/zones.h:289
-msgid "Europe/Athens"
-msgstr "Эўропа/ÐÑ‚ÑнÑ"
-
-#: calendar/zones.h:290
-msgid "Europe/Belfast"
-msgstr "Эўропа/БелфаÑÑ‚"
-
-#: calendar/zones.h:291
-msgid "Europe/Belgrade"
-msgstr "Эўропа/Белгарад"
-
-#: calendar/zones.h:292
-msgid "Europe/Berlin"
-msgstr "Эўропа/БÑрлін"
-
-#: calendar/zones.h:293
-msgid "Europe/Bratislava"
-msgstr "Эўропа/БратыÑлÑва"
-
-#: calendar/zones.h:294
-msgid "Europe/Brussels"
-msgstr "Эўропа/БруÑÑль"
-
-#: calendar/zones.h:295
-msgid "Europe/Bucharest"
-msgstr "Эўропа/БухарÑÑÑ‚"
-
-#: calendar/zones.h:296
-msgid "Europe/Budapest"
-msgstr "Эўропа/БудапÑшт"
-
-#: calendar/zones.h:297
-msgid "Europe/Chisinau"
-msgstr "Эўропа/Чызінаў"
-
-#: calendar/zones.h:298
-msgid "Europe/Copenhagen"
-msgstr "Эўропа/КапÑнгаген"
-
-#: calendar/zones.h:299
-msgid "Europe/Dublin"
-msgstr "Эўропа/Дублін"
-
-#: calendar/zones.h:300
-msgid "Europe/Gibraltar"
-msgstr "Эўропа/Гібральтар"
-
-#: calendar/zones.h:301
-msgid "Europe/Helsinki"
-msgstr "Эўропа/Ð¥ÑльÑынкі"
-
-#: calendar/zones.h:302
-msgid "Europe/Istanbul"
-msgstr "Эўропа/Стамбул"
-
-#: calendar/zones.h:303
-msgid "Europe/Kaliningrad"
-msgstr "Эўропа/КёнігÑбÑрг"
-
-#: calendar/zones.h:304
-msgid "Europe/Kiev"
-msgstr "Эўропа/Кіеў"
-
-#: calendar/zones.h:305
-msgid "Europe/Lisbon"
-msgstr "Эўропа/ЛіÑабон"
-
-#: calendar/zones.h:306
-msgid "Europe/Ljubljana"
-msgstr "Эўропа/ЛюблÑна"
-
-#: calendar/zones.h:307
-msgid "Europe/London"
-msgstr "Эўропа/Лёндан"
-
-#: calendar/zones.h:308
-msgid "Europe/Luxembourg"
-msgstr "Эўропа/ЛюкÑÑмбург"
-
-#: calendar/zones.h:309
-msgid "Europe/Madrid"
-msgstr "Эўропа/Мадрыд"
-
-#: calendar/zones.h:310
-msgid "Europe/Malta"
-msgstr "Эўропа/Мальта"
-
-#: calendar/zones.h:311
-msgid "Europe/Minsk"
-msgstr "Эўропа/МенÑк"
-
-#: calendar/zones.h:312
-msgid "Europe/Monaco"
-msgstr "Эўропа/Манака"
-
-#: calendar/zones.h:313
-msgid "Europe/Moscow"
-msgstr "Эўропа/МаÑква"
-
-#: calendar/zones.h:314
-msgid "Europe/Nicosia"
-msgstr "Эўропа/ÐікаÑÑ–Ñ"
-
-#: calendar/zones.h:315
-msgid "Europe/Oslo"
-msgstr "Эўропа/ОÑла"
-
-#: calendar/zones.h:316
-msgid "Europe/Paris"
-msgstr "Эўропа/Парыж"
-
-#: calendar/zones.h:317
-msgid "Europe/Prague"
-msgstr "Эўропа/Прага"
-
-#: calendar/zones.h:318
-msgid "Europe/Riga"
-msgstr "Эўропа/Рыга"
-
-#: calendar/zones.h:319
-msgid "Europe/Rome"
-msgstr "Эўропа/Рым"
-
-#: calendar/zones.h:320
-msgid "Europe/Samara"
-msgstr "Эўропа/Самара"
-
-#: calendar/zones.h:321
-msgid "Europe/San_Marino"
-msgstr "Эўропа/Сан-Марына"
-
-#: calendar/zones.h:322
-msgid "Europe/Sarajevo"
-msgstr "Эўропа/Сараева"
-
-#: calendar/zones.h:323
-msgid "Europe/Simferopol"
-msgstr "Эўропа/СімфÑропаль"
-
-#: calendar/zones.h:324
-msgid "Europe/Skopje"
-msgstr "Эўропа/Скоп'е"
-
-#: calendar/zones.h:325
-msgid "Europe/Sofia"
-msgstr "Эўропа/СафіÑ"
-
-#: calendar/zones.h:326
-msgid "Europe/Stockholm"
-msgstr "Эўропа/Стакгольм"
-
-#: calendar/zones.h:327
-msgid "Europe/Tallinn"
-msgstr "Эўропа/Талін"
-
-#: calendar/zones.h:328
-msgid "Europe/Tirane"
-msgstr "Эўропа/Цірана"
-
-#: calendar/zones.h:329
-msgid "Europe/Uzhgorod"
-msgstr "Эўропа/Ужгарад"
-
-#: calendar/zones.h:330
-msgid "Europe/Vaduz"
-msgstr "Эўропа/Вадзюз"
-
-#: calendar/zones.h:331
-msgid "Europe/Vatican"
-msgstr "Эўропа/Ватыкан"
-
-#: calendar/zones.h:332
-msgid "Europe/Vienna"
-msgstr "Эўропа/Вена"
-
-#: calendar/zones.h:333
-msgid "Europe/Vilnius"
-msgstr "Эўропа/ВільнÑ"
-
-#: calendar/zones.h:334
-msgid "Europe/Warsaw"
-msgstr "Эўропа/Варшава"
-
-#: calendar/zones.h:335
-msgid "Europe/Zagreb"
-msgstr "Эўропа/Заграб"
-
-#: calendar/zones.h:336
-msgid "Europe/Zaporozhye"
-msgstr "Эўропа/Запарожжа"
-
-#: calendar/zones.h:337
-msgid "Europe/Zurich"
-msgstr "Эўропа/Цюрых"
-
-#: calendar/zones.h:338
-msgid "Indian/Antananarivo"
-msgstr "ІндыйÑкі акіÑн/Ðнтананарыва"
-
-#: calendar/zones.h:339
-msgid "Indian/Chagos"
-msgstr "ІндыйÑкі акіÑн/Чага"
-
-#: calendar/zones.h:340
-msgid "Indian/Christmas"
-msgstr "ІндыйÑкі акіÑн/РаÑтво"
-
-#: calendar/zones.h:341
-msgid "Indian/Cocos"
-msgstr "ІндыйÑкі акіÑн/КакоÑ"
-
-#: calendar/zones.h:342
-msgid "Indian/Comoro"
-msgstr "ІндыйÑкі акіÑн/Камара"
-
-#: calendar/zones.h:343
-msgid "Indian/Kerguelen"
-msgstr "ІндыйÑкі акіÑн/КергуÑлен"
-
-#: calendar/zones.h:344
-msgid "Indian/Mahe"
-msgstr "ІндыйÑкі акіÑн/Мах"
-
-#: calendar/zones.h:345
-msgid "Indian/Maldives"
-msgstr "ІндыйÑкі акіÑн/Мальды"
-
-#: calendar/zones.h:346
-msgid "Indian/Mauritius"
-msgstr "ІндыйÑкі акіÑн/МаўрыцыюÑ"
-
-#: calendar/zones.h:347
-msgid "Indian/Mayotte"
-msgstr "ІндыйÑкі акіÑн/Майот"
-
-#: calendar/zones.h:348
-msgid "Indian/Reunion"
-msgstr "ІндыйÑкі акіÑн/РÑюніён"
-
-#: calendar/zones.h:349
-msgid "Pacific/Apia"
-msgstr "Ціхі акіÑн/ÐпіÑ"
-
-#: calendar/zones.h:350
-msgid "Pacific/Auckland"
-msgstr "Ціхі акіÑн/ÐўклÑнд"
-
-#: calendar/zones.h:351
-msgid "Pacific/Chatham"
-msgstr "Ціхі акіÑн/Чызам"
-
-#: calendar/zones.h:352
-msgid "Pacific/Easter"
-msgstr "Ціхі акіÑн/Ð’Ñлікдзень"
-
-#: calendar/zones.h:353
-msgid "Pacific/Efate"
-msgstr "Ціхі акіÑн/Эфіт"
-
-#: calendar/zones.h:354
-msgid "Pacific/Enderbury"
-msgstr "Ціхі акіÑн/Эндербары"
-
-#: calendar/zones.h:355
-msgid "Pacific/Fakaofo"
-msgstr "Ціхі акіÑн/Хвакахву"
-
-#: calendar/zones.h:356
-msgid "Pacific/Fiji"
-msgstr "Ціхі акіÑн/Фіджы"
-
-#: calendar/zones.h:357
-msgid "Pacific/Funafuti"
-msgstr "Ціхі акіÑн/Хванахваці"
-
-#: calendar/zones.h:358
-msgid "Pacific/Galapagos"
-msgstr "Ціхі акіÑн/ГалапагоÑ"
-
-#: calendar/zones.h:359
-msgid "Pacific/Gambier"
-msgstr "Ціхі акіÑн/Гамбір"
-
-#: calendar/zones.h:360
-msgid "Pacific/Guadalcanal"
-msgstr "Ціхі акіÑн/Гвадалканал"
-
-#: calendar/zones.h:361
-msgid "Pacific/Guam"
-msgstr "Ціхі акіÑн/ГуÑм"
-
-#: calendar/zones.h:362
-msgid "Pacific/Honolulu"
-msgstr "Ціхі акіÑн/Ганалулу"
-
-#: calendar/zones.h:363
-msgid "Pacific/Johnston"
-msgstr "Ціхі акіÑн/ДжонÑан"
-
-#: calendar/zones.h:364
-msgid "Pacific/Kiritimati"
-msgstr "Ціхі акіÑн/Кіріцімаці"
-
-#: calendar/zones.h:365
-msgid "Pacific/Kosrae"
-msgstr "Ціхі акіÑн/КаÑрае"
-
-#: calendar/zones.h:366
-msgid "Pacific/Kwajalein"
-msgstr "Ціхі акіÑн/КвайлÑйн"
-
-#: calendar/zones.h:367
-msgid "Pacific/Majuro"
-msgstr "Ціхі акіÑн/Маджура"
-
-#: calendar/zones.h:368
-msgid "Pacific/Marquesas"
-msgstr "Ціхі акіÑн/МаргуеÑаÑ"
-
-#: calendar/zones.h:369
-msgid "Pacific/Midway"
-msgstr "Ціхі акіÑн/МідвÑй"
-
-#: calendar/zones.h:370
-msgid "Pacific/Nauru"
-msgstr "Ціхі акіÑн/Ðауру"
-
-#: calendar/zones.h:371
-msgid "Pacific/Niue"
-msgstr "Ціхі акіÑн/ÐÑŽ"
-
-#: calendar/zones.h:372
-msgid "Pacific/Norfolk"
-msgstr "Ціхі акіÑн/Ðорфалк"
-
-#: calendar/zones.h:373
-msgid "Pacific/Noumea"
-msgstr "Ціхі акіÑн/Ðоўмі"
-
-#: calendar/zones.h:374
-msgid "Pacific/Pago_Pago"
-msgstr "Ціхі акіÑн/Пага-Пага"
-
-#: calendar/zones.h:375
-msgid "Pacific/Palau"
-msgstr "Ціхі акіÑн/Палаў"
-
-#: calendar/zones.h:376
-msgid "Pacific/Pitcairn"
-msgstr "Ціхі акіÑн/Піткайрн"
-
-#: calendar/zones.h:377
-msgid "Pacific/Ponape"
-msgstr "Ціхі акіÑн/ПонапÑ"
-
-#: calendar/zones.h:378
-msgid "Pacific/Port_Moresby"
-msgstr "Ціхі акіÑн/Порт-МарÑÑьбі"
-
-#: calendar/zones.h:379
-msgid "Pacific/Rarotonga"
-msgstr "Ціхі акіÑн/Раратанга"
-
-#: calendar/zones.h:380
-msgid "Pacific/Saipan"
-msgstr "Ціхі акіÑн/СайпÑн"
-
-#: calendar/zones.h:381
-msgid "Pacific/Tahiti"
-msgstr "Ціхі акіÑн/Тагіці"
-
-#: calendar/zones.h:382
-msgid "Pacific/Tarawa"
-msgstr "Ціхі акіÑн/Тарава"
-
-#: calendar/zones.h:383
-msgid "Pacific/Tongatapu"
-msgstr "Ціхі акіÑн/Тонгатапу"
-
-#: calendar/zones.h:384
-msgid "Pacific/Truk"
-msgstr "Ціхі акіÑн/Трак"
-
-#: calendar/zones.h:385
-msgid "Pacific/Wake"
-msgstr "Ціхі акіÑн/Вак"
-
-#: calendar/zones.h:386
-msgid "Pacific/Wallis"
-msgstr "Ціхі акіÑн/Валі"
-
-#: calendar/zones.h:387
-msgid "Pacific/Yap"
-msgstr "Ціхі акіÑн/Яп"
-
-#: camel/camel-cipher-context.c:102
-msgid "Signing is not supported by this cipher"
-msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ Ð½Ðµ падтрымліваецца гÑтым шыфрам"
-
-#: camel/camel-cipher-context.c:128
-msgid "Signing message"
-msgstr "ПадпіÑваньне паведамленьнÑ"
-
-#: camel/camel-cipher-context.c:145
-msgid "Verifying is not supported by this cipher"
-msgstr "Праверка не падтрымліваецца гÑтым шыфрам"
-
-#: camel/camel-cipher-context.c:171
-msgid "Verifying message"
-msgstr "Праверка паведамленьнÑ"
-
-#: camel/camel-cipher-context.c:189
-msgid "Encryption is not supported by this cipher"
-msgstr "Шыфраваньне не падтрымліваецца гÑтым шыфрам"
-
-#: camel/camel-cipher-context.c:215
-msgid "Encrypting message"
-msgstr "Крыптаваньне паведамленьнÑ"
-
-#: camel/camel-cipher-context.c:232
-msgid "Decryption is not supported by this cipher"
-msgstr "РаÑшыфроўка не падтрымліваецца гÑтым шыфрам"
-
-#: camel/camel-cipher-context.c:254
-msgid "Decrypting message"
-msgstr "ДÑкрыптаваньне паведамленьнÑ"
-
-#: camel/camel-cipher-context.c:271
-msgid "You may not import keys with this cipher"
-msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ імпартаваць ключы з гÑтым шыфрам"
-
-#: camel/camel-cipher-context.c:301
-msgid "You may not export keys with this cipher"
-msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ ÑкÑпартаваць ключы з гÑтым шыфрам"
-
-#: camel/camel-data-cache.c:133
-msgid "Unable to create cache path"
-msgstr "Ðе атрымалаÑÑ Ñтварыць шлÑÑ… Ð´Ð»Ñ ÐºÑшу"
-
-#: camel/camel-data-cache.c:375
-#, c-format
-msgid "Could not remove cache entry: %s: %s"
-msgstr "Ðе атрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ кÑшаваны ÑлемÑнт: %s: %s"
-
-#: camel/camel-disco-diary.c:194
-#, c-format
-msgid ""
-"Could not write log entry: %s\n"
-"Further operations on this server will not be replayed when you\n"
-"reconnect to the network."
-msgstr ""
-"Ðе атрымалаÑÑ Ð·Ð°Ð¿Ñ–Ñаць у чаÑопіÑ: %s\n"
-"Ð”Ð°Ð»ÐµÐ¹ÑˆÑ‹Ñ Ð°Ð¿Ñрацыі Ð½Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ запіÑаны й, адпаведна, Ð½Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ\n"
-"Ð°Ð´Ð½Ð¾ÑžÐ»ÐµÐ½Ñ‹Ñ Ð¿Ð°ÑÑŒÐ»Ñ Ð´Ð°Ð»ÑƒÑ‡ÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка."
-
-#: camel/camel-disco-diary.c:257
-#, c-format
-msgid ""
-"Could not open `%s':\n"
-"%s\n"
-"Changes made to this folder will not be resynchronized."
-msgstr ""
-"Ðемагчыма адкрыць `%s':\n"
-"%s\n"
-"Зьмены, Ð·Ñ€Ð¾Ð±Ð»ÐµÐ½Ñ‹Ñ Ñƒ гÑтае Ñ‚Ñчцы, Ð½Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ ÑынхранізаваныÑ."
-
-#: camel/camel-disco-diary.c:293
-msgid "Resynchronizing with server"
-msgstr "Пера-ÑÑ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ð· паÑлужнікам"
-
-#: camel/camel-disco-folder.c:41
-msgid "Copy folder content locally for offline operation"
-msgstr ""
-
-#: camel/camel-disco-folder.c:103
-msgid "Downloading new messages for offline mode"
-msgstr ""
-
-#: camel/camel-disco-folder.c:466
-#, c-format
-msgid "Preparing folder '%s' for offline"
-msgstr "Падрыхтоўка Ñ‚Ñчкі \"%s\" Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ð½Ð¾Ð¼Ð½Ð°Ðµ працы"
-
-#: camel/camel-disco-store.c:404
-msgid "You must be working online to complete this operation"
-msgstr "Ð’Ñ‹ муÑіце працаваць у далучаным Ñтане Ð´Ð»Ñ Ð·Ð°Ð²ÑршÑÐ½ÑŒÐ½Ñ Ð³Ñтае апÑрацыі"
-
-#: camel/camel-filter-driver.c:669 camel/camel-filter-search.c:513
-#: camel/camel-process.c:48
-#, c-format
-msgid "Failed to create pipe to '%s': %s"
-msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ ÐºÐ°Ð½Ð°Ð»Ð° да \"%s\": %s"
-
-#: camel/camel-filter-driver.c:713 camel/camel-process.c:90
-#, c-format
-msgid "Failed to create child process '%s': %s"
-msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ Ð´Ð°Ñ‡Ñрчанага працÑÑу '%s': %s"
-
-#: camel/camel-filter-driver.c:756
-#, c-format
-msgid "Invalid message stream received from %s: %s"
-msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð»Ñ‹Ð½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½Ð° ад %s: %s"
-
-#: camel/camel-filter-driver.c:945 camel/camel-filter-driver.c:954
-msgid "Syncing folders"
-msgstr "Ð¡Ñ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ñ‚Ñчак"
-
-#: camel/camel-filter-driver.c:1043 camel/camel-filter-driver.c:1420
-#, c-format
-msgid "Error parsing filter: %s: %s"
-msgstr "Памылка аналізу цÑдалю: %s: %s"
-
-#: camel/camel-filter-driver.c:1052 camel/camel-filter-driver.c:1426
-#, c-format
-msgid "Error executing filter: %s: %s"
-msgstr "Памылка Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ñ†Ñдалю: %s: %s"
-
-#: camel/camel-filter-driver.c:1119
-msgid "Unable to open spool folder"
-msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ Ñ‚Ñчку Ñпула"
-
-#: camel/camel-filter-driver.c:1128
-msgid "Unable to process spool folder"
-msgstr "ÐеатрымалаÑÑ Ð°Ð¿Ñ€Ð°Ñ†Ð°Ð²Ð°Ñ†ÑŒ Ñ‚Ñчку Ñпула"
-
-#: camel/camel-filter-driver.c:1143
-#, c-format
-msgid "Getting message %d (%d%%)"
-msgstr "Ðтрыманьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %d (%d%%)"
-
-#: camel/camel-filter-driver.c:1147
-msgid "Cannot open message"
-msgstr "Ðемагчыма адкрыць паведамленьне"
-
-#: camel/camel-filter-driver.c:1148 camel/camel-filter-driver.c:1160
-#, c-format
-msgid "Failed on message %d"
-msgstr "Збой на паведамленьні %d"
-
-#: camel/camel-filter-driver.c:1174 camel/camel-filter-driver.c:1265
-msgid "Syncing folder"
-msgstr "Ð¡Ñ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ñ‚Ñчкі"
-
-#: camel/camel-filter-driver.c:1235
-#, c-format
-msgid "Getting message %d of %d"
-msgstr "Ðтрыманьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %d з %d"
-
-#: camel/camel-filter-driver.c:1250
-#, c-format
-msgid "Failed at message %d of %d"
-msgstr "Збой на паведамленьні %d з %d"
-
-#: camel/camel-filter-search.c:136
-msgid "Failed to retrieve message"
-msgstr "Збой пад Ñ‡Ð°Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ"
-
-#: camel/camel-filter-search.c:386
-msgid "Invalid arguments to (system-flag)"
-msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð°Ñ€Ð³ÑƒÐ¼Ñнты Ð´Ð»Ñ system-flag"
-
-#: camel/camel-filter-search.c:401
-msgid "Invalid arguments to (user-tag)"
-msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð°Ñ€Ð³ÑƒÐ¼Ñнты Ð´Ð»Ñ user-tag"
-
-#: camel/camel-filter-search.c:549
-#, c-format
-msgid "Failed to create create child process '%s': %s"
-msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ Ð´Ð°Ñ‡Ñрчанага працÑÑу '%s': %s"
-
-#: camel/camel-filter-search.c:670 camel/camel-filter-search.c:678
-#, c-format
-msgid "Error executing filter search: %s: %s"
-msgstr "Памылка Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ цÑдалю: %s: %s"
-
-#: camel/camel-folder-search.c:355 camel/camel-folder-search.c:476
-#, c-format
-msgid ""
-"Cannot parse search expression: %s:\n"
-"%s"
-msgstr ""
-"Памылка Ñž Ñталым выразе \"%s\":\n"
-"%s"
-
-#: camel/camel-folder-search.c:365 camel/camel-folder-search.c:486
-#, c-format
-msgid ""
-"Error executing search expression: %s:\n"
-"%s"
-msgstr ""
-"Памылка пад Ñ‡Ð°Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð²Ñ‹Ñ€Ð°Ð·Ð° пошуку \"%s\":\n"
-"%s"
-
-#: camel/camel-folder-search.c:672 camel/camel-folder-search.c:705
-msgid "(match-all) requires a single bool result"
-msgstr "(Ñупадае ÑžÑе) патрабуе адзінага лÑгічнага выніку"
-
-#: camel/camel-folder-search.c:755
-msgid "(match-threads) not allowed inside match-all"
-msgstr ""
-
-#: camel/camel-folder-search.c:758 camel/camel-folder-search.c:762
-msgid "(match-threads) requires a match type string"
-msgstr ""
-
-#: camel/camel-folder-search.c:784
-#, fuzzy
-msgid "(match-threads) expects an array result"
-msgstr "(Ñупадае ÑžÑе) патрабуе адзінага лÑгічнага выніка"
-
-#: camel/camel-folder-search.c:790
-#, fuzzy
-msgid "(match-threads) requires the folder set"
-msgstr "(Ñупадае ÑžÑе) патрабуе адзінага лÑгічнага выніка"
-
-#: camel/camel-folder-search.c:879
-#, c-format
-msgid "Performing query on unknown header: %s"
-msgstr "ЗавÑршÑньне запыту на невÑдомым загалоўку: %s"
-
-#: camel/camel-folder.c:653
-#, c-format
-msgid "Unsupported operation: append message: for %s"
-msgstr "ÐпÑрацыÑ, ÑÐºÐ°Ñ Ð½Ðµ падтрымліваецца: даданьне паведамленьнÑ: Ð´Ð»Ñ %s"
-
-#: camel/camel-folder.c:1262
-#, c-format
-msgid "Unsupported operation: search by expression: for %s"
-msgstr "ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð½Ðµ падтрымліваецца: пошук выраза: Ð´Ð»Ñ %s"
-
-#: camel/camel-folder.c:1302
-#, c-format
-msgid "Unsupported operation: search by uids: for %s"
-msgstr "ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð½Ðµ падтрымліваецца: пошук па ідÑнтыфікатары карыÑтальніка: Ð´Ð»Ñ %s"
-
-#: camel/camel-folder.c:1416
-msgid "Moving messages"
-msgstr "ПерамÑшчÑньне паведамленьнÑÑž"
-
-#: camel/camel-folder.c:1416
-msgid "Copying messages"
-msgstr "КапіÑваньне паведамленьнÑÑž"
-
-#: camel/camel-folder.c:1665
-msgid "Learning junk"
-msgstr "Вывучыць Ñк лухту"
-
-#: camel/camel-folder.c:1682
-msgid "Learning non-junk"
-msgstr "Вывучыць Ñк не-лухту"
-
-#: camel/camel-folder.c:1701
-msgid "Filtering new message(s)"
-msgstr "ЦÑдлÑваньне новых паведамленьнÑÑž"
-
-#: camel/camel-gpg-context.c:735
-#, c-format
-msgid ""
-"Unexpected GnuPG status message encountered:\n"
-"\n"
-"%s"
-msgstr ""
-"СуÑÑ‚Ñ€Ñтае нечаканае паведамленьне аб Ñтане GnuPG:\n"
-"\n"
-"%s"
-
-#: camel/camel-gpg-context.c:749
-msgid "Failed to parse gpg userid hint."
-msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ– падказкі gpg userid."
-
-#: camel/camel-gpg-context.c:773
-msgid "Failed to parse gpg passphrase request."
-msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ– запыту парольнае фразы gpg."
-
-#: camel/camel-gpg-context.c:787
-#, c-format
-msgid ""
-"You need a passphrase to unlock the key for\n"
-"user: \"%s\""
-msgstr ""
-"Вам патрÑбны пароль каб разблÑкаваць ключ длÑ\n"
-"карыÑтальніка: \"%s\""
-
-#: camel/camel-gpg-context.c:804 camel/camel-gpg-context.c:1314
-#: camel/camel-gpg-context.c:1498 camel/camel-gpg-context.c:1589
-#: camel/camel-gpg-context.c:1697 camel/providers/nntp/camel-nntp-store.c:1231
-#: camel/providers/nntp/camel-nntp-store.c:1329 mail/mail-ops.c:705
-#: mail/mail-send-recv.c:611
-msgid "Cancelled."
-msgstr "СкаÑавана."
-
-#: camel/camel-gpg-context.c:822
-msgid "Failed to unlock secret key: 3 bad passphrases given."
-msgstr ""
-"Збой пад Ñ‡Ð°Ñ Ñ€Ð°Ð·Ð±Ð»ÑÐºÐ°Ð²Ð°Ð½ÑŒÐ½Ñ ÑакрÑтнага ключа: пазначана 3 некарÑÐºÑ‚Ð½Ñ‹Ñ "
-"Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ñ‹Ñ Ñ„Ñ€Ð°Ð·Ñ‹."
-
-#: camel/camel-gpg-context.c:828
-#, c-format
-msgid "Unexpected response from GnuPG: %s"
-msgstr "Ðечаканы адказ ад GnuPG: %s"
-
-#: camel/camel-gpg-context.c:880
-msgid "Failed to encrypt: No valid recipients specified."
-msgstr ""
-"Ðе атрымліваецца зашыфраваць гÑтае паведамленьне: ÐÑ Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ñ€ÑÐºÑ‚Ð½Ñ‹Ñ "
-"атрымоўцы."
-
-#: camel/camel-gpg-context.c:1157
-#, c-format
-msgid ""
-"Failed to GPG %s: %s\n"
-"\n"
-"%s"
-msgstr ""
-"Збой у GPG %s: %s\n"
-"\n"
-"%s"
-
-#: camel/camel-gpg-context.c:1162
-#, c-format
-msgid "Failed to GPG %s: %s\n"
-msgstr "Збой у GPG %s: %s\n"
-
-#: camel/camel-gpg-context.c:1275 camel/camel-smime-context.c:419
-#, c-format
-msgid "Could not generate signing data: %s"
-msgstr "Ðемагчыма згенераваць даньні Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ñ–Ñу: %s"
-
-#: camel/camel-gpg-context.c:1307 camel/camel-gpg-context.c:1762
-#: camel/camel-gpg-context.c:1813
-#, c-format
-msgid "Failed to execute gpg: %s"
-msgstr "Збой Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ gpg: %s"
-
-#: camel/camel-gpg-context.c:1331 camel/camel-gpg-context.c:1491
-#: camel/camel-gpg-context.c:1582 camel/camel-gpg-context.c:1605
-#: camel/camel-gpg-context.c:1690 camel/camel-gpg-context.c:1714
-#: camel/camel-gpg-context.c:1784 camel/camel-gpg-context.c:1835
-msgid "Failed to execute gpg."
-msgstr "Збой Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ gpg."
-
-#: camel/camel-gpg-context.c:1350
-msgid "This is a digitally signed message part"
-msgstr "ГÑÑ‚Ð°Ñ Ñ‡Ð°Ñтка Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð´Ð¿Ñ–Ñана Ñлектронным подпіÑам"
-
-#: camel/camel-gpg-context.c:1431 camel/camel-gpg-context.c:1437
-#: camel/camel-gpg-context.c:1443 camel/camel-smime-context.c:721
-#: camel/camel-smime-context.c:732 camel/camel-smime-context.c:739
-msgid "Cannot verify message signature: Incorrect message format"
-msgstr "Ðе атрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ Ð¿Ð¾Ð´Ð¿Ñ–Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ: не карÑктны фармат паведамленьнÑ"
-
-#: camel/camel-gpg-context.c:1477
-#, c-format
-msgid "Cannot verify message signature: could not create temp file: %s"
-msgstr ""
-"Ðе атрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ Ð¿Ð¾Ð´Ð¿Ñ–Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ: Ð½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð»Ð°ÑÑ Ñтварыць чаÑовы "
-"файл: %s"
-
-#: camel/camel-gpg-context.c:1565
-#, c-format
-msgid "Could not generate encrypting data: %s"
-msgstr "Ðемагчыма згенераваць ÐºÑ€Ñ‹Ð¿Ñ‚Ð°Ð²Ð°Ð½Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ–: %s"
-
-#: camel/camel-gpg-context.c:1623
-msgid "This is a digitally encrypted message part"
-msgstr "ГÑта ÐºÑ€Ñ‹Ð¿Ñ‚Ð°Ð²Ð°Ð½Ð°Ñ Ñ‡Ð°Ñтка паведамленьнÑ"
-
-#: camel/camel-gpg-context.c:1721 camel/camel-smime-context.c:995
-msgid "Encrypted content"
-msgstr "Крыптаваны зьмеÑÑ‚"
-
-#: camel/camel-gpg-context.c:1740
-msgid "Unable to parse message content"
-msgstr "Ðемагчыма разабраць зьмеÑÑ‚ паведамленьнÑ"
-
-#: camel/camel-lock-client.c:100
-#, c-format
-msgid "Cannot build locking helper pipe: %s"
-msgstr "Ðе атрымалаÑÑ Ñтварыць канал Ð´Ð»Ñ Ð±Ð»Ñкавальніка: %s"
-
-#: camel/camel-lock-client.c:113
-#, c-format
-msgid "Cannot fork locking helper: %s"
-msgstr "Ðе атрымліваецца запуÑьціць блÑкавальніка: %s"
-
-#: camel/camel-lock-client.c:191 camel/camel-lock-client.c:214
-#, c-format
-msgid "Could not lock '%s': protocol error with lock-helper"
-msgstr "Ðе атрымліваецца заблÑкаваць \"%s\": памылка пратакола з блÑкавальнікам"
-
-#: camel/camel-lock-client.c:204
-#, c-format
-msgid "Could not lock '%s'"
-msgstr "Ðе атрымалаÑÑ Ð·Ð°Ð±Ð»Ñкаваць \"%s\""
-
-#: camel/camel-lock.c:92 camel/camel-lock.c:113
-#, c-format
-msgid "Could not create lock file for %s: %s"
-msgstr "Ðе атрымалаÑÑ Ñтварыць файл блÑÐºÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð´Ð»Ñ %s: %s"
-
-#: camel/camel-lock.c:154
-#, c-format
-msgid "Timed out trying to get lock file on %s. Try again later."
-msgstr ""
-"перавышÑньне чаÑу пад Ñ‡Ð°Ñ Ñпробы заблÑкаваць файл %s. ПаÑпрабуйце ÑÑˆÑ‡Ñ Ñ€Ð°Ð· "
-"пазьней."
-
-#: camel/camel-lock.c:209
-#, c-format
-msgid "Failed to get lock using fcntl(2): %s"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ lock карыÑтаючыÑÑ fcntl(2): %s"
-
-#: camel/camel-lock.c:272
-#, c-format
-msgid "Failed to get lock using flock(2): %s"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ lock карыÑтаючыÑÑ flock(2): %s"
-
-#: camel/camel-movemail.c:107
-#, c-format
-msgid "Could not check mail file %s: %s"
-msgstr "ÐеатрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ паштовы файл %s: %s"
-
-#: camel/camel-movemail.c:120
-#, c-format
-msgid "Could not open mail file %s: %s"
-msgstr "Ðемагчыма адчыніць паштовы файл %s: %s"
-
-#: camel/camel-movemail.c:128
-#, c-format
-msgid "Could not open temporary mail file %s: %s"
-msgstr "Ðемагчыма адчыніць чаÑовы паштовы файл %s: %s"
-
-#: camel/camel-movemail.c:157
-#, c-format
-msgid "Failed to store mail in temp file %s: %s"
-msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
-
-#: camel/camel-movemail.c:187
-#, c-format
-msgid "Could not create pipe: %s"
-msgstr "ÐеатрымалаÑÑ Ñтварыць канал: %s"
-
-#: camel/camel-movemail.c:199
-#, c-format
-msgid "Could not fork: %s"
-msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð³Ð°Ð»Ñ–Ð½Ð°Ð²Ð°Ñ†ÑŒ (fork): %s"
-
-#: camel/camel-movemail.c:237
-#, c-format
-msgid "Movemail program failed: %s"
-msgstr "Збой праграмы перамÑшчÑÐ½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹: %s"
-
-#: camel/camel-movemail.c:238
-msgid "(Unknown error)"
-msgstr "(ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°)"
-
-#: camel/camel-movemail.c:261
-#, c-format
-msgid "Error reading mail file: %s"
-msgstr "Памылка пад Ñ‡Ð°Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð³Ð° файла: %s"
-
-#: camel/camel-movemail.c:272
-#, c-format
-msgid "Error writing mail temp file: %s"
-msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñовага паштовага файла: %s"
-
-#: camel/camel-movemail.c:465 camel/camel-movemail.c:532
-#, c-format
-msgid "Error copying mail temp file: %s"
-msgstr "Памылка капіÑÐ²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñовага паштовага файла: %s"
-
-#: camel/camel-multipart-encrypted.c:229 camel/camel-multipart-encrypted.c:244
-msgid "Failed to decrypt MIME part: protocol error"
-msgstr "Збой пад Ñ‡Ð°Ñ Ð´ÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñткі MIME: памылка пратакола"
-
-#: camel/camel-multipart-encrypted.c:257
-msgid "Failed to decrypt MIME part: invalid structure"
-msgstr "Збой пад Ñ‡Ð°Ñ Ð»ÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñткі MIME: некарÑÐºÑ‚Ð½Ð°Ñ Ñтруктура"
-
-#: camel/camel-multipart-signed.c:673 camel/camel-multipart-signed.c:724
-msgid "parse error"
-msgstr "памылка разбору"
-
-#: camel/camel-provider.c:59
-msgid "Virtual folder email provider"
-msgstr "ПравайдÑÑ€ віртуальных Ñ‚Ñчак Ñлектроннае пошты"
-
-#: camel/camel-provider.c:61
-msgid "For reading mail as a query of another set of folders"
-msgstr "Ð”Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ па запыце да іншага збору Ñ‚Ñчак"
-
-#: camel/camel-provider.c:172
-#, c-format
-msgid "Could not load %s: Module loading not supported on this system."
-msgstr ""
-"ÐеатрымалаÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ–Ñ†ÑŒ %s: Загрузка модулÑÑž не падтрымліваецца Ñž гÑтае "
-"ÑÑ‹ÑÑ‚Ñме."
-
-#: camel/camel-provider.c:181
-#, c-format
-msgid "Could not load %s: %s"
-msgstr "Ðемагчыма загрузіць %s: %s"
-
-#: camel/camel-provider.c:189
-#, c-format
-msgid "Could not load %s: No initialization code in module."
-msgstr "Ðемагчыма загрузіць %s: нÑма кода ініцыÑлізацыі Ñž модулі."
-
-#: camel/camel-provider.c:356 camel/camel-session.c:160
-#, c-format
-msgid "No provider available for protocol `%s'"
-msgstr "ПравайдÑÑ€ Ð´Ð»Ñ Ð¿Ñ€Ð°Ñ‚Ð°ÐºÐ¾Ð»Ð° \"%s\" недаÑтупны"
-
-#: camel/camel-sasl-anonymous.c:35
-msgid "Anonymous"
-msgstr "Ðнанімна"
-
-#: camel/camel-sasl-anonymous.c:37
-msgid "This option will connect to the server using an anonymous login."
-msgstr "Будзе адбывацца ананімнае (anonymous) далучÑньне да паÑлужніка"
-
-#: camel/camel-sasl-anonymous.c:112 camel/camel-sasl-plain.c:87
-msgid "Authentication failed."
-msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ Ð½Ðµ адбылаÑÑ."
-
-#: camel/camel-sasl-anonymous.c:121
-#, c-format
-msgid ""
-"Invalid email address trace information:\n"
-"%s"
-msgstr ""
-"ÐерÑчаіÑÐ½Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‚Ñ€Ð°Ñіроўкі паштовага адраÑу:\n"
-"%s"
-
-#: camel/camel-sasl-anonymous.c:133
-#, c-format
-msgid ""
-"Invalid opaque trace information:\n"
-"%s"
-msgstr ""
-"ÐерÑчаіÑÐ½Ð°Ñ Ð¹ Ð½ÐµÐ·Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ»Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‚Ñ€Ð°Ñіроўкі:\n"
-"%s"
-
-#: camel/camel-sasl-anonymous.c:145
-#, c-format
-msgid ""
-"Invalid trace information:\n"
-"%s"
-msgstr ""
-"ÐерÑчаіÑÐ½Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‚Ñ€Ð°Ñіроўкі:\n"
-"%s"
-
-#: camel/camel-sasl-cram-md5.c:35
-msgid "CRAM-MD5"
-msgstr "CRAM-MD5"
-
-#: camel/camel-sasl-cram-md5.c:37
-msgid ""
-"This option will connect to the server using a secure CRAM-MD5 password, if "
-"the server supports it."
-msgstr ""
-"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ– "
-"пратакола CRAM-MD5, калі паÑлужнік Ñго падтрымлівае."
-
-#: camel/camel-sasl-digest-md5.c:48
-msgid "DIGEST-MD5"
-msgstr "DIGEST-MD5"
-
-#: camel/camel-sasl-digest-md5.c:50
-msgid ""
-"This option will connect to the server using a secure DIGEST-MD5 password, "
-"if the server supports it."
-msgstr ""
-"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем зашыфраванага "
-"Ð¿Ð°Ñ€Ð¾Ð»Ñ DIGEST-MD5, калі паÑлужнік падтрымлівае Ñго."
-
-#: camel/camel-sasl-digest-md5.c:813
-msgid "Server challenge too long (>2048 octets)\n"
-msgstr "Ðдказ паÑлужніка завÑлікі (>2048 актÑтаў)\n"
-
-#: camel/camel-sasl-digest-md5.c:822
-msgid "Server challenge invalid\n"
-msgstr "Ðедапушчальны адказ паÑлужніка\n"
-
-#: camel/camel-sasl-digest-md5.c:828
-msgid "Server challenge contained invalid \"Quality of Protection\" token\n"
-msgstr "Ðдказ паÑлужніка утрымлівае недапушчальны талён \"ЯкаÑьць абароны\"\n"
-
-#: camel/camel-sasl-digest-md5.c:850
-msgid "Server response did not contain authorization data\n"
-msgstr "Ðдказ паÑлужніка Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ даньнÑÑž аўтарызацыі\n"
-
-#: camel/camel-sasl-digest-md5.c:868
-msgid "Server response contained incomplete authorization data\n"
-msgstr "Ðдказ паÑлужніка утрымлівае нÑÐ¿Ð¾ÑžÐ½Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– аўтарызацыі\n"
-
-#: camel/camel-sasl-digest-md5.c:878
-msgid "Server response does not match\n"
-msgstr "Памылковы адказ паÑлужніка\n"
-
-#: camel/camel-sasl-gssapi.c:48
-msgid "GSSAPI"
-msgstr "GSSAPI"
-
-#: camel/camel-sasl-gssapi.c:50
-msgid "This option will connect to the server using Kerberos 5 authentication."
-msgstr "ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем Kerberos 5."
-
-#: camel/camel-sasl-gssapi.c:148
-msgid ""
-"The specified mechanism is not supported by the provided credential, or is "
-"unrecognized by the implementation."
-msgstr ""
-"Пазначаны мÑханізм аўтарызацыі не падтрымліваецца прапанаванымі зьвеÑткамі "
-"Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ–, ці не прызнаны Ñ€ÑалізацыÑй."
-
-#: camel/camel-sasl-gssapi.c:153
-msgid "The provided target_name parameter was ill-formed."
-msgstr "Жаданы парамÑтар target_name мае кепÑкі выглÑд."
-
-#: camel/camel-sasl-gssapi.c:156
-msgid ""
-"The provided target_name parameter contained an invalid or unsupported type "
-"of name."
-msgstr ""
-"Жаданы парамÑтар target_name мане недапушчальны тып назвы, ці гÑÑ‚Ñ‹ тып не "
-"падтрымліваецца"
-
-#: camel/camel-sasl-gssapi.c:160
-msgid ""
-"The input_token contains different channel bindings to those specified via "
-"the input_chan_bindings parameter."
-msgstr ""
-
-#: camel/camel-sasl-gssapi.c:165
-msgid ""
-"The input_token contains an invalid signature, or a signature that could not "
-"be verified."
-msgstr ""
-
-#: camel/camel-sasl-gssapi.c:169
-msgid ""
-"The supplied credentials were not valid for context initiation, or the "
-"credential handle did not reference any credentials."
-msgstr ""
-
-#: camel/camel-sasl-gssapi.c:174
-msgid "The supplied context handle did not refer to a valid context."
-msgstr ""
-
-#: camel/camel-sasl-gssapi.c:177
-msgid "The consistency checks performed on the input_token failed."
-msgstr ""
-
-#: camel/camel-sasl-gssapi.c:180
-msgid "The consistency checks performed on the credential failed."
-msgstr ""
-
-#: camel/camel-sasl-gssapi.c:183
-msgid "The referenced credentials have expired."
-msgstr ""
-
-#: camel/camel-sasl-gssapi.c:189 camel/camel-sasl-gssapi.c:238
-#: camel/camel-sasl-gssapi.c:274 camel/camel-sasl-gssapi.c:289
-#: camel/camel-sasl-kerberos4.c:219
-#: camel/providers/imap/camel-imap-store.c:1236
-msgid "Bad authentication response from server."
-msgstr "КепÑкі адказ на аўтарызацыю з паÑлужніка."
-
-#: camel/camel-sasl-gssapi.c:213
-#, c-format
-msgid "Failed to resolve host `%s': %s"
-msgstr "Збой вызначÑÐ½ÑŒÐ½Ñ Ð²ÑƒÐ·Ð»Ð° \"%s\": %s"
-
-#: camel/camel-sasl-gssapi.c:299
-msgid "Unsupported security layer."
-msgstr "Узровень бÑÑьпекі не падтрымліваецца."
-
-#: camel/camel-sasl-kerberos4.c:41
-msgid "Kerberos 4"
-msgstr "Kerberos 4"
-
-#: camel/camel-sasl-kerberos4.c:43
-msgid "This option will connect to the server using Kerberos 4 authentication."
-msgstr ""
-"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем Ð´Ð»Ñ Ñ–Ð´Ñнтыфікацыі "
-"пратакола Kerberos 4."
-
-#: camel/camel-sasl-kerberos4.c:162
-#, c-format
-msgid ""
-"Could not get Kerberos ticket:\n"
-"%s"
-msgstr ""
-"ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ квіток Kerberos:\n"
-"%s"
-
-#: camel/camel-sasl-login.c:32
-msgid "Login"
-msgstr "Уваход"
-
-#: camel/camel-sasl-login.c:34 camel/camel-sasl-plain.c:34
-msgid "This option will connect to the server using a simple password."
-msgstr ""
-"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем незашыфраванага "
-"паролÑ."
-
-#: camel/camel-sasl-login.c:127
-msgid "Unknown authentication state."
-msgstr "ÐевÑдомы Ñтан аўтарызацыі."
-
-#: camel/camel-sasl-ntlm.c:31
-msgid "NTLM / SPA"
-msgstr "NTLM / SPA"
-
-#: camel/camel-sasl-ntlm.c:33
-msgid ""
-"This option will connect to a Windows-based server using NTLM / Secure "
-"Password Authentication."
-msgstr ""
-"ДалучÑньне да паÑлужніка заÑнаванага на Windows будзе адбывацца з "
-"выкарыÑтаньнем \"NTLM / Secure Password Authentication\"."
-
-#: camel/camel-sasl-plain.c:32
-msgid "PLAIN"
-msgstr "ЗВЫЧÐЙÐЫ ТЭКСТ"
-
-#: camel/camel-sasl-popb4smtp.c:36
-msgid "POP before SMTP"
-msgstr "POP перад SMTP"
-
-#: camel/camel-sasl-popb4smtp.c:38
-msgid "This option will authorise a POP connection before attempting SMTP"
-msgstr "Будзе адбывацца Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ POP да Ñпробы перадачы пошты па SMTP"
-
-#: camel/camel-sasl-popb4smtp.c:103
-msgid "POP Source URI"
-msgstr "URI крыніцы POP"
-
-#: camel/camel-sasl-popb4smtp.c:106
-msgid "POP Before SMTP auth using an unknown transport"
-msgstr "POP да SMTP аўтарызацыÑ, карыÑтаючыÑÑ Ð½ÐµÐ²Ñдомым транÑпартам"
-
-#: camel/camel-sasl-popb4smtp.c:111
-msgid "POP Before SMTP auth using a non-pop source"
-msgstr "POP да SMTP аўтарызацыÑ, карыÑтаючыÑÑ Ð½Ðµ POP крыніцай"
-
-#: camel/camel-search-private.c:114
-#, c-format
-msgid "Regular expression compilation failed: %s: %s"
-msgstr "Збой кампілÑцыі Ñталага выразу: %s: %s"
-
-#: camel/camel-service.c:271
-#, c-format
-msgid "URL '%s' needs a username component"
-msgstr "URL \"%s\" патрабуе кампанÑнт Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка"
-
-#: camel/camel-service.c:275
-#, c-format
-msgid "URL '%s' needs a host component"
-msgstr "URL \\\"%s\\\" патрабуе кампанÑнт вузла"
-
-#: camel/camel-service.c:279
-#, c-format
-msgid "URL '%s' needs a path component"
-msgstr "URL \\\"%s\\\" патрабуе кампанÑнт шлÑху"
-
-#: camel/camel-service.c:729
-#, c-format
-msgid "Resolving: %s"
-msgstr "ВызначÑньне: %s"
-
-#: camel/camel-service.c:760 camel/camel-service.c:884
-#, c-format
-msgid "Failure in name lookup: %s"
-msgstr "Памылка Ñž вызначÑньні назвы: %s"
-
-#: camel/camel-service.c:781 camel/camel-service.c:905
-#, c-format
-msgid "Host lookup failed: cannot create thread: %s"
-msgstr "Збой вызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€Ð°ÑÑ‹ вузла: не магчыма Ñтварыць ніць:·%s"
-
-#: camel/camel-service.c:794
-#, c-format
-msgid "Host lookup failed: %s: host not found"
-msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€Ð°Ñу вузла не адбылоÑÑ: %s: вузел адÑутнічае"
-
-#: camel/camel-service.c:797
-#, c-format
-msgid "Host lookup failed: %s: unknown reason"
-msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€Ð°Ñу вузла не адбылоÑÑ: %s: прычына невÑдома"
-
-#: camel/camel-service.c:851
-msgid "Resolving address"
-msgstr "ВызначÑньне адраÑу"
-
-#: camel/camel-service.c:920
-msgid "Host lookup failed: host not found"
-msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€Ð°Ñу вузла не адбылоÑÑ: адÑутнічае вузел"
-
-#: camel/camel-service.c:923
-msgid "Host lookup failed: unknown reason"
-msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€Ð°Ñу вузла не адбылоÑÑ: прычына невÑдома"
-
-#: camel/camel-session.c:282
-#, c-format
-msgid ""
-"Could not create directory %s:\n"
-"%s"
-msgstr ""
-"Ðемагчыма Ñтварыць каталёг %s:\n"
-"%s"
-
-#: camel/camel-smime-context.c:104
-#, c-format
-msgid "Enter security pass-phrase for `%s'"
-msgstr "Пазначце ÑакрÑтную фразу Ð´Ð»Ñ %s"
-
-#: camel/camel-smime-context.c:261
-#, c-format
-msgid "Cannot find certificate for '%s'"
-msgstr "Ðе атрымалаÑÑ Ð°Ð´ÑˆÑƒÐºÐ°Ñ†ÑŒ ÑÑртыфікат Ð´Ð»Ñ \"%s\"."
-
-#: camel/camel-smime-context.c:267
-msgid "Cannot create CMS message"
-msgstr "Ðемагчыма Ñтварыць CMS паведамленьне"
-
-#: camel/camel-smime-context.c:272
-msgid "Cannot create CMS signedData"
-msgstr ""
-
-#: camel/camel-smime-context.c:278
-#, fuzzy
-msgid "Cannot attach CMS signedData"
-msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
-
-#: camel/camel-smime-context.c:285
-#, fuzzy
-msgid "Cannot attach CMS data"
-msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
-
-#: camel/camel-smime-context.c:291
-msgid "Cannot create CMS SignerInfo"
-msgstr ""
-
-#: camel/camel-smime-context.c:297
-msgid "Cannot find cert chain"
-msgstr ""
-
-#: camel/camel-smime-context.c:303
-msgid "Cannot add CMS SigningTime"
-msgstr ""
-
-#: camel/camel-smime-context.c:325 camel/camel-smime-context.c:337
-#, fuzzy, c-format
-msgid "Encryption cert for '%s' does not exist"
-msgstr "СÑртыфікат ÑˆÑ‹Ñ„Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð´Ð»Ñ \"%s\" Ð½Ñ Ñ–Ñнуе."
-
-#: camel/camel-smime-context.c:344
-msgid "Cannot add SMIMEEncKeyPrefs attribute"
-msgstr ""
-
-#: camel/camel-smime-context.c:349
-msgid "Cannot add MS SMIMEEncKeyPrefs attribute"
-msgstr ""
-
-#: camel/camel-smime-context.c:354
-#, fuzzy
-msgid "Cannot add encryption certificate"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: camel/camel-smime-context.c:360
-msgid "Cannot add CMS SignerInfo"
-msgstr ""
-
-#: camel/camel-smime-context.c:430 camel/camel-smime-context.c:877
-#, fuzzy
-msgid "Cannot create encoder context"
-msgstr "Ðеатрымліваецца Ñтварыць кантÑкÑÑ‚ дÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ S/MIME"
-
-#: camel/camel-smime-context.c:436
-#, fuzzy
-msgid "Failed to add data to CMS encoder"
-msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
-
-#: camel/camel-smime-context.c:441 camel/camel-smime-context.c:894
-#, fuzzy
-msgid "Failed to encode data"
-msgstr "Збой аўтарызацыі.\n"
-
-#: camel/camel-smime-context.c:514
-msgid "Unverified"
-msgstr "Ðеправераны"
-
-#: camel/camel-smime-context.c:516
-msgid "Good signature"
-msgstr "Добры подпіÑ"
-
-#: camel/camel-smime-context.c:518
-msgid "Bad signature"
-msgstr "КепÑкі подпіÑ"
-
-#: camel/camel-smime-context.c:520
-msgid "Content tampered with or altered in transit"
-msgstr ""
-
-#: camel/camel-smime-context.c:522
-#, fuzzy
-msgid "Signing certificate not found"
-msgstr "СамападпіÑаны ÑÑртыфікат у ланцужку"
-
-#: camel/camel-smime-context.c:524
-#, fuzzy
-msgid "Signing certificate not trusted"
-msgstr "СÑртыфікат ненадзейны"
-
-#: camel/camel-smime-context.c:526
-msgid "Signature algorithm unknown"
-msgstr ""
-
-#: camel/camel-smime-context.c:528
-msgid "Signature algorithm unsupported"
-msgstr ""
-
-#: camel/camel-smime-context.c:530
-msgid "Malformed signature"
-msgstr "КепÑка Ñфармаваны подпіÑ"
-
-#: camel/camel-smime-context.c:532
-msgid "Processing error"
-msgstr "Памылка разбору"
-
-#: camel/camel-smime-context.c:569
-msgid "No signedData in signature"
-msgstr ""
-
-#: camel/camel-smime-context.c:576
-msgid "Digests missing from enveloped data"
-msgstr ""
-
-#: camel/camel-smime-context.c:589 camel/camel-smime-context.c:599
-#, fuzzy
-msgid "Cannot calculate digests"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/camel-smime-context.c:604
-#, fuzzy
-msgid "Cannot set message digests"
-msgstr "Ðемагчыма атрымаць паведамленьне %s: %s"
-
-#: camel/camel-smime-context.c:614 camel/camel-smime-context.c:619
-msgid "Certificate import failed"
-msgstr "Збой імпарту ÑÑртыфікату"
-
-#: camel/camel-smime-context.c:628
-msgid "Certificate only message, cannot verify certificates"
-msgstr ""
-
-#: camel/camel-smime-context.c:631
-msgid "Certificate only message, certificates imported and verified"
-msgstr ""
-
-#: camel/camel-smime-context.c:635
-#, fuzzy
-msgid "Cannot find signature digests"
-msgstr "РÑдагаваць подпіÑ"
-
-#: camel/camel-smime-context.c:651
-#, c-format
-msgid "Signer: %s <%s>: %s\n"
-msgstr "ÐÑоба:·%s·<%s>:·%s\n"
-
-#: camel/camel-smime-context.c:752
-msgid "Decoder failed"
-msgstr "Збой дÑкодÑру"
-
-#: camel/camel-smime-context.c:804
-#, c-format
-msgid "Cannot find certificate for `%s'"
-msgstr "Ðе атрымалаÑÑ Ð°Ð´ÑˆÑƒÐºÐ°Ñ†ÑŒ ÑÑртыфікат Ð´Ð»Ñ \"%s\"."
-
-#: camel/camel-smime-context.c:811
-msgid "Cannot find common bulk encryption algorithm"
-msgstr "Ðе атрымалаÑÑ Ð°Ð´ÑˆÑƒÐºÐ°Ñ†ÑŒ агульны альгарытм крыптаваньнÑ."
-
-#. PORT_GetError(); ??
-#: camel/camel-smime-context.c:820
-msgid "Cannot allocate slot for encryption bulk key"
-msgstr ""
-
-#: camel/camel-smime-context.c:831
-msgid "Cannot create CMS Message"
-msgstr "Ðемагчыма Ñтварыць CMS паведамленьне"
-
-#: camel/camel-smime-context.c:837
-#, fuzzy
-msgid "Cannot create CMS EnvelopedData"
-msgstr "Ðемагчыма адкрыць паведамленьне"
-
-#: camel/camel-smime-context.c:843
-#, fuzzy
-msgid "Cannot attach CMS EnvelopedData"
-msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
-
-#: camel/camel-smime-context.c:849
-#, fuzzy
-msgid "Cannot attach CMS data object"
-msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
-
-#: camel/camel-smime-context.c:858
-#, fuzzy
-msgid "Cannot create CMS RecipientInfo"
-msgstr "Ðемагчыма адкрыць паведамленьне"
-
-#: camel/camel-smime-context.c:863
-msgid "Cannot add CMS RecipientInfo"
-msgstr ""
-
-#: camel/camel-smime-context.c:888
-msgid "Failed to add data to encoder"
-msgstr "Збой Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ Ð´Ð°Ð½ÑŒÐ½ÑÑž да кодÑру"
-
-#: camel/camel-smime-context.c:975
-#, c-format
-msgid "Decoder failed, error %d"
-msgstr ""
-
-#: camel/camel-smime-context.c:982
-msgid "S/MIME Decrypt: No encrypted content found"
-msgstr ""
-
-#: camel/camel-smime-context.c:1009
-msgid "import keys: unimplemented"
-msgstr "import·keys: не Ñ€Ñалізавана"
-
-#: camel/camel-smime-context.c:1017
-msgid "export keys: unimplemented"
-msgstr ""
-
-#: camel/camel-store.c:213
-msgid "Cannot get folder: Invalid operation on this store"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ñž гÑтым Ñховішчы"
-
-#: camel/camel-store.c:243
-#, c-format
-msgid "Cannot create folder `%s': folder exists"
-msgstr "Ðе атрымалаÑÑ Ñтварыць Ñ‚Ñчку \"%s\": Ñ‚Ñчка Ñ–Ñнуе"
-
-#: camel/camel-store.c:297
-msgid "Cannot create folder: Invalid operation on this store"
-msgstr "ÐеатрымалаÑÑ Ñтварыць Ñ‚Ñчку: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ñž гÑтым Ñховішчы"
-
-#: camel/camel-store.c:325
-#, fuzzy, c-format
-msgid "Cannot create folder: %s: folder exists"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/camel-store.c:389 camel/camel-vee-store.c:351
-#, c-format
-msgid "Cannot delete folder: %s: Invalid operation"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/camel-store.c:439 camel/camel-vee-store.c:388
-#: camel/providers/local/camel-maildir-store.c:232
-#, c-format
-msgid "Cannot rename folder: %s: Invalid operation"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/camel-store.c:777
-msgid "Trash"
-msgstr "Сьметніца"
-
-#: camel/camel-store.c:779 mail/em-filter-i18n.h:35
-#: mail/mail-config.glade.h:95 ui/evolution-mail-message.xml.h:48
-msgid "Junk"
-msgstr "Лухта"
-
-#: camel/camel-tcp-stream-openssl.c:568
-msgid "Unable to get issuer's certificate"
-msgstr "Ðемагчыма атрымаць ÑÑртыфікат выдаўца"
-
-#: camel/camel-tcp-stream-openssl.c:570
-msgid "Unable to get Certificate Revocation List"
-msgstr "Ðе атрымліваецца атрымаць ÑÑŒÐ¿Ñ–Ñ Ð°Ð½ÑƒÐ»Ñваных ÑÑртыфікатаў"
-
-#: camel/camel-tcp-stream-openssl.c:572
-msgid "Unable to decrypt certificate signature"
-msgstr "Ðемагчыма дÑкадаваць Ð¿Ð¾Ð´Ð¿Ñ–Ñ ÑÑртыфікату"
-
-#: camel/camel-tcp-stream-openssl.c:574
-msgid "Unable to decrypt Certificate Revocation List signature"
-msgstr "Ðе атрымліваецца дÑкадаваць Ð¿Ð¾Ð´Ð¿Ñ–Ñ ÑьпіÑу анулÑваных ÑÑртыфікатаў"
-
-#: camel/camel-tcp-stream-openssl.c:576
-msgid "Unable to decode issuer's public key"
-msgstr "Ðемагчыма дÑкадаваць публічны ключ выдаўца"
-
-#: camel/camel-tcp-stream-openssl.c:578
-msgid "Certificate signature failure"
-msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ ÑÑртыфікату памылковы"
-
-#: camel/camel-tcp-stream-openssl.c:580
-msgid "Certificate Revocation List signature failure"
-msgstr "Памылка у подпіÑе ÑьпіÑа анулÑваных ÑÑртыфікатаў"
-
-#: camel/camel-tcp-stream-openssl.c:582
-msgid "Certificate not yet valid"
-msgstr "СÑртыфікат ÑÑˆÑ‡Ñ Ð½Ðµ зацьверджаны"
-
-#: camel/camel-tcp-stream-openssl.c:584
-msgid "Certificate has expired"
-msgstr "СÑртыфікат Ð½Ñ Ð¼Ð°Ðµ Ñілы"
-
-#: camel/camel-tcp-stream-openssl.c:586
-msgid "CRL not yet valid"
-msgstr "CRL ÑÑˆÑ‡Ñ Ð½Ðµ зацьверджаны"
-
-#: camel/camel-tcp-stream-openssl.c:588
-msgid "CRL has expired"
-msgstr "CRL згубіў Ñілу"
-
-#: camel/camel-tcp-stream-openssl.c:593
-msgid "Error in CRL"
-msgstr "Памылка у CRL"
-
-#: camel/camel-tcp-stream-openssl.c:595
-msgid "Out of memory"
-msgstr "Ðе хапае памÑці"
-
-#: camel/camel-tcp-stream-openssl.c:597
-msgid "Zero-depth self-signed certificate"
-msgstr "СамападпіÑаны ÑÑртыфікат нулÑвой глыбіні"
-
-#: camel/camel-tcp-stream-openssl.c:599
-msgid "Self-signed certificate in chain"
-msgstr "СамападпіÑаны ÑÑртыфікат у ланцужку"
-
-#: camel/camel-tcp-stream-openssl.c:601
-msgid "Unable to get issuer's certificate locally"
-msgstr "Ðемагчыма атрымаць ÑÑртыфікат выдаўца Ñž адлучаным Ñтане"
-
-#: camel/camel-tcp-stream-openssl.c:603
-msgid "Unable to verify leaf signature"
-msgstr "Ðемагчыма праверыць подпіÑ"
-
-#: camel/camel-tcp-stream-openssl.c:605
-msgid "Certificate chain too long"
-msgstr "Ланцужок ÑÑртыфікату завÑлікі"
-
-#: camel/camel-tcp-stream-openssl.c:607
-msgid "Certificate Revoked"
-msgstr "СÑртыфікат анулÑваны"
-
-#: camel/camel-tcp-stream-openssl.c:609
-msgid "Invalid Certificate Authority (CA)"
-msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфікату (CA)"
-
-#: camel/camel-tcp-stream-openssl.c:611
-msgid "Path length exceeded"
-msgstr "Перавышана Ð´Ð°ÑžÐ¶Ñ‹Ð½Ñ ÑˆÐ»Ñху"
-
-#: camel/camel-tcp-stream-openssl.c:613
-msgid "Invalid purpose"
-msgstr "ÐŸÐ°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ Ð¼Ñта"
-
-#: camel/camel-tcp-stream-openssl.c:615
-msgid "Certificate untrusted"
-msgstr "СÑртыфікат ненадзейны"
-
-#: camel/camel-tcp-stream-openssl.c:617
-msgid "Certificate rejected"
-msgstr "СÑртыфікат абвергнуты"
-
-#: camel/camel-tcp-stream-openssl.c:620
-msgid "Subject/Issuer mismatch"
-msgstr "ÐеÑупадзеньне ТÑма/Выдавец"
-
-#: camel/camel-tcp-stream-openssl.c:622
-msgid "AKID/SKID mismatch"
-msgstr "ÐеÑупадзеньне AKID/SKID"
-
-#: camel/camel-tcp-stream-openssl.c:624
-msgid "AKID/Issuer serial mismatch"
-msgstr "ПаÑьлÑдоўнае неÑупадзеньне AKID/Выдавец"
-
-#: camel/camel-tcp-stream-openssl.c:626
-msgid "Key usage does not support certificate signing"
-msgstr "ВыкарыÑтаньне ключа не падтрымлівае Ð¿Ð¾Ð´Ð¿Ñ–Ñ ÑÑртыфікату"
-
-#: camel/camel-tcp-stream-openssl.c:629
-msgid "Error in application verification"
-msgstr "Памылка Ñž даÑтаÑаваньні праверкі ÑапраўднаÑьці"
-
-#: camel/camel-tcp-stream-openssl.c:696 camel/camel-tcp-stream-ssl.c:826
-#, c-format
-msgid ""
-"Issuer: %s\n"
-"Subject: %s\n"
-"Fingerprint: %s\n"
-"Signature: %s"
-msgstr ""
-"Выдавец: %s\n"
-"ТÑма: %s\n"
-"Ðдбітак пальца: %s\n"
-"ПодпіÑ: %s"
-
-#: camel/camel-tcp-stream-openssl.c:702 camel/camel-tcp-stream-ssl.c:832
-msgid "GOOD"
-msgstr "ДОБРÐ"
-
-#: camel/camel-tcp-stream-openssl.c:702 camel/camel-tcp-stream-ssl.c:832
-msgid "BAD"
-msgstr "КЕПСКÐ"
-
-#: camel/camel-tcp-stream-openssl.c:704
-#, c-format
-msgid ""
-"Bad certificate from %s:\n"
-"\n"
-"%s\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to accept anyway?"
-msgstr ""
-"ДрÑнны ÑÑртыфікат ад %s:\n"
-"\n"
-"%s\n"
-"\n"
-"%s\n"
-"\n"
-"УÑÑ‘ роўна жадаеце прынÑць ?"
-
-#. construct our user prompt
-#: camel/camel-tcp-stream-ssl.c:836
-#, c-format
-msgid ""
-"SSL Certificate check for %s:\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to accept?"
-msgstr ""
-"СÑртыфікат SSL правераны Ð´Ð»Ñ %s:\n"
-"\n"
-"%s\n"
-"\n"
-"Жадаеце прынÑць?"
-
-#: camel/camel-tcp-stream-ssl.c:880
-#, c-format
-msgid ""
-"Certificate problem: %s\n"
-"Issuer: %s"
-msgstr ""
-"Праблема з ÑÑртыфікатам: %s\n"
-"Выдавец: %s"
-
-#: camel/camel-tcp-stream-ssl.c:932
-#, c-format
-msgid ""
-"Bad certificate domain: %s\n"
-"Issuer: %s"
-msgstr ""
-"ДрÑнны дамÑн ÑÑртыфікату: %s\n"
-"Выдавец: %s"
-
-#: camel/camel-tcp-stream-ssl.c:950
-#, c-format
-msgid ""
-"Certificate expired: %s\n"
-"Issuer: %s"
-msgstr ""
-"СÑртыфікат ÑаÑтарÑÑž: %s\n"
-"Выдавец: %s"
-
-#: camel/camel-tcp-stream-ssl.c:967
-#, c-format
-msgid ""
-"Certificate revocation list expired: %s\n"
-"Issuer: %s"
-msgstr ""
-"Ð¡ÑŒÐ¿Ñ–Ñ Ð²ÑÑ€Ñ‚Ð°Ð½ÑŒÐ½Ñ ÑÑртыфікату ÑаÑтарÑÑž: %s\n"
-"Выдавец: %s"
-
-#: camel/camel-url.c:292
-#, c-format
-msgid "Could not parse URL `%s'"
-msgstr "Ðемагчыма разабраць URL \"%s\""
-
-#: camel/camel-vee-folder.c:633
-#, c-format
-msgid "Error storing `%s': %s"
-msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ `%s': %s"
-
-#: camel/camel-vee-folder.c:675
-#, c-format
-msgid "No such message %s in %s"
-msgstr "Паведамленьне %s адÑутнічае Ñž %s"
-
-#: camel/camel-vee-folder.c:841 camel/camel-vee-folder.c:847
-msgid "Cannot copy or move messages into a Virtual Folder"
-msgstr "Ðемагчыма капіÑваць ці перамÑÑьціць паведамленьні у віртуальную Ñ‚Ñчку"
-
-#: camel/camel-vee-store.c:374
-#, c-format
-msgid "Cannot delete folder: %s: No such folder"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ñ‚Ñчка адÑутнічае"
-
-#: camel/camel-vee-store.c:396
-#, c-format
-msgid "Cannot rename folder: %s: No such folder"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ñ‚Ñчка адÑутнічае"
-
-#: camel/camel-vtrash-folder.c:44
-#, fuzzy
-msgid "Cannot copy messages to the Trash folder"
-msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
-
-#: camel/camel-vtrash-folder.c:46
-msgid "Cannot copy messages to the Junk folder"
-msgstr "Ðемагчыма ÑкапіÑваць паведамленьні Ñž Ñ‚Ñчку лухты"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:53
-#: camel/providers/imap4/camel-imap4-provider.c:35
-msgid "Checking for new mail"
-msgstr "Праверка новае пошты"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:55
-#: camel/providers/imap/camel-imap-provider.c:45
-#: camel/providers/imap4/camel-imap4-provider.c:37
-msgid "Check for new messages in all folders"
-msgstr "Праверка новае пошты ўва ÑžÑÑ–Ñ… Ñ‚Ñчках"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:59
-msgid "Apply filters to new messages in Inbox on this server"
-msgstr ""
-"Ужыць цÑдалі да уÑÑ–Ñ… новых паведамленьнÑÑž у Ñ‚Ñчцы \"ÐтрыманыÑ\" (INBOX) на "
-"гÑтым паÑлужніку"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:62
-#: camel/providers/imap/camel-imap-provider.c:70
-#, fuzzy
-msgid "Automatically synchronize remote mail locally"
-msgstr "Ðўтаматычна правÑраць пошту кожныÑ"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:66
-#, fuzzy
-msgid "Address Book And Calendar"
-msgstr "Кніга адраÑаў"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:69
-msgid "Post Office Agent SOAP Port:"
-msgstr ""
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:83
-msgid "Novell GroupWise"
-msgstr "Novell GroupWise"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:85
-msgid "For accessing Novell Groupwise servers"
-msgstr ""
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:100
-#: camel/providers/imap/camel-imap-provider.c:93
-#: camel/providers/imap4/camel-imap4-provider.c:70
-#: camel/providers/imapp/camel-imapp-provider.c:65
-#: camel/providers/nntp/camel-nntp-provider.c:71
-#: camel/providers/pop3/camel-pop3-provider.c:71 mail/mail-config.glade.h:108
-msgid "Password"
-msgstr "Пароль"
-
-#: camel/providers/groupwise/camel-groupwise-provider.c:102
-#: camel/providers/imap/camel-imap-provider.c:95
-#: camel/providers/imapp/camel-imapp-provider.c:67
-msgid "This option will connect to the IMAP server using a plaintext password."
-msgstr ""
-"ДалучÑньне да IMAP паÑлужніка будзе адбывацца з выкарыÑтаньнем "
-"незашыфраванага паролÑ."
-
-#: camel/providers/groupwise/camel-gw-listener.c:316
-#: camel/providers/groupwise/camel-gw-listener.c:339
-msgid "Checklist"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡ÑньнÑ"
-
-#: camel/providers/imap/camel-imap-command.c:218
-#: camel/providers/imap/camel-imap-command.c:257
-#: camel/providers/imap/camel-imap-command.c:447
-#: camel/providers/imap/camel-imap-store.c:3191
-msgid "Operation cancelled"
-msgstr "ДзеÑньне адмененае"
-
-#: camel/providers/imap/camel-imap-command.c:302
-#: camel/providers/imap/camel-imap-store.c:3194
-#, c-format
-msgid "Server unexpectedly disconnected: %s"
-msgstr "ПаÑлужнік нечакана адключыўÑÑ: %s"
-
-#: camel/providers/imap/camel-imap-command.c:303
-#: camel/providers/imap/camel-imap-command.c:400
-#: camel/providers/imap4/camel-imap4-store.c:282
-#: camel/providers/pop3/camel-pop3-store.c:543
-#: camel/providers/pop3/camel-pop3-store.c:550
-#: camel/providers/pop3/camel-pop3-store.c:556 shell/e-shell.c:1124
-msgid "Unknown error"
-msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
-
-#. for imap ALERT codes, account user@host
-#: camel/providers/imap/camel-imap-command.c:320
-#, c-format
-msgid ""
-"Alert from IMAP server %s@%s:\n"
-"%s"
-msgstr ""
-"Сыгнал ад паÑлужніка IMAP %s@%s:\n"
-"%s"
-
-#: camel/providers/imap/camel-imap-command.c:389
-#, c-format
-msgid "Unexpected response from IMAP server: %s"
-msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
-
-#: camel/providers/imap/camel-imap-command.c:399
-#, c-format
-msgid "IMAP command failed: %s"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/imap/camel-imap-command.c:457
-msgid "Server response ended too soon."
-msgstr "ЗаўчаÑны канец адказу паÑлужніка."
-
-#: camel/providers/imap/camel-imap-command.c:649
-#, c-format
-msgid "IMAP server response did not contain %s information"
-msgstr "Ðдказ IMAP паÑлужніка Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ інфармацыю пра %s"
-
-#: camel/providers/imap/camel-imap-command.c:685
-#, c-format
-msgid "Unexpected OK response from IMAP server: %s"
-msgstr "Ðечаканы адказ \"Добра\" ад IMAP паÑлужніка: %s"
-
-#: camel/providers/imap/camel-imap-folder.c:226
-#, c-format
-msgid "Could not create directory %s: %s"
-msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
-
-#: camel/providers/imap/camel-imap-folder.c:245
-#, c-format
-msgid "Could not load summary for %s"
-msgstr "Ðемагчыма загрузіць Ð°Ð³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі Ð´Ð»Ñ %s"
-
-#: camel/providers/imap/camel-imap-folder.c:330
-msgid "Folder was destroyed and recreated on server."
-msgstr "ТÑчка была зьнішчана Ñ– нанава Ñтворана на паÑлужніку."
-
-#. Check UIDs and flags of all messages we already know of.
-#: camel/providers/imap/camel-imap-folder.c:573
-msgid "Scanning for changed messages"
-msgstr "Сканаваньне зьмененых паведамленьнÑÑž"
-
-#: camel/providers/imap/camel-imap-folder.c:1938
-#, c-format
-msgid "Unable to retrieve message: %s"
-msgstr "Ðемагчыма атрымаць паведамленьне: %s"
-
-#: camel/providers/imap/camel-imap-folder.c:1975
-#, c-format
-msgid ""
-"Cannot get message: %s\n"
-" %s"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s\n"
-" %s"
-
-#: camel/providers/imap/camel-imap-folder.c:1975
-#: camel/providers/local/camel-maildir-folder.c:244
-#: camel/providers/local/camel-mbox-folder.c:418
-#: camel/providers/local/camel-mh-folder.c:202
-msgid "No such message"
-msgstr "ÐÑма гÑткага паведамленьнÑ"
-
-#: camel/providers/imap/camel-imap-folder.c:2017
-#: camel/providers/imap/camel-imap-folder.c:2620
-#: camel/providers/nntp/camel-nntp-folder.c:220
-msgid "This message is not currently available"
-msgstr "ГÑтае паведамленьне Ñž бÑгучы момант недаÑтупна"
-
-#: camel/providers/imap/camel-imap-folder.c:2283
-#: camel/providers/imap/camel-imap-folder.c:2353
-msgid "Fetching summary information for new messages"
-msgstr "Ðтрыманьне агульнае інфармацыі Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… паведамленьнÑÑž"
-
-#: camel/providers/imap/camel-imap-folder.c:2461
-#, c-format
-msgid "Incomplete server response: no information provided for message %d"
-msgstr ""
-
-#: camel/providers/imap/camel-imap-folder.c:2469
-#, c-format
-msgid "Incomplete server response: no UID provided for message %d"
-msgstr ""
-
-#: camel/providers/imap/camel-imap-folder.c:2482
-#, c-format
-msgid "Unexpected server response: Identical UIDs provided for messages %d and %d"
-msgstr ""
-
-#: camel/providers/imap/camel-imap-folder.c:2658
-msgid "Could not find message body in FETCH response."
-msgstr "Ðемагчыма адшукаць цела Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž адказе FETCH."
-
-#: camel/providers/imap/camel-imap-message-cache.c:155
-#, c-format
-msgid "Could not open cache directory: %s"
-msgstr "Ðемагчыма адкрыць каталёг кÑшу: %s"
-
-#: camel/providers/imap/camel-imap-message-cache.c:252
-#: camel/providers/imap/camel-imap-message-cache.c:309
-#: camel/providers/imap/camel-imap-message-cache.c:340
-#: camel/providers/imap/camel-imap-message-cache.c:372
-#, c-format
-msgid "Failed to cache message %s: %s"
-msgstr "Збой кÑÑˆÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %s: %s"
-
-#: camel/providers/imap/camel-imap-message-cache.c:417
-#, c-format
-msgid "Failed to cache %s: %s"
-msgstr "Збой у кÑшы %s: %s"
-
-#: camel/providers/imap/camel-imap-provider.c:43
-#, fuzzy
-msgid "Checking for New Mail"
-msgstr "Праверка новае пошты"
-
-#: camel/providers/imap/camel-imap-provider.c:48
-#, fuzzy
-msgid "Connection to Server"
-msgstr "ДалучÑньне да паÑлужніка..."
-
-#: camel/providers/imap/camel-imap-provider.c:50
-#, fuzzy
-msgid "Use custom command to connect to server"
-msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка LDAP"
-
-#: camel/providers/imap/camel-imap-provider.c:52
-msgid "Command:"
-msgstr "Загад:"
-
-#: camel/providers/imap/camel-imap-provider.c:55
-#: camel/providers/imap4/camel-imap4-provider.c:40
-#: camel/providers/nntp/camel-nntp-provider.c:41
-msgid "Folders"
-msgstr "ТÑчкі"
-
-#: camel/providers/imap/camel-imap-provider.c:57
-#: camel/providers/imap4/camel-imap4-provider.c:42
-msgid "Show only subscribed folders"
-msgstr "Паказваць толькі Ð·Ð°Ð¿Ñ‹Ñ‚Ð°Ð½Ñ‹Ñ Ñ‚Ñчкі"
-
-#: camel/providers/imap/camel-imap-provider.c:59
-#: camel/providers/imap4/camel-imap4-provider.c:44
-msgid "Override server-supplied folder namespace"
-msgstr "Перавызначыць прапанаваную паÑлужнікам праÑтору назваў Ð´Ð»Ñ Ñ‚Ñчак"
-
-#: camel/providers/imap/camel-imap-provider.c:61
-#: camel/providers/imap4/camel-imap4-provider.c:46
-msgid "Namespace"
-msgstr "ПраÑтора назваў"
-
-#: camel/providers/imap/camel-imap-provider.c:64
-msgid "Apply filters to new messages in INBOX on this server"
-msgstr ""
-"Ужыць цÑдалі да уÑÑ–Ñ… новых паведамленьнÑÑž у Ñ‚Ñчцы \"ÐтрыманыÑ\" (INBOX) на "
-"гÑтым паÑлужніку"
-
-#: camel/providers/imap/camel-imap-provider.c:66
-#, fuzzy
-msgid "Check new messages for Junk contents"
-msgstr "Праверка новае пошты ўва ÑžÑÑ–Ñ… Ñ‚Ñчках"
-
-#: camel/providers/imap/camel-imap-provider.c:68
-#, fuzzy
-msgid "Only check for Junk messages in the INBOX folder"
-msgstr "Праверка новае пошты ўва ÑžÑÑ–Ñ… Ñ‚Ñчках"
-
-#: camel/providers/imap/camel-imap-provider.c:76
-msgid "IMAP"
-msgstr "IMAP"
-
-#: camel/providers/imap/camel-imap-provider.c:78
-msgid "For reading and storing mail on IMAP servers."
-msgstr "Ð”Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ñ– Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ на паÑлужніках IMAP."
-
-#: camel/providers/imap/camel-imap-store.c:424
-#: camel/providers/imap4/camel-imap4-store.c:176
-#, c-format
-msgid "IMAP server %s"
-msgstr "ПаÑлужнік IMAP %s"
-
-#: camel/providers/imap/camel-imap-store.c:426
-#: camel/providers/imap4/camel-imap4-store.c:178
-#, c-format
-msgid "IMAP service for %s on %s"
-msgstr "паÑлуга IMAP Ð´Ð»Ñ %s на %s"
-
-#: camel/providers/imap/camel-imap-store.c:547
-#: camel/providers/imap/camel-imap-store.c:567
-#: camel/providers/imap4/camel-imap4-store.c:213
-#: camel/providers/imap4/camel-imap4-store.c:229
-#: camel/providers/imapp/camel-imapp-store.c:231
-#: camel/providers/nntp/camel-nntp-store.c:209
-#: camel/providers/pop3/camel-pop3-store.c:175
-#: camel/providers/smtp/camel-smtp-transport.c:269
-#: camel/providers/smtp/camel-smtp-transport.c:285
-#, c-format
-msgid "Could not connect to %s (port %d): %s"
-msgstr "Ðемагчыма далучыцца да %s (порт %d): %s"
-
-#: camel/providers/imap/camel-imap-store.c:549
-#: camel/providers/imap4/camel-imap4-store.c:215
-#: camel/providers/pop3/camel-pop3-store.c:177
-#: camel/providers/smtp/camel-smtp-transport.c:271
-msgid "SSL unavailable"
-msgstr "TLS адÑутнічае"
-
-#: camel/providers/imap/camel-imap-store.c:564
-#: camel/providers/imap/camel-imap-store.c:841
-#: camel/providers/imap4/camel-imap4-store.c:226
-#: camel/providers/imapp/camel-imapp-store.c:228
-#: camel/providers/nntp/camel-nntp-store.c:206
-#: camel/providers/nntp/camel-nntp-store.c:224
-#: camel/providers/pop3/camel-pop3-store.c:192
-msgid "Connection cancelled"
-msgstr "ДалучÑньне адмененае"
-
-#: camel/providers/imap/camel-imap-store.c:675
-#: camel/providers/imap/camel-imap-store.c:706
-#: camel/providers/imap4/camel-imap4-store.c:281
-#, c-format
-msgid "Failed to connect to IMAP server %s in secure mode: %s"
-msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка IMAP %s у Ñ€Ñжыме бÑÑьпекі: %s"
-
-#: camel/providers/imap/camel-imap-store.c:676
-#: camel/providers/pop3/camel-pop3-store.c:233
-msgid "SSL/TLS extension not supported."
-msgstr "ПашырÑньне SSL/TLS не падтрымліваецца."
-
-#: camel/providers/imap/camel-imap-store.c:707
-#: camel/providers/pop3/camel-pop3-store.c:274
-msgid "SSL negotiations failed"
-msgstr "Збой ÑƒÐ·Ð³Ð°Ð´Ð½ÐµÐ½ÑŒÐ½Ñ SSL"
-
-#: camel/providers/imap/camel-imap-store.c:844
-#, c-format
-msgid "Could not connect with command \"%s\": %s"
-msgstr "Ðемагчыма далучыцца з камандай \"%s\" : %s"
-
-#: camel/providers/imap/camel-imap-store.c:1268
-#, c-format
-msgid "IMAP server %s does not support requested authentication type %s"
-msgstr "ПаÑлужнік IMAP %s не падтрымлівае запатрабаваны тып ідÑнтыфікацыі %s"
-
-#: camel/providers/imap/camel-imap-store.c:1278
-#: camel/providers/smtp/camel-smtp-transport.c:486
-#, c-format
-msgid "No support for authentication type %s"
-msgstr "ІдÑÐ½Ñ‚Ñ‹Ñ„Ñ–ÐºÐ°Ñ†Ñ‹Ñ Ñ‚Ñ‹Ð¿Ð° %s не падтрымліваецца"
-
-#: camel/providers/imap/camel-imap-store.c:1301
-#: camel/providers/imapp/camel-imapp-store.c:344
-#, c-format
-msgid "%sPlease enter the IMAP password for %s@%s"
-msgstr "%sКалі лаÑка, увÑдзіце пароль IMAP Ð´Ð»Ñ %s@%s"
-
-#: camel/providers/imap/camel-imap-store.c:1315
-msgid "You didn't enter a password."
-msgstr "Вы не пазначылі пароль."
-
-#: camel/providers/imap/camel-imap-store.c:1344
-#, c-format
-msgid ""
-"Unable to authenticate to IMAP server.\n"
-"%s\n"
-"\n"
-msgstr ""
-"Ðемагчыма аўтарызавацца на паÑлужніку IMAP.\n"
-"%s\n"
-"\n"
-
-#: camel/providers/imap/camel-imap-store.c:1863
-#: camel/providers/imap/camel-imap-store.c:2053
-#, c-format
-msgid "No such folder %s"
-msgstr "ТÑчка %s адÑутнічае "
-
-#: camel/providers/imap/camel-imap-store.c:1881
-#: camel/providers/imap/camel-imap-store.c:2259
-#: camel/providers/imap4/camel-imap4-store.c:765
-#, fuzzy, c-format
-msgid "The folder name \"%s\" is invalid because it contains the character \"%c\""
-msgstr "Ðазва Ñ‚Ñчкі \"%s\" памылковаÑ, таму што утрымлівае Ñымбаль \"%c\""
-
-#: camel/providers/imap/camel-imap-store.c:1939
-#: camel/providers/imap/camel-imap-store.c:2320
-msgid "The parent folder is not allowed to contain subfolders"
-msgstr "ГÑÑ‚Ð°Ñ Ñ‚Ñчка Ð½Ñ Ð¼Ð¾Ð¶Ð° утрымліваць падтÑчкі"
-
-#: camel/providers/imap/camel-imap-store.c:1994
-#: camel/providers/local/camel-maildir-store.c:139
-#: camel/providers/local/camel-mbox-store.c:212
-#: camel/providers/local/camel-mh-store.c:236
-#, fuzzy, c-format
-msgid "Cannot create folder `%s': folder exists."
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap/camel-imap-store.c:2270
-#, c-format
-msgid "Unknown parent folder: %s"
-msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð±Ð°Ñ†ÑŒÐºÐ¾ÑžÑÐºÐ°Ñ Ñ‚Ñчка: %s"
-
-#: camel/providers/imap4/camel-imap4-command.c:550
-#: camel/providers/imap4/camel-imap4-command.c:557
-#, fuzzy, c-format
-msgid "Failed sending command to IMAP server %s: %s"
-msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
-
-#: camel/providers/imap4/camel-imap4-command.c:656
-#, fuzzy, c-format
-msgid "Unexpected response from IMAP4 server %s: %s"
-msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
-
-#: camel/providers/imap4/camel-imap4-engine.c:229
-#, fuzzy, c-format
-msgid "Unexpected greeting from IMAP server %s."
-msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
-
-#: camel/providers/imap4/camel-imap4-engine.c:413
-#, fuzzy, c-format
-msgid "Cannot select folder `%s': Invalid mailbox name"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/providers/imap4/camel-imap4-engine.c:419
-#, fuzzy, c-format
-msgid "Cannot select folder `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-engine.c:1367
-#: camel/providers/imap4/camel-imap4-engine.c:1397
-#: camel/providers/imap4/camel-imap4-engine.c:1429
-#: camel/providers/imap4/camel-imap4-engine.c:1471
-#, fuzzy, c-format
-msgid "IMAP4 server %s unexpectedly disconnected: %s"
-msgstr "ПаÑлужнік нечакана адключыўÑÑ: %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:359
-#, fuzzy, c-format
-msgid "Cannot sync flags to folder `%s': Unknown"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:365
-#, fuzzy, c-format
-msgid "Cannot sync flags to folder `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:502
-#, fuzzy, c-format
-msgid "Cannot expunge folder `%s': Unknown"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:507
-#, fuzzy, c-format
-msgid "Cannot expunge folder `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:697
-#, fuzzy, c-format
-msgid "Cannot get message %s from folder `%s': No such message"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
-" %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:702
-#, fuzzy, c-format
-msgid "Cannot get message %s from folder `%s': Bad command"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
-" %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:827
-#, fuzzy, c-format
-msgid "Cannot append message to folder `%s': Unknown error"
-msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі mh: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:856
-#, fuzzy, c-format
-msgid "Cannot append message to folder `%s': Bad command"
-msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі mh: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:935
-#, fuzzy, c-format
-msgid "Cannot move messages from folder `%s' to folder `%s': Unknown"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
-" %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:939
-#, fuzzy, c-format
-msgid "Cannot copy messages from folder `%s' to folder `%s': Unknown"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
-" %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:947
-#, fuzzy, c-format
-msgid "Cannot move messages from folder `%s' to folder `%s': Bad command"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
-" %s"
-
-#: camel/providers/imap4/camel-imap4-folder.c:951
-#, fuzzy, c-format
-msgid "Cannot copy messages from folder `%s' to folder `%s': Bad command"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
-" %s"
-
-#: camel/providers/imap4/camel-imap4-provider.c:53
-msgid "IMAPv4rev1"
-msgstr "IMAPv4rev1"
-
-#: camel/providers/imap4/camel-imap4-provider.c:55
-#, fuzzy
-msgid "For reading and storing mail on IMAPv4rev1 servers. EXPERIMENTAL !!"
-msgstr "Ð”Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ñ– Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ на паÑлужніках IMAP."
-
-#: camel/providers/imap4/camel-imap4-provider.c:72
-#, fuzzy
-msgid "This option will connect to the IMAPv4rev1 server using a plaintext password."
-msgstr ""
-"ДалучÑньне да IMAP паÑлужніка будзе адбывацца з выкарыÑтаньнем "
-"незашыфраванага паролÑ."
-
-#: camel/providers/imap4/camel-imap4-store.c:256
-#, fuzzy, c-format
-msgid ""
-"Failed to connect to IMAP server %s in secure mode: Server does not support "
-"STARTTLS"
-msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка IMAP %s у Ñ€Ñжыме бÑÑьпекі: %s"
-
-#: camel/providers/imap4/camel-imap4-store.c:362
-#, fuzzy, c-format
-msgid "Cannot authenticate to IMAP server %s using the %s authentication mechanism"
-msgstr ""
-"Ðемагчыма далучыцца да паÑлужніка POP %s: Запытаны мÑханізм аўтарызацыі не "
-"падтрымліваецца."
-
-#: camel/providers/imap4/camel-imap4-store.c:407
-#, fuzzy, c-format
-msgid "%sPlease enter the IMAP password for %s on host %s"
-msgstr "%sКалі лаÑка, пазначце пароль SMTP Ð´Ð»Ñ %s@%s"
-
-#: camel/providers/imap4/camel-imap4-store.c:481
-#, fuzzy, c-format
-msgid "Cannot authenticate to IMAP server %s using %s"
-msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
-
-#: camel/providers/imap4/camel-imap4-store.c:702
-#, fuzzy, c-format
-msgid "Cannot get folder `%s' on IMAP server %s: Unknown"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-store.c:816
-#, fuzzy, c-format
-msgid "Cannot create folder `%s': Invalid mailbox name"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/providers/imap4/camel-imap4-store.c:822
-#, fuzzy, c-format
-msgid "Cannot create folder `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-store.c:853
-#, fuzzy, c-format
-msgid "Cannot delete folder `%s': Special folder"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ñ‚Ñчка адÑутнічае"
-
-#: camel/providers/imap4/camel-imap4-store.c:912
-#, fuzzy, c-format
-msgid "Cannot delete folder `%s': Invalid mailbox name"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/providers/imap4/camel-imap4-store.c:917
-#, fuzzy, c-format
-msgid "Cannot delete folder `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/providers/imap4/camel-imap4-store.c:937
-#, fuzzy, c-format
-msgid "Cannot rename folder `%s' to `%s': Special folder"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ñ‚Ñчка адÑутнічае"
-
-#: camel/providers/imap4/camel-imap4-store.c:969
-#, fuzzy, c-format
-msgid "Cannot rename folder `%s' to `%s': Invalid mailbox name"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/providers/imap4/camel-imap4-store.c:974
-#, fuzzy, c-format
-msgid "Cannot rename folder `%s' to `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-store.c:1222
-#, c-format
-msgid "Cannot get %s information for pattern `%s' on IMAP server %s: %s"
-msgstr ""
-
-#: camel/providers/imap4/camel-imap4-store.c:1224
-#, fuzzy
-msgid "Bad command"
-msgstr "ПрадпрыемÑтва"
-
-#: camel/providers/imap4/camel-imap4-store.c:1300
-#, fuzzy, c-format
-msgid "Cannot subscribe to folder `%s': Invalid mailbox name"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/providers/imap4/camel-imap4-store.c:1305
-#, fuzzy, c-format
-msgid "Cannot subscribe to folder `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-store.c:1365
-#, fuzzy, c-format
-msgid "Cannot unsubscribe from folder `%s': Invalid mailbox name"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
-
-#: camel/providers/imap4/camel-imap4-store.c:1370
-#, fuzzy, c-format
-msgid "Cannot unsubscribe from folder `%s': Bad command"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/imap4/camel-imap4-utils.c:250
-#, fuzzy, c-format
-msgid "Unexpected token in response from IMAP server %s: "
-msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
-
-#: camel/providers/imap4/camel-imap4-utils.c:273
-msgid "No data"
-msgstr "Даньні адÑутнічаюць"
-
-#: camel/providers/imap4/camel-imap4-utils.c:456
-#, fuzzy, c-format
-msgid "IMAP server %s unexpectedly disconnected: %s"
-msgstr "ПаÑлужнік нечакана адключыўÑÑ: %s"
-
-#: camel/providers/imapp/camel-imapp-provider.c:39
-#: camel/providers/pop3/camel-pop3-provider.c:38
-msgid "Message storage"
-msgstr "Сховішча паведамленьнÑÑž"
-
-#: camel/providers/imapp/camel-imapp-provider.c:47
-msgid "IMAP+"
-msgstr "IMAP+"
-
-#: camel/providers/imapp/camel-imapp-provider.c:49
-msgid ""
-"Experimental IMAP 4(.1) client\n"
-"This is untested and unsupported code, you want to use plain imap instead.\n"
-"\n"
-" !!! DO NOT USE THIS FOR PRODUCTION EMAIL !!!\n"
-msgstr ""
-
-#: camel/providers/imapp/camel-imapp-store.c:328
-#, fuzzy, c-format
-msgid "Could not connect to POP server on %s"
-msgstr "Ðемагчыма далучыцца да паÑлужніка POP %s"
-
-#: camel/providers/local/camel-local-folder.c:179
-#, fuzzy
-msgid "Index message body data"
-msgstr "ДаÑлаць паведамленьне кантактанае аÑобе"
-
-#. $HOME relative path + protocol string
-#: camel/providers/local/camel-local-folder.c:388
-#, c-format
-msgid "~%s (%s)"
-msgstr "~%s (%s)"
-
-#. /var/spool/mail relative path + protocol
-#: camel/providers/local/camel-local-folder.c:392
-#: camel/providers/local/camel-local-folder.c:395
-#, c-format
-msgid "mailbox:%s (%s)"
-msgstr "Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑкрынÑ:%s (%s)"
-
-#. a full path + protocol
-#: camel/providers/local/camel-local-folder.c:399
-#, c-format
-msgid "%s (%s)"
-msgstr "%s (%s)"
-
-#: camel/providers/local/camel-local-provider.c:43
-msgid "Use the `.folders' folder summary file (exmh)"
-msgstr "ВыкарыÑтоўваць агульны файл Ñ‚Ñчак `.folders' (exmh)"
-
-#: camel/providers/local/camel-local-provider.c:49
-msgid "MH-format mail directories"
-msgstr "Каталёгі пошты у MH-фармаце"
-
-#: camel/providers/local/camel-local-provider.c:50
-msgid "For storing local mail in MH-like mail directories."
-msgstr "Ð”Ð»Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¼ÑÑцовае пошты Ñž паштовых каталёгах тыпа MH."
-
-#: camel/providers/local/camel-local-provider.c:65
-msgid "Local delivery"
-msgstr "ÐœÑÑÑ†Ð¾Ð²Ð°Ñ Ð´Ð°Ñтаўка"
-
-#: camel/providers/local/camel-local-provider.c:66
-msgid ""
-"For retrieving (moving) local mail from standard mbox formated spools into "
-"folders managed by Evolution."
-msgstr ""
-
-#: camel/providers/local/camel-local-provider.c:77
-#: camel/providers/local/camel-local-provider.c:94
-msgid "Apply filters to new messages in INBOX"
-msgstr "Ужыць цÑдалі да новых паведамленьнÑÑž у Ñ‚Ñчцы \"ÐтрыманыÑ\""
-
-#: camel/providers/local/camel-local-provider.c:83
-msgid "Maildir-format mail directories"
-msgstr "ÐŸÐ°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ ÐºÐ°Ñ‚Ð°Ð»Ñ‘Ð³Ñ– Ñž фармаце Maildir"
-
-#: camel/providers/local/camel-local-provider.c:84
-msgid "For storing local mail in maildir directories."
-msgstr "Ð”Ð»Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¼ÑÑцовае пошты Ñž паштовых каталёгах maildir."
-
-#: camel/providers/local/camel-local-provider.c:95
-msgid "Store status headers in Elm/Pine/Mutt format"
-msgstr "Захоўваць загалоўкі Ñтану Ñž фармаце Elm/Pine/Mutt"
-
-#: camel/providers/local/camel-local-provider.c:101
-msgid "Standard Unix mbox spool or directory"
-msgstr "Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð´Ð»Ñ Unix чарга тыпа mbox"
-
-#: camel/providers/local/camel-local-provider.c:102
-msgid ""
-"For reading and storing local mail in external standard mbox spool files.\n"
-"May also be used to read a tree of Elm, Pine, or Mutt style folders."
-msgstr ""
-
-#: camel/providers/local/camel-local-store.c:142
-#: camel/providers/local/camel-local-store.c:253
-#: camel/providers/local/camel-mbox-store.c:355
-#: camel/providers/local/camel-spool-store.c:116
-#, c-format
-msgid "Store root %s is not an absolute path"
-msgstr "ÐдноÑны шлÑÑ… да Ñховішча %s"
-
-#: camel/providers/local/camel-local-store.c:149
-#, c-format
-msgid "Store root %s is not a regular directory"
-msgstr "Сховішча %s не зьÑўлÑецца каталёгам"
-
-#: camel/providers/local/camel-local-store.c:158
-#: camel/providers/local/camel-local-store.c:166
-#: camel/providers/local/camel-local-store.c:264
-#, c-format
-msgid "Cannot get folder: %s: %s"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/local/camel-local-store.c:178
-msgid "Local stores do not have an inbox"
-msgstr "ÐœÑÑцовае Ñховішча Ð½Ñ Ð¼Ð°Ðµ Ñ‚Ñчкі \"Ðтрыманае\""
-
-#: camel/providers/local/camel-local-store.c:224
-#, c-format
-msgid "Local mail file %s"
-msgstr "ÐœÑÑцовы файл пошты %s"
-
-#: camel/providers/local/camel-local-store.c:333
-#, c-format
-msgid "Could not rename folder %s to %s: %s"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі %s у %s: %s"
-
-#: camel/providers/local/camel-local-store.c:398
-#, c-format
-msgid "Could not rename '%s': %s"
-msgstr "Ðемагчыма зьмÑніць назву '%s': %s"
-
-#: camel/providers/local/camel-local-store.c:423
-#: camel/providers/local/camel-mbox-store.c:284
-#, c-format
-msgid "Could not delete folder summary file `%s': %s"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ выніковы файл Ñ‚Ñчкі \"%s\": %s"
-
-#: camel/providers/local/camel-local-store.c:433
-#: camel/providers/local/camel-mbox-store.c:296
-#, c-format
-msgid "Could not delete folder index file `%s': %s"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ індÑкÑны файл Ñ‚Ñчкі \"%s\": %s"
-
-#: camel/providers/local/camel-local-store.c:456
-#: camel/providers/local/camel-mbox-store.c:320
-#, fuzzy, c-format
-msgid "Could not delete folder meta file `%s': %s"
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ выніковы файл Ñ‚Ñчкі \"%s\": %s"
-
-#: camel/providers/local/camel-local-summary.c:405
-#, c-format
-msgid "Could not save summary: %s: %s"
-msgstr "Ðемагчыма захаваць вынік: %s: %s"
-
-#: camel/providers/local/camel-local-summary.c:464
-msgid "Unable to add message to summary: unknown reason"
-msgstr "ÐеатрымалаÑÑ Ð´Ð°Ð´Ð°Ñ†ÑŒ паведамленьне да выніку: прычына невÑдома"
-
-#. Inbox is always first
-#: camel/providers/local/camel-maildir-folder.c:74
-#: camel/providers/local/camel-maildir-store.c:232
-#: camel/providers/local/camel-maildir-store.c:248
-#: mail/em-folder-tree-model.c:212 mail/em-folder-tree-model.c:214
-msgid "Inbox"
-msgstr "Ðтрыманае"
-
-#: camel/providers/local/camel-maildir-folder.c:214
-msgid "Maildir append message cancelled"
-msgstr "Даданьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð´Ð° Ñ‚Ñчкі паштовага каталёга адменена"
-
-#: camel/providers/local/camel-maildir-folder.c:217
-#, c-format
-msgid "Cannot append message to maildir folder: %s: %s"
-msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі паштовага каталёга: %s: %s"
-
-#: camel/providers/local/camel-maildir-folder.c:243
-#: camel/providers/local/camel-maildir-folder.c:257
-#: camel/providers/local/camel-maildir-folder.c:266
-#: camel/providers/local/camel-mbox-folder.c:417
-#: camel/providers/local/camel-mbox-folder.c:436
-#: camel/providers/local/camel-mbox-folder.c:467
-#: camel/providers/local/camel-mbox-folder.c:475
-#: camel/providers/local/camel-mh-folder.c:201
-#: camel/providers/local/camel-mh-folder.c:212
-#: camel/providers/local/camel-mh-folder.c:221
-#, c-format
-msgid ""
-"Cannot get message: %s from folder %s\n"
-" %s"
-msgstr ""
-"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
-" %s"
-
-#: camel/providers/local/camel-maildir-folder.c:267
-msgid "Invalid message contents"
-msgstr "ÐерÑчаіÑны зьмеÑÑ‚ паведамленьнÑ"
-
-#: camel/providers/local/camel-maildir-store.c:109
-#: camel/providers/local/camel-mbox-store.c:154
-#: camel/providers/local/camel-mh-store.c:204
-#, fuzzy, c-format
-msgid "Cannot get folder `%s': %s"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/local/camel-maildir-store.c:113
-#: camel/providers/local/camel-mbox-store.c:162
-#: camel/providers/local/camel-mh-store.c:211
-#, fuzzy, c-format
-msgid "Cannot get folder `%s': folder does not exist."
-msgstr "ТÑчка \"%s\" не Ñ–Ñнуе."
-
-#: camel/providers/local/camel-maildir-store.c:121
-#: camel/providers/local/camel-mbox-store.c:184
-#: camel/providers/local/camel-mbox-store.c:196
-#, fuzzy, c-format
-msgid "Cannot create folder `%s': %s"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/local/camel-maildir-store.c:136
-#, fuzzy, c-format
-msgid "Cannot get folder `%s': not a maildir directory."
-msgstr "\"%s\" не зьÑўлÑецца паштовым каталёгам."
-
-#: camel/providers/local/camel-maildir-store.c:175
-#: camel/providers/local/camel-maildir-store.c:213
-#: camel/providers/local/camel-mh-store.c:260
-#, c-format
-msgid "Could not delete folder `%s': %s"
-msgstr ""
-"Ðемагчыма выдаліць Ñ‚Ñчку \"%s\":\n"
-"%s"
-
-#: camel/providers/local/camel-maildir-store.c:177
-msgid "not a maildir directory"
-msgstr "не зьÑўлÑецца паштовым каталёгам"
-
-#: camel/providers/local/camel-maildir-store.c:355
-#: camel/providers/local/camel-spool-store.c:284
-#: camel/providers/local/camel-spool-store.c:314
-#, c-format
-msgid "Could not scan folder `%s': %s"
-msgstr "Ðемагчыма Ñканаваць Ñ‚Ñчку `%s': %s"
-
-#: camel/providers/local/camel-maildir-summary.c:419
-#: camel/providers/local/camel-maildir-summary.c:550
-#, c-format
-msgid "Cannot open maildir directory path: %s: %s"
-msgstr "Ðе атрымліваецца адкрыць шлÑÑ… да Ñ‚Ñчкі паштовага каталёга: %s: %s"
-
-#: camel/providers/local/camel-maildir-summary.c:543
-msgid "Checking folder consistency"
-msgstr "Праверка Ð½Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ñ‚Ð°Ð»Ñ‘Ð³Ð°Ñž"
-
-#: camel/providers/local/camel-maildir-summary.c:646
-msgid "Checking for new messages"
-msgstr "Праверыць наÑўнаÑьць новых паведамленьнÑÑž"
-
-#: camel/providers/local/camel-maildir-summary.c:735
-#: camel/providers/local/camel-mbox-summary.c:369
-#: camel/providers/local/camel-mbox-summary.c:542
-#: camel/providers/local/camel-mbox-summary.c:633
-#: camel/providers/local/camel-spool-summary.c:137
-msgid "Storing folder"
-msgstr "Захаваньне Ñ‚Ñчкі"
-
-#: camel/providers/local/camel-mbox-folder.c:225
-#: camel/providers/local/camel-spool-folder.c:148
-#, c-format
-msgid "Cannot create folder lock on %s: %s"
-msgstr "Ðе атрымліваецца заблÑкаваць Ñ‚Ñчку %s: %s"
-
-#: camel/providers/local/camel-mbox-folder.c:284
-#, c-format
-msgid "Cannot open mailbox: %s: %s\n"
-msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ паштовую Ñкрыню: %s: %s\n"
-
-#: camel/providers/local/camel-mbox-folder.c:344
-msgid "Mail append cancelled"
-msgstr "Даданьне пошты адменена"
-
-#: camel/providers/local/camel-mbox-folder.c:347
-#, c-format
-msgid "Cannot append message to mbox file: %s: %s"
-msgstr "Ðемагчыма далучыць паведамленьне да файла mbox: %s: %s"
-
-#: camel/providers/local/camel-mbox-folder.c:468
-msgid "The folder appears to be irrecoverably corrupted."
-msgstr "Магчыма Ñ‚Ñчка ÑапÑавана й Ð½Ñ Ð¼Ð¾Ð¶Ð° быць адноўлена."
-
-#: camel/providers/local/camel-mbox-folder.c:476
-#: camel/providers/local/camel-mh-folder.c:222
-#, fuzzy
-msgid "Message construction failed."
-msgstr "Збой у канÑтрукцыі паведамленьнÑ: Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑÐºÑ€Ñ‹Ð½Ñ Ð¿Ð°ÑˆÐºÐ¾Ð´Ð¶Ð°Ð½Ð°?"
-
-#: camel/providers/local/camel-mbox-store.c:176
-#: camel/providers/local/camel-mbox-store.c:361
-#, fuzzy
-msgid "Cannot create a folder by this name."
-msgstr "Ðемагчыма Ñтварыць Ñ‚Ñчку з гÑткай назвай"
-
-#: camel/providers/local/camel-mbox-store.c:206
-#, fuzzy, c-format
-msgid "Cannot get folder `%s': not a regular file."
-msgstr "Ðемагчыма уклаÑьці файл %s: не зьÑўлÑецца Ñталым файлам"
-
-#: camel/providers/local/camel-mbox-store.c:236
-#: camel/providers/local/camel-mbox-store.c:247
-#: camel/providers/local/camel-mbox-store.c:270
-#, c-format
-msgid ""
-"Could not delete folder `%s':\n"
-"%s"
-msgstr ""
-"Ðемагчыма выдаліць Ñ‚Ñчку \"%s\":\n"
-"%s"
-
-#: camel/providers/local/camel-mbox-store.c:255
-#, c-format
-msgid "`%s' is not a regular file."
-msgstr "%s не зьÑўлÑецца звычайным файлам."
-
-#: camel/providers/local/camel-mbox-store.c:262
-#, c-format
-msgid "Folder `%s' is not empty. Not deleted."
-msgstr "ТÑчка \"%s\" не пуÑтаÑ. Ðе выдалена."
-
-#: camel/providers/local/camel-mbox-store.c:374
-#, fuzzy, c-format
-msgid "Cannot create directory `%s': %s."
-msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
-
-#: camel/providers/local/camel-mbox-store.c:388
-#, fuzzy, c-format
-msgid "Cannot create folder: %s: %s"
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/local/camel-mbox-store.c:390
-#, fuzzy
-msgid "Folder already exists"
-msgstr "Ід карткі ужо Ñ–Ñнуе"
-
-#: camel/providers/local/camel-mbox-store.c:472
-#, fuzzy
-msgid "The new folder name is illegal."
-msgstr "ÐŸÐ°Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° Ñ‚Ñчкі недапушчальна: %s"
-
-#: camel/providers/local/camel-mbox-store.c:485
-#, fuzzy, c-format
-msgid "Could not rename `%s': `%s': %s"
-msgstr "Ðемагчыма зьмÑніць назву '%s': %s"
-
-#: camel/providers/local/camel-mbox-store.c:560
-#, fuzzy, c-format
-msgid "Could not rename '%s' to %s: %s"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі %s у %s: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:375
-#, c-format
-msgid "Could not open folder: %s: %s"
-msgstr "Ðемагчыма адкрыць Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:423
-#, c-format
-msgid "Fatal mail parser error near position %ld in folder %s"
-msgstr "Ð¤Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° паштовага аналізатара ÐºÐ°Ð»Ñ Ð¿Ð°Ð·Ñ‹Ñ†Ñ‹Ñ– %ld у Ñ‚Ñчцы %s"
-
-#: camel/providers/local/camel-mbox-summary.c:479
-#, c-format
-msgid "Cannot check folder: %s: %s"
-msgstr "Ðемагчыма праверыць Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:547
-#: camel/providers/local/camel-mbox-summary.c:638
-#: camel/providers/local/camel-spool-summary.c:142
-#, c-format
-msgid "Could not open file: %s: %s"
-msgstr "Ðемагчыма адкрыць файл: %s: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:559
-#: camel/providers/local/camel-spool-summary.c:162
-#, c-format
-msgid "Cannot open temporary mailbox: %s"
-msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ чаÑовую паштовую Ñкрыню: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:572
-#: camel/providers/local/camel-mbox-summary.c:736
-#, c-format
-msgid "Could not close source folder %s: %s"
-msgstr "Ðемагчыма закрыць Ñ‚Ñчку крыніцы %s: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:581
-#, c-format
-msgid "Could not close temp folder: %s"
-msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:592
-#, c-format
-msgid "Could not rename folder: %s"
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:676
-#: camel/providers/local/camel-mbox-summary.c:684
-#: camel/providers/local/camel-mbox-summary.c:877
-#: camel/providers/local/camel-mbox-summary.c:885
-msgid "Summary and folder mismatch, even after a sync"
-msgstr "ÐеÑупадзеньне Ñ‚Ñчкі Ñ– выніку, нават паÑÑŒÐ»Ñ Ñынхранізацыі"
-
-#: camel/providers/local/camel-mbox-summary.c:811
-#: camel/providers/local/camel-spool-summary.c:334
-#, c-format
-msgid "Unknown error: %s"
-msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:846
-#, c-format
-msgid "Could not store folder: %s"
-msgstr "Ðемагчыма захаваць Ñ‚Ñчку: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:940
-#: camel/providers/local/camel-mbox-summary.c:966
-#, c-format
-msgid "Error writing to temp mailbox: %s"
-msgstr "Памылка запіÑу у чаÑовую паштовую Ñкрыню: %s"
-
-#: camel/providers/local/camel-mbox-summary.c:957
-#, c-format
-msgid "Writing to tmp mailbox failed: %s: %s"
-msgstr "Збой запіÑу Ñž чаÑовую паштовую Ñкрыню: %s: %s"
-
-#: camel/providers/local/camel-mh-folder.c:174
-msgid "MH append message cancelled"
-msgstr "Даданьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð´Ð° Ñ‚Ñчкі MH адменена"
-
-#: camel/providers/local/camel-mh-folder.c:177
-#, c-format
-msgid "Cannot append message to mh folder: %s: %s"
-msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі mh: %s: %s"
-
-#: camel/providers/local/camel-mh-store.c:219
-#, fuzzy, c-format
-msgid "Could not create folder `%s': %s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць Ñ‚Ñчку \"%s\":\n"
-"%s"
-
-#: camel/providers/local/camel-mh-store.c:231
-#, fuzzy, c-format
-msgid "Cannot get folder `%s': not a directory."
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#: camel/providers/local/camel-mh-summary.c:244
-#, c-format
-msgid "Cannot open MH directory path: %s: %s"
-msgstr "Ðе атрымліваецца адкрыць MH каталёг: %s: %s"
-
-#: camel/providers/local/camel-spool-store.c:122
-#, c-format
-msgid "Spool `%s' cannot be opened: %s"
-msgstr "Ðе атрымліваецца адкрыць Ñпул \"%s\": %s"
-
-#: camel/providers/local/camel-spool-store.c:134
-#, c-format
-msgid "Spool `%s' is not a regular file or directory"
-msgstr "Спул \"%s\" не зьÑўлÑецца звычайным файлам ці каталёгам"
-
-#: camel/providers/local/camel-spool-store.c:153
-#, c-format
-msgid "Folder `%s/%s' does not exist."
-msgstr "ТÑчка \"%s%s\" не Ñ–Ñнуе."
-
-#: camel/providers/local/camel-spool-store.c:163
-#, c-format
-msgid ""
-"Could not open folder `%s':\n"
-"%s"
-msgstr ""
-"Ðемагчыма адкрыць Ñ‚Ñчку \"%s\":\n"
-"%s"
-
-#: camel/providers/local/camel-spool-store.c:167
-#, c-format
-msgid "Folder `%s' does not exist."
-msgstr "ТÑчка \"%s\" не Ñ–Ñнуе."
-
-#: camel/providers/local/camel-spool-store.c:172
-#, c-format
-msgid ""
-"Could not create folder `%s':\n"
-"%s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць Ñ‚Ñчку \"%s\":\n"
-"%s"
-
-#: camel/providers/local/camel-spool-store.c:180
-#, c-format
-msgid "`%s' is not a mailbox file."
-msgstr "`%s' не файл паштовае Ñкрыні."
-
-#: camel/providers/local/camel-spool-store.c:197
-msgid "Store does not support an INBOX"
-msgstr "Сховішча не падтрымлівае INBOX"
-
-#: camel/providers/local/camel-spool-store.c:209
-#, c-format
-msgid "Spool mail file %s"
-msgstr "Файл паштовага Ñпула %s"
-
-#: camel/providers/local/camel-spool-store.c:209
-#, c-format
-msgid "Spool folder tree %s"
-msgstr "ДрÑва Ñ‚Ñчкі Ñпула %s"
-
-#: camel/providers/local/camel-spool-store.c:217
-msgid "Spool folders cannot be renamed"
-msgstr "Ðазвы Ñ‚Ñчак Ñпула Ð½Ñ Ð¼Ð¾Ð³ÑƒÑ†ÑŒ зьмененыÑ"
-
-#: camel/providers/local/camel-spool-store.c:225
-msgid "Spool folders cannot be deleted"
-msgstr "ТÑчкі Ñпула Ð½Ñ Ð¼Ð¾Ð³ÑƒÑ†ÑŒ быць выдаленыÑ"
-
-#: camel/providers/local/camel-spool-summary.c:175
-#: camel/providers/local/camel-spool-summary.c:185
-#: camel/providers/local/camel-spool-summary.c:195
-#, c-format
-msgid "Could not sync temporary folder %s: %s"
-msgstr "Ðе атрымліваецца Ñынхранізаваць чаÑовую Ñ‚Ñчку %s: %s"
-
-#: camel/providers/local/camel-spool-summary.c:211
-#, c-format
-msgid "Could not sync spool folder %s: %s"
-msgstr "Ðе атрымліваецца Ñынхранізаваць Ñ‚Ñчку Ñпула: %s: %s"
-
-#: camel/providers/local/camel-spool-summary.c:242
-#: camel/providers/local/camel-spool-summary.c:261
-#: camel/providers/local/camel-spool-summary.c:274
-#, c-format
-msgid ""
-"Could not sync spool folder %s: %s\n"
-"Folder may be corrupt, copy saved in `%s'"
-msgstr ""
-"Ðе магчыма Ñынхранізаваць Ñ‚Ñчку Ñпула %s: %s\n"
-"Магчыма Ñ‚Ñчка пашкоджана, ÐºÐ¾Ð¿Ñ–Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ð° у \"%s\""
-
-#: camel/providers/nntp/camel-nntp-auth.c:44
-#: camel/providers/nntp/camel-nntp-store.c:1126
-#, fuzzy, c-format
-msgid "Please enter the NNTP password for %s@%s"
-msgstr "%sКалі лаÑка, пазначце пароль SMTP Ð´Ð»Ñ %s@%s"
-
-#: camel/providers/nntp/camel-nntp-auth.c:64
-msgid "Server rejected username"
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-auth.c:70
-#, fuzzy
-msgid "Failed to send username to server"
-msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка LDAP"
-
-#: camel/providers/nntp/camel-nntp-auth.c:79
-msgid "Server rejected username/password"
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-folder.c:147
-#: camel/providers/nntp/camel-nntp-folder.c:149
-#: camel/providers/nntp/camel-nntp-folder.c:158
-#: camel/providers/nntp/camel-nntp-folder.c:234
-#: camel/providers/pop3/camel-pop3-folder.c:433
-#: camel/providers/pop3/camel-pop3-folder.c:494
-#: camel/providers/pop3/camel-pop3-folder.c:501
-#: camel/providers/pop3/camel-pop3-folder.c:512
-#, c-format
-msgid "Cannot get message %s: %s"
-msgstr "Ðемагчыма атрымаць паведамленьне %s: %s"
-
-#: camel/providers/nntp/camel-nntp-folder.c:156
-#: camel/providers/nntp/camel-nntp-folder.c:232
-#: camel/providers/nntp/camel-nntp-folder.c:371
-#: camel/providers/pop3/camel-pop3-folder.c:262
-#: camel/providers/pop3/camel-pop3-folder.c:430
-#: camel/providers/pop3/camel-pop3-folder.c:491
-#: camel/providers/pop3/camel-pop3-folder.c:509
-msgid "User cancelled"
-msgstr "КарыÑтальнік адмÑніў"
-
-#: camel/providers/nntp/camel-nntp-folder.c:176
-#: camel/providers/nntp/camel-nntp-folder.c:208
-#, c-format
-msgid "Internal error: uid in invalid format: %s"
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-folder.c:328
-#: camel/providers/nntp/camel-nntp-folder.c:331
-#: camel/providers/nntp/camel-nntp-folder.c:373
-#: camel/providers/nntp/camel-nntp-folder.c:375
-#, fuzzy, c-format
-msgid "Posting failed: %s"
-msgstr "Збой апÑрацыі: %s"
-
-#: camel/providers/nntp/camel-nntp-folder.c:393
-msgid "You cannot post NNTP messages while working offline!"
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-folder.c:404
-#, fuzzy
-msgid "You cannot copy messages from a NNTP folder!"
-msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
-
-#: camel/providers/nntp/camel-nntp-grouplist.c:44
-#, fuzzy
-msgid "Could not get group list from server."
-msgstr "Ðемагчыма атрымаць групу: %s"
-
-#: camel/providers/nntp/camel-nntp-grouplist.c:97
-#: camel/providers/nntp/camel-nntp-grouplist.c:106
-#, fuzzy, c-format
-msgid "Unable to load grouplist file for %s: %s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
-" %s"
-
-#: camel/providers/nntp/camel-nntp-grouplist.c:157
-#, fuzzy, c-format
-msgid "Unable to save grouplist file for %s: %s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
-" %s"
-
-#: camel/providers/nntp/camel-nntp-provider.c:43
-msgid "Show folders in short notation (e.g. c.o.linux rather than comp.os.linux)"
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-provider.c:45
-msgid "In the subscription dialog, show relative folder names"
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-provider.c:52
-msgid "USENET news"
-msgstr "Ðавіны USENET"
-
-#: camel/providers/nntp/camel-nntp-provider.c:54
-msgid "This is a provider for reading from and posting toUSENET newsgroups."
-msgstr "ГÑта правайдÑÑ€ Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ñ– адпраўкі паведамленьнÑÑž у групы навінаў USENET."
-
-#: camel/providers/nntp/camel-nntp-provider.c:73
-msgid ""
-"This option will authenticate with the NNTP server using a plaintext "
-"password."
-msgstr ""
-"ДалучÑньне да паÑлужніка NNTP будзе адбывацца з выкарыÑтаньнем "
-"незашыфраванага паролÑ."
-
-#: camel/providers/nntp/camel-nntp-store.c:118
-#: camel/providers/nntp/camel-nntp-store.c:1233
-#: camel/providers/nntp/camel-nntp-store.c:1331
-#, c-format
-msgid "NNTP Command failed: %s"
-msgstr "Збой каманды NNTP: %s"
-
-#: camel/providers/nntp/camel-nntp-store.c:227
-#, c-format
-msgid "Could not read greeting from %s: %s"
-msgstr "Ðе атрымліваецца прачытаць вітаньне з %s: %s"
-
-#: camel/providers/nntp/camel-nntp-store.c:239
-#, c-format
-msgid "NNTP server %s returned error code %d: %s"
-msgstr "ПаÑлужнік NNTP %s вÑрнуў код памылкі %d: %s"
-
-#: camel/providers/nntp/camel-nntp-store.c:403
-#, c-format
-msgid "USENET News via %s"
-msgstr "Ðавіны USENET праз %s"
-
-#: camel/providers/nntp/camel-nntp-store.c:777
-#, fuzzy, c-format
-msgid ""
-"Error retrieving newsgroups:\n"
-"\n"
-"%s"
-msgstr ""
-"Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž у: %s:\n"
-" %s"
-
-#: camel/providers/nntp/camel-nntp-store.c:872
-msgid ""
-"You cannot subscribe to this newsgroup:\n"
-"\n"
-"No such newsgroup. The selected item is a probably a parent folder."
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-store.c:904
-msgid ""
-"You cannot unsubscribe to this newsgroup:\n"
-"\n"
-"newsgroup does not exist!"
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-store.c:929
-msgid "You cannot create a folder in a News store: subscribe instead."
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-store.c:937
-#, fuzzy
-msgid "You cannot rename a folder in a News store."
-msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі %s у %s: %s"
-
-#: camel/providers/nntp/camel-nntp-store.c:945
-msgid "You cannot remove a folder in a News store: unsubscribe instead."
-msgstr ""
-
-#: camel/providers/nntp/camel-nntp-store.c:1118
-#, fuzzy
-msgid "Authentication requested but not username provided"
-msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ Ð¿Ð°Ñ‚Ñ€Ð°Ð±ÑƒÐµÑ†Ñ†Ð°"
-
-#: camel/providers/nntp/camel-nntp-store.c:1146
-#, fuzzy, c-format
-msgid "Cannot authenticate to server: %s"
-msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
-
-#: camel/providers/nntp/camel-nntp-store.c:1262
-#, fuzzy
-msgid "Not connected."
-msgstr "Паказаць кантакты"
-
-#: camel/providers/nntp/camel-nntp-store.c:1311
-#, c-format
-msgid "No such folder: %s"
-msgstr "Ðе адшукана Ñ‚Ñчка: %s"
-
-#: camel/providers/nntp/camel-nntp-summary.c:218
-#: camel/providers/nntp/camel-nntp-summary.c:314
-#, c-format
-msgid "%s: Scanning new messages"
-msgstr "%s: Сканаваньне новых паведамленьнÑÑž"
-
-#: camel/providers/nntp/camel-nntp-summary.c:225
-#, fuzzy, c-format
-msgid "Unexpected server response from xover: %s"
-msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
-
-#: camel/providers/nntp/camel-nntp-summary.c:328
-#, fuzzy, c-format
-msgid "Unexpected server response from head: %s"
-msgstr "Ðечаканы адказ ад GnuPG: %s"
-
-#: camel/providers/nntp/camel-nntp-summary.c:368
-msgid "Use cancel"
-msgstr "СкаÑуйце"
-
-#: camel/providers/nntp/camel-nntp-summary.c:370
-#, c-format
-msgid "Operation failed: %s"
-msgstr "Збой апÑрацыі: %s"
-
-#: camel/providers/pop3/camel-pop3-folder.c:246
-msgid "Retrieving POP summary"
-msgstr "Ðтрыманьне зьвеÑтак POP"
-
-#: camel/providers/pop3/camel-pop3-folder.c:265
-#, c-format
-msgid "Cannot get POP summary: %s"
-msgstr "Ðемагчыма атрымаць зьвеÑткі POP: %s"
-
-#: camel/providers/pop3/camel-pop3-folder.c:308
-msgid "Expunging deleted messages"
-msgstr "Выкіданьне выдаленых паведамленьнÑÑž"
-
-#: camel/providers/pop3/camel-pop3-folder.c:404
-#, c-format
-msgid "No message with uid %s"
-msgstr "ÐÑма Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð· uid %s"
-
-#. Sigh, most of the crap in this function is so that the cancel button
-#. returns the proper exception code. Sigh.
-#: camel/providers/pop3/camel-pop3-folder.c:411
-#, c-format
-msgid "Retrieving POP message %d"
-msgstr "Ðтрыманьне паведамленьнÑÑž %d па POP"
-
-#: camel/providers/pop3/camel-pop3-folder.c:501 composer/e-msg-composer.c:1207
-#: composer/e-msg-composer.c:1228
-msgid "Unknown reason"
-msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ñ€Ñ‹Ñ‡Ñ‹Ð½Ð°"
-
-#: camel/providers/pop3/camel-pop3-provider.c:40
-msgid "Leave messages on server"
-msgstr "Пакідаць паведамленьні на паÑлужніку"
-
-#: camel/providers/pop3/camel-pop3-provider.c:43
-#, c-format
-msgid "Delete after %s day(s)"
-msgstr "ВыдалÑць праз %s дзён"
-
-#: camel/providers/pop3/camel-pop3-provider.c:46
-msgid "Disable support for all POP3 extensions"
-msgstr ""
-
-#: camel/providers/pop3/camel-pop3-provider.c:54 mail/mail-config.glade.h:107
-msgid "POP"
-msgstr "POP"
-
-#: camel/providers/pop3/camel-pop3-provider.c:56
-msgid "For connecting to and downloading mail from POP servers."
-msgstr "Ð”Ð»Ñ Ð´Ð°Ð»ÑƒÑ‡ÑÐ½ÑŒÐ½Ñ Ñ– Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ з паÑлужнікаў POP"
-
-#: camel/providers/pop3/camel-pop3-provider.c:73
-msgid ""
-"This option will connect to the POP server using a plaintext password. This "
-"is the only option supported by many POP servers."
-msgstr ""
-"ДалучÑньне да POP паÑлужніка будзе адбывацца з выкарыÑтаньнем "
-"незашыфраванага паролÑ. БольшаÑьцю POP паÑлужнікаў падтрымліваецца толькі "
-"гÑÑ‚Ñ‹ варыÑнт."
-
-#: camel/providers/pop3/camel-pop3-provider.c:83
-msgid ""
-"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."
-msgstr ""
-"ДалучÑньне да POP паÑлужніка будзе адбывацца з выкарыÑтаньнем шыфраванага "
-"Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ð° пратаколе APOP. ГÑта можа працаваць не Ð´Ð»Ñ ÑžÑÑ–Ñ… карыÑтальнікаў "
-"нават на паÑлужніках, ÑÐºÑ–Ñ Ð±Ñ‹Ñ†Ñ†Ð°Ð¼ бы падтрымліваюць гÑта."
-
-#: camel/providers/pop3/camel-pop3-store.c:195
-#, c-format
-msgid "Could not connect to POP server %s (port %d): %s"
-msgstr "Ðемагчыма далучыцца да паÑлужніка POP %s (порт %d): %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:214
-#, fuzzy, c-format
-msgid "Failed to read a valid greeting from POP server %s (port %d)"
-msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:232
-#: camel/providers/pop3/camel-pop3-store.c:261
-#: camel/providers/pop3/camel-pop3-store.c:273
-#, c-format
-msgid "Failed to connect to POP server %s in secure mode: %s"
-msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка POP %s у Ñ€Ñжыме бÑÑьпекі: %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:371
-#, c-format
-msgid "Could not connect to POP server %s"
-msgstr "Ðемагчыма далучыцца да паÑлужніка POP %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:412
-#: camel/providers/pop3/camel-pop3-store.c:526
-#, c-format
-msgid ""
-"Unable to connect to POP server %s: No support for requested authentication "
-"mechanism."
-msgstr ""
-"Ðемагчыма далучыцца да паÑлужніка POP %s: Запытаны мÑханізм аўтарызацыі не "
-"падтрымліваецца."
-
-#: camel/providers/pop3/camel-pop3-store.c:428
-#, c-format
-msgid "SASL `%s' Login failed for POP server %s: %s"
-msgstr "SASL `%s' Уваход на паÑлужнік POP не адбыўÑÑ %s: %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:440
-#, c-format
-msgid "Cannot login to POP server %s: SASL Protocol error"
-msgstr "Ðе адбыўÑÑ ÑžÐ²Ð°Ñ…Ð¾Ð´ на паÑлужнік POP %s: памылка пратакола SASL"
-
-#: camel/providers/pop3/camel-pop3-store.c:459
-#, c-format
-msgid "Failed to authenticate on POP server %s: %s"
-msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:485
-#, fuzzy, c-format
-msgid "%sPlease enter the POP password for %s on host %s"
-msgstr "%sКалі лаÑка пазначце пароль POP Ð´Ð»Ñ %s@%s"
-
-#: camel/providers/pop3/camel-pop3-store.c:540
-#: camel/providers/pop3/camel-pop3-store.c:553
-#, c-format
-msgid ""
-"Unable to connect to POP server %s.\n"
-"Error sending password: %s"
-msgstr ""
-"Ðемагчыма далучыцца да паÑлужніка POP %s.\n"
-"Памылка адпраўкі паролÑ: %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:547
-#, fuzzy, c-format
-msgid ""
-"Unable to connect to POP server %s.\n"
-"Error sending username: %s"
-msgstr ""
-"Ðемагчыма далучыцца да паÑлужніка POP %s.\n"
-"Памылка адпраўкі паролÑ: %s"
-
-#: camel/providers/pop3/camel-pop3-store.c:652
-#, c-format
-msgid "No such folder `%s'."
-msgstr "ÐÑма гÑткае Ñ‚Ñчкі \"%s\""
-
-#: camel/providers/sendmail/camel-sendmail-provider.c:36
-#: mail/mail-config.glade.h:132
-msgid "Sendmail"
-msgstr "Sendmail"
-
-#: camel/providers/sendmail/camel-sendmail-provider.c:38
-msgid ""
-"For delivering mail by passing it to the \"sendmail\" program on the local "
-"system."
-msgstr ""
-"Ð”Ð»Ñ Ð´Ð°Ñтаўкі пошты праз перадачу Ñе праграме \"Sendmail\" на лÑкальнае "
-"ÑÑ‹ÑÑ‚Ñме."
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:113
-msgid "Could not parse recipient list"
-msgstr "Ðеатрымліваецца апрацаваць ÑÑŒÐ¿Ñ–Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð¾ÑžÑ†Ð°Ñž"
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:144
-#, c-format
-msgid "Could not create pipe to sendmail: %s: mail not sent"
-msgstr "ÐеатрымалаÑÑ Ñтварыць канал да Sendmail: %s: пошта не даÑлана"
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:165
-#, c-format
-msgid "Could not fork sendmail: %s: mail not sent"
-msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð³Ð°Ð»Ñ–Ð½Ð°Ð²Ð°Ñ†ÑŒ Sendmail: %s: пошта не даÑлана"
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:205
-#, c-format
-msgid "Could not send message: %s"
-msgstr "ÐеатрымалаÑÑ Ð´Ð°Ñлаць паведамленьне: %s"
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:233
-#, c-format
-msgid "sendmail exited with signal %s: mail not sent."
-msgstr "Sendmail завÑршыла працу з Ñыгналам %s: пошта не даÑлана."
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:240
-#, c-format
-msgid "Could not execute %s: mail not sent."
-msgstr "ÐеатрымалаÑÑ Ð²Ñ‹ÐºÐ°Ð½Ð°Ñ†ÑŒ %s: пошта не даÑлана."
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:245
-#, c-format
-msgid "sendmail exited with status %d: mail not sent."
-msgstr "Sendmail завÑршыла працу Ñа Ñтанам %d: пошта не даÑлана."
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:259
-msgid "sendmail"
-msgstr "sendmail"
-
-#: camel/providers/sendmail/camel-sendmail-transport.c:261
-msgid "Mail delivery via the sendmail program"
-msgstr "ДаÑтаўка пошты праз праграму sendmail"
-
-#: camel/providers/smtp/camel-smtp-provider.c:37 mail/mail-config.glade.h:122
-msgid "SMTP"
-msgstr "SMTP"
-
-#: camel/providers/smtp/camel-smtp-provider.c:39
-#, fuzzy
-msgid "For delivering mail by connecting to a remote mailhub using SMTP."
-msgstr ""
-"Ð”Ð»Ñ Ð´Ð°Ñтаўкі пошты з дапамогай далучÑÐ½ÑŒÐ½Ñ Ð´Ð° аддаленага паштовага вузла па "
-"пратаколе SMTP.\n"
-
-#: camel/providers/smtp/camel-smtp-transport.c:174
-msgid "Syntax error, command unrecognized"
-msgstr "СынтакÑÑ‹Ñ‡Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°, каманда не раÑпазнанаÑ"
-
-#: camel/providers/smtp/camel-smtp-transport.c:176
-msgid "Syntax error in parameters or arguments"
-msgstr "СынтакÑÑ‹Ñ‡Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñž парамÑтрах ці аргумÑнтах"
-
-#: camel/providers/smtp/camel-smtp-transport.c:178
-msgid "Command not implemented"
-msgstr "Каманда не Ñ€Ñалізавана"
-
-#: camel/providers/smtp/camel-smtp-transport.c:180
-msgid "Command parameter not implemented"
-msgstr "ПарамÑтар каманды не Ñ€Ñалізаваны"
-
-#: camel/providers/smtp/camel-smtp-transport.c:182
-msgid "System status, or system help reply"
-msgstr "Стан ÑÑ‹ÑÑ‚Ñмы ці адказ даведкі ÑÑ‹ÑÑ‚Ñмы"
-
-#: camel/providers/smtp/camel-smtp-transport.c:184
-msgid "Help message"
-msgstr "Даведачнае паведамленьне"
-
-#: camel/providers/smtp/camel-smtp-transport.c:186
-msgid "Service ready"
-msgstr "ПаÑлуга гатова"
-
-#: camel/providers/smtp/camel-smtp-transport.c:188
-msgid "Service closing transmission channel"
-msgstr "ПаÑлуга зачыніла канал перадачы"
-
-#: camel/providers/smtp/camel-smtp-transport.c:190
-msgid "Service not available, closing transmission channel"
-msgstr "ПаÑлуга недаÑтупна, закрыцьцё канала перадачы"
-
-#: camel/providers/smtp/camel-smtp-transport.c:192
-msgid "Requested mail action okay, completed"
-msgstr "Запытанае паштовае дзеÑньне выканана"
-
-#: camel/providers/smtp/camel-smtp-transport.c:194
-msgid "User not local; will forward to <forward-path>"
-msgstr "ÐелÑкальны карыÑтальнік; будзе даÑлана да <шлÑÑ…-адпраўкі>"
-
-#: camel/providers/smtp/camel-smtp-transport.c:196
-msgid "Requested mail action not taken: mailbox unavailable"
-msgstr "Запытанае дзеÑньне з поштай не выканана: Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑÐºÑ€Ñ‹Ð½Ñ Ð½Ðµ даÑтупна"
-
-#: camel/providers/smtp/camel-smtp-transport.c:198
-msgid "Requested action not taken: mailbox unavailable"
-msgstr "Запытанае дзеÑньне не выканана: Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑÐºÑ€Ñ‹Ð½Ñ Ð½Ðµ даÑтупна"
-
-#: camel/providers/smtp/camel-smtp-transport.c:200
-msgid "Requested action aborted: error in processing"
-msgstr "Запытанае дзеÑньне адменена: памылка пад Ñ‡Ð°Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ–"
-
-#: camel/providers/smtp/camel-smtp-transport.c:202
-msgid "User not local; please try <forward-path>"
-msgstr "КарыÑтальнік не лÑкальны; калі лаÑка, паÑпрабуйце <шлÑÑ…-пераÑылкі>"
-
-#: camel/providers/smtp/camel-smtp-transport.c:204
-msgid "Requested action not taken: insufficient system storage"
-msgstr "Запытанае дзеÑньне не выканана: недаÑтаткова ÑÑ‹ÑÑ‚Ñмнага Ñховішча"
-
-#: camel/providers/smtp/camel-smtp-transport.c:206
-msgid "Requested mail action aborted: exceeded storage allocation"
-msgstr "Запытанае дзеÑньне перарванае: вычарпана мейÑца Ñž Ñховішчы"
-
-#: camel/providers/smtp/camel-smtp-transport.c:208
-msgid "Requested action not taken: mailbox name not allowed"
-msgstr "Запытанае дзеÑньне не выканана: назва паштовае Ñкрыні недапушчальна"
-
-#: camel/providers/smtp/camel-smtp-transport.c:210
-msgid "Start mail input; end with <CRLF>.<CRLF>"
-msgstr "Пачатак уводу пошты; заканчÑньне паÑÑŒÐ»Ñ <CRLF>.<CRLF>"
-
-#: camel/providers/smtp/camel-smtp-transport.c:212
-msgid "Transaction failed"
-msgstr "Збой транÑакцыі"
-
-#: camel/providers/smtp/camel-smtp-transport.c:216
-msgid "A password transition is needed"
-msgstr "Ðеабходна перадача паролÑ"
-
-#: camel/providers/smtp/camel-smtp-transport.c:218
-msgid "Authentication mechanism is too weak"
-msgstr "ЗаÑлабы мÑханізм аўтарызацыі"
-
-#: camel/providers/smtp/camel-smtp-transport.c:220
-msgid "Encryption required for requested authentication mechanism"
-msgstr "Ð”Ð»Ñ Ð·Ð°Ð¿Ñ‹Ñ‚Ð°Ð½Ð°Ð³Ð° мÑханізма аўтарызацыі патрабуецца шыфраваньне"
-
-#: camel/providers/smtp/camel-smtp-transport.c:222
-msgid "Temporary authentication failure"
-msgstr "ЧаÑовы збой аўтарызацыі"
-
-#: camel/providers/smtp/camel-smtp-transport.c:224
-msgid "Authentication required"
-msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ Ð¿Ð°Ñ‚Ñ€Ð°Ð±ÑƒÐµÑ†Ñ†Ð°"
-
-#: camel/providers/smtp/camel-smtp-transport.c:308
-msgid "Welcome response error"
-msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на вітаньне"
-
-#: camel/providers/smtp/camel-smtp-transport.c:343
-#: camel/providers/smtp/camel-smtp-transport.c:382
-#, c-format
-msgid "Failed to connect to SMTP server %s in secure mode: %s"
-msgstr "Ðе атрымліваецца далучыцца да паÑлужніка SMTP %s у бÑÑьпечным Ñ€Ñжыме : %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:344
-msgid "server does not appear to support SSL"
-msgstr "здаецца, паÑлужнік не падтрымлівае SSL"
-
-#: camel/providers/smtp/camel-smtp-transport.c:358
-#, fuzzy, c-format
-msgid "STARTTLS command failed: %s"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:373
-#, fuzzy
-msgid "STARTTLS command failed"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:476
-#, c-format
-msgid "SMTP server %s does not support requested authentication type %s."
-msgstr "ПаÑлужнік SMTP %s не падтрымлівае запатрабаваны тып ідÑнтыфікацыі %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:514
-#, fuzzy, c-format
-msgid "%sPlease enter the SMTP password for %s on host %s"
-msgstr "%sКалі лаÑка, пазначце пароль SMTP Ð´Ð»Ñ %s@%s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:533
-#, c-format
-msgid ""
-"Unable to authenticate to SMTP server.\n"
-"%s\n"
-"\n"
-msgstr ""
-"Ðемагчыма аўтарызавацца на паÑлужніку SMTP.\n"
-"%s\n"
-"\n"
-
-#: camel/providers/smtp/camel-smtp-transport.c:657
-#, c-format
-msgid "SMTP server %s"
-msgstr "SMTP-паÑлужнік %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:659
-#, c-format
-msgid "SMTP mail delivery via %s"
-msgstr "ДаÑтаўка пошты SMTP праз %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:677
-#, fuzzy
-msgid "Cannot send message: service not connected."
-msgstr "Ðемагчыма даÑлаць паведамленьне: Ð½Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹ атрымоўцы."
-
-#: camel/providers/smtp/camel-smtp-transport.c:683
-msgid "Cannot send message: sender address not valid."
-msgstr "Ðемагчыма даÑлаць паведамленьне: памылковы Ð°Ð´Ñ€Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»Ñльніка."
-
-#: camel/providers/smtp/camel-smtp-transport.c:687
-msgid "Sending message"
-msgstr "Ðдпраўка паведамленьнÑ"
-
-#: camel/providers/smtp/camel-smtp-transport.c:702
-msgid "Cannot send message: no recipients defined."
-msgstr "Ðемагчыма даÑлаць паведамленьне: Ð½Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹ атрымоўцы."
-
-#: camel/providers/smtp/camel-smtp-transport.c:713
-msgid "Cannot send message: one or more invalid recipients"
-msgstr ""
-"Ðе атрымліваецца даÑлаць паведамленьне: пазначаны адзін ці некалькі "
-"некарÑктных атрымоўцаў"
-
-#: camel/providers/smtp/camel-smtp-transport.c:885
-msgid "SMTP Greeting"
-msgstr "Вітаньне SMTP"
-
-#: camel/providers/smtp/camel-smtp-transport.c:934
-#, fuzzy, c-format
-msgid "HELO command failed: %s"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:951
-#, fuzzy
-msgid "HELO command failed"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1017
-msgid "SMTP Authentication"
-msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ SMTP"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1023
-msgid "Error creating SASL authentication object."
-msgstr "Памылка ÑтварÑÐ½ÑŒÐ½Ñ Ð°Ð±'екта аўтарызацыі SASL"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1040
-#: camel/providers/smtp/camel-smtp-transport.c:1051
-#, fuzzy, c-format
-msgid "AUTH command failed: %s"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1057
-#, fuzzy
-msgid "AUTH command failed"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1119
-msgid "Bad authentication response from server.\n"
-msgstr "Ðдмоўны адказ ідÑнтыфікацыі ад паÑлужніка.\n"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1144
-#, fuzzy, c-format
-msgid "MAIL FROM command failed: %s: mail not sent"
-msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на MAIL FROM: %s: пошта не даÑлана"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1161
-#, fuzzy
-msgid "MAIL FROM command failed"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1185
-#, fuzzy, c-format
-msgid "RCPT TO command failed: %s: mail not sent"
-msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на RCPT TO: %s: пошта не даÑлана"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1204
-#, c-format
-msgid "RCPT TO <%s> failed"
-msgstr "RCPT TO <%s> Ð½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð»Ð°ÑÑ"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1243
-#: camel/providers/smtp/camel-smtp-transport.c:1301
-#: camel/providers/smtp/camel-smtp-transport.c:1320
-#, fuzzy, c-format
-msgid "DATA command failed: %s: mail not sent"
-msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на DATA: %s: пошта не даÑлана"
-
-#. we should have gotten instructions on how to use the DATA command:
-#. * 354 Enter mail, end with "." on a line by itself
-#.
-#: camel/providers/smtp/camel-smtp-transport.c:1260
-#: camel/providers/smtp/camel-smtp-transport.c:1336
-#, fuzzy
-msgid "DATA command failed"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1359
-#, fuzzy, c-format
-msgid "RSET command failed: %s"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1375
-#, fuzzy
-msgid "RSET command failed"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1398
-#, fuzzy, c-format
-msgid "QUIT command failed: %s"
-msgstr "Збой каманды IMAP: %s"
-
-#: camel/providers/smtp/camel-smtp-transport.c:1412
-#, fuzzy
-msgid "QUIT command failed"
-msgstr "Збой каманды IMAP: %s"
-
-#: composer/e-msg-composer-attachment-bar.c:106
-#, c-format
-msgid "%.0fK"
-msgstr "%.0fK"
-
-#: composer/e-msg-composer-attachment-bar.c:109
-#, c-format
-msgid "%.0fM"
-msgstr "%.0fM"
-
-#: composer/e-msg-composer-attachment-bar.c:112
-#, c-format
-msgid "%.0fG"
-msgstr "%.0fG"
-
-#: composer/e-msg-composer-attachment-bar.c:298 mail/em-utils.c:410
-msgid "attachment"
-msgstr "укладаньне"
-
-#: composer/e-msg-composer-attachment-bar.c:454
-msgid "Remove selected items from the attachment list"
-msgstr "Выдаліць Ð²Ñ‹Ð±Ñ€Ð°Ð½Ñ‹Ñ ÑлемÑнты Ñа ÑьпіÑа укладаньнÑÑž"
-
-#: composer/e-msg-composer-attachment-bar.c:494
-msgid "Add attachment..."
-msgstr "Дадаць укладаньне..."
-
-#: composer/e-msg-composer-attachment-bar.c:495
-msgid "Attach a file to the message"
-msgstr "УклаÑьці файл у паведамленьне"
-
-#: composer/e-msg-composer-attachment.c:173
-#: composer/e-msg-composer-attachment.c:189
-#, c-format
-msgid "Cannot attach file %s: %s"
-msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
-
-#: composer/e-msg-composer-attachment.c:181
-#, c-format
-msgid "Cannot attach file %s: not a regular file"
-msgstr "Ðемагчыма уклаÑьці файл %s: не зьÑўлÑецца Ñталым файлам"
-
-#: composer/e-msg-composer-attachment.glade.h:2
-msgid "Attachment Properties"
-msgstr "УлаÑьціваÑьці укладаньнÑ"
-
-#: composer/e-msg-composer-attachment.glade.h:4
-msgid "File name:"
-msgstr "Ðазва файла:"
-
-#: composer/e-msg-composer-attachment.glade.h:5
-msgid "MIME type:"
-msgstr "Тып MIME:"
-
-#: composer/e-msg-composer-attachment.glade.h:6
-#: composer/e-msg-composer-select-file.c:74
-msgid "Suggest automatic display of attachment"
-msgstr "Прапаноўваць аўтаматычнае адлюÑтраваньне укладаньнÑ"
-
-#: composer/e-msg-composer-hdrs.c:512
-msgid "Posting destination"
-msgstr "МейÑца прызначÑньнÑ"
-
-#: composer/e-msg-composer-hdrs.c:513
-#, fuzzy
-msgid "Choose folders to post the message to."
-msgstr "УклаÑьці файл у паведамленьне"
-
-#: composer/e-msg-composer-hdrs.c:547
-msgid "Click here for the address book"
-msgstr "Клікніце тутака Ð´Ð»Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑƒ кнігі адраÑоў"
-
-#.
-#. * Reply-To:
-#. *
-#. * Create this before we call create_from_optionmenu,
-#. * because that causes from_changed to be called, which
-#. * expects the reply_to fields to be initialized.
-#.
-#: composer/e-msg-composer-hdrs.c:577
-msgid "Reply-To:"
-msgstr "Ðдказаць на:"
-
-#.
-#. * From
-#.
-#: composer/e-msg-composer-hdrs.c:583
-msgid "From:"
-msgstr "Ðд каго:"
-
-#.
-#. * Subject
-#.
-#: composer/e-msg-composer-hdrs.c:589
-msgid "Subject:"
-msgstr "ТÑма:"
-
-#: composer/e-msg-composer-hdrs.c:598
-msgid "To:"
-msgstr "Каму:"
-
-#: composer/e-msg-composer-hdrs.c:599
-msgid "Enter the recipients of the message"
-msgstr "Пазначце атрымоўцаў паведамленьнÑ"
-
-#: composer/e-msg-composer-hdrs.c:602
-msgid "Cc:"
-msgstr "КопіÑ:"
-
-#: composer/e-msg-composer-hdrs.c:603
-msgid "Enter the addresses that will receive a carbon copy of the message"
-msgstr "Пазначце атрымоўцаў, ÑÐºÑ–Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°ÑŽÑ†ÑŒ копію паведамленьнÑ"
-
-#: composer/e-msg-composer-hdrs.c:606
-msgid "Bcc:"
-msgstr "Сх. копіÑ:"
-
-#: composer/e-msg-composer-hdrs.c:607
-msgid ""
-"Enter the addresses that will receive a carbon copy of the message without "
-"appearing in the recipient list of the message."
-msgstr ""
-"Пазначце адраÑÑ‹ Ñ‚Ñ‹Ñ…, хто атрымае копію паведамленьнÑ, не патрапіўшы Ñž ÑÑŒÐ¿Ñ–Ñ "
-"атрымоўцаў."
-
-#.
-#. * Post-To
-#.
-#: composer/e-msg-composer-hdrs.c:614
-msgid "Post To:"
-msgstr "ДаÑлаць на:"
-
-#: composer/e-msg-composer-hdrs.c:619
-#, fuzzy
-msgid "Click here to select folders to post to"
-msgstr "<клікніце тутака Ð´Ð»Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ Ñ‚Ñчкі>"
-
-#: composer/e-msg-composer-select-file.c:127
-msgid "Attach file(s)"
-msgstr "УклаÑьці файл(Ñ‹)"
-
-#: composer/e-msg-composer.c:704
-#, fuzzy
-msgid "Cannot sign outgoing message: No signing certificate set for this account"
-msgstr "ЗаўÑёды падпіÑываць паведамленьні, калі выкарыÑтоўваецца гÑÑ‚Ñ‹ уліковы запіÑ"
-
-#: composer/e-msg-composer.c:711
-#, fuzzy
-msgid ""
-"Cannot encrypt outgoing message: No encryption certificate set for this "
-"account"
-msgstr "ЗаўÑёды падпіÑываць паведамленьні, калі выкарыÑтоўваецца гÑÑ‚Ñ‹ уліковы запіÑ"
-
-#: composer/e-msg-composer.c:1265
-#, fuzzy
-msgid "Could not open file"
-msgstr "Ðемагчыма адкрыць паведамленьне"
-
-#: composer/e-msg-composer.c:1273
-msgid "Unable to retrieve message from editor"
-msgstr "Ðе атрымліваецца атрымаць паведамленьне з Ñ€Ñдактара"
-
-#: composer/e-msg-composer.c:1543
-#, fuzzy
-msgid "Untitled Message"
-msgstr "(Паведамленьне бÑз назвы)"
-
-#: composer/e-msg-composer.c:1573
-msgid "Open file"
-msgstr "Ðдкрыцьцё файла"
-
-#: composer/e-msg-composer.c:1980 mail/mail-account-gui.c:1491
-msgid "Autogenerated"
-msgstr "Створана аўтаматычна"
-
-#: composer/e-msg-composer.c:2079
-msgid "Signature:"
-msgstr "ПодпіÑ:"
-
-#: composer/e-msg-composer.c:2280
-#, c-format
-msgid "<b>%d</b> File Attached"
-msgstr "<b>%d</b> Файл далучаны"
-
-#: composer/e-msg-composer.c:2309
-msgid "Hide _Attachment Bar (drop attachments here)"
-msgstr ""
-
-#: composer/e-msg-composer.c:2312 composer/e-msg-composer.c:3268
-msgid "Show _Attachment Bar (drop attachments here)"
-msgstr ""
-
-#: composer/e-msg-composer.c:2329 composer/e-msg-composer.c:3160
-#: composer/e-msg-composer.c:3161
-msgid "Compose a message"
-msgstr "Стварыць паведамленьне"
-
-#: composer/e-msg-composer.c:2631
-#, fuzzy, c-format
-msgid "Attached message - %s"
-msgstr "ПерадаÑланае паведамленьне - %s"
-
-#. translators, this count will always be >1
-#: composer/e-msg-composer.c:2636 composer/e-msg-composer.c:2780
-#, fuzzy, c-format
-msgid "Attached message"
-msgstr "УклаÑьці арыгінальнае паведамленьне"
-
-#: composer/e-msg-composer.c:4314
-msgid ""
-"<b>(The composer contains a non-text message body, which cannot be edited.)"
-"<b>"
-msgstr ""
-"<b>(РÑдактар утрымлівае цела Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž фармаце (не Ñ‚ÑкÑьце), Ñкі "
-"нельга Ñ€Ñдагаваць.)<b>"
-
-#. mail-composer:no-attach primary
-#: composer/mail-composer-errors.xml.h:2
-#, fuzzy
-msgid "You cannot attach the file `{0}' to this message."
-msgstr "УклаÑьці файл у паведамленьне"
-
-#. mail-composer:attach-notfile primary
-#: composer/mail-composer-errors.xml.h:6
-msgid "The file `{0}' is not a regular file and cannot be sent in a message."
-msgstr ""
-
-#. mail-composer:attach-directory primary
-#: composer/mail-composer-errors.xml.h:8
-msgid "Directories can not be attached to Messages."
-msgstr ""
-
-#. mail-composer:attach-directory secondary
-#: composer/mail-composer-errors.xml.h:10
-msgid ""
-"To attach the contents of this directory, either attach the files in this "
-"directory individually, or create an archive of the directory and attach it."
-msgstr ""
-
-#. mail-composer:attach-nomessages primary
-#: composer/mail-composer-errors.xml.h:12
-#, fuzzy
-msgid "Could not retrieve messages to attach from {0}."
-msgstr "ÐеатрымалаÑÑ Ñтварыць канал: %s"
-
-#. mail-composer:attach-nomessages secondary
-#. mail-composer:no-sig-file secondary
-#. mail:no-create-tmp-path secondary
-#. mail:no-delete-folder secondary
-#. system:no-save-file secondary
-#. system:no-load-file secondary
-#: composer/mail-composer-errors.xml.h:14
-#: composer/mail-composer-errors.xml.h:42 mail/mail-errors.xml.h:100
-#: mail/mail-errors.xml.h:112 widgets/misc/e-system-errors.xml.h:11
-#: widgets/misc/e-system-errors.xml.h:15
-msgid "Because \"{1}\"."
-msgstr ""
-
-#. mail-composer:recover-autosave title
-#: composer/mail-composer-errors.xml.h:16
-#, fuzzy
-msgid "Unfinished messages found"
-msgstr "ÐаÑтупнае нечытанае паведамленьне"
-
-#. mail-composer:recover-autosave primary
-#: composer/mail-composer-errors.xml.h:18
-#, fuzzy
-msgid "Do you want to recover unfinished messages?"
-msgstr "Жадаеце захаваць зьмены?"
-
-#. mail-composer:recover-autosave secondary
-#: composer/mail-composer-errors.xml.h:20
-msgid ""
-"Evolution quit unexpectedly while you were composing a new message. "
-"Recovering the message will allow you to continue where you left off."
-msgstr ""
-
-#: composer/mail-composer-errors.xml.h:21
-#, fuzzy
-msgid "Don't Recover"
-msgstr "Ðе імпартаваць"
-
-#: composer/mail-composer-errors.xml.h:22
-#, fuzzy
-msgid "Recover"
-msgstr "Выдаліць"
-
-#. mail-composer:no-autosave primary
-#: composer/mail-composer-errors.xml.h:24
-#, fuzzy
-msgid "Could not save to autosave file \"{0}\"."
-msgstr "Ðеатрымліваецца захаваць файл подпіÑа: %s"
-
-#. mail-composer:no-autosave secondary
-#: composer/mail-composer-errors.xml.h:26
-#, fuzzy
-msgid "Error saving to autosave because \"{1}\"."
-msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð»Ñ‹Ñ‡Ð°Ðº."
-
-#. mail-composer:exit-unsaved title
-#: composer/mail-composer-errors.xml.h:28
-msgid "Warning: Modified Message"
-msgstr "Увага: Зьмененае паведамленьне"
-
-#. mail-composer:exit-unsaved primary
-#: composer/mail-composer-errors.xml.h:30
-#, fuzzy
-msgid ""
-"Are you sure you want to discard the message, titled '{0}', you are "
-"composing?"
-msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑтую ÑуÑÑ‚Ñ€Ñчу бÑз назвы?"
-
-#. mail-composer:exit-unsaved secondary
-#: composer/mail-composer-errors.xml.h:32
-msgid ""
-"Closing this composer window will discard the message permanently, unless "
-"you choose to save the message in your Drafts folder. This will allow you to "
-"continue the message at a later date."
-msgstr ""
-
-#: composer/mail-composer-errors.xml.h:34
-msgid "Save Message"
-msgstr "Захаваць паведамленьне"
-
-#. mail-composer:no-build-message primary
-#: composer/mail-composer-errors.xml.h:36
-msgid "Could not create message."
-msgstr "Ðе магчыма Ñтварыць паведамленьне"
-
-#. mail-composer:no-build-message secondary
-#: composer/mail-composer-errors.xml.h:38
-msgid "Because \"{0}\", you may need to select different mail options."
-msgstr ""
-
-#. mail-composer:no-sig-file primary
-#: composer/mail-composer-errors.xml.h:40
-msgid "Could not read signature file \"{0}\"."
-msgstr "Ðемагчыма прачытаць файл подпіÑу \"{0}\"."
-
-#. mail-composer:all-accounts-deleted primary
-#: composer/mail-composer-errors.xml.h:44
-msgid "All accounts have been removed."
-msgstr ""
-
-#. mail-composer:all-accounts-deleted secondary
-#: composer/mail-composer-errors.xml.h:46
-msgid "You need to configure an account before you can compose mail."
-msgstr ""
-"Ð’Ñ‹ муÑіце наладзіць уліковы запіÑ\n"
-"да таго Ñк Ñтварыць паведамленьне."
-
-#. mail-composer:no-address-control primary
-#. mail-composer:no-editor-control primary
-#: composer/mail-composer-errors.xml.h:48
-#: composer/mail-composer-errors.xml.h:52
-msgid "Could not create composer window."
-msgstr "Ðемагчыма Ñтварыць акно Ñ€Ñдактару паведамленьнÑ."
-
-#. mail-composer:no-address-control secondary
-#: composer/mail-composer-errors.xml.h:50
-#, fuzzy
-msgid "Unable to activate the address selector control."
-msgstr ""
-"Ðемагчыма Ñтварыць акно Ñ€Ñдактара.\n"
-"Ðемагчыма актывізаваць кіраваньне выбарам адраÑÑ‹."
-
-#. mail-composer:no-editor-control secondary
-#: composer/mail-composer-errors.xml.h:54
-#, fuzzy
-msgid ""
-"Unable to activate the HTML editor control.\n"
-"\n"
-"Please make sure that you have the correct version of gtkhtml and libgtkhtml "
-"installed."
-msgstr ""
-"Ðемагчыма Ñтварыць акно Ñ€Ñдактара.\n"
-"Ðемагчыма актывізаваць кампанÑнт Ñ€Ñдактара HTML.\n"
-"Калі лаÑка, праверце карÑктнаÑьць уÑталÑванае вÑÑ€ÑÑ‹Ñ–\n"
-"gtkhtml Ñ– libgtkhtml.\n"
-
-#: data/evolution.desktop.in.in.h:1
-msgid "The Ximian Evolution Groupware Suite"
-msgstr "Збор даÑтаÑаваньнÑÑž Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð°Ð²Ð¾Ð¹ працы \"ЭвалюцыÑ\""
-
-#: data/evolution.desktop.in.in.h:2
-msgid "Ximian Evolution (Unstable)"
-msgstr "\"Ð­Ð²Ð°Ð»ÑŽÑ†Ñ‹Ñ Ximian\""
-
-#: data/evolution.keys.in.in.h:1
-msgid "address card"
-msgstr "візытоўка"
-
-#: data/evolution.keys.in.in.h:2
-msgid "calendar information"
-msgstr "Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñƒ"
-
-#: designs/OOA/ooa.glade.h:1
-msgid ""
-"<b>Currently, your status is \"Out of the Office\". </b>\n"
-"\n"
-"Would you like to change your status to \"In the Office\"? "
-msgstr ""
-"<b>Зараз, ваш Ñтан пазначаны Ñк \"За межамі офіÑа\". </b>\n"
-"\n"
-"Жадаеце зьмÑніць ваш Ñтан на \"У офіÑе\"? "
-
-#: designs/OOA/ooa.glade.h:4
-msgid "<b>Out of Office Message:</b>"
-msgstr "<b>Паведамленьне, Ð¿Ð°ÐºÑ–Ð´Ð°Ð½ÑŒÐ½Ñ Ð¾Ñ„Ñ–Ñу:</b>"
-
-#: designs/OOA/ooa.glade.h:5
-msgid "<b>Status:</b>"
-msgstr "<b>Стан:</b>"
-
-#: designs/OOA/ooa.glade.h:6
-msgid ""
-"<small>The message specified below will be automatically sent to each person "
-"who sends\n"
-"mail to you while you are out of the office.</small>"
-msgstr ""
-
-#: designs/OOA/ooa.glade.h:8
-msgid "I am currently in the office"
-msgstr "Я зараз у офіÑе"
-
-#: designs/OOA/ooa.glade.h:9
-msgid "I am currently out of the office"
-msgstr "Зараз Ñ Ð¿Ð°-за межамі офіÑа"
-
-#: designs/OOA/ooa.glade.h:10
-msgid "No, Don't Change Status"
-msgstr "Ðе, не зьмÑнÑць Ñтан"
-
-#: designs/OOA/ooa.glade.h:12
-msgid "Out of Office Assistant"
-msgstr "Пакінуў офіÑ"
-
-#: designs/OOA/ooa.glade.h:13
-msgid "Yes, Change Status"
-msgstr "Так, зьмÑніць Ñтан"
-
-#: designs/read_receipts/read.glade.h:1
-msgid " "
-msgstr " "
-
-#: designs/read_receipts/read.glade.h:2
-msgid "<b>Receiving Email</b>"
-msgstr "<b> Ðтрыманьне пошты</b>"
-
-#: designs/read_receipts/read.glade.h:3
-msgid "<b>Sending Email:</b>"
-msgstr "<b> Ðдпраўка пошты</b>"
-
-#: designs/read_receipts/read.glade.h:4
-msgid ""
-"<small>This page allows you to choose if you want to be notified via a read "
-"receipt when a message you\n"
-"sent is read, and to specify what Evolution should do when someone requests "
-"a receipt from you.</small>"
-msgstr ""
-
-#: designs/read_receipts/read.glade.h:6
-msgid "Always send back a read reciept"
-msgstr "ЗаўÑёды даÑылаць пацьверджаньне аб прачытаньні"
-
-#: designs/read_receipts/read.glade.h:7
-msgid "Ask me if I want to send back a read receipt"
-msgstr "Запытацца мÑне ці жадаю Ñ Ð´Ð°Ñлаць пацьверджаньне аб прачытаньні"
-
-#: designs/read_receipts/read.glade.h:8
-msgid "Never send back a read receipt"
-msgstr "Ðіколі не даÑылаць пацьверджаньне аб прачытаньні"
-
-#: designs/read_receipts/read.glade.h:9
-msgid "Read Receipts"
-msgstr "Чытаньне атрыманага"
-
-#: designs/read_receipts/read.glade.h:10
-msgid "Request a read receipt for all messages I send"
-msgstr "Запытваць пацьверджаньне Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ ÑƒÑÑ–Ñ… паведамленьнÑÑž ÑÐºÑ–Ñ Ñ Ð´Ð°Ñылаю"
-
-#: designs/read_receipts/read.glade.h:11
-msgid "Unless the message is sent to a mailing list, and not to me personally"
-msgstr "Пакуль паведамленьне даÑылаецца у ÑÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі, а не пÑÑ€Ñанальна мне"
-
-#: designs/read_receipts/read.glade.h:12
-msgid ""
-"When you receive an email with a read receipt request, what should Evolution "
-"do?"
-msgstr ""
-"Калі вы атрымалі паведамленьне з пацьверджаньнем Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ð²Ð°ÑˆÐ°Ð³Ð° ліÑта, "
-"што муÑіць рабіць \"ЭвалюцыÑ\"?"
-
-#: e-util/e-dialog-utils.c:253
-msgid ""
-"A file by that name already exists.\n"
-"Overwrite it?"
-msgstr ""
-"Файл з гÑтай назвай ужо Ñ–Ñнуе.\n"
-"ПерапіÑаць?"
-
-#. system:ask-save-file-exists-overwrite title
-#: e-util/e-dialog-utils.c:255 widgets/misc/e-system-errors.xml.h:2
-msgid "Overwrite file?"
-msgstr "ПерапіÑаць файл?"
-
-#: e-util/e-passwords.c:358
-msgid "Remember this password"
-msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
-
-#: e-util/e-passwords.c:360
-msgid "Remember this password for the remainder of this session"
-msgstr "Запомніць гÑÑ‚Ñ‹ пароль да заканчÑÐ½ÑŒÐ½Ñ ÑÑанÑа"
-
-#: e-util/e-pilot-settings.c:93
-msgid "Sync Private Records:"
-msgstr "Сынхранізаваць Ð¿Ñ€Ñ‹Ð²Ð°Ñ‚Ð½Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹:"
-
-#: e-util/e-pilot-settings.c:102
-msgid "Sync Categories:"
-msgstr "Сынхранізаваць катÑгорыі:"
-
-#. strptime format of a weekday, a date and a time,
-#. in 12-hour format, without seconds.
-#. strftime format of a weekday, a date and a
-#. time, in 12-hour format, without seconds.
-#: e-util/e-time-utils.c:185 e-util/e-time-utils.c:398
-msgid "%a %m/%d/%Y %I:%M %p"
-msgstr "%a %d/%m/%Y %I:%M %p"
-
-#. strptime format of a weekday, a date and a time,
-#. in 24-hour format, without seconds.
-#. strftime format of a weekday, a date and a
-#. time, in 24-hour format, without seconds.
-#: e-util/e-time-utils.c:190 e-util/e-time-utils.c:389
-msgid "%a %m/%d/%Y %H:%M"
-msgstr "%a %d/%m/%Y %H:%M"
-
-#. strptime format of a weekday, a date and a time,
-#. in 12-hour format, without minutes or seconds.
-#: e-util/e-time-utils.c:195
-msgid "%a %m/%d/%Y %I %p"
-msgstr "%a %d/%m/%Y %I %p"
-
-#. strptime format of a weekday, a date and a time,
-#. in 24-hour format, without minutes or seconds.
-#: e-util/e-time-utils.c:200
-msgid "%a %m/%d/%Y %H"
-msgstr "%a %d/%m/%Y %H"
-
-#. strptime format of a date and a time, in 12-hour format.
-#: e-util/e-time-utils.c:211
-msgid "%m/%d/%Y %I:%M:%S %p"
-msgstr "%d/%m/%Y %I:%M:%S %p"
-
-#. strptime format of a date and a time, in 24-hour format.
-#: e-util/e-time-utils.c:215
-msgid "%m/%d/%Y %H:%M:%S"
-msgstr "%d/%m/%Y %H:%M:%S"
-
-#. strptime format of a date and a time, in 12-hour format,
-#. without seconds.
-#: e-util/e-time-utils.c:220
-msgid "%m/%d/%Y %I:%M %p"
-msgstr "%d/%m/%Y %I:%M %p"
-
-#. strptime format of a date and a time, in 24-hour format,
-#. without seconds.
-#: e-util/e-time-utils.c:225
-msgid "%m/%d/%Y %H:%M"
-msgstr "%d/%m/%Y %H:%M"
-
-#. strptime format of a date and a time, in 12-hour format,
-#. without minutes or seconds.
-#: e-util/e-time-utils.c:230
-msgid "%m/%d/%Y %I %p"
-msgstr "%d/%m/%Y %I %p"
-
-#. strptime format of a date and a time, in 24-hour format,
-#. without minutes or seconds.
-#: e-util/e-time-utils.c:235
-msgid "%m/%d/%Y %H"
-msgstr "%d/%m/%Y %H"
-
-#. strptime format for a time of day, in 12-hour format.
-#. strftime format of a time in 12-hour format.
-#: e-util/e-time-utils.c:339 e-util/e-time-utils.c:438
-msgid "%I:%M:%S %p"
-msgstr "%I:%M:%S %p"
-
-#. strptime format for a time of day, in 24-hour format.
-#. strftime format of a time in 24-hour format.
-#: e-util/e-time-utils.c:343 e-util/e-time-utils.c:430
-msgid "%H:%M:%S"
-msgstr "%H:%M:%S"
-
-#. strptime format for time of day, without seconds,
-#. in 12-hour format.
-#. strftime format of a time in 12-hour format,
-#. without seconds.
-#. This is a strftime() format. %I = hour (1-12), %M = minute, %p = am/pm string.
-#: e-util/e-time-utils.c:348 e-util/e-time-utils.c:435
-#: widgets/misc/e-dateedit.c:1414 widgets/misc/e-dateedit.c:1639
-msgid "%I:%M %p"
-msgstr "%I:%M %p"
-
-#. strptime format for time of day, without seconds 24-hour format.
-#. strftime format of a time in 24-hour format,
-#. without seconds.
-#. This is a strftime() format. %H = hour (0-23), %M = minute.
-#: e-util/e-time-utils.c:352 e-util/e-time-utils.c:427
-#: widgets/misc/e-dateedit.c:1411 widgets/misc/e-dateedit.c:1636
-msgid "%H:%M"
-msgstr "%H:%M"
-
-#. strptime format for hour and AM/PM, 12-hour format.
-#: e-util/e-time-utils.c:356
-msgid "%I %p"
-msgstr "%I %p"
-
-#: filter/filter-datespec.c:73
-#, c-format
-msgid "1 second ago"
-msgstr "1 ÑÑкунда таму"
-
-#: filter/filter-datespec.c:74
-#, c-format
-msgid "1 minute ago"
-msgstr "1 хвіліна таму"
-
-#: filter/filter-datespec.c:75
-#, c-format
-msgid "1 hour ago"
-msgstr "1 гадзіна таму"
-
-#: filter/filter-datespec.c:76
-#, c-format
-msgid "1 day ago"
-msgstr "1 дзень таму"
-
-#: filter/filter-datespec.c:77
-#, c-format
-msgid "1 week ago"
-msgstr "1 тыдзень таму"
-
-#: filter/filter-datespec.c:78
-#, c-format
-msgid "1 month ago"
-msgstr "1 меÑÑц таму"
-
-#: filter/filter-datespec.c:79
-#, c-format
-msgid "1 year ago"
-msgstr "1 год таму"
-
-#: filter/filter-datespec.c:280
-msgid "<click here to select a date>"
-msgstr "<клікніце тутака Ð´Ð»Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ даты>"
-
-#: filter/filter-datespec.c:283 filter/filter-datespec.c:294
-msgid "now"
-msgstr "зараз"
-
-#. strftime for date filter display, only needs to show a day date (i.e. no time)
-#: filter/filter-datespec.c:290
-msgid "%d-%b-%Y"
-msgstr "%d-%b-%Y"
-
-#: filter/filter-datespec.c:406
-msgid "Select a time to compare against"
-msgstr "Выбраць Ñ‡Ð°Ñ Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°ÑžÐ½Ð°Ð½ÑŒÐ½Ñ"
-
-#. filter:no-date primary
-#: filter/filter-errors.xml.h:2
-msgid "Missing date."
-msgstr "ÐеÑтае даты."
-
-#. filter:no-date secondary
-#: filter/filter-errors.xml.h:4
-msgid "You must choose a date."
-msgstr "Ð’Ñ‹ муÑіце пазначыць дату."
-
-#. filter:no-file primary
-#: filter/filter-errors.xml.h:6
-msgid "Missing file name."
-msgstr "ÐеÑтае назвы файла."
-
-#. filter:no-file secondary
-#. filter:bad-file secondary
-#: filter/filter-errors.xml.h:8 filter/filter-errors.xml.h:12
-msgid "You must specify a file name."
-msgstr "Ð’Ñ‹ муÑіце пазначыць назву файла."
-
-#. filter:bad-file primary
-#: filter/filter-errors.xml.h:10
-msgid "File \"{0}\" does not exist or is not a regular file."
-msgstr "Файл \"{0}\" не Ñ–Ñнуе альбо не зьÑўлÑецца звычайным файлам."
-
-#. filter:bad-regexp primary
-#: filter/filter-errors.xml.h:14
-msgid "Bad regular expression \"{0}\"."
-msgstr "Памылка Ñž Ñталым выразе \"{0}\"."
-
-#. filter:bad-regexp secondary
-#: filter/filter-errors.xml.h:16
-msgid "Could not compile regular expression \"{1}\"."
-msgstr ""
-
-#. filter:no-name primary
-#. mail:no-name-vfolder primary
-#: filter/filter-errors.xml.h:18 mail/mail-errors.xml.h:214
-msgid "Missing name."
-msgstr "ÐеÑтае назвы."
-
-#. filter:no-name secondary
-#: filter/filter-errors.xml.h:20
-msgid "You must name this filter."
-msgstr "Ð’Ñ‹ муÑіце назваць цÑдаль."
-
-#. filter:bad-name-notunique primary
-#: filter/filter-errors.xml.h:22
-msgid "Name \"{0}\" already used."
-msgstr ""
-
-#. filter:bad-name-notunique secondary
-#: filter/filter-errors.xml.h:24
-msgid "Please choose another name."
-msgstr ""
-
-#: filter/filter-file.c:288
-msgid "Choose a file"
-msgstr "Выбар файла"
-
-#: filter/filter-label.c:121 mail/em-filter-i18n.h:26 mail/em-migrate.c:1011
-#: mail/mail-config.c:76 mail/mail-config.glade.h:93
-msgid "Important"
-msgstr "Важнае"
-
-#. forest green
-#: filter/filter-label.c:124 mail/em-migrate.c:1014 mail/mail-config.c:79
-#: mail/mail-config.glade.h:148
-msgid "To Do"
-msgstr "ТрÑба выканаць"
-
-#. blue
-#: filter/filter-label.c:125 mail/em-migrate.c:1015 mail/mail-config.c:80
-#: mail/mail-config.glade.h:97
-msgid "Later"
-msgstr "Пазьней"
-
-#: filter/filter-part.c:532 shell/GNOME_Evolution_Test.server.in.in.h:3
-msgid "Test"
-msgstr "ТÑÑÑ‚"
-
-#: filter/filter-rule.c:790
-msgid "Rule name:"
-msgstr "Ðазва правіла:"
-
-#: filter/filter-rule.c:817
-msgid "<b>If</b>"
-msgstr "<b>Калі</b> "
-
-#: filter/filter-rule.c:854
-msgid "if all criteria are met"
-msgstr "калі адпавÑдае ÑžÑім крытÑрам"
-
-#: filter/filter-rule.c:854
-msgid "if any criteria are met"
-msgstr "калі задавальнÑе па любому з крытÑраў"
-
-#: filter/filter-rule.c:856
-msgid "Execute actions"
-msgstr "Выканаць дзеÑньні"
-
-#: filter/filter-rule.c:877
-#, fuzzy
-msgid "All related"
-msgstr "ДÑлегаваны"
-
-#: filter/filter-rule.c:877
-msgid "Replies"
-msgstr "Ðдказы"
-
-#: filter/filter-rule.c:877
-#, fuzzy
-msgid "Replies and parents"
-msgstr "Ðдказана на"
-
-#: filter/filter-rule.c:879
-msgid "Include threads"
-msgstr "Уключыць ніці"
-
-#: filter/filter-rule.c:974
-msgid "incoming"
-msgstr "атрыманае"
-
-#: filter/filter-rule.c:974
-msgid "outgoing"
-msgstr "даÑланае"
-
-#: filter/filter.glade.h:1
-msgid "<b>_Filter Rules</b>"
-msgstr "<b>Правілы цÑдалю</b>"
-
-#: filter/filter.glade.h:2
-msgid "Compare against"
-msgstr "Параўнаць з"
-
-#: filter/filter.glade.h:3
-msgid "Incoming"
-msgstr "ÐтрыманыÑ"
-
-#: filter/filter.glade.h:4
-msgid ""
-"The message's date will be compared against\n"
-"12:00am of the date specified."
-msgstr ""
-"Дата Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð±ÑƒÐ´Ð·Ðµ параўнана з\n"
-"12 гадзінамі пазначанай даты."
-
-#: filter/filter.glade.h:6
-#, fuzzy
-msgid ""
-"The message's date will be compared against\n"
-"a time relative to when filtering occurs."
-msgstr ""
-"Дата Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð±ÑƒÐ´Ð·Ðµ параўнана з\n"
-"12 гадзінамі пазначанай даты."
-
-#: filter/filter.glade.h:8
-#, fuzzy
-msgid ""
-"The message's date will be compared against\n"
-"the current time when filtering occurs."
-msgstr ""
-"Дата Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð±ÑƒÐ´Ð·Ðµ параўнана з\n"
-"12 гадзінамі пазначанай даты."
-
-#: filter/filter.glade.h:11
-msgid "a time relative to the current time"
-msgstr "Ñ‡Ð°Ñ Ð°Ð´Ð½Ð¾Ñна бÑгучага"
-
-#: filter/filter.glade.h:12
-msgid "ago"
-msgstr "раней"
-
-#: filter/filter.glade.h:16
-msgid "months"
-msgstr "меÑÑцы"
-
-#: filter/filter.glade.h:17 mail/mail-config.glade.h:184
-msgid "seconds"
-msgstr "ÑÑкундаў"
-
-#: filter/filter.glade.h:18
-msgid "the current time"
-msgstr "бÑгучы чаÑ"
-
-#: filter/filter.glade.h:19
-msgid "the time you specify"
-msgstr "пазначаны вамі чаÑ"
-
-#: filter/filter.glade.h:21
-msgid "years"
-msgstr "гады"
-
-#: filter/rule-editor.c:285
-msgid "Add Rule"
-msgstr "Дадаць правіла"
-
-#: filter/rule-editor.c:361
-msgid "Edit Rule"
-msgstr "РÑдагаваць правіла"
-
-#: filter/rule-editor.c:685
-msgid "Rule name"
-msgstr "Ðазва правіла"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:1
-msgid "*Control*F1"
-msgstr "*Control*F1"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:2
-msgid "Composer Preferences"
-msgstr "Перавагі Ñ€Ñдактара"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:3
-msgid "Configure mail preferences, including security and message display, here"
-msgstr ""
-"Тут наладжваюцца парамÑтры пошты, уключаючы бÑÑьпеку й адлюÑтраваньне "
-"паведамленьнÑÑž"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:4
-msgid "Configure spell-checking, signatures, and the message composer here"
-msgstr "Тут наладжваюцца подпіÑÑ‹ й ÑтварÑньне паведамленьнÑÑž, ды праверка·правапіÑу"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:5
-msgid "Configure your email accounts here"
-msgstr "Ðаладка вашых уліковых запіÑаў пошты робіцца тут"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:6
-msgid "Evolution Mail"
-msgstr "Пошта \"Эвалюцыі\""
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:7
-msgid "Evolution Mail accounts configuration control"
-msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑžÐ»Ñ–ÐºÐ¾Ð²Ñ‹Ð¼Ñ– запіÑамі пошты \"Эвалюцыі\""
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:8
-msgid "Evolution Mail component"
-msgstr "КампанÑнт пошты \"Эвалюцыі\""
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:9
-msgid "Evolution Mail composer"
-msgstr "РÑдактар паведамленьнÑÑž \"Эвалюцыі\""
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:10
-msgid "Evolution Mail composer configuration control"
-msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ€Ñдактарам паведамленьнÑÑž \"Эвалюцыі\""
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:11
-msgid "Evolution Mail preferences control"
-msgstr "Кіраваньне перавагамі пошты \"Эвалюцыі\""
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:12 mail/em-folder-view.c:419
-#: mail/importers/elm-importer.c:418 mail/importers/netscape-importer.c:1902
-#: mail/importers/pine-importer.c:474 mail/mail-component.c:506
-#: mail/mail-component.c:557
-msgid "Mail"
-msgstr "Пошта"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:13
-msgid "Mail Accounts"
-msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:14 mail/mail-config.glade.h:99
-msgid "Mail Preferences"
-msgstr "Перавагі пошты"
-
-#: mail/GNOME_Evolution_Mail.server.in.in.h:15
-msgid "_Mail"
-msgstr "_Пошта"
-
-#. translators: default account indicator
-#: mail/em-account-prefs.c:418
-msgid "[Default]"
-msgstr "[Дапомна]"
-
-#: mail/em-account-prefs.c:472
-msgid "Account name"
-msgstr "Ðазва уліковага запіÑу"
-
-#: mail/em-account-prefs.c:474
-msgid "Protocol"
-msgstr "Пратакол"
-
-#: mail/em-composer-prefs.c:305 mail/em-composer-prefs.c:424
-#: mail/mail-config.c:1045
-msgid "Unnamed"
-msgstr "БÑз назвы"
-
-#: mail/em-composer-prefs.c:909
-msgid "Language(s)"
-msgstr "Мова(ы)"
-
-#: mail/em-composer-prefs.c:955
-msgid "Add signature script"
-msgstr "Дадаць ÑцÑнар подпіÑу"
-
-#: mail/em-composer-prefs.c:975
-msgid "Signature(s)"
-msgstr "ПодпіÑ(Ñ‹)"
-
-#: mail/em-composer-utils.c:887
-msgid "-------- Forwarded Message --------"
-msgstr "----- ПераÑланае паведамленьне -----"
-
-#: mail/em-composer-utils.c:1500
-msgid "an unknown sender"
-msgstr "невÑдомы адпраўлÑльнік"
-
-#. Note to translators: this is the attribution string used when quoting messages.
-#. * each ${Variable} gets replaced with a value. To see a full list of available
-#. * variables, see em-composer-utils.c:1514
-#: mail/em-composer-utils.c:1547
-msgid ""
-"On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} "
-"${TimeZone}, ${Sender} wrote:"
-msgstr ""
-
-#: mail/em-filter-editor.c:147
-msgid "_Filter Rules"
-msgstr "Правілы цÑдалю"
-
-#: mail/em-filter-folder-element.c:237 mail/em-vfolder-rule.c:494
-#: mail/mail-account-gui.c:1347
-msgid "Select Folder"
-msgstr "Выбраць Ñ‚Ñчку"
-
-#. Automatically generated. Do not edit.
-#: mail/em-filter-i18n.h:2
-msgid "Adjust Score"
-msgstr "Падправіць лік"
-
-#: mail/em-filter-i18n.h:3
-msgid "Assign Color"
-msgstr "ЗьвÑзаць колер"
-
-#: mail/em-filter-i18n.h:4
-msgid "Assign Score"
-msgstr "Прызначыць лік"
-
-#: mail/em-filter-i18n.h:5
-msgid "Attachments"
-msgstr "Укладаньні"
-
-#: mail/em-filter-i18n.h:6
-msgid "Beep"
-msgstr "Сыгнал"
-
-#: mail/em-filter-i18n.h:7
-msgid "contains"
-msgstr "утрымлівае"
-
-#: mail/em-filter-i18n.h:8
-msgid "Copy to Folder"
-msgstr "КапіÑваць у Ñ‚Ñчку"
-
-#: mail/em-filter-i18n.h:9
-msgid "Date received"
-msgstr "Дата атрыманьнÑ"
-
-#: mail/em-filter-i18n.h:10
-msgid "Date sent"
-msgstr "Дата адпраўленьнÑ"
-
-#: mail/em-filter-i18n.h:12
-msgid "Deleted"
-msgstr "Выдаленае"
-
-#: mail/em-filter-i18n.h:13
-msgid "does not contain"
-msgstr "Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ"
-
-#: mail/em-filter-i18n.h:14
-msgid "does not end with"
-msgstr "не канчаецца на"
-
-#: mail/em-filter-i18n.h:15
-msgid "does not exist"
-msgstr "Ð½Ñ Ñ–Ñнуе"
-
-#: mail/em-filter-i18n.h:16
-msgid "does not return"
-msgstr "не вÑртае"
-
-#: mail/em-filter-i18n.h:17
-msgid "does not sound like"
-msgstr "не гучыць Ñк"
-
-#: mail/em-filter-i18n.h:18
-msgid "does not start with"
-msgstr "не пачынаецца на"
-
-#: mail/em-filter-i18n.h:19
-msgid "Do Not Exist"
-msgstr "Ðе Ñ–Ñнуе"
-
-#: mail/em-filter-i18n.h:20
-msgid "Draft"
-msgstr "Чарнавік"
-
-#: mail/em-filter-i18n.h:21
-msgid "ends with"
-msgstr "канчаецца на"
-
-#: mail/em-filter-i18n.h:22
-msgid "Exist"
-msgstr "ІÑнуе"
-
-#: mail/em-filter-i18n.h:23
-msgid "exists"
-msgstr "Ñ–Ñнуе"
-
-#: mail/em-filter-i18n.h:24
-msgid "Expression"
-msgstr "Выраз"
-
-#: mail/em-filter-i18n.h:25
-msgid "Follow Up"
-msgstr "ПаднÑцца вышÑй"
-
-#: mail/em-filter-i18n.h:27
-msgid "is"
-msgstr "гÑта"
-
-#: mail/em-filter-i18n.h:28
-msgid "is after"
-msgstr "паÑьлÑ"
-
-#: mail/em-filter-i18n.h:29
-msgid "is before"
-msgstr "перад"
-
-#: mail/em-filter-i18n.h:30
-msgid "is Flagged"
-msgstr "пазначана"
-
-#: mail/em-filter-i18n.h:31
-msgid "is greater than"
-msgstr "больш за"
-
-#: mail/em-filter-i18n.h:32
-msgid "is less than"
-msgstr "менш за"
-
-#: mail/em-filter-i18n.h:33
-msgid "is not"
-msgstr "Ð½Ñ Ð³Ñта"
-
-#: mail/em-filter-i18n.h:34
-msgid "is not Flagged"
-msgstr "не пазначана"
-
-#: mail/em-filter-i18n.h:36
-msgid "Junk Test"
-msgstr "ТÑÑÑ‚ на лухту"
-
-#: mail/em-filter-i18n.h:37 mail/em-folder-view.c:932
-#: widgets/misc/e-expander.c:189
-msgid "Label"
-msgstr "Ðдмеціна"
-
-#: mail/em-filter-i18n.h:38
-msgid "Mailing list"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі"
-
-#: mail/em-filter-i18n.h:39
-msgid "Message Body"
-msgstr "Цела паведамленьнÑ"
-
-#: mail/em-filter-i18n.h:40
-msgid "Message Header"
-msgstr "Загаловак паведамленьнÑ"
-
-#: mail/em-filter-i18n.h:41
-msgid "Message is Junk"
-msgstr "Паведамленьне Ñ‘Ñьць лухтой"
-
-#: mail/em-filter-i18n.h:42
-msgid "Message is not Junk"
-msgstr "Паведамленьне не лухта"
-
-#: mail/em-filter-i18n.h:43
-msgid "Move to Folder"
-msgstr "ПерамÑÑьціць у Ñ‚Ñчку"
-
-#: mail/em-filter-i18n.h:44
-msgid "Pipe to Program"
-msgstr "Канал да праграмы"
-
-#: mail/em-filter-i18n.h:45
-msgid "Play Sound"
-msgstr "Граць гук"
-
-#: mail/em-filter-i18n.h:46 mail/message-tag-followup.c:79
-msgid "Read"
-msgstr "Чытаньне"
-
-#: mail/em-filter-i18n.h:47
-msgid "Recipients"
-msgstr "Ðтрымоўцы"
-
-#: mail/em-filter-i18n.h:48
-msgid "Regex Match"
-msgstr "Супадзеньне Ñтал.выраза"
-
-#: mail/em-filter-i18n.h:49
-msgid "Replied to"
-msgstr "Ðдказана на"
-
-#: mail/em-filter-i18n.h:50
-msgid "returns"
-msgstr "вÑртае"
-
-#: mail/em-filter-i18n.h:51
-msgid "returns greater than"
-msgstr "вÑртае больш за"
-
-#: mail/em-filter-i18n.h:52
-msgid "returns less than"
-msgstr "вÑртае менш за"
-
-#: mail/em-filter-i18n.h:53
-msgid "Run Program"
-msgstr "ЗапуÑьціць праграму"
-
-#: mail/em-filter-i18n.h:54 mail/message-list.etspec.h:10
-msgid "Score"
-msgstr "Лік"
-
-#: mail/em-filter-i18n.h:55
-msgid "Sender"
-msgstr "ÐдпраўлÑльнік"
-
-#: mail/em-filter-i18n.h:56
-msgid "Set Status"
-msgstr "УÑталÑваць Ñтан"
-
-#: mail/em-filter-i18n.h:57
-msgid "Size (kB)"
-msgstr "Памер (kB)"
-
-#: mail/em-filter-i18n.h:58
-msgid "sounds like"
-msgstr "гукі Ñк"
-
-#: mail/em-filter-i18n.h:59
-msgid "Source Account"
-msgstr "Крыніца рахунка"
-
-#: mail/em-filter-i18n.h:60
-msgid "Specific header"
-msgstr "СпÑцыфічны загаловак"
-
-#: mail/em-filter-i18n.h:61
-msgid "starts with"
-msgstr "пачынаецца з"
-
-#: mail/em-filter-i18n.h:63
-msgid "Stop Processing"
-msgstr "Спыніць апрацоўку"
-
-#: mail/em-filter-i18n.h:64 mail/em-format-html.c:1550
-#: mail/em-format-quote.c:305 mail/em-format.c:805 mail/em-mailer-prefs.c:87
-#: mail/message-list.etspec.h:13 mail/message-tag-followup.c:329
-#: smime/lib/e-cert.c:1131
-msgid "Subject"
-msgstr "ТÑма"
-
-#: mail/em-filter-i18n.h:65
-msgid "Unset Status"
-msgstr "ÐдмÑніць папÑÑ€Ñдні Ñтан"
-
-#. and now for the action area
-#: mail/em-filter-rule.c:488
-msgid "<b>Then</b>"
-msgstr "<b>Тады</b> "
-
-#: mail/em-folder-browser.c:129
-msgid "Create _Virtual Folder From Search..."
-msgstr "Стварыць _віртуальную Ñ‚Ñчку вынікаў пошуку..."
-
-#: mail/em-folder-properties.c:122
-msgid "Folder Properties"
-msgstr "УлаÑьціваÑьці Ñ‚Ñчкі"
-
-#. TODO: can this be done in a loop?
-#: mail/em-folder-properties.c:161
-msgid "Total message:"
-msgstr "Ðгулам паведамленьнÑÑž:"
-
-#: mail/em-folder-properties.c:173
-msgid "Unread message:"
-msgstr "Ðе чытанае паведамленьне:"
-
-#: mail/em-folder-selection-button.c:120
-msgid "<click here to select a folder>"
-msgstr "<клікніце тутака Ð´Ð»Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ Ñ‚Ñчкі>"
-
-#: mail/em-folder-selector.c:166
-msgid "Create New Folder"
-msgstr "Стварыць новую Ñ‚Ñчку"
-
-#: mail/em-folder-selector.c:166 mail/em-folder-tree.c:2330
-#: mail/mail-component.c:707
-msgid "Specify where to create the folder:"
-msgstr "Пазначце дзе Ñтварыць Ñ‚Ñчку:"
-
-#: mail/em-folder-selector.c:300
-msgid "Create"
-msgstr "Стварыць"
-
-#: mail/em-folder-selector.c:304
-msgid "Folder _name:"
-msgstr "_Ðазва Ñ‚Ñчкі:"
-
-#: mail/em-folder-tree-model.c:200 mail/em-folder-tree-model.c:202
-#: mail/mail-vfolder.c:872
-msgid "VFolders"
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
-
-#. UNMATCHED is always last
-#: mail/em-folder-tree-model.c:206 mail/em-folder-tree-model.c:208
-msgid "UNMATCHED"
-msgstr ""
-
-#: mail/em-folder-tree-model.c:476 mail/em-folder-tree-model.c:780
-msgid "Loading..."
-msgstr "Загрузка..."
-
-#: mail/em-folder-tree.c:846
-#, c-format
-msgid "Moving folder %s"
-msgstr "ПерамÑшчÑньне Ñ‚Ñчкі %s"
-
-#: mail/em-folder-tree.c:848
-#, c-format
-msgid "Copying folder %s"
-msgstr "КапіÑваньне Ñ‚Ñчкі \"%s\""
-
-#: mail/em-folder-tree.c:855 mail/message-list.c:1566
-#, c-format
-msgid "Moving messages into folder %s"
-msgstr "ПерамÑшчÑньне паведамленьнÑÑž у Ñ‚Ñчку %s"
-
-#: mail/em-folder-tree.c:857 mail/message-list.c:1568
-#, c-format
-msgid "Copying messages into folder %s"
-msgstr "КапіÑваньне паведамленьнÑÑž у Ñ‚Ñчку %s"
-
-#: mail/em-folder-tree.c:873
-#, fuzzy
-msgid "Cannot drop message(s) into toplevel store"
-msgstr "Ðемагчыма капіÑваць ці перамÑÑьціць паведамленьні у віртуальную Ñ‚Ñчку"
-
-#: mail/em-folder-tree.c:963 ui/evolution-mail-message.xml.h:110
-msgid "_Copy to Folder"
-msgstr "КапіÑваць у Ñ‚Ñчку"
-
-#: mail/em-folder-tree.c:964 ui/evolution-mail-message.xml.h:119
-msgid "_Move to Folder"
-msgstr "ПерамÑÑьціць у Ñ‚Ñчку"
-
-#: mail/em-folder-tree.c:966 mail/em-folder-tree.c:2117
-#: mail/em-folder-view.c:803 mail/message-list.c:1656
-msgid "_Move"
-msgstr "Пера_мÑÑьціць"
-
-#: mail/em-folder-tree.c:968 mail/message-list.c:1658
-#, fuzzy
-msgid "Cancel _Drag"
-msgstr "ÐдмÑніць заданьне"
-
-#: mail/em-folder-tree.c:2104 mail/em-folder-tree.c:2117
-#: mail/em-folder-view.c:803 mail/em-folder-view.c:817
-#: mail/importers/evolution-mbox-importer.c:119
-#: mail/importers/evolution-outlook-importer.c:133
-msgid "Select folder"
-msgstr "Выбраць Ñ‚Ñчку"
-
-#: mail/em-folder-tree.c:2104 mail/em-folder-view.c:817
-msgid "C_opy"
-msgstr "_КапіÑваць"
-
-#: mail/em-folder-tree.c:2144
-#, c-format
-msgid "Creating folder `%s'"
-msgstr "СтварÑньне Ñ‚Ñчкі \"%s\""
-
-#: mail/em-folder-tree.c:2330 mail/mail-component.c:707
-msgid "Create folder"
-msgstr "Стварыць Ñ‚Ñчку"
-
-#: mail/em-folder-tree.c:2526
-#, c-format
-msgid "Rename the \"%s\" folder to:"
-msgstr "ЗьмÑніць назву Ñ‚Ñчкі \"%s\" на:"
-
-#: mail/em-folder-tree.c:2528
-msgid "Rename Folder"
-msgstr "ЗьмÑніць назву Ñ‚Ñчкі"
-
-#: mail/em-folder-tree.c:2603 ui/evolution-addressbook.xml.h:44
-#: ui/evolution-mail-global.xml.h:18 ui/evolution-mail-messagedisplay.xml.h:8
-#: ui/evolution-message-composer.xml.h:53 ui/evolution.xml.h:37
-msgid "_View"
-msgstr "ВыглÑд"
-
-#: mail/em-folder-tree.c:2604
-msgid "Open in _New Window"
-msgstr "Ðдкрыць у новым акне"
-
-#: mail/em-folder-tree.c:2608
-msgid "_Copy..."
-msgstr "_КапіÑваць..."
-
-#: mail/em-folder-tree.c:2609
-msgid "_Move..."
-msgstr "Пера_мÑÑьціць..."
-
-#. FIXME: need to disable for nochildren folders
-#: mail/em-folder-tree.c:2613
-msgid "_New Folder..."
-msgstr "_ÐÐ¾Ð²Ð°Ñ Ñ‚Ñчка..."
-
-#: mail/em-folder-tree.c:2616
-msgid "_Rename..."
-msgstr "ЗьмÑніць назву..."
-
-#: mail/em-folder-tree.c:2619 ui/evolution-mail-list.xml.h:27
-msgid "_Properties"
-msgstr "_УлаÑьціваÑьці"
-
-#. { EM_POPUP_ITEM, "00.select.00", N_("_Open"), G_CALLBACK(emp_popup_open), NULL, NULL, 0 },
-#: mail/em-folder-view.c:900 mail/em-popup.c:690
-#: ui/evolution-mail-message.xml.h:113
-msgid "_Edit as New Message..."
-msgstr "ЗьмÑніць Ñк новае паведамленьне..."
-
-#: mail/em-folder-view.c:902
-msgid "_Print"
-msgstr "_Друк"
-
-#: mail/em-folder-view.c:905 ui/evolution-mail-message.xml.h:127
-msgid "_Reply to Sender"
-msgstr "Ðдказаць адпраўлÑльніку"
-
-#: mail/em-folder-view.c:906 mail/em-popup.c:811
-#: ui/evolution-mail-message.xml.h:88
-msgid "Reply to _List"
-msgstr "Ðдказаць у ÑьпіÑ"
-
-#: mail/em-folder-view.c:907 mail/em-popup.c:812
-#: ui/evolution-mail-message.xml.h:87
-msgid "Reply to _All"
-msgstr "Ðдказаць уÑім"
-
-#: mail/em-folder-view.c:908 mail/em-popup.c:814
-#: ui/evolution-mail-message.xml.h:114
-msgid "_Forward"
-msgstr "_ПераÑлаць"
-
-#: mail/em-folder-view.c:911
-msgid "Follo_w Up..."
-msgstr "ПаднÑцца вышÑй..."
-
-#: mail/em-folder-view.c:912
-msgid "Fla_g Completed"
-msgstr "Выкананы ÑьцÑг"
-
-#: mail/em-folder-view.c:913
-msgid "Cl_ear Flag"
-msgstr "ÐчыÑьціць ÑьцÑг"
-
-#: mail/em-folder-view.c:916 ui/evolution-mail-message.xml.h:50
-msgid "Mar_k as Read"
-msgstr "Пазначыць Ñк чытанае"
-
-#: mail/em-folder-view.c:917
-msgid "Mark as _Unread"
-msgstr "Пазначыць Ñк нечытанае"
-
-#: mail/em-folder-view.c:918
-msgid "Mark as _Important"
-msgstr "Пазначыць Ñк важнае"
-
-#: mail/em-folder-view.c:919
-msgid "_Mark as Unimportant"
-msgstr "Пазначыць Ñк нÑважнае"
-
-#: mail/em-folder-view.c:920 ui/evolution-mail-message.xml.h:54
-msgid "Mark as _Junk"
-msgstr "Пазначыць Ñк _лухту"
-
-#: mail/em-folder-view.c:921 ui/evolution-mail-message.xml.h:55
-msgid "Mark as _Not Junk"
-msgstr "Пазначыць Ñк _не лухта"
-
-#: mail/em-folder-view.c:925
-msgid "U_ndelete"
-msgstr "_Ð’Ñрнуць"
-
-#: mail/em-folder-view.c:928
-msgid "Mo_ve to Folder..."
-msgstr "ПерамÑÑьціць у Ñ‚Ñчку..."
-
-#: mail/em-folder-view.c:929 ui/evolution-addressbook.xml.h:32
-msgid "_Copy to Folder..."
-msgstr "_КапіÑваць у Ñ‚Ñчку..."
-
-#: mail/em-folder-view.c:937
-msgid "Add Sender to Address_book"
-msgstr "Дадаць адпраўлÑльніка Ñž кнігу адраÑоў"
-
-#: mail/em-folder-view.c:940
-msgid "Appl_y Filters"
-msgstr "_Ужыць цÑдалі"
-
-#: mail/em-folder-view.c:941
-msgid "F_ilter Junk"
-msgstr "ЦÑдлÑваць лухту"
-
-#: mail/em-folder-view.c:944
-msgid "Crea_te Rule From Message"
-msgstr "Стварыць правіла з паведамленьнÑ"
-
-#: mail/em-folder-view.c:945
-msgid "VFolder on _Subject"
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па Ñ‚Ñме"
-
-#: mail/em-folder-view.c:946
-msgid "VFolder on Se_nder"
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па адпраўлÑльніку"
-
-#: mail/em-folder-view.c:947
-msgid "VFolder on _Recipients"
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па атрымоўцы"
-
-#: mail/em-folder-view.c:948
-msgid "VFolder on Mailing _List"
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па ÑьпіÑе раÑÑылкі"
-
-#: mail/em-folder-view.c:952
-msgid "Filter on Sub_ject"
-msgstr "ЦÑдаль па Ñ‚Ñме"
-
-#: mail/em-folder-view.c:953
-msgid "Filter on Sen_der"
-msgstr "ЦÑдаль па адпраўлÑльніку"
-
-#: mail/em-folder-view.c:954
-msgid "Filter on Re_cipients"
-msgstr "ЦÑдаль па атрымоўцы"
-
-#: mail/em-folder-view.c:955
-msgid "Filter on _Mailing List"
-msgstr "ЦÑдаль па ÑьпіÑе раÑÑылкі"
-
-#. default charset used in mail view
-#: mail/em-folder-view.c:1711 mail/em-folder-view.c:1751
-#: mail/mail-config.glade.h:68
-msgid "Default"
-msgstr "Дапомна"
-
-#: mail/em-folder-view.c:1848
-msgid "Print Message"
-msgstr "Друк паведамленьнÑ"
-
-#: mail/em-folder-view.c:2109
-msgid "_Copy Link Location"
-msgstr "СкапіÑваць ÑпаÑылку"
-
-#: mail/em-folder-view.c:2374
-#, fuzzy, c-format
-msgid "Click to mail %s"
-msgstr "Клікніце каб дадаць заданьне"
-
-#. message-search popup match count string
-#: mail/em-format-html-display.c:410
-#, c-format
-msgid "Matches: %d"
-msgstr "Супадзеньні: %d"
-
-#: mail/em-format-html-display.c:641 mail/em-format-html.c:582
-msgid "Unsigned"
-msgstr "ÐепадпіÑана"
-
-#: mail/em-format-html-display.c:641
-#, fuzzy
-msgid ""
-"This message is not signed. There is no guarantee that this message is "
-"authentic."
-msgstr ""
-"ГÑта паведамленьне з лічбавым подпіÑам, Ñкі Ð½Ñ Ð¼Ð¾Ð¶Ð° быць правераны на "
-"тоеÑнаÑьць."
-
-#: mail/em-format-html-display.c:642 mail/em-format-html.c:583
-msgid "Valid signature"
-msgstr "Сапраўдны подпіÑ"
-
-#: mail/em-format-html-display.c:642
-#, fuzzy
-msgid ""
-"This message is signed and is valid meaning that it is very likely that this "
-"message is authentic."
-msgstr "ГÑта паведамленьне падпіÑана тоеÑнаÑьць."
-
-#: mail/em-format-html-display.c:643 mail/em-format-html.c:584
-msgid "Invalid signature"
-msgstr "ÐеÑапраўдны подпіÑ"
-
-#: mail/em-format-html-display.c:643
-msgid ""
-"The signature of this message cannot be verified, it may have been altered "
-"in transit."
-msgstr ""
-
-#: mail/em-format-html-display.c:644
-msgid "Valid signature, cannot verify sender"
-msgstr ""
-
-#: mail/em-format-html-display.c:644
-msgid ""
-"This message is signed with a valid signature, but the sender of the message "
-"cannot be verified."
-msgstr ""
-
-#: mail/em-format-html-display.c:650 mail/em-format-html.c:591
-msgid "Unencrypted"
-msgstr "Ðекрыптаванае"
-
-#: mail/em-format-html-display.c:650
-msgid ""
-"This message is not encrypted. Its content may be viewed in transit across "
-"The Internet."
-msgstr ""
-
-#: mail/em-format-html-display.c:651 mail/em-format-html.c:592
-msgid "Encrypted, weak"
-msgstr ""
-
-#: mail/em-format-html-display.c:651
-msgid ""
-"This message is encrypted, but with a weak encryption algorithm. It would "
-"be difficult, but not impossible for an outsider to view the content of this "
-"message in a practical amount of time."
-msgstr ""
-
-#: mail/em-format-html-display.c:652 mail/em-format-html.c:593
-msgid "Encrypted"
-msgstr "Крыптаванае"
-
-#: mail/em-format-html-display.c:652
-msgid ""
-"This message is encrypted. It would be difficult for an outsider to view "
-"the content of this message."
-msgstr ""
-
-#: mail/em-format-html-display.c:653 mail/em-format-html.c:594
-msgid "Encrypted, strong"
-msgstr ""
-
-#: mail/em-format-html-display.c:653
-msgid ""
-"This message is encrypted, with a strong encryption algorithm. It would be "
-"very difficult for an outsider to view the content of this message in a "
-"practical amount of time."
-msgstr ""
-
-#: mail/em-format-html-display.c:754 smime/gui/smime-ui.glade.h:47
-msgid "_View Certificate"
-msgstr "Прагледзіць ÑÑртыфікат"
-
-#: mail/em-format-html-display.c:769
-#, fuzzy
-msgid "This certificate is not viewable"
-msgstr "СÑртыфікат ÑÑˆÑ‡Ñ Ð½Ðµ зацьверджаны"
-
-#: mail/em-format-html-display.c:1004
-#, fuzzy
-msgid "Completed on %B %d, %Y, %l:%M %p"
-msgstr "да %B %d, %Y, %l:%M %P"
-
-#: mail/em-format-html-display.c:1012
-msgid "Overdue:"
-msgstr "ПратÑрмінавана:"
-
-#: mail/em-format-html-display.c:1015
-#, fuzzy
-msgid "by %B %d, %Y, %l:%M %p"
-msgstr "да %B %d, %Y, %l:%M %P"
-
-#: mail/em-format-html-display.c:1054
-msgid "_View Inline"
-msgstr "Убудаваны _праглÑд"
-
-#: mail/em-format-html-display.c:1055
-msgid "_Hide"
-msgstr "С_хаваць"
-
-#: mail/em-format-html-print.c:130
-#, c-format
-msgid "Page %d of %d"
-msgstr "Ðркуш %d з %d"
-
-#: mail/em-format-html.c:475 mail/em-format-html.c:477
-#, c-format
-msgid "Retrieving `%s'"
-msgstr "Ðтрыманьне %s"
-
-#: mail/em-format-html.c:585
-msgid "Valid signature but cannot verify sender"
-msgstr ""
-
-#: mail/em-format-html.c:848
-msgid "Malformed external-body part."
-msgstr "ЧаÑтка external-body памылкова ÑфармаванаÑ"
-
-#: mail/em-format-html.c:878
-#, c-format
-msgid "Pointer to FTP site (%s)"
-msgstr "Указальнік на FTP Ñайт (%s)"
-
-#: mail/em-format-html.c:889
-#, c-format
-msgid "Pointer to local file (%s) valid at site \"%s\""
-msgstr "Указальнік на лÑкальны файл (%s), даÑтупны на Ñайце \"%s\""
-
-#: mail/em-format-html.c:891
-#, c-format
-msgid "Pointer to local file (%s)"
-msgstr "Указальнік на лÑкальны файл (%s)"
-
-#: mail/em-format-html.c:912
-#, c-format
-msgid "Pointer to remote data (%s)"
-msgstr "Указальнік на Ð°Ð´Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– (%s)"
-
-#: mail/em-format-html.c:923
-#, c-format
-msgid "Pointer to unknown external data (\"%s\" type)"
-msgstr "Указальнік на невÑÐ´Ð¾Ð¼Ñ‹Ñ Ð²Ð¾Ð½ÐºÐ°Ð²Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– (тыпа \"%s\")"
-
-#: mail/em-format-html.c:1165
-msgid "Formatting message"
-msgstr "Фарматаваньне паведамленьнÑ"
-
-#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:800
-#: mail/em-mailer-prefs.c:82 mail/message-list.etspec.h:7
-#: mail/message-tag-followup.c:325
-msgid "From"
-msgstr "Ðд каго"
-
-#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:801
-#: mail/em-mailer-prefs.c:83
-msgid "Reply-To"
-msgstr "Ðдказаць на"
-
-#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:802
-#: mail/em-mailer-prefs.c:84 mail/message-list.etspec.h:14
-msgid "To"
-msgstr "Каму"
-
-#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:803
-#: mail/em-mailer-prefs.c:85
-msgid "Cc"
-msgstr "КопіÑ"
-
-#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:804
-#: mail/em-mailer-prefs.c:86
-msgid "Bcc"
-msgstr "Сх.копіÑ"
-
-#. pseudo-header
-#: mail/em-format-html.c:1554 mail/em-format-quote.c:312
-#: mail/em-mailer-prefs.c:939
-msgid "Mailer"
-msgstr "Паштавік"
-
-#. translators: strftime format for local time equivalent in Date header display, with day
-#: mail/em-format-html.c:1581
-msgid "<I> (%a, %R %Z)</I>"
-msgstr ""
-
-#. translators: strftime format for local time equivalent in Date header display, without day
-#: mail/em-format-html.c:1584
-msgid "<I> (%R %Z)</I>"
-msgstr ""
-
-#: mail/em-format-html.c:1594 mail/em-format-quote.c:319 mail/em-format.c:806
-#: mail/em-mailer-prefs.c:88 mail/message-list.etspec.h:2
-msgid "Date"
-msgstr "Дата"
-
-#: mail/em-format-html.c:1617 mail/em-format.c:807 mail/em-mailer-prefs.c:89
-msgid "Newsgroups"
-msgstr "Групы навінаў"
-
-#: mail/em-format.c:1056
-#, c-format
-msgid "%s attachment"
-msgstr "%s укладаньне"
-
-#: mail/em-format.c:1095 mail/em-format.c:1228
-#, fuzzy
-msgid "Could not parse S/MIME message: Unknown error"
-msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð°Ð±Ñ€Ð°Ñ†ÑŒ паведамленьне MIME. ÐдлюÑтроўваецца Ñк крыніца."
-
-#: mail/em-format.c:1218
-msgid "Unsupported encryption type for multipart/encrypted"
-msgstr ""
-
-#: mail/em-format.c:1379
-msgid "Could not parse MIME message. Displaying as source."
-msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð°Ð±Ñ€Ð°Ñ†ÑŒ паведамленьне MIME. ÐдлюÑтроўваецца Ñк крыніца."
-
-#: mail/em-format.c:1398
-msgid "Unsupported signature format"
-msgstr "Фармат подпіÑу Ñкі не падтрымліваецца"
-
-#: mail/em-format.c:1406
-msgid "Error verifying signature"
-msgstr "Памылка праверкі подпіÑу"
-
-#: mail/em-format.c:1406
-msgid "Unknown error verifying signature"
-msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° праверкі подпіÑу"
-
-#: mail/em-junk-filter.c:86
-msgid "Spamassassin (built-in)"
-msgstr "Spamassassin·(убудаваны)"
-
-#: mail/em-mailer-prefs.c:100
-msgid "Every time"
-msgstr "ШточаÑ"
-
-#: mail/em-mailer-prefs.c:101
-msgid "Once per day"
-msgstr "Штодзень"
-
-#: mail/em-mailer-prefs.c:102
-msgid "Once per week"
-msgstr "Штотыдзень"
-
-#: mail/em-mailer-prefs.c:103
-msgid "Once per month"
-msgstr "ШтомеÑÑц"
-
-#: mail/em-migrate.c:1168
-msgid ""
-"The location and hierarchy of the Evolution mailbox folders has changed "
-"since Evolution 1.x.\n"
-"\n"
-"Please be patient while Evolution migrates your folders..."
-msgstr ""
-
-#: mail/em-migrate.c:1602
-#, c-format
-msgid "Unable to create new folder `%s': %s"
-msgstr "Ðемагчыма Ñтварыць новую \"%s\": %s"
-
-#: mail/em-migrate.c:1628
-#, c-format
-msgid "Unable to copy folder `%s' to `%s': %s"
-msgstr "Ðемагчыма капіÑваць Ñ‚Ñчку \"%s\" у \"%s\": %s"
-
-#: mail/em-migrate.c:1813
-#, fuzzy, c-format
-msgid "Unable to scan for existing mailboxes at `%s': %s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
-" %s"
-
-#: mail/em-migrate.c:2017
-#, fuzzy, c-format
-msgid "Unable to open old POP keep-on-server data `%s': %s"
-msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
-
-#: mail/em-migrate.c:2031
-#, fuzzy, c-format
-msgid "Unable to create POP3 keep-on-server data directory `%s': %s"
-msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ ÐºÐ°Ð½Ð°Ð»Ð° да \"%s\": %s"
-
-#: mail/em-migrate.c:2060
-#, c-format
-msgid "Unable to copy POP3 keep-on-server data `%s': %s"
-msgstr ""
-
-#: mail/em-migrate.c:2415 mail/em-migrate.c:2427
-#, fuzzy, c-format
-msgid "Failed to create local mail storage `%s': %s"
-msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ ÐºÐ°Ð½Ð°Ð»Ð° да \"%s\": %s"
-
-#: mail/em-migrate.c:2578
-#, fuzzy, c-format
-msgid "Unable to create local mail folders at `%s': %s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
-" %s"
-
-#: mail/em-migrate.c:2596
-msgid ""
-"Unable to read settings from previous Evolution install, `evolution/config."
-"xmldb' does not exist or is corrupt."
-msgstr ""
-
-#: mail/em-popup.c:700
-msgid "Save As..."
-msgstr "Захаваць Ñк..."
-
-#: mail/em-popup.c:718
-#, c-format
-msgid "untitled_image.%s"
-msgstr "Паведамленьне бÑз назвы.%s"
-
-#: mail/em-popup.c:808
-msgid "Set as _Background"
-msgstr "УÑталÑваць Ñк _тло"
-
-#: mail/em-popup.c:810
-msgid "_Reply to sender"
-msgstr "Ðдказаць адпраўлÑльніку"
-
-#: mail/em-popup.c:859
-msgid "_Open Link in Browser"
-msgstr "Ðдкрыць ÑпаÑылку Ñž вандроўніку"
-
-#: mail/em-popup.c:860
-msgid "Se_nd message to..."
-msgstr "ДаÑлаць паведамленьне да..."
-
-#: mail/em-popup.c:861
-msgid "_Add to Addressbook"
-msgstr "Дадаць Ñž кнігу адраÑоў"
-
-#: mail/em-popup.c:985
-#, c-format
-msgid "Open in %s..."
-msgstr "Ðдкрыць у %s..."
-
-#: mail/em-subscribe-editor.c:606
-msgid "This store does not support subscriptions, or they are not enabled."
-msgstr ""
-
-#: mail/em-subscribe-editor.c:635
-msgid "Subscribed"
-msgstr "ПадпіÑаны"
-
-#: mail/em-subscribe-editor.c:639
-msgid "Folder"
-msgstr "ТÑчка"
-
-#. FIXME: This is just to get the shadow, is there a better way?
-#: mail/em-subscribe-editor.c:852
-msgid "Please select a server."
-msgstr "Калі лаÑка, выберыце паÑлужнік."
-
-#: mail/em-subscribe-editor.c:873
-msgid "No server has been selected"
-msgstr "Ðе быў выбраны паÑлужнік"
-
-#: mail/em-utils.c:104
-msgid "Don't show this message again."
-msgstr "Ðе адлюÑтроўваць гÑтае паведамленьне нанова."
-
-#: mail/em-utils.c:294
-msgid "Filters"
-msgstr "ЦÑдалі"
-
-#: mail/em-utils.c:408
-msgid "message"
-msgstr "паведамленьне"
-
-#: mail/em-utils.c:511
-msgid "Save Message..."
-msgstr "Захаваць паведамленьне..."
-
-#: mail/em-utils.c:560
-msgid "Add address"
-msgstr "Дадаць адраÑ"
-
-#. Drop filename for messages from a mailbox
-#: mail/em-utils.c:1021
-#, c-format
-msgid "Messages from %s"
-msgstr "Паведамленьне ад %s"
-
-#: mail/em-vfolder-editor.c:104
-msgid "Virtual _Folders"
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
-
-#: mail/em-vfolder-rule.c:494
-msgid "_Add"
-msgstr "_Дадаць"
-
-#: mail/em-vfolder-rule.c:574
-msgid "VFolder source"
-msgstr "Крыніца віртуальнае Ñ‚Ñчкі"
-
-#: mail/evolution-mail.schemas.in.in.h:1
-#, fuzzy
-msgid "Automatic link recognition"
-msgstr "Ðўтаматычна дÑÑ‚Ñктаваць ÑпаÑылкі"
-
-#: mail/evolution-mail.schemas.in.in.h:2
-#, fuzzy
-msgid "Automatic smiley recognition"
-msgstr "Ðўтаматычна дÑÑ‚Ñктаваць ÑпаÑылкі"
-
-#: mail/evolution-mail.schemas.in.in.h:3
-msgid "Check incoming mail being junk"
-msgstr "ПравÑраць уваходную пошту на лухту"
-
-#: mail/evolution-mail.schemas.in.in.h:4
-msgid "Citation highlight color"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:5
-msgid "Citation highlight color."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:6
-msgid "Composer Window default height"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:7
-msgid "Composer Window default width"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:8
-msgid "Default charset in which to compose messages"
-msgstr "Дапомнае кадаваньне Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… паведамленьнÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:9
-msgid "Default charset in which to compose messages."
-msgstr "Дапомнае кадаваньне Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… паведамленьнÑÑž."
-
-#: mail/evolution-mail.schemas.in.in.h:10
-msgid "Default charset in which to display messages"
-msgstr "Дапомнае кадаваньне Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:11
-msgid "Default charset in which to display messages."
-msgstr "Дапомнае кадаваньне Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:12
-msgid "Default forward style"
-msgstr "Дапомны Ñтыль пераÑылкі"
-
-#: mail/evolution-mail.schemas.in.in.h:13
-msgid "Default height of the Composer Window"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ð²Ñ‹ÑˆÑ‹Ð½Ñ Ð°ÐºÐ½Ð° Ñ€Ñдактару паведамленьнÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:14
-msgid "Default height of the Message Window"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ð²Ñ‹ÑˆÑ‹Ð½Ñ Ð°ÐºÐ½Ð° праглÑдальніку паведамленьнÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:15
-msgid "Default height of the Subscribe dialog"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ð²Ñ‹ÑˆÑ‹Ð½Ñ Ð´Ñ‹Ñлёгу падпіÑваньнÑ"
-
-#: mail/evolution-mail.schemas.in.in.h:16
-msgid "Default reply style"
-msgstr "Дапомны Ñтыль адказу"
-
-#: mail/evolution-mail.schemas.in.in.h:17
-msgid "Default width of the Composer Window"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ Ð°ÐºÐ½Ð° Ñ€Ñдактару паведамленьнÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:18
-msgid "Default width of the Message Window"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ Ð°ÐºÐ½Ð° праглÑдальніку паведамленьнÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:19
-msgid "Default width of the Subscribe dialog"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ Ð´Ñ‹Ñлёгу падпіÑваньнÑ"
-
-#: mail/evolution-mail.schemas.in.in.h:20
-msgid "Draw spelling error indicators on words as you type."
-msgstr "РыÑуе індыкатары памылак правапіÑу Ñловаў у чаÑе набору."
-
-#: mail/evolution-mail.schemas.in.in.h:21
-msgid "Empty Trash folders on exit"
-msgstr "СпуÑташаць Ñьметніцу у чаÑе выхаду"
-
-#: mail/evolution-mail.schemas.in.in.h:22
-msgid "Empty all Trash folders when exiting Evolution."
-msgstr "СпуÑташаць уÑе Ñьметніцы у чаÑе выхаду."
-
-#: mail/evolution-mail.schemas.in.in.h:23
-msgid "Enable caret mode, so that you can see a cursor when reading mail."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:24
-msgid "Enable/disable caret mode"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:25
-msgid "Height of the message-list pane"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:26
-msgid "Height of the message-list pane."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:27
-msgid ""
-"If there isn't a builtin viewer for a particular mime-type inside Evolution, "
-"any mime-types appearing in this list which map to a bonobo-component viewer "
-"in GNOME's mime-type database may be used for displaying content."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:28
-msgid "Last time empty trash was run"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:29
-msgid "List of Labels and their associated colors"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:30
-msgid "List of accepted licenses"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð¿Ñ€Ñ‹Ð½ÑÑ‚Ñ‹Ñ… ліцÑнзіÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:31
-msgid "List of accounts"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ ÑƒÐ»Ñ–ÐºÐ¾Ð²Ñ‹Ñ… запіÑаў"
-
-#: mail/evolution-mail.schemas.in.in.h:32
-msgid ""
-"List of accounts known to the mail component of Evolution. The list contains "
-"strings naming subdirectories relative to /apps/evolution/mail/accounts."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:33
-msgid "List of custom headers and whether they are enabled."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:34
-msgid ""
-"List of labels known to the mail component of Evolution. The list contains "
-"strings containing name:color where color uses the HTML hex encoding."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:35
-msgid "List of mime types to check for bonobo component viewers"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:36
-msgid "List of protocol names whose license has been accepted."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:37
-msgid "Load images for HTML messages over http"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:38
-msgid ""
-"Load images for HTML messages over http(s). Possible values are: 0 - Never "
-"load images off the net 1 - Load images if sender is in the addressbook 2 - "
-"Always load images off the net"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:39
-#, fuzzy
-msgid "Log filter actions"
-msgstr "Выканаць дзеÑньні"
-
-#: mail/evolution-mail.schemas.in.in.h:40
-msgid "Log filter actions to the specified log file."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:41
-msgid "Logfile to log filter actions"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:42
-msgid "Logfile to log filter actions."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:43
-msgid "Mark as Seen after specified timeout"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:44
-msgid "Mark as Seen after specified timeout."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:45
-msgid "Mark citations in the message \"Preview\""
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:46
-msgid "Mark citations in the message \"Preview\"."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:47
-msgid "Message Window default height"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ð²Ñ‹ÑˆÑ‹Ð½Ñ Ð°ÐºÐ½Ð° праглÑдальніку паведамленьнÑÑž"
-
-#: mail/evolution-mail.schemas.in.in.h:48
-msgid "Message Window default width"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:49
-msgid "Message-display style (normal, full headers, source)"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:50
-msgid "Minimum days between emptying the trash on exit"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:51
-msgid "Minimum time between emptying the trash on exit, in days."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:52
-msgid "New Mail Notify sound file"
-msgstr "Гук Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð°Ð± новае пошце"
-
-#: mail/evolution-mail.schemas.in.in.h:53
-#, fuzzy
-msgid "New Mail Notify type"
-msgstr "Ðагаданьне аб пошце"
-
-#: mail/evolution-mail.schemas.in.in.h:54
-msgid "Prompt on empty subject"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:55
-msgid "Prompt the user when he or she tries to expunge a folder."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:56
-msgid "Prompt the user when he or she tries to send a message without a Subject."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:57
-msgid "Prompt when user expunges"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:58
-msgid "Prompt when user only fills Bcc"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:59
-msgid ""
-"Prompt when user tries to send HTML mail to recipients that may not want to "
-"receive HTML mail."
-msgstr ""
-"_ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž\n"
-"у фармаце HTML тым, хто не жадае гÑтага."
-
-#: mail/evolution-mail.schemas.in.in.h:60
-msgid "Prompt when user tries to send a message with no To or Cc recipients."
-msgstr ""
-"ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž,\n"
-"у Ñкіх вызначаны толькі атрымоўцы Ñхаванае копіі."
-
-#: mail/evolution-mail.schemas.in.in.h:61
-msgid "Prompt when user tries to send unwanted HTML"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:62
-msgid "Recognize links in text and replace them."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:63
-msgid "Recognize smileys in text and replace them with images."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:64
-msgid "Run junk test on incoming mail"
-msgstr "ЗапуÑкае Ñ‚ÑÑÑ‚ на лухту Ð´Ð»Ñ ÑžÐ²Ð°Ñ…Ð¾Ð´Ð½Ð°Ðµ пошты"
-
-#: mail/evolution-mail.schemas.in.in.h:65
-msgid "Send HTML mail by default"
-msgstr "Дапомна даÑлаць ліÑÑ‚ у фармаце HTML"
-
-#: mail/evolution-mail.schemas.in.in.h:66
-msgid "Send HTML mail by default."
-msgstr "Дапомна даÑлаць ліÑÑ‚ у фармаце HTML."
-
-#: mail/evolution-mail.schemas.in.in.h:67
-msgid "Show Animations"
-msgstr "Паказваць анімацыю"
-
-#: mail/evolution-mail.schemas.in.in.h:68
-msgid "Show animated images as animations."
-msgstr "Паказваць Ð°Ð½Ñ–Ð¼Ð°Ð²Ð°Ð½Ñ‹Ñ Ð²Ñ–Ð´Ð°Ñ€Ñ‹ÑÑ‹ Ñк анімацыю."
-
-#: mail/evolution-mail.schemas.in.in.h:69
-msgid "Show deleted messages (with a strike-through) in the message-list."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:70
-msgid "Show deleted messages in the message-list"
-msgstr "Паказваць Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: mail/evolution-mail.schemas.in.in.h:71
-msgid "Show the \"Preview\" pane"
-msgstr "Паказваць акно папÑÑ€ÑднÑга праглÑду"
-
-#: mail/evolution-mail.schemas.in.in.h:72
-msgid "Show the \"Preview\" pane."
-msgstr "Паказваць акно папÑÑ€ÑднÑга праглÑду."
-
-#: mail/evolution-mail.schemas.in.in.h:73
-msgid "Sound file to play when new mail arrives."
-msgstr "Прайграваць гук, калі атрымана Ð½Ð¾Ð²Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ð°."
-
-#: mail/evolution-mail.schemas.in.in.h:74
-msgid "Specifies the type of New Mail Notification the user wishes to use."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:75
-msgid "Spell check inline"
-msgstr "Праверка правапіÑу"
-
-#: mail/evolution-mail.schemas.in.in.h:76
-msgid "Subscribe dialog default height"
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ð²Ñ‹ÑˆÑ‹Ð½Ñ Ð´Ñ‹Ñлёгу падпіÑваньнÑ"
-
-#: mail/evolution-mail.schemas.in.in.h:77
-msgid "Subscribe dialog default width"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:78
-msgid "Terminal font"
-msgstr "ТÑрмінальны шрыфт"
-
-#: mail/evolution-mail.schemas.in.in.h:79
-msgid "The last time empty trash was run, in days since the epoch."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:80
-msgid "The terminal font for mail display"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:81
-#, fuzzy
-msgid "The variable width font for mail display"
-msgstr "ВыбÑрыце шрыфт HTML пераменае шырыні Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ"
-
-#: mail/evolution-mail.schemas.in.in.h:82
-msgid ""
-"This key should contain a list of XML structures specifying custom headers, "
-"and whether they are to be displayed. The format of the XML structure is &lt;"
-"header enabled&gt; - set enabled if the header is to be displayed in the "
-"mail view."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:83
-msgid "Thread the message list."
-msgstr "Упарадкаваць паведамленьні па Ñ‚Ñмах."
-
-#: mail/evolution-mail.schemas.in.in.h:84
-msgid "Thread the message-list"
-msgstr "Упарадкаваць пошту па Ñ‚Ñмах"
-
-#: mail/evolution-mail.schemas.in.in.h:85
-msgid "Thread the message-list based on Subject"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:86
-msgid "Timeout for marking message as Seen"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:87
-msgid "Timeout for marking message as Seen."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:88
-#, fuzzy
-msgid "UID string of the default account."
-msgstr "_Зрабіць дапомным уліковым запіÑам"
-
-#: mail/evolution-mail.schemas.in.in.h:89
-msgid "Use Spamasssassin daemon and client"
-msgstr "ВыкарыÑтоўваць кліента й дÑмана Spamasssassin"
-
-#: mail/evolution-mail.schemas.in.in.h:90
-msgid "Use Spamasssassin daemon and client (spamc/spamd)"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:91
-msgid "Use custom fonts"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:92
-msgid "Use custom fonts for displaying mail"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:93
-msgid "Use only local spam tests."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:94
-msgid "Use only the local spam tests (no DNS)."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:95
-msgid "Variable width font"
-msgstr "Шрыфт пераменнае шырыні"
-
-#: mail/evolution-mail.schemas.in.in.h:96
-msgid "View/Bcc menu item is checked"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:97
-msgid "View/Bcc menu item is checked."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:98
-msgid "View/Cc menu item is checked"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:99
-msgid "View/Cc menu item is checked."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:100
-msgid "View/From menu item is checked"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:101
-msgid "View/From menu item is checked."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:102
-msgid "View/PostTo menu item is checked"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:103
-msgid "View/PostTo menu item is checked."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:104
-msgid "View/ReplyTo menu item is checked"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:105
-msgid "View/ReplyTo menu item is checked."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:106
-msgid ""
-"Whether or not to fall back on threading by subjects when the messages do "
-"not contain In-Reply-To or References headers."
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:107
-msgid "port for starting user runned spamd"
-msgstr ""
-
-#: mail/evolution-mail.schemas.in.in.h:108
-msgid "spamd port"
-msgstr "порт spamd"
-
-#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:1
-msgid "Evolution Elm importer"
-msgstr "Імпарт у \"Эвалюцыю\" з Elm"
-
-#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:2
-msgid "Evolution Netscape Mail importer"
-msgstr "Імпарт у \"Эвалюцыю\" з пошты \"Netscape\""
-
-#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:3
-msgid "Evolution Outlook Express 4 importer"
-msgstr "Імпарт у \"Эвалюцыю\" з \"Outlook Express 4\""
-
-#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:4
-msgid "Evolution Pine importer"
-msgstr "Імпарт у \"Эвалюцыю\" з \"СаÑны\""
-
-#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:5
-msgid "Evolution mbox importer"
-msgstr "Імпарт у \"Эвалюцыю\" з mbox"
-
-#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:6
-msgid "MBox (mbox)"
-msgstr "MBox (mbox)"
-
-#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:7
-msgid "Outlook Express 4 (.mbx)"
-msgstr "Outlook Express 4 (.mbx)"
-
-#: mail/importers/elm-importer.c:88
-msgid "Evolution is importing your old Elm mail"
-msgstr "\"ЭвалюцыÑ\" імпартуе вашу Ñтарую пошту Elm"
-
-#: mail/importers/elm-importer.c:89
-#: mail/importers/evolution-mbox-importer.c:221
-#: mail/importers/evolution-outlook-importer.c:255
-#: mail/importers/netscape-importer.c:1251 mail/importers/pine-importer.c:117
-msgid "Importing..."
-msgstr "Імпартаваньне..."
-
-#: mail/importers/elm-importer.c:91
-#: mail/importers/evolution-mbox-importer.c:223
-#: mail/importers/evolution-outlook-importer.c:257
-#: mail/importers/netscape-importer.c:1253 mail/importers/pine-importer.c:119
-msgid "Please wait"
-msgstr "Калі лаÑка, пачакайце"
-
-#: mail/importers/elm-importer.c:244
-msgid "Importing Elm data"
-msgstr "Імпартаваньне даньнÑÑž Elm"
-
-#: mail/importers/elm-importer.c:436
-msgid ""
-"Evolution has found Elm mail files\n"
-"Would you like to import them into Evolution?"
-msgstr ""
-"\"ЭвалюцыÑ\" адшукала Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ Elm.\n"
-"Жадаеце імпартаваць іх у \"Эвалюцыю\"?"
-
-#: mail/importers/elm-importer.c:444
-msgid "Elm"
-msgstr "Elm"
-
-#: mail/importers/evolution-mbox-importer.c:116
-#: mail/importers/evolution-outlook-importer.c:130
-msgid "Destination folder:"
-msgstr "ТÑчка прызначÑньнÑ:"
-
-#: mail/importers/evolution-mbox-importer.c:119
-#: mail/importers/evolution-outlook-importer.c:133
-msgid "Select folder to import into"
-msgstr "Выберыце Ñ‚Ñчку Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ñƒ"
-
-#: mail/importers/evolution-mbox-importer.c:220
-#: mail/importers/evolution-outlook-importer.c:254
-#: mail/importers/mail-importer.c:226
-#, c-format
-msgid "Importing `%s'"
-msgstr "Імпартаваньне `%s'"
-
-#: mail/importers/evolution-outlook-importer.c:301
-#: mail/importers/mail-importer.c:140
-msgid "Importing mailbox"
-msgstr "Імпартаваньне паштовае Ñкрыні"
-
-#: mail/importers/mail-importer.c:360
-#, c-format
-msgid "Scanning %s"
-msgstr "Сканаваньне %s"
-
-#: mail/importers/netscape-importer.c:73
-#, c-format
-msgid "Priority Filter \"%s\""
-msgstr "ПрыÑрытÑтны цÑдаль \"%s\""
-
-#: mail/importers/netscape-importer.c:662
-msgid ""
-"Some of your Netscape email filters are based on\n"
-"email priorities, which are not used in Evolution.\n"
-"Instead, Evolution provides scores in the range of\n"
-"-3 to 3 that can be assigned to emails and filtered\n"
-"accordingly.\n"
-"\n"
-"As a workaround, a set of filters called \"Priority Filter\"\n"
-"was added that converts Netscape's email priorities into\n"
-"Evolution's scores, and the affected filters use scores instead\n"
-"of priorities. Check the imported filters to make sure\n"
-"everything still works as intended."
-msgstr ""
-
-#: mail/importers/netscape-importer.c:686
-msgid ""
-"Some of your Netscape email filters use\n"
-"the \"Ignore Thread\" or \"Watch Thread\"\n"
-"feature, which is not supported in Evolution.\n"
-"These filters will be dropped."
-msgstr ""
-
-#: mail/importers/netscape-importer.c:703
-msgid ""
-"Some of your Netscape email filters test the\n"
-"body of emails for (in)equality to a given string,\n"
-"which is not supported in Evolution. Those filters\n"
-"were modified to test whether that string is or is not\n"
-"contained in the message body."
-msgstr ""
-
-#: mail/importers/netscape-importer.c:1250
-msgid "Evolution is importing your old Netscape data"
-msgstr "\"ЭвалюцыÑ\" імпартуе вашы ÑÑ‚Ð°Ñ€Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– Netscape"
-
-#: mail/importers/netscape-importer.c:1707
-msgid "Importing Netscape data"
-msgstr "Імпартаваньне даньнÑÑž Netscape"
-
-#: mail/importers/netscape-importer.c:1907
-msgid "Settings"
-msgstr "УÑталёўкі"
-
-#: mail/importers/netscape-importer.c:1912
-msgid "Mail Filters"
-msgstr "ЦÑдалі пошты"
-
-#: mail/importers/netscape-importer.c:1933
-msgid ""
-"Evolution has found Netscape mail files.\n"
-"Would you like them to be imported into Evolution?"
-msgstr ""
-"\"ЭвалюцыÑ\" адшукала Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ Netscape.\n"
-"Жадаеце імпартаваць іх у \"Эвалюцыю\"?"
-
-#: mail/importers/pine-importer.c:116
-msgid "Evolution is importing your old Pine data"
-msgstr "\"ЭвалюцыÑ\" імпартуе вашы ÑÑ‚Ð°Ñ€Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– Pine"
-
-#: mail/importers/pine-importer.c:314
-msgid "Importing Pine data"
-msgstr "Імпартаваньне даньнÑÑž Pine"
-
-#: mail/importers/pine-importer.c:479
-msgid "Addressbook"
-msgstr "Кніга адраÑоў"
-
-#: mail/importers/pine-importer.c:498
-msgid ""
-"Evolution has found Pine mail files.\n"
-"Would you like to import them into Evolution?"
-msgstr ""
-"\"ЭвалюцыÑ\" адшукала Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ Pine.\n"
-"Жадаеце імпартаваць іх у \"Эвалюцыю\"?"
-
-#: mail/importers/pine-importer.c:506
-msgid "Pine"
-msgstr "Pine"
-
-#. give our dialog an OK button and title
-#: mail/mail-account-editor.c:155
-msgid "Evolution Account Editor"
-msgstr "РÑдактар уліковага запіÑу \"Эвалюцыі\""
-
-#: mail/mail-account-gui.c:246
-#, c-format
-msgid ""
-"\n"
-"Please read carefully the license agreement\n"
-"for %s displayed below\n"
-"and tick the check box for accepting it\n"
-msgstr ""
-
-#: mail/mail-account-gui.c:252
-#, c-format
-msgid "%s License Agreement"
-msgstr ""
-
-#: mail/mail-account-gui.c:957 mail/mail-config.glade.h:167
-msgid "_Host:"
-msgstr "_Вузел:"
-
-#: mail/mail-account-gui.c:961 mail/mail-config.glade.h:151
-msgid "User_name:"
-msgstr "_Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка:"
-
-#: mail/mail-account-gui.c:965 mail/mail-config.glade.h:173
-msgid "_Path:"
-msgstr "_ШлÑÑ…:"
-
-#: mail/mail-autofilter.c:74
-#, c-format
-msgid "Mail to %s"
-msgstr "ДаÑлаць на %s"
-
-#: mail/mail-autofilter.c:238
-#, c-format
-msgid "Subject is %s"
-msgstr "ТÑма %s"
-
-#: mail/mail-autofilter.c:254
-#, c-format
-msgid "Mail from %s"
-msgstr "ЛіÑÑ‚ ад %s"
-
-#: mail/mail-autofilter.c:271
-#, c-format
-msgid "%s mailing list"
-msgstr "%s ÑÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі"
-
-#: mail/mail-autofilter.c:326
-msgid "Add Filter Rule"
-msgstr "Дадаць правіла цÑдалю"
-
-#: mail/mail-component.c:459
-#, c-format
-msgid "%d deleted"
-msgstr "%d выбраныÑ"
-
-#: mail/mail-component.c:461
-#, c-format
-msgid "%d junk"
-msgstr "%d лухты"
-
-#: mail/mail-component.c:484
-#, c-format
-msgid "%d draft"
-msgstr "%d чарнавыÑ"
-
-#: mail/mail-component.c:486
-#, c-format
-msgid "%d sent"
-msgstr "%d даÑланыÑ"
-
-#: mail/mail-component.c:488
-#, c-format
-msgid "%d unsent"
-msgstr "%d недаÑланыÑ"
-
-#: mail/mail-component.c:492
-#, c-format
-msgid "%d total"
-msgstr "%d агулам"
-
-#: mail/mail-component.c:494
-#, c-format
-msgid ", %d unread"
-msgstr ",%d нечытаныÑ"
-
-#: mail/mail-component.c:659
-msgid "New Mail Message"
-msgstr "Ðовае паштовае паведамленьне"
-
-#: mail/mail-component.c:660
-msgid "_Mail Message"
-msgstr "_Паштовае паведамленьне"
-
-#: mail/mail-component.c:661
-msgid "Compose a new mail message"
-msgstr "СклаÑьці новае паведамленьне"
-
-#: mail/mail-component.c:667
-msgid "New Mail Folder"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ Ñ‚Ñчка"
-
-#: mail/mail-component.c:668
-msgid "Mail _Folder"
-msgstr "ЦÑдалі пошты"
-
-#: mail/mail-component.c:669
-msgid "Create a new mail folder"
-msgstr "Стварыць новую паштовую Ñ‚Ñчку"
-
-#: mail/mail-component.c:801
-msgid "Failed upgrading Mail settings or folders."
-msgstr ""
-
-#: mail/mail-config-druid.c:362 mail/mail-config.glade.h:92
-msgid "Identity"
-msgstr "Ñапраўдны"
-
-#: mail/mail-config-druid.c:364
-msgid ""
-"Please enter your name and email address below. The \"optional\" fields "
-"below do not need to be filled in, unless you wish to include this "
-"information in email you send."
-msgstr ""
-
-#: mail/mail-config-druid.c:370 mail/mail-config-druid.c:377
-#: mail/mail-config.glade.h:119
-msgid "Receiving Mail"
-msgstr "Ðтрыманьне пошты"
-
-#: mail/mail-config-druid.c:372
-msgid ""
-"Please enter information about your incoming mail server below. If you are "
-"not sure, ask your system administrator or Internet Service Provider."
-msgstr ""
-"Калі лаÑка, пазначце ніжÑй інфармацыю пра ваш паÑлужнік Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹. "
-"Калі вы нÑпÑўныÑ, запытайцеÑÑ Ð²Ð°ÑˆÐ°Ð³Ð° ÑÑ‹ÑÑ‚Ñмнага адмініÑтратара ці правайдÑра "
-"паÑлуг ІнтÑрнÑÑ‚."
-
-#: mail/mail-config-druid.c:379
-msgid "Please select among the following options"
-msgstr "ВыбÑрыце адзін з наÑтупных варыÑнтаў"
-
-#: mail/mail-config-druid.c:382 mail/mail-config.glade.h:131
-msgid "Sending Mail"
-msgstr "Ðдпраўка пошты"
-
-#: mail/mail-config-druid.c:384
-msgid ""
-"Please enter information about the way you will send mail. If you are not "
-"sure, ask your system administrator or Internet Service Provider."
-msgstr ""
-"Калі лаÑка, пазначце інфармацыю аб шлÑхах адпраўкі пошты. Калі вы нÑпÑўныÑ, "
-"запытайцеÑÑ Ð²Ð°ÑˆÐ°Ð³Ð° ÑÑ‹ÑÑ‚Ñмнага адмініÑтратара ці правайдÑра паÑлуг ІнтÑрнÑÑ‚."
-
-#: mail/mail-config-druid.c:389 mail/mail-config.glade.h:37
-msgid "Account Management"
-msgstr "Кіраваньне рахункамі"
-
-#: mail/mail-config-druid.c:391
-msgid ""
-"You are almost done with the mail configuration process. The identity, "
-"incoming mail server and outgoing mail transport method which you provided "
-"will be grouped together to make an Evolution mail account. Please enter a "
-"name for this account in the space below. This name will be used for display "
-"purposes only."
-msgstr ""
-
-#: mail/mail-config.c:895
-msgid "Checking Service"
-msgstr "Праверка паÑлугі"
-
-#: mail/mail-config.c:973 mail/mail-config.c:977
-msgid "Connecting to server..."
-msgstr "ДалучÑньне да паÑлужніка..."
-
-#: mail/mail-config.glade.h:1 mail/mail-dialogs.glade.h:5
-msgid " "
-msgstr " "
-
-#: mail/mail-config.glade.h:2
-msgid " Ch_eck for Supported Types "
-msgstr " Праверка тыпаў ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð° "
-
-#: mail/mail-config.glade.h:5
-msgid "<b>SSL is not supported in this build of evolution</b>"
-msgstr "<b>SSL не падтрымліваецца Ñž гÑтае зборцы \"Эвалюцыі\"</b>"
-
-#: mail/mail-config.glade.h:6
-msgid "<b>S_ignatures</b>"
-msgstr "<b>ПодпіÑÑ‹</b>"
-
-#: mail/mail-config.glade.h:7
-msgid "<b>_Languages</b>"
-msgstr "<b>Мовы</b>"
-
-#: mail/mail-config.glade.h:8
-msgid "<small>This will make the the filter more reliable, but slower</small>"
-msgstr ""
-
-#: mail/mail-config.glade.h:9
-msgid "<span weight=\"bold\">Account Information</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:10
-msgid "<span weight=\"bold\">Alerts</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:11
-msgid "<span weight=\"bold\">Authentication Type</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:12
-msgid "<span weight=\"bold\">Authentication</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:13
-msgid "<span weight=\"bold\">Checking for New Mail</span>"
-msgstr "<span·weight=\"bold\">Праверка новае пошты</span>"
-
-#: mail/mail-config.glade.h:14
-msgid "<span weight=\"bold\">Composing Messages</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:15
-msgid "<span weight=\"bold\">Configuration</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:16
-msgid "<span weight=\"bold\">Default Behavior</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:17
-msgid "<span weight=\"bold\">Delete Mail</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:18
-msgid "<span weight=\"bold\">Displayed Mail _Headers</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:19
-msgid "<span weight=\"bold\">Filter Options</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:20
-msgid "<span weight=\"bold\">General</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:21
-msgid "<span weight=\"bold\">Labels and Colors</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:22
-msgid "<span weight=\"bold\">Loading Images</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:23
-msgid "<span weight=\"bold\">Message Display</span>"
-msgstr "<span·weight=\"bold\">ÐдлюÑтраваньне паведамленьнÑ</span>"
-
-#: mail/mail-config.glade.h:24
-msgid "<span weight=\"bold\">Message Fonts</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:25
-msgid "<span weight=\"bold\">New Mail Notification</span>"
-msgstr "<span·weight=\"bold\">Паведамленьне аб атрыманьні</span>"
-
-#: mail/mail-config.glade.h:26
-msgid "<span weight=\"bold\">Optional Information</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:27
-msgid "<span weight=\"bold\">Options</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:28
-#, fuzzy
-msgid "<span weight=\"bold\">Pretty Good Privacy (PGP/GPG)</span>"
-msgstr "Pretty Good Privacy (PGP/GPG)"
-
-#: mail/mail-config.glade.h:29
-msgid "<span weight=\"bold\">Printed Fonts</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:30
-msgid "<span weight=\"bold\">Required Information</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:31
-msgid "<span weight=\"bold\">Secure MIME (S/MIME)</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:32
-msgid "<span weight=\"bold\">Security</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:33
-msgid "<span weight=\"bold\">Sent and Draft Messages</span>"
-msgstr "<span·weight=\"bold\">ДаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñ– чарнавікі</span>"
-
-#: mail/mail-config.glade.h:34
-msgid "<span weight=\"bold\">Server Configuration</span>"
-msgstr ""
-
-#: mail/mail-config.glade.h:35
-#, fuzzy
-msgid "A_lso encrypt to self when sending encrypted mail"
-msgstr "ЗаўÑёды шыфраваць маім ключом пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ"
-
-#: mail/mail-config.glade.h:36
-msgid "Account Editor"
-msgstr "РÑдактар уліковых запіÑаў"
-
-#: mail/mail-config.glade.h:38
-msgid "Add Ne_w Signature..."
-msgstr "Дадаць новы подпіÑ..."
-
-#: mail/mail-config.glade.h:39
-msgid "Add _Script"
-msgstr "Дадаць _ÑцÑнар"
-
-#: mail/mail-config.glade.h:40
-msgid "Al_ways encrypt to myself when sending encrypted mail"
-msgstr "ЗаўÑёды шыфраваць маім ключом пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– шыфраванае пошты"
-
-#: mail/mail-config.glade.h:41
-msgid "Alway_s carbon-copy (cc) to:"
-msgstr "ЗаўÑёды даÑылаць копію (Cc) на:"
-
-#: mail/mail-config.glade.h:43
-msgid "Always _blind carbon-copy (bcc) to:"
-msgstr "ЗаўÑёды даÑылаць нÑбачную копію (Bcc) на:"
-
-#: mail/mail-config.glade.h:44
-msgid "Always _sign outgoing messages when using this account"
-msgstr "ЗаўÑёды падпіÑваць паведамленьні, калі выкарыÑтоўваецца гÑÑ‚Ñ‹ уліковы запіÑ"
-
-#: mail/mail-config.glade.h:45
-msgid "Always _trust keys in my keyring when encrypting"
-msgstr "ЗаўÑёды давÑраць ключам у маім зборы ключоў пад Ñ‡Ð°Ñ ÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ"
-
-#: mail/mail-config.glade.h:46
-msgid "Attach original message"
-msgstr "УклаÑьці арыгінальнае паведамленьне"
-
-#: mail/mail-config.glade.h:47 mail/message-list.etspec.h:1
-msgid "Attachment"
-msgstr "Укладаньне"
-
-#: mail/mail-config.glade.h:48
-msgid "Automatically _insert smiley images"
-msgstr "_Ðўтаматычна уÑтаўлÑць відарыÑÑ‹ \"уÑьмешак\""
-
-#: mail/mail-config.glade.h:49
-msgid "Automatically check for _new mail every"
-msgstr "Ðўтаматычна правÑраць пошту кожныÑ"
-
-#: mail/mail-config.glade.h:50
-msgid "Baltic (ISO-8859-13)"
-msgstr "Ð‘Ð°Ð»Ñ†ÐºÐ°Ñ (ISO-8859-13)"
-
-#: mail/mail-config.glade.h:51
-msgid "Baltic (ISO-8859-4)"
-msgstr "Ð‘Ð°Ð»Ñ†ÐºÐ°Ñ (ISO-8859-4)"
-
-#: mail/mail-config.glade.h:52
-msgid "Beep w_hen new mail arrives"
-msgstr "Сыгналіць дынамікам у чаÑе Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð½Ð¾Ð²Ð°Ðµ пошты"
-
-#: mail/mail-config.glade.h:53
-msgid "C_haracter set:"
-msgstr "Кадаваньне ÑымбалÑÑž:"
-
-#: mail/mail-config.glade.h:54
-msgid "Ch_eck for Supported Types "
-msgstr "Праверка тыпаў ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð° "
-
-#: mail/mail-config.glade.h:55
-msgid "Check _incoming mail for junk"
-msgstr "Праверка ўваходнае пошты на лухту"
-
-#: mail/mail-config.glade.h:56
-msgid "Check spelling while I _type"
-msgstr "ПравÑраць Ð¿Ñ€Ð°Ð²Ð°Ð¿Ñ–Ñ Ð¿Ð°Ð´ Ñ‡Ð°Ñ ÑƒÐ²Ð¾Ð´Ñƒ Ñ‚ÑкÑту"
-
-#: mail/mail-config.glade.h:57
-msgid "Checks incoming mail messages to be Junk"
-msgstr ""
-
-#: mail/mail-config.glade.h:58
-msgid "Color for _misspelled words:"
-msgstr "Колер Ð´Ð»Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ñ‹Ñ… Ñловаў:"
-
-#: mail/mail-config.glade.h:59
-msgid "Colors"
-msgstr "Колеры"
-
-#: mail/mail-config.glade.h:60
-#, fuzzy
-msgid "Confirm _when expunging a folder"
-msgstr "_Запытвацца Ð¿Ð°Ð´Ñ†ÑŒÐ²ÐµÑ€Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ Ð°Ñ‡Ñ‹Ñткі Ñ‚Ñчкі ад выдаленых паведамленьнÑÑž"
-
-#: mail/mail-config.glade.h:61
-msgid ""
-"Congratulations, your mail configuration is complete.\n"
-"\n"
-"You are now ready to send and receive email \n"
-"using Evolution. \n"
-"\n"
-"Click \"Apply\" to save your settings."
-msgstr ""
-"Віншаваньні, канфігураваньне вашае пошты завершана.\n"
-"\n"
-"Ð’Ñ‹ ужо зараз Ð³Ð°Ñ‚Ð¾Ð²Ñ‹Ñ Ð´Ð° адпраўкі й Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ \n"
-"з дапамогай \"Эвалюцыі\". \n"
-"\n"
-"Клікніце \"Ужыць\" каб захаваць вашы уÑталёўкі."
-
-#: mail/mail-config.glade.h:67
-msgid "De_fault"
-msgstr "_Дапомна"
-
-#: mail/mail-config.glade.h:69
-msgid "Default character e_ncoding:"
-msgstr "Дапомнае кадаваньне ÑымбалÑÑž:"
-
-#: mail/mail-config.glade.h:70
-msgid "Defaults"
-msgstr "Дапомнае"
-
-#: mail/mail-config.glade.h:72
-msgid "Do not quote original message"
-msgstr "Ðе цытавацьь зыходнае паведамленьне"
-
-#: mail/mail-config.glade.h:73
-msgid "Don't sign _meeting requests (for Outlook compatibility)"
-msgstr "Ðе падпіÑываць запыты на нараду (Ð´Ð»Ñ ÑумÑшчальнаÑьці з Outlook)"
-
-#: mail/mail-config.glade.h:74 shell/evolution-startup-wizard.glade.h:1
-msgid "Done"
-msgstr "Зроблена"
-
-#: mail/mail-config.glade.h:75
-msgid "Drafts _Folder:"
-msgstr "ТÑчка чарнавіка:"
-
-#: mail/mail-config.glade.h:77
-msgid "Email Accounts"
-msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
-
-#: mail/mail-config.glade.h:78
-msgid "Email _Address:"
-msgstr "Электронны адраÑ:"
-
-#: mail/mail-config.glade.h:79
-msgid "Empty trash folders on e_xit"
-msgstr "СпуÑташаць Ñьметніцу Ñž чаÑе выхаду"
-
-#: mail/mail-config.glade.h:80
-#, fuzzy
-msgid "Encry_ption certificate:"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: mail/mail-config.glade.h:81
-msgid "Evolution Account Assistant"
-msgstr "Дапаможнік уліковага запіÑу \"Эвалюцыі\""
-
-#: mail/mail-config.glade.h:82
-msgid "Execute Command..."
-msgstr "Выканаць каманду..."
-
-#: mail/mail-config.glade.h:83
-msgid "Fi_xed-width:"
-msgstr "ФікÑÐ°Ð²Ð°Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ:"
-
-#: mail/mail-config.glade.h:84
-msgid "Font Properties"
-msgstr "УлаÑьціваÑьці шрыфту"
-
-#: mail/mail-config.glade.h:85
-msgid "Format messages in _HTML"
-msgstr "Фарматаваць паведамленьні ў HTML"
-
-#: mail/mail-config.glade.h:87
-msgid "HTML Mail"
-msgstr "По_шта у HTML"
-
-#: mail/mail-config.glade.h:88
-msgid "Headers"
-msgstr "Загалоўкі"
-
-#: mail/mail-config.glade.h:89
-msgid "Highlight _quotations with"
-msgstr "Вылучаць _цытаваньне:"
-
-#: mail/mail-config.glade.h:90
-msgid "IMAPv4 "
-msgstr "IMAPv4 "
-
-#: mail/mail-config.glade.h:91
-#, fuzzy
-msgid "I_nclude remote tests"
-msgstr "Уключае:"
-
-#: mail/mail-config.glade.h:94
-msgid "Inline"
-msgstr "Убудаванае"
-
-#: mail/mail-config.glade.h:96
-msgid "Kerberos "
-msgstr "Kerberos "
-
-#: mail/mail-config.glade.h:98
-msgid "Mail Configuration"
-msgstr "Ðаладка пошты"
-
-#: mail/mail-config.glade.h:100
-msgid "Mailbox location"
-msgstr "РазьмÑшчÑньне паштовае Ñкрыні"
-
-#: mail/mail-config.glade.h:101
-msgid "Message Composer"
-msgstr "РÑдактар паведамленьнÑÑž"
-
-#: mail/mail-config.glade.h:104
-msgid ""
-"Note: you will not be prompted for a password until you connect for the "
-"first time"
-msgstr ""
-
-#: mail/mail-config.glade.h:105
-msgid "Or_ganization:"
-msgstr "УÑтанова:"
-
-#: mail/mail-config.glade.h:106
-msgid "PGP/GPG _Key ID:"
-msgstr "Ід ключа PGP/GPG:"
-
-#: mail/mail-config.glade.h:111
-msgid "Play sound file when new mail arri_ves"
-msgstr "Граць гук, калі атрымана Ð½Ð¾Ð²Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ð°"
-
-#: mail/mail-config.glade.h:112
-msgid "Pr_ompt when sending messages with only Bcc recipients defined"
-msgstr ""
-"ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž,\n"
-"у Ñкіх вызначаны толькі атрымоўцы Ñхаванае копіі."
-
-#: mail/mail-config.glade.h:113
-msgid "Qmail maildir "
-msgstr "Паштовы каталёг Qmail"
-
-#: mail/mail-config.glade.h:114
-msgid "Quote original message"
-msgstr "Цытаваць арыгінальнае паведамленьне"
-
-#: mail/mail-config.glade.h:115
-msgid "Quoted"
-msgstr "Цытаванае"
-
-#: mail/mail-config.glade.h:116
-msgid "Re_member password"
-msgstr "Запомніць пароль"
-
-#: mail/mail-config.glade.h:117
-msgid "Re_ply-To:"
-msgstr "Ðдказаць на:"
-
-#: mail/mail-config.glade.h:118
-msgid "Receiving Email"
-msgstr "Ðтрыманьне пошты"
-
-#: mail/mail-config.glade.h:120
-msgid "Receiving Options"
-msgstr "Выбары атрыманьнÑ"
-
-#: mail/mail-config.glade.h:121
-msgid "Remember _password"
-msgstr "Запомніць пароль"
-
-#: mail/mail-config.glade.h:123
-msgid "S_tandard Font:"
-msgstr "Стандартны шрыфт:"
-
-#: mail/mail-config.glade.h:124
-msgid "Security"
-msgstr "БÑÑьпека"
-
-#: mail/mail-config.glade.h:125
-msgid "Select HTML fixed width font"
-msgstr "Выберыце шрыфт HTML фікÑаванае шырыні"
-
-#: mail/mail-config.glade.h:126
-msgid "Select HTML fixed width font for printing"
-msgstr "Выберыце шрыфт HTML фікÑаванае шырыні Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ"
-
-#: mail/mail-config.glade.h:127
-msgid "Select HTML variable width font"
-msgstr "Выберыце шрыфт HTML пераменнае шырыні"
-
-#: mail/mail-config.glade.h:128
-msgid "Select HTML variable width font for printing"
-msgstr "Выберыце шрыфт HTML пераменнае шырыні Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ"
-
-#: mail/mail-config.glade.h:129
-msgid "Select..."
-msgstr "Вылучыць..."
-
-#: mail/mail-config.glade.h:130
-msgid "Sending Email"
-msgstr "Ðдпраўка пошты"
-
-#: mail/mail-config.glade.h:133
-msgid "Sent _Messages Folder:"
-msgstr "ТÑчка даÑланых паведамленьнÑÑž:"
-
-#: mail/mail-config.glade.h:134
-msgid "Ser_ver requires authentication"
-msgstr "ПаÑлужнік патрабуе аўтарызацыю"
-
-#: mail/mail-config.glade.h:135
-msgid "Server _Type: "
-msgstr "Тып паÑлужніку: "
-
-#: mail/mail-config.glade.h:136
-#, fuzzy
-msgid "Si_gning certificate:"
-msgstr "СамападпіÑаны ÑÑртыфікат у ланцужку"
-
-#: mail/mail-config.glade.h:137
-msgid "Signat_ure:"
-msgstr "ПодпіÑ:"
-
-#: mail/mail-config.glade.h:138
-msgid "Signatures"
-msgstr "ПодпіÑÑ‹"
-
-#: mail/mail-config.glade.h:139
-msgid "Specify _filename:"
-msgstr "Ðазва файла:"
-
-#: mail/mail-config.glade.h:140
-msgid "Spell Checking"
-msgstr "Праверка правапіÑу"
-
-#: mail/mail-config.glade.h:141
-msgid "Standard Unix mbox"
-msgstr "Стандартны файл Unix mbox"
-
-#: mail/mail-config.glade.h:142
-msgid "T_erminal Font:"
-msgstr "ТÑрмінальны шрыфт:"
-
-#: mail/mail-config.glade.h:143
-msgid "T_ype: "
-msgstr "Тып: "
-
-#: mail/mail-config.glade.h:144
-msgid ""
-"The output of this script will be used as your\n"
-"signature. The name you specify will be used\n"
-"for display purposes only. "
-msgstr ""
-
-#: mail/mail-config.glade.h:147
-msgid ""
-"This page allows you to configure spell checking behavior and language. The "
-"list of languages here reflects only the languages for which you have a "
-"dictionary installed."
-msgstr ""
-"ГÑÑ‚Ð°Ñ Ñтаронка дазвалÑе наладзіць паводзіны праверкі правапіÑу Ñ– мову. Ð¡ÑŒÐ¿Ñ–Ñ "
-"моваў адлюÑтроўвае толькі мовы, Ñлоўнікі Ñкіх уÑталÑваны Ñž вашае ÑÑ‹ÑÑ‚Ñме."
-
-#: mail/mail-config.glade.h:149
-msgid ""
-"Type the name by which you would like to refer to this account.\n"
-"For example: \"Work\" or \"Personal\""
-msgstr ""
-"Пазначце назву Ð´Ð»Ñ Ð³Ñтага рахунка.\n"
-"Да прыкладу: \"Праца\" ці \"ÐÑабіÑтае\""
-
-#: mail/mail-config.glade.h:152
-msgid "V_ariable-width:"
-msgstr "ÐŸÐµÑ€Ð°Ð¼ÐµÐ½Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ:"
-
-#: mail/mail-config.glade.h:153
-msgid ""
-"Welcome to the Evolution Mail Configuration Assistant.\n"
-"\n"
-"Click \"Forward\" to begin. "
-msgstr ""
-"Калі лаÑка, у Памочніка па наладцы пошты \"Эвалюцыі\".\n"
-"\n"
-"Калі лаÑка, клікніце \"Ðаперад\" каб пачаць. "
-
-#: mail/mail-config.glade.h:158
-msgid "_Add Signature"
-msgstr "_Дадаць подпіÑ"
-
-#: mail/mail-config.glade.h:159
-msgid "_Always load images from the Internet"
-msgstr "ЗаўÑёды загружаць відарыÑÑ‹ з Ñеціва"
-
-#: mail/mail-config.glade.h:160
-msgid "_Digitally sign outgoing messages (by default)"
-msgstr "Дапомна падпіÑваць паведамленьні"
-
-#: mail/mail-config.glade.h:161
-msgid "_Do not notify me when new mail arrives"
-msgstr "_Ðе паведамлÑць пра атрыманьне новай пошты"
-
-#: mail/mail-config.glade.h:163
-msgid "_Enable"
-msgstr "_Уключыць"
-
-#: mail/mail-config.glade.h:164
-msgid "_Encrypt outgoing messages (by default)"
-msgstr ""
-
-#: mail/mail-config.glade.h:165
-msgid "_Forward style:"
-msgstr "Стыль пераÑылкі:"
-
-#: mail/mail-config.glade.h:168
-msgid "_Load images if sender is in address book"
-msgstr "Загружаць відарыÑÑ‹, калі адпраўлÑльнік Ñ‘Ñьць у кнізе адраÑоў"
-
-#: mail/mail-config.glade.h:169
-msgid "_Make this my default account"
-msgstr "_Зрабіць дапомным уліковым запіÑам"
-
-#: mail/mail-config.glade.h:170
-msgid "_Mark messages as read after"
-msgstr "Паз_начаць паведамленьні Ñк \"Прачытанае\" праз"
-
-#: mail/mail-config.glade.h:172
-msgid "_Never load images from the Internet"
-msgstr "Ðіколі не загружаць відарыÑÑ‹ з Ñеціва"
-
-#: mail/mail-config.glade.h:174
-msgid "_Prompt when sending HTML messages to contacts that don't want them"
-msgstr ""
-"_ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž\n"
-"у фармаце HTML тым, хто не жадае гÑтага."
-
-#: mail/mail-config.glade.h:175
-msgid "_Prompt when sending messages with an empty subject line"
-msgstr "_ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– паведамленьнÑÑž з пуÑтой Ñ‚Ñмай"
-
-#: mail/mail-config.glade.h:176
-msgid "_Reply style:"
-msgstr "Стыль _адказу:"
-
-#: mail/mail-config.glade.h:177
-msgid "_Script:"
-msgstr "_СцÑнар:"
-
-#: mail/mail-config.glade.h:178
-msgid "_Show animated images"
-msgstr "Паказваць Ð°Ð½Ñ–Ð¼Ð°Ð²Ð°Ð½Ñ‹Ñ Ð²Ñ–Ð´Ð°Ñ€Ñ‹ÑÑ‹"
-
-#: mail/mail-config.glade.h:179
-msgid "_Use Secure Connection (SSL):"
-msgstr "_ВыкарыÑтоўваць бÑÑьпечнае далучÑньне праз SSL:"
-
-#: mail/mail-config.glade.h:180
-msgid "_Use the same fonts as other applications"
-msgstr "ВыкарыÑтоўваць той Ñама шрыфт што Ñ– аÑÑ‚Ð°Ñ‚Ð½Ñ–Ñ Ð´Ð°ÑтаÑаваньні"
-
-#: mail/mail-config.glade.h:181
-msgid "color"
-msgstr "колер"
-
-#: mail/mail-config.glade.h:182
-msgid "description"
-msgstr "апіÑаньне"
-
-#: mail/mail-dialogs.glade.h:1
-msgid ""
-"\n"
-" Please read carefully the license agreement displayed\n"
-" below and tick the check box for accepting it\n"
-msgstr ""
-
-#: mail/mail-dialogs.glade.h:7
-msgid "<b>vFolder Sources</b>"
-msgstr "<b>Крыніцы віртуальных Ñ‚Ñчак</b>"
-
-#: mail/mail-dialogs.glade.h:8
-msgid "<span weight=\"bold\">Digital Signature</span>"
-msgstr ""
-
-#: mail/mail-dialogs.glade.h:9
-msgid "<span weight=\"bold\">Encryption</span>"
-msgstr ""
-
-#: mail/mail-dialogs.glade.h:10
-msgid "Accept License"
-msgstr "ПрынÑць ліцÑнзію"
-
-#: mail/mail-dialogs.glade.h:11 mail/message-tags.glade.h:2
-msgid "C_ompleted"
-msgstr "За_вершана"
-
-#: mail/mail-dialogs.glade.h:12
-msgid "Case Sensitive"
-msgstr "Улічваць Ñ€ÑгіÑтар"
-
-#: mail/mail-dialogs.glade.h:14
-msgid "Find in Message"
-msgstr "Пошук у паведамленьні"
-
-#: mail/mail-dialogs.glade.h:15
-msgid "Find:"
-msgstr "Пошук:"
-
-#: mail/mail-dialogs.glade.h:16 mail/message-tag-followup.c:294
-#: mail/message-tags.glade.h:3
-msgid "Flag to Follow Up"
-msgstr "Пазначыць Ñк \"Да выкананьнÑ\""
-
-#: mail/mail-dialogs.glade.h:17
-msgid "Folder Subscriptions"
-msgstr "ТÑчка з падпіÑкамі"
-
-#: mail/mail-dialogs.glade.h:18
-msgid "License Agreement"
-msgstr ""
-
-#: mail/mail-dialogs.glade.h:19
-msgid "None Selected"
-msgstr "Ðе вылучана"
-
-#: mail/mail-dialogs.glade.h:20
-msgid "S_erver:"
-msgstr "ПаÑлужнік:"
-
-#: mail/mail-dialogs.glade.h:21
-msgid "Security Information"
-msgstr "ЗьвеÑткі аб бÑÑьпецы"
-
-#: mail/mail-dialogs.glade.h:23 mail/message-tags.glade.h:4
-msgid ""
-"The messages you have selected for follow up are listed below.\n"
-"Please select a follow up action from the \"Flag\" menu."
-msgstr ""
-
-#: mail/mail-dialogs.glade.h:25
-#, fuzzy
-msgid "Tick this to accept the license agreement"
-msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
-
-#: mail/mail-dialogs.glade.h:26 mail/message-tags.glade.h:6
-#, fuzzy
-msgid "_Due By:"
-msgstr "Умоўлена да:"
-
-#: mail/mail-dialogs.glade.h:27 mail/message-tags.glade.h:7
-msgid "_Flag:"
-msgstr "_СьцÑг:"
-
-#: mail/mail-dialogs.glade.h:28
-msgid "_Subscribe"
-msgstr "_ПадпіÑацца"
-
-#: mail/mail-dialogs.glade.h:29
-msgid "_Unsubscribe"
-msgstr "_Ðдмовіцца ад падпіÑкі"
-
-#: mail/mail-dialogs.glade.h:30
-msgid "specific folders only"
-msgstr "толькі Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñ‚Ñчкі"
-
-#: mail/mail-dialogs.glade.h:31
-msgid "with all active remote folders"
-msgstr "з уÑімі актыўнымі аддаленымі Ñ‚Ñчкамі"
-
-#: mail/mail-dialogs.glade.h:32
-msgid "with all local and active remote folders"
-msgstr "з уÑімі лÑкальнымі й актыўнымі аддаленымі Ñ‚Ñчкамі"
-
-#: mail/mail-dialogs.glade.h:33
-msgid "with all local folders"
-msgstr "з уÑімі лÑкальнымі Ñ‚Ñчкамі"
-
-#. mail:camel-service-auth-invalid primary
-#: mail/mail-errors.xml.h:2
-#, fuzzy
-msgid "Invalid authentication"
-msgstr "ÐўтарызацыÑ"
-
-#. mail:camel-service-auth-invalid secondary
-#: mail/mail-errors.xml.h:4
-#, fuzzy
-msgid ""
-"This server does not support this type of authentication and may not support "
-"authentication at all."
-msgstr "ПаÑлужнік SMTP %s не падтрымлівае запатрабаваны тып ідÑнтыфікацыі %s"
-
-#. mail:camel-service-auth-failed primary
-#: mail/mail-errors.xml.h:6
-msgid "Your login to your server \"{0}\" as \"{0}\" failed."
-msgstr ""
-
-#. mail:camel-service-auth-failed secondary
-#: mail/mail-errors.xml.h:8
-msgid ""
-"Check to make sure your password is spelled correctly. Remember that many "
-"passwords are case sensitive; your caps lock might be on."
-msgstr ""
-
-#. mail:ask-send-html primary
-#: mail/mail-errors.xml.h:10
-#, fuzzy
-msgid "Are you sure you want to send a message in HTML format?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце перадаÑлаць уÑе %d паведамленьні?"
-
-#. mail:ask-send-html secondary
-#: mail/mail-errors.xml.h:12
-#, fuzzy
-msgid ""
-"Please make sure the following recipients are willing and able to receive "
-"HTML email:\n"
-"{0}\n"
-"Send anyway?"
-msgstr ""
-"Ð’Ñ‹ даÑылаеце паведамленьне фарматаванае Ñž HTML. Калі лаÑка,\n"
-"упÑўніцеÑÑ ÑˆÑ‚Ð¾ наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð¾ÑžÑ†Ñ‹ жадаюць Ñ– могуць атрымліваць\n"
-"пошту у фармаце HTML:\n"
-
-#: mail/mail-errors.xml.h:15 mail/mail-errors.xml.h:20
-#: mail/mail-errors.xml.h:27 mail/mail-errors.xml.h:32
-msgid "_Send"
-msgstr "Да_Ñлаць"
-
-#. mail:ask-send-no-subject primary
-#: mail/mail-errors.xml.h:17
-#, fuzzy
-msgid "Are you sure you want to send a message without a subject?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце перадаÑлаць уÑе %d паведамленьні?"
-
-#. mail:ask-send-no-subject secondary
-#: mail/mail-errors.xml.h:19
-msgid ""
-"Adding a meaningful Subject line to your messages will give your recipients "
-"an idea of what your mail is about."
-msgstr ""
-
-#. mail:ask-send-only-bcc-contact primary
-#. mail:ask-send-only-bcc primary
-#: mail/mail-errors.xml.h:22 mail/mail-errors.xml.h:29
-#, fuzzy
-msgid "Are you sure you want to send a message with only BCC recipients?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце перадаÑлаць уÑе %d паведамленьні?"
-
-#. mail:ask-send-only-bcc-contact secondary
-#: mail/mail-errors.xml.h:24
-msgid ""
-"The contact list you are sending to is configured to hide list recipients.\n"
-"\n"
-"Many email systems add an Apparently-To header to messages that only have "
-"BCC recipients. This header, if added, will list all of your recipients in "
-"your message. To avoid this, you should add at least one To: or CC: "
-"recipient. "
-msgstr ""
-
-#. mail:ask-send-only-bcc secondary
-#: mail/mail-errors.xml.h:31
-msgid ""
-"Many email systems add an Apparently-To header to messages that only have "
-"BCC recipients. This header, if added, will list all of your recipients to "
-"your message anyway. To avoid this, you should add at least one To: or CC: "
-"recipient."
-msgstr ""
-
-#. mail:send-no-recipients primary
-#: mail/mail-errors.xml.h:34
-msgid "This message cannot be sent because you have not specified any Recipients"
-msgstr ""
-
-#. mail:send-no-recipients secondary
-#: mail/mail-errors.xml.h:36
-msgid ""
-"Please enter a valid email address in the To: field. You can search for "
-"email addresses by clicking on the To: button next to the entry box."
-msgstr ""
-
-#. mail:ask-default-drafts primary
-#: mail/mail-errors.xml.h:38
-msgid "Use default drafts folder?"
-msgstr "ВыкарыÑтоўваць дапомную Ñ‚Ñчку чарнавікоў?"
-
-#. mail:ask-default-drafts secondary
-#: mail/mail-errors.xml.h:40
-msgid ""
-"Unable to open the drafts folder for this account. Use the system drafts "
-"folder instead?"
-msgstr ""
-"Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ Ñ‚Ñчку чарнавікоў Ð´Ð»Ñ Ð³Ñтага рахунка. Жадаеце "
-"выкарыÑтоўваць ÑÑ‹ÑÑ‚Ñмную Ñ‚Ñчку чарнавікоў?"
-
-#: mail/mail-errors.xml.h:41
-msgid "Use _Default"
-msgstr "ВыкарыÑтоўваць дапомнае"
-
-#. mail:ask-expunge primary
-#: mail/mail-errors.xml.h:43
-#, fuzzy
-msgid ""
-"Are you sure you want to permanently remove all the deleted message in "
-"folder \"{0}\"?"
-msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце адкрыць уÑе %d паведамленьні Ñž аÑобных вокнах?"
-
-#. mail:ask-expunge secondary
-#. mail:ask-empty-trash secondary
-#: mail/mail-errors.xml.h:45 mail/mail-errors.xml.h:50
-msgid "If you continue, you will not be able to recover these messages."
-msgstr ""
-
-#: mail/mail-errors.xml.h:46
-msgid "_Expunge"
-msgstr "_ВыкрÑÑьліць"
-
-#. mail:ask-empty-trash primary
-#: mail/mail-errors.xml.h:48
-#, fuzzy
-msgid ""
-"Are you sure you want to permanently remove all the deleted messages in all "
-"folders?"
-msgstr "Зьнішчыць уÑе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– з уÑÑ–Ñ… Ñ‚Ñчак"
-
-#: mail/mail-errors.xml.h:51
-msgid "_Empty Trash"
-msgstr "СпуÑтошыць _Ñьметніцу"
-
-#. mail:exit-unsaved primary
-#: mail/mail-errors.xml.h:53
-msgid "You have unsent messages, do you wish to quit anyway?"
-msgstr "Маюцца недаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–! Ð’Ñ‹ жадаеце завÑршыць працу?"
-
-#. mail:exit-unsaved secondary
-#: mail/mail-errors.xml.h:55
-msgid ""
-"If you quit, these messages will not be sent until Evolution is started "
-"again."
-msgstr ""
-
-#. mail:camel-exception primary
-#: mail/mail-errors.xml.h:57
-msgid "Your message with the subject \"{0}\" was not delivered."
-msgstr ""
-
-#. mail:camel-exception secondary
-#: mail/mail-errors.xml.h:59
-msgid ""
-"The message was sent via the \"sendmail\" external application. Sendmail "
-"reports the following error: status 67: mail not sent.\n"
-"The message is stored in the Outbox folder. Check the message for errors "
-"and resend."
-msgstr ""
-
-#. mail:async-error primary
-#: mail/mail-errors.xml.h:62
-msgid "Error while {0}."
-msgstr "Памылка пад Ñ‡Ð°Ñ {0}."
-
-#. mail:async-error secondary
-#: mail/mail-errors.xml.h:64
-msgid "{1}."
-msgstr ""
-
-#. mail:async-error-nodescribe primary
-#: mail/mail-errors.xml.h:66
-msgid "Error while performing operation."
-msgstr "Памылка пад Ñ‡Ð°Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð°Ð¿Ñрацыі."
-
-#. mail:async-error-nodescribe secondary
-#: mail/mail-errors.xml.h:68
-msgid "{0}."
-msgstr ""
-
-#. mail:ask-session-password primary
-#: mail/mail-errors.xml.h:82
-msgid "Enter password."
-msgstr "Пазначце пароль."
-
-#. mail:filter-load-error primary
-#: mail/mail-errors.xml.h:86
-msgid "Error loading filter definitions."
-msgstr ""
-"Памылка пад Ñ‡Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ– інфармацыі цÑдалю:\n"
-"%s"
-
-#. mail:no-save-path primary
-#: mail/mail-errors.xml.h:90
-msgid "Cannot save to directory \"{0}\"."
-msgstr "Ðемагчыма захаваць у каталёг \"{0}\"."
-
-#. mail:no-create-path primary
-#. mail:no-write-path-exists primary
-#. mail:no-write-path-notfile primary
-#: mail/mail-errors.xml.h:94 mail/mail-errors.xml.h:102
-#: mail/mail-errors.xml.h:106
-msgid "Cannot save to file \"{0}\"."
-msgstr "Ðемагчыма захаваць у файл \"{0}\"."
-
-#. mail:no-create-path secondary
-#: mail/mail-errors.xml.h:96
-#, fuzzy
-msgid "Cannot create the save directory, because \"{1}\""
-msgstr ""
-"Ðемагчыма Ñтварыць каталёг\n"
-" %s\n"
-"Памылка: %s"
-
-#. mail:no-create-tmp-path primary
-#: mail/mail-errors.xml.h:98
-msgid "Cannot create temporary save directory."
-msgstr ""
-
-#. mail:no-write-path-exists secondary
-#: mail/mail-errors.xml.h:104
-msgid "File exists but cannot overwrite it."
-msgstr "Файл Ñ–Ñнуе але перапіÑаць Ñго немагчыма."
-
-#. mail:no-write-path-notfile secondary
-#: mail/mail-errors.xml.h:108
-msgid "File exists but is not a regular file."
-msgstr "Файл Ñ–Ñнуе але не зьÑўлÑецца звычайным файлам."
-
-#. mail:no-delete-folder primary
-#: mail/mail-errors.xml.h:110
-msgid "Cannot delete folder \"{0}\"."
-msgstr "Ðемагчыма выдаліць Ñ‚Ñчку \"{0}\"."
-
-#. mail:no-delete-spethal-folder primary
-#: mail/mail-errors.xml.h:114
-msgid "Cannot delete system folder \"{0}\"."
-msgstr "Ðемагчыма выдаліць ÑÑ‹ÑÑ‚Ñмную Ñ‚Ñчку \"{0}\"."
-
-#. mail:no-delete-spethal-folder secondary
-#. mail:no-rename-spethal-folder secondary
-#: mail/mail-errors.xml.h:116 mail/mail-errors.xml.h:120
-msgid ""
-"System folders are required for Ximian Evolution to function correctly and "
-"cannot be renamed, moved, or deleted."
-msgstr ""
-
-#. mail:no-rename-spethal-folder primary
-#: mail/mail-errors.xml.h:118
-msgid "Cannot rename or move system folder \"{0}\"."
-msgstr "Ðемагчыма зьмÑніць назву ці перамÑÑьціць ÑÑ‹ÑÑ‚Ñмную Ñ‚Ñчку \"{0}\"."
-
-#. mail:ask-delete-folder title
-#: mail/mail-errors.xml.h:122
-msgid "Delete \"{0}\"?"
-msgstr "Выдаліць \"{0}?"
-
-#. mail:ask-delete-folder primary
-#: mail/mail-errors.xml.h:124
-msgid "Really delete folder \"{0}\" and all of its subfolders?"
-msgstr "Сапраўды выдаліць Ñ‚Ñчку \"{0}\" Ñ– Ñе падтÑчкі?"
-
-#. mail:ask-delete-folder secondary
-#: mail/mail-errors.xml.h:126
-msgid ""
-"If you delete the folder, all of its contents and its subfolders contents "
-"will be deleted permanently."
-msgstr ""
-
-#. mail:no-rename-folder-exists primary
-#. mail:no-rename-folder primary
-#: mail/mail-errors.xml.h:128 mail/mail-errors.xml.h:132
-#, fuzzy
-msgid "Cannot rename \"{0}\" to \"{1}\"."
-msgstr "Ðемагчыма перамÑÑьціць Ñ‚Ñчку: %s"
-
-#. mail:no-rename-folder-exists secondary
-#. mail:vfolder-notunique secondary
-#: mail/mail-errors.xml.h:130 mail/mail-errors.xml.h:192
-msgid "A folder named \"{1}\" already exists. Please use a different name."
-msgstr ""
-
-#. mail:no-rename-folder secondary
-#: mail/mail-errors.xml.h:134
-msgid "Because \"{2}\"."
-msgstr ""
-
-#. mail:no-move-folder-nostore primary
-#. mail:no-move-folder-to-nostore primary
-#: mail/mail-errors.xml.h:136 mail/mail-errors.xml.h:140
-msgid "Cannot move folder \"{0}\" to \"{1}\"."
-msgstr "Ðемагчыма перамÑÑьціць Ñ‚Ñчку\"{0}\"·у·\"{1}\"."
-
-#. mail:no-move-folder-nostore secondary
-#. mail:no-copy-folder-nostore secondary
-#: mail/mail-errors.xml.h:138 mail/mail-errors.xml.h:146
-#, fuzzy
-msgid "Cannot open source \"{2}\"."
-msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ падзеленую Ñ‚Ñчку: %s"
-
-#. mail:no-move-folder-to-nostore secondary
-#. mail:no-copy-folder-to-nostore secondary
-#: mail/mail-errors.xml.h:142 mail/mail-errors.xml.h:150
-#, fuzzy
-msgid "Cannot open target \"{2}\"."
-msgstr "Ðемагчыма адкрыць паведамленьне"
-
-#. mail:no-copy-folder-nostore primary
-#. mail:no-copy-folder-to-nostore primary
-#: mail/mail-errors.xml.h:144 mail/mail-errors.xml.h:148
-#, fuzzy
-msgid "Cannot copy folder \"{0}\" to \"{1}\"."
-msgstr "Ðемагчыма капіÑваць Ñ‚Ñчку: %s"
-
-#. mail:no-create-folder-nostore primary
-#: mail/mail-errors.xml.h:152
-#, fuzzy
-msgid "Cannot create folder \"{0}\"."
-msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
-
-#. mail:no-create-folder-nostore secondary
-#: mail/mail-errors.xml.h:154
-#, fuzzy
-msgid "Cannot open source \"{1}\""
-msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ падзеленую Ñ‚Ñчку: %s"
-
-#. mail:account-incomplete primary
-#. mail:account-notunique primary
-#: mail/mail-errors.xml.h:156 mail/mail-errors.xml.h:160
-#, fuzzy
-msgid "Cannot save changes to account."
-msgstr "Ñ– адна Ñ–Ð½ÑˆÐ°Ñ ÐºÐ°Ñ€Ñ‚ÐºÐ°."
-
-#. mail:account-incomplete secondary
-#: mail/mail-errors.xml.h:158
-msgid "You have not filled in all of the required information."
-msgstr "Ð’Ñ‹ не пазначылі ÑžÑÑ‘ неабходную інфармацыю."
-
-#. mail:account-notunique secondary
-#: mail/mail-errors.xml.h:162
-msgid "You may not create two accounts with the same name."
-msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ Ñтварыць два рахункі з аднолькавымі назвамі."
-
-#. mail:ask-delete-account title
-#: mail/mail-errors.xml.h:164
-#, fuzzy
-msgid "Delete account?"
-msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
-
-#. mail:ask-delete-account primary
-#: mail/mail-errors.xml.h:166
-msgid "Are you sure you want to delete this account?"
-msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑÑ‚Ñ‹ рахунак?"
-
-#. mail:ask-delete-account secondary
-#: mail/mail-errors.xml.h:168
-msgid "If you proceed, the account information will be deleted permanently."
-msgstr ""
-
-#: mail/mail-errors.xml.h:169
-#, fuzzy
-msgid "Don't delete"
-msgstr "Ð’Ñрнуць з выдаленага"
-
-#. mail:no-save-signature primary
-#: mail/mail-errors.xml.h:171
-#, fuzzy
-msgid "Could not save signature file."
-msgstr "Ðеатрымліваецца захаваць файл подпіÑа: %s"
-
-#. mail:no-save-signature secondary
-#: mail/mail-errors.xml.h:173
-msgid "Because \"{0}\"."
-msgstr ""
-
-#. mail:signature-notscript primary
-#: mail/mail-errors.xml.h:175
-#, fuzzy
-msgid "Cannot set signature script \"{0}\"."
-msgstr "_Дадаць подпіÑ"
-
-#. mail:signature-notscript secondary
-#: mail/mail-errors.xml.h:177
-msgid "The script file must exist and be executable."
-msgstr ""
-
-#. mail:ask-signature-changed title
-#: mail/mail-errors.xml.h:179
-#, fuzzy
-msgid "Discard changed?"
-msgstr "_Ðдкінуць зьмены"
-
-#. mail:ask-signature-changed primary
-#: mail/mail-errors.xml.h:181
-#, fuzzy
-msgid "Do you wish to save your changes?"
-msgstr "Жадаеце захаваць зьмены?"
-
-#. mail:ask-signature-changed secondary
-#: mail/mail-errors.xml.h:183
-#, fuzzy
-msgid "This signature has been changed, but has not been saved."
-msgstr ""
-"ГÑÑ‚Ñ‹ Ð¿Ð¾Ð´Ð¿Ñ–Ñ Ð±Ñ‹Ñž зьменены, але Ð½Ñ Ð±Ñ‹Ñž захаваны.\n"
-"\n"
-"Вы жадаеце захаваць зьмены?"
-
-#: mail/mail-errors.xml.h:184
-msgid "_Discard changes"
-msgstr "_Ðдкінуць зьмены"
-
-#. mail:vfolder-notexist primary
-#: mail/mail-errors.xml.h:186
-#, fuzzy
-msgid "Cannot edit vFolder \"{0}\" as it does not exist."
-msgstr "ТÑчка \"%s\" не Ñ–Ñнуе."
-
-#. mail:vfolder-notexist secondary
-#: mail/mail-errors.xml.h:188
-msgid ""
-"This folder may have been added implictly, go to the virtual folder editor "
-"to add it explictly, if required."
-msgstr ""
-
-#. mail:vfolder-notunique primary
-#: mail/mail-errors.xml.h:190
-#, fuzzy
-msgid "Cannot add vFolder \"{0}\"."
-msgstr ""
-"Ðемагчыма выдаліць Ñ‚Ñчку:\n"
-"%s"
-
-#. mail:vfolder-updated primary
-#: mail/mail-errors.xml.h:194
-msgid "vFolders automatically updated."
-msgstr ""
-
-#. mail:vfolder-updated secondary
-#: mail/mail-errors.xml.h:196
-#, fuzzy
-msgid ""
-"The following vFolder(s):\n"
-"{0}\n"
-"Used the now removed folder:\n"
-" \"{1}\"\n"
-"And have been updated."
-msgstr ""
-"ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі:\n"
-"%sВыкарыÑтана Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°Ñ Ñ‚Ñчка:\n"
-" \"%s\"\n"
-"І быдзе абноўлена."
-
-#. mail:filter-updated primary
-#: mail/mail-errors.xml.h:202
-msgid "Mail filters automatically updated."
-msgstr ""
-
-#. mail:filter-updated secondary
-#: mail/mail-errors.xml.h:204
-#, fuzzy
-msgid ""
-"The following filter rule(s):\n"
-"{0}\n"
-"Used the now removed folder:\n"
-" \"{1}\"\n"
-"And have been updated."
-msgstr ""
-"ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі:\n"
-"%sВыкарыÑтана Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°Ñ Ñ‚Ñчка:\n"
-" \"%s\"\n"
-"І быдзе абноўлена."
-
-#. mail:no-folder primary
-#: mail/mail-errors.xml.h:210
-#, fuzzy
-msgid "Missing folder."
-msgstr "Выдаленьне Ñ‚Ñчкі %s"
-
-#. mail:no-folder secondary
-#: mail/mail-errors.xml.h:212
-msgid "You must specify a folder."
-msgstr "Ð’Ñ‹ муÑіце пазначыць Ñ‚Ñчку."
-
-#. mail:no-name-vfolder secondary
-#: mail/mail-errors.xml.h:216
-#, fuzzy
-msgid "You must name this vFolder."
-msgstr "Ð’Ñ‹ муÑіце назваць гÑтую віртуальную Ñ‚Ñчку."
-
-#. mail:vfolder-no-source primary
-#: mail/mail-errors.xml.h:218
-#, fuzzy
-msgid "No sources selected."
-msgstr "Ðебыў выбраны паÑлужнік"
-
-#. mail:vfolder-no-source secondary
-#: mail/mail-errors.xml.h:220
-msgid ""
-"You must specify at least one folder as a source.\n"
-"Either by selecting the folders individually, and/or by selecting\n"
-"all local folders, all remote folders, or both."
-msgstr ""
-
-#. mail:ask-migrate-existing primary
-#: mail/mail-errors.xml.h:224
-msgid "Problem migrating old mail folder \"{0}\"."
-msgstr ""
-
-#. mail:ask-migrate-existing secondary
-#: mail/mail-errors.xml.h:226
-msgid ""
-"A non-empty folder at \"{1}\" already exists.\n"
-"\n"
-"You can choose to ignore this folder, overwrite or append its contents, or "
-"quit.\n"
-msgstr ""
-
-#: mail/mail-errors.xml.h:230
-msgid "Ignore"
-msgstr ""
-
-#: mail/mail-errors.xml.h:231 widgets/misc/e-system-errors.xml.h:7
-msgid "_Overwrite"
-msgstr "П_ерапіÑаць"
-
-#: mail/mail-errors.xml.h:232
-msgid "_Append"
-msgstr "Да_лучыць"
-
-#: mail/mail-folder-cache.c:785
-#, c-format
-msgid "Pinging %s"
-msgstr "Зандаваньне %s"
-
-#: mail/mail-ops.c:98
-msgid "Filtering Folder"
-msgstr "ЦÑдлÑваньне Ñ‚Ñчкі"
-
-#: mail/mail-ops.c:259
-msgid "Fetching Mail"
-msgstr "Ðтрыманьне пошты"
-
-#: mail/mail-ops.c:542
-#, fuzzy, c-format
-msgid "Failed to apply outgoing filters: %s"
-msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
-
-#: mail/mail-ops.c:567
-#, c-format
-msgid ""
-"Failed to append to %s: %s\n"
-"Appending to local `Sent' folder instead."
-msgstr ""
-
-#: mail/mail-ops.c:576
-#, fuzzy, c-format
-msgid "Failed to append to local `Sent' folder: %s"
-msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
-
-#: mail/mail-ops.c:672
-#, c-format
-msgid "Sending message %d of %d"
-msgstr "Ðдпраўленьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %d з %d"
-
-#: mail/mail-ops.c:703
-#, fuzzy, c-format
-msgid "Failed to send %d of %d messages"
-msgstr "ÐеатрымалаÑÑ Ð´Ñкадаваць паведамленьне."
-
-#: mail/mail-ops.c:707
-msgid "Complete."
-msgstr "Выканана."
-
-#: mail/mail-ops.c:804
-msgid "Saving message to folder"
-msgstr "Захаваньне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž Ñ‚Ñчцы"
-
-#: mail/mail-ops.c:889
-#, c-format
-msgid "Moving messages to %s"
-msgstr "ПерамÑшчÑньне паведамленьнÑÑž у %s"
-
-#: mail/mail-ops.c:889
-#, c-format
-msgid "Copying messages to %s"
-msgstr "КапіÑваньне паведамленьнÑÑž у %s"
-
-#: mail/mail-ops.c:1002
-#, c-format
-msgid "Scanning folders in \"%s\""
-msgstr "Сканаваньне Ñ‚Ñчак у \"%s\""
-
-#: mail/mail-ops.c:1115
-msgid "Forwarded messages"
-msgstr "ПадаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: mail/mail-ops.c:1158
-#, c-format
-msgid "Opening folder %s"
-msgstr "Ðдкрыцьцё Ñ‚Ñчкі \"%s\""
-
-#: mail/mail-ops.c:1230
-#, c-format
-msgid "Opening store %s"
-msgstr "Ðдкрыцьцё Ñховішча %s"
-
-#: mail/mail-ops.c:1308
-#, c-format
-msgid "Removing folder %s"
-msgstr "Выдаленьне Ñ‚Ñчкі %s"
-
-#: mail/mail-ops.c:1402
-#, c-format
-msgid "Storing folder '%s'"
-msgstr "Захаваньне Ñ‚Ñчкі \"%s\""
-
-#: mail/mail-ops.c:1467
-#, c-format
-msgid "Expunging and storing account '%s'"
-msgstr ""
-
-#: mail/mail-ops.c:1468
-#, fuzzy, c-format
-msgid "Storing account '%s'"
-msgstr "Захаваньне Ñ‚Ñчкі \"%s\""
-
-#: mail/mail-ops.c:1523
-msgid "Refreshing folder"
-msgstr "Ðбнаўленьне Ñ‚Ñчкі"
-
-#: mail/mail-ops.c:1559 mail/mail-ops.c:1610
-msgid "Expunging folder"
-msgstr "ВыкрÑÑьленьне Ñ‚Ñчкі"
-
-#: mail/mail-ops.c:1607
-#, c-format
-msgid "Emptying trash in '%s'"
-msgstr "СпуÑташÑньне Ñьметніцы Ñž \"%s\""
-
-#: mail/mail-ops.c:1608
-msgid "Local Folders"
-msgstr "ЛÑÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
-
-#: mail/mail-ops.c:1691
-#, c-format
-msgid "Retrieving message %s"
-msgstr "Ðтрыманьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %s"
-
-#: mail/mail-ops.c:1763
-#, fuzzy, c-format
-msgid "Retrieving %d message"
-msgstr "Ðтрыманьне %d паведамленьнÑÑž"
-
-#: mail/mail-ops.c:1849
-#, fuzzy, c-format
-msgid "Saving %d message"
-msgstr "Захаваньне %d паведамленьнÑÑž"
-
-#: mail/mail-ops.c:1899
-#, c-format
-msgid ""
-"Unable to create output file: %s\n"
-" %s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
-" %s"
-
-#: mail/mail-ops.c:1927
-#, c-format
-msgid ""
-"Error saving messages to: %s:\n"
-" %s"
-msgstr ""
-"Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž у: %s:\n"
-" %s"
-
-#: mail/mail-ops.c:1998
-msgid "Saving attachment"
-msgstr "Захаваньне ўкладаньнÑ"
-
-#: mail/mail-ops.c:2010
-#, c-format
-msgid ""
-"Cannot create output file: %s:\n"
-" %s"
-msgstr ""
-"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
-" %s"
-
-#: mail/mail-ops.c:2020
-#, c-format
-msgid "Could not write data: %s"
-msgstr "Ðемагчыма запіÑаць даньні: %s"
-
-#: mail/mail-ops.c:2168
-#, c-format
-msgid "Disconnecting from %s"
-msgstr "ÐдлучÑньне ад %s"
-
-#: mail/mail-ops.c:2168
-#, c-format
-msgid "Reconnecting to %s"
-msgstr "ПерадалучÑньне да %s"
-
-#: mail/mail-send-recv.c:157
-msgid "Cancelling..."
-msgstr "Ðдмена..."
-
-#: mail/mail-send-recv.c:264
-#, c-format
-msgid "Server: %s, Type: %s"
-msgstr "ПаÑлужнік: %s, Тып: %s"
-
-#: mail/mail-send-recv.c:266
-#, c-format
-msgid "Path: %s, Type: %s"
-msgstr "ШлÑÑ…: %s, Тып: %s"
-
-#: mail/mail-send-recv.c:268
-#, c-format
-msgid "Type: %s"
-msgstr "Тып: %s"
-
-#: mail/mail-send-recv.c:320
-msgid "Send & Receive Mail"
-msgstr "Ðтрыманьне Ñ– адпраўленьне пошты"
-
-#: mail/mail-send-recv.c:323
-msgid "Cancel _All"
-msgstr "ÐдмÑніць _уÑÑ‘"
-
-#: mail/mail-send-recv.c:412
-msgid "Updating..."
-msgstr "Ðбнаўленьне..."
-
-#: mail/mail-send-recv.c:412 mail/mail-send-recv.c:466
-msgid "Waiting..."
-msgstr "Чаканьне..."
-
-#: mail/mail-session.c:240
-msgid "User canceled operation."
-msgstr "ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð°Ð´Ð¼ÐµÐ½ÐµÐ½Ð° карыÑтальнікам."
-
-#: mail/mail-session.c:274
-#, c-format
-msgid "Enter Password for %s"
-msgstr "Пазначце пароль Ð´Ð»Ñ %s"
-
-#: mail/mail-session.c:276
-msgid "Enter Password"
-msgstr "Пазначце пароль"
-
-#: mail/mail-session.c:304
-msgid "_Remember this password"
-msgstr "_Запомніць гÑÑ‚Ñ‹ пароль"
-
-#: mail/mail-session.c:305
-msgid "_Remember this password for the remainder of this session"
-msgstr "_Запомніць гÑÑ‚Ñ‹ пароль да завÑршÑÐ½ÑŒÐ½Ñ ÑÑанÑа"
-
-#: mail/mail-signature-editor.c:371
-msgid "Edit signature"
-msgstr "РÑдагаваць подпіÑ"
-
-#: mail/mail-signature-editor.c:411
-msgid "Enter a name for this signature."
-msgstr "Пазначце назву Ð´Ð»Ñ Ð³Ñтага подпіÑу."
-
-#: mail/mail-signature-editor.c:414
-msgid "Name:"
-msgstr "Ðазва:"
-
-#: mail/mail-tools.c:114
-#, fuzzy, c-format
-msgid "Could not create spool directory `%s': %s"
-msgstr ""
-"Ðемагчыма Ñтварыць каталёг %s:\n"
-"%s"
-
-#: mail/mail-tools.c:141
-#, c-format
-msgid "Trying to movemail a non-mbox source `%s'"
-msgstr ""
-
-#: mail/mail-tools.c:276
-#, c-format
-msgid "Forwarded message - %s"
-msgstr "ПадаÑланае паведамленьне - %s"
-
-#: mail/mail-tools.c:278
-msgid "Forwarded message"
-msgstr "ПадаÑланае паведамленьне"
-
-#: mail/mail-tools.c:319
-#, fuzzy, c-format
-msgid "Invalid folder: `%s'"
-msgstr "Ðдкрыцьцё Ñ‚Ñчкі \"%s\""
-
-#: mail/mail-vfolder.c:87
-#, c-format
-msgid "Setting up vfolder: %s"
-msgstr "Ðаладка віртуальнае Ñ‚Ñчкі %s"
-
-#: mail/mail-vfolder.c:235
-#, fuzzy, c-format
-msgid "Updating vFolders for '%s:%s'"
-msgstr "Ðбнаўленьне віртуальнае Ñ‚Ñчкі на URI: %s"
-
-#: mail/mail-vfolder.c:242
-#, fuzzy, c-format
-msgid "Updating vFolders for '%s'"
-msgstr "Ðбнаўленьне віртуальнае Ñ‚Ñчкі на URI: %s"
-
-#: mail/mail-vfolder.c:942
-msgid "vFolders"
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
-
-#: mail/mail-vfolder.c:981
-msgid "Edit VFolder"
-msgstr "РÑдагаваньне віртуальных Ñ‚Ñчак"
-
-#: mail/mail-vfolder.c:1065
-msgid "New VFolder"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка"
-
-#: mail/message-list.c:953
-msgid "Unseen"
-msgstr "ÐечытаныÑ"
-
-#: mail/message-list.c:954
-msgid "Seen"
-msgstr "Прагледжанае"
-
-#: mail/message-list.c:955
-msgid "Answered"
-msgstr "ÐдказаныÑ"
-
-#: mail/message-list.c:956
-msgid "Multiple Unseen Messages"
-msgstr "Ð¨Ð¼Ð°Ñ‚Ð»Ñ–ÐºÑ–Ñ Ð¿ÐµÑ€Ð°Ð³Ð»ÐµÐ´Ð¶Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: mail/message-list.c:957
-msgid "Multiple Messages"
-msgstr "Ð¨Ð¼Ð°Ñ‚Ð»Ñ–ÐºÑ–Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: mail/message-list.c:961
-msgid "Lowest"
-msgstr "ÐіжÑйшы"
-
-#: mail/message-list.c:962
-msgid "Lower"
-msgstr "ÐіжÑй"
-
-#: mail/message-list.c:966
-msgid "Higher"
-msgstr "Ð’Ñ‹Ñокі"
-
-#: mail/message-list.c:967
-msgid "Highest"
-msgstr "ВышÑйшы"
-
-#: mail/message-list.c:1290
-msgid "?"
-msgstr "?"
-
-#: mail/message-list.c:1297
-msgid "Today %l:%M %p"
-msgstr "Ð¡Ñ‘Ð½ÑŒÐ½Ñ %I:%M %p"
-
-#: mail/message-list.c:1306
-msgid "Yesterday %l:%M %p"
-msgstr "Учора %l:%M %p"
-
-#: mail/message-list.c:1318
-msgid "%a %l:%M %p"
-msgstr "%a %l:%M %p"
-
-#: mail/message-list.c:1326
-msgid "%b %d %l:%M %p"
-msgstr "%b %d %l:%M %p"
-
-#: mail/message-list.c:1328
-msgid "%b %d %Y"
-msgstr "%b %d %Y"
-
-#: mail/message-list.c:3329
-msgid "Generating message list"
-msgstr "СтварÑньне ÑьпіÑу паведамленьнÑÑž"
-
-#: mail/message-list.etspec.h:3
-msgid "Due By"
-msgstr "Умоўленае да"
-
-#: mail/message-list.etspec.h:4
-msgid "Flag Status"
-msgstr "СьцÑг Ñтану"
-
-#: mail/message-list.etspec.h:5
-msgid "Flagged"
-msgstr "Пазначана"
-
-#: mail/message-list.etspec.h:6
-msgid "Follow Up Flag"
-msgstr "СьцÑг \"Да выкананьнÑ\""
-
-#: mail/message-list.etspec.h:8
-msgid "Original Location"
-msgstr "Зыходнае разьмÑшчÑньне"
-
-#: mail/message-list.etspec.h:9
-msgid "Received"
-msgstr "Ðтрымана"
-
-#: mail/message-list.etspec.h:11
-msgid "Size"
-msgstr "Памер"
-
-#: mail/message-tag-followup.c:73
-msgid "Call"
-msgstr "Выклік"
-
-#: mail/message-tag-followup.c:74
-msgid "Do Not Forward"
-msgstr "Ðе падаÑылаць"
-
-#: mail/message-tag-followup.c:75
-msgid "Follow-Up"
-msgstr "Да выкананьнÑ"
-
-#: mail/message-tag-followup.c:76
-msgid "For Your Information"
-msgstr "Да вашага ведама"
-
-#: mail/message-tag-followup.c:77 ui/evolution-mail-message.xml.h:42
-msgid "Forward"
-msgstr "ПераÑлаць"
-
-#: mail/message-tag-followup.c:78
-msgid "No Response Necessary"
-msgstr "Можна не адказваць"
-
-#: mail/message-tag-followup.c:80 ui/evolution-mail-message.xml.h:85
-msgid "Reply"
-msgstr "Ðдказаць"
-
-#: mail/message-tag-followup.c:81 ui/evolution-mail-message.xml.h:86
-msgid "Reply to All"
-msgstr "Ðдказаць уÑім"
-
-#: mail/message-tag-followup.c:82
-msgid "Review"
-msgstr "Праверыць"
-
-#: mail/searchtypes.xml.h:1
-msgid "Body contains"
-msgstr "Цела ўтрымлівае"
-
-#: mail/searchtypes.xml.h:2
-msgid "Body does not contain"
-msgstr "Цела Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ"
-
-#: mail/searchtypes.xml.h:3
-msgid "Body or subject contains"
-msgstr "Цела ці Ñ‚Ñма ўтрымліваюць"
-
-#: mail/searchtypes.xml.h:4
-msgid "Message contains"
-msgstr "Паведамленьне ўтрымлівае"
-
-#: mail/searchtypes.xml.h:5
-msgid "Recipients contain"
-msgstr "\"Ðтрымоўцы\" утрымлівае"
-
-#: mail/searchtypes.xml.h:6
-msgid "Sender contains"
-msgstr "ÐдпраўлÑльнік утрымлівае"
-
-#: mail/searchtypes.xml.h:7
-msgid "Subject contains"
-msgstr "ТÑма ўтрымлівае"
-
-#: mail/searchtypes.xml.h:8
-msgid "Subject does not contain"
-msgstr "ТÑма Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ"
-
-#: shell/GNOME_Evolution_Shell.server.in.in.h:1
-msgid "Evolution Shell"
-msgstr "Ðбалонка \"Эвалюцыі\""
-
-#: shell/GNOME_Evolution_Test.server.in.in.h:1
-msgid "Evolution Test"
-msgstr "ТÑÑÑ‚ \"Эвалюцыі\""
-
-#: shell/GNOME_Evolution_Test.server.in.in.h:2
-#, fuzzy
-msgid "Evolution Test component"
-msgstr "КампанÑнт Ñ‚ÑÑÑ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ \"Эвалюцыі\"."
-
-#: shell/apps_evolution_shell.schemas.in.in.h:1
-msgid "480"
-msgstr "480"
-
-#: shell/apps_evolution_shell.schemas.in.in.h:2
-msgid "Default width of the folder bar pane"
-msgstr ""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:3
-#, fuzzy
-msgid "Default window height"
-msgstr "Дапомны прыÑрытÑÑ‚:"
-
-#: shell/apps_evolution_shell.schemas.in.in.h:4
-#, fuzzy
-msgid "Default window width"
-msgstr "Дапомны прыÑрытÑÑ‚:"
-
-#: shell/apps_evolution_shell.schemas.in.in.h:5
-#, fuzzy
-msgid "Evolution configuration version"
-msgstr "ІнтÑрфÑÐ¹Ñ Ð½Ð°Ð»Ð°Ð´ÐºÑ– пошты \"Эвалюцыі\""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:6
-#, fuzzy
-msgid "ID or alias of the component to be shown by default at start-up."
-msgstr "Дапомна пазначаць укладаньне Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑžÐ±ÑƒÐ´Ð°Ð²Ð°Ð½Ñ‹Ð¼."
-
-#: shell/apps_evolution_shell.schemas.in.in.h:7
-msgid ""
-"If set to true, Evolution will start up in offline mode instead of online "
-"mode."
-msgstr ""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:8
-msgid ""
-"If set to true, the warning dialog in development versions of Evolution is "
-"not displayed."
-msgstr ""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:9
-msgid "List of paths for the folders to be synchronized to disk for offline usage"
-msgstr ""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:10
-msgid "Toolbar is visible"
-msgstr ""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:11
-msgid "Whether Evolution should start up in offline mode"
-msgstr ""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:12
-msgid "Whether the toolbar should be visible."
-msgstr ""
-
-#: shell/apps_evolution_shell.schemas.in.in.h:13
-msgid "Whether to skip the development warning dialog"
-msgstr ""
-
-#: shell/e-active-connection-dialog.glade.h:1
-#, fuzzy
-msgid "<b>Active Connections</b>"
-msgstr "ÐÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ Ð´Ð°Ð»ÑƒÑ‡Ñньні"
-
-#: shell/e-active-connection-dialog.glade.h:2
-msgid "Active Connections"
-msgstr "ÐÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ Ð´Ð°Ð»ÑƒÑ‡Ñньні"
-
-#: shell/e-active-connection-dialog.glade.h:3
-msgid "Click OK to close these connections and go offline"
-msgstr ""
-"ÐаціÑьніце \"Так\" каб закрыць гÑÑ‚Ñ‹Ñ Ð´Ð°Ð»ÑƒÑ‡Ñньні й працаваць у адлучаным "
-"Ñ€Ñжыме"
-
-#: shell/e-shell-folder-title-bar.c:592 shell/e-shell-folder-title-bar.c:593
-msgid "(Untitled)"
-msgstr "(БÑз назвы)"
-
-#: shell/e-shell-importer.c:146
-msgid "Choose the type of importer to run:"
-msgstr "Выберыце тып імпарту Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ:"
-
-#: shell/e-shell-importer.c:149
-msgid ""
-"Choose the file that you want to import into Evolution, and select what type "
-"of file it is from the list.\n"
-"\n"
-"You can select \"Automatic\" if you do not know, and Evolution will attempt "
-"to work it out."
-msgstr ""
-"Выберыце файл, Ñкі вы жадаеце імпартаваць у \"Эвалюцыю\", Ñ– выберыце Ñа "
-"ÑьпіÑу тып файла.\n"
-"\n"
-"Ð’Ñ‹ можаце выбраць \"Ðўтаматычна\", калі не ведаеце, Ñ– \"ЭвалюцыÑ\" паÑпрабуе "
-"зрабіць гÑта Ñама."
-
-#: shell/e-shell-importer.c:155
-#, fuzzy
-msgid "Choose the destination for this import"
-msgstr "ÐдмÑніць нараду Ð´Ð»Ñ Ð³Ñтага ÑлемÑнта"
-
-#: shell/e-shell-importer.c:158 shell/e-shell-startup-wizard.c:748
-msgid "Please select the information that you would like to import:"
-msgstr "Калі лаÑка выберыце інфармацыю, Ñкую вы жадаеце імпартаваць:"
-
-#: shell/e-shell-importer.c:161
-msgid ""
-"Evolution checked for settings to import from the following\n"
-"applications: Pine, Netscape, Elm, iCalendar. No settings\n"
-"that could be imported where found. If you would like to\n"
-"try again, please click the \"Back\" button.\n"
-msgstr ""
-
-#: shell/e-shell-importer.c:229 shell/e-shell-importer.c:260
-#, c-format
-msgid ""
-"Importing %s\n"
-"Importing item %d."
-msgstr ""
-"Імпартаваньне %s\n"
-"Імпартаваньне ÑлемÑнта %d."
-
-#: shell/e-shell-importer.c:333
-msgid "Select importer"
-msgstr "Выбраць імпарт"
-
-#: shell/e-shell-importer.c:451 shell/e-shell-importer.c:1055
-#, c-format
-msgid "File %s does not exist"
-msgstr "файл \"%s\" не Ñ–Ñнуе"
-
-#: shell/e-shell-importer.c:459
-msgid "Importing"
-msgstr "Імпартаваньне"
-
-#: shell/e-shell-importer.c:467
-#, c-format
-msgid "Importing %s.\n"
-msgstr "Імпартаваньне·%s.\n"
-
-#: shell/e-shell-importer.c:477 shell/e-shell-importer.c:478
-#, c-format
-msgid "Error loading %s"
-msgstr "Памылка загрузкі %s"
-
-#: shell/e-shell-importer.c:495
-#, c-format
-msgid ""
-"Importing %s\n"
-"Importing item 1."
-msgstr ""
-"Імпартаваньне %s\n"
-"Імпартаваньне 1 ÑлемÑнта."
-
-#: shell/e-shell-importer.c:570
-msgid "Automatic"
-msgstr "Ðўтаматычна"
-
-#: shell/e-shell-importer.c:626
-msgid "F_ilename:"
-msgstr "Ðазва файла:"
-
-#: shell/e-shell-importer.c:631
-msgid "Select a file"
-msgstr "Выберыце файл"
-
-#: shell/e-shell-importer.c:642
-msgid "File _type:"
-msgstr "Тып файла:"
-
-#: shell/e-shell-importer.c:681
-#, fuzzy
-msgid "Import data and settings from _older programs"
-msgstr "Імпартаваньне даньнÑÑž Ñ– уÑталёвак Ñа Ñтарых праграм"
-
-#: shell/e-shell-importer.c:684
-#, fuzzy
-msgid "Import a _single file"
-msgstr "Імпартаваньне аÑобнага файла"
-
-#: shell/e-shell-importer.c:752 shell/e-shell-startup-wizard.c:571
-msgid ""
-"Please wait...\n"
-"Scanning for existing setups"
-msgstr ""
-"Калі лаÑка пачакайце...\n"
-"Сканаваньне Ñ–Ñнуючых уÑталёвак"
-
-#: shell/e-shell-importer.c:756
-msgid "Starting Intelligent Importers"
-msgstr "ЗапуÑк інтÑлектуальнага імпарту"
-
-#: shell/e-shell-importer.c:882 shell/e-shell-startup-wizard.c:698
-#, c-format
-msgid "From %s:"
-msgstr "Ðд %s:"
-
-#: shell/e-shell-importer.c:1073
-#, fuzzy, c-format
-msgid "No importer available for file %s"
-msgstr "ПравайдÑÑ€ Ð´Ð»Ñ Ð¿Ñ€Ð°Ñ‚Ð°ÐºÐ¾Ð»Ð° \"%s\" недаÑтупны"
-
-#: shell/e-shell-importer.c:1085
-#, fuzzy
-msgid "Unable to execute importer"
-msgstr "Збой Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ gpg."
-
-#: shell/e-shell-importer.c:1199
-msgid "_Import"
-msgstr "_Імпарт"
-
-#: shell/e-shell-offline-handler.c:594
-msgid "Closing connections..."
-msgstr "Закрыцьцё далучÑньнÑÑž..."
-
-#: shell/e-shell-settings-dialog.c:326
-msgid "Evolution Settings"
-msgstr "Ðаладкі \"Эвалюцыі\""
-
-#: shell/e-shell-startup-wizard.c:575
-msgid "Starting import"
-msgstr "РаÑпачата імпартаваньне"
-
-#: shell/e-shell-startup-wizard.c:795
-msgid ""
-"If you quit the Evolution Setup Assistant now, all of the information that "
-"you have entered will be forgotten. You will need to run this assistant "
-"again before using Evolution.\n"
-"\n"
-"Do you want to quit using the Assistant now?"
-msgstr ""
-
-#: shell/e-shell-utils.c:116
-msgid "No folder name specified."
-msgstr "Ðазва Ñ‚Ñчкі не пазначана"
-
-#: shell/e-shell-utils.c:123
-msgid "Folder name cannot contain the Return character."
-msgstr "Ðазва Ð½Ñ Ð¼ÑƒÑіць ўтрымліваць Ñымбаль новага радка."
-
-#: shell/e-shell-utils.c:129
-msgid "Folder name cannot contain the character \"/\"."
-msgstr "Ðазва Ñ‚Ñчкі Ð½Ñ Ð¼ÑƒÑіць ўтрымліваць Ñымбаль \"/\"."
-
-#: shell/e-shell-utils.c:135
-msgid "Folder name cannot contain the character \"#\"."
-msgstr "Ðазва Ñ‚Ñчкі Ð½Ñ Ð¼ÑƒÑіць ўтрымліваць Ñымбаль \"#\"."
-
-#: shell/e-shell-utils.c:141
-msgid "'.' and '..' are reserved folder names."
-msgstr "'.' Ñ– '..' зарÑзÑÑ€Ð²Ð°Ð²Ð°Ð½Ñ‹Ñ Ð½Ð°Ð·Ð²Ñ‹ Ñ‚Ñчак."
-
-#: shell/e-shell-window-commands.c:66
-msgid "The GNOME Pilot tools do not appear to be installed on this system."
-msgstr "Сродкі GNOME Ð´Ð»Ñ ÑувÑзі з \"Пілётам\" не ÑžÑталÑÐ²Ð°Ð½Ñ‹Ñ Ð½Ð° гÑтае ÑÑ‹ÑÑ‚Ñме."
-
-#: shell/e-shell-window-commands.c:74
-#, c-format
-msgid "Error executing %s."
-msgstr "Памылка выкананьнÑ: %s"
-
-#: shell/e-shell-window-commands.c:123
-msgid "Bug buddy is not installed."
-msgstr "\"Bug buddy\" не ÑžÑталÑваны."
-
-#: shell/e-shell-window-commands.c:131
-msgid "Bug buddy could not be run."
-msgstr "\"Bug buddy\" не запушчаны."
-
-#: shell/e-shell-window-commands.c:322
-msgid "Groupware Suite"
-msgstr "Groupware Suite"
-
-#: shell/e-shell-window-commands.c:562
-msgid "_Work Online"
-msgstr "_Далучаны Ñ€Ñжым"
-
-#: shell/e-shell-window-commands.c:575 ui/evolution.xml.h:39
-msgid "_Work Offline"
-msgstr "_Ðдлучаны Ñ€Ñжым"
-
-#: shell/e-shell-window-commands.c:588 ui/evolution.xml.h:25
-msgid "Work Offline"
-msgstr "Працаваць у адлучаным Ñ€Ñжыме"
-
-#: shell/e-shell-window.c:337
-#, fuzzy
-msgid "Evolution is currently online. Click on this button to work offline."
-msgstr ""
-"\"ЭвалюцыÑ\" працуе Ñž далучаным Ñ€Ñжыме. Клікніце на гÑтую кнопку каб "
-"працаваць у адлучаным Ñ€Ñжыме."
-
-#: shell/e-shell-window.c:344
-#, fuzzy
-msgid "Evolution is in the process of going offline."
-msgstr "Ð­Ð²Ð°Ð»ÑŽÑ†Ñ‹Ñ Ð¿ÐµÑ€Ð°Ñ…Ð¾Ð´Ð·Ñ–Ñ†ÑŒ да працы Ñž адлучаным Ñ€Ñжымн."
-
-#: shell/e-shell-window.c:350
-#, fuzzy
-msgid "Evolution is currently offline. Click on this button to work online."
-msgstr ""
-"\"ЭвалюцыÑ\" працуе Ñž адлучаным Ñ€Ñжыме. Клікніце на гÑтую кнопку каб "
-"працаваць у далучаным Ñ€Ñжыме."
-
-#: shell/e-shell-window.c:637
-#, fuzzy, c-format
-msgid "Switch to %s"
-msgstr "ДаÑлаць на %s"
-
-#: shell/e-shell.c:565 shell/e-shell.c:566
-#, c-format
-msgid "%ld KB"
-msgstr "%ld KB"
-
-#: shell/e-shell.c:751
-#, fuzzy
-msgid "Uknown system error."
-msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
-
-#: shell/e-shell.c:1116
-msgid "Invalid arguments"
-msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð°Ñ€Ð³ÑƒÐ¼Ñнты"
-
-#: shell/e-shell.c:1118
-msgid "Cannot register on OAF"
-msgstr "ÐеатрымалаÑÑ Ð·Ð°Ñ€ÑгіÑтраваць на OAF"
-
-#: shell/e-shell.c:1120
-msgid "Configuration Database not found"
-msgstr "ÐдÑутнічае ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ Ð±Ð°Ð·Ñ‹ даньнÑÑž"
-
-#: shell/e-shell.c:1122
-msgid "Generic error"
-msgstr "Ð—Ð²Ñ‹Ñ‡Ð°Ð¹Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
-
-#: shell/e-user-creatable-items-handler.c:691
-msgid "New"
-msgstr "Стварыць"
-
-#: shell/evolution-startup-wizard.glade.h:2
-msgid "Evolution Setup Assistant"
-msgstr "Дапаможнік уÑталёўкі \"Эвалюцыі\""
-
-#: shell/evolution-startup-wizard.glade.h:3
-msgid "Importing Files"
-msgstr "Імпартаваньне файлаў"
-
-#: shell/evolution-startup-wizard.glade.h:4
-msgid "Timezone "
-msgstr "ЧаÑÐ°Ð²Ð°Ñ Ð·Ð¾Ð½Ð° "
-
-#: shell/evolution-startup-wizard.glade.h:5
-msgid "Welcome"
-msgstr "Вітаем"
-
-#: shell/evolution-startup-wizard.glade.h:6
-msgid ""
-"Welcome to Evolution. The next few screens will allow\n"
-"Evolution to connect to your email accounts, and to import\n"
-"files from other applications. \n"
-"\n"
-"Please click the \"Forward\" button to continue. "
-msgstr ""
-"Вітаем у \"Эвалюцыі\". Колькі наÑтупных дыÑлёгаў\n"
-"дазволÑць далучыцца да вашых уліковых запіÑаў, Ñ–\n"
-"імпартаваць файлы з іншых даÑтаÑаваньнÑÑž. \n"
-"\n"
-"Калі лаÑка, клікніце кнопку \"Ðаперад\" каб працÑгнуць. "
-
-#: shell/evolution-startup-wizard.glade.h:11
-msgid ""
-"You have successfully entered all of the information\n"
-"needed to set up Evolution. \n"
-"\n"
-"Click the \"Apply\" button to save your settings. "
-msgstr ""
-"Ð’Ñ‹ муÑіце увеÑьці уÑÑŽ інфармацыю, Ñкую патрабуе\n"
-"уÑталÑваньне \"Эвалюцыі\"\n"
-"\n"
-"Клікніце кнопку \"Ужыць\" каб захаваць вашы уÑталёўкі. "
-
-#: shell/evolution-test-component.c:140
-msgid "New Test"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ñ€Ð°Ð²ÐµÑ€ÐºÐ°"
-
-#: shell/evolution-test-component.c:141
-msgid "_Test"
-msgstr "Праверка"
-
-#: shell/evolution-test-component.c:142
-#, fuzzy
-msgid "Create a new test item"
-msgstr "Стварыць новае заданьне"
-
-#: shell/importer/import.glade.h:1
-msgid "Click \"Import\" to begin importing the file into Evolution. "
-msgstr "Клікніце \"Імпарт\" Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ„Ð°Ð¹Ð»Ð°Ñž у \"Эвалюцыю\"."
-
-#: shell/importer/import.glade.h:2
-msgid "Evolution Import Assistant"
-msgstr "Дапаможнік Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ \"Эвалюцыі\""
-
-#: shell/importer/import.glade.h:3
-#, fuzzy
-msgid "Import File"
-msgstr "Імпартаваньне файлаў"
-
-#: shell/importer/import.glade.h:4
-#, fuzzy
-msgid "Import Location"
-msgstr "МейÑца:"
-
-#: shell/importer/import.glade.h:5
-#, fuzzy
-msgid "Importer Type"
-msgstr "Імпарт"
-
-#: shell/importer/import.glade.h:6
-#, fuzzy
-msgid "Select Importers"
-msgstr "Выбраць імпарт"
-
-#: shell/importer/import.glade.h:7
-msgid "Select a File"
-msgstr "Выберыце файл"
-
-#: shell/importer/import.glade.h:8
-msgid ""
-"Welcome to the Evolution Import Assistant.\n"
-"With this assistant you will be guided through the process of\n"
-"importing external files into Evolution."
-msgstr ""
-"Вітаем у дапаможніку па імпартаваньні \"Эвалюцыі\".\n"
-"ГÑÑ‚Ñ‹ дапаможнік правÑдзе Ð²Ð°Ñ Ð¿Ð° уÑім працÑÑе імпартаваньнÑ\n"
-"вонкавых файлаў у \"Эвалюцыю\"."
-
-#: shell/importer/intelligent.c:193
-msgid "Importers"
-msgstr "Імпарт"
-
-#: shell/importer/intelligent.c:195 smime/gui/smime-ui.glade.h:28
-msgid "Import"
-msgstr "Імпарт"
-
-#: shell/importer/intelligent.c:199
-msgid "Don't import"
-msgstr "Ðе імпартаваць"
-
-#: shell/importer/intelligent.c:203
-msgid "Don't ask me again"
-msgstr "Ðе пытацца наÑтупнага разу."
-
-#: shell/importer/intelligent.c:211
-msgid "Evolution can import data from the following files:"
-msgstr "\"ЭвалюцыÑ\" можа імпартаваць даньні з наÑтупных файлаў:"
-
-#. Preview/Alpha/Beta version warning message
-#: shell/main.c:225
-#, no-c-format
-msgid ""
-"Hi. Thanks for taking the time to download this preview release\n"
-"of the Evolution groupware suite.\n"
-"\n"
-"This version of Evolution is not yet complete. It is getting close,\n"
-"but some features are either unfinished or do not work properly.\n"
-"\n"
-"If you want a stable version of Evolution, we urge you to uninstall\n"
-"this version, and install version %s instead.\n"
-"\n"
-"If you find bugs, please report them to us at bugzilla.ximian.com.\n"
-"This product comes with no warranty and is not intended for\n"
-"individuals prone to violent fits of anger.\n"
-"\n"
-"We hope that you enjoy the results of our hard work, and we\n"
-"eagerly await your contributions!\n"
-msgstr ""
-
-#: shell/main.c:249
-msgid ""
-"Thanks\n"
-"The Evolution Team\n"
-msgstr ""
-"ДзÑкуй\n"
-"Каманда раÑпрацоўшчыкаў \"Эвалюцыі\"\n"
-
-#: shell/main.c:256
-msgid "Don't tell me again"
-msgstr "Ðе пытацца Ñž наÑтупны раз."
-
-#: shell/main.c:461
-msgid "Start Evolution activating the specified component"
-msgstr ""
-
-#: shell/main.c:463
-msgid "Start in offline mode"
-msgstr "ЗапуÑк у адлучаным Ñ€Ñжыме"
-
-#: shell/main.c:465
-msgid "Start in online mode"
-msgstr "ЗапуÑк у далучаным Ñ€Ñжыме"
-
-#: shell/main.c:468
-msgid "Forcibly shut down all evolution components"
-msgstr "ПрымуÑова выключыць уÑе кампанÑнты \"Эвалюцыі\""
-
-#: shell/main.c:472
-msgid "Forcibly re-migrate from Evolution 1.4"
-msgstr ""
-
-#: shell/main.c:475
-msgid "Send the debugging output of all components to a file."
-msgstr "ДаÑлаць вывад адладкі уÑÑ–Ñ… кампанÑнтаў у файле."
-
-#: shell/main.c:502
-msgid "Evolution"
-msgstr "\"ЭвалюцыÑ\""
-
-#: shell/main.c:506
-#, c-format
-msgid ""
-"%s: --online and --offline cannot be used together.\n"
-" Use %s --help for more information.\n"
-msgstr ""
-"%s: --online Ñ– --offline не могуць выкарыÑтоўвацца разам.\n"
-" карыÑтайцеÑÑ %s --help Ð´Ð»Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð´Ñ€Ð°Ð±ÑзнаÑьцÑÑž.\n"
-
-#. shell:upgrade-nospace primary
-#: shell/shell-errors.xml.h:2
-msgid "Insufficient disk space for upgrade."
-msgstr ""
-
-#. shell:upgrade-nospace secondary
-#: shell/shell-errors.xml.h:4
-msgid ""
-"Upgrading your data and settings will require upto {0} of disk space, but "
-"you only have {1} available.\n"
-"\n"
-"You will need to make more space available in your home directory before you "
-"can continue."
-msgstr ""
-
-#. shell:upgrade-failed primary
-#: shell/shell-errors.xml.h:8
-msgid ""
-"Upgrade from previous version failed:\n"
-"{0}"
-msgstr ""
-
-#. shell:upgrade-failed secondary
-#: shell/shell-errors.xml.h:11
-msgid ""
-"{1}\n"
-"\n"
-"If you choose to continue, you may not have access to some of your old "
-"data.\n"
-msgstr ""
-
-#: shell/shell-errors.xml.h:15
-msgid "Continue"
-msgstr "ПрацÑгнуць"
-
-#. shell:noshell title
-#. shell:noshell-reason title
-#: shell/shell-errors.xml.h:17 shell/shell-errors.xml.h:25
-#, fuzzy
-msgid "Cannot start Evolution"
-msgstr "ÐÑма доÑтупу да абалонкі \"Эвалюцыі\"."
-
-#. shell:noshell primary
-#. shell:noshell-reason primary
-#: shell/shell-errors.xml.h:19 shell/shell-errors.xml.h:27
-#, fuzzy
-msgid "Evolution can not start."
-msgstr "Дапаможнік уліковага запіÑу \"Эвалюцыі\""
-
-#. shell:noshell secondary
-#: shell/shell-errors.xml.h:21
-msgid ""
-"Your system configuration does not match your Evolution configuration.\n"
-"\n"
-"Click help for details"
-msgstr ""
-
-#. shell:noshell-reason secondary
-#: shell/shell-errors.xml.h:29
-msgid ""
-"Your system configuration does not match your Evolution configuration:\n"
-"\n"
-"{0}\n"
-"\n"
-"Click help for details."
-msgstr ""
-
-#: smime/gui/ca-trust-dialog.c:91
-#, c-format
-msgid ""
-"Certificate '%s' is a CA certificate.\n"
-"\n"
-"Edit trust settings:"
-msgstr ""
-
-#: smime/gui/cert-trust-dialog.c:145
-msgid ""
-"Because you trust the certificate authority that issued this certificate, "
-"then you trust the authenticity of this certificate unless otherwise "
-"indicated here"
-msgstr ""
-
-#: smime/gui/cert-trust-dialog.c:149
-msgid ""
-"Because you do not trust the certificate authority that issued this "
-"certificate, then you do not trust the authenticity of this certificate "
-"unless otherwise indicated here"
-msgstr ""
-
-#: smime/gui/certificate-manager.c:130 smime/gui/certificate-manager.c:353
-#: smime/gui/certificate-manager.c:556
-#, fuzzy
-msgid "Select a cert to import..."
-msgstr "Выбраць імпарт"
-
-#: smime/gui/certificate-manager.c:245 smime/gui/certificate-manager.c:437
-#: smime/gui/certificate-manager.c:638
-#, fuzzy
-msgid "Certificate Name"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: smime/gui/certificate-manager.c:254 smime/gui/certificate-manager.c:455
-msgid "Purposes"
-msgstr "намеры"
-
-#: smime/gui/certificate-manager.c:263 smime/gui/smime-ui.glade.h:36
-#: smime/lib/e-cert.c:569
-msgid "Serial Number"
-msgstr ""
-
-#: smime/gui/certificate-manager.c:271
-msgid "Expires"
-msgstr "ГублÑе моц"
-
-#: smime/gui/certificate-manager.c:446
-msgid "E-Mail Address"
-msgstr "ÐдраÑÑ‹ Ñ.пошты"
-
-#: smime/gui/certificate-viewer.c:334
-#, fuzzy, c-format
-msgid "Certificate Viewer: %s"
-msgstr ""
-"СÑртыфікат ÑаÑтарÑÑž: %s\n"
-"Выдавец: %s"
-
-#: smime/gui/component.c:45
-#, c-format
-msgid "Enter the password for `%s'"
-msgstr "Пазначце пароль Ð´Ð»Ñ %s"
-
-#. we're setting the password initially
-#: smime/gui/component.c:68
-#, fuzzy
-msgid "Enter new password for certificate database"
-msgstr "Пазначце пароль Ð´Ð»Ñ %s"
-
-#: smime/gui/component.c:70
-msgid "Enter new password"
-msgstr "Пазначце новы пароль"
-
-#. FIXME: add serial no, validity date, uses
-#: smime/gui/e-cert-selector.c:121
-#, c-format
-msgid ""
-"Issued to:\n"
-" Subject: %s\n"
-msgstr ""
-
-#: smime/gui/e-cert-selector.c:122
-#, c-format
-msgid ""
-"Issued by:\n"
-" Subject: %s\n"
-msgstr ""
-
-#: smime/gui/e-cert-selector.c:169
-#, fuzzy
-msgid "Select certificate"
-msgstr "ІÑьці да пазначанай даты"
-
-#: smime/gui/smime-ui.glade.h:1
-msgid "<Not Part of Certificate>"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:2
-#, fuzzy
-msgid "<b>Certificate Fields</b>"
-msgstr "СÑртыфікат анулÑваны"
-
-#: smime/gui/smime-ui.glade.h:3
-msgid "<b>Certificate Hierarchy</b>"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:4
-#, fuzzy
-msgid "<b>Field Value</b>"
-msgstr "<b> Ðдпраўка пошты</b>"
-
-#: smime/gui/smime-ui.glade.h:5
-msgid "<b>Fingerprints</b>"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:6
-#, fuzzy
-msgid "<b>Issued By</b>"
-msgstr "<b>Умоўлена:</b> "
-
-#: smime/gui/smime-ui.glade.h:7
-#, fuzzy
-msgid "<b>Issued To</b>"
-msgstr "<b>Умоўлена:</b> "
-
-#: smime/gui/smime-ui.glade.h:8
-msgid "<b>This certificate has been verified for the following uses:</b>"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:9
-msgid "<b>Validity</b>"
-msgstr "<b>Сапраўдны</b>"
-
-#: smime/gui/smime-ui.glade.h:10
-#, fuzzy
-msgid "Authorities"
-msgstr "УлаÑьціваÑьці"
-
-#: smime/gui/smime-ui.glade.h:11
-msgid "Backup"
-msgstr "РÑзерваваньне даньнÑÑž"
-
-#: smime/gui/smime-ui.glade.h:12
-msgid "Backup All"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:13
-msgid ""
-"Before trusting this CA for any purpose, you should examine its certificate "
-"and its policy and procedures (if available)."
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:14 smime/lib/e-cert.c:1076
-msgid "Certificate"
-msgstr "СÑртыфікат"
-
-#: smime/gui/smime-ui.glade.h:15
-#, fuzzy
-msgid "Certificate Authority Trust"
-msgstr "СÑртыфікат ненадзейны"
-
-#: smime/gui/smime-ui.glade.h:16
-#, fuzzy
-msgid "Certificate details"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: smime/gui/smime-ui.glade.h:17
-#, fuzzy
-msgid "Common Name (CN)"
-msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð°"
-
-#: smime/gui/smime-ui.glade.h:18
-#, fuzzy
-msgid "Contact Certificates"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: smime/gui/smime-ui.glade.h:20
-msgid "Do not trust the authenticity of this certificate"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:21
-msgid "Dummy window only"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:22
-msgid "Edit"
-msgstr "РÑдагаваньне"
-
-#: smime/gui/smime-ui.glade.h:23
-#, fuzzy
-msgid "Email Certificate Trust Settings"
-msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
-
-#: smime/gui/smime-ui.glade.h:24
-msgid "Email Recipient Certificate"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:25
-#, fuzzy
-msgid "Email Signer Certificate"
-msgstr "ÐеатрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ ÑÑртыфікаты."
-
-#: smime/gui/smime-ui.glade.h:26
-#, fuzzy
-msgid "Expires On"
-msgstr "Выраз"
-
-#: smime/gui/smime-ui.glade.h:29
-msgid "Issued On"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:30
-msgid "MD5 Fingerprint"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:31
-#, fuzzy
-msgid "Organization (O)"
-msgstr "УÑтанова"
-
-#: smime/gui/smime-ui.glade.h:32
-#, fuzzy
-msgid "Organizational Unit (OU)"
-msgstr "ПаÑада"
-
-#: smime/gui/smime-ui.glade.h:33
-msgid "SHA1 Fingerprint"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:34 smime/lib/e-cert.c:818
-msgid "SSL Client Certificate"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:35 smime/lib/e-cert.c:822
-msgid "SSL Server Certificate"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:37
-msgid "Trust the authenticity of this certificate"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:38
-msgid "Trust this CA to identify email users."
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:39
-msgid "Trust this CA to identify software developers."
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:40
-msgid "Trust this CA to identify web sites."
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:41
-msgid "View"
-msgstr "ВыглÑд"
-
-#: smime/gui/smime-ui.glade.h:42
-msgid "You have certificates from these organizations that identify you:"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:43
-msgid "You have certificates on file that identify these certificate authorities:"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:44
-msgid "You have certificates on file that identify these people:"
-msgstr ""
-
-#: smime/gui/smime-ui.glade.h:45
-#, fuzzy
-msgid "Your Certificates"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: smime/gui/smime-ui.glade.h:46
-msgid "_Edit CA Trust"
-msgstr ""
-
-#. XXX we shouldn't be popping up dialogs in this code.
-#: smime/lib/e-cert-db.c:612
-#, fuzzy
-msgid "Certificate already exists"
-msgstr "Ід карткі ужо Ñ–Ñнуе"
-
-#: smime/lib/e-cert.c:238 smime/lib/e-cert.c:248
-#, fuzzy
-msgid "%d/%m/%Y"
-msgstr "%d/%m/%Y"
-
-#. x509 certificate usage types
-#: smime/lib/e-cert.c:424
-#, fuzzy
-msgid "Sign"
-msgstr "ЗапуÑкаецца:"
-
-#: smime/lib/e-cert.c:425
-msgid "Encrypt"
-msgstr "Кадаваньне"
-
-#: smime/lib/e-cert.c:530
-msgid "Version"
-msgstr "Ð’ÑÑ€ÑÑ–Ñ"
-
-#: smime/lib/e-cert.c:545
-msgid "Version 1"
-msgstr "Ð’ÑÑ€ÑÑ–Ñ 1"
-
-#: smime/lib/e-cert.c:548
-msgid "Version 2"
-msgstr "Ð’ÑÑ€ÑÑ–Ñ 2"
-
-#: smime/lib/e-cert.c:551
-msgid "Version 3"
-msgstr "Ð’ÑÑ€ÑÑ–Ñ 3"
-
-#: smime/lib/e-cert.c:633
-msgid "PKCS #1 MD2 With RSA Encryption"
-msgstr ""
-
-#: smime/lib/e-cert.c:636
-msgid "PKCS #1 MD5 With RSA Encryption"
-msgstr ""
-
-#: smime/lib/e-cert.c:639
-msgid "PKCS #1 SHA-1 With RSA Encryption"
-msgstr ""
-
-#: smime/lib/e-cert.c:642
-msgid "C"
-msgstr "C"
-
-#: smime/lib/e-cert.c:645
-msgid "CN"
-msgstr "CN"
-
-#: smime/lib/e-cert.c:648
-msgid "OU"
-msgstr ""
-
-#: smime/lib/e-cert.c:651
-msgid "O"
-msgstr "O"
-
-#: smime/lib/e-cert.c:654
-msgid "L"
-msgstr ""
-
-#: smime/lib/e-cert.c:657
-msgid "DN"
-msgstr "DN"
-
-#: smime/lib/e-cert.c:660
-msgid "DC"
-msgstr ""
-
-#: smime/lib/e-cert.c:663
-msgid "ST"
-msgstr "ST"
-
-#: smime/lib/e-cert.c:666
-msgid "PKCS #1 RSA Encryption"
-msgstr ""
-
-#: smime/lib/e-cert.c:669
-#, fuzzy
-msgid "Certificate Key Usage"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: smime/lib/e-cert.c:672
-#, fuzzy
-msgid "Netscape Certificate Type"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: smime/lib/e-cert.c:675
-#, fuzzy
-msgid "Certificate Authority Key Identifier"
-msgstr "СÑртыфікат ненадзейны"
-
-#: smime/lib/e-cert.c:678
-msgid "UID"
-msgstr "Iд"
-
-#: smime/lib/e-cert.c:687
-#, c-format
-msgid "Object Identifier (%s)"
-msgstr ""
-
-#: smime/lib/e-cert.c:738
-msgid "Algorithm Identifier"
-msgstr ""
-
-#: smime/lib/e-cert.c:746
-msgid "Algorithm Parameters"
-msgstr ""
-
-#: smime/lib/e-cert.c:768
-msgid "Subject Public Key Info"
-msgstr ""
-
-#: smime/lib/e-cert.c:773
-msgid "Subject Public Key Algorithm"
-msgstr ""
-
-#: smime/lib/e-cert.c:788
-#, fuzzy
-msgid "Subject's Public Key"
-msgstr "ТÑма %s"
-
-#: smime/lib/e-cert.c:809 smime/lib/e-cert.c:858
-#, fuzzy
-msgid "Error: Unable to process extension"
-msgstr "ÐеатрымалаÑÑ Ð°Ð¿Ñ€Ð°Ñ†Ð°Ð²Ð°Ñ†ÑŒ Ñ‚Ñчку Ñпула"
-
-#: smime/lib/e-cert.c:830 smime/lib/e-cert.c:842
-msgid "Object Signer"
-msgstr ""
-
-#: smime/lib/e-cert.c:834
-#, fuzzy
-msgid "SSL Certificate Authority"
-msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
-
-#: smime/lib/e-cert.c:838
-#, fuzzy
-msgid "Email Certificate Authority"
-msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
-
-#: smime/lib/e-cert.c:866
-#, fuzzy
-msgid "Signing"
-msgstr "ЗапуÑкаецца:"
-
-#: smime/lib/e-cert.c:870
-#, fuzzy
-msgid "Non-repudiation"
-msgstr "ЗьвеÑткі адÑутнічаюць"
-
-#: smime/lib/e-cert.c:874
-msgid "Key Encipherment"
-msgstr ""
-
-#: smime/lib/e-cert.c:878
-#, fuzzy
-msgid "Data Encipherment"
-msgstr "укладаньне"
-
-#: smime/lib/e-cert.c:882
-msgid "Key Agreement"
-msgstr ""
-
-#: smime/lib/e-cert.c:886
-#, fuzzy
-msgid "Certificate Signer"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: smime/lib/e-cert.c:890
-msgid "CRL Signer"
-msgstr ""
-
-#: smime/lib/e-cert.c:938
-#, fuzzy
-msgid "Critical"
-msgstr "ХарватыÑ"
-
-#: smime/lib/e-cert.c:940 smime/lib/e-cert.c:943
-msgid "Not Critical"
-msgstr ""
-
-#: smime/lib/e-cert.c:964
-#, fuzzy
-msgid "Extensions"
-msgstr "Выраз"
-
-#: smime/lib/e-cert.c:1035
-#, fuzzy, c-format
-msgid "%s = %s"
-msgstr "%s на %s"
-
-#: smime/lib/e-cert.c:1091 smime/lib/e-cert.c:1211
-#, fuzzy
-msgid "Certificate Signature Algorithm"
-msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката памылковы"
-
-#: smime/lib/e-cert.c:1100
-#, fuzzy
-msgid "Issuer"
-msgstr "УÑтавіць"
-
-#: smime/lib/e-cert.c:1154
-msgid "Issuer Unique ID"
-msgstr ""
-
-#: smime/lib/e-cert.c:1173
-#, fuzzy
-msgid "Subject Unique ID"
-msgstr "ТÑма %s"
-
-#: smime/lib/e-cert.c:1216
-#, fuzzy
-msgid "Certificate Signature Value"
-msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката памылковы"
-
-#: smime/lib/e-pkcs12.c:266
-msgid "PKCS12 File Password"
-msgstr ""
-
-#: smime/lib/e-pkcs12.c:266
-#, fuzzy
-msgid "Enter password for PKCS12 file:"
-msgstr "Пазначце пароль Ð´Ð»Ñ %s"
-
-#: smime/lib/e-pkcs12.c:365
-#, fuzzy
-msgid "Imported Certificate"
-msgstr "_Ід ÑÑртыфіката:"
-
-#: tools/evolution-launch-composer.c:324
-msgid "An attachment to add."
-msgstr "Укладаньне Ð´Ð»Ñ Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ."
-
-#: tools/evolution-launch-composer.c:325
-msgid "Content type of the attachment."
-msgstr "Тып зьмеÑту укладаньнÑ."
-
-#: tools/evolution-launch-composer.c:326
-msgid "The filename to display in the mail."
-msgstr "Ðазва файла Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñž ліÑьце."
-
-#: tools/evolution-launch-composer.c:327
-msgid "Description of the attachment."
-msgstr "ÐпіÑаньне укладаньнÑ."
-
-#: tools/evolution-launch-composer.c:328
-msgid "Mark attachment to be shown inline by default."
-msgstr "Дапомна пазначаць укладаньне Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑžÐ±ÑƒÐ´Ð°Ð²Ð°Ð½Ñ‹Ð¼."
-
-#: tools/evolution-launch-composer.c:329
-msgid "Default subject for the message."
-msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ñ‚Ñма паведамленьнÑ."
-
-#. This most likely means that KILL_PROCESS_CMD wasn't
-#. * found, so just bail completely.
-#.
-#: tools/killev.c:61
-#, c-format
-msgid "Could not execute '%s': %s\n"
-msgstr "Ðемагчыма выканаць '%s': %s\n"
-
-#: tools/killev.c:76
-#, c-format
-msgid "Shutting down %s (%s)\n"
-msgstr "ВыключÑньне %s (%s)\n"
-
-#: ui/evolution-addressbook.xml.h:3
-msgid "Copy Contact(s) to Another Folder..."
-msgstr "КапіÑваць кантакты у іншую Ñ‚Ñчку..."
-
-#: ui/evolution-addressbook.xml.h:4 ui/evolution-calendar.xml.h:2
-msgid "Copy the selection"
-msgstr "КапіÑваць вылучÑньне"
-
-#: ui/evolution-addressbook.xml.h:5
-msgid "Copy to Folder..."
-msgstr "КапіÑваць у Ñ‚Ñчку..."
-
-#: ui/evolution-addressbook.xml.h:7 ui/evolution-calendar.xml.h:3
-msgid "Cut the selection"
-msgstr "Выразаць вылучÑньне"
-
-#: ui/evolution-addressbook.xml.h:9
-msgid "Delete selected contacts"
-msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
-
-#: ui/evolution-addressbook.xml.h:11
-msgid "Move Contact(s) to Another Folder..."
-msgstr "ПерамÑÑьціць кантакты у іншую Ñ‚Ñчку"
-
-#: ui/evolution-addressbook.xml.h:12
-msgid "Move to Folder..."
-msgstr "ПерамÑÑьціць у Ñ‚Ñчку..."
-
-#: ui/evolution-addressbook.xml.h:14 ui/evolution-calendar.xml.h:16
-msgid "Paste the clipboard"
-msgstr "УÑтавіць з буфÑра абмену"
-
-#: ui/evolution-addressbook.xml.h:15
-msgid "Previews the contacts to be printed"
-msgstr "Прагледзіць выглÑд кантактаў у друку"
-
-#: ui/evolution-addressbook.xml.h:17 ui/evolution-calendar.xml.h:20
-#: ui/evolution-comp-editor.xml.h:9 ui/evolution-mail-message.xml.h:81
-#: ui/evolution-tasks.xml.h:15
-msgid "Print Pre_view"
-msgstr "_ПерадпраглÑд друку"
-
-#: ui/evolution-addressbook.xml.h:18
-msgid "Print selected contacts"
-msgstr "Друкаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
-
-#: ui/evolution-addressbook.xml.h:20
-msgid "Save selected contacts as a VCard."
-msgstr "Захаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹ Ñк візытоўку (VCard)"
-
-#: ui/evolution-addressbook.xml.h:21
-msgid "Select All"
-msgstr "Вылучыць уÑÑ‘"
-
-#: ui/evolution-addressbook.xml.h:22
-msgid "Select all contacts"
-msgstr "Вылучыць уÑе кантакты"
-
-#: ui/evolution-addressbook.xml.h:23
-#, fuzzy
-msgid "Send a message to the selected contacts."
-msgstr "ДаÑлаць паведамленьні аÑобам вылучаных кантактаў."
-
-#: ui/evolution-addressbook.xml.h:24
-msgid "Send message to contact"
-msgstr "ДаÑлаць паведамленьне кантактнае аÑобе"
-
-#: ui/evolution-addressbook.xml.h:25
-msgid "Send selected contacts to another person."
-msgstr "ДаÑлаць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹ іншай аÑобе."
-
-#: ui/evolution-addressbook.xml.h:26
-#, fuzzy
-msgid "Show contact preview window"
-msgstr "Паказаць акно папÑÑ€ÑднÑга праглÑду"
-
-#: ui/evolution-addressbook.xml.h:27
-msgid "Stop"
-msgstr "Спыніць"
-
-#: ui/evolution-addressbook.xml.h:28
-msgid "Stop Loading"
-msgstr "Спыніць загрузку"
-
-#: ui/evolution-addressbook.xml.h:29
-msgid "View the current contact"
-msgstr "Прагледзіць бÑгучы кантакт"
-
-#: ui/evolution-addressbook.xml.h:30 ui/evolution-calendar.xml.h:38
-#: ui/evolution-comp-editor.xml.h:16 ui/evolution-contact-editor.xml.h:13
-#: ui/evolution-contact-list-editor.xml.h:11
-#: ui/evolution-event-editor.xml.h:11 ui/evolution-mail-global.xml.h:15
-#: ui/evolution-mail-list.xml.h:23 ui/evolution-mail-message.xml.h:107
-#: ui/evolution-mail-messagedisplay.xml.h:4 ui/evolution-task-editor.xml.h:9
-#: ui/evolution-tasks.xml.h:19 ui/evolution.xml.h:27
-msgid "_Actions"
-msgstr "_ДзеÑньні"
-
-#: ui/evolution-addressbook.xml.h:35 ui/evolution-contact-editor.xml.h:16
-msgid "_Forward Contact..."
-msgstr "_ПадаÑлаць кантакт..."
-
-#: ui/evolution-addressbook.xml.h:36
-msgid "_Move to Folder..."
-msgstr "ПерамÑÑьціць у Ñ‚Ñчку..."
-
-#: ui/evolution-addressbook.xml.h:39 ui/evolution-mail-global.xml.h:17
-msgid "_Preview Pane"
-msgstr "_Ðкно перад-праглÑду"
-
-#: ui/evolution-addressbook.xml.h:41
-#, fuzzy
-msgid "_Save as VCard..."
-msgstr "Захаваць Ñк візытоўку"
-
-#: ui/evolution-addressbook.xml.h:42
-msgid "_Select All"
-msgstr "Вылучыць уÑÑ‘"
-
-#: ui/evolution-addressbook.xml.h:43
-msgid "_Send Message to Contact..."
-msgstr "ДаÑлаць паведамленьне кантактнае аÑобе..."
-
-#: ui/evolution-calendar.xml.h:4
-msgid "Day"
-msgstr "Дзень"
-
-#: ui/evolution-calendar.xml.h:6
-msgid "Delete All Occurrences"
-msgstr "Выдаліць уÑе падзеі"
-
-#: ui/evolution-calendar.xml.h:7
-msgid "Delete the appointment"
-msgstr "Выдаліць ÑуÑÑ‚Ñ€Ñчу"
-
-#: ui/evolution-calendar.xml.h:8
-msgid "Delete this Occurrence"
-msgstr "Выдаліць гÑтую падзею"
-
-#: ui/evolution-calendar.xml.h:9
-msgid "Delete this occurrence"
-msgstr "Выдаліць гÑтую падзею"
-
-#: ui/evolution-calendar.xml.h:10
-msgid "Go To"
-msgstr "ПерайÑьці"
-
-#: ui/evolution-calendar.xml.h:11
-msgid "Go back"
-msgstr "Ð’Ñрнуцца назад"
-
-#: ui/evolution-calendar.xml.h:12
-msgid "Go forward"
-msgstr "ІÑьці далей"
-
-#: ui/evolution-calendar.xml.h:13
-msgid "List"
-msgstr "СьпіÑ"
-
-#: ui/evolution-calendar.xml.h:14
-msgid "Month"
-msgstr "МеÑÑц"
-
-#: ui/evolution-calendar.xml.h:15 ui/evolution-mail-message.xml.h:65
-msgid "Next"
-msgstr "ÐаÑтупнае"
-
-#: ui/evolution-calendar.xml.h:17
-msgid "Previews the calendar to be printed"
-msgstr "Прагледзіць выглÑд календару Ñž друку"
-
-#: ui/evolution-calendar.xml.h:18 ui/evolution-mail-message.xml.h:79
-msgid "Previous"
-msgstr "ПапÑÑ€ÑднÑе"
-
-#: ui/evolution-calendar.xml.h:21
-msgid "Print this calendar"
-msgstr "Ðадрукаваць гÑÑ‚Ñ‹ калÑндар"
-
-#: ui/evolution-calendar.xml.h:22
-msgid "Publish Free/Busy information for this calendar"
-msgstr "Ðпублікаваць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\" Ð´Ð»Ñ Ð³Ñтага календару"
-
-#: ui/evolution-calendar.xml.h:23 ui/evolution-tasks.xml.h:17
-#, fuzzy
-msgid "Purg_e"
-msgstr "Старонка"
-
-#: ui/evolution-calendar.xml.h:24
-#, fuzzy
-msgid "Purge old appointments and meetings"
-msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð°Ñ Ñ‚Ñчка утрымлівае ÑуÑÑ‚Ñ€Ñчы Ñ– падзеі"
-
-#: ui/evolution-calendar.xml.h:25
-#, fuzzy
-msgid "Select _Date"
-msgstr "Выбар імёнаў"
-
-#: ui/evolution-calendar.xml.h:27
-#, fuzzy
-msgid "Select a specific date"
-msgstr "ІÑьці да пазначанай даты"
-
-#: ui/evolution-calendar.xml.h:28
-#, fuzzy
-msgid "Select today"
-msgstr "Выбраць Ñ‚Ñчку"
-
-#: ui/evolution-calendar.xml.h:29
-#, fuzzy
-msgid "Show as list"
-msgstr "Паказаць падрабÑзнаÑьці"
-
-#: ui/evolution-calendar.xml.h:30
-msgid "Show one day"
-msgstr "Паказаць адзень"
-
-#: ui/evolution-calendar.xml.h:31
-msgid "Show one month"
-msgstr "Паказаць адзін меÑÑц"
-
-#: ui/evolution-calendar.xml.h:32
-msgid "Show one week"
-msgstr "Паказаць адзін тыдзень"
-
-#: ui/evolution-calendar.xml.h:33
-msgid "Show the working week"
-msgstr "Паказаць працоўны тыдзень"
-
-#: ui/evolution-calendar.xml.h:34 widgets/misc/e-cell-date-edit.c:249
-#: widgets/misc/e-dateedit.c:435
-msgid "Today"
-msgstr "СёньнÑ"
-
-#: ui/evolution-calendar.xml.h:35
-#, fuzzy
-msgid "View the current appointment"
-msgstr "Прагледзіць бÑгучы кантакт"
-
-#: ui/evolution-calendar.xml.h:36
-msgid "Week"
-msgstr "Тыдзень"
-
-#: ui/evolution-calendar.xml.h:37
-msgid "Work Week"
-msgstr "Працоўны тыдзень"
-
-#: ui/evolution-calendar.xml.h:42
-#, fuzzy
-msgid "_Open Appointment"
-msgstr "_СуÑÑ‚Ñ€Ñча"
-
-#: ui/evolution-comp-editor.xml.h:1 ui/evolution-contact-editor.xml.h:1
-#: ui/evolution-contact-list-editor.xml.h:1
-#: ui/evolution-signature-editor.xml.h:1
-msgid "C_lose"
-msgstr "_Закрыць"
-
-#: ui/evolution-comp-editor.xml.h:2 ui/evolution-contact-editor.xml.h:2
-#: ui/evolution-contact-list-editor.xml.h:2
-#: ui/evolution-mail-messagedisplay.xml.h:1
-#: ui/evolution-message-composer.xml.h:3 ui/evolution-signature-editor.xml.h:2
-#: ui/evolution.xml.h:4
-msgid "Close"
-msgstr "Закрыць"
-
-#: ui/evolution-comp-editor.xml.h:3
-msgid "Close this item"
-msgstr "Закрыць гÑÑ‚Ñ‹ ÑлемÑнт"
-
-#: ui/evolution-comp-editor.xml.h:5 ui/evolution-contact-editor.xml.h:4
-msgid "Delete this item"
-msgstr "Выдаліць гÑÑ‚Ñ‹ ÑлемÑнт"
-
-#: ui/evolution-comp-editor.xml.h:6 ui/evolution-event-editor.xml.h:5
-#: ui/evolution-mail-messagedisplay.xml.h:3 ui/evolution.xml.h:13
-msgid "Main toolbar"
-msgstr "ÐœÐ°Ñ Ð¿Ð°Ð½Ñль інÑтрумÑнтаў"
-
-#: ui/evolution-comp-editor.xml.h:7
-msgid "Preview the printed item"
-msgstr "Прагледзіць выглÑд ÑлемÑнта Ñž друку"
-
-#: ui/evolution-comp-editor.xml.h:10 ui/evolution-contact-editor.xml.h:7
-msgid "Print this item"
-msgstr "Ðадрукаваць гÑÑ‚Ñ‹ ÑлемÑнт"
-
-#: ui/evolution-comp-editor.xml.h:11 ui/evolution-contact-editor.xml.h:8
-#: ui/evolution-contact-list-editor.xml.h:5
-#: ui/evolution-message-composer.xml.h:18
-msgid "Save _As..."
-msgstr "Захаваць _Ñк..."
-
-#: ui/evolution-comp-editor.xml.h:12 ui/evolution-contact-editor.xml.h:9
-#: ui/evolution-contact-list-editor.xml.h:6
-#: ui/evolution-signature-editor.xml.h:7
-msgid "Save and Close"
-msgstr "Захаваць і закрыць"
-
-#: ui/evolution-comp-editor.xml.h:13 ui/evolution-contact-editor.xml.h:10
-#: ui/evolution-contact-list-editor.xml.h:7
-#: ui/evolution-signature-editor.xml.h:8
-#, fuzzy
-msgid "Save and _Close"
-msgstr "Захаваць і закрыць"
-
-#: ui/evolution-comp-editor.xml.h:14
-msgid "Save the item and close the dialog box"
-msgstr "Захаваць гÑÑ‚Ñ‹ ÑлемÑнт Ñ– закрыць дыÑлёг"
-
-#: ui/evolution-comp-editor.xml.h:15
-msgid "Save this item to disk"
-msgstr "Захаваць гÑÑ‚Ñ‹ ÑлемÑнт на дыÑк"
-
-#: ui/evolution-comp-editor.xml.h:18 ui/evolution-contact-editor.xml.h:15
-#: ui/evolution-contact-list-editor.xml.h:13
-#: ui/evolution-mail-messagedisplay.xml.h:7
-#: ui/evolution-message-composer.xml.h:44
-#: ui/evolution-signature-editor.xml.h:13 ui/evolution-subscribe.xml.h:11
-#: ui/evolution.xml.h:29
-msgid "_File"
-msgstr "_Файл"
-
-#: ui/evolution-composer-entries.xml.h:1
-msgid "Copy selected text to the clipboard"
-msgstr "КапіÑваць вылучаны Ñ‚ÑкÑÑ‚ у буфÑÑ€ абмену"
-
-#: ui/evolution-composer-entries.xml.h:2 ui/evolution-mail-message.xml.h:21
-msgid "Cu_t"
-msgstr "_Выразаць"
-
-#: ui/evolution-composer-entries.xml.h:3
-msgid "Cut selected text to the clipboard"
-msgstr "УÑтавіць вылучаны Ñ‚ÑкÑÑ‚ з буфÑра абмену"
-
-#: ui/evolution-composer-entries.xml.h:4
-msgid "Paste text from the clipboard"
-msgstr "УÑтавіць Ñ‚ÑкÑÑ‚ з буфÑра абмену"
-
-#: ui/evolution-composer-entries.xml.h:5 ui/evolution-mail-list.xml.h:13
-#: ui/evolution-subscribe.xml.h:6
-msgid "Select _All"
-msgstr "Вылучыць _уÑÑ‘"
-
-#: ui/evolution-composer-entries.xml.h:6
-msgid "Select all text"
-msgstr "Вылучыць увеÑÑŒ Ñ‚ÑкÑÑ‚"
-
-#: ui/evolution-contact-editor.xml.h:6
-msgid "Print En_velope..."
-msgstr "Друкаваць _капÑрту..."
-
-#: ui/evolution-contact-editor.xml.h:11
-msgid "Save the contact and close the dialog box"
-msgstr "Захаваць кантакт Ñ– закрыць дыÑлёг"
-
-#: ui/evolution-contact-editor.xml.h:12
-msgid "Send _Message to Contact..."
-msgstr "ДаÑлаць паведамленьне кантактнае аÑобе..."
-
-#: ui/evolution-contact-editor.xml.h:18
-#: ui/evolution-contact-list-editor.xml.h:14
-#: ui/evolution-message-composer.xml.h:50
-#: ui/evolution-signature-editor.xml.h:15
-msgid "_Save"
-msgstr "_Захаваць"
-
-#: ui/evolution-contact-list-editor.xml.h:4
-msgid "Delete this list"
-msgstr "Выдаліць гÑÑ‚Ñ‹ ÑьпіÑ"
-
-#: ui/evolution-contact-list-editor.xml.h:8
-msgid "Save the list and close the dialog box"
-msgstr "Захаваць ÑÑŒÐ¿Ñ–Ñ Ñ– закрыць дыÑлёг"
-
-#: ui/evolution-contact-list-editor.xml.h:9
-msgid "Se_nd list to other..."
-msgstr "Да_Ñлаць ÑÑŒÐ¿Ñ–Ñ Ñ–Ð½ÑˆÑ‹Ð¼..."
-
-#: ui/evolution-contact-list-editor.xml.h:10
-msgid "Send _message to list..."
-msgstr "ДаÑлаць паве_дамленьне Ñž ÑьпіÑ..."
-
-#: ui/evolution-contact-list-editor.xml.h:12
-#, fuzzy
-msgid "_Delete..."
-msgstr "Выдаліць..."
-
-#: ui/evolution-event-editor.xml.h:1
-msgid "Cancel Mee_ting"
-msgstr "ÐдмÑніць на_раду"
-
-#: ui/evolution-event-editor.xml.h:2
-msgid "Cancel the meeting for this item"
-msgstr "ÐдмÑніць нараду Ð´Ð»Ñ Ð³Ñтага ÑлемÑнта"
-
-#: ui/evolution-event-editor.xml.h:3 ui/evolution-task-editor.xml.h:5
-msgid "Forward as i_Calendar"
-msgstr "_ПадаÑлаць Ñк iCalendar"
-
-#: ui/evolution-event-editor.xml.h:4 ui/evolution-task-editor.xml.h:6
-msgid "Forward this item via email"
-msgstr "ПадаÑлаць гÑÑ‚Ñ‹ ÑлемÑнт праз пошту"
-
-#: ui/evolution-event-editor.xml.h:7
-msgid "Obtain the latest meeting information"
-msgstr "Ðтрымаць апошнюю інфармацыю аб нарадзе"
-
-#: ui/evolution-event-editor.xml.h:8
-msgid "Re_fresh Meeting"
-msgstr "Ðбнавіць _нараду"
-
-#: ui/evolution-event-editor.xml.h:9
-msgid "Schedule _Meeting"
-msgstr "_ЗаплÑнаваць нараду"
-
-#: ui/evolution-event-editor.xml.h:10
-msgid "Schedule a meeting for this item"
-msgstr "ЗаплÑнаваць нараду Ð´Ð»Ñ Ð³Ñтага ÑлемÑнта"
-
-#: ui/evolution-executive-summary.xml.h:1
-msgid "Customize My Evolution"
-msgstr "Ðаладзіць \"Маю Эвалюцыю\""
-
-#: ui/evolution-mail-global.xml.h:2
-msgid "Cancel the current mail operation"
-msgstr "ÐдмÑніць бÑгучую паштовую апÑрацыю"
-
-#: ui/evolution-mail-global.xml.h:3
-msgid "Compose _New Message"
-msgstr "Стварыць _новае паведамленьне"
-
-#: ui/evolution-mail-global.xml.h:4
-msgid "Create or edit rules for filtering new mail"
-msgstr "Стварыць ці Ñ€Ñдагаваць правілы Ð´Ð»Ñ Ñ†ÑдлÑÐ²Ð°Ð½ÑŒÐ½Ñ Ð½Ð¾Ð²Ñ‹Ñ… ліÑтоў"
-
-#: ui/evolution-mail-global.xml.h:5
-msgid "Create or edit virtual folder definitions"
-msgstr "Стварыць ці Ñ€Ñдагаваць вызначÑньні віртуальнае Ñ‚Ñчкі"
-
-#: ui/evolution-mail-global.xml.h:6
-msgid "Empty _Trash"
-msgstr "СпуÑтошыць _Ñьметніцу"
-
-#: ui/evolution-mail-global.xml.h:7
-msgid "Open a window for composing a mail message"
-msgstr "Ðдкрыць акно Ð´Ð»Ñ ÑтварÑÐ½ÑŒÐ½Ñ Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð³Ð° паведамленьнÑ"
-
-#: ui/evolution-mail-global.xml.h:8
-msgid "Permanently remove all deleted messages from all folders"
-msgstr "Зьнішчыць уÑе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– з уÑÑ–Ñ… Ñ‚Ñчак"
-
-#: ui/evolution-mail-global.xml.h:9
-#, fuzzy
-msgid "Post Ne_w Message"
-msgstr "ДаÑлаць новае паведамленьне"
-
-#: ui/evolution-mail-global.xml.h:10
-msgid "Post a message to a Public folder"
-msgstr "ДаÑлаць паведамленьне Ñž публічную Ñ‚Ñчку"
-
-#: ui/evolution-mail-global.xml.h:11
-msgid "S_ubscribe to Folders..."
-msgstr "ПадпіÑваньне на Ñ‚Ñчкі..."
-
-#: ui/evolution-mail-global.xml.h:12
-msgid "Show message preview window"
-msgstr "Паказаць акно папÑÑ€ÑднÑга праглÑду"
-
-#: ui/evolution-mail-global.xml.h:13
-msgid "Subscribe or unsubscribe to folders on remote servers"
-msgstr ""
-
-#: ui/evolution-mail-global.xml.h:14
-msgid "Virtual Folder _Editor..."
-msgstr "_РÑдактар Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчак..."
-
-#: ui/evolution-mail-global.xml.h:16
-msgid "_Filters..."
-msgstr "_ЦÑдалі..."
-
-#: ui/evolution-mail-list.xml.h:1
-msgid "Change the properties of this folder"
-msgstr "ЗьмÑніць улаÑьціваÑьці гÑтае Ñ‚Ñчкі"
-
-#: ui/evolution-mail-list.xml.h:2 ui/evolution-mail-message.xml.h:10
-msgid "Copy selected message(s) to the clipboard"
-msgstr "КапіÑваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– у буфÑÑ€ абмену"
-
-#: ui/evolution-mail-list.xml.h:3 ui/evolution-mail-message.xml.h:22
-msgid "Cut selected message(s) to the clipboard"
-msgstr "Выразаць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– у буфÑÑ€ абмену"
-
-#: ui/evolution-mail-list.xml.h:4
-msgid "E_xpunge"
-msgstr "_ВыкрÑÑьліць"
-
-#: ui/evolution-mail-list.xml.h:5
-msgid "Hide S_elected Messages"
-msgstr "Схаваць _Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: ui/evolution-mail-list.xml.h:6
-msgid "Hide _Deleted Messages"
-msgstr "Схаваць вы_Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: ui/evolution-mail-list.xml.h:7
-msgid "Hide _Read Messages"
-msgstr "Схаваць _Ñ‡Ñ‹Ñ‚Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: ui/evolution-mail-list.xml.h:8
-msgid "Hide deleted messages rather than displaying them with a line through them"
-msgstr ""
-
-#: ui/evolution-mail-list.xml.h:9
-#, fuzzy
-msgid "Mark All as _Read"
-msgstr "Пазначыць уÑÑ‘ Ñк _чытанае"
-
-#: ui/evolution-mail-list.xml.h:10
-msgid "Mark all visible messages as read"
-msgstr "Пазначыць уÑе Ð±Ð°Ñ‡Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк чытанае"
-
-#: ui/evolution-mail-list.xml.h:11 ui/evolution-mail-message.xml.h:74
-msgid "Paste message(s) from the clipboard"
-msgstr "УÑтавіць паведамленьне(Ñ–) з буфÑра абмену"
-
-#: ui/evolution-mail-list.xml.h:12
-msgid "Permanently remove all deleted messages from this folder"
-msgstr "Зьнішчыць уÑе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– з гÑтае Ñ‚Ñчкі"
-
-#: ui/evolution-mail-list.xml.h:14
-msgid "Select _Thread"
-msgstr "Вылучыць абмеркаваньне Ñ‚Ñмы"
-
-#: ui/evolution-mail-list.xml.h:15
-msgid "Select all and only the messages that are not currently selected"
-msgstr ""
-
-#: ui/evolution-mail-list.xml.h:16
-msgid "Select all messages in the same thread as the selected message"
-msgstr "Вылучыць уÑе паведамленьні з абмеркаваньнем гÑтае Ñ‚Ñмы"
-
-#: ui/evolution-mail-list.xml.h:17
-msgid "Select all visible messages"
-msgstr "Вылучыць уÑе Ð±Ð°Ñ‡Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: ui/evolution-mail-list.xml.h:18
-msgid "Sh_ow Hidden Messages"
-msgstr "Паказаць ÑÑ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: ui/evolution-mail-list.xml.h:19
-msgid "Show messages that have been temporarily hidden"
-msgstr "Паказаць паведамленьні ÑÐºÑ–Ñ Ð±Ñ‹Ð»Ñ– чаÑова ÑхаваныÑ"
-
-#: ui/evolution-mail-list.xml.h:20
-msgid "Temporarily hide all messages that have already been read"
-msgstr "ЧаÑова Ñхаваць уÑе паведамленьні ÑÐºÑ–Ñ ÑžÐ¶Ð¾ былі прачытаны"
-
-#: ui/evolution-mail-list.xml.h:21
-msgid "Temporarily hide the selected messages"
-msgstr "ЧаÑова Ñхаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: ui/evolution-mail-list.xml.h:22
-msgid "Threaded Message list"
-msgstr "Паведамленьні Ñк абмеркаваньне Ñ‚Ñмы"
-
-#: ui/evolution-mail-list.xml.h:25
-msgid "_Folder"
-msgstr "_ТÑчка"
-
-#: ui/evolution-mail-list.xml.h:26 ui/evolution-subscribe.xml.h:12
-msgid "_Invert Selection"
-msgstr "_ІнвÑртаваць вылучÑньне"
-
-#: ui/evolution-mail-list.xml.h:28
-msgid "_Threaded Message List"
-msgstr "Паведамленьні Ñк абмеркаваньне Ñ‚Ñмы"
-
-#: ui/evolution-mail-message.xml.h:1
-#, fuzzy
-msgid "A_dd Sender to Address Book"
-msgstr "_Дадаць адпраўлÑльніка Ñž кнігу адраÑаў"
-
-#: ui/evolution-mail-message.xml.h:2
-msgid "A_pply Filters"
-msgstr "_Ужыць цÑдалі"
-
-#: ui/evolution-mail-message.xml.h:3
-#, fuzzy
-msgid "Add Sender to Address Book"
-msgstr "Дадаць адпраўлÑльніка Ñž кнігу адраÑаў"
-
-#: ui/evolution-mail-message.xml.h:4
-msgid "Apply filter rules to the selected messages"
-msgstr "Ужыць правіла цÑдлÑÐ²Ð°Ð½ÑŒÐ½Ñ Ð´Ð° вылучаных паведамленьнÑÑž"
-
-#: ui/evolution-mail-message.xml.h:5
-#, fuzzy
-msgid "Caret _Mode"
-msgstr "МадÑль Ñ‚ÑкÑта"
-
-#: ui/evolution-mail-message.xml.h:6
-msgid "Compose a reply to all of the recipients of the selected message"
-msgstr "Стварыць адказ уÑім атрымоўцам вылучанага паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:7
-msgid "Compose a reply to the mailing list of the selected message"
-msgstr "Стварыць адказ у ÑÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі вылучанага паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:8
-msgid "Compose a reply to the sender of the selected message"
-msgstr "Стварыць адказ адпраўлÑльніку вылучанага паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:11
-msgid "Copy selected messages to another folder"
-msgstr "КапіÑваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñž іншую Ñ‚Ñчку"
-
-#: ui/evolution-mail-message.xml.h:12
-msgid "Create _Virtual Folder From Message"
-msgstr "Стварыць _віртуальную Ñ‚Ñчку з паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:13
-msgid "Create a rule to filter messages from this sender"
-msgstr "Стварыць правіла Ð´Ð»Ñ Ñ†ÑдлÑÐ²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž ад гÑтага адпраўлÑльніка"
-
-#: ui/evolution-mail-message.xml.h:14
-msgid "Create a rule to filter messages to these recipients"
-msgstr "Стварыць правіла Ð´Ð»Ñ Ñ†ÑдлÑÐ²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž да гÑÑ‚Ñ‹Ñ… адпраўлÑльнікаў"
-
-#: ui/evolution-mail-message.xml.h:15
-msgid "Create a rule to filter messages to this mailing list"
-msgstr "Стварыць правіла Ð´Ð»Ñ Ñ†ÑдлÑÐ²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž да гÑтага ÑьпіÑу раÑÑылкі"
-
-#: ui/evolution-mail-message.xml.h:16
-msgid "Create a rule to filter messages with this subject"
-msgstr "Стварыць правіла Ð´Ð»Ñ Ñ†ÑдлÑÐ²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž з гÑтай Ñ‚Ñмай"
-
-#: ui/evolution-mail-message.xml.h:17
-msgid "Create a virtual folder for these recipients"
-msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³ÑÑ‚Ñ‹Ñ… атрымоўцаў"
-
-#: ui/evolution-mail-message.xml.h:18
-msgid "Create a virtual folder for this mailing list"
-msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³Ñтага ÑьпіÑу раÑÑылкі"
-
-#: ui/evolution-mail-message.xml.h:19
-msgid "Create a virtual folder for this sender"
-msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³Ñтага адпраўлÑльніка"
-
-#: ui/evolution-mail-message.xml.h:20
-msgid "Create a virtual folder for this subject"
-msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³Ñтае Ñ‚Ñмы"
-
-#: ui/evolution-mail-message.xml.h:23
-msgid "Decrease the text size"
-msgstr "Паменшыць памер Ñ‚ÑкÑту"
-
-#: ui/evolution-mail-message.xml.h:25
-msgid "Display the next important message"
-msgstr "ÐдлюÑтраваць наÑтупнае важнае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:26
-msgid "Display the next message"
-msgstr "ÐдлюÑтраваць наÑтупнае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:27
-msgid "Display the next unread message"
-msgstr "ÐдлюÑтраваць наÑтупнае нечытанае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:28
-msgid "Display the next unread thread"
-msgstr "ÐдлюÑтраваць наÑтупнае нечытанае абмеркаваньне Ñ‚Ñмы"
-
-#: ui/evolution-mail-message.xml.h:29
-msgid "Display the previous important message"
-msgstr "ÐдлюÑтраваць папÑÑ€ÑднÑе важнае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:30
-msgid "Display the previous message"
-msgstr "ÐдлюÑтраваць папÑÑ€ÑднÑе паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:31
-msgid "Display the previous unread message"
-msgstr "ÐдлюÑтраваць папÑÑ€ÑднÑе нечытанае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:32
-#, fuzzy
-msgid "F_orward As..."
-msgstr "ПерадаÑлаць"
-
-#: ui/evolution-mail-message.xml.h:33
-msgid "Filter _Junk"
-msgstr "ЦÑдлÑваць лухту"
-
-#: ui/evolution-mail-message.xml.h:34
-msgid "Filter on Mailing _List..."
-msgstr "ЦÑдаль па ÑьпіÑе раÑÑылкі..."
-
-#: ui/evolution-mail-message.xml.h:35
-msgid "Filter on Se_nder..."
-msgstr "ЦÑдаль па адпраўлÑльніку..."
-
-#: ui/evolution-mail-message.xml.h:36
-msgid "Filter on _Recipients..."
-msgstr "ЦÑдаль па атрымоўцах..."
-
-#: ui/evolution-mail-message.xml.h:37
-msgid "Filter on _Subject..."
-msgstr "ЦÑдаль па Ñ‚Ñме..."
-
-#: ui/evolution-mail-message.xml.h:38
-#, fuzzy
-msgid "Filter the selected messages for junk status"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк нÑважныÑ"
-
-#: ui/evolution-mail-message.xml.h:39
-msgid "Flag selected message(s) for follow-up"
-msgstr ""
-
-#: ui/evolution-mail-message.xml.h:40
-msgid "Follow _Up..."
-msgstr "\"Да выкананьнÑ\"..."
-
-#: ui/evolution-mail-message.xml.h:41
-msgid "Force images in HTML mail to be loaded"
-msgstr "ПрымуÑова загружаць відарыÑÑ‹ Ñž HTML ліÑтах"
-
-#: ui/evolution-mail-message.xml.h:43
-msgid "Forward the selected message in the body of a new message"
-msgstr "ПадаÑлаць вылучанае паведамленьне Ñž целе новага паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:44
-msgid "Forward the selected message quoted like a reply"
-msgstr "ПераÑлаць вылучанае паведамленьне цытаваным Ñк адказ"
-
-#: ui/evolution-mail-message.xml.h:45
-msgid "Forward the selected message to someone"
-msgstr "ПераÑлаць вылучанае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:46
-msgid "Forward the selected message to someone as an attachment"
-msgstr "ПераÑлаць вылучанае паведамленьне Ñк укладаньне"
-
-#: ui/evolution-mail-message.xml.h:47
-msgid "Increase the text size"
-msgstr "ПавÑлічыць памер Ñ‚ÑкÑту"
-
-#: ui/evolution-mail-message.xml.h:49
-msgid "Load _Images"
-msgstr "Загрузіць відарыÑÑ‹"
-
-#: ui/evolution-mail-message.xml.h:51
-msgid "Mark as I_mportant"
-msgstr "Пазначыць Ñк важнае"
-
-#: ui/evolution-mail-message.xml.h:52
-msgid "Mark as U_nread"
-msgstr "Пазначыць Ñк нечытанае"
-
-#: ui/evolution-mail-message.xml.h:53
-msgid "Mark as Unimp_ortant"
-msgstr "Пазначыць Ñк нÑважнае"
-
-#: ui/evolution-mail-message.xml.h:56
-msgid "Mark the selected message(s) as having been read"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк \"да чытаньнÑ\""
-
-#: ui/evolution-mail-message.xml.h:57
-msgid "Mark the selected message(s) as important"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк важныÑ"
-
-#: ui/evolution-mail-message.xml.h:58
-#, fuzzy
-msgid "Mark the selected message(s) as junk"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк нÑважныÑ"
-
-#: ui/evolution-mail-message.xml.h:59
-#, fuzzy
-msgid "Mark the selected message(s) as not being junk"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк \"не Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ\""
-
-#: ui/evolution-mail-message.xml.h:60
-msgid "Mark the selected message(s) as not having been read"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк \"не Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ\""
-
-#: ui/evolution-mail-message.xml.h:61
-msgid "Mark the selected message(s) as unimportant"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк нÑважныÑ"
-
-#: ui/evolution-mail-message.xml.h:62
-msgid "Mark the selected messages for deletion"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ"
-
-#: ui/evolution-mail-message.xml.h:63
-msgid "Move"
-msgstr "ПерамÑÑьціць"
-
-#: ui/evolution-mail-message.xml.h:64
-msgid "Move selected message(s) to another folder"
-msgstr "ПерамÑÑьціць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– у іншую Ñ‚Ñчку"
-
-#: ui/evolution-mail-message.xml.h:66
-msgid "Next _Important Message"
-msgstr "ÐаÑтупнае важнае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:67
-msgid "Next _Thread"
-msgstr "ÐаÑтупнае абмеркаваньне Ñ‚Ñмы"
-
-#: ui/evolution-mail-message.xml.h:68
-msgid "Next _Unread Message"
-msgstr "ÐаÑтупнае нечытанае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:69
-msgid "Not Junk"
-msgstr "Ðе лухта"
-
-#: ui/evolution-mail-message.xml.h:70
-msgid "Open the selected message in a new window"
-msgstr "Ðдкрыць вылучанае паведамленьне Ñž новым акне"
-
-#: ui/evolution-mail-message.xml.h:71
-#, fuzzy
-msgid "Open the selected message in the composer for editing"
-msgstr "Ðдкрыць вылучанае паведамленьне Ñž Ñ€Ñдактары каб перадаÑлаць Ñго"
-
-#: ui/evolution-mail-message.xml.h:72
-msgid "Original Si_ze"
-msgstr "Ðрыгінальны памер"
-
-#: ui/evolution-mail-message.xml.h:73
-msgid "P_revious Unread Message"
-msgstr "ПапÑÑ€ÑднÑе нечытанае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:75
-#, fuzzy
-msgid "Post a Repl_y"
-msgstr "ДаÑлаць адказ"
-
-#: ui/evolution-mail-message.xml.h:76
-msgid "Post a reply to a message in a Public folder"
-msgstr "ДаÑлаць адказ на паведамленьне Ñž публічную Ñ‚Ñчку"
-
-#: ui/evolution-mail-message.xml.h:77
-msgid "Pr_evious Important Message"
-msgstr "ПапÑÑ€ÑднÑе важнае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:78
-msgid "Preview the message to be printed"
-msgstr "Прагледзіць выглÑд Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž друку"
-
-#: ui/evolution-mail-message.xml.h:82
-msgid "Print this message"
-msgstr "Ðадрукаваць гÑтае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:83
-msgid "Re_direct"
-msgstr "Пера_накіраваць"
-
-#: ui/evolution-mail-message.xml.h:84
-msgid "Redirect (bounce) the selected message to someone"
-msgstr ""
-
-#: ui/evolution-mail-message.xml.h:89
-msgid "Reset the text to its original size"
-msgstr "Скінуць Ñ‚ÑкÑÑ‚ да Ñгонага арыгінальнага памеру"
-
-#: ui/evolution-mail-message.xml.h:90
-#, fuzzy
-msgid "S_earch in Message..."
-msgstr "Шукаць паведамленьне..."
-
-#: ui/evolution-mail-message.xml.h:91
-msgid "S_maller"
-msgstr "Меншы"
-
-#: ui/evolution-mail-message.xml.h:92
-msgid "Save the message as a text file"
-msgstr "Захаваць паведамленьне Ñк файл Ñ‚ÑкÑту"
-
-#: ui/evolution-mail-message.xml.h:93
-msgid "Search for text in the body of the displayed message"
-msgstr "Шукаць Ñ‚ÑкÑÑ‚ у целе адлюÑтраванага паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:94
-msgid "Set up the page settings for your current printer"
-msgstr "УÑталÑваць парамÑтры аркуша Ð´Ð»Ñ Ð²Ð°ÑˆÐ°Ðµ бÑгучае друкаркі"
-
-#: ui/evolution-mail-message.xml.h:95
-msgid "Show Email _Source"
-msgstr "Паказаць крыніцу паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:96
-msgid "Show Full _Headers"
-msgstr "Паказаць уÑе загалоўкі"
-
-#: ui/evolution-mail-message.xml.h:97
-#, fuzzy
-msgid "Show a blinking cursor in the body of displayed messages"
-msgstr "Шукаць Ñ‚ÑкÑÑ‚ у целе адлюÑтраванага паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:98
-msgid "Show message in the normal style"
-msgstr "Паказаць паведамленьне Ñž звычайным Ñтылі"
-
-#: ui/evolution-mail-message.xml.h:99
-msgid "Show message with all email headers"
-msgstr "Паказаць паведамленьне з уÑімі загалоўкамі"
-
-#: ui/evolution-mail-message.xml.h:100
-msgid "Show the raw email source of the message"
-msgstr "Паказаць зьмеÑÑ‚ крыніцы паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:101
-msgid "Text Si_ze"
-msgstr "Памер Ñ‚ÑкÑту"
-
-#: ui/evolution-mail-message.xml.h:102
-msgid "Un-delete the selected messages"
-msgstr "Ð’Ñрнуць з выдаленага Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
-
-#: ui/evolution-mail-message.xml.h:103
-msgid "VFolder on Mailing _List..."
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па ÑьпіÑе раÑÑылкі..."
-
-#: ui/evolution-mail-message.xml.h:104
-msgid "VFolder on Se_nder..."
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па адпраўлÑльніках..."
-
-#: ui/evolution-mail-message.xml.h:105
-msgid "VFolder on _Recipients..."
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па атрымоўцах..."
-
-#: ui/evolution-mail-message.xml.h:106
-msgid "VFolder on _Subject..."
-msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па Ñ‚Ñме..."
-
-#: ui/evolution-mail-message.xml.h:108
-msgid "_Attached"
-msgstr "Як укладзенае"
-
-#: ui/evolution-mail-message.xml.h:111
-msgid "_Create Filter From Message"
-msgstr "Стварыць цÑдаль з паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:115
-msgid "_Go To"
-msgstr "ПерайÑьці да"
-
-#: ui/evolution-mail-message.xml.h:116
-msgid "_Inline"
-msgstr "Як убудаванае"
-
-#: ui/evolution-mail-message.xml.h:117
-msgid "_Larger"
-msgstr "Большы"
-
-#: ui/evolution-mail-message.xml.h:118
-msgid "_Message Display"
-msgstr "ВыглÑд паведамленьнÑ"
-
-#: ui/evolution-mail-message.xml.h:120
-msgid "_Next Message"
-msgstr "ÐаÑтупнае паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:121
-msgid "_Normal Display"
-msgstr "Звычайны выглÑд"
-
-#: ui/evolution-mail-message.xml.h:122
-msgid "_Open Message"
-msgstr "Ðдкрыць паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:124
-msgid "_Previous Message"
-msgstr "ПапÑÑ€ÑднÑе паведамленьне"
-
-#: ui/evolution-mail-message.xml.h:126
-msgid "_Quoted"
-msgstr "_Цытаванае"
-
-#: ui/evolution-mail-message.xml.h:129 ui/evolution.xml.h:36
-msgid "_Tools"
-msgstr "ІнÑтрумÑнты"
-
-#: ui/evolution-mail-message.xml.h:130
-msgid "_Undelete"
-msgstr "Ð’Ñрнуць з выдаленага"
-
-#: ui/evolution-mail-messagedisplay.xml.h:2 ui/evolution.xml.h:5
-msgid "Close this window"
-msgstr "Закрыць гÑтае акно"
-
-#: ui/evolution-mail-messagedisplay.xml.h:5
-#: ui/evolution-message-composer.xml.h:41 ui/evolution-subscribe.xml.h:9
-#: ui/evolution.xml.h:28
-msgid "_Close"
-msgstr "Закрыць"
-
-#: ui/evolution-message-composer.xml.h:1
-msgid "Attach"
-msgstr "УклаÑьці"
-
-#: ui/evolution-message-composer.xml.h:2
-msgid "Attach a file"
-msgstr "УклаÑьці файл"
-
-#: ui/evolution-message-composer.xml.h:4 ui/evolution-signature-editor.xml.h:3
-msgid "Close the current file"
-msgstr "Закрыць бÑгучы файл"
-
-#: ui/evolution-message-composer.xml.h:5
-msgid "Delete all but signature"
-msgstr ""
-
-#: ui/evolution-message-composer.xml.h:6
-msgid "Encrypt this message with PGP"
-msgstr "Закадаваць гÑтае паведамленьне з дапамогай PGP"
-
-#: ui/evolution-message-composer.xml.h:7
-msgid "Encrypt this message with your S/MIME Encryption Cetificate"
-msgstr "Закадаваць гÑтае паведамленьне вашым ÑÑртыфікатам ÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ S/MIME"
-
-#: ui/evolution-message-composer.xml.h:8 ui/evolution-signature-editor.xml.h:4
-msgid "For_mat"
-msgstr "Фармат"
-
-#: ui/evolution-message-composer.xml.h:9
-msgid "HT_ML"
-msgstr "HTML"
-
-#: ui/evolution-message-composer.xml.h:11
-msgid "Open a file"
-msgstr "Ðдкрыць файл"
-
-#: ui/evolution-message-composer.xml.h:12
-msgid "PGP Encrypt"
-msgstr "Кадаваньне PGP"
-
-#: ui/evolution-message-composer.xml.h:13
-msgid "PGP Sign"
-msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ PGP"
-
-#: ui/evolution-message-composer.xml.h:14
-msgid "S/MIME Encrypt"
-msgstr "Кадаваньне S/MIME"
-
-#: ui/evolution-message-composer.xml.h:15
-msgid "S/MIME Sign"
-msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ S/MIME"
-
-#: ui/evolution-message-composer.xml.h:16
-#: ui/evolution-signature-editor.xml.h:6
-msgid "Save"
-msgstr "Захаваць"
-
-#: ui/evolution-message-composer.xml.h:17
-msgid "Save As"
-msgstr "Захаваць Ñк"
-
-#: ui/evolution-message-composer.xml.h:19
-msgid "Save _Draft"
-msgstr "Захаваць чарнавік"
-
-#: ui/evolution-message-composer.xml.h:20
-msgid "Save in folder..."
-msgstr "Захаваць у Ñ‚Ñчку..."
-
-#: ui/evolution-message-composer.xml.h:21
-#: ui/evolution-signature-editor.xml.h:9
-msgid "Save the current file"
-msgstr "Захаваць бÑгучы файл"
-
-#: ui/evolution-message-composer.xml.h:22
-msgid "Save the current file with a different name"
-msgstr "Захаваць бÑгучы файл пад іншай назвай"
-
-#: ui/evolution-message-composer.xml.h:23
-msgid "Save the message in a specified folder"
-msgstr "Захаваць паведамленьне Ñž пазначанай Ñ‚Ñчцы"
-
-#: ui/evolution-message-composer.xml.h:25
-#: ui/evolution-signature-editor.xml.h:11
-msgid "Send the mail in HTML format"
-msgstr "ДаÑлаць ліÑÑ‚ у фармаце HTML"
-
-#: ui/evolution-message-composer.xml.h:26
-msgid "Send this message"
-msgstr "ДаÑлаць гÑтае паведамленьне"
-
-#: ui/evolution-message-composer.xml.h:27
-msgid "Show / hide attachments"
-msgstr "Паказаць / Ñхаваць укладаньні"
-
-#: ui/evolution-message-composer.xml.h:28
-msgid "Show _attachments"
-msgstr "ÐдлюÑтраваць укладаньні"
-
-#: ui/evolution-message-composer.xml.h:29
-msgid "Show attachments"
-msgstr "ÐдлюÑтраваць укладаньні"
-
-#: ui/evolution-message-composer.xml.h:30
-msgid "Sign this message with your PGP key"
-msgstr "ПадпіÑаць гÑтае паведамленьне вашым ключом PGP"
-
-#: ui/evolution-message-composer.xml.h:31
-msgid "Sign this message with your S/MIME Signature Certificate"
-msgstr "ПадпіÑаць гÑтае паведамленьне вашым ÑÑртыфікатам подпіÑу S/MIME"
-
-#: ui/evolution-message-composer.xml.h:32
-msgid "Toggles whether the BCC field is displayed"
-msgstr ""
-
-#: ui/evolution-message-composer.xml.h:33
-msgid "Toggles whether the CC field is displayed"
-msgstr ""
-
-#: ui/evolution-message-composer.xml.h:34
-msgid "Toggles whether the From chooser is displayed"
-msgstr ""
-
-#: ui/evolution-message-composer.xml.h:35
-msgid "Toggles whether the Post-To field is displayed"
-msgstr ""
-
-#: ui/evolution-message-composer.xml.h:36
-msgid "Toggles whether the Reply-To field is displayed"
-msgstr ""
-
-#: ui/evolution-message-composer.xml.h:37
-msgid "Toggles whether the To field is displayed"
-msgstr ""
-
-#: ui/evolution-message-composer.xml.h:38
-msgid "_Attachment..."
-msgstr "Укладаньне..."
-
-#: ui/evolution-message-composer.xml.h:39
-msgid "_Bcc Field"
-msgstr "Поле Ñхаванае копіÑ"
-
-#: ui/evolution-message-composer.xml.h:40
-msgid "_Cc Field"
-msgstr "Поле копіі"
-
-#: ui/evolution-message-composer.xml.h:42
-msgid "_Delete all"
-msgstr "Выдаліць уÑÑ‘"
-
-#: ui/evolution-message-composer.xml.h:45
-msgid "_From Field"
-msgstr "Поле \"Ðд каго\""
-
-#: ui/evolution-message-composer.xml.h:46
-#: ui/evolution-signature-editor.xml.h:14
-msgid "_Insert"
-msgstr "УÑтавіць"
-
-#: ui/evolution-message-composer.xml.h:47
-msgid "_Open..."
-msgstr "Ðдкрыць..."
-
-#: ui/evolution-message-composer.xml.h:48
-#, fuzzy
-msgid "_Post-To Field"
-msgstr "Поле \"Ðдказаць на\""
-
-#: ui/evolution-message-composer.xml.h:49
-msgid "_Reply-To Field"
-msgstr "Поле \"Ðдказаць на\""
-
-#: ui/evolution-message-composer.xml.h:51
-msgid "_Security"
-msgstr "БÑÑьпека"
-
-#: ui/evolution-message-composer.xml.h:52
-#, fuzzy
-msgid "_To Field"
-msgstr "Поле \"Ðд каго\""
-
-#: ui/evolution-signature-editor.xml.h:5
-msgid "H_TML"
-msgstr "H_TML"
-
-#: ui/evolution-signature-editor.xml.h:10
-msgid "Save the current file and close the window"
-msgstr "Захаваць бÑгучы файл Ñ– закрыць акно"
-
-#: ui/evolution-subscribe.xml.h:1
-msgid "Add folder to your list of subscribed folders"
-msgstr "Дадаць Ñ‚Ñчку да вашага ÑьпіÑу падпіÑаных Ñ‚Ñчак"
-
-#: ui/evolution-subscribe.xml.h:2
-msgid "F_older"
-msgstr "ТÑчка"
-
-#: ui/evolution-subscribe.xml.h:3
-msgid "Refresh List"
-msgstr "Ðбнавіць ÑьпіÑ"
-
-#: ui/evolution-subscribe.xml.h:4
-msgid "Refresh List of Folders"
-msgstr "Ðбнавіць ÑÑŒÐ¿Ñ–Ñ Ñ‚Ñчак"
-
-#: ui/evolution-subscribe.xml.h:5
-msgid "Remove folder from your list of subscribed folders"
-msgstr "Выдаліць Ñ‚Ñчку з вашага ÑьпіÑу падпіÑаных Ñ‚Ñчак"
-
-#: ui/evolution-subscribe.xml.h:7
-msgid "Subscribe"
-msgstr "ПадпіÑацца"
-
-#: ui/evolution-subscribe.xml.h:8
-msgid "Unsubscribe"
-msgstr "ÐдпіÑацца"
-
-#: ui/evolution-task-editor.xml.h:1
-msgid "Assign Task"
-msgstr "Прызначыць заданьне"
-
-#: ui/evolution-task-editor.xml.h:2
-msgid "Assign this task to others"
-msgstr "Прызначыць гÑтае заданьне іншым"
-
-#: ui/evolution-task-editor.xml.h:3
-msgid "Cancel Task"
-msgstr "ÐдмÑніць заданьне"
-
-#: ui/evolution-task-editor.xml.h:4
-msgid "Cancel this task"
-msgstr "ÐдмÑніць гÑтае заданьне"
-
-#: ui/evolution-task-editor.xml.h:7
-msgid "Obtain the latest task information"
-msgstr "Ðтрымаць інфармацыю па апошнім заданьні"
-
-#: ui/evolution-task-editor.xml.h:8
-msgid "Re_fresh Task"
-msgstr "Ðбнавіць заданьне"
-
-#: ui/evolution-tasks.xml.h:3
-msgid "Copy selected task"
-msgstr "КапіÑваць вылучанае заданьне"
-
-#: ui/evolution-tasks.xml.h:5
-msgid "Cut selected task"
-msgstr "Выразаць вылучанае заданьне"
-
-#: ui/evolution-tasks.xml.h:7
-msgid "Delete completed tasks"
-msgstr "Выдаліць ÑÐºÐ¾Ð½Ñ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
-
-#: ui/evolution-tasks.xml.h:8
-msgid "Delete selected tasks"
-msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
-
-#: ui/evolution-tasks.xml.h:9
-msgid "Mar_k as Complete"
-msgstr "Пазначыць Ñк Ñкончанае"
-
-#: ui/evolution-tasks.xml.h:10
-#, fuzzy
-msgid "Mark selected tasks as complete"
-msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ– Ñк выкананыÑ"
-
-#: ui/evolution-tasks.xml.h:12
-msgid "Paste task from the clipboard"
-msgstr "УÑтавіць заданьне з буфÑра абмену"
-
-#: ui/evolution-tasks.xml.h:13
-msgid "Previews the list of tasks to be printed"
-msgstr "Прагледзіць ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž Ñкі муÑіць быць надрукаваны"
-
-#: ui/evolution-tasks.xml.h:16
-msgid "Print the list of tasks"
-msgstr "Ðадрукаваць ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
-
-#: ui/evolution-tasks.xml.h:18
-#, fuzzy
-msgid "View the selected task"
-msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
-
-#: ui/evolution-tasks.xml.h:23
-#, fuzzy
-msgid "_Open Task"
-msgstr "_Заданьне"
-
-#: ui/evolution.xml.h:1
-#, fuzzy
-msgid "About Evolution..."
-msgstr "Пра \"Эвалюцыю\" Ximian"
-
-#: ui/evolution.xml.h:2
-msgid "Change Evolution's settings"
-msgstr "ЗьмÑніць наладкі \"Эвалюцыі\""
-
-#: ui/evolution.xml.h:3
-#, fuzzy
-msgid "Change the visibility of the toolbar"
-msgstr "ЗьмÑніць улаÑьціваÑьці гÑтае Ñ‚Ñчкі"
-
-#: ui/evolution.xml.h:6
-msgid "Create a new window displaying this folder"
-msgstr "Стварыць новае акно Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð³Ñтае Ñ‚Ñчкі"
-
-#: ui/evolution.xml.h:7
-msgid "E_xit"
-msgstr "Выхад"
-
-#: ui/evolution.xml.h:8
-#, fuzzy
-msgid "Evolution _FAQ"
-msgstr "ЧаÑÑ‚Ñ‹Ñ Ð¿Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ–"
-
-#: ui/evolution.xml.h:9
-msgid "Exit the program"
-msgstr "ВыйÑьці з праграмы"
-
-#: ui/evolution.xml.h:10
-msgid "Forget _Passwords"
-msgstr "Забыцца на _пароль"
-
-#: ui/evolution.xml.h:11
-msgid "Forget remembered passwords so you will be prompted for them again"
-msgstr ""
-
-#: ui/evolution.xml.h:12
-msgid "Import data from other programs"
-msgstr "Імпартаваць даньні з іншай праграмы"
-
-#: ui/evolution.xml.h:14
-#, fuzzy
-msgid "New _Window"
-msgstr "_Шукаць зараз"
-
-#: ui/evolution.xml.h:15
-msgid "Pi_lot Settings..."
-msgstr "Ðаладкі \"Пілёта\"..."
-
-#: ui/evolution.xml.h:16
-msgid "Send / Receive"
-msgstr "ДаÑлаць / Ðтрымаць"
-
-#: ui/evolution.xml.h:17
-msgid "Send queued items and retrieve new items"
-msgstr "ДаÑлаць паведамленьні з чаргі й атрымаць новыÑ"
-
-#: ui/evolution.xml.h:18
-msgid "Set up Pilot configuration"
-msgstr "Ðаладзіць \"Пілёт\""
-
-#: ui/evolution.xml.h:19
-#, fuzzy
-msgid "Show information about Evolution"
-msgstr "Паказаць інфармацыю пра \"Эвалюцыю\" Ximian"
-
-#: ui/evolution.xml.h:20
-msgid "Submit Bug Report"
-msgstr "ДаÑлаць паведамленьне аб памылках"
-
-#: ui/evolution.xml.h:21
-msgid "Submit _Bug Report"
-msgstr "ДаÑлаць паведамленьне аб памылках"
-
-#: ui/evolution.xml.h:22
-msgid "Submit a bug report using Bug Buddy"
-msgstr "ДаÑлаць паведамленьне аб памылках карыÑтаючыÑÑ \"Bug Buddy\""
-
-#: ui/evolution.xml.h:23
-msgid "T_oolbar"
-msgstr "ПанÑль інÑтрумÑнтаў"
-
-#: ui/evolution.xml.h:24
-msgid "Toggle whether we are working offline."
-msgstr "Пераключыць у выпадку працы Ñž адлучаным Ñ€Ñжыме."
-
-#: ui/evolution.xml.h:26
-msgid "_About Evolution..."
-msgstr "Пра \"Эвалюцыю\""
-
-#: ui/evolution.xml.h:30
-msgid "_Help"
-msgstr "_Дапамога"
-
-#: ui/evolution.xml.h:31
-msgid "_Import..."
-msgstr "_Імпартаваць..."
-
-#: ui/evolution.xml.h:32
-msgid "_New"
-msgstr "_Стварыць"
-
-#: ui/evolution.xml.h:33
-msgid "_Quick Reference"
-msgstr "Ð¥ÑƒÑ‚ÐºÐ°Ñ Ð´Ð°Ð²ÐµÐ´ÐºÐ°"
-
-#: ui/evolution.xml.h:34
-msgid "_Send / Receive"
-msgstr "ДаÑлаць / Ðтрымаць"
-
-#: ui/evolution.xml.h:38
-msgid "_Window"
-msgstr "Ðкно"
-
-#: views/addressbook/galview.xml.h:1
-msgid "By _Company"
-msgstr "Па уÑтановах"
-
-#: views/addressbook/galview.xml.h:2
-msgid "_Address Cards"
-msgstr "Візытоўкі"
-
-#: views/addressbook/galview.xml.h:3
-msgid "_Phone List"
-msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ñ‚Ñлефонаў"
-
-#: views/calendar/galview.xml.h:1
-msgid "W_eek View"
-msgstr "ПраглÑд тыднÑ"
-
-#: views/calendar/galview.xml.h:2
-msgid "_Day View"
-msgstr "ПраглÑд днÑ"
-
-#: views/calendar/galview.xml.h:3
-msgid "_List View"
-msgstr "ПраглÑд ÑьпіÑу"
-
-#: views/calendar/galview.xml.h:4
-msgid "_Month View"
-msgstr "ПраглÑд меÑÑца"
-
-#: views/calendar/galview.xml.h:5
-msgid "_Work Week View"
-msgstr "ПраглÑд працоўнага тыднÑ"
-
-#: views/mail/galview.xml.h:1
-#, fuzzy
-msgid "As _Sent Folder"
-msgstr "Як Ñ‚Ñчка \"даÑланае\""
-
-#: views/mail/galview.xml.h:2
-msgid "By S_tatus"
-msgstr "Па Ñтане"
-
-#: views/mail/galview.xml.h:3
-msgid "By Se_nder"
-msgstr "Па адпраўлÑльніку"
-
-#: views/mail/galview.xml.h:4
-msgid "By Su_bject"
-msgstr "Па Ñ‚Ñме"
-
-#: views/mail/galview.xml.h:5
-#, fuzzy
-msgid "By _Follow Up Flag"
-msgstr "Па ÑьцÑгу \"Да выкананьнÑ\""
-
-#: views/mail/galview.xml.h:6
-msgid "_Messages"
-msgstr "Паведамленьні"
-
-#: views/tasks/galview.xml.h:1
-#, fuzzy
-msgid "With _Due Date"
-msgstr "_Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°:"
-
-#: views/tasks/galview.xml.h:2
-#, fuzzy
-msgid "With _Status"
-msgstr "УÑталÑваць Ñтан"
-
-#: widgets/e-timezone-dialog/e-timezone-dialog.c:197
-#: widgets/e-timezone-dialog/e-timezone-dialog.c:635
-msgid "UTC"
-msgstr "UTC"
-
-#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:2
-msgid "<b>Time Zones</b>"
-msgstr "<b>ЧаÑÐ°Ð²Ñ‹Ñ Ð·Ð¾Ð½Ñ‹</b>"
-
-#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:3
-msgid "<b>_Selection</b>"
-msgstr "<b>ВылучÑньне</b>"
-
-#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:4
-msgid "Select a Time Zone"
-msgstr "Выберыце чаÑавую зону"
-
-#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:5
-msgid ""
-"Use the left mouse button to zoom in on an area of the map and select a time "
-"zone.\n"
-"Use the right mouse button to zoom out."
-msgstr ""
-"КарыÑтайцеÑÑ Ð»ÐµÐ²Ð°Ð¹ кнопкай мышы каб павÑлічыць маштаб мапы й выберыце "
-"чаÑавую зону.\n"
-"КарыÑтайцеÑÑ Ð¿Ñ€Ð°Ð²Ð°Ð¹ клÑвішай каб паменшыць маштаб."
-
-#: widgets/menus/gal-view-menus.c:292
-msgid "_Current View"
-msgstr "БÑгучы праглÑд"
-
-#. bonobo displays this string so it must be in locale
-#: widgets/menus/gal-view-menus.c:351
-msgid "Custom View"
-msgstr "ПраглÑд карыÑтальніка"
-
-#: widgets/menus/gal-view-menus.c:360
-msgid "Save Custom View..."
-msgstr "Захаваць праглÑд карыÑтальніка..."
-
-#: widgets/menus/gal-view-menus.c:373
-msgid "Define Views..."
-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:423
-msgid "MTWTFSS"
-msgstr "ПÐСЧПСÐ"
-
-#. This is a strftime() format. %B = Month name, %Y = Year.
-#: widgets/misc/e-calendar-item.c:1128
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: widgets/misc/e-cell-date-edit.c:241 widgets/misc/e-dateedit.c:429
-msgid "Now"
-msgstr "Зараз"
-
-#: widgets/misc/e-cell-date-edit.c:805
-#, c-format
-msgid "The time must be in the format: %s"
-msgstr "Ð§Ð°Ñ Ð¼ÑƒÑіць быць у фармаце: %s"
-
-#: widgets/misc/e-cell-percent.c:77
-msgid "The percent value must be between 0 and 100, inclusive"
-msgstr "ÐдÑоткавае значÑньне муÑіць быць між 0 Ñ– 100, уключна"
-
-#: widgets/misc/e-charset-picker.c:63
-msgid "Baltic"
-msgstr "Балцкае"
-
-#: widgets/misc/e-charset-picker.c:64
-msgid "Central European"
-msgstr "ЦÑнтральна-ÑўрапейÑкае"
-
-#: widgets/misc/e-charset-picker.c:65
-msgid "Chinese"
-msgstr "КітайÑкае"
-
-#: widgets/misc/e-charset-picker.c:66
-msgid "Cyrillic"
-msgstr "Кірылічнае"
-
-#: widgets/misc/e-charset-picker.c:67
-msgid "Greek"
-msgstr "ГрÑцкае"
-
-#: widgets/misc/e-charset-picker.c:68
-msgid "Hebrew"
-msgstr "ГабрÑйÑкаа"
-
-#: widgets/misc/e-charset-picker.c:69
-msgid "Japanese"
-msgstr "ЯпонÑкае"
-
-#: widgets/misc/e-charset-picker.c:70
-msgid "Korean"
-msgstr "КарÑйÑкае"
-
-#: widgets/misc/e-charset-picker.c:71
-msgid "Turkish"
-msgstr "ТурÑцкае"
-
-#: widgets/misc/e-charset-picker.c:72
-msgid "Unicode"
-msgstr "Юнікод"
-
-#: widgets/misc/e-charset-picker.c:73
-msgid "Western European"
-msgstr "Заходні-ÑўрапейÑкае"
-
-#: widgets/misc/e-charset-picker.c:74
-#, fuzzy
-msgid "Western European, New"
-msgstr "Заходне-ÑўрапейÑкае"
-
-#: widgets/misc/e-charset-picker.c:91 widgets/misc/e-charset-picker.c:92
-#: widgets/misc/e-charset-picker.c:93
-msgid "Traditional"
-msgstr "Традыцыйнае"
-
-#: widgets/misc/e-charset-picker.c:94 widgets/misc/e-charset-picker.c:95
-#: widgets/misc/e-charset-picker.c:96 widgets/misc/e-charset-picker.c:97
-msgid "Simplified"
-msgstr "Спрошчанае"
-
-#: widgets/misc/e-charset-picker.c:100
-msgid "Ukrainian"
-msgstr "УкраінÑкае"
-
-#: widgets/misc/e-charset-picker.c:103
-msgid "Visual"
-msgstr "Візуальна"
-
-#: widgets/misc/e-charset-picker.c:171
-#, c-format
-msgid "Unknown character set: %s"
-msgstr "ÐевÑдомы знаказбор: %s"
-
-#: widgets/misc/e-charset-picker.c:216 widgets/misc/e-charset-picker.c:479
-msgid "Character Encoding"
-msgstr "Кадаваньне набору ÑымбалÑÑž"
-
-#: widgets/misc/e-charset-picker.c:231
-msgid "Enter the character set to use"
-msgstr "Пазначце знаказбор Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑтаньнÑ"
-
-#: widgets/misc/e-charset-picker.c:338
-msgid "Other..."
-msgstr "Іншае..."
-
-#: widgets/misc/e-clipped-label.c:111
-msgid "..."
-msgstr "..."
-
-#: widgets/misc/e-error.c:83 widgets/misc/e-error.c:84
-#: widgets/misc/e-error.c:126
-msgid "Evolution Error"
-msgstr "Памылка \"Эвалюцыі\""
-
-#: widgets/misc/e-error.c:85 widgets/misc/e-error.c:86
-#: widgets/misc/e-error.c:124
-msgid "Evolution Warning"
-msgstr "ПапÑÑ€Ñджаньне \"Эвалюцыі\""
-
-#: widgets/misc/e-error.c:123
-msgid "Evolution Information"
-msgstr "ЗьвеÑткі \"Эвалюцыі\""
-
-#: widgets/misc/e-error.c:125
-msgid "Evolution Query"
-msgstr "Пытаньне\"Эвалюцыі\""
-
-#. setup a dummy error
-#: widgets/misc/e-error.c:421
-#, fuzzy, c-format
-msgid "<span weight=\"bold\">Internal error, unknown error '%s' requested</span>"
-msgstr "ДаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñ– чарнавікі"
-
-#: widgets/misc/e-expander.c:181
-#, fuzzy
-msgid "Expanded"
-msgstr "_ВыкрÑÑьліць"
-
-#: widgets/misc/e-expander.c:182
-#, fuzzy
-msgid "Whether or not the expander is expanded"
-msgstr "Запыт на падцьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
-
-#: widgets/misc/e-expander.c:190
-msgid "Text of the expander's label"
-msgstr ""
-
-#: widgets/misc/e-expander.c:197
-msgid "Use underline"
-msgstr "ВыкарыÑтоўваць падкрÑÑьленьне"
-
-#: widgets/misc/e-expander.c:198
-msgid ""
-"If set, an underline in the text indicates the next character should be used "
-"for the mnemonic accelerator key"
-msgstr ""
-
-#: widgets/misc/e-expander.c:205
-msgid "Spacing"
-msgstr "Прамежак"
-
-#: widgets/misc/e-expander.c:206
-msgid "Space to put between the label and the child"
-msgstr ""
-
-#: widgets/misc/e-expander.c:215
-msgid "Label widget"
-msgstr ""
-
-#: widgets/misc/e-expander.c:216
-msgid "A widget to display in place of the usual expander label"
-msgstr ""
-
-#: widgets/misc/e-expander.c:222
-msgid "Expander Size"
-msgstr ""
-
-#: widgets/misc/e-expander.c:223
-msgid "Size of the expander arrow"
-msgstr ""
-
-#: widgets/misc/e-expander.c:231
-msgid "Indicator Spacing"
-msgstr ""
-
-#: widgets/misc/e-expander.c:232
-msgid "Spacing around expander arrow"
-msgstr ""
-
-#: widgets/misc/e-filter-bar.c:195
-msgid "_Searches"
-msgstr "По_шук"
-
-#: widgets/misc/e-filter-bar.c:197
-msgid "Search Editor"
-msgstr "РÑдактар пошуку"
-
-#. FIXME: get the toplevel window...
-#: widgets/misc/e-filter-bar.c:220
-msgid "Save Search"
-msgstr "Захаваць пошук"
-
-#: widgets/misc/e-filter-bar.h:92 widgets/misc/e-filter-bar.h:99
-msgid "_Save Search..."
-msgstr "Захаваць вынік пошуку..."
-
-#: widgets/misc/e-filter-bar.h:93 widgets/misc/e-filter-bar.h:100
-msgid "_Edit Saved Searches..."
-msgstr "РÑдагаваць захаваны пошук..."
-
-#: widgets/misc/e-filter-bar.h:94 widgets/misc/e-filter-bar.h:101
-msgid "_Advanced..."
-msgstr "_ÐдмыÑловае..."
-
-#: widgets/misc/e-image-chooser.c:172
-msgid "Choose Image"
-msgstr "Выберыце відарыÑ"
-
-#: widgets/misc/e-search-bar.c:540
-msgid "_Search"
-msgstr "По_шук"
-
-#: widgets/misc/e-search-bar.c:546
-msgid "_Find Now"
-msgstr "_Шукаць зараз"
-
-#: widgets/misc/e-search-bar.c:547 widgets/misc/e-search-bar.c:929
-msgid "_Clear"
-msgstr "Ð_чыÑьціць"
-
-#: widgets/misc/e-search-bar.c:837
-msgid "Item ID"
-msgstr "ІД пункта"
-
-#: widgets/misc/e-search-bar.c:844
-msgid "Subitem ID"
-msgstr "ІД падпункта"
-
-#: widgets/misc/e-search-bar.c:851
-msgid "Text"
-msgstr "ТÑкÑÑ‚"
-
-#: widgets/misc/e-search-bar.c:931
-msgid "Find _Now"
-msgstr "Шукаць зараз"
-
-#. system:ask-save-file-exists-overwrite primary
-#: widgets/misc/e-system-errors.xml.h:4
-msgid "File exists \"{0}\"."
-msgstr "Файл Ñ–Ñнуе \"{0}\"."
-
-#. system:ask-save-file-exists-overwrite secondary
-#: widgets/misc/e-system-errors.xml.h:6
-msgid "Do you wish to overwrite it?"
-msgstr "Жадаеце перапіÑаць?"
-
-#. system:no-save-file primary
-#: widgets/misc/e-system-errors.xml.h:9
-msgid "Cannot save file \"{0}\"."
-msgstr "Ðемагчыма захаваць файл·\"{0}\"."
-
-#. system:no-load-file primary
-#: widgets/misc/e-system-errors.xml.h:13
-msgid "Cannot open file \"{0}\"."
-msgstr "Ðемагчыма адкрыць файл \"{0}\"."
-
-#: widgets/misc/e-task-widget.c:212
-#, c-format
-msgid "%s (...)"
-msgstr "%s (...)"
-
-#: widgets/misc/e-task-widget.c:217
-#, c-format
-msgid "%s (%d%% complete)"
-msgstr "%s (%d%% завершана)"
-
+# translation of evolution.HEAD.be.po to belarusian
+# translation of evolution.HEAD.be.po to Belarusian
+# Vital Khilko <dojlid@mova.org>, 2003
+msgid ""
+msgstr ""
+"Project-Id-Version: evolution.HEAD.be\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-08-13 14:55-0400\n"
+"PO-Revision-Date: 2003-05-25 19:42GMT+2\n"
+"Last-Translator: Vital Khilko <dojlid@mova.org>\n"
+"Language-Team: belarusian <i18n@mova.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0\n"
+
+#: a11y/addressbook/ea-addressbook-view.c:94
+#: a11y/addressbook/ea-addressbook-view.c:103
+#: a11y/addressbook/ea-minicard-view.c:119
+#, fuzzy
+msgid "evolution addressbook"
+msgstr "Кніга адрÑÑаў \"Эвалюцыі\""
+
+#: a11y/addressbook/ea-minicard-view.c:101
+#, fuzzy
+msgid "current addressbook folder "
+msgstr "з уÑімі лакальнымі й актыўнымі аддаленымі течкамі"
+
+#: a11y/addressbook/ea-minicard-view.c:102
+#, fuzzy
+msgid "have "
+msgstr "Захаваць Ñк"
+
+#: a11y/addressbook/ea-minicard-view.c:102
+#, fuzzy
+msgid "has "
+msgstr "Заданьні "
+
+#: a11y/addressbook/ea-minicard-view.c:104
+#, fuzzy
+msgid " cards"
+msgstr "карткі"
+
+#: a11y/addressbook/ea-minicard-view.c:104
+#, fuzzy
+msgid " card"
+msgstr "1 картка"
+
+#: a11y/addressbook/ea-minicard.c:105
+#, fuzzy
+msgid "contact's header: "
+msgstr "Кантакты: "
+
+#: a11y/addressbook/ea-minicard.c:166
+#, fuzzy
+msgid "evolution minicard"
+msgstr "Ðкно \"Эвалюцыі\""
+
+#. addressbook:ldap-init primary
+#: addressbook/addressbook-errors.xml.h:2
+#, fuzzy
+msgid "This addressbook could not be opened."
+msgstr "КурÑор Ð½Ñ Ð±Ñ‹Ñž загружаны\n"
+
+#. addressbook:ldap-init secondary
+#: addressbook/addressbook-errors.xml.h:4
+msgid ""
+"This addressbook server might unreachable or the server name may be "
+"misspelled or your network connection could be down."
+msgstr ""
+
+#. addressbook:ldap-auth primary
+#: addressbook/addressbook-errors.xml.h:6
+#, fuzzy
+msgid "Failed to authenticate with LDAP server."
+msgstr "Збой аўтарызацыі на паÑлужніку LDAP"
+
+#. addressbook:ldap-auth secondary
+#: addressbook/addressbook-errors.xml.h:8
+msgid ""
+"Check to make sure your password is spelled correctly and that you are using "
+"a supported login method. Remember that many passwords are case sensitive; "
+"your caps lock might be on."
+msgstr ""
+
+#. addressbook:ldap-search-base primary
+#: addressbook/addressbook-errors.xml.h:10
+#, fuzzy
+msgid "This addressbook server does not have any suggested search bases."
+msgstr "ПаÑлужнік адказаў: \"адÑутнічаюць базы пошуку\""
+
+#. addressbook:ldap-search-base secondary
+#: addressbook/addressbook-errors.xml.h:12
+msgid ""
+"This LDAP server may use an older version of LDAP, which does not support "
+"this functionality or it may be misconfigured. Ask your administrator for "
+"supported search bases."
+msgstr ""
+
+#. addressbook:ldap-v3-schema primary
+#: addressbook/addressbook-errors.xml.h:14
+#, fuzzy
+msgid "This server does not support LDAPv3 schema information."
+msgstr "ПаÑлужнік не падтрымлівае звеÑткі Ñхемы LDAPv3"
+
+#. addressbook:ldap-get-schema primary
+#: addressbook/addressbook-errors.xml.h:16
+#, fuzzy
+msgid "Could not get schema information for LDAP server."
+msgstr "Ðемагчыма атрымаць групу: %s"
+
+#. addressbook:ldap-invalid-schema primary
+#: addressbook/addressbook-errors.xml.h:18
+#, fuzzy
+msgid "LDAP server did not respond with valid schema information."
+msgstr "ПаÑлужнік не адказаў з Ñ€ÑчаіÑнымі зьвеÑткамі Ñхемы"
+
+#. addressbook:remove-addressbook primary
+#: addressbook/addressbook-errors.xml.h:20
+#, fuzzy
+msgid "Could not remove addressbook."
+msgstr "Ðемагчыма загрузіць %s: %s"
+
+#. addressbook:remove-addressbook secondary
+#. addressbook:generic-error primary
+#. addressbook:load-error secondary
+#. addressbook:search-error secondary
+#. mail:session-message-info secondary
+#. mail:session-message-info-cancel secondary
+#. mail:session-message-warning secondary
+#. mail:session-message-warning-cancel secondary
+#. mail:session-message-error secondary
+#. mail:session-message-error-cancel secondary
+#. mail:ask-session-password secondary
+#. mail:filter-load-error secondary
+#: addressbook/addressbook-errors.xml.h:22
+#: addressbook/addressbook-errors.xml.h:26
+#: addressbook/addressbook-errors.xml.h:34
+#: addressbook/addressbook-errors.xml.h:38 mail/mail-errors.xml.h:70
+#: mail/mail-errors.xml.h:72 mail/mail-errors.xml.h:74
+#: mail/mail-errors.xml.h:76 mail/mail-errors.xml.h:78
+#: mail/mail-errors.xml.h:80 mail/mail-errors.xml.h:84
+#: mail/mail-errors.xml.h:88
+msgid "{0}"
+msgstr ""
+
+#. addressbook:edit-categories primary
+#: addressbook/addressbook-errors.xml.h:24
+msgid "Category editor not available."
+msgstr "ÐдÑутнічае катÑÐ³Ð¾Ñ€Ñ‹Ñ Ñ€Ñдактара."
+
+#. addressbook:generic-error secondary
+#. mail-composer:no-attach secondary
+#. mail:no-save-path secondary
+#: addressbook/addressbook-errors.xml.h:28
+#: composer/mail-composer-errors.xml.h:4 mail/mail-errors.xml.h:92
+msgid "{1}"
+msgstr ""
+
+#. addressbook:load-error title
+#: addressbook/addressbook-errors.xml.h:30
+#, fuzzy
+msgid "Unable to open addressbook"
+msgstr "Захаваць у кнізе адрÑÑаў"
+
+#. addressbook:load-error primary
+#: addressbook/addressbook-errors.xml.h:32
+#, fuzzy
+msgid "Error loading addressbook."
+msgstr "Памылка загрузкі дапомнай кнігі адрÑÑаў."
+
+#. addressbook:search-error primary
+#: addressbook/addressbook-errors.xml.h:36
+#, fuzzy
+msgid "Unable to perform search."
+msgstr "Памылка заданага пошуку"
+
+#. addressbook:prompt-save primary
+#: addressbook/addressbook-errors.xml.h:40
+#, fuzzy
+msgid "Would you like to save your changes?"
+msgstr "Жадаеце захаваць зьмены?"
+
+#. addressbook:prompt-save secondary
+#: addressbook/addressbook-errors.xml.h:42
+msgid ""
+"You have made modifications to this contact. Do you want to save these "
+"changes?"
+msgstr ""
+
+#: addressbook/addressbook-errors.xml.h:43
+#: addressbook/gui/contact-editor/e-contact-editor.c:2803
+#: addressbook/gui/contact-editor/e-contact-editor.c:2827
+msgid "_Discard"
+msgstr "_Ðдмовіць"
+
+#. addressbook:prompt-move primary
+#: addressbook/addressbook-errors.xml.h:45
+#, fuzzy
+msgid "Cannot move contact."
+msgstr "Ñ– адна Ñ–Ð½ÑˆÐ°Ñ ÐºÐ°Ñ€Ñ‚ÐºÐ°."
+
+#. addressbook:prompt-move secondary
+#: addressbook/addressbook-errors.xml.h:47
+msgid ""
+"You are attempting to move a contact from one addressbook to another but it "
+"cannot be removed from the source. Do you want to save a copy instead?"
+msgstr ""
+
+#. addressbook:save-error primary
+#: addressbook/addressbook-errors.xml.h:49
+#, fuzzy
+msgid "Unable to save contact(s)."
+msgstr "Ðеатрымліваецца атрымаць паведамленьне з Ñ€Ñдактара"
+
+#. addressbook:save-error secondary
+#: addressbook/addressbook-errors.xml.h:51
+#, fuzzy
+msgid "Error saving contacts to {0}: {1}"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ñ€Ñ‚ÐºÑ–"
+
+#. addressbook:backend-died primary
+#: addressbook/addressbook-errors.xml.h:53
+#, fuzzy
+msgid "The Evolution addressbook has quit unexpectedly."
+msgstr "ПраглÑдальнік кнігі адрÑÑаў \"Эвалюцыі\""
+
+#. addressbook:backend-died secondary
+#: addressbook/addressbook-errors.xml.h:55
+msgid ""
+"Your contacts for {0} will not be available until Evolution is restarted."
+msgstr ""
+
+#: addressbook/conduit/address-conduit.c:298
+msgid "Default Sync Address:"
+msgstr "ÐдрÑÑа дапомнае Ñынхранізацыі:"
+
+#: addressbook/conduit/address-conduit.c:1181
+#: addressbook/conduit/address-conduit.c:1182
+#, fuzzy
+msgid "Could not load addressbook"
+msgstr "Ðемагчыма загрузіць %s: %s"
+
+#: addressbook/conduit/address-conduit.c:1250
+#: addressbook/conduit/address-conduit.c:1253
+msgid "Could not read pilot's Address application block"
+msgstr "Ðемагчыма прачытаць блёк даÑтаÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð°Ð´Ñ€ÑÑаў Пілёта"
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:1
+msgid "*Control*F2"
+msgstr ""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:2
+#, fuzzy
+msgid "Autocompletion"
+msgstr "ТÑчкі аўтазавÑршÑньнÑ"
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:3
+#, fuzzy
+msgid "C_ontacts"
+msgstr "Кантакты"
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:4
+#, fuzzy
+msgid "Certificates"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:5
+#, fuzzy
+msgid "Configure autocomplete here"
+msgstr "Ðаладка вашых уліковых запіÑаў пошты робіцца тут"
+
+#. Create the contacts group
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:6
+#: addressbook/gui/component/addressbook-view.c:1104
+#: calendar/gui/migration.c:377
+msgid "Contacts"
+msgstr "Кантакты"
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:7
+msgid "Evolution Addressbook"
+msgstr "Кніга адрÑÑаў \"Эвалюцыі\""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:8
+msgid "Evolution Addressbook address pop-up"
+msgstr "Раптоўнае акенца кнігі адрÑÑаў \"Эвалюцыі\""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:9
+msgid "Evolution Addressbook address viewer"
+msgstr "ПраглÑдальнік кнігі адрÑÑаў \"Эвалюцыі\""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:10
+msgid "Evolution Addressbook card viewer"
+msgstr "ПраглÑдальнік візытовак кнігі адрÑÑаў \"Эвалюцыі\""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:11
+msgid "Evolution Addressbook component"
+msgstr "КампанÑнт кнігі адрÑÑаў \"Эвалюцыі\""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:12
+#, fuzzy
+msgid "Evolution S/Mime Certificate Management Control"
+msgstr "Кіраваньне перавагамі пошты \"Эвалюцыі\""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:13
+msgid "Evolution folder settings configuration control"
+msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð½Ð°Ð»Ð°Ð´ÐºÐ°Ð¼Ñ– Ñ‚Ñчак \"Эвалюцыі\""
+
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:14
+msgid "Manage your S/MIME certificates here"
+msgstr ""
+
+#: addressbook/gui/component/addressbook-component.c:93
+#, fuzzy
+msgid "New Contact"
+msgstr "Ðовы кантакт:"
+
+#: addressbook/gui/component/addressbook-component.c:94
+msgid "_Contact"
+msgstr "_Кантакт"
+
+#: addressbook/gui/component/addressbook-component.c:95
+msgid "Create a new contact"
+msgstr "Стварыць новы кантакт"
+
+#: addressbook/gui/component/addressbook-component.c:101
+msgid "New Contact List"
+msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
+
+#: addressbook/gui/component/addressbook-component.c:102
+#, fuzzy
+msgid "Contact _List"
+msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
+
+#: addressbook/gui/component/addressbook-component.c:103
+msgid "Create a new contact list"
+msgstr "Стварыць новы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
+
+#: addressbook/gui/component/addressbook-component.c:109
+#: addressbook/gui/component/addressbook-view.c:773
+#, fuzzy
+msgid "New Address Book"
+msgstr "Кніга адрÑÑаў"
+
+#: addressbook/gui/component/addressbook-component.c:110
+#, fuzzy
+msgid "Address _Book"
+msgstr "Кніга адрÑÑаў"
+
+#: addressbook/gui/component/addressbook-component.c:111
+#, fuzzy
+msgid "Create a new address book"
+msgstr "Стварыць новае заданьне"
+
+#: addressbook/gui/component/addressbook-component.c:184
+msgid "Failed upgrading Addressbook settings or folders."
+msgstr ""
+
+#: addressbook/gui/component/addressbook-migrate.c:72
+#: calendar/gui/migration.c:141 mail/em-migrate.c:1160
+#, fuzzy
+msgid "Migrating..."
+msgstr "Чаканьне..."
+
+#: addressbook/gui/component/addressbook-migrate.c:124
+#: calendar/gui/migration.c:188 mail/em-migrate.c:1201
+#, fuzzy, c-format
+msgid "Migrating `%s':"
+msgstr "Зандаваньне %s"
+
+#. create the local source group
+#. On This Computer is always first and VFolders is always last
+#: addressbook/gui/component/addressbook-migrate.c:493
+#: calendar/gui/migration.c:450 calendar/gui/migration.c:532
+#: mail/em-folder-tree-model.c:196 mail/em-folder-tree-model.c:198
+#: mail/mail-component.c:245 mail/mail-vfolder.c:218
+msgid "On This Computer"
+msgstr ""
+
+#. Create the default Person addressbook
+#. Create the default Person calendar
+#. Create the default Person task list
+#. orange
+#: addressbook/gui/component/addressbook-migrate.c:501
+#: addressbook/gui/contact-editor/contact-editor.glade.h:34
+#: calendar/gui/migration.c:458 calendar/gui/migration.c:540
+#: filter/filter-label.c:123 mail/em-migrate.c:1013 mail/mail-config.c:78
+#: mail/mail-config.glade.h:109
+msgid "Personal"
+msgstr "ПÑÑ€Ñанальнае"
+
+#. Create the LDAP source group
+#: addressbook/gui/component/addressbook-migrate.c:509
+#, fuzzy
+msgid "On LDAP Servers"
+msgstr "ПаÑлужнік LDAP"
+
+#: addressbook/gui/component/addressbook-migrate.c:637
+#, fuzzy
+msgid "LDAP Servers"
+msgstr "ПаÑлужнік LDAP"
+
+#: addressbook/gui/component/addressbook-migrate.c:752
+#, fuzzy
+msgid "Autocompletion Settings"
+msgstr "ТÑчкі аўтазавÑршÑньнÑ"
+
+#: addressbook/gui/component/addressbook-migrate.c:1123
+msgid ""
+"The location and hierarchy of the Evolution contact folders has changed "
+"since Evolution 1.x.\n"
+"\n"
+"Please be patient while Evolution migrates your folders..."
+msgstr ""
+
+#: addressbook/gui/component/addressbook-migrate.c:1137
+msgid ""
+"The format of mailing list contacts has changed.\n"
+"\n"
+"Please be patient while Evolution migrates your folders..."
+msgstr ""
+
+#: addressbook/gui/component/addressbook-migrate.c:1146
+msgid ""
+"The way Evolution stores some phone numbers has changed.\n"
+"\n"
+"Please be patient while Evolution migrates your folders..."
+msgstr ""
+
+#: addressbook/gui/component/addressbook-migrate.c:1156
+msgid ""
+"Evolution's Palm Sync changelog and map files have changed.\n"
+"\n"
+"Please be patient while Evolution migrates your Pilot Sync data..."
+msgstr ""
+
+#: addressbook/gui/component/addressbook-view.c:671
+#, c-format
+msgid "Address book '%s' will be removed. Are you sure you want to continue?"
+msgstr ""
+
+#: addressbook/gui/component/addressbook-view.c:774
+#: addressbook/gui/widgets/e-addressbook-view.c:1124
+#: calendar/gui/calendar-component.c:430 calendar/gui/tasks-component.c:376
+#: mail/em-filter-i18n.h:11 ui/evolution-addressbook.xml.h:8
+#: ui/evolution-calendar.xml.h:5 ui/evolution-comp-editor.xml.h:4
+#: ui/evolution-contact-editor.xml.h:3
+#: ui/evolution-contact-list-editor.xml.h:3 ui/evolution-mail-message.xml.h:24
+#: ui/evolution-tasks.xml.h:6
+msgid "Delete"
+msgstr "Выдаліць"
+
+#: addressbook/gui/component/addressbook-view.c:775
+#: calendar/gui/calendar-component.c:431 calendar/gui/tasks-component.c:378
+msgid "Properties..."
+msgstr "УлаÑьціваÑьці..."
+
+#: addressbook/gui/component/addressbook.c:98
+msgid "Accessing LDAP Server anonymously"
+msgstr "Далучацца да паÑлужніка LDAP ананімна"
+
+#: addressbook/gui/component/addressbook.c:184
+#: camel/providers/groupwise/camel-gw-listener.c:420
+msgid "Failed to authenticate.\n"
+msgstr "Збой аўтарызацыі.\n"
+
+#: addressbook/gui/component/addressbook.c:191
+#: camel/providers/groupwise/camel-gw-listener.c:409
+#, c-format
+msgid "%sEnter password for %s (user %s)"
+msgstr "%sУвÑдзіце пароль Ð´Ð»Ñ %s (карыÑтальнік %s)"
+
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:1
+msgid "EFolderList xml for the list of completion uris"
+msgstr ""
+
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:2
+msgid "Position of the vertical pane in main view"
+msgstr ""
+
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:3
+msgid ""
+"The number of characters that must be typed before evolution will attempt to "
+"autocomplete"
+msgstr ""
+
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:4
+msgid "URI for the folder last used in the select names dialog"
+msgstr ""
+
+#: addressbook/gui/component/ldap-config.glade.h:1
+#: addressbook/gui/component/select-names/select-names.glade.h:1
+#: addressbook/gui/contact-editor/contact-editor.glade.h:1
+#: addressbook/gui/contact-editor/fulladdr.glade.h:1
+#: addressbook/gui/contact-editor/fullname.glade.h:1
+#: addressbook/gui/contact-editor/im.glade.h:1
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:3
+#: calendar/gui/dialogs/alarm-dialog.glade.h:1
+#: calendar/gui/dialogs/calendar-setup.glade.h:1
+#: calendar/gui/dialogs/event-page.glade.h:1
+#: calendar/gui/dialogs/meeting-page.glade.h:1
+#: calendar/gui/dialogs/new-calendar.glade.h:1
+#: calendar/gui/dialogs/new-task-list.glade.h:1
+#: calendar/gui/dialogs/task-page.glade.h:1
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:1
+#: composer/e-msg-composer-attachment.glade.h:1 mail/mail-config.glade.h:3
+#: mail/mail-dialogs.glade.h:6 mail/message-tags.glade.h:1
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:1
+msgid "*"
+msgstr "*"
+
+#: addressbook/gui/component/ldap-config.glade.h:2
+msgid "1"
+msgstr ""
+
+#: addressbook/gui/component/ldap-config.glade.h:3
+msgid "3268"
+msgstr "3268"
+
+#: addressbook/gui/component/ldap-config.glade.h:4
+msgid "389"
+msgstr "389"
+
+#: addressbook/gui/component/ldap-config.glade.h:5
+msgid "5"
+msgstr ""
+
+#: addressbook/gui/component/ldap-config.glade.h:6
+msgid "636"
+msgstr "636"
+
+#: addressbook/gui/component/ldap-config.glade.h:7
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:2
+#, fuzzy
+msgid "<b>Authentication</b>"
+msgstr "ÐўтарызацыÑ"
+
+#: addressbook/gui/component/ldap-config.glade.h:8
+#, fuzzy
+msgid "<b>Display</b>"
+msgstr "<b>Стан:</b>"
+
+#: addressbook/gui/component/ldap-config.glade.h:9
+#, fuzzy
+msgid "<b>Downloading</b>"
+msgstr "_РазьмÑшчÑньне:"
+
+#: addressbook/gui/component/ldap-config.glade.h:10
+#, fuzzy
+msgid "<b>Searching</b>"
+msgstr "Пошук"
+
+#: addressbook/gui/component/ldap-config.glade.h:11
+#, fuzzy
+msgid "<b>Server Information</b>"
+msgstr "Крок 1: ЗьвеÑÑ‚Ñ– паÑлужніка"
+
+#: addressbook/gui/component/ldap-config.glade.h:12
+#, fuzzy
+msgid "<b>Type:</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: addressbook/gui/component/ldap-config.glade.h:13
+#, fuzzy
+msgid "Add Address Book"
+msgstr "Кніга адрÑÑаў"
+
+#: addressbook/gui/component/ldap-config.glade.h:14
+#, fuzzy
+msgid "Address Book Properties"
+msgstr "Крыніцы кнігаў адрÑÑаў..."
+
+#: addressbook/gui/component/ldap-config.glade.h:15 mail/mail-account-gui.c:79
+#: mail/mail-config.glade.h:42
+msgid "Always"
+msgstr "ЗаўÑёды"
+
+#: addressbook/gui/component/ldap-config.glade.h:16
+msgid "Anonymously"
+msgstr "Ðнанімна"
+
+#: addressbook/gui/component/ldap-config.glade.h:17
+msgid "Basic"
+msgstr "ÐÑноўнае"
+
+#: addressbook/gui/component/ldap-config.glade.h:18
+#: mail/mail-dialogs.glade.h:13 smime/gui/smime-ui.glade.h:19
+msgid "Details"
+msgstr "ДÑталі"
+
+#: addressbook/gui/component/ldap-config.glade.h:19
+#, fuzzy
+msgid "Distinguished name"
+msgstr "_Ð£Ð´Ð°ÐºÐ»Ð°Ð´Ð½Ñ‘Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð°:"
+
+#: addressbook/gui/component/ldap-config.glade.h:20
+#, fuzzy
+msgid "Email address"
+msgstr "Э.пошта:"
+
+#: addressbook/gui/component/ldap-config.glade.h:21
+#, fuzzy
+msgid ""
+"Evolution will use this email address to authenticate you with the server."
+msgstr ""
+"\"ЭвалюцыÑ\" будзе выкарыÑтоўваць гÑтую адрÑÑу Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ– Ð²Ð°Ñ Ð½Ð° "
+"паÑлужніку"
+
+#: addressbook/gui/component/ldap-config.glade.h:22
+#, fuzzy
+msgid "Find Possible Search Bases"
+msgstr "Базы пошуку, ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð°"
+
+#: addressbook/gui/component/ldap-config.glade.h:23
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:20
+#: mail/mail-config.glade.h:86 smime/gui/smime-ui.glade.h:27
+msgid "General"
+msgstr "ÐÑноўнае"
+
+#: addressbook/gui/component/ldap-config.glade.h:24
+#, fuzzy
+msgid "Lo_gin:"
+msgstr "Уваход"
+
+#: addressbook/gui/component/ldap-config.glade.h:25 mail/mail-account-gui.c:81
+#: mail/mail-config.glade.h:102
+msgid "Never"
+msgstr "Ðіколі"
+
+#: addressbook/gui/component/ldap-config.glade.h:26
+msgid "One"
+msgstr "Ðдзін"
+
+#: addressbook/gui/component/ldap-config.glade.h:27
+#, fuzzy
+msgid "Search _base:"
+msgstr "_База пошуку:"
+
+#: addressbook/gui/component/ldap-config.glade.h:28
+#, fuzzy
+msgid ""
+"Selecting this option means that Evolution will only connect to your LDAP "
+"server if your LDAP server supports SSL or TLS."
+msgstr ""
+"ВыбÑрыце гÑтую можнаÑьць калі \"ЭвалюцыÑ\" будзе далучацца да вашага "
+"паÑлужніка\n"
+"LDAP калі той падтрымлівае SSL ці TLS."
+
+#: addressbook/gui/component/ldap-config.glade.h:29
+#, fuzzy
+msgid ""
+"Selecting this option means that Evolution will only try to use SSL/TLS if "
+"you are in a insecure environment. For example, if you and your LDAP server "
+"are behind a firewall at work, then Evolution doesn't need to use SSL/TLS "
+"because your connection is already secure."
+msgstr ""
+"Выбар гÑтага парамÑтра азначае што \"ЭвалюцыÑ\" будзе Ñпрабаваць "
+"выкарыÑтоўваць толькі SSL/TLS калі\n"
+"вы выкарыÑтоўваеце небÑÑьпечнае аÑÑродзьдзе. Да прыкладу, калі вы Ñ– ваш "
+"паÑлужніе LDAP працуеце\n"
+"па-за фаерволам, \"ЭвалюцыÑ\" не патрабуе выкарыÑÑ‚Ð°Ð½ÑŒÐ½Ñ SSL/TLS да таго чаÑу "
+"пакуль вашае злучÑньне\n"
+"бÑÑьпечнае."
+
+#: addressbook/gui/component/ldap-config.glade.h:30
+#, fuzzy
+msgid ""
+"Selecting this option means that your server does not support either SSL or "
+"TLS. This means that your connection will be insecure, and that you will be "
+"vulnerable to security exploits. "
+msgstr ""
+"Выбар гÑтага парамÑтра азначае што ваш паÑлужнік не падтрымлівае альбо SSL "
+"альбо TLS.\n"
+"ГÑта азначае што вашае злучÑньне будзе небÑÑьпечным, Ñ– гÑта будзе "
+"нетрывалым да ÑкÑплойдаў\n"
+"бÑÑьпекі. "
+
+#: addressbook/gui/component/ldap-config.glade.h:31
+msgid "Sub"
+msgstr "Пад"
+
+#: addressbook/gui/component/ldap-config.glade.h:32
+msgid "Supported Search Bases"
+msgstr "Базы пошуку, ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð°"
+
+#: addressbook/gui/component/ldap-config.glade.h:33
+#, fuzzy
+msgid ""
+"The search base is the distinguished name (DN) of the entry where your "
+"searches will begin. If you leave this blank, the search will begin at the "
+"root of the directory tree."
+msgstr ""
+"База пошуку гÑта ÑƒÐ´Ð°ÐºÐ»Ð°Ð´Ð½Ñ‘Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° (DN) запіÑа дзе вы муÑіце пачынаць \n"
+"ваш пошук. Калі вы пакініце гÑтае поле пуÑтым, пошук будзе пачаты з карÑÐ½Ñ \n"
+"дрÑва каталёгаў."
+
+#: addressbook/gui/component/ldap-config.glade.h:34
+#, fuzzy
+msgid ""
+"The search scope defines how deep you would like the search to extend down "
+"the directory tree. A search scope of \"sub\" will include all entries below "
+"your search base. A search scope of \"one\" will only include the entries "
+"one level beneath your base."
+msgstr ""
+"Межы пошуку вызначае Ñк глыбока вызьбіраецеÑÑ ÑˆÑƒÐºÐ°Ñ†ÑŒ у дрÑве кталёгаў.\n"
+"Межы пошуку Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñк \"пад\" будуць уключаць уÑе запіÑÑ‹ пад базай "
+"пошуку.\n"
+"Межы пошуку Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñк \"адзін\" будуць уключаць уÑе запіÑÑ‹ ніжÑй на "
+"узровень\n"
+" за базу пошуку.\n"
+
+#: addressbook/gui/component/ldap-config.glade.h:35
+msgid ""
+"This is the full name of your ldap server. For example, \"ldap.mycompany.com"
+"\"."
+msgstr ""
+"ГÑта Ð¿Ð¾ÑžÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð° вашага паÑлужніка LDAP. Да прыкладу, \"mova.linux.by\""
+
+#: addressbook/gui/component/ldap-config.glade.h:36
+#, fuzzy
+msgid ""
+"This is the maximum number of entries to download. Setting this number to be "
+"too large will slow down your address book."
+msgstr ""
+"ГÑта макÑÑ‹Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñьць запіÑаў Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ–. УÑталÑваньне гÑтае \n"
+"лічбы Ñž вÑлікае значÑньне запаволіць вашую кнігу адрÑÑаў."
+
+#: addressbook/gui/component/ldap-config.glade.h:37
+msgid ""
+"This is the method evolution will use to authenticate you. Note that "
+"setting this to \"Email Address\" requires anonymous access to your ldap "
+"server."
+msgstr ""
+"ГÑÑ‚Ñ‹ мÑтад \"ЭвалюцыÑ\" будзе выкарыÑтоўваць Ð´Ð»Ñ Ð²Ð°ÑˆÐ°Ðµ аўтарызацыі. "
+"УÑталёўка значÑÐ½ÑŒÐ½Ñ Ñƒ \"ÐдрÑÑа пошты\"прадаÑтаўлÑе ананімны доÑтуп да вашага "
+"паÑлужніка LDAP."
+
+#: addressbook/gui/component/ldap-config.glade.h:38
+#, fuzzy
+msgid ""
+"This is the name for this server that will appear in your Evolution folder "
+"list. It is for display purposes only. "
+msgstr ""
+"ГÑта назва паÑлужніка ÑÐºÐ°Ñ Ð±ÑƒÐ´Ð·Ðµ адлюÑтроўвацца Ñž ÑьпіÑе \"Эвалюцыі\".\n"
+"ГÑта толькі Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑтраваньнÑ. "
+
+#: addressbook/gui/component/ldap-config.glade.h:39
+#, fuzzy
+msgid ""
+"This is the port on the LDAP server that Evolution will try to connect to. A "
+"list of standard ports has been provided. Ask your system administrator what "
+"port you should specify."
+msgstr ""
+"ГÑта порт на паÑлужніку LDAP Ñкі выкарыÑтоўвае \"ЭвалюцыÑ\" Ð´Ð»Ñ \n"
+"далучÑньнÑ. ЗапытайцеÑÑ Ð²Ð°ÑˆÐ°Ð³Ð° адмініÑтратара каб даведацца Ñкі \n"
+"порт выкарыÑтоўвае ваш паÑлужнік."
+
+#: addressbook/gui/component/ldap-config.glade.h:40
+msgid "Using distinguished name (DN)"
+msgstr "ВыкарыÑтоўваць удакладнёнаю назву (DN)"
+
+#: addressbook/gui/component/ldap-config.glade.h:41
+msgid "Using email address"
+msgstr "ВыкарыÑтоўваць паштовую адрÑÑу"
+
+#: addressbook/gui/component/ldap-config.glade.h:42 mail/mail-account-gui.c:80
+#: mail/mail-config.glade.h:156
+msgid "Whenever Possible"
+msgstr "Калі магчыма"
+
+#: addressbook/gui/component/ldap-config.glade.h:43
+#, fuzzy
+msgid "_Add Address Book"
+msgstr "Кніга адрÑÑаў"
+
+#: addressbook/gui/component/ldap-config.glade.h:44
+msgid "_Download limit:"
+msgstr "Ðб_межаваньне загрузкі:"
+
+#: addressbook/gui/component/ldap-config.glade.h:45
+#, fuzzy
+msgid "_Find Possible Search Bases"
+msgstr "Базы пошуку, ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð°"
+
+#: addressbook/gui/component/ldap-config.glade.h:46
+msgid "_Log in method:"
+msgstr "_ÐœÑтад уваходу:"
+
+#: addressbook/gui/component/ldap-config.glade.h:47
+#: calendar/gui/dialogs/calendar-setup.glade.h:8 mail/mail-config.glade.h:171
+msgid "_Name:"
+msgstr "_Ðазва:"
+
+#: addressbook/gui/component/ldap-config.glade.h:48
+#, fuzzy
+msgid "_Port:"
+msgstr "_ПрыÑрытÑÑ‚:"
+
+#: addressbook/gui/component/ldap-config.glade.h:49
+#, fuzzy
+msgid "_Search scope:"
+msgstr "Межы _пошуку:"
+
+#: addressbook/gui/component/ldap-config.glade.h:50
+#, fuzzy
+msgid "_Server:"
+msgstr "ПаÑлужнік:"
+
+#: addressbook/gui/component/ldap-config.glade.h:51
+#, fuzzy
+msgid "_Timeout:"
+msgstr "Фармат чаÑу:"
+
+#: addressbook/gui/component/ldap-config.glade.h:52
+#, fuzzy
+msgid "_Use secure connection:"
+msgstr "_ВыкарыÑтоўваць злучÑньне праз SSL:"
+
+#: addressbook/gui/component/ldap-config.glade.h:53
+msgid "cards"
+msgstr "карткі"
+
+#: addressbook/gui/component/ldap-config.glade.h:54
+#: calendar/gui/dialogs/alarm-dialog.glade.h:27
+#: calendar/gui/dialogs/calendar-setup.glade.h:14 filter/filter.glade.h:15
+#: mail/mail-config.glade.h:183
+msgid "minutes"
+msgstr "хвіліны"
+
+#: addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.server.in.in.h:1
+msgid "Evolution Addressbook name selection interface"
+msgstr "ІнтарфÑÐ¹Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ Ñ–Ð¼Ñ Ð· кнігі адрÑÑаў \"Эвалюцыі\"."
+
+#: addressbook/gui/component/select-names/e-select-names-popup.c:208
+msgid "Remove All"
+msgstr "Выдаліць уÑÑ‘"
+
+#: addressbook/gui/component/select-names/e-select-names-popup.c:215
+#: addressbook/gui/component/select-names/e-select-names.c:702
+#: calendar/gui/dialogs/cal-prefs-dialog.c:724
+msgid "Remove"
+msgstr "Выдаліць"
+
+#: addressbook/gui/component/select-names/e-select-names-popup.c:222
+msgid "View Contact List"
+msgstr "ПраглÑд ÑьпіÑа кантактаў"
+
+#: addressbook/gui/component/select-names/e-select-names-popup.c:222
+msgid "View Contact Info"
+msgstr "ПраглÑд кантактных зьвеÑтак"
+
+#: addressbook/gui/component/select-names/e-select-names-popup.c:229
+#: addressbook/gui/component/select-names/e-select-names-popup.c:330
+msgid "Send HTML Mail?"
+msgstr "ДаÑлаць ліÑÑ‚ у фармаце HTML?"
+
+#: addressbook/gui/component/select-names/e-select-names-popup.c:322
+#: addressbook/gui/widgets/eab-popup-control.c:983
+msgid "Add to Contacts"
+msgstr "Дадаць да кантактаў"
+
+#: addressbook/gui/component/select-names/e-select-names-popup.c:348
+msgid "Unnamed Contact"
+msgstr "Кантакт бÑз назвы"
+
+#: addressbook/gui/component/select-names/e-select-names-section.etspec.h:1
+#: addressbook/gui/component/select-names/e-select-names.etspec.h:1
+#: addressbook/gui/contact-editor/e-contact-editor-fullname.c:89
+msgid "Name"
+msgstr "ІмÑ"
+
+#: addressbook/gui/component/select-names/e-select-names-table-model.c:351
+#: addressbook/gui/component/select-names/e-select-names-text-model.c:104
+#: addressbook/gui/widgets/e-addressbook-view.c:228
+msgid "Source"
+msgstr "Крыніца"
+
+#: addressbook/gui/component/select-names/e-select-names.c:503
+#: addressbook/gui/component/select-names/select-names.glade.h:6
+#, fuzzy
+msgid "Select Contacts from Address Book"
+msgstr "Выбар кантактаў з кнігі адрÑÑаў"
+
+#: addressbook/gui/component/select-names/select-names.glade.h:2
+#, fuzzy
+msgid "<b>Contacts</b>"
+msgstr "<b>Стан:</b>"
+
+#: addressbook/gui/component/select-names/select-names.glade.h:3
+#, fuzzy
+msgid "<b>Show Contacts</b>"
+msgstr "Паказаць кантакты"
+
+#: addressbook/gui/component/select-names/select-names.glade.h:4
+#, fuzzy
+msgid "Address _Book:"
+msgstr "Кніга адрÑÑаў"
+
+#: addressbook/gui/component/select-names/select-names.glade.h:5
+#, fuzzy
+msgid "C_ategory:"
+msgstr "_КатÑгорыÑ:"
+
+#: addressbook/gui/component/select-names/select-names.glade.h:7
+#, fuzzy
+msgid "_Find"
+msgstr "Пошук"
+
+#: addressbook/gui/component/select-names/select-names.glade.h:8
+#, fuzzy
+msgid "_Search:"
+msgstr "По_шук"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:2
+#, fuzzy
+msgid "<b>Email</b>"
+msgstr "<b> Ðдпраўка пошты</b>"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:3
+#, fuzzy
+msgid "<b>Home</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:4
+#, fuzzy
+msgid "<b>Instant Messaging</b>"
+msgstr "_ДаÑлаць паведамленьне"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:5
+#, fuzzy
+msgid "<b>Job</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:6
+#, fuzzy
+msgid "<b>Miscellaneous</b>"
+msgstr "<b> Ðдпраўка пошты</b>"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:7
+#, fuzzy
+msgid "<b>Other</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:8
+#, fuzzy
+msgid "<b>Telephone</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:9
+#, fuzzy
+msgid "<b>Web Addresses</b>"
+msgstr "<b> Ðдпраўка пошты</b>"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:10
+#, fuzzy
+msgid "<b>Work</b>"
+msgstr "Працоўны тыдзень"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:11
+#: addressbook/gui/contact-editor/e-contact-editor.c:184
+#: addressbook/gui/widgets/eab-contact-display.c:333
+msgid "AIM"
+msgstr ""
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:12
+#, fuzzy
+msgid "Address:"
+msgstr "_ÐдрÑÑа:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:13
+#, fuzzy
+msgid "Anniversary:"
+msgstr "_Юбілей:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:14
+#, fuzzy
+msgid "Assistant:"
+msgstr "Памочнік"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:15
+#, fuzzy
+msgid "Birthday:"
+msgstr "_Дзень народзінаў:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:16
+#, fuzzy
+msgid "Calendar:"
+msgstr "Ка_лÑндар:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:17
+#, fuzzy
+msgid "City:"
+msgstr "_МеÑта:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:18
+#, fuzzy
+msgid "Company:"
+msgstr "ПрадпрыемÑтва"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:19
+#: addressbook/gui/contact-editor/e-contact-editor.c:272
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:172
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.etspec.h:1
+#: addressbook/gui/widgets/e-minicard.c:181
+msgid "Contact"
+msgstr "Кантакт"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:20
+#: addressbook/gui/contact-editor/e-contact-editor.c:526
+msgid "Contact Editor"
+msgstr "РÑдактар кантактаў"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:21
+#, fuzzy
+msgid "Country:"
+msgstr "_Краіна:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:22
+#, fuzzy
+msgid "Department:"
+msgstr "Па_дразьдзÑленьне:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:23
+#, fuzzy
+msgid "Free/Busy:"
+msgstr "_Вольны/ЗанÑÑ‚Ñ‹ URL:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:24
+msgid "Full _Name..."
+msgstr "Поўнае _ІмÑ..."
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:25
+#, fuzzy
+msgid "Home Page:"
+msgstr "Хатні факÑ"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:26
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:66
+#, fuzzy
+msgid "MSN Messenger"
+msgstr "_Паштовае паведамленьне"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:27
+#, fuzzy
+msgid "Mailing Address"
+msgstr "ÐдрÑÑа пошты:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:28
+#, fuzzy
+msgid "Manager:"
+msgstr "ÐœÑнаджар"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:29
+#, fuzzy
+msgid "Ni_ckname:"
+msgstr "ÐœÑнушка:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:30
+#, fuzzy
+msgid "Notes:"
+msgstr "_Заўвагі:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:31
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:63
+msgid "Novell Groupwise"
+msgstr ""
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:32
+#, fuzzy
+msgid "Office:"
+msgstr "_ОфіÑ:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:33
+#, fuzzy
+msgid "PO Box:"
+msgstr "_ÐŸÐ°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑкрынÑ:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:35
+#, fuzzy
+msgid "Personal Information"
+msgstr "Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:36
+#, fuzzy
+msgid "Profession:"
+msgstr "_ПрафÑÑÑ‹Ñ:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:37
+#, fuzzy
+msgid "Spouse:"
+msgstr "_Супруг(а):"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:38
+#, fuzzy
+msgid "State/Province:"
+msgstr "_ВоблаÑьць/Раён:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:39
+#, fuzzy
+msgid "Title:"
+msgstr "_ПаÑада:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:40
+msgid "Video Chat:"
+msgstr ""
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:41
+#, fuzzy
+msgid "Wants to receive HTML mail"
+msgstr "Жадае атрымліваць пошту у HTML"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:42
+#, fuzzy
+msgid "Web Log:"
+msgstr "ÐдрÑÑа Web-Ñтаронкі:"
+
+#. red
+#: addressbook/gui/contact-editor/contact-editor.glade.h:43
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:244
+#: addressbook/gui/contact-editor/e-contact-editor.c:201
+#: filter/filter-label.c:122 mail/em-migrate.c:1012 mail/mail-config.c:77
+#: mail/mail-config.glade.h:157
+msgid "Work"
+msgstr "Праца"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:44
+#, fuzzy
+msgid "Zip/Postal Code:"
+msgstr "_Паштовы індыкÑ:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:45
+#, fuzzy
+msgid "_Categories"
+msgstr "КатÑгорыі"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:46
+#, fuzzy
+msgid "_File under:"
+msgstr "Ðазва файла:"
+
+#: addressbook/gui/contact-editor/contact-editor.glade.h:47
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:12
+#, fuzzy
+msgid "_Where:"
+msgstr "ПаÑлужнік:"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:96
+#: addressbook/gui/widgets/eab-contact-display.c:352
+#: addressbook/gui/widgets/eab-contact-display.c:367
+msgid "Address"
+msgstr "ÐдрÑÑа"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:103
+#: addressbook/gui/contact-editor/e-contact-editor-fullname.c:95
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:141
+#: addressbook/gui/contact-editor/e-contact-editor.c:293
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:186
+#: addressbook/gui/widgets/e-addressbook-model.c:309
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:392
+#: addressbook/gui/widgets/e-minicard-label.c:164
+#: addressbook/gui/widgets/e-minicard-view-widget.c:119
+#: addressbook/gui/widgets/e-minicard-view.c:498
+#: addressbook/gui/widgets/e-minicard.c:174
+msgid "Editable"
+msgstr "Можа Ñ€Ñдагавацца"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:136
+msgid "United States"
+msgstr "Ð—Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¨Ñ‚Ð°Ñ‚Ñ‹"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:137
+msgid "Afghanistan"
+msgstr "ÐфганіÑтан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:138
+msgid "Albania"
+msgstr "ÐльбаніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:139
+msgid "Algeria"
+msgstr "Ðлжыр"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:140
+msgid "American Samoa"
+msgstr "ÐмÑрыканÑкае Самоа"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:141
+msgid "Andorra"
+msgstr "Ðндора"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:142
+msgid "Angola"
+msgstr "Ðнгола"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:143
+msgid "Anguilla"
+msgstr "Ðнгулла"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:144
+msgid "Antarctica"
+msgstr "Ðнтарктыка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:145
+msgid "Antigua And Barbuda"
+msgstr "Ðнцігуа Ñ– Барбуда"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:146
+msgid "Argentina"
+msgstr "Ðргенціна"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:147
+msgid "Armenia"
+msgstr "ÐрменіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:148
+msgid "Aruba"
+msgstr "Ðруба"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:149
+msgid "Australia"
+msgstr "ÐÑžÑтраліÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:150
+msgid "Austria"
+msgstr "ÐÑžÑтрыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:151
+msgid "Azerbaijan"
+msgstr "Ðзербайджан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:152
+msgid "Bahamas"
+msgstr "Багамы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:153
+msgid "Bahrain"
+msgstr "БахрÑйн"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:154
+msgid "Bangladesh"
+msgstr "БангладÑш"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:155
+msgid "Barbados"
+msgstr "БарбадоÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:156
+msgid "Belarus"
+msgstr "БеларуÑÑŒ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:157
+msgid "Belgium"
+msgstr "БельгіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:158
+msgid "Belize"
+msgstr "Беліз"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:159
+msgid "Benin"
+msgstr "Бенін"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:160
+msgid "Bermuda"
+msgstr "Бермуды"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:161
+msgid "Bhutan"
+msgstr "Бутан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:162
+msgid "Bolivia"
+msgstr "БалівіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:163
+msgid "Bosnia And Herzegowina"
+msgstr "БоÑÑŒÐ½Ñ–Ñ Ñ– ГерцÑгавіна"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:164
+msgid "Botswana"
+msgstr "БатÑвана"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:165
+msgid "Bouvet Island"
+msgstr "Ð’Ñ‹Ñпа Боўвіт"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:166
+msgid "Brazil"
+msgstr "БразыліÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:167
+msgid "British Indian Ocean Territory"
+msgstr "БрытанÑÐºÐ°Ñ Ñ‚ÑÑ€Ñ‹Ñ‚Ð¾Ñ€Ñ‹Ñ Ð†Ð½Ð´Ñ‹Ð¹Ñкага акіÑна"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:168
+msgid "Brunei Darussalam"
+msgstr "БрунÑÑ– ДураÑалÑм"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:169
+msgid "Bulgaria"
+msgstr "БаўгарыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:170
+msgid "Burkina Faso"
+msgstr "Буркіна ХваÑо"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:171
+msgid "Burundi"
+msgstr "Бурундзі"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:172
+msgid "Cambodia"
+msgstr "Камбоджа"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:173
+msgid "Cameroon"
+msgstr "КамÑрун"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:174
+msgid "Canada"
+msgstr "Канада"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:175
+msgid "Cape Verde"
+msgstr "Капа Ð’ÑрдÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:176
+msgid "Cayman Islands"
+msgstr "ÐšÐ°Ð¹Ð¼Ð°Ð½Ð°Ð²Ñ‹Ñ Ð²Ñ‹Ñпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:177
+msgid "Central African Republic"
+msgstr "ЦÑÐ½Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ ÐфрыканÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:178
+msgid "Chad"
+msgstr "Чад"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:179
+msgid "Chile"
+msgstr "Чылі"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:180
+msgid "China"
+msgstr "Кітай"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:181
+msgid "Christmas Island"
+msgstr "Ð’Ñ‹Ñпа РаÑÑтва"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:182
+msgid "Cocos (Keeling) Islands"
+msgstr "КакоÑÐ°Ð²Ñ‹Ñ Ð²Ñ‹Ñпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:183
+msgid "Colombia"
+msgstr "КалюмбіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:184
+msgid "Comoros"
+msgstr "КамараÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:185
+msgid "Congo"
+msgstr "Конга"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:186
+#, fuzzy
+msgid "Congo, The Democratic Republic Of The"
+msgstr "КарÑйÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:187
+msgid "Cook Islands"
+msgstr "Ð’Ñ‹Ñпы Кука"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:188
+msgid "Costa Rica"
+msgstr "КоÑта-Рыка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:189
+msgid "Cote d'Ivoire"
+msgstr "ÐšÐ¾Ñ‚Ñ Ð´Ñ Ð†Ð½Ð²Ð¾Ñ€Ñ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:190
+msgid "Croatia"
+msgstr "ХарватыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:191
+msgid "Cuba"
+msgstr "Куба"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:192
+msgid "Cyprus"
+msgstr "Кіпар"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:193
+msgid "Czech Republic"
+msgstr "ЧÑÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:194
+msgid "Denmark"
+msgstr "ДаніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:195
+msgid "Djibouti"
+msgstr "Джыбуці"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:196
+msgid "Dominica"
+msgstr "Дамініка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:197
+msgid "Dominican Republic"
+msgstr "ДамініканÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:198
+msgid "Ecuador"
+msgstr "Эквадор"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:199
+msgid "Egypt"
+msgstr "Эгіпт"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:200
+msgid "El Salvador"
+msgstr "Эль Сальвадор"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:201
+msgid "Equatorial Guinea"
+msgstr "ЭкватарыÑÐ»ÑŒÐ½Ð°Ñ Ð“Ð²Ñ–Ð½ÑÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:202
+msgid "Eritrea"
+msgstr "ЭрытрыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:203
+msgid "Estonia"
+msgstr "ЭÑтоніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:204
+msgid "Ethiopia"
+msgstr "ЭпіопіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:205
+msgid "Falkland Islands"
+msgstr "ФальклендÑÐºÐ¼Ñ Ð²Ñ‹Ñпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:206
+msgid "Faroe Islands"
+msgstr "Ð’Ñ‹Ñпы Фаро"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:207
+msgid "Fiji"
+msgstr "Хвіджі"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:208
+msgid "Finland"
+msgstr "ФінлÑндыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:209
+msgid "France"
+msgstr "ФранцыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:210
+msgid "French Guiana"
+msgstr "ФранцуÑÐºÐ°Ñ Ð“Ð²Ñ–Ñна"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:211
+msgid "French Polynesia"
+msgstr "ФранцуÑÐºÐ°Ñ ÐŸÐ°Ð»Ñ–Ð½ÑзыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:212
+msgid "French Southern Territories"
+msgstr "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ñ‹Ñ Ð¤Ñ€Ð°Ð½Ñ†ÑƒÑÐºÑ–Ñ Ð¢Ñрыторыі"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:213
+msgid "Gabon"
+msgstr "Габон"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:214
+msgid "Gambia"
+msgstr "ГамбіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:215
+msgid "Georgia"
+msgstr "ГрузыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:216
+msgid "Germany"
+msgstr "ÐÑмеччына"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:217
+msgid "Ghana"
+msgstr "Гана"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:218
+msgid "Gibraltar"
+msgstr "Гібралтар"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:219
+msgid "Greece"
+msgstr "ГрÑцыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:220
+msgid "Greenland"
+msgstr "ГрынлÑндыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:221
+msgid "Grenada"
+msgstr "ГрÑнада"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:222
+msgid "Guadeloupe"
+msgstr "ГвадÑлупа"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:223
+msgid "Guam"
+msgstr "Гуам"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:224
+msgid "Guatemala"
+msgstr "ГватÑмала"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:225
+#, fuzzy
+msgid "Guernsey"
+msgstr "ÐÑмеччына"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:226
+msgid "Guinea"
+msgstr "ГвінеÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:227
+msgid "Guinea-bissau"
+msgstr "ГвінеÑ-Бізаў"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:228
+msgid "Guyana"
+msgstr "ГайÑна"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:229
+msgid "Haiti"
+msgstr "Гаіці"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:230
+msgid "Heard And McDonald Islands"
+msgstr "Ð’Ñ‹Ñпы Херда Ñ– МакДональда"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:231
+msgid "Holy See"
+msgstr "СьвÑтое мора"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:232
+msgid "Honduras"
+msgstr "ГандураÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:233
+msgid "Hong Kong"
+msgstr "СÑн Ган"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:234
+msgid "Hungary"
+msgstr "Вугоршчына"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:235
+msgid "Iceland"
+msgstr "ІÑлÑндыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:236
+msgid "India"
+msgstr "ІндыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:237
+msgid "Indonesia"
+msgstr "ІнданÑзыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:238
+#, fuzzy
+msgid "Iran"
+msgstr "ІÑлÑндыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:239
+#, fuzzy
+msgid "Iraq"
+msgstr "Ізраіль"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:240
+msgid "Ireland"
+msgstr "ІрлÑндыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:241
+msgid "Isle of Man"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:242
+msgid "Israel"
+msgstr "Ізраіль"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:243
+msgid "Italy"
+msgstr "ІталіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:244
+msgid "Jamaica"
+msgstr "Ямайка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:245
+msgid "Japan"
+msgstr "ЯпоніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:246
+#, fuzzy
+msgid "Jersey"
+msgstr "ÐÑмеччына"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:247
+msgid "Jordan"
+msgstr "Ярдан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:248
+msgid "Kazakhstan"
+msgstr "КазахÑтан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:249
+msgid "Kenya"
+msgstr "КеніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:250
+msgid "Kiribati"
+msgstr "Кірыбаці"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:251
+#, fuzzy
+msgid "Korea, Democratic People's Republic Of"
+msgstr "КарÑйÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:252
+msgid "Korea, Republic Of"
+msgstr "КарÑйÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:253
+msgid "Kuwait"
+msgstr "КувÑйт"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:254
+msgid "Kyrgyzstan"
+msgstr "Кыргізтан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:255
+msgid "Laos"
+msgstr "ЛаоÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:256
+msgid "Latvia"
+msgstr "ЛатвіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:257
+msgid "Lebanon"
+msgstr "Лібанон"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:258
+msgid "Lesotho"
+msgstr "ЛіÑота"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:259
+msgid "Liberia"
+msgstr "ЛібÑрыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:260
+#, fuzzy
+msgid "Libya"
+msgstr "ЛібÑрыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:261
+msgid "Liechtenstein"
+msgstr "ЛіхтÑнштайн"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:262
+msgid "Lithuania"
+msgstr "ЖамойціÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:263
+msgid "Luxembourg"
+msgstr "ЛюкÑембург"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:264
+#, fuzzy
+msgid "Macao"
+msgstr "Макаў"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:265
+msgid "Macedonia"
+msgstr "МакедоніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:266
+msgid "Madagascar"
+msgstr "МадагаÑкар"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:267
+msgid "Malawi"
+msgstr "МалÑві"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:268
+msgid "Malaysia"
+msgstr "МалазыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:269
+msgid "Maldives"
+msgstr "Мальды"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:270
+msgid "Mali"
+msgstr "Малі"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:271
+msgid "Malta"
+msgstr "Мальта"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:272
+msgid "Marshall Islands"
+msgstr "Маршалавы выÑпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:273
+msgid "Martinique"
+msgstr "Марцінік"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:274
+msgid "Mauritania"
+msgstr "МаўрытаніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:275
+msgid "Mauritius"
+msgstr "МарыціўÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:276
+msgid "Mayotte"
+msgstr "МайотÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:277
+msgid "Mexico"
+msgstr "ÐœÑкÑыка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:278
+msgid "Micronesia"
+msgstr "МікранÑзыÑн"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:279
+msgid "Moldova, Republic Of"
+msgstr "Малдова"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:280
+msgid "Monaco"
+msgstr "Манака"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:281
+msgid "Mongolia"
+msgstr "МанголіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:282
+msgid "Montserrat"
+msgstr "МанÑÑрат"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:283
+msgid "Morocco"
+msgstr "Марока"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:284
+msgid "Mozambique"
+msgstr "Мазамбік"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:285
+msgid "Myanmar"
+msgstr "МаÑнмар"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:286
+msgid "Namibia"
+msgstr "ÐамібіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:287
+msgid "Nauru"
+msgstr "Ðаўру"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:288
+msgid "Nepal"
+msgstr "ÐÑпал"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:289
+msgid "Netherlands"
+msgstr "ÐідÑрлÑнды"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:290
+msgid "Netherlands Antilles"
+msgstr "ÐідÑрлÑнÑÐºÐ°Ñ ÐнціліÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:291
+msgid "New Caledonia"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:292
+msgid "New Zealand"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð—ÑлÑндыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:293
+msgid "Nicaragua"
+msgstr "Ðікарагуа"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:294
+msgid "Niger"
+msgstr "Ðігер"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:295
+msgid "Nigeria"
+msgstr "ÐігерыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:296
+msgid "Niue"
+msgstr "ÐÑŽ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:297
+msgid "Norfolk Island"
+msgstr "ÐорфалÑÐºÑ–Ñ Ð²Ñ‹Ñпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:298
+msgid "Northern Mariana Islands"
+msgstr "Ð’Ñ‹Ñпы Паўночнае Мар'Ñны"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:299
+msgid "Norway"
+msgstr "ÐарвÑгіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:300
+msgid "Oman"
+msgstr "Ðман"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:301
+msgid "Pakistan"
+msgstr "ПакіÑтан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:302
+msgid "Palau"
+msgstr "Палаў"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:303
+msgid "Palestinian Territory"
+msgstr "ПалеÑтына"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:304
+msgid "Panama"
+msgstr "Панама"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:305
+msgid "Papua New Guinea"
+msgstr "Папуа ÐÐ¾Ð²Ð°Ñ Ð“Ð²Ñ–Ð½ÑÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:306
+msgid "Paraguay"
+msgstr "Парагвай"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:307
+msgid "Peru"
+msgstr "Перу"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:308
+msgid "Philippines"
+msgstr "Хвіліпіны"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:309
+msgid "Pitcairn"
+msgstr "Паткаірн"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:310
+msgid "Poland"
+msgstr "Польша"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:311
+msgid "Portugal"
+msgstr "ПартугаліÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:312
+msgid "Puerto Rico"
+msgstr "ПуÑрта Рыка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:313
+msgid "Qatar"
+msgstr "Кватар"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:314
+msgid "Reunion"
+msgstr "Перааб'Ñднаньне"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:315
+msgid "Romania"
+msgstr "РумыніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:316
+msgid "Russian Federation"
+msgstr "РаÑейÑÐºÐ°Ñ Ð¤ÑдÑрацыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:317
+msgid "Rwanda"
+msgstr "Руанда"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:318
+msgid "Saint Kitts And Nevis"
+msgstr "СьвÑÑ‚Ñ‹Ñ ÐšÑ–Ñ‚Ñ Ñ– ÐÑвіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:319
+msgid "Saint Lucia"
+msgstr "Санта ЛючыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:320
+msgid "Saint Vincent And The Grena-dines"
+msgstr "СьвÑÑ‚Ñ‹Ñ Ð’Ñ–Ð½Ñ†Ñнт Ñ– ГрÑнады"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:321
+msgid "Samoa"
+msgstr "Самоа"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:322
+msgid "San Marino"
+msgstr "Сан Марына"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:323
+msgid "Sao Tome And Principe"
+msgstr "Сао Том і Прынцып"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:324
+msgid "Saudi Arabia"
+msgstr "СавудаўÑÐºÐ°Ñ ÐрабіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:325
+msgid "Senegal"
+msgstr "Сенегал"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:326
+msgid "Serbia And Montenegro"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:327
+msgid "Seychelles"
+msgstr "СейшÑлы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:328
+msgid "Sierra Leone"
+msgstr "С'ера ЛіонÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:329
+msgid "Singapore"
+msgstr "Сынгапур"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:330
+msgid "Slovakia"
+msgstr "СловакіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:331
+msgid "Slovenia"
+msgstr "СлавеніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:332
+msgid "Solomon Islands"
+msgstr "Саламонавы выÑпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:333
+msgid "Somalia"
+msgstr "СамаліÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:334
+msgid "South Africa"
+msgstr "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ð°Ñ Ðфрыка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:335
+msgid "South Georgia And The South Sandwich Islands"
+msgstr "Ð’Ñ‹Ñпы ÐŸÐ°ÑžÐ´Ð½ÐµÐ²Ð°Ñ Ð”Ð¶Ð¾Ñ€Ð¶Ñ‹Ñ Ñ– Паўднёвы СÑндвіч"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:336
+msgid "Spain"
+msgstr "ГішпаніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:337
+msgid "Sri Lanka"
+msgstr "Шры Ланка"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:338
+msgid "St. Helena"
+msgstr "Св. Гелена"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:339
+msgid "St. Pierre And Miquelon"
+msgstr "Св. П'ер і Мігель"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:340
+msgid "Sudan"
+msgstr "Судан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:341
+msgid "Suriname"
+msgstr "Сарынам"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:342
+msgid "Svalbard And Jan Mayen Islands"
+msgstr "Ð’Ñ‹Ñпы Свальбард Ñ– Ян Майен"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:343
+msgid "Swaziland"
+msgstr "Швазіланд"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:344
+msgid "Sweden"
+msgstr "ШвÑцыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:345
+msgid "Switzerland"
+msgstr "ЩвÑйцарыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:346
+#, fuzzy
+msgid "Syria"
+msgstr "Сарынам"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:347
+msgid "Taiwan"
+msgstr "Тайвань"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:348
+msgid "Tajikistan"
+msgstr "ТакжыкіÑтан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:349
+msgid "Tanzania, United Republic Of"
+msgstr "Ð—Ð»ÑƒÑ‡Ð°Ð½Ð°Ñ Ð Ñпубліка ТанзаніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:350
+msgid "Thailand"
+msgstr "Тайланд"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:351
+#, fuzzy
+msgid "Timor-Leste"
+msgstr "ТÑÑÑ‚"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:352
+msgid "Togo"
+msgstr "Тога"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:353
+msgid "Tokelau"
+msgstr "Такелаў"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:354
+msgid "Tonga"
+msgstr "Тонга"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:355
+msgid "Trinidad And Tobago"
+msgstr "Трынідад і Табага"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:356
+msgid "Tunisia"
+msgstr "ТуніÑÑ–Ñ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:357
+msgid "Turkey"
+msgstr "ТурцыÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:358
+msgid "Turkmenistan"
+msgstr "ТуркменіÑтан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:359
+msgid "Turks And Caicos Islands"
+msgstr "ТурÑÑ†ÐºÑ–Ñ Ñ– КейкоÑÐ°Ð²Ñ‹Ñ Ð²Ñ‹Ñпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:360
+msgid "Tuvalu"
+msgstr "Тувалю"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:361
+msgid "Uganda"
+msgstr "Уганда"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:362
+msgid "Ukraine"
+msgstr "Украіна"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:363
+msgid "United Arab Emirates"
+msgstr "Ð—Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐрабÑÐºÑ–Ñ Ð­Ð¼Ñ–Ñ€Ð°Ñ‚Ñ‹"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:364
+msgid "United Kingdom"
+msgstr "Злучанае КаралеўÑтва"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:365
+msgid "United States Minor Outlying Islands"
+msgstr "ÐÑÑ–Ñтотна Ð±Ð»Ñ–Ð·ÐºÑ–Ñ Ð´Ð° Злучаных штатаў выÑпы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:366
+msgid "Uruguay"
+msgstr "Уругвай"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:367
+msgid "Uzbekistan"
+msgstr "УзбÑкіÑтан"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:368
+msgid "Vanuatu"
+msgstr "Ванааці"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:369
+msgid "Venezuela"
+msgstr "ВенÑÑуÑла"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:370
+msgid "Viet Nam"
+msgstr "Віетнам"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:371
+msgid "Virgin Islands, British"
+msgstr "ВірджінÑÐºÑ–Ñ Ð²Ñ‹Ñпы, БрытаніÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:372
+msgid "Virgin Islands, U.S."
+msgstr "ВірджынÑÐºÑ–Ñ Ð²Ñ‹Ñпы, ЗШÐ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:373
+msgid "Wallis And Futuna Islands"
+msgstr "Ð’Ñ‹Ñпы ВаліÑа Ñ– Хватана"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:374
+msgid "Western Sahara"
+msgstr "ЗаходнÑÑ Ð¡Ð°Ñ…Ð°Ñ€Ð°"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:375
+msgid "Yemen"
+msgstr "Йемен"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:376
+msgid "Zambia"
+msgstr "ЗамбіÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:377
+msgid "Zimbabwe"
+msgstr "Зімбабве"
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:62
+#, fuzzy
+msgid "AOL Instant Messenger"
+msgstr "_ДаÑлаць паведамленьне"
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:64
+#: addressbook/gui/contact-editor/e-contact-editor.c:185
+#: addressbook/gui/widgets/eab-contact-display.c:336
+#, fuzzy
+msgid "Jabber"
+msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð±Ñз назвы"
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:65
+msgid "Yahoo Messenger"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:67
+#: addressbook/gui/contact-editor/e-contact-editor.c:188
+#: addressbook/gui/widgets/eab-contact-display.c:335
+msgid "ICQ"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:118
+#, fuzzy
+msgid "Service"
+msgstr "ПаÑлуга гатова"
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:127
+#: calendar/gui/dialogs/cal-prefs-dialog.c:578
+#: calendar/gui/e-cal-list-view.etspec.h:3
+#, fuzzy
+msgid "Location"
+msgstr "МейÑца:"
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:134
+#, fuzzy
+msgid "Username"
+msgstr "_Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка:"
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:240
+#: addressbook/gui/contact-editor/e-contact-editor.c:202
+msgid "Home"
+msgstr "Хатні"
+
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:248
+#: addressbook/gui/contact-editor/e-contact-editor.c:203
+msgid "Other"
+msgstr "Іншы"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:186
+#: addressbook/gui/widgets/eab-contact-display.c:338
+#, fuzzy
+msgid "Yahoo"
+msgstr "Ðра"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:187
+#: addressbook/gui/widgets/eab-contact-display.c:337
+msgid "MSN"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:189
+#: addressbook/gui/widgets/eab-contact-display.c:334
+#, fuzzy
+msgid "GroupWise"
+msgstr "Група"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:258
+#, fuzzy
+msgid "Source Book"
+msgstr "Крыніца"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:265
+msgid "Target Book"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:279
+#, fuzzy
+msgid "Is New Contact"
+msgstr "Ðовы кантакт"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:286
+msgid "Writable Fields"
+msgstr "Палі у ÑÐºÑ–Ñ Ð¼Ð¾Ð¶Ð½Ð° піÑаць"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:300
+msgid "Changed"
+msgstr "Зьменена"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:2428
+msgid "This contact belongs to these categories:"
+msgstr "ГÑÑ‚Ñ‹ кантакт належыць наÑтупным катÑгорыÑм:"
+
+#. Create the selector
+#: addressbook/gui/contact-editor/e-contact-editor.c:2505
+#, fuzzy
+msgid "Please select an image for this contact"
+msgstr "ВыбÑрыце адзін з наÑтупных варыÑнтаў"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:2509
+#, fuzzy
+msgid "No image"
+msgstr "Хатні"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:2712
+#, fuzzy
+msgid ""
+"The contact data is invalid:\n"
+"\n"
+msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° вÑртаньнÑ"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:2740
+#, fuzzy
+msgid "Invalid contact."
+msgstr "ÐŸÐ°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ Ð¼Ñта"
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:2799
+msgid ""
+"The contact cannot be saved to the selected address book. Do you want to "
+"discard changes?"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-editor.c:2822
+msgid ""
+"You are moving the contact from one address book to another, but it cannot "
+"be removed from the source. Do you want to save a copy instead?"
+msgstr ""
+
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:280
+msgid "Contact Quick-Add"
+msgstr "Хуткае даданьне кантакта"
+
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:283
+msgid "_Edit Full"
+msgstr "РÑдагаваньне поўнага імÑ"
+
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:301
+#: mail/mail-config.glade.h:166
+msgid "_Full Name:"
+msgstr "Поўнае імÑ:"
+
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:307
+msgid "E-_mail:"
+msgstr "Э. пошта:"
+
+#: addressbook/gui/contact-editor/eab-editor.c:319
+msgid ""
+"Are you sure you want\n"
+"to delete these contacts?"
+msgstr ""
+"Ð’Ñ‹ ўпÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце\n"
+"выдаліць гÑÑ‚Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹?"
+
+#: addressbook/gui/contact-editor/eab-editor.c:322
+msgid ""
+"Are you sure you want\n"
+"to delete this contact?"
+msgstr ""
+"Ð’Ñ‹ ўпÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце\n"
+"выдаліць гÑÑ‚Ñ‹ кантакт?"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:2
+msgid "Address _2:"
+msgstr "ÐдрÑÑа _2:"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:3
+msgid "Ci_ty:"
+msgstr "_МеÑта:"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:4
+msgid "Countr_y:"
+msgstr "_Краіна:"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:5
+msgid "Full Address"
+msgstr "ÐŸÐ¾ÑžÐ½Ð°Ñ Ð°Ð´Ñ€ÑÑа"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:6
+msgid "_Address:"
+msgstr "_ÐдрÑÑа:"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:7
+msgid "_PO Box:"
+msgstr "_ÐŸÐ°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑкрынÑ:"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:8
+msgid "_State/Province:"
+msgstr "_ВоблаÑьць/Раён:"
+
+#: addressbook/gui/contact-editor/fulladdr.glade.h:9
+msgid "_ZIP Code:"
+msgstr "_Паштовы індыкÑ:"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:2
+msgid "Dr."
+msgstr "Доктар"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:3
+msgid "Esq."
+msgstr "ЭÑкв."
+
+#: addressbook/gui/contact-editor/fullname.glade.h:4
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:15
+msgid "Full Name"
+msgstr "Поўнае імÑ"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:5
+msgid "I"
+msgstr "І"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:6
+msgid "II"
+msgstr "II"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:7
+msgid "III"
+msgstr "III"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:8
+msgid "Jr."
+msgstr "мл."
+
+#: addressbook/gui/contact-editor/fullname.glade.h:9
+msgid "Miss"
+msgstr "Спарычна"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:10
+msgid "Mr."
+msgstr "Сп."
+
+#: addressbook/gui/contact-editor/fullname.glade.h:11
+msgid "Mrs."
+msgstr "Сп."
+
+#: addressbook/gui/contact-editor/fullname.glade.h:12
+msgid "Ms."
+msgstr "Сп."
+
+#: addressbook/gui/contact-editor/fullname.glade.h:13
+msgid "Sr."
+msgstr "Сп."
+
+#: addressbook/gui/contact-editor/fullname.glade.h:14
+msgid "_First:"
+msgstr "_ІмÑ:"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:15
+msgid "_Last:"
+msgstr "Прозьвішча:"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:16
+msgid "_Middle:"
+msgstr "_Ð†Ð¼Ñ Ð¿Ð° бацьку:"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:17
+msgid "_Suffix:"
+msgstr "_СуфікÑ:"
+
+#: addressbook/gui/contact-editor/fullname.glade.h:18
+msgid "_Title:"
+msgstr "_ПаÑада:"
+
+#: addressbook/gui/contact-editor/im.glade.h:2
+#, fuzzy
+msgid "Add IM Account"
+msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
+
+#: addressbook/gui/contact-editor/im.glade.h:3
+#, fuzzy
+msgid "_Account name:"
+msgstr "Ðазва уліковага запіÑа"
+
+#: addressbook/gui/contact-editor/im.glade.h:4
+#, fuzzy
+msgid "_IM Service:"
+msgstr "ПаÑлуга гатова"
+
+#: addressbook/gui/contact-editor/im.glade.h:5
+#, fuzzy
+msgid "_Location:"
+msgstr "МейÑца:"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:1
+msgid "\n"
+msgstr "\n"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:4
+msgid "Add an email to the List"
+msgstr ""
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:5
+#, fuzzy
+msgid "Insert email adresses from Adress Book"
+msgstr "Выбар кантактаў з кнігі адрÑÑаў"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:6
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:714
+msgid "Members"
+msgstr "Удзельнікі"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:7
+#, fuzzy
+msgid "Remove an email address from the List"
+msgstr "Выдаліць Ð²Ñ‹Ð±Ñ€Ð°Ð½Ñ‹Ñ ÑлемÑнты Ñа ÑьпіÑа укладаньнÑÑž"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:8
+#, fuzzy
+msgid "Select"
+msgstr "Вылучаны"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:9
+msgid "_Hide addresses when sending mail to this list"
+msgstr "Хаваць адрÑÑÑ‹ пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– пошты Ñž гÑÑ‚Ñ‹ ÑьпіÑ"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:10
+msgid "_List name:"
+msgstr "Ðазва ÑьпіÑа:"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:11
+msgid "_Type an email address or drag a contact into the list below:"
+msgstr "Пазначце Ñ. пошту ці перацÑгніце кантакт у ÑÑŒÐ¿Ñ–Ñ Ð½Ñ–Ð¶Ñй:"
+
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:13
+#: smime/gui/smime-ui.glade.h:48
+msgid "dialog1"
+msgstr "дыÑлёг1"
+
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:165
+#: addressbook/gui/widgets/e-addressbook-model.c:295
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:378
+#: addressbook/gui/widgets/e-addressbook-view.c:221
+#: addressbook/gui/widgets/e-minicard-view-widget.c:105
+#: addressbook/gui/widgets/e-minicard-view.c:484
+msgid "Book"
+msgstr "Кніга"
+
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:179
+msgid "Is New List"
+msgstr "ГÑта новы ÑьпіÑ"
+
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:736
+#: calendar/gui/e-meeting-list-view.c:60
+#: calendar/gui/e-meeting-list-view.c:457
+msgid "Required Participants"
+msgstr "ÐŸÐ°Ñ‚Ñ€Ð°Ð±Ð°Ð²Ð°Ð½Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
+
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:813
+msgid "Contact List Editor"
+msgstr "РÑдактар ÑьпіÑу кантактаў"
+
+#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:1
+msgid "Changed Contact:"
+msgstr "Зьменены кантакт:"
+
+#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:2
+msgid "Conflicting Contact:"
+msgstr "Канфліктны кантакт:"
+
+#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:3
+#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:1
+msgid "Duplicate Contact Detected"
+msgstr "Вызначана дублÑваньне кантактаў"
+
+#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:4
+msgid ""
+"The changed email or name of this contact already\n"
+"exists in this folder. Would you like to add it anyway?"
+msgstr ""
+"Ð—ÑŒÐ¼ÐµÐ½ÐµÐ½Ð°Ñ Ð°Ð´Ñ€ÑÑа ці Ñ–Ð¼Ñ Ð³Ñтае кантактнае аÑобы ужо\n"
+"прыÑутнічаюць у гÑтае Ñ‚Ñчцы. УÑÑ‘ адно жадаеце дадаць?"
+
+#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:2
+msgid "New Contact:"
+msgstr "Ðовы кантакт:"
+
+#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:3
+msgid "Original Contact:"
+msgstr "Ðрыгінальны кантакт:"
+
+#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:4
+msgid ""
+"The name or email address of this contact already exists\n"
+"in this folder. Would you like to add it anyway?"
+msgstr ""
+"Ð†Ð¼Ñ Ñ†Ñ– Ñ. пошта гÑтае кантактнае аÑобы ужо Ñ–Ñнуюць\n"
+"у гÑтае Ñ‚Ñчцы. УÑÑ‘ адно жадаеце дадаць?"
+
+#. FIXME: get the toplevel window...
+#: addressbook/gui/search/e-addressbook-search-dialog.c:170
+#: widgets/misc/e-filter-bar.c:156
+msgid "Advanced Search"
+msgstr "ÐдмыÑловы пошук"
+
+#: addressbook/gui/widgets/e-addressbook-model.c:148
+#, fuzzy
+msgid "No contacts"
+msgstr "Паказаць кантакты"
+
+#: addressbook/gui/widgets/e-addressbook-model.c:151
+#, fuzzy, c-format
+msgid "%d contact"
+msgid_plural "%d contacts"
+msgstr[0] "Кантакты"
+msgstr[1] "Кантакты"
+
+#: addressbook/gui/widgets/e-addressbook-model.c:302
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:385
+#: addressbook/gui/widgets/e-addressbook-view.c:235
+#: addressbook/gui/widgets/e-minicard-view-widget.c:112
+#: addressbook/gui/widgets/e-minicard-view.c:491
+msgid "Query"
+msgstr "Запыт"
+
+#: addressbook/gui/widgets/e-addressbook-model.c:445
+msgid "Error getting book view"
+msgstr "Памылка Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ñ€Ð°Ð³Ð»Ñду кнігі"
+
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:399
+msgid "Model"
+msgstr "МадÑлÑ"
+
+#: addressbook/gui/widgets/e-addressbook-table-adapter.c:103
+msgid "Error modifying card"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð·ÑŒÐ¼ÐµÐ½Ñ‹ карткі"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:167
+msgid "Name begins with"
+msgstr "Ðазва пачынаецца з"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:168
+msgid "Email begins with"
+msgstr "Э. пошта пачынаецца з"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:169
+#: calendar/gui/cal-search-bar.c:54
+msgid "Category is"
+msgstr "КатÑгорыÑ"
+
+#. We attach subitems below
+#: addressbook/gui/widgets/e-addressbook-view.c:170
+#: calendar/gui/cal-search-bar.c:49
+msgid "Any field contains"
+msgstr "Любое поле ўтрымлівае"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:171
+#: addressbook/gui/widgets/e-addressbook-view.c:176
+msgid "Advanced..."
+msgstr "ÐдмыÑловае..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:242
+#: calendar/gui/dialogs/meeting-page.etspec.h:11
+#: calendar/gui/e-calendar-table.etspec.h:13
+#: calendar/gui/e-meeting-list-view.c:227
+#: calendar/gui/e-meeting-time-sel.etspec.h:11
+msgid "Type"
+msgstr "Тып"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:544
+#, fuzzy
+msgid "Address Book"
+msgstr "Кніга адрÑÑаў"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:888
+#: addressbook/gui/widgets/e-addressbook-view.c:1108
+#: addressbook/gui/widgets/e-addressbook-view.c:2098
+#: ui/evolution-addressbook.xml.h:19
+#, fuzzy
+msgid "Save as VCard..."
+msgstr "Захаваць Ñк візытоўку (VCard)"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1095
+msgid "New Contact..."
+msgstr "Ðовы кантакт..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1096
+msgid "New Contact List..."
+msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1099
+msgid "Go to Folder..."
+msgstr "Пераход у Ñ‚Ñчку..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1100
+msgid "Import..."
+msgstr "Імпарт..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1102
+msgid "Search for Contacts..."
+msgstr "Пошук кантактаў..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1103
+#, fuzzy
+msgid "Address Book Sources..."
+msgstr "Крыніцы кнігі адрÑÑаў..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1105
+msgid "Pilot Settings..."
+msgstr "УÑталёўкі \"Пілёта\"..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1109
+#: ui/evolution-addressbook.xml.h:10
+msgid "Forward Contact"
+msgstr "ПераÑлаць кантакт"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1110
+msgid "Send Message to Contact"
+msgstr "ДаÑлаць паведамленьне кантактанае аÑобе"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1111 calendar/gui/print.c:2480
+#: ui/evolution-addressbook.xml.h:16 ui/evolution-calendar.xml.h:19
+#: ui/evolution-comp-editor.xml.h:8 ui/evolution-contact-editor.xml.h:5
+#: ui/evolution-mail-message.xml.h:80 ui/evolution-tasks.xml.h:14
+msgid "Print"
+msgstr "Друк"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1113
+msgid "Print Envelope"
+msgstr "Друкаваць паштоўку"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1117
+#, fuzzy
+msgid "Copy to Address Book..."
+msgstr "Кніга адрÑÑаў..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1118
+#, fuzzy
+msgid "Move to Address Book..."
+msgstr "Кніга адрÑÑаў..."
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1121
+#: ui/evolution-addressbook.xml.h:6 ui/evolution-tasks.xml.h:4
+msgid "Cut"
+msgstr "Выразаць"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1122
+#: calendar/gui/calendar-component.c:428 calendar/gui/tasks-component.c:374
+#: ui/evolution-addressbook.xml.h:2 ui/evolution-mail-message.xml.h:9
+#: ui/evolution-tasks.xml.h:2
+msgid "Copy"
+msgstr "КапіÑваць"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1123
+#: ui/evolution-addressbook.xml.h:13 ui/evolution-tasks.xml.h:11
+msgid "Paste"
+msgstr "УÑтавіць"
+
+#: addressbook/gui/widgets/e-addressbook-view.c:1128
+#: calendar/gui/e-calendar-view.c:1418
+msgid "Current View"
+msgstr "БÑгучы выглÑд"
+
+#. All, unmatched, separator
+#: addressbook/gui/widgets/e-addressbook-view.c:1683
+#: calendar/gui/cal-search-bar.c:358
+msgid "Any Category"
+msgstr "Ð›ÑŽÐ±Ð°Ñ ÐºÐ°Ñ‚ÑгорыÑ"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:1
+msgid "Assistant"
+msgstr "Памочнік"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:2
+msgid "Assistant Phone"
+msgstr "ТÑлефон памочніка"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:3
+msgid "Business Fax"
+msgstr "Працоўны факÑ"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:4
+msgid "Business Phone"
+msgstr "Працоўны Ñ‚Ñлефон"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:5
+msgid "Business Phone 2"
+msgstr "Працоўны Ñ‚Ñлефон 2"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:6
+msgid "Callback Phone"
+msgstr "ТÑлефон зваротнага выкліку"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:7
+msgid "Car Phone"
+msgstr "ТÑлефон у аўтамабіле"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:8
+#: calendar/gui/e-cal-list-view.etspec.h:1
+#: calendar/gui/e-calendar-table.etspec.h:3
+msgid "Categories"
+msgstr "КатÑгорыі"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:9
+msgid "Company Phone"
+msgstr "ТÑлефон уÑтановы"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:10
+#: addressbook/gui/widgets/eab-contact-display.c:547 smime/lib/e-cert.c:826
+msgid "Email"
+msgstr "Э. пошта"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:11
+#: addressbook/gui/widgets/eab-popup-control.c:442
+msgid "Email 2"
+msgstr "Э. пошта 2"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:12
+#: addressbook/gui/widgets/eab-popup-control.c:452
+msgid "Email 3"
+msgstr "Э. пошта 3"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:13
+msgid "Family Name"
+msgstr "Прозьвішча"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:14
+msgid "File As"
+msgstr "Файл Ñк"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:16
+#, fuzzy
+msgid "Given Name"
+msgstr "Ðазва полÑ"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:17
+msgid "Home Fax"
+msgstr "Хатні факÑ"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:18
+msgid "Home Phone"
+msgstr "Хатні Ñ‚Ñлефон"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:19
+msgid "Home Phone 2"
+msgstr "Хатні Ñ‚Ñлефон 2"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:20
+#, fuzzy
+msgid "ISDN Phone"
+msgstr "ТÑлефон"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:21
+#, fuzzy
+msgid "Journal"
+msgstr "Ярдан"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:22
+msgid "Manager"
+msgstr "ÐœÑнаджар"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:23
+#: addressbook/gui/widgets/eab-contact-display.c:366
+msgid "Mobile Phone"
+msgstr "Мабільны Ñ‚Ñлефон"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:24
+msgid "Nickname"
+msgstr "ÐœÑнушка"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:25
+#: addressbook/gui/widgets/eab-contact-display.c:377
+msgid "Note"
+msgstr "Заўвага"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:26
+msgid "Office"
+msgstr "ОфіÑ"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:27
+#: addressbook/gui/widgets/eab-contact-display.c:347
+msgid "Organization"
+msgstr "УÑтанова"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:28
+msgid "Other Fax"
+msgstr "Іншы Fax"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:29
+msgid "Other Phone"
+msgstr "Ð†Ð½ÑˆÑ‹Ñ Ñ‚Ñлефоны"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:30
+msgid "Pager"
+msgstr "ПÑйджар"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:31
+msgid "Primary Phone"
+msgstr "ПершаÑны Ñ‚Ñлефон"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:32
+msgid "Radio"
+msgstr "Радыё"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:33
+#: calendar/gui/dialogs/meeting-page.etspec.h:9
+#: calendar/gui/e-meeting-list-view.c:234
+#: calendar/gui/e-meeting-time-sel.etspec.h:9
+msgid "Role"
+msgstr "РолÑ"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:34
+msgid "Spouse"
+msgstr "Супруг(а)"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:35
+#, fuzzy
+msgid "TTYTDD"
+msgstr "TTY/TDD"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:36
+msgid "Telex"
+msgstr "ТÑлекÑ"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:37
+msgid "Title"
+msgstr "ПаÑада"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:38
+#, fuzzy
+msgid "Unit"
+msgstr "Ðечытанае"
+
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:39
+msgid "Web Site"
+msgstr "І-нÑÑ‚ плÑцоўка"
+
+#: addressbook/gui/widgets/e-minicard-label.c:115
+#: addressbook/gui/widgets/e-minicard.c:137
+msgid "Width"
+msgstr "ШырынÑ"
+
+#: addressbook/gui/widgets/e-minicard-label.c:122
+#: addressbook/gui/widgets/e-minicard.c:144
+msgid "Height"
+msgstr "ВышынÑ"
+
+#: addressbook/gui/widgets/e-minicard-label.c:129
+#: addressbook/gui/widgets/e-minicard.c:152
+msgid "Has Focus"
+msgstr "Мае заÑÑроджаньне"
+
+#: addressbook/gui/widgets/e-minicard-label.c:136
+msgid "Field"
+msgstr "Поле"
+
+#: addressbook/gui/widgets/e-minicard-label.c:143
+msgid "Field Name"
+msgstr "Ðазва полÑ"
+
+#: addressbook/gui/widgets/e-minicard-label.c:150
+msgid "Text Model"
+msgstr "МадÑль Ñ‚ÑкÑта"
+
+#: addressbook/gui/widgets/e-minicard-label.c:157
+msgid "Max field name length"
+msgstr "МакÑÑ‹Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð°ÑžÐ¶Ñ‹Ð½Ñ Ð¿Ð¾Ð»Ñ Ñ–Ð¼Ñ"
+
+#: addressbook/gui/widgets/e-minicard-view-widget.c:126
+msgid "Column Width"
+msgstr "Ð¨Ñ‹Ñ€Ñ‹Ð½Ñ Ñлупка"
+
+#: addressbook/gui/widgets/e-minicard-view.c:164
+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/widgets/e-minicard-view.c:167
+msgid ""
+"\n"
+"\n"
+"There are no items to show in this view."
+msgstr ""
+"\n"
+"\n"
+"ÐдÑутнічаюць запіÑÑ‹ Ð´Ð»Ñ Ð¿Ñ€Ð°Ð³Ð»Ñду."
+
+#: addressbook/gui/widgets/e-minicard-view.c:477
+msgid "Adapter"
+msgstr "Ðдаптар"
+
+#: addressbook/gui/widgets/e-minicard.c:160
+msgid "Selected"
+msgstr "Вылучаны"
+
+#: addressbook/gui/widgets/e-minicard.c:167
+msgid "Has Cursor"
+msgstr "Мае курÑор"
+
+#: addressbook/gui/widgets/eab-contact-display.c:133
+#: addressbook/gui/widgets/eab-contact-display.c:196
+msgid "(map)"
+msgstr ""
+
+#: addressbook/gui/widgets/eab-contact-display.c:143
+#: addressbook/gui/widgets/eab-contact-display.c:209
+msgid "map"
+msgstr ""
+
+#: addressbook/gui/widgets/eab-contact-display.c:261
+#: addressbook/gui/widgets/eab-contact-display.c:528
+#, fuzzy
+msgid "List Members"
+msgstr "Удзельнікі"
+
+#: addressbook/gui/widgets/eab-contact-display.c:324
+#: addressbook/gui/widgets/eab-contact-display.c:326
+#, fuzzy
+msgid "E-mail"
+msgstr "Э. пошта"
+
+#: addressbook/gui/widgets/eab-contact-display.c:348
+#, fuzzy
+msgid "Position"
+msgstr "БоÑтан"
+
+#: addressbook/gui/widgets/eab-contact-display.c:349
+msgid "Video Conferencing"
+msgstr ""
+
+#: addressbook/gui/widgets/eab-contact-display.c:350
+#: addressbook/gui/widgets/eab-contact-display.c:365
+#, fuzzy
+msgid "Phone"
+msgstr "ТÑлефон"
+
+#: addressbook/gui/widgets/eab-contact-display.c:351
+msgid "Fax"
+msgstr ""
+
+#: addressbook/gui/widgets/eab-contact-display.c:355
+#, fuzzy
+msgid "work"
+msgstr "Праца"
+
+#: addressbook/gui/widgets/eab-contact-display.c:362
+msgid "WWW"
+msgstr ""
+
+#: addressbook/gui/widgets/eab-contact-display.c:363
+#: addressbook/gui/widgets/eab-contact-display.c:582
+#, fuzzy
+msgid "Blog"
+msgstr "Більбао"
+
+#: addressbook/gui/widgets/eab-contact-display.c:370
+#, fuzzy
+msgid "personal"
+msgstr "ПÑÑ€Ñанальнае"
+
+#: addressbook/gui/widgets/eab-contact-display.c:543
+#, fuzzy
+msgid "Job Title"
+msgstr "ПаÑа_да:"
+
+#: addressbook/gui/widgets/eab-contact-display.c:574
+#, fuzzy
+msgid "Home page"
+msgstr "Хатні факÑ"
+
+#. E_BOOK_ERROR_OK
+#: addressbook/gui/widgets/eab-gui-util.c:49
+msgid "Success"
+msgstr "ПаÑьпÑхова"
+
+#. E_BOOK_ERROR_INVALID_ARG
+#. E_BOOK_ERROR_BUSY
+#: addressbook/gui/widgets/eab-gui-util.c:51
+msgid "Backend busy"
+msgstr ""
+
+#. E_BOOK_ERROR_REPOSITORY_OFFLINE
+#: addressbook/gui/widgets/eab-gui-util.c:52
+msgid "Repository offline"
+msgstr "Сховішча знаходзіцца Ñž адлучаным Ñтане"
+
+#. E_BOOK_ERROR_NO_SUCH_BOOK
+#: addressbook/gui/widgets/eab-gui-util.c:53
+#, fuzzy
+msgid "Address Book does not exist"
+msgstr "Кніга адрÑÑаў адÑутнічае"
+
+#. E_BOOK_ERROR_NO_SELF_CONTACT
+#: addressbook/gui/widgets/eab-gui-util.c:54
+#, fuzzy
+msgid "No Self Contact defined"
+msgstr "Ðовы ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
+
+#. E_BOOK_ERROR_URI_NOT_LOADED
+#. E_BOOK_ERROR_URI_ALREADY_LOADED
+#. E_BOOK_ERROR_PERMISSION_DENIED
+#: addressbook/gui/widgets/eab-gui-util.c:57
+msgid "Permission denied"
+msgstr "Ðдмоўлена Ñž доÑтупе"
+
+#. E_BOOK_ERROR_CONTACT_NOT_FOUND
+#: addressbook/gui/widgets/eab-gui-util.c:58
+#, fuzzy
+msgid "Contact not found"
+msgstr "Картка Ð½Ñ Ð°Ð´ÑˆÑƒÐºÐ°Ð½Ð°"
+
+#. E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS
+#: addressbook/gui/widgets/eab-gui-util.c:59
+#, fuzzy
+msgid "Contact ID already exists"
+msgstr "Ід карткі ужо Ñ–Ñнуе"
+
+#. E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED
+#: addressbook/gui/widgets/eab-gui-util.c:60
+msgid "Protocol not supported"
+msgstr "Пратакол не падтрымліваецца"
+
+#. E_BOOK_ERROR_CANCELLED
+#: addressbook/gui/widgets/eab-gui-util.c:61
+#: calendar/gui/dialogs/task-details-page.glade.h:3
+#: calendar/gui/e-cal-component-preview.c:233
+#: calendar/gui/e-cal-model-tasks.c:352 calendar/gui/e-cal-model-tasks.c:655
+#: calendar/gui/e-calendar-table.c:473 calendar/gui/print.c:2349
+#: camel/camel-service.c:724 camel/camel-service.c:762
+#: camel/camel-service.c:846 camel/camel-service.c:886
+#: camel/providers/pop3/camel-pop3-store.c:456
+#: camel/providers/pop3/camel-pop3-store.c:537
+msgid "Cancelled"
+msgstr "Ðдменена"
+
+#. E_BOOK_ERROR_COULD_NOT_CANCEL
+#: addressbook/gui/widgets/eab-gui-util.c:62
+#, fuzzy
+msgid "Could not cancel"
+msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ падзеленую Ñ‚Ñчку: %s"
+
+#. E_BOOK_ERROR_AUTHENTICATION_FAILED
+#: addressbook/gui/widgets/eab-gui-util.c:63
+msgid "Authentication Failed"
+msgstr "Збой аўтарызацыі"
+
+#. E_BOOK_ERROR_AUTHENTICATION_REQUIRED
+#: addressbook/gui/widgets/eab-gui-util.c:64
+msgid "Authentication Required"
+msgstr "Патрабуе аўтарызацыю"
+
+#. E_BOOK_ERROR_TLS_NOT_AVAILABLE
+#: addressbook/gui/widgets/eab-gui-util.c:65
+msgid "TLS not Available"
+msgstr "TLS адÑутнічае"
+
+#. E_BOOK_ERROR_CORBA_EXCEPTION
+#. E_BOOK_ERROR_NO_SUCH_SOURCE
+#: addressbook/gui/widgets/eab-gui-util.c:67
+#, fuzzy
+msgid "No such source"
+msgstr "ÐÑма гÑткага паведамленьнÑ"
+
+#. E_BOOK_ERROR_OTHER_ERROR
+#: addressbook/gui/widgets/eab-gui-util.c:68
+msgid "Other error"
+msgstr "Ð†Ð½ÑˆÐ°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
+
+#: addressbook/gui/widgets/eab-gui-util.c:91
+#, fuzzy
+msgid ""
+"We were unable to open this addressbook. Please check that the path exists "
+"and that you have permission to access it."
+msgstr ""
+"ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ гÑтую кнігу адрÑÑаў. Праверце, што шлÑÑ… Ñ–Ñнуе\n"
+"Ñ– што у Ð²Ð°Ñ Ñ‘Ñьць Ð½ÐµÐ°Ð±Ñ…Ð¾Ð´Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ð²Ñ‹ доÑтупа."
+
+#: addressbook/gui/widgets/eab-gui-util.c:98
+#, fuzzy
+msgid ""
+"We were unable to open this addressbook. This either means you have entered "
+"an incorrect URI, or the LDAP server is unreachable."
+msgstr ""
+"ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ гÑтую кнігу адрÑÑаў. Магчыма\n"
+"вы пазначылі нерÑчаіÑны URI, ці паÑлужнік LDAP не адказвае."
+
+#: addressbook/gui/widgets/eab-gui-util.c:103
+#, fuzzy
+msgid ""
+"This version of Evolution does not have LDAP support compiled in to it. If "
+"you want to use LDAP in Evolution, you must install an LDAP-enabled "
+"Evolution package."
+msgstr ""
+"ГÑÑ‚Ð°Ñ Ð²ÑÑ€ÑÑ‹Ñ \"Эвалюцыі\" не мае ўбудаванае падтрымкі LDAP.\n"
+"Калі Ð’Ñ‹ жадаеце выкарыÑтоўваць LDAP у \"Эвалюцыі\", муÑіце\n"
+"пераÑабраÑÑŒ праграму з зыходнага Ñ‚ÑкÑта Ñž CVS паÑьлÑ\n"
+"уÑталёўкі OpenLDAP, Ñкі можна атрымаць па ÑпаÑылцы ніжÑй.\n"
+
+#: addressbook/gui/widgets/eab-gui-util.c:110
+#, fuzzy
+msgid ""
+"We were unable to open this addressbook. This either means you have entered "
+"an incorrect URI, or the server is unreachable."
+msgstr ""
+"ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ гÑтую кнігу адрÑÑаў. Магчыма\n"
+"вы пазначылі нерÑчаіÑны URI, ці паÑлужнік не адказвае."
+
+#: addressbook/gui/widgets/eab-gui-util.c:130
+msgid ""
+"More cards matched this query than either the server is \n"
+"configured to return or Evolution is configured to display.\n"
+"Please make your search more specific or raise the result limit in\n"
+"the directory server preferences for this addressbook."
+msgstr ""
+"Зашмат картак Ñупала з вашым запытам, Ñ– \n"
+"\"ЭвалюцыÑ\" Ð½Ñ Ð¼Ð¾Ð¶Ð° адлюÑтраваць Ñ–Ñ… уÑе.\n"
+"Калі лаÑка, зрабіце больш падрабÑзны пошук,\n"
+"ці абмÑжуйце памер адказу кнігі адрÑÑаў у\n"
+"перавагах паÑлужніка каталёгаў."
+
+#: addressbook/gui/widgets/eab-gui-util.c:136
+msgid ""
+"The time to execute this query exceeded the server limit or the limit\n"
+"you have configured for this addressbook. Please make your search\n"
+"more specific or raise the time limit in the directory server\n"
+"preferences for this addressbook."
+msgstr ""
+"Ð§Ð°Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ паÑлужніка перавышаны ці вы маеце абмежаваньне\n"
+"Ð´Ð»Ñ Ð³Ñтае кнігі адрÑÑаў. Калі лаÑка, зрабіце больш падрабÑзны\n"
+"пошук ці зьмÑніце абмежаваньне чаÑу Ð´Ð»Ñ Ð³Ñтае кнігі адрÑÑаў у\n"
+"перавагах паÑлужніка каталёгаў."
+
+#: addressbook/gui/widgets/eab-gui-util.c:142
+msgid "The backend for this addressbook was unable to parse this query."
+msgstr "Праграма гÑтае кнігі адрÑÑаў Ð½Ñ Ð·Ð´Ð¾Ð»ÐµÐ»Ð° разабраць запыт."
+
+#: addressbook/gui/widgets/eab-gui-util.c:145
+msgid "The backend for this addressbook refused to perform this query."
+msgstr "Праграма гÑтае кнігі адрÑÑаў адмовіла Ñž запыце."
+
+#: addressbook/gui/widgets/eab-gui-util.c:148
+msgid "This query did not complete successfully."
+msgstr "Запыт Ð½Ñ Ð±Ñ‹Ñž паÑьпÑхова выкананы."
+
+#: addressbook/gui/widgets/eab-gui-util.c:170
+msgid "Error adding list"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ ÑьпіÑу"
+
+#: addressbook/gui/widgets/eab-gui-util.c:170
+#: addressbook/gui/widgets/eab-gui-util.c:640
+#, fuzzy
+msgid "Error adding contact"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ñ€Ñ‚ÐºÑ–"
+
+#: addressbook/gui/widgets/eab-gui-util.c:181
+msgid "Error modifying list"
+msgstr "Памылка Ñ€ÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑьпіÑу"
+
+#: addressbook/gui/widgets/eab-gui-util.c:181
+#, fuzzy
+msgid "Error modifying contact"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð·ÑŒÐ¼ÐµÐ½Ñ‹ карткі"
+
+#: addressbook/gui/widgets/eab-gui-util.c:193
+msgid "Error removing list"
+msgstr "Памылка Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑьпіÑу"
+
+#: addressbook/gui/widgets/eab-gui-util.c:193
+#: addressbook/gui/widgets/eab-gui-util.c:598
+#, fuzzy
+msgid "Error removing contact"
+msgstr "Памылка Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ñ€Ñ‚ÐºÑ–"
+
+#: addressbook/gui/widgets/eab-gui-util.c:275
+#, fuzzy, c-format
+msgid ""
+"Opening %d contacts will open %d new windows as well.\n"
+"Do you really want to display all of these contacts?"
+msgstr ""
+"Ðдкрыцьцё %d картак прывÑдзе да Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒÑ†Ñ %d новых вокнаў.\n"
+"Ð’Ñ‹ Ñапраўды жадаеце адлюÑтраваць уÑе гÑÑ‚Ñ‹Ñ ÐºÐ°Ñ€Ñ‚ÐºÑ–?"
+
+#: addressbook/gui/widgets/eab-gui-util.c:301
+#, c-format
+msgid ""
+"%s already exists\n"
+"Do you want to overwrite it?"
+msgstr ""
+"%s ужо Ñ–Ñнуе\n"
+"Жадаеце перапіÑаць?"
+
+#: addressbook/gui/widgets/eab-gui-util.c:305
+msgid "Overwrite"
+msgstr "ПерапіÑаць"
+
+#. This is a filename. Translators take note.
+#: addressbook/gui/widgets/eab-gui-util.c:383
+msgid "card.vcf"
+msgstr "card.vcf"
+
+#: addressbook/gui/widgets/eab-gui-util.c:545
+msgid "list"
+msgstr "ÑьпіÑ"
+
+#: addressbook/gui/widgets/eab-gui-util.c:694
+#, fuzzy
+msgid "Move contact to"
+msgstr "ПерамÑÑÑŒÑціць картку Ñž"
+
+#: addressbook/gui/widgets/eab-gui-util.c:696
+#, fuzzy
+msgid "Copy contact to"
+msgstr "КапіÑваць картку Ñž"
+
+#: addressbook/gui/widgets/eab-gui-util.c:699
+#, fuzzy
+msgid "Move contacts to"
+msgstr "ПерамÑÑÑŒÑціць карткі Ñž"
+
+#: addressbook/gui/widgets/eab-gui-util.c:701
+#, fuzzy
+msgid "Copy contacts to"
+msgstr "КапіÑваць карткі Ñž"
+
+#: addressbook/gui/widgets/eab-gui-util.c:704
+#, fuzzy
+msgid "Select target addressbook."
+msgstr "Выбар кантактаў з кнігі адрÑÑаў"
+
+#: addressbook/gui/widgets/eab-gui-util.c:927
+msgid "Multiple VCards"
+msgstr "Ð¨Ð¼Ð°Ñ‚Ð»Ñ–ÐºÑ–Ñ VCard"
+
+#: addressbook/gui/widgets/eab-gui-util.c:930
+#, c-format
+msgid "VCard for %s"
+msgstr "VCard Ð´Ð»Ñ %s"
+
+#.
+#. * This is the code for the UI thingie that lets you manipulate the e-mail
+#. * addresses (and *only* the e-mail addresses) associated with an existing
+#. * contact.
+#.
+#: addressbook/gui/widgets/eab-popup-control.c:199
+msgid "(none)"
+msgstr "(нÑма)"
+
+#: addressbook/gui/widgets/eab-popup-control.c:432
+msgid "Primary Email"
+msgstr "ПершаÑÐ½Ð°Ñ Ð­. пошта"
+
+#: addressbook/gui/widgets/eab-popup-control.c:568
+msgid "Select an Action"
+msgstr "Выбраць дзеÑньне"
+
+#: addressbook/gui/widgets/eab-popup-control.c:576
+#, c-format
+msgid "Create a new contact \"%s\""
+msgstr "Стварыць новы кантакт \"%s\""
+
+#: addressbook/gui/widgets/eab-popup-control.c:592
+#, c-format
+msgid "Add address to existing contact \"%s\""
+msgstr "Дадаць адрÑÑу да кантакта \"%s\", Ñкі ўжо Ñ–Ñнуе"
+
+#: addressbook/gui/widgets/eab-popup-control.c:870
+#, fuzzy
+msgid "Querying Address Book..."
+msgstr "Запыт да кнігі адрÑÑаў..."
+
+#: addressbook/gui/widgets/eab-popup-control.c:953
+msgid "Edit Contact Info"
+msgstr "РÑдагаваньне кантактных зьвеÑтак"
+
+#: addressbook/gui/widgets/eab-popup-control.c:1008
+msgid "Merge E-Mail Address"
+msgstr "Ðб'Ñднаць адрÑÑÑ‹ Э. пошты"
+
+#: addressbook/gui/widgets/eab-vcard-control.c:139
+#, fuzzy, c-format
+msgid "and one other contact."
+msgid_plural "and %d other contacts."
+msgstr[0] "Ñ– адна Ñ–Ð½ÑˆÐ°Ñ ÐºÐ°Ñ€Ñ‚ÐºÐ°."
+msgstr[1] "Ñ– адна Ñ–Ð½ÑˆÐ°Ñ ÐºÐ°Ñ€Ñ‚ÐºÐ°."
+
+#: addressbook/gui/widgets/eab-vcard-control.c:223
+#: addressbook/gui/widgets/eab-vcard-control.c:272
+#, fuzzy
+msgid "Show Full VCard"
+msgstr "Паказаць уÑе загалоўкі"
+
+#: addressbook/gui/widgets/eab-vcard-control.c:227
+#, fuzzy
+msgid "Show Compact VCard"
+msgstr "Захаваць кантакт Ñк візытоўку (VCard)"
+
+#: addressbook/gui/widgets/eab-vcard-control.c:277
+msgid "Save in addressbook"
+msgstr "Захаваць у кнізе адрÑÑаў"
+
+#: addressbook/gui/widgets/gal-view-factory-minicard.c:24
+msgid "Card View"
+msgstr "ВыглÑд карткі"
+
+#: addressbook/gui/widgets/gal-view-factory-treeview.c:25
+msgid "GTK Tree View"
+msgstr "ПраглÑд дрÑва GTK"
+
+#: addressbook/gui/widgets/test-reflow.c:119
+msgid "Reflow Test"
+msgstr ""
+
+#: addressbook/gui/widgets/test-reflow.c:120
+#: addressbook/printing/test-contact-print-style-editor.c:54
+#: addressbook/printing/test-print.c:53
+msgid "Copyright (C) 2000, Ximian, Inc."
+msgstr ""
+
+#: addressbook/gui/widgets/test-reflow.c:122
+msgid "This should test the reflow canvas item"
+msgstr ""
+
+#: addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:1
+msgid "Evolution LDIF importer"
+msgstr "Імпарт LDIF \"Эвалюцыі\""
+
+#: addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:2
+msgid "LDAP Data Interchange Format (.ldif)"
+msgstr "Фармат узаемаабмену даньнÑмі LDAP (.ldif)"
+
+#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:1
+msgid "Evolution VCard Importer"
+msgstr "Імпарт візытовак \"Эвалюцыі\"."
+
+#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:2
+msgid "Evolution VCard importer"
+msgstr "Імпарт візытовак \"Эвалюцыі\"."
+
+#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:3
+msgid "VCard (.vcf, .gcrd)"
+msgstr "Візытоўка (.vcf, .gcrd)"
+
+#: addressbook/printing/e-contact-print-envelope.c:212
+#: addressbook/printing/e-contact-print-envelope.c:233
+msgid "Print envelope"
+msgstr "Друк паштоўкі"
+
+#: addressbook/printing/e-contact-print.c:1000
+#, fuzzy
+msgid "Print contacts"
+msgstr "Друкаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#: addressbook/printing/e-contact-print.c:1066
+#: addressbook/printing/e-contact-print.c:1093
+#, fuzzy
+msgid "Print contact"
+msgstr "Друкаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#: addressbook/printing/e-contact-print.glade.h:1
+msgid "10 pt. Tahoma"
+msgstr "10 пт. Tahoma"
+
+#: addressbook/printing/e-contact-print.glade.h:2
+msgid "8 pt. Tahoma"
+msgstr "8 пт. Tahoma"
+
+#: addressbook/printing/e-contact-print.glade.h:3
+msgid "Blank forms at end:"
+msgstr "ПуÑÑ‚Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° на канцы:"
+
+#: addressbook/printing/e-contact-print.glade.h:4
+msgid "Body"
+msgstr "Цела"
+
+#: addressbook/printing/e-contact-print.glade.h:5
+msgid "Bottom:"
+msgstr "У нізе:"
+
+#: addressbook/printing/e-contact-print.glade.h:6
+msgid "Dimensions:"
+msgstr "РазьмернаÑьць:"
+
+#: addressbook/printing/e-contact-print.glade.h:7
+msgid "F_ont..."
+msgstr "Шрыфт..."
+
+#: addressbook/printing/e-contact-print.glade.h:8
+msgid "Fonts"
+msgstr "Шрыфты"
+
+#: addressbook/printing/e-contact-print.glade.h:9
+msgid "Footer:"
+msgstr "ЗноÑка:"
+
+#: addressbook/printing/e-contact-print.glade.h:10
+msgid "Format"
+msgstr "Фармат"
+
+#: addressbook/printing/e-contact-print.glade.h:11
+msgid "Header"
+msgstr "Загаловак"
+
+#: addressbook/printing/e-contact-print.glade.h:12
+msgid "Header/Footer"
+msgstr "Загаловак/ЗноÑка"
+
+#: addressbook/printing/e-contact-print.glade.h:13
+msgid "Headings"
+msgstr "Загалоўкі"
+
+#: addressbook/printing/e-contact-print.glade.h:14
+msgid "Headings for each letter"
+msgstr "Загалоўкі Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð°Ðµ літары"
+
+#: addressbook/printing/e-contact-print.glade.h:15
+msgid "Height:"
+msgstr "ВышынÑ:"
+
+#: addressbook/printing/e-contact-print.glade.h:16
+msgid "Immediately follow each other"
+msgstr "Ðдно за адным"
+
+#: addressbook/printing/e-contact-print.glade.h:17
+msgid "Include:"
+msgstr "Уключае:"
+
+#: addressbook/printing/e-contact-print.glade.h:18
+msgid "Landscape"
+msgstr "Ðльбом"
+
+#: addressbook/printing/e-contact-print.glade.h:19
+msgid "Left:"
+msgstr "Зь левага боку:"
+
+#: addressbook/printing/e-contact-print.glade.h:20
+msgid "Letter tabs on side"
+msgstr "Закладкі літар збоку"
+
+#: addressbook/printing/e-contact-print.glade.h:21
+msgid "Margins"
+msgstr "Палі"
+
+#: addressbook/printing/e-contact-print.glade.h:22
+msgid "Number of columns:"
+msgstr "КолькаÑьць Ñлупкоў:"
+
+#: addressbook/printing/e-contact-print.glade.h:23
+msgid "Options"
+msgstr "ПарамÑтры"
+
+#: addressbook/printing/e-contact-print.glade.h:24
+msgid "Orientation"
+msgstr "ÐрыентацыÑ"
+
+#: addressbook/printing/e-contact-print.glade.h:25
+msgid "Page"
+msgstr "Старонка"
+
+#: addressbook/printing/e-contact-print.glade.h:26
+msgid "Page Setup:"
+msgstr "УÑталёўкі Ñтаронкі:"
+
+#: addressbook/printing/e-contact-print.glade.h:27
+msgid "Paper"
+msgstr "Папера"
+
+#: addressbook/printing/e-contact-print.glade.h:28
+msgid "Paper source:"
+msgstr "Крыніца паперы:"
+
+#: addressbook/printing/e-contact-print.glade.h:29
+msgid "Portrait"
+msgstr "ПартрÑÑ‚"
+
+#: addressbook/printing/e-contact-print.glade.h:30
+msgid "Preview:"
+msgstr "Прыклад:"
+
+#: addressbook/printing/e-contact-print.glade.h:31
+msgid "Print using gray shading"
+msgstr "Друк з выкарыÑтаньнем напаўтаноў"
+
+#: addressbook/printing/e-contact-print.glade.h:32
+msgid "Reverse on even pages"
+msgstr "Паварочваць на цотных Ñтаронках"
+
+#: addressbook/printing/e-contact-print.glade.h:33
+msgid "Right:"
+msgstr "З правага боку:"
+
+#: addressbook/printing/e-contact-print.glade.h:34
+msgid "Sections:"
+msgstr "Падзелы:"
+
+#: addressbook/printing/e-contact-print.glade.h:35
+msgid "Shading"
+msgstr "Ðапаўтон"
+
+#: addressbook/printing/e-contact-print.glade.h:36
+msgid "Size:"
+msgstr "Памер:"
+
+#: addressbook/printing/e-contact-print.glade.h:37
+msgid "Start on a new page"
+msgstr "Пачаць з новае Ñтаронкі"
+
+#: addressbook/printing/e-contact-print.glade.h:38
+msgid "Style name:"
+msgstr "Ðазва Ñтылю:"
+
+#: addressbook/printing/e-contact-print.glade.h:39
+msgid "Top:"
+msgstr "Зверху:"
+
+#: addressbook/printing/e-contact-print.glade.h:40
+msgid "Type:"
+msgstr "Тып:"
+
+#: addressbook/printing/e-contact-print.glade.h:41
+msgid "Width:"
+msgstr "ШырынÑ:"
+
+#: addressbook/printing/e-contact-print.glade.h:42
+msgid "_Font..."
+msgstr "Шрыфт..."
+
+#: addressbook/printing/test-contact-print-style-editor.c:53
+#, fuzzy
+msgid "Contact Print Style Editor Test"
+msgstr "РÑдактар ÑьпіÑу кантактаў"
+
+#: addressbook/printing/test-contact-print-style-editor.c:56
+msgid "This should test the contact print style editor widget"
+msgstr ""
+
+#: addressbook/printing/test-print.c:52
+#, fuzzy
+msgid "Contact Print Test"
+msgstr "_Ð¡ÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
+
+#: addressbook/printing/test-print.c:55
+msgid "This should test the contact print code"
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export-list-cards.c:657
+#: addressbook/tools/evolution-addressbook-export-list-cards.c:693
+#: addressbook/tools/evolution-addressbook-export-list-folders.c:49
+#, fuzzy
+msgid "Can not open file"
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#: addressbook/tools/evolution-addressbook-export-list-folders.c:43
+#, fuzzy
+msgid "Couldn't get list of addressbooks"
+msgstr "Ðемагчыма загрузіць %s: %s"
+
+#: addressbook/tools/evolution-addressbook-export-list-folders.c:71
+#, fuzzy
+msgid "failed to open book"
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ кнігу адрÑÑаў"
+
+#: addressbook/tools/evolution-addressbook-export.c:56
+msgid "Specify the output file instead of standard output"
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:57
+msgid "OUTPUTFILE"
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:58
+#, fuzzy
+msgid "List local addressbook folders"
+msgstr "з уÑімі лакальнымі й актыўнымі аддаленымі течкамі"
+
+#: addressbook/tools/evolution-addressbook-export.c:60
+msgid "Show cards as vcard or csv file"
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:60
+#, fuzzy
+msgid "[vcard|csv]"
+msgstr "карткі"
+
+#: addressbook/tools/evolution-addressbook-export.c:61
+msgid "Export in asynchronous mode "
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:63
+msgid ""
+"The number of cards in one output file in asychronous mode,default size 100."
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:63
+msgid "NUMBER"
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:91
+msgid ""
+"Command line arguments error, please use --help option to see the usage."
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:105
+msgid "Only support csv or vcard format."
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:114
+msgid "In async mode, output must be file."
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:122
+msgid "In normal mode, there should not need size option."
+msgstr ""
+
+#: addressbook/tools/evolution-addressbook-export.c:153
+#, fuzzy
+msgid "Impossible internal error."
+msgstr "ÐÑƒÑ‚Ñ€Ð°Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
+
+#: addressbook/tools/evolution-addressbook-import.c:46
+msgid "Error loading default addressbook."
+msgstr "Памылка загрузкі дапомнай кнігі адрÑÑаў."
+
+#: addressbook/tools/evolution-addressbook-import.c:67
+msgid "Input File"
+msgstr "Уваходны файл"
+
+#: addressbook/tools/evolution-addressbook-import.c:82
+msgid "No filename provided."
+msgstr "Ðазва файла не пазначана."
+
+#: addressbook/util/e-destination.c:577
+msgid "Unnamed List"
+msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð±Ñз назвы"
+
+#. calendar:prompt-cancel-meeting primary
+#. calendar:prompt-cancel-task primary
+#: calendar/calendar-errors.xml.h:2 calendar/calendar-errors.xml.h:12
+msgid "Would you like to send all the participants a cancellation notice?"
+msgstr ""
+
+#. calendar:prompt-cancel-meeting secondary
+#: calendar/calendar-errors.xml.h:4
+msgid ""
+"If you don't send a cancellation notice, the other participants may not know "
+"the meeting is canceled."
+msgstr ""
+
+#: calendar/calendar-errors.xml.h:5 calendar/calendar-errors.xml.h:15
+#: calendar/calendar-errors.xml.h:25 calendar/calendar-errors.xml.h:87
+#: calendar/calendar-errors.xml.h:93 calendar/calendar-errors.xml.h:99
+#: calendar/calendar-errors.xml.h:105
+#, fuzzy
+msgid "Don't Send"
+msgstr "Ðе выдалÑць"
+
+#: calendar/calendar-errors.xml.h:6 calendar/calendar-errors.xml.h:16
+#: calendar/calendar-errors.xml.h:26
+#, fuzzy
+msgid "Send Notice"
+msgstr "ДаÑлаць на:"
+
+#. calendar:prompt-delete-meeting primary
+#: calendar/calendar-errors.xml.h:8
+#, fuzzy
+msgid "Are you sure you want to delete this meeting?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ Ñƒ тым, што жадаеце адмÑніць Ñ– выдаліць гÑтую ÑуÑÑ‚Ñ€Ñчу?"
+
+#. calendar:prompt-delete-meeting secondary
+#: calendar/calendar-errors.xml.h:10
+msgid ""
+"All information on this meeting will be deleted and can not be restored."
+msgstr ""
+
+#. calendar:prompt-cancel-task secondary
+#: calendar/calendar-errors.xml.h:14
+msgid ""
+"If you don't send a cancellation notice, the other participants may not know "
+"the task has been deleted."
+msgstr ""
+
+#. calendar:prompt-delete-task primary
+#: calendar/calendar-errors.xml.h:18 calendar/calendar-errors.xml.h:44
+#, fuzzy
+msgid "Are you sure you want to delete this task?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць %d заданьнÑÑž?"
+
+#. calendar:prompt-delete-task secondary
+#. calendar:prompt-delete-named-task secondary
+#. calendar:prompt-delete-task secondary
+#: calendar/calendar-errors.xml.h:20 calendar/calendar-errors.xml.h:42
+#: calendar/calendar-errors.xml.h:46
+msgid "All information on this task will be deleted and can not be restored."
+msgstr ""
+
+#. calendar:prompt-cancel-journal primary
+#: calendar/calendar-errors.xml.h:22
+#, fuzzy
+msgid "Would you like to send a cancellation notice for this journal entry?"
+msgstr ""
+"Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ Ñž тым, што жадаеце адмÑніць Ñ– выдаліць гÑÑ‚Ñ‹ Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа?"
+
+#. calendar:prompt-cancel-journal secondary
+#: calendar/calendar-errors.xml.h:24
+msgid ""
+"If you don't send a cancellation notice, the other participants may not know "
+"the journal has been deleted."
+msgstr ""
+
+#. calendar:prompt-delete-journal primary
+#: calendar/calendar-errors.xml.h:28 calendar/calendar-errors.xml.h:52
+#, fuzzy
+msgid "Are you sure you want to delete this journal entry?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць %d запіÑаў чаÑопіÑа?"
+
+#. calendar:prompt-delete-journal secondary
+#: calendar/calendar-errors.xml.h:30
+msgid ""
+"All information on this journal entry will be deleted and can not be "
+"restored."
+msgstr ""
+
+#. calendar:prompt-delete-titled-appointment primary
+#: calendar/calendar-errors.xml.h:32
+#, fuzzy
+msgid "Are you sure you want to delete the appointment titled '{0}'?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць ÑуÑÑ‚Ñ€Ñчу \"%s\"?"
+
+#. calendar:prompt-delete-titled-appointment secondary
+#. calendar:prompt-delete-appointment secondary
+#: calendar/calendar-errors.xml.h:34 calendar/calendar-errors.xml.h:38
+msgid ""
+"All information on this appointment will be deleted and can not be restored."
+msgstr ""
+
+#. calendar:prompt-delete-appointment primary
+#: calendar/calendar-errors.xml.h:36
+#, fuzzy
+msgid "Are you sure you want to delete this appointment?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць %d ÑуÑÑ‚Ñ€Ñч?"
+
+#. calendar:prompt-delete-named-task primary
+#: calendar/calendar-errors.xml.h:40
+#, fuzzy
+msgid "Are you sure you want to delete the '{0}' task?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць заданьне \"%s\"?"
+
+#. calendar:prompt-delete-named-journal primary
+#: calendar/calendar-errors.xml.h:48
+#, fuzzy
+msgid "Are you sure you want to delete the journal entry '{0}'?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа \"%s\"?"
+
+#. calendar:prompt-delete-named-journal secondary
+#. calendar:prompt-delete-journal secondary
+#: calendar/calendar-errors.xml.h:50 calendar/calendar-errors.xml.h:54
+msgid ""
+"All information in this journal will be deleted and can not be restored."
+msgstr ""
+
+#. calendar:prompt-delete-appointments primary
+#: calendar/calendar-errors.xml.h:56
+#, fuzzy
+msgid "Are you sure you want to delete these {0} appointments?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць ÑуÑÑ‚Ñ€Ñчу \"%s\"?"
+
+#. calendar:prompt-delete-appointments secondary
+#: calendar/calendar-errors.xml.h:58
+msgid ""
+"All information on these appointments will be deleted and can not be "
+"restored."
+msgstr ""
+
+#. calendar:prompt-delete-tasks primary
+#: calendar/calendar-errors.xml.h:60
+#, fuzzy
+msgid "Are you sure you want to delete these {0} tasks?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць заданьне \"%s\"?"
+
+#. calendar:prompt-delete-tasks secondary
+#: calendar/calendar-errors.xml.h:62
+msgid "All information on these tasks will be deleted and can not be restored."
+msgstr ""
+
+#. calendar:prompt-delete-journals primary
+#: calendar/calendar-errors.xml.h:64
+#, fuzzy
+msgid "Are you sure you want to delete these {0} journal entries?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа \"%s\"?"
+
+#. calendar:prompt-delete-journals secondary
+#: calendar/calendar-errors.xml.h:66
+msgid ""
+"All information in these journal entries will be deleted and can not be "
+"restored."
+msgstr ""
+
+#. calendar:prompt-save-appointment title
+#: calendar/calendar-errors.xml.h:68
+#, fuzzy
+msgid "Save Appointment"
+msgstr "СуÑÑ‚Ñ€Ñча"
+
+#. calendar:prompt-save-appointment primary
+#: calendar/calendar-errors.xml.h:70
+#, fuzzy
+msgid "Would you like to save your changes to this appointment?"
+msgstr "Жадаеце захаваць зьмены?"
+
+#. calendar:prompt-save-appointment secondary
+#: calendar/calendar-errors.xml.h:72
+#, fuzzy
+msgid "You have made changes to this appointment, but not yet saved them."
+msgstr "%s Ð’Ñ‹ ўнеÑьлі зьмены. Забыцца на Ñ–Ñ… Ñ– абнавіць Ñ€Ñдактар?"
+
+#: calendar/calendar-errors.xml.h:73 calendar/calendar-errors.xml.h:81
+#: composer/mail-composer-errors.xml.h:33
+#, fuzzy
+msgid "Discard Changes"
+msgstr "_Ðдкінуць зьмены"
+
+#: calendar/calendar-errors.xml.h:74 calendar/calendar-errors.xml.h:82
+#, fuzzy
+msgid "Save Changes"
+msgstr "Захаваць паведамлеьне Ñк..."
+
+#. calendar:prompt-save-task title
+#: calendar/calendar-errors.xml.h:76
+#, fuzzy
+msgid "Save Task"
+msgstr "Захаваць Ñк"
+
+#. calendar:prompt-save-task primary
+#: calendar/calendar-errors.xml.h:78
+#, fuzzy
+msgid "Would you like to save your changes to this task?"
+msgstr "Жадаеце захаваць зьмены?"
+
+#. calendar:prompt-save-task secondary
+#: calendar/calendar-errors.xml.h:80
+#, fuzzy
+msgid "You have made changes to this task, but not yet saved them."
+msgstr "%s Ð’Ñ‹ ўнеÑьлі зьмены. Забыцца на Ñ–Ñ… Ñ– абнавіць Ñ€Ñдактар?"
+
+#. calendar:prompt-meeting-invite primary
+#: calendar/calendar-errors.xml.h:84
+msgid "Would you like to send meeting invitations to participants?"
+msgstr ""
+
+#. calendar:prompt-meeting-invite secondary
+#: calendar/calendar-errors.xml.h:86
+msgid ""
+"Email invitations will be sent to all participants and allow them to RSVP."
+msgstr ""
+
+#: calendar/calendar-errors.xml.h:88 calendar/calendar-errors.xml.h:94
+#: calendar/calendar-errors.xml.h:100 calendar/calendar-errors.xml.h:106
+#: ui/evolution-message-composer.xml.h:24
+msgid "Send"
+msgstr "ДаÑлаць"
+
+#. calendar:prompt-send-updated-meeting-info primary
+#: calendar/calendar-errors.xml.h:90
+msgid "Would you like to send updated meeting information to participants?"
+msgstr ""
+
+#. calendar:prompt-send-updated-meeting-info secondary
+#: calendar/calendar-errors.xml.h:92
+msgid ""
+"Sending updated information allows other participants to keep their "
+"calendars up to date."
+msgstr ""
+
+#. calendar:prompt-send-task primary
+#: calendar/calendar-errors.xml.h:96
+msgid "Would you like to send this task to participants?"
+msgstr ""
+
+#. calendar:prompt-send-task secondary
+#: calendar/calendar-errors.xml.h:98
+msgid ""
+"Email invitations will be sent to all participants and allow them to accept "
+"this task."
+msgstr ""
+
+#. calendar:prompt-send-updated-task-info primary
+#: calendar/calendar-errors.xml.h:102
+msgid "Would you like to send updated task information to participants?"
+msgstr ""
+
+#. calendar:prompt-send-updated-task-info secondary
+#: calendar/calendar-errors.xml.h:104
+msgid ""
+"Sending updated information allows other participants to keep their task "
+"lists up to date."
+msgstr ""
+
+#. calendar:tasks-crashed primary
+#: calendar/calendar-errors.xml.h:108
+msgid "The Evolution tasks have quit unexpectedly."
+msgstr ""
+
+#. calendar:tasks-crashed secondary
+#: calendar/calendar-errors.xml.h:110
+msgid "Your tasks will not be available until Evolution is restarted."
+msgstr ""
+
+#. calendar:calendar-crashed primary
+#: calendar/calendar-errors.xml.h:112
+#, fuzzy
+msgid "The Evolution calendar has quit unexpectedly."
+msgstr "Праграма лакальнага калÑндара \"Эвалюцыі\""
+
+#. calendar:calendar-crashed secondary
+#: calendar/calendar-errors.xml.h:114
+msgid "Your calendars will not be available until Evolution is restarted."
+msgstr ""
+
+#: calendar/common/authentication.c:48 calendar/gui/e-pub-utils.c:301
+#: smime/gui/component.c:48
+#, fuzzy
+msgid "Enter password"
+msgstr "Пазначце пароль"
+
+#: calendar/conduits/calendar/calendar-conduit.c:246
+msgid "Split Multi-Day Events:"
+msgstr "ПадзÑліць ÑˆÐ¼Ð°Ñ‚Ð´Ð·Ñ‘Ð½Ð½Ñ‹Ñ Ð¿Ð°Ð´Ð·ÐµÑ–:"
+
+#: calendar/conduits/calendar/calendar-conduit.c:1356
+#: calendar/conduits/calendar/calendar-conduit.c:1357
+#: calendar/conduits/todo/todo-conduit.c:879
+#: calendar/conduits/todo/todo-conduit.c:880
+#, fuzzy
+msgid "Could not start evolution-data-server"
+msgstr "ÐеатрымалаÑÑ Ð·Ð°Ð¿ÑƒÑьціць паÑлужнік wombat"
+
+#: calendar/conduits/calendar/calendar-conduit.c:1465
+#: calendar/conduits/calendar/calendar-conduit.c:1468
+msgid "Could not read pilot's Calendar application block"
+msgstr "Ðемагчыма прачытаць блёк даÑтаÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð»Ñндару \"Пілёта\""
+
+#: calendar/conduits/todo/todo-conduit.c:234
+msgid "Default Priority:"
+msgstr "Дапомны прыÑрытÑÑ‚:"
+
+#: calendar/conduits/todo/todo-conduit.c:959
+#: calendar/conduits/todo/todo-conduit.c:962
+msgid "Could not read pilot's ToDo application block"
+msgstr "Ðемагчыма прачытаць блёк даÑтаÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž \"Пілёта\""
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:1
+msgid "*Control*F3"
+msgstr ""
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:2
+msgid "*Control*F4"
+msgstr ""
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:3
+msgid "Calendar and Tasks"
+msgstr "КалÑндар Ñ– заданьні"
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:4
+#: calendar/gui/calendar-component.c:1079
+#, fuzzy
+msgid "Calendars"
+msgstr "КалÑндар"
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:5
+msgid "Configure your timezone, Calendar and Task List here "
+msgstr "Ðаладка вашае чаÑавае зоны, калÑндара Ñ– ÑьпіÑу задачаў"
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:6
+msgid "Evolution Calendar and Tasks"
+msgstr "КалÑндар Ñ– заданьні \"Эвалюцыі\""
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:7
+msgid "Evolution Calendar configuration control"
+msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð»Ñндаром \"Эвалюцыі\""
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:8
+msgid "Evolution Calendar scheduling message viewer"
+msgstr "ПраглÑдальнік Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð»ÑÐ½Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð»Ñндара \"Эвалюцыі\""
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:9
+msgid "Evolution Calendar/Task editor"
+msgstr "РÑдактар калÑндара/Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ \"Эвалюцыі\""
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:10
+#, fuzzy
+msgid "Evolution's Calendar component"
+msgstr "КампанÑнт калÑндара Ñ– заданьнÑÑž \"Эвалюцыі\"."
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:11
+#, fuzzy
+msgid "Evolution's Tasks component"
+msgstr "КампанÑнт Ñ‚ÑÑÑ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ \"Эвалюцыі\"."
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:12
+#: calendar/gui/e-tasks.c:1198 calendar/gui/print.c:1819
+#: calendar/gui/tasks-component.c:419 calendar/gui/tasks-component.c:889
+#: calendar/gui/tasks-control.c:408 calendar/importers/icalendar-importer.c:83
+#: calendar/importers/icalendar-importer.c:709
+msgid "Tasks"
+msgstr "Заданьні"
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:13
+#, fuzzy
+msgid "_Calendars"
+msgstr "КалÑндар"
+
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:14
+#: views/tasks/galview.xml.h:3
+msgid "_Tasks"
+msgstr "_Заданьні"
+
+#: calendar/gui/alarm-notify/GNOME_Evolution_Calendar_AlarmNotify.server.in.in.h:1
+msgid "Evolution Calendar alarm notification service"
+msgstr "ПаÑлуга Ð½Ð°Ð³Ð°Ð´Ð²Ð°Ð½ÑŒÐ½Ñ Ñыгнала калÑндара \"Эвалюцыі\""
+
+#: calendar/gui/alarm-notify/alarm-notify-dialog.c:213
+msgid "Starting:"
+msgstr "ЗапуÑкаецца:"
+
+#: calendar/gui/alarm-notify/alarm-notify-dialog.c:215
+msgid "Ending:"
+msgstr "ЗавÑршаецца:"
+
+#: calendar/gui/alarm-notify/alarm-notify-dialog.c:259
+msgid "Evolution Alarm"
+msgstr "Ðагадваньне \"Эвалюцыі\""
+
+#: calendar/gui/alarm-notify/alarm-notify-dialog.c:358
+#, c-format
+msgid "Alarm on %s"
+msgstr "Ðагадваньне на %s"
+
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:1
+#, fuzzy
+msgid "Snooze _time (minutes):"
+msgstr "Ðагадаць паÑÑŒÐ»Ñ (хвіліны)"
+
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:2
+msgid "_Edit appointment"
+msgstr "_РÑдагаваць ÑуÑÑ‚Ñ€Ñчу"
+
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:3
+#, fuzzy
+msgid "_Snooze"
+msgstr "Ðагадаць _пазьней"
+
+#: calendar/gui/alarm-notify/alarm-queue.c:885
+#: ui/evolution-message-composer.xml.h:10
+msgid "Open"
+msgstr "Ðдкрыць"
+
+#: calendar/gui/alarm-notify/alarm-queue.c:887
+msgid "Dismiss"
+msgstr ""
+
+#: calendar/gui/alarm-notify/alarm-queue.c:889
+msgid "Dismiss All"
+msgstr ""
+
+#: calendar/gui/alarm-notify/alarm-queue.c:954
+msgid "No description available."
+msgstr "ÐпіÑаньне недаÑтупна."
+
+#: calendar/gui/alarm-notify/alarm-queue.c:974
+#, c-format
+msgid ""
+"Alarm on %s\n"
+"%s\n"
+"Starting at %s\n"
+"Ending at %s"
+msgstr ""
+
+#: calendar/gui/alarm-notify/alarm-queue.c:1074
+#: calendar/gui/alarm-notify/alarm-queue.c:1098
+msgid "Warning"
+msgstr "ПапÑÑ€Ñджаьне"
+
+#: calendar/gui/alarm-notify/alarm-queue.c:1078
+msgid ""
+"Evolution does not support calendar reminders with\n"
+"email notifications yet, but this reminder was\n"
+"configured to send an email. Evolution will display\n"
+"a normal reminder dialog box instead."
+msgstr ""
+"\"ЭвалюцыÑ\" не падтрымлівае ÑÑˆÑ‡Ñ Ð½Ð°Ð³Ð°Ð´Ð²Ð°Ð½ÑŒÐ½Ñ– калÑндара праз\n"
+"пошту, але гÑтае нагадваньне Ñканфігуравана Ð´Ð»Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– пошты.\n"
+"\"ЭвалюцыÑ\" будзе адлюÑтроўваць замеÑÑ‚ гÑтага звычайны дыÑлёг\n"
+"нагадваньнÑ."
+
+#: calendar/gui/alarm-notify/alarm-queue.c:1104
+#, c-format
+msgid ""
+"An Evolution Calendar reminder is about to trigger. This reminder is "
+"configured to run the following program:\n"
+"\n"
+" %s\n"
+"\n"
+"Are you sure you want to run this program?"
+msgstr ""
+"ГÑтае нагадваньне наладжана на выкананьне праграмы:\n"
+"\n"
+" %s\n"
+"\n"
+"Ð’Ñ‹ Ñапраўды жадаеце выканаць гÑтую праграму?"
+
+#: calendar/gui/alarm-notify/alarm-queue.c:1118
+msgid "Do not ask me about this program again."
+msgstr "Болей не раÑпавÑдаць мне пра гÑтую праграму."
+
+#: calendar/gui/alarm-notify/notify-main.c:139
+msgid "Could not initialize Bonobo"
+msgstr "ÐеатрымалаÑÑ Ñ–Ð½Ñ–Ñ†Ñ‹Ñлізаваць Bonobo"
+
+#: calendar/gui/alarm-notify/notify-main.c:150
+msgid "Could not create the alarm notify service factory"
+msgstr "Ðемагчыма Ñтварыць вытворчаÑьць паÑлугі нагадваньнÑ"
+
+#: calendar/gui/alarm-notify/util.c:41
+msgid "invalid time"
+msgstr "нерÑчаіÑны чаÑ"
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:1
+msgid "Allocate less space to weekend appointments"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:2
+#, fuzzy
+msgid "Calendars to run alarms for"
+msgstr "Памылка iCalendar"
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:3
+#, fuzzy
+msgid "Color of tasks that are due today"
+msgstr "Колер Ð´Ð»Ñ ÑƒÐ¼Ð¾ÑžÐ»ÐµÐ½Ñ‹Ñ… на дзень заданьнÑÑž "
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:4
+#, fuzzy
+msgid "Color of tasks that are overdue"
+msgstr "Колер Ð´Ð»Ñ ÑƒÐ¼Ð¾ÑžÐ»ÐµÐ½Ñ‹Ñ… на дзень заданьнÑÑž "
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:5
+msgid "Days that are work days"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:6
+msgid "Default timezone for meetings"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:7
+msgid "Hour the workday ends on"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:8
+msgid "Hour the workday starts on"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:9
+msgid "Intervals shown in Day and Work Week views"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:10
+msgid "List of urls for free/busy publishing"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:11
+msgid "Minute the workday ends on"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:12
+msgid "Minute the workday starts on"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:13
+msgid "Number of units for default reminder"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:14
+msgid "Number of units for determining when to hide tasks"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:15
+msgid "Position of the horizontal pane"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:16
+msgid "Position of the horizontal pane in the month view"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:17
+msgid "Position of the vertical pane"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:18
+msgid "Position of the vertical pane in the month view"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:19
+msgid "Position of the vertical pane in the task view"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:20
+msgid "Programs that can run as part of alarms"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:21
+#, fuzzy
+msgid "Show where events end in week and month views"
+msgstr "_ÐдлюÑтраваць ÑуÑÑ‚Ñ€Ñчу Ñ– Ñ‡Ð°Ñ Ñƒ выглÑдзе тыднÑÑž Ñ– меÑÑцаў"
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:22
+msgid "Time last alarm ran"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:23
+msgid "Units for determining when to hide tasks"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:24
+msgid "Units of default reminder"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:25
+msgid "Weekday the week starts on"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:26
+msgid "Whether or not to use the notification tray for display alarms"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:27
+#, fuzzy
+msgid "Whether to ask for confirmation on appointment deletion"
+msgstr "Запыт на падцьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:28
+#, fuzzy
+msgid "Whether to ask for confirmation when folder is expunged"
+msgstr "Запыт на падцьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:29
+#, fuzzy
+msgid "Whether to hide completed tasks"
+msgstr "Выдаліць ÑÐºÐ¾Ð½Ñ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:30
+msgid "Whether to set a default reminder for events"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:31
+msgid "Whether to show times in 24h format instead of using am/pm"
+msgstr ""
+
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:32
+#, fuzzy
+msgid "Whether to show week numbers in date navigator"
+msgstr "Паказаць нумары тыднÑÑž у навігатары па датах"
+
+#: calendar/gui/cal-search-bar.c:50
+msgid "Summary contains"
+msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі утрымліваюць"
+
+#: calendar/gui/cal-search-bar.c:51
+msgid "Description contains"
+msgstr "ÐпіÑаньне ўтрымлівае"
+
+#: calendar/gui/cal-search-bar.c:52
+msgid "Comment contains"
+msgstr "КамÑнтар утрымлівае"
+
+#: calendar/gui/cal-search-bar.c:53
+#, fuzzy
+msgid "Location contains"
+msgstr "ÐпіÑаньне ўтрымлівае"
+
+#: calendar/gui/cal-search-bar.c:362 camel/camel-vee-store.c:327
+msgid "Unmatched"
+msgstr "Ð†Ð½ÑˆÐ°Ñ Ð¿Ð¾ÑˆÑ‚Ð°"
+
+#: calendar/gui/calendar-commands.c:117 calendar/gui/calendar-component.c:564
+#: calendar/gui/dialogs/select-source-dialog.c:112
+#: calendar/gui/gnome-cal.c:1860
+#: camel/providers/groupwise/camel-gw-listener.c:331
+#: camel/providers/groupwise/camel-gw-listener.c:361
+msgid "Calendar"
+msgstr "КалÑндар"
+
+#: calendar/gui/calendar-commands.c:352
+#, fuzzy
+msgid ""
+"This operation will permanently erase all events older than the selected "
+"amount of time. If you continue, you will not be able to recover these "
+"events."
+msgstr ""
+"ГÑÑ‚Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ назаўÑёды уÑе заданьні, ÑÐºÑ–Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹ Ñк выкананыÑ. "
+"Калі працÑгніце, тады Ð½Ñ Ð·Ð´Ð¾Ð»ÐµÐµÑ†Ðµ вÑрнуць гÑтую апÑрацыю.\n"
+"\n"
+"Выдаліць гÑÑ‚Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–?"
+
+#: calendar/gui/calendar-commands.c:358
+#, fuzzy
+msgid "Purge events older than"
+msgstr "вÑртае менш за"
+
+#: calendar/gui/calendar-commands.c:363
+#: calendar/gui/dialogs/alarm-dialog.glade.h:21
+#: calendar/gui/dialogs/calendar-setup.glade.h:12 filter/filter.glade.h:13
+msgid "days"
+msgstr "дні"
+
+#: calendar/gui/calendar-commands.c:432
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#. strftime format %a = abbreviated weekday name, %d = day of month,
+#. %b = abbreviated month name. Don't use any other specifiers.
+#. strftime format %a = abbreviated weekday name,
+#. %d = day of month, %b = abbreviated month name.
+#. You can change the order but don't change the
+#. specifiers or add anything.
+#: calendar/gui/calendar-commands.c:435 calendar/gui/calendar-component.c:519
+#: calendar/gui/e-day-view-top-item.c:714 calendar/gui/e-day-view.c:1588
+#: calendar/gui/e-week-view-main-item.c:329
+msgid "%a %d %b"
+msgstr "%a %d %b"
+
+#: calendar/gui/calendar-commands.c:437 calendar/gui/calendar-commands.c:442
+#: calendar/gui/calendar-commands.c:444 calendar/gui/calendar-component.c:521
+#: calendar/gui/calendar-component.c:526 calendar/gui/calendar-component.c:528
+msgid "%a %d %b %Y"
+msgstr "%a %d %b %Y"
+
+#: calendar/gui/calendar-commands.c:461 calendar/gui/calendar-commands.c:467
+#: calendar/gui/calendar-commands.c:473 calendar/gui/calendar-commands.c:475
+msgid "%d %B %Y"
+msgstr "%d %B %Y"
+
+#. strftime format %d = day of month, %B = full
+#. month name. You can change the order but don't
+#. change the specifiers or add anything.
+#: calendar/gui/calendar-commands.c:465
+#: calendar/gui/e-week-view-main-item.c:337 calendar/gui/print.c:1498
+msgid "%d %B"
+msgstr "%d %B"
+
+#: calendar/gui/calendar-component.c:370
+#, c-format
+msgid "Calendar '%s' will be removed. Are you sure you want to continue?"
+msgstr ""
+
+#: calendar/gui/calendar-component.c:426
+#, fuzzy
+msgid "New Calendar"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#: calendar/gui/calendar-component.c:516
+#, fuzzy
+msgid "%A %d %b %Y"
+msgstr "%a %d %b %Y"
+
+#: calendar/gui/calendar-component.c:540 calendar/gui/calendar-component.c:547
+#: calendar/gui/calendar-component.c:553 calendar/gui/calendar-component.c:555
+#, fuzzy
+msgid "%d %b %Y"
+msgstr "%d %B %Y"
+
+#. strftime format %d = day of month, %b = abbreviated month name.
+#. Don't use any other specifiers.
+#. strftime format %d = day of month, %b = abbreviated
+#. month name. You can change the order but don't
+#. change the specifiers or add anything.
+#: calendar/gui/calendar-component.c:545
+#: calendar/gui/e-day-view-top-item.c:718 calendar/gui/e-day-view.c:1604
+#: calendar/gui/e-week-view-main-item.c:343
+msgid "%d %b"
+msgstr "%d %b"
+
+#: calendar/gui/calendar-component.c:635
+#, fuzzy
+msgid "Failed upgrading calendars."
+msgstr "Загрузка калÑндара..."
+
+#: calendar/gui/calendar-component.c:931
+#, c-format
+msgid "Unable to open the calendar '%s' for creating events and meetings"
+msgstr ""
+
+#: calendar/gui/calendar-component.c:947
+msgid "There is no calendar available for creating events and meetings"
+msgstr ""
+
+#: calendar/gui/calendar-component.c:1245
+msgid "New appointment"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÑуÑÑ‚Ñ€Ñча"
+
+#: calendar/gui/calendar-component.c:1246
+msgid "_Appointment"
+msgstr "_СуÑÑ‚Ñ€Ñча"
+
+#: calendar/gui/calendar-component.c:1247
+msgid "Create a new appointment"
+msgstr "Стварыць новую ÑуÑÑ‚Ñ€Ñчу"
+
+#: calendar/gui/calendar-component.c:1253
+msgid "New meeting"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð½Ð°Ñ€Ð°Ð´Ð°"
+
+#: calendar/gui/calendar-component.c:1254
+msgid "M_eeting"
+msgstr "Ðарада"
+
+#: calendar/gui/calendar-component.c:1255
+#, fuzzy
+msgid "Create a new meeting request"
+msgstr "Стварыць запыт новае нарады"
+
+#: calendar/gui/calendar-component.c:1261
+#, fuzzy
+msgid "New all day appointment"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÑуÑÑ‚Ñ€Ñча на увеÑÑŒ дзень"
+
+#: calendar/gui/calendar-component.c:1262
+#, fuzzy
+msgid "All Day A_ppointment"
+msgstr "СуÑÑ‚Ñ€Ñча на увеÑÑŒ _дзень"
+
+#: calendar/gui/calendar-component.c:1263
+#, fuzzy
+msgid "Create a new all-day appointment"
+msgstr "Стварыць новую ÑуÑÑ‚Ñ€Ñчу"
+
+#: calendar/gui/calendar-component.c:1269
+#, fuzzy
+msgid "New calendar"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#: calendar/gui/calendar-component.c:1270
+#, fuzzy
+msgid "Cale_ndar"
+msgstr "КалÑндар"
+
+#: calendar/gui/calendar-component.c:1271
+#, fuzzy
+msgid "Create a new calendar"
+msgstr "Стварыць новую Ñ‚Ñчку"
+
+#: calendar/gui/calendar-offline-handler.c:192
+#, c-format
+msgid "backend_go_offline(): %s"
+msgstr ""
+
+#: calendar/gui/calendar-offline-handler.c:215
+#, c-format
+msgid "backend_go_online(): %s"
+msgstr ""
+
+#: calendar/gui/calendar-view-factory.c:118
+msgid "Day View"
+msgstr "ПраглÑд дню"
+
+#: calendar/gui/calendar-view-factory.c:121
+msgid "Work Week View"
+msgstr "ПраглÑд працоўнага тыдню"
+
+#: calendar/gui/calendar-view-factory.c:124
+msgid "Week View"
+msgstr "ПраглÑд тыдню"
+
+#: calendar/gui/calendar-view-factory.c:127
+msgid "Month View"
+msgstr "ПраглÑд меÑÑцу"
+
+#: calendar/gui/comp-editor-factory.c:409
+msgid "Error while opening the calendar"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒÑ†Ñ ÐºÐ°Ð»Ñндара"
+
+#: calendar/gui/comp-editor-factory.c:420
+msgid "Method not supported when opening the calendar"
+msgstr "ÐœÑтад не падтрымліваецца калі адкрываецца калÑндар"
+
+#: calendar/gui/comp-editor-factory.c:426
+msgid "Permission denied to open the calendar"
+msgstr "ÐдÑутнічаюць правы на адкрыцьцё калÑндара"
+
+#: calendar/gui/comp-editor-factory.c:474
+#, c-format
+msgid "open_client(): %s"
+msgstr ""
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:2
+#, fuzzy
+msgid "<b>Alarm</b>\t"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:3
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "ÐпіÑаньне:"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Repeat</b>"
+msgstr "Ðагадваньні"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:5
+#, fuzzy
+msgid "Add Alarm"
+msgstr "Сыгналы"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:6
+#, fuzzy
+msgid "Custom _message"
+msgstr "Стварыць паведамленьне"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:7
+msgid "Custom alarm sound"
+msgstr ""
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:8
+#, fuzzy
+msgid "Mes_sage:"
+msgstr "Паведамленьні"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:9 calendar/gui/e-alarm-list.c:444
+msgid "Play a sound"
+msgstr "Граць гук"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:10
+#: calendar/gui/e-alarm-list.c:448
+msgid "Pop up an alert"
+msgstr ""
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:11
+#: calendar/gui/e-alarm-list.c:456
+msgid "Run a program"
+msgstr "ЗапуÑьціць праграму"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:12
+msgid "Send To:"
+msgstr "ДаÑлаць на:"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:13
+#: calendar/gui/e-alarm-list.c:452
+msgid "Send an email"
+msgstr "ДаÑлаць пошту"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:14
+#, fuzzy
+msgid "_Arguments:"
+msgstr "Уліковы запіÑ:"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:15
+#, fuzzy
+msgid "_Program:"
+msgstr "ЗапуÑьціць праграму:"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:16
+#, fuzzy
+msgid "_Repeat the alarm"
+msgstr "Паўтор нагадваньнÑ"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:17
+#, fuzzy
+msgid "_Sound:"
+msgstr "ДаÑлаць"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:18
+msgid "after"
+msgstr "паÑьлÑ"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:19
+msgid "before"
+msgstr "перад"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:20
+#: calendar/gui/dialogs/recurrence-page.glade.h:7
+msgid "day(s)"
+msgstr "дзень(дзён)"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:22
+msgid "end of appointment"
+msgstr "канец ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:23
+msgid "extra times every"
+msgstr "дадатковы Ñ‡Ð°Ñ ÐºÐ¾Ð¶Ð½Ñ‹Ñ"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:24
+msgid "hour(s)"
+msgstr "гадзіна (ы)"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:25
+#: calendar/gui/dialogs/calendar-setup.glade.h:13 filter/filter.glade.h:14
+msgid "hours"
+msgstr "гадзіны"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:26
+msgid "minute(s)"
+msgstr "хвіліна(ы)"
+
+#: calendar/gui/dialogs/alarm-dialog.glade.h:28
+msgid "start of appointment"
+msgstr "пачатак ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/dialogs/alarm-list-dialog.c:192
+msgid "Action/Trigger"
+msgstr ""
+
+#: calendar/gui/dialogs/alarm-list-dialog.glade.h:1
+msgid "A_dd"
+msgstr "_Дадаць"
+
+#: calendar/gui/dialogs/alarm-list-dialog.glade.h:2
+msgid "Alarms"
+msgstr "Сыгналы"
+
+#. FIXME: This routine should just be a "toggled" event handler on the checkbox cell renderer which
+#. has "activatable" set.
+#: calendar/gui/dialogs/cal-prefs-dialog.c:567 mail/em-account-prefs.c:466
+#: mail/em-composer-prefs.c:677 mail/em-composer-prefs.c:905
+msgid "Enabled"
+msgstr "Уключана"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.c:721
+#, fuzzy
+msgid "Are you sure you want to remove this URL?"
+msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑÑ‚Ñ‹ рахунак?"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.c:729
+#, fuzzy
+msgid "Don't Remove"
+msgstr "Ðе імпартаваць"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.c:778
+#: calendar/gui/dialogs/cal-prefs-dialog.c:811
+#: calendar/gui/dialogs/cal-prefs-dialog.c:844 mail/em-account-prefs.c:288
+#: mail/em-account-prefs.c:329 mail/em-account-prefs.c:372
+#: mail/em-composer-prefs.c:596 mail/em-composer-prefs.c:654
+#: mail/em-composer-prefs.c:684
+msgid "Disable"
+msgstr "Выключыць"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.c:778
+#: calendar/gui/dialogs/cal-prefs-dialog.c:811
+#: calendar/gui/dialogs/cal-prefs-dialog.c:846 mail/em-account-prefs.c:288
+#: mail/em-account-prefs.c:329 mail/em-account-prefs.c:374
+#: mail/em-composer-prefs.c:596 mail/em-composer-prefs.c:654
+#: mail/em-composer-prefs.c:684
+msgid "Enable"
+msgstr "Уключыць"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:1
+msgid "05 minutes"
+msgstr " 5 хвілін"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:2
+msgid "10 minutes"
+msgstr "10 хвілін"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:3
+msgid "15 minutes"
+msgstr "15 хвілін"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:4
+msgid "30 minutes"
+msgstr "30 хвілін"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:5
+msgid "60 minutes"
+msgstr "60 хвілін"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:6
+#, fuzzy
+msgid "<b>Alerts</b>"
+msgstr "<b>Пачынаецца:</b> "
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:7
+#, fuzzy
+msgid "<b>General</b>"
+msgstr "Ðагадваньні"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:8
+#, fuzzy
+msgid "<b>Task List</b>"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:9
+#, fuzzy
+msgid "<b>Time</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:10
+#, fuzzy
+msgid "<b>Work Week</b>"
+msgstr "Працоўны тыдзень"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:11
+msgid "Calendar and Tasks Settings"
+msgstr "УÑталёўкі календара Ñ– заданьнÑÑž..."
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:12
+msgid "Color for overdue tasks"
+msgstr "Колер Ð´Ð»Ñ Ð½Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½Ñ‹Ñ… заданьнÑÑž"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:13
+msgid "Color for tasks due today"
+msgstr "Колер Ð´Ð»Ñ ÑƒÐ¼Ð¾ÑžÐ»ÐµÐ½Ñ‹Ñ… на дзень заданьнÑÑž "
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:14
+msgid "Day _ends:"
+msgstr "Дзень Ñканчаецца:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:15
+msgid "Days"
+msgstr "Дні"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:16
+#, fuzzy
+msgid "Display"
+msgstr "_Паказаць"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:17
+#: mail/mail-config.glade.h:76
+msgid "E_nable"
+msgstr "Уключыць"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:18
+#, fuzzy
+msgid "Free/Busy Publishing"
+msgstr "Запыт \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:19
+#: calendar/gui/dialogs/recurrence-page.c:1038
+#: calendar/gui/e-itip-control.c:581
+msgid "Friday"
+msgstr "ПÑтніца"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:21
+msgid "Hours"
+msgstr "Гадзіны"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:22
+msgid "Minutes"
+msgstr "Хвіліны"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:23
+#: calendar/gui/dialogs/recurrence-page.c:1034
+#: calendar/gui/e-itip-control.c:577
+msgid "Monday"
+msgstr "ПанÑдзелак"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:24
+msgid "S_un"
+msgstr "ÐÑд"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:25
+#: calendar/gui/dialogs/recurrence-page.c:1039
+#: calendar/gui/e-itip-control.c:582
+msgid "Saturday"
+msgstr "Субота"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:26
+msgid "Sh_ow a reminder"
+msgstr "Паказаць нагадваньне"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:27
+msgid "Show week _numbers in date navigator"
+msgstr "Паказаць нумары тыднÑÑž у навігатары па датах"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:28
+#: calendar/gui/dialogs/recurrence-page.c:1040
+#: calendar/gui/e-itip-control.c:576
+msgid "Sunday"
+msgstr "ÐÑдзелÑ"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:29
+msgid "T_asks due today:"
+msgstr "Заданьні уÑталÑÐ²Ð°Ð½Ñ‹Ñ Ð½Ð° ÑёньнÑ:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:30
+msgid "T_hu"
+msgstr "Чцв"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:31
+#: calendar/gui/dialogs/recurrence-page.c:1037
+#: calendar/gui/e-itip-control.c:580
+msgid "Thursday"
+msgstr "Чацьвер"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:32
+msgid "Time _zone:"
+msgstr "ЧаÑÐ°Ð²Ð°Ñ Ð·Ð¾Ð½Ð°: "
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:33
+msgid "Time format:"
+msgstr "Фармат чаÑу:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:34
+#: calendar/gui/dialogs/recurrence-page.c:1035
+#: calendar/gui/e-itip-control.c:578
+msgid "Tuesday"
+msgstr "Ðўторак"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:35
+msgid "W_eek starts:"
+msgstr "Тыдзень пачынаецца з:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:36
+#: calendar/gui/dialogs/recurrence-page.c:1036
+#: calendar/gui/e-itip-control.c:579
+msgid "Wednesday"
+msgstr "Серада"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:37
+msgid "Work days:"
+msgstr "ÐŸÑ€Ð°Ñ†Ð¾ÑžÐ½Ñ‹Ñ Ð´Ð½Ñ–:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:38
+msgid "_12 hour (AM/PM)"
+msgstr "12 гадзін"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:39
+msgid "_24 hour"
+msgstr "24 гадзіны"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:40
+#, fuzzy
+msgid "_Add URL"
+msgstr "_Дадаць ->"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:41
+msgid "_Ask for confirmation when deleting items"
+msgstr "Запыт на падцьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:42
+msgid "_Compress weekends in month view"
+msgstr "СьціÑнуць Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ñ Ñž праглÑдзе меÑÑца"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:43
+msgid "_Day begins:"
+msgstr "Дзень пачынаецца:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:44
+#: calendar/gui/dialogs/recurrence-page.glade.h:6 filter/filter.glade.h:10
+#: mail/mail-config.glade.h:162 ui/evolution-addressbook.xml.h:34
+#: ui/evolution-calendar.xml.h:41 ui/evolution-composer-entries.xml.h:8
+#: ui/evolution-mail-list.xml.h:24 ui/evolution-mail-messagedisplay.xml.h:6
+#: ui/evolution-message-composer.xml.h:43
+#: ui/evolution-signature-editor.xml.h:12 ui/evolution-subscribe.xml.h:10
+#: ui/evolution-tasks.xml.h:22
+msgid "_Edit"
+msgstr "_РÑдагаваньне"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:45
+msgid "_Fri"
+msgstr "_Птн"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:46
+msgid "_Hide completed tasks after"
+msgstr "Схаваць выкананьне Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ Ð¿Ñ€Ð°Ð·"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:47
+msgid "_Mon"
+msgstr "_Пан"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:48
+msgid "_Overdue tasks:"
+msgstr "_ÐÑÐ²Ñ‹ÐºÐ°Ð½Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:49
+msgid "_Sat"
+msgstr "Суб"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:50
+msgid "_Show appointment end times in week and month views"
+msgstr "_ÐдлюÑтраваць ÑуÑÑ‚Ñ€Ñчу Ñ– Ñ‡Ð°Ñ Ñƒ выглÑдзе тыднÑÑž Ñ– меÑÑцаў"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:51
+msgid "_Time divisions:"
+msgstr "ЧаÑÐ°Ð²Ñ‹Ñ Ð¿Ð°Ð´Ð·ÐµÐ»Ñ‹:"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:52
+msgid "_Tue"
+msgstr "Ðўт"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:53
+msgid "_Wed"
+msgstr "Срд"
+
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:54
+msgid "before every appointment"
+msgstr "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+
+#: calendar/gui/dialogs/calendar-setup.c:172
+#, fuzzy
+msgid "You must specify a location to get the calendar from."
+msgstr "Ð’Ñ‹ муÑіце пазначыць назву файла."
+
+#: calendar/gui/dialogs/calendar-setup.c:180
+#, fuzzy, c-format
+msgid "The source location '%s' is not well-formed."
+msgstr "ÐœÑтад неабходны Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ– \"%s\" не падтрымліваецца"
+
+#: calendar/gui/dialogs/calendar-setup.c:195
+#, c-format
+msgid "The source location '%s' is not a webcal source."
+msgstr ""
+
+#: calendar/gui/dialogs/calendar-setup.c:275
+#, c-format
+msgid "Source with name '%s' already exists in the selected group"
+msgstr ""
+
+#: calendar/gui/dialogs/calendar-setup.c:288
+#, c-format
+msgid ""
+"The group '%s' is remote. You must specify a location to get the calendar "
+"from"
+msgstr ""
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:2
+#, fuzzy
+msgid "Add Calendar"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:3
+#, fuzzy
+msgid "Add Task List"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:4
+#, fuzzy
+msgid "C_olor:"
+msgstr "Колеры"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:5 mail/mail-config.glade.h:110
+msgid "Pick a color"
+msgstr "ВыбÑрыце колер"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:6
+#, fuzzy
+msgid "_Add Calendar"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:7
+#, fuzzy
+msgid "_Add Task List"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:9
+#, fuzzy
+msgid "_Refresh:"
+msgstr "Ðбнавіць"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:10
+#, fuzzy
+msgid "_Type:"
+msgstr "Тып:"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:11
+msgid "_URL:"
+msgstr "URL:"
+
+#: calendar/gui/dialogs/calendar-setup.glade.h:15 filter/filter.glade.h:20
+msgid "weeks"
+msgstr "тыдні"
+
+#: calendar/gui/dialogs/changed-comp.c:60
+msgid "This event has been deleted."
+msgstr "ГÑÑ‚Ð°Ñ Ð¿Ð°Ð´Ð·ÐµÑ Ð±Ñ‹Ð»Ð° выдалена."
+
+#: calendar/gui/dialogs/changed-comp.c:64
+msgid "This task has been deleted."
+msgstr "ГÑтае заданьне было выдалена."
+
+#: calendar/gui/dialogs/changed-comp.c:68
+msgid "This journal entry has been deleted."
+msgstr "ГÑÑ‚Ñ‹ Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа быў выдалены."
+
+#: calendar/gui/dialogs/changed-comp.c:77
+#, c-format
+msgid "%s You have made changes. Forget those changes and close the editor?"
+msgstr "%s Ð’Ñ‹ зрабілі зьмены. Забыца на Ñ–Ñ… Ñ– закрыць Ñ€Ñдактар?"
+
+#: calendar/gui/dialogs/changed-comp.c:79
+#, c-format
+msgid "%s You have made no changes, close the editor?"
+msgstr "%s Ð’Ñ‹ анічога не зьмÑнілі. Зачыніць Ñ€Ñдактар?"
+
+#: calendar/gui/dialogs/changed-comp.c:84
+msgid "This event has been changed."
+msgstr "ГÑÑ‚Ð°Ñ Ð¿Ð°Ð´Ð·ÐµÑ Ð±Ñ‹Ð»Ð° зьменена."
+
+#: calendar/gui/dialogs/changed-comp.c:88
+msgid "This task has been changed."
+msgstr "ГÑтае заданьне было зьменана."
+
+#: calendar/gui/dialogs/changed-comp.c:92
+msgid "This journal entry has been changed."
+msgstr "ГÑÑ‚Ñ‹ Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа быў зьменены."
+
+#: calendar/gui/dialogs/changed-comp.c:101
+#, c-format
+msgid "%s You have made changes. Forget those changes and update the editor?"
+msgstr "%s Ð’Ñ‹ ўнеÑьлі зьмены. Забыцца на Ñ–Ñ… Ñ– абнавіць Ñ€Ñдактар?"
+
+#: calendar/gui/dialogs/changed-comp.c:103
+#, c-format
+msgid "%s You have made no changes, update the editor?"
+msgstr "%s Ð’Ñ‹ ўнеÑьлі зьмены, абнавіць Ñ€Ñдактар?"
+
+#: calendar/gui/dialogs/comp-editor-page.c:464
+#, c-format
+msgid "Validation error: %s"
+msgstr "Памылка зацьверджаньнÑ: %s"
+
+#: calendar/gui/dialogs/comp-editor-util.c:187 calendar/gui/print.c:2258
+msgid " to "
+msgstr " да "
+
+#: calendar/gui/dialogs/comp-editor-util.c:191 calendar/gui/print.c:2262
+msgid " (Completed "
+msgstr " (Выканана "
+
+#: calendar/gui/dialogs/comp-editor-util.c:193 calendar/gui/print.c:2264
+msgid "Completed "
+msgstr "Выканана "
+
+#: calendar/gui/dialogs/comp-editor-util.c:198 calendar/gui/print.c:2269
+msgid " (Due "
+msgstr " (ПатрÑба "
+
+#: calendar/gui/dialogs/comp-editor-util.c:200 calendar/gui/print.c:2271
+msgid "Due "
+msgstr "Умоўленае"
+
+#: calendar/gui/dialogs/comp-editor.c:264
+msgid "Could not update object"
+msgstr "Ðемагчыма абнавіць аб'ект"
+
+#: calendar/gui/dialogs/comp-editor.c:878
+#: calendar/gui/dialogs/comp-editor.c:915
+msgid "Edit Appointment"
+msgstr "РÑдагаваньне ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/dialogs/comp-editor.c:883
+#: calendar/gui/dialogs/comp-editor.c:920
+#, c-format
+msgid "Appointment - %s"
+msgstr "СуÑÑ‚Ñ€Ñча - %s"
+
+#: calendar/gui/dialogs/comp-editor.c:886
+#: calendar/gui/dialogs/comp-editor.c:923
+#, c-format
+msgid "Task - %s"
+msgstr "Заданьне - %s"
+
+#: calendar/gui/dialogs/comp-editor.c:889
+#: calendar/gui/dialogs/comp-editor.c:926
+#, c-format
+msgid "Journal entry - %s"
+msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа - %s"
+
+#: calendar/gui/dialogs/comp-editor.c:900
+#: calendar/gui/dialogs/comp-editor.c:936
+msgid "No summary"
+msgstr "ÐÑма агульных зьвеÑтак"
+
+#: calendar/gui/dialogs/comp-editor.c:1302
+#: calendar/gui/dialogs/comp-editor.c:1335
+#: calendar/gui/dialogs/comp-editor.c:1359
+msgid "Changes made to this item may be discarded if an update arrives"
+msgstr ""
+
+#: calendar/gui/dialogs/comp-editor.c:1383
+#, fuzzy
+msgid "Unable to use current version!"
+msgstr "Ðемагчыма атрымаць бÑгучую вÑÑ€ÑÑ‹ÑŽ!"
+
+#: calendar/gui/dialogs/copy-source-dialog.c:61
+#, fuzzy
+msgid "Could not open source"
+msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ падзеленую Ñ‚Ñчку: %s"
+
+#: calendar/gui/dialogs/copy-source-dialog.c:69
+#, fuzzy
+msgid "Could not open destination"
+msgstr "Ðдменена апÑрацыі"
+
+#: calendar/gui/dialogs/copy-source-dialog.c:78
+msgid "Destination is read only"
+msgstr ""
+
+#: calendar/gui/dialogs/delete-error.c:54
+msgid "The event could not be deleted due to a corba error"
+msgstr "ÐŸÐ°Ð´Ð·ÐµÑ Ð½Ðµ можа быць выдалена з-за памылкі corba"
+
+#: calendar/gui/dialogs/delete-error.c:57
+msgid "The task could not be deleted due to a corba error"
+msgstr "Заданьне не можа быць выдалена з-за памылкі corba"
+
+#: calendar/gui/dialogs/delete-error.c:60
+msgid "The journal entry could not be deleted due to a corba error"
+msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа не можа быць выдалены з-за памылкі corba"
+
+#: calendar/gui/dialogs/delete-error.c:63
+msgid "The item could not be deleted due to a corba error"
+msgstr "ЭлемÑнт не можа быць выдалена з-за памылкі corba"
+
+#: calendar/gui/dialogs/delete-error.c:70
+msgid "The event could not be deleted because permission was denied"
+msgstr "ÐŸÐ°Ð´Ð·ÐµÑ Ð½Ðµ можа быць выдалена пакуль доÑтуп забаронены"
+
+#: calendar/gui/dialogs/delete-error.c:73
+msgid "The task could not be deleted because permission was denied"
+msgstr "Заданьне не можа быць выдалена пакуль доÑтуп забаронены"
+
+#: calendar/gui/dialogs/delete-error.c:76
+msgid "The journal entry could not be deleted because permission was denied"
+msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа не можа быць выдалены пакуль доÑтуп забаронены"
+
+#: calendar/gui/dialogs/delete-error.c:79
+msgid "The item could not be deleted because permission was denied"
+msgstr "ЭлемÑнт не можа быць выдалена пакуль доÑтуп забаронены"
+
+#: calendar/gui/dialogs/delete-error.c:86
+#, fuzzy
+msgid "The event could not be deleted due to an error"
+msgstr "ÐŸÐ°Ð´Ð·ÐµÑ Ð½Ðµ можа быць выдалена з-за памылкі corba"
+
+#: calendar/gui/dialogs/delete-error.c:89
+#, fuzzy
+msgid "The task could not be deleted due to an error"
+msgstr "Заданьне не можа быць выдалена з-за памылкі corba"
+
+#: calendar/gui/dialogs/delete-error.c:92
+#, fuzzy
+msgid "The journal entry could not be deleted due to an error"
+msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа не можа быць выдалены з-за памылкі corba"
+
+#: calendar/gui/dialogs/delete-error.c:95
+#, fuzzy
+msgid "The item could not be deleted due to an error"
+msgstr "ЭлемÑнт не можа быць выдалена з-за памылкі corba"
+
+#: calendar/gui/dialogs/e-delegate-dialog.glade.h:1
+#, fuzzy
+msgid "Contacts..."
+msgstr "_Кантакты..."
+
+#: calendar/gui/dialogs/e-delegate-dialog.glade.h:2
+msgid "Delegate To:"
+msgstr "ДÑлегаваць да:"
+
+#: calendar/gui/dialogs/e-delegate-dialog.glade.h:3
+msgid "Enter Delegate"
+msgstr "Пазначце дÑлегата"
+
+#: calendar/gui/dialogs/event-editor.c:153 calendar/gui/print.c:2295
+msgid "Appointment"
+msgstr "СуÑÑ‚Ñ€Ñча"
+
+#: calendar/gui/dialogs/event-editor.c:162
+msgid "Recurrence"
+msgstr "Ð’Ñртаньне"
+
+#: calendar/gui/dialogs/event-editor.c:169
+#: calendar/gui/dialogs/event-editor.c:239
+#: calendar/gui/dialogs/event-editor.c:381
+msgid "Scheduling"
+msgstr "ПлÑнаваньне"
+
+#: calendar/gui/dialogs/event-editor.c:176
+#: calendar/gui/dialogs/event-editor.c:242
+#: calendar/gui/dialogs/event-editor.c:384
+#, fuzzy
+msgid "Invitations"
+msgstr "ІнфармацыÑ"
+
+#: calendar/gui/dialogs/event-page.c:692
+msgid "Event with no start date"
+msgstr ""
+
+#: calendar/gui/dialogs/event-page.c:695
+msgid "Event with no end date"
+msgstr ""
+
+#: calendar/gui/dialogs/event-page.c:855 calendar/gui/dialogs/task-page.c:523
+msgid "Start date is wrong"
+msgstr "Дата пачатку памылковаÑ"
+
+#: calendar/gui/dialogs/event-page.c:865
+msgid "End date is wrong"
+msgstr "Дата завÑршÑÐ½ÑŒÐ½Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ"
+
+#: calendar/gui/dialogs/event-page.c:888
+msgid "Start time is wrong"
+msgstr "Ð§Ð°Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÑƒ памылковы"
+
+#: calendar/gui/dialogs/event-page.c:895
+msgid "End time is wrong"
+msgstr "Ð§Ð°Ñ Ð·Ð°ÐºÐ°Ð½Ñ‡ÑÐ½ÑŒÐ½Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ñ‹"
+
+#: calendar/gui/dialogs/event-page.c:1605
+#, fuzzy, c-format
+msgid "Unable to open the calendar '%s'."
+msgstr "ÐдÑутнічаюць правы на адкрыцьцё калÑндара"
+
+#: calendar/gui/dialogs/event-page.c:1804
+#, fuzzy, c-format
+msgid "%d day before appointment"
+msgid_plural "%d days before appointment"
+msgstr[0] "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+msgstr[1] "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+
+#: calendar/gui/dialogs/event-page.c:1812
+#, fuzzy, c-format
+msgid "%d hour before appointment"
+msgid_plural "%d hours before appointment"
+msgstr[0] "канец ÑуÑÑ‚Ñ€Ñчы"
+msgstr[1] "канец ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/dialogs/event-page.c:1820
+#, fuzzy, c-format
+msgid "%d minute before appointement"
+msgid_plural "%d minutes before appointment"
+msgstr[0] "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+msgstr[1] "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+
+#: calendar/gui/dialogs/event-page.glade.h:2
+#, fuzzy
+msgid "1 day before appointment"
+msgstr "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+
+#: calendar/gui/dialogs/event-page.glade.h:3
+#, fuzzy
+msgid "1 hour before appointment"
+msgstr "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+
+#: calendar/gui/dialogs/event-page.glade.h:4
+#, fuzzy
+msgid "15 minutes before appointment"
+msgstr "перад кожнай ÑуÑÑ‚Ñ€Ñчай"
+
+#: calendar/gui/dialogs/event-page.glade.h:5
+#, fuzzy
+msgid "<b>Basics</b>"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/dialogs/event-page.glade.h:6
+#, fuzzy
+msgid "<b>Date and Time</b>"
+msgstr "Дата й чаÑ"
+
+#: calendar/gui/dialogs/event-page.glade.h:7
+msgid "A_ll day event"
+msgstr "ÐŸÐ°Ð´Ð·ÐµÑ _уÑÑго днÑ"
+
+#: calendar/gui/dialogs/event-page.glade.h:8
+#, fuzzy
+msgid "C_ustomize..."
+msgstr "Захаваць праглÑд карыÑтальніка..."
+
+#: calendar/gui/dialogs/event-page.glade.h:9
+#: calendar/gui/dialogs/task-page.glade.h:4
+msgid "Ca_tegories..."
+msgstr "_КатÑгорыі..."
+
+#: calendar/gui/dialogs/event-page.glade.h:10
+#, fuzzy
+msgid "Cale_ndar:"
+msgstr "Ка_лÑндар:"
+
+#: calendar/gui/dialogs/event-page.glade.h:11
+#: calendar/gui/dialogs/task-page.glade.h:5
+#, fuzzy
+msgid "Classi_fication:"
+msgstr "КлÑÑыфікацыÑ"
+
+#: calendar/gui/dialogs/event-page.glade.h:12
+#: calendar/gui/dialogs/task-page.glade.h:6 calendar/gui/e-cal-list-view.c:259
+#: calendar/gui/e-cal-model.c:355 calendar/gui/e-calendar-table.c:377
+msgid "Confidential"
+msgstr "СакрÑтнае"
+
+#: calendar/gui/dialogs/event-page.glade.h:13
+#, fuzzy
+msgid "Locat_ion:"
+msgstr "МейÑца:"
+
+#: calendar/gui/dialogs/event-page.glade.h:14
+#: calendar/gui/dialogs/task-page.glade.h:8 calendar/gui/e-cal-list-view.c:258
+#: calendar/gui/e-cal-model.c:353 calendar/gui/e-calendar-table.c:376
+msgid "Private"
+msgstr "Прыватнае"
+
+#: calendar/gui/dialogs/event-page.glade.h:15
+#: calendar/gui/dialogs/task-page.glade.h:9 calendar/gui/e-cal-list-view.c:257
+#: calendar/gui/e-cal-model.c:344 calendar/gui/e-cal-model.c:351
+#: calendar/gui/e-calendar-table.c:375
+msgid "Public"
+msgstr "Публічнае"
+
+#: calendar/gui/dialogs/event-page.glade.h:16
+#, fuzzy
+msgid "Show time as _busy"
+msgstr "Паказаць дату Ñк"
+
+#: calendar/gui/dialogs/event-page.glade.h:17
+#: calendar/gui/dialogs/task-page.glade.h:11
+msgid "Su_mmary:"
+msgstr "Ð_гулам:"
+
+#: calendar/gui/dialogs/event-page.glade.h:18
+msgid "This appointment has customized alarms"
+msgstr ""
+
+#: calendar/gui/dialogs/event-page.glade.h:19
+#, fuzzy
+msgid "_Alarm"
+msgstr "Сыгналы"
+
+#: calendar/gui/dialogs/event-page.glade.h:20
+#, fuzzy
+msgid "_Description:"
+msgstr "ÐпіÑаньне:"
+
+#: calendar/gui/dialogs/event-page.glade.h:21
+#: calendar/gui/e-meeting-time-sel.c:613
+msgid "_End time:"
+msgstr "_Ð§Ð°Ñ Ð·Ð°ÐºÐ°Ð½Ñ‡ÑньнÑ:"
+
+#: calendar/gui/dialogs/event-page.glade.h:22
+#: calendar/gui/e-meeting-time-sel.c:594
+msgid "_Start time:"
+msgstr "_Ð§Ð°Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÑƒ:"
+
+#. an empty string is the same as 'None'
+#. add a "None" option to the stores menu
+#. Put the "None" and "UTC" entries at the top of the combo's list.
+#. When "None" is selected we want the field to be cleared.
+#. Note that we don't show this here, since by default a 'None' date
+#. is not permitted.
+#: calendar/gui/dialogs/meeting-page.c:316
+#: calendar/gui/dialogs/meeting-page.glade.h:5
+#: calendar/gui/e-cal-model-tasks.c:647 calendar/gui/e-itip-control.c:953
+#: composer/e-msg-composer.c:2097 filter/filter-rule.c:877
+#: mail/em-account-prefs.c:427 mail/em-folder-view.c:933
+#: mail/mail-account-gui.c:1571 mail/mail-account-gui.c:1967
+#: mail/mail-config.glade.h:103
+#: widgets/e-timezone-dialog/e-timezone-dialog.c:192
+#: widgets/misc/e-cell-date-edit.c:257 widgets/misc/e-dateedit.c:443
+#: widgets/misc/e-dateedit.c:1480 widgets/misc/e-dateedit.c:1595
+msgid "None"
+msgstr "ÐÑма"
+
+#: calendar/gui/dialogs/meeting-page.c:449
+msgid "The organizer selected no longer has an account."
+msgstr ""
+
+#: calendar/gui/dialogs/meeting-page.c:455
+msgid "An organizer is required."
+msgstr "Ðеабходны арганізатар."
+
+#: calendar/gui/dialogs/meeting-page.c:470
+msgid "At least one attendee is required."
+msgstr "Патрабуе Ñ…Ð°Ñ†Ñ Ð± аднаго удзельніка."
+
+#: calendar/gui/dialogs/meeting-page.c:793
+msgid "_Delegate To..."
+msgstr "_ДÑлегаваць у..."
+
+#: calendar/gui/dialogs/meeting-page.c:797
+#: composer/e-msg-composer-attachment-bar.c:453
+msgid "_Remove"
+msgstr "_Выдаліць"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:1
+#: calendar/gui/e-meeting-list-view.c:218
+#: calendar/gui/e-meeting-time-sel.etspec.h:1
+msgid "Attendee"
+msgstr "Удзельнік"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:2
+#: calendar/gui/e-meeting-time-sel.etspec.h:2
+msgid "Click here to add an attendee"
+msgstr "Клікніце тутака каб дадаць удзельніка"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:3
+#: calendar/gui/e-meeting-time-sel.etspec.h:3
+msgid "Common Name"
+msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð°"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:4
+#: calendar/gui/e-meeting-time-sel.etspec.h:4
+msgid "Delegated From"
+msgstr "ДÑлегаваць з"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:5
+#: calendar/gui/e-meeting-time-sel.etspec.h:5
+msgid "Delegated To"
+msgstr "ДÑлегаваць у"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:6
+#: calendar/gui/e-meeting-time-sel.etspec.h:6
+msgid "Language"
+msgstr "Мова"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:7
+#: calendar/gui/e-meeting-time-sel.etspec.h:7
+msgid "Member"
+msgstr "Удзельнік"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:8
+#: calendar/gui/e-itip-control.c:1085 calendar/gui/e-meeting-list-view.c:241
+#: calendar/gui/e-meeting-time-sel.etspec.h:8
+msgid "RSVP"
+msgstr "RSVP"
+
+#: calendar/gui/dialogs/meeting-page.etspec.h:10
+#: calendar/gui/dialogs/task-editor.c:158
+#: calendar/gui/e-calendar-table.etspec.h:10
+#: calendar/gui/e-meeting-list-view.c:248
+#: calendar/gui/e-meeting-time-sel.etspec.h:10 mail/em-filter-i18n.h:62
+#: mail/message-list.etspec.h:12
+msgid "Status"
+msgstr "Стан"
+
+#: calendar/gui/dialogs/meeting-page.glade.h:2
+#, fuzzy
+msgid "<b>Att_endees</b>"
+msgstr "<b>Пачынаецца:</b> "
+
+#: calendar/gui/dialogs/meeting-page.glade.h:3
+#, fuzzy
+msgid "C_hange Organizer"
+msgstr "_ЗьмÑніць арганізатара"
+
+#: calendar/gui/dialogs/meeting-page.glade.h:4
+#: calendar/gui/e-meeting-time-sel.c:415
+#, fuzzy
+msgid "Con_tacts..."
+msgstr "_Кантакты..."
+
+#: calendar/gui/dialogs/meeting-page.glade.h:6
+#, fuzzy
+msgid "Or_ganizer:"
+msgstr "Ðрганізатар:"
+
+#: calendar/gui/dialogs/meeting-page.glade.h:7
+#: calendar/gui/e-itip-control.glade.h:9
+msgid "Organizer:"
+msgstr "Ðрганізатар:"
+
+#: calendar/gui/dialogs/new-calendar.glade.h:2
+#, fuzzy
+msgid "<b>Calendar options</b>"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/dialogs/new-calendar.glade.h:3
+#, fuzzy
+msgid "Add New Calendar"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#: calendar/gui/dialogs/new-calendar.glade.h:4
+#, fuzzy
+msgid "Calendar Group"
+msgstr "Памылка iCalendar"
+
+#: calendar/gui/dialogs/new-calendar.glade.h:5
+#, fuzzy
+msgid "Calendar Location"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/dialogs/new-calendar.glade.h:6
+#, fuzzy
+msgid "Calendar Name"
+msgstr "КалÑндар"
+
+#: calendar/gui/dialogs/new-task-list.glade.h:2
+#, fuzzy
+msgid "<b>Task List Options</b>"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/dialogs/new-task-list.glade.h:3
+#, fuzzy
+msgid "Add New Task List"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/dialogs/new-task-list.glade.h:4
+#, fuzzy
+msgid "Task List Group"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/dialogs/new-task-list.glade.h:5
+#, fuzzy
+msgid "Task List Name"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/dialogs/recur-comp.c:51
+msgid "You are modifying a recurring event, what would you like to modify?"
+msgstr ""
+
+#: calendar/gui/dialogs/recur-comp.c:55
+msgid "You are modifying a recurring task, what would you like to modify?"
+msgstr ""
+
+#: calendar/gui/dialogs/recur-comp.c:59
+msgid ""
+"You are modifying a recurring journal entry, what would you like to modify?"
+msgstr ""
+
+#: calendar/gui/dialogs/recur-comp.c:85
+msgid "This Instance Only"
+msgstr "Толькі гÑÑ‚Ñ‹ ÑкзÑмплÑÑ€"
+
+#: calendar/gui/dialogs/recur-comp.c:89
+#, fuzzy
+msgid "This and Prior Instances"
+msgstr "ГÑÑ‚Ñ‹ й будучы ÑкзÑмплÑры"
+
+#: calendar/gui/dialogs/recur-comp.c:95
+msgid "This and Future Instances"
+msgstr "ГÑÑ‚Ñ‹ й будучы ÑкзÑмплÑры"
+
+#: calendar/gui/dialogs/recur-comp.c:100
+msgid "All Instances"
+msgstr "УÑе ÑкзÑмплÑры"
+
+#: calendar/gui/dialogs/recurrence-page.c:511
+msgid "This appointment contains recurrences that Evolution cannot edit."
+msgstr ""
+"ГÑÑ‚Ð°Ñ ÑуÑÑ‚Ñ€Ñча мае правілы паўтору, ÑÐºÑ–Ñ Ð½Ñ Ð¼Ð¾Ð³ÑƒÑ†ÑŒ быць адрÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½Ñ‹Ñ Ñƒ "
+"\"Эвалюцыі\"."
+
+#: calendar/gui/dialogs/recurrence-page.c:806
+msgid "Recurrence date is invalid"
+msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° вÑртаньнÑ"
+
+#: calendar/gui/dialogs/recurrence-page.c:917
+msgid "on"
+msgstr "на"
+
+#: calendar/gui/dialogs/recurrence-page.c:978
+msgid "first"
+msgstr "першы"
+
+#: calendar/gui/dialogs/recurrence-page.c:979
+msgid "second"
+msgstr "другі"
+
+#: calendar/gui/dialogs/recurrence-page.c:980
+msgid "third"
+msgstr "Ñ‚Ñ€Ñці"
+
+#: calendar/gui/dialogs/recurrence-page.c:981
+msgid "fourth"
+msgstr "чыцьверты"
+
+#: calendar/gui/dialogs/recurrence-page.c:982
+msgid "last"
+msgstr "апошні"
+
+#: calendar/gui/dialogs/recurrence-page.c:1005
+msgid "Other Date"
+msgstr "Ð†Ð½ÑˆÐ°Ñ Ð´Ð°Ñ‚Ð°"
+
+#: calendar/gui/dialogs/recurrence-page.c:1033
+msgid "day"
+msgstr "дзень"
+
+#: calendar/gui/dialogs/recurrence-page.c:1170
+msgid "on the"
+msgstr "на"
+
+#: calendar/gui/dialogs/recurrence-page.c:1356
+msgid "occurrences"
+msgstr "выпадкі"
+
+#: calendar/gui/dialogs/recurrence-page.c:2309
+#, fuzzy
+msgid "Date/Time"
+msgstr "Дата/ЧаÑ:"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:1
+#, fuzzy
+msgid "<b>Exceptions</b>"
+msgstr "ÐпіÑаньне:"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:2 mail/mail-config.glade.h:4
+#, fuzzy
+msgid "<b>Preview</b>"
+msgstr "ПерадпраглÑд"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:3
+#, fuzzy
+msgid "<b>Recurrence</b>"
+msgstr "Ð’Ñртаньне"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:4
+msgid "Every"
+msgstr "Кожны"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:5
+#, fuzzy
+msgid "This appointment rec_urs"
+msgstr "_РÑдагаваць ÑуÑÑ‚Ñ€Ñчу"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:8
+msgid "for"
+msgstr "длÑ"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:9
+msgid "forever"
+msgstr "назаўÑёды"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:10
+msgid "month(s)"
+msgstr "меÑÑц(Ñ‹)"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:11
+msgid "until"
+msgstr "пакуль"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:12
+msgid "week(s)"
+msgstr "тыдзень(і)"
+
+#: calendar/gui/dialogs/recurrence-page.glade.h:13
+msgid "year(s)"
+msgstr "год(гады)"
+
+#: calendar/gui/dialogs/select-source-dialog.c:88
+#, fuzzy
+msgid "Select destination"
+msgstr "ВыбÑрыце мейÑца прызначÑÐ½ÑŒÐ½Ñ Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð³ÑÑ‚Ñ‹Ñ… даньнÑÑž"
+
+#: calendar/gui/dialogs/select-source-dialog.c:110
+#, fuzzy
+msgid "_Destination"
+msgstr "Выдаліць гÑтую Ñ‚Ñчку"
+
+#: calendar/gui/dialogs/select-source-dialog.c:112
+#, fuzzy
+msgid "Task List"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/dialogs/task-details-page.c:427
+msgid "Completed date is wrong"
+msgstr "Дата заканчÑÐ½ÑŒÐ½Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:1
+#, fuzzy
+msgid "<span weight=\"bold\">Miscellaneous\t</span>"
+msgstr "Паведамленьне, Ñкое адлюÑтроўваецца:"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:2
+#, fuzzy
+msgid "<span weight=\"bold\">Status</span>"
+msgstr "Паведамленьне, Ñкое адлюÑтроўваецца:"
+
+#. Pass TRUE as is_utc, so it gets converted to the current
+#. timezone.
+#: calendar/gui/dialogs/task-details-page.glade.h:4
+#: calendar/gui/e-cal-component-preview.c:230
+#: calendar/gui/e-cal-model-tasks.c:350 calendar/gui/e-cal-model-tasks.c:653
+#: calendar/gui/e-calendar-table.c:472 calendar/gui/e-itip-control.c:745
+#: calendar/gui/e-meeting-store.c:187 calendar/gui/e-meeting-store.c:210
+#: calendar/gui/print.c:2346
+msgid "Completed"
+msgstr "Выканана"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:5
+#: calendar/gui/e-cal-component-preview.c:249
+#: calendar/gui/e-calendar-table.c:397 mail/message-list.c:1012
+msgid "High"
+msgstr "Ð’Ñ‹Ñокі"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:6
+#: calendar/gui/e-cal-component-preview.c:227
+#: calendar/gui/e-cal-model-tasks.c:348 calendar/gui/e-cal-model-tasks.c:651
+#: calendar/gui/e-cal-model-tasks.c:726 calendar/gui/e-calendar-table.c:471
+#: calendar/gui/print.c:2343
+msgid "In Progress"
+msgstr "Выконваецца"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:7
+#: calendar/gui/e-cal-component-preview.c:253
+#: calendar/gui/e-calendar-table.c:399 mail/message-list.c:1010
+msgid "Low"
+msgstr "Ðізкі"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:8
+#: calendar/gui/e-cal-component-preview.c:251 calendar/gui/e-cal-model.c:943
+#: calendar/gui/e-calendar-table.c:398 mail/message-list.c:1011
+msgid "Normal"
+msgstr "Ðармальны"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:9
+#: calendar/gui/e-cal-component-preview.c:237
+#: calendar/gui/e-cal-model-tasks.c:346 calendar/gui/e-cal-model-tasks.c:649
+#: calendar/gui/e-calendar-table.c:470 calendar/gui/print.c:2340
+msgid "Not Started"
+msgstr "Ðе раÑпачаты"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:10
+#, fuzzy
+msgid "P_ercent complete:"
+msgstr "ÐдÑоткі выкананьнÑ: %i"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:11
+#: calendar/gui/e-calendar-table.c:400
+msgid "Undefined"
+msgstr "ÐÑвызначаны"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:12
+#, fuzzy
+msgid "_Date completed:"
+msgstr "Дата заканчÑньнÑ:"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:13
+msgid "_Priority:"
+msgstr "_ПрыÑрытÑÑ‚:"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:14
+msgid "_Status:"
+msgstr "_Стан:"
+
+#: calendar/gui/dialogs/task-details-page.glade.h:15
+#, fuzzy
+msgid "_Web Page:"
+msgstr "ÐдрÑÑа Web-Ñтаронкі:"
+
+#: calendar/gui/dialogs/task-editor.c:149 calendar/gui/print.c:2297
+msgid "Task"
+msgstr "Заданьне"
+
+#: calendar/gui/dialogs/task-editor.c:165
+#: calendar/gui/dialogs/task-editor.c:225
+#: calendar/gui/dialogs/task-editor.c:361
+msgid "Assignment"
+msgstr "ПрызначÑньне"
+
+#: calendar/gui/dialogs/task-page.c:496
+msgid "Due date is wrong"
+msgstr "Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° памылковаÑ"
+
+#: calendar/gui/dialogs/task-page.c:831
+#, fuzzy, c-format
+msgid "Unable to open tasks in '%s'."
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ кнігу адрÑÑаў"
+
+#: calendar/gui/dialogs/task-page.glade.h:2
+#, fuzzy
+msgid "<span weight=\"bold\">Basics</span>"
+msgstr "Паведамленьне, Ñкое адлюÑтроўваецца:"
+
+#: calendar/gui/dialogs/task-page.glade.h:3
+#, fuzzy
+msgid "<span weight=\"bold\">Date and Time</span>"
+msgstr "Паведамленьне, Ñкое адлюÑтроўваецца:"
+
+#: calendar/gui/dialogs/task-page.glade.h:7
+#, fuzzy
+msgid "D_escription:"
+msgstr "ÐпіÑаньне:"
+
+#: calendar/gui/dialogs/task-page.glade.h:10
+#, fuzzy
+msgid "Sta_rt date:"
+msgstr "Дата пачатку:"
+
+#: calendar/gui/dialogs/task-page.glade.h:12
+#, fuzzy
+msgid "_Due date:"
+msgstr "_Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°:"
+
+#: calendar/gui/dialogs/task-page.glade.h:13
+#, fuzzy
+msgid "_Group:"
+msgstr "Група"
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:3
+#, fuzzy
+msgid "<b>Free/Busy C_alendars</b>"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:4
+msgid "<b>Publishing Frequency</b>"
+msgstr ""
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:5
+#, fuzzy
+msgid "<b>Publishing _Location</b>"
+msgstr "Запыт \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:6
+#, fuzzy
+msgid "Free/Busy Editor"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:7
+#, fuzzy
+msgid "_Daily"
+msgstr "Дзень"
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:8
+#, fuzzy
+msgid "_Manual"
+msgstr "ÐœÑнаджар"
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:9
+#, fuzzy
+msgid "_Password:"
+msgstr "Пароль"
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:10
+#, fuzzy
+msgid "_Remember password"
+msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:11
+#, fuzzy
+msgid "_Username:"
+msgstr "_Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка:"
+
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:12
+#, fuzzy
+msgid "_Weekly"
+msgstr "Тыдзень"
+
+#: calendar/gui/e-alarm-list.c:395
+#, fuzzy, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] "%d дні"
+msgstr[1] "%d дні"
+
+#: calendar/gui/e-alarm-list.c:400
+#, fuzzy, c-format
+msgid "%d week"
+msgid_plural "%d weeks"
+msgstr[0] "%d тыдні"
+msgstr[1] "%d тыдні"
+
+#: calendar/gui/e-alarm-list.c:405
+#, fuzzy, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] "%d гадзіны"
+msgstr[1] "%d гадзіны"
+
+#: calendar/gui/e-alarm-list.c:410
+#, fuzzy, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] "%d хвіліны"
+msgstr[1] "%d хвіліны"
+
+#: calendar/gui/e-alarm-list.c:415
+#, fuzzy, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] "%d ÑÑкунды"
+msgstr[1] "%d ÑÑкунды"
+
+#: calendar/gui/e-alarm-list.c:462
+msgid "Unknown action to be performed"
+msgstr "ÐевÑдомае дзеÑньне Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ"
+
+#: calendar/gui/e-alarm-list.c:474
+#, c-format
+msgid "%s %s before the start of the appointment"
+msgstr "%s %s да пачатку ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/e-alarm-list.c:477
+#, c-format
+msgid "%s %s after the start of the appointment"
+msgstr "%s %s паÑÑŒÐ»Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÑƒ ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/e-alarm-list.c:482
+#, c-format
+msgid "%s at the start of the appointment"
+msgstr "%s у пачатку ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/e-alarm-list.c:491
+#, c-format
+msgid "%s %s before the end of the appointment"
+msgstr "%s %s перад заканчÑньнем ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/e-alarm-list.c:494
+#, c-format
+msgid "%s %s after the end of the appointment"
+msgstr "%s %s паÑÑŒÐ»Ñ Ð·Ð°ÐºÐ°Ð½Ñ‡ÑÐ½ÑŒÐ½Ñ ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/e-alarm-list.c:499
+#, c-format
+msgid "%s at the end of the appointment"
+msgstr "%s на прыканцы ÑуÑÑ‚Ñ€Ñчы"
+
+#: calendar/gui/e-alarm-list.c:521
+#, c-format
+msgid "%s at %s"
+msgstr "%s на %s"
+
+#: calendar/gui/e-alarm-list.c:527
+#, c-format
+msgid "%s for an unknown trigger type"
+msgstr "%s Ð´Ð»Ñ Ð½ÐµÐ²Ñдомага тыпу Ñ‚Ñ€Ñггера"
+
+#: calendar/gui/e-cal-component-preview.c:71 mail/em-folder-view.c:2385
+#, fuzzy, c-format
+msgid "Click to open %s"
+msgstr "Клікніце каб дадаць заданьне"
+
+#: calendar/gui/e-cal-component-preview.c:156 filter/filter-rule.c:794
+msgid "Untitled"
+msgstr "БÑз назвы"
+
+#: calendar/gui/e-cal-component-preview.c:187
+#: calendar/gui/e-itip-control.c:957 calendar/gui/e-itip-control.glade.h:11
+msgid "Summary:"
+msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі:"
+
+#: calendar/gui/e-cal-component-preview.c:194
+#: calendar/gui/e-cal-component-preview.c:205
+#, fuzzy
+msgid "Start Date:"
+msgstr "Дата пачатку:"
+
+#: calendar/gui/e-cal-component-preview.c:216
+#, fuzzy
+msgid "Due Date:"
+msgstr "_Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°:"
+
+#. write status
+#: calendar/gui/e-cal-component-preview.c:223
+#: calendar/gui/e-itip-control.c:981
+msgid "Status:"
+msgstr "Стан:"
+
+#: calendar/gui/e-cal-component-preview.c:247
+#, fuzzy
+msgid "Priority:"
+msgstr "_ПрыÑрытÑÑ‚:"
+
+#: calendar/gui/e-cal-component-preview.c:268
+#: calendar/gui/e-itip-control.c:1013 calendar/gui/e-itip-control.glade.h:6
+#: composer/e-msg-composer-attachment.glade.h:3 mail/mail-config.glade.h:71
+msgid "Description:"
+msgstr "ÐпіÑаньне:"
+
+#: calendar/gui/e-cal-component-preview.c:300
+#, fuzzy
+msgid "Web Page:"
+msgstr "ÐдрÑÑа Web-Ñтаронкі:"
+
+#: calendar/gui/e-cal-list-view.etspec.h:2
+msgid "End Date"
+msgstr "Дата завÑршÑньнÑ"
+
+#: calendar/gui/e-cal-list-view.etspec.h:4
+msgid "Start Date"
+msgstr "Дата пачатку"
+
+#: calendar/gui/e-cal-list-view.etspec.h:5
+#: calendar/gui/e-calendar-table.etspec.h:11 mail/mail-dialogs.glade.h:22
+msgid "Summary"
+msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі"
+
+#: calendar/gui/e-cal-model-calendar.c:175 calendar/gui/e-calendar-table.c:449
+msgid "Free"
+msgstr "Вольны"
+
+#: calendar/gui/e-cal-model-calendar.c:178 calendar/gui/e-calendar-table.c:450
+#: calendar/gui/e-meeting-time-sel.c:399
+msgid "Busy"
+msgstr "ЗанÑÑ‚Ñ‹"
+
+#: calendar/gui/e-cal-model-tasks.c:302
+msgid "N"
+msgstr "N"
+
+#: calendar/gui/e-cal-model-tasks.c:302
+msgid "S"
+msgstr "S"
+
+#: calendar/gui/e-cal-model-tasks.c:304 smime/lib/e-cert.c:681
+msgid "E"
+msgstr "E"
+
+#: calendar/gui/e-cal-model-tasks.c:304
+msgid "W"
+msgstr "W"
+
+#: calendar/gui/e-cal-model-tasks.c:601
+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/e-cal-model-tasks.c:1012 calendar/gui/e-cal-model.c:949
+#: calendar/gui/e-meeting-list-view.c:146 calendar/gui/e-meeting-store.c:159
+#: calendar/gui/e-meeting-store.c:169 calendar/gui/e-meeting-store.c:765
+msgid "Yes"
+msgstr "Так"
+
+#: calendar/gui/e-cal-model-tasks.c:1012 calendar/gui/e-cal-model.c:949
+#: calendar/gui/e-meeting-list-view.c:147 calendar/gui/e-meeting-store.c:171
+msgid "No"
+msgstr "Ðе"
+
+#. This is the default filename used for temporary file creation
+#: calendar/gui/e-cal-model.c:357 calendar/gui/e-cal-model.c:360
+#: calendar/gui/e-itip-control.c:998 calendar/gui/e-itip-control.c:1212
+#: calendar/gui/e-meeting-list-view.c:122
+#: calendar/gui/e-meeting-list-view.c:136 calendar/gui/e-meeting-store.c:115
+#: calendar/gui/e-meeting-store.c:150 calendar/gui/e-meeting-store.c:215
+#: camel/camel-gpg-context.c:1763 camel/camel-gpg-context.c:1814
+#: camel/camel-tcp-stream-openssl.c:631
+#: camel/providers/imap4/camel-imap4-engine.c:1402
+#: camel/providers/imap4/camel-imap4-engine.c:1432
+#: camel/providers/imap4/camel-imap4-engine.c:1464
+#: camel/providers/imap4/camel-imap4-engine.c:1506
+#: camel/providers/imap4/camel-imap4-store.c:1223
+#: camel/providers/imap4/camel-imap4-utils.c:457
+#: camel/providers/smtp/camel-smtp-transport.c:172
+#: camel/providers/smtp/camel-smtp-transport.c:227 mail/em-utils.c:1155
+#: shell/e-component-registry.c:207 shell/e-component-registry.c:211
+#: widgets/misc/e-charset-picker.c:62
+msgid "Unknown"
+msgstr "ÐевÑдома"
+
+#: calendar/gui/e-cal-model.c:945
+msgid "Recurring"
+msgstr "Паўтор"
+
+#: calendar/gui/e-cal-model.c:947
+msgid "Assigned"
+msgstr "Прызначана"
+
+#: calendar/gui/e-calendar-table.c:419
+msgid "0%"
+msgstr "0%"
+
+#: calendar/gui/e-calendar-table.c:420
+msgid "10%"
+msgstr "10%"
+
+#: calendar/gui/e-calendar-table.c:421
+msgid "20%"
+msgstr "20%"
+
+#: calendar/gui/e-calendar-table.c:422
+msgid "30%"
+msgstr "30%"
+
+#: calendar/gui/e-calendar-table.c:423
+msgid "40%"
+msgstr "40%"
+
+#: calendar/gui/e-calendar-table.c:424
+msgid "50%"
+msgstr "50%"
+
+#: calendar/gui/e-calendar-table.c:425
+msgid "60%"
+msgstr "60%"
+
+#: calendar/gui/e-calendar-table.c:426
+msgid "70%"
+msgstr "70%"
+
+#: calendar/gui/e-calendar-table.c:427
+msgid "80%"
+msgstr "80%"
+
+#: calendar/gui/e-calendar-table.c:428
+msgid "90%"
+msgstr "90%"
+
+#: calendar/gui/e-calendar-table.c:429
+msgid "100%"
+msgstr "100%"
+
+#: calendar/gui/e-calendar-table.c:703 calendar/gui/e-calendar-view.c:658
+msgid "Deleting selected objects"
+msgstr "Выдаленьне вылучаных аб'ектаў"
+
+#: calendar/gui/e-calendar-table.c:867 calendar/gui/e-calendar-view.c:762
+msgid "Updating objects"
+msgstr "Ðбнаўленьне аб'ектаў"
+
+#: calendar/gui/e-calendar-table.c:1043 calendar/gui/e-calendar-table.c:1084
+#: calendar/gui/e-calendar-view.c:1431 calendar/gui/e-calendar-view.c:1512
+#: mail/em-folder-view.c:899 ui/evolution-addressbook.xml.h:37
+msgid "_Open"
+msgstr "_Ðдкрыць"
+
+#: calendar/gui/e-calendar-table.c:1044
+#, fuzzy
+msgid "Open _Web Page"
+msgstr "Ðдкрыць паведамленьне"
+
+#: calendar/gui/e-calendar-table.c:1045 calendar/gui/e-calendar-table.c:1090
+#: calendar/gui/e-calendar-view.c:1432 calendar/gui/e-calendar-view.c:1518
+#: mail/em-folder-view.c:901 mail/em-popup.c:691 mail/em-popup.c:807
+#: ui/evolution-mail-message.xml.h:128
+msgid "_Save As..."
+msgstr "Захаваць _Ñк..."
+
+#: calendar/gui/e-calendar-table.c:1046 calendar/gui/e-calendar-table.c:1088
+#: calendar/gui/e-calendar-view.c:1410 calendar/gui/e-calendar-view.c:1433
+#: calendar/gui/e-calendar-view.c:1516 ui/evolution-addressbook.xml.h:40
+#: ui/evolution-calendar.xml.h:44 ui/evolution-comp-editor.xml.h:19
+#: ui/evolution-contact-editor.xml.h:17 ui/evolution-mail-message.xml.h:125
+#: ui/evolution-tasks.xml.h:25
+msgid "_Print..."
+msgstr "_Друкаваць..."
+
+#: calendar/gui/e-calendar-table.c:1050 calendar/gui/e-calendar-table.c:1079
+#: calendar/gui/e-calendar-view.c:1438 calendar/gui/e-calendar-view.c:1482
+#: ui/evolution-addressbook.xml.h:1 ui/evolution-calendar.xml.h:1
+#: ui/evolution-tasks.xml.h:1
+msgid "C_ut"
+msgstr "Вы_разаць"
+
+#: calendar/gui/e-calendar-table.c:1051 calendar/gui/e-calendar-table.c:1077
+#: calendar/gui/e-calendar-view.c:1439 calendar/gui/e-calendar-view.c:1480
+#: mail/em-folder-tree.c:965 mail/message-list.c:1702
+#: ui/evolution-addressbook.xml.h:31 ui/evolution-calendar.xml.h:39
+#: ui/evolution-composer-entries.xml.h:7 ui/evolution-mail-message.xml.h:109
+#: ui/evolution-tasks.xml.h:20
+msgid "_Copy"
+msgstr "_КапіÑваць"
+
+#: calendar/gui/e-calendar-table.c:1052 calendar/gui/e-calendar-table.c:1086
+#: calendar/gui/e-calendar-view.c:1414 calendar/gui/e-calendar-view.c:1440
+#: calendar/gui/e-calendar-view.c:1514 ui/evolution-addressbook.xml.h:38
+#: ui/evolution-calendar.xml.h:43 ui/evolution-composer-entries.xml.h:9
+#: ui/evolution-mail-message.xml.h:123 ui/evolution-tasks.xml.h:24
+msgid "_Paste"
+msgstr "_УÑтавіць"
+
+#: calendar/gui/e-calendar-table.c:1056
+msgid "_Assign Task"
+msgstr "_Прызначыць заданьне"
+
+#: calendar/gui/e-calendar-table.c:1057
+msgid "_Forward as iCalendar"
+msgstr "_ПерадаÑлаць Ñк iCalendar"
+
+#: calendar/gui/e-calendar-table.c:1058
+msgid "_Mark as Complete"
+msgstr "Пазначыць Ñк выкананае"
+
+#: calendar/gui/e-calendar-table.c:1059
+msgid "_Mark Selected Tasks as Complete"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ– Ñк выкананыÑ"
+
+#. FIXME: need to disable for undeletable folders
+#: calendar/gui/e-calendar-table.c:1063 calendar/gui/e-calendar-table.c:1081
+#: calendar/gui/e-calendar-view.c:1451 calendar/gui/e-calendar-view.c:1484
+#: mail/em-folder-tree.c:2615 mail/em-folder-view.c:924
+#: ui/evolution-addressbook.xml.h:33 ui/evolution-calendar.xml.h:40
+#: ui/evolution-comp-editor.xml.h:17 ui/evolution-contact-editor.xml.h:14
+#: ui/evolution-mail-message.xml.h:112 ui/evolution-tasks.xml.h:21
+msgid "_Delete"
+msgstr "Вы_даліць"
+
+#: calendar/gui/e-calendar-table.c:1064 calendar/gui/e-calendar-table.c:1082
+msgid "_Delete Selected Tasks"
+msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
+
+#: calendar/gui/e-calendar-table.c:1196 calendar/gui/e-calendar-view.c:1060
+#: composer/e-msg-composer.c:1178
+msgid "Save as..."
+msgstr "Захаваць Ñк..."
+
+#: calendar/gui/e-calendar-table.c:1374
+#: calendar/gui/e-calendar-table.etspec.h:4
+msgid "Click to add a task"
+msgstr "Клікніце каб дадаць заданьне"
+
+#: calendar/gui/e-calendar-table.etspec.h:2
+#, no-c-format
+msgid "% Complete"
+msgstr "% Завершана"
+
+#: calendar/gui/e-calendar-table.etspec.h:5 camel/camel-filter-driver.c:1178
+#: camel/camel-filter-driver.c:1270 mail/mail-send-recv.c:615
+msgid "Complete"
+msgstr "Выкананьне"
+
+#: calendar/gui/e-calendar-table.etspec.h:6
+#, fuzzy
+msgid "Completion date"
+msgstr "Дата выкананьнÑ"
+
+#: calendar/gui/e-calendar-table.etspec.h:7
+#, fuzzy
+msgid "Due date"
+msgstr "Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°"
+
+#: calendar/gui/e-calendar-table.etspec.h:8
+msgid "Priority"
+msgstr "ПрыÑрытÑÑ‚"
+
+#: calendar/gui/e-calendar-table.etspec.h:9
+#, fuzzy
+msgid "Start date"
+msgstr "Дата пачатку"
+
+#: calendar/gui/e-calendar-table.etspec.h:12
+msgid "Task sort"
+msgstr "Сартаваньне заданьнÑÑž"
+
+#: calendar/gui/e-calendar-view.c:1176
+#, fuzzy
+msgid "Moving items"
+msgstr "ПерамÑшчÑньне паведамленьнÑÑž"
+
+#: calendar/gui/e-calendar-view.c:1178
+#, fuzzy
+msgid "Copying items"
+msgstr "КапіÑваньне паведамленьнÑÑž"
+
+#: calendar/gui/e-calendar-view.c:1403 calendar/gui/e-calendar-view.c:1492
+msgid "New _Appointment..."
+msgstr "ÐÐ¾Ð²Ð°Ñ _ÑуÑÑ‚Ñ€Ñча..."
+
+#: calendar/gui/e-calendar-view.c:1404 calendar/gui/e-calendar-view.c:1497
+msgid "New All Day _Event"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ð´Ð·ÐµÑ Ð½Ð° ўвеÑÑŒ дзень"
+
+#: calendar/gui/e-calendar-view.c:1405 calendar/gui/e-calendar-view.c:1502
+msgid "New Meeting"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð½Ð°Ñ€Ð°Ð´Ð°"
+
+#: calendar/gui/e-calendar-view.c:1406 calendar/gui/e-calendar-view.c:1507
+msgid "New Task"
+msgstr "Ðовае заданьне"
+
+#: calendar/gui/e-calendar-view.c:1420 ui/evolution-calendar.xml.h:26
+#, fuzzy
+msgid "Select _Today"
+msgstr "Вылучыць абмеркаваньне Ñ‚Ñмы"
+
+#: calendar/gui/e-calendar-view.c:1421
+#, fuzzy
+msgid "_Select Date..."
+msgstr "Выдаліць..."
+
+#: calendar/gui/e-calendar-view.c:1425 ui/evolution-calendar.xml.h:45
+msgid "_Publish Free/Busy Information"
+msgstr "_Ðпублікаваць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/e-calendar-view.c:1444
+#, fuzzy
+msgid "Cop_y to Calendar..."
+msgstr "КапіÑваць у Ñ‚Ñчку..."
+
+#: calendar/gui/e-calendar-view.c:1445
+#, fuzzy
+msgid "Mo_ve to Calendar..."
+msgstr "ПерамÑÑьціць у Ñ‚Ñчку..."
+
+#: calendar/gui/e-calendar-view.c:1446
+msgid "_Schedule Meeting..."
+msgstr "_ЗаплÑнаваць нараду..."
+
+#: calendar/gui/e-calendar-view.c:1447
+msgid "_Forward as iCalendar..."
+msgstr "_ПерадаÑлаць Ñк iCalendar..."
+
+#: calendar/gui/e-calendar-view.c:1452
+msgid "Make this Occurrence _Movable"
+msgstr "Зрабіць гÑтую зьÑву здольнай перамÑшчацца"
+
+#: calendar/gui/e-calendar-view.c:1453 calendar/gui/e-calendar-view.c:1485
+msgid "Delete this _Occurrence"
+msgstr "Выдаліць гÑтую зьÑву"
+
+#: calendar/gui/e-calendar-view.c:1454 calendar/gui/e-calendar-view.c:1486
+msgid "Delete _All Occurrences"
+msgstr "Выдаліць _уÑе зьÑвы"
+
+#: calendar/gui/e-calendar-view.c:1488
+msgid "Go to _Today"
+msgstr "ПерайÑьці да _ÑёньнÑ"
+
+#: calendar/gui/e-calendar-view.c:1490
+msgid "_Go to Date..."
+msgstr "Пера_йÑьці да даты..."
+
+#: calendar/gui/e-calendar-view.c:1520 ui/evolution.xml.h:35
+msgid "_Settings..."
+msgstr "_УÑталёўкі..."
+
+#. strftime format of a weekday, a date and a time, 24-hour.
+#. strptime format of a weekday, a date and a time,
+#. in 24-hour format.
+#. strftime format of a weekday, a date and a
+#. time, in 24-hour format.
+#: calendar/gui/e-cell-date-edit-text.c:117 e-util/e-time-utils.c:180
+#: e-util/e-time-utils.c:393
+msgid "%a %m/%d/%Y %H:%M:%S"
+msgstr "%a %d/%m/%Y %H:%M:%S"
+
+#. strftime format of a weekday, a date and a time, 12-hour.
+#. strptime format of a weekday, a date and a time,
+#. in 12-hour format.
+#. strftime format of a weekday, a date and a
+#. time, in 12-hour format.
+#: calendar/gui/e-cell-date-edit-text.c:120 e-util/e-time-utils.c:175
+#: e-util/e-time-utils.c:402
+msgid "%a %m/%d/%Y %I:%M:%S %p"
+msgstr "%a %d/%m/%Y %I:%M:%S %p"
+
+#: calendar/gui/e-cell-date-edit-text.c:125
+#, c-format
+msgid ""
+"The date must be entered in the format: \n"
+"\n"
+"%s"
+msgstr ""
+"Дата муÑіць быць пазначана у фармаце:\n"
+"\n"
+"%s"
+
+#: calendar/gui/e-day-view-time-item.c:532
+#, c-format
+msgid "%02i minute divisions"
+msgstr "дзÑленьні %02i хвіліны"
+
+#. strftime format %A = full weekday name, %d = day of month,
+#. %B = full month name. Don't use any other specifiers.
+#. strftime format %A = full weekday name, %d = day of
+#. month, %B = full month name. You can change the
+#. order but don't change the specifiers or add
+#. anything.
+#: calendar/gui/e-day-view-top-item.c:710 calendar/gui/e-day-view.c:1571
+#: calendar/gui/e-week-view-main-item.c:320 calendar/gui/print.c:1514
+msgid "%A %d %B"
+msgstr "%A %d %B"
+
+#. String to use in 12-hour time format for times in the morning.
+#: calendar/gui/e-day-view.c:817 calendar/gui/e-week-view.c:583
+#: calendar/gui/print.c:838
+msgid "am"
+msgstr "am"
+
+#. String to use in 12-hour time format for times in the afternoon.
+#: calendar/gui/e-day-view.c:820 calendar/gui/e-week-view.c:586
+#: calendar/gui/print.c:840
+msgid "pm"
+msgstr "pm"
+
+#: calendar/gui/e-itip-control.c:610
+msgid "Yes. (Complex Recurrence)"
+msgstr "Так (КомплекÑнае вÑртаньне)"
+
+#: calendar/gui/e-itip-control.c:621
+#, fuzzy, c-format
+msgid "Every day"
+msgid_plural "Every %d days"
+msgstr[0] "Штодзённа"
+msgstr[1] "Штодзённа"
+
+#: calendar/gui/e-itip-control.c:626
+#, fuzzy, c-format
+msgid "Every week"
+msgid_plural "Every %d weeks"
+msgstr[0] "Штотыдзень"
+msgstr[1] "Штотыдзень"
+
+#: calendar/gui/e-itip-control.c:628
+#, fuzzy, c-format
+msgid "Every week on "
+msgid_plural "Every %d weeks on "
+msgstr[0] "Штотыдзень на "
+msgstr[1] "Штотыдзень на "
+
+#: calendar/gui/e-itip-control.c:636
+msgid " and "
+msgstr " Ñ– "
+
+#: calendar/gui/e-itip-control.c:643
+#, c-format
+msgid "The %s day of "
+msgstr "%s дзень "
+
+#: calendar/gui/e-itip-control.c:656
+#, c-format
+msgid "The %s %s of "
+msgstr "%s %s"
+
+#: calendar/gui/e-itip-control.c:663
+#, fuzzy, c-format
+msgid "every month"
+msgid_plural "every %d months"
+msgstr[0] "штомеÑÑц"
+msgstr[1] "штомеÑÑц"
+
+#: calendar/gui/e-itip-control.c:667
+#, fuzzy, c-format
+msgid "Every year"
+msgid_plural "Every %d years"
+msgstr[0] "Штогод"
+msgstr[1] "Штогод"
+
+#: calendar/gui/e-itip-control.c:678
+#, fuzzy, c-format
+msgid "a total of %d time"
+msgid_plural " a total of %d times"
+msgstr[0] " агулам з %d чаÑа"
+msgstr[1] " агулам з %d чаÑа"
+
+#: calendar/gui/e-itip-control.c:687
+msgid ", ending on "
+msgstr ", Ñканчаецца на "
+
+#: calendar/gui/e-itip-control.c:711
+#, fuzzy
+msgid "Starts"
+msgstr "Стан"
+
+#: calendar/gui/e-itip-control.c:724
+#, fuzzy
+msgid "Ends"
+msgstr "Энід"
+
+#: calendar/gui/e-itip-control.c:758
+#, fuzzy
+msgid "Due"
+msgstr "Умоўленае"
+
+#: calendar/gui/e-itip-control.c:798 calendar/gui/e-itip-control.c:855
+msgid "iCalendar Information"
+msgstr "ЗьвеÑткі iCalendar"
+
+#. Title
+#: calendar/gui/e-itip-control.c:815
+msgid "iCalendar Error"
+msgstr "Памылка iCalendar"
+
+#: calendar/gui/e-itip-control.c:887 calendar/gui/e-itip-control.c:903
+#: calendar/gui/e-itip-control.c:914 calendar/gui/e-itip-control.c:931
+msgid "An unknown person"
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿ÑÑ€Ñона"
+
+#. Describe what the user can do
+#: calendar/gui/e-itip-control.c:938
+msgid ""
+"<br> Please review the following information, and then select an action from "
+"the menu below."
+msgstr ""
+"<br>Калі лаÑка, прагледзьце наÑтупную інфармацыю, Ñ– выбÑрыце дзеÑньне з мÑню "
+"ніжÑй."
+
+#: calendar/gui/e-itip-control.c:967
+msgid "Location:"
+msgstr "МейÑца:"
+
+#: calendar/gui/e-itip-control.c:986 calendar/gui/e-meeting-list-view.c:158
+#: calendar/gui/e-meeting-store.c:179 calendar/gui/e-meeting-store.c:202
+#: calendar/gui/itip-utils.c:422
+msgid "Accepted"
+msgstr "ПрынÑта"
+
+#: calendar/gui/e-itip-control.c:990 calendar/gui/itip-utils.c:425
+msgid "Tentatively Accepted"
+msgstr "ПрынÑта Ð´Ð»Ñ Ñпробы"
+
+#: calendar/gui/e-itip-control.c:994 calendar/gui/e-meeting-list-view.c:159
+#: calendar/gui/e-meeting-store.c:181 calendar/gui/e-meeting-store.c:204
+#: calendar/gui/itip-utils.c:428 calendar/gui/itip-utils.c:454
+msgid "Declined"
+msgstr "Ðдхілена"
+
+#: calendar/gui/e-itip-control.c:1053 calendar/gui/e-itip-control.c:1081
+#: calendar/gui/e-itip-control.c:1107 calendar/gui/e-itip-control.c:1120
+#: calendar/gui/e-itip-control.c:1133 calendar/gui/e-itip-control.c:1158
+msgid "Choose an action:"
+msgstr "Выбраць дзеÑньне:"
+
+#: calendar/gui/e-itip-control.c:1054
+msgid "Update"
+msgstr "Ðбнавіць"
+
+#: calendar/gui/e-itip-control.c:1055 calendar/gui/e-itip-control.c:1086
+#: calendar/gui/e-itip-control.c:1109 calendar/gui/e-itip-control.c:1122
+#: calendar/gui/e-itip-control.c:1135 calendar/gui/e-itip-control.c:1160
+#: shell/e-shell.c:1210 widgets/misc/e-cell-date-edit.c:265
+msgid "OK"
+msgstr "Так"
+
+#: calendar/gui/e-itip-control.c:1082
+msgid "Accept"
+msgstr "ПрынÑць"
+
+#: calendar/gui/e-itip-control.c:1083
+msgid "Tentatively accept"
+msgstr "ПрынÑць Ð´Ð»Ñ Ñпробы"
+
+#: calendar/gui/e-itip-control.c:1084
+msgid "Decline"
+msgstr "Ðдхіліць"
+
+#: calendar/gui/e-itip-control.c:1108
+msgid "Send Free/Busy Information"
+msgstr "ДаÑлаць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/e-itip-control.c:1121
+msgid "Update respondent status"
+msgstr "Ðбнавіць Ñтан удзельнікаў"
+
+#: calendar/gui/e-itip-control.c:1134
+msgid "Send Latest Information"
+msgstr "ДаÑлаць апошнюю інфармацыю"
+
+#: calendar/gui/e-itip-control.c:1144
+msgid ""
+"The meeting has been cancelled, however it could not be found in your "
+"calendars"
+msgstr ""
+
+#: calendar/gui/e-itip-control.c:1146
+msgid ""
+"The task has been cancelled, however it could not be found in your task lists"
+msgstr ""
+
+#: calendar/gui/e-itip-control.c:1159 calendar/gui/itip-utils.c:442
+#: mail/mail-send-recv.c:410 mail/mail-send-recv.c:464
+#: ui/evolution-mail-global.xml.h:1
+msgid "Cancel"
+msgstr "ÐдмÑніць"
+
+#: calendar/gui/e-itip-control.c:1235
+#, c-format
+msgid "<b>%s</b> has published meeting information."
+msgstr "<b>%s</b> разьмÑÑьціў(ла) зьвеÑткі аб нарадзе."
+
+#: calendar/gui/e-itip-control.c:1236
+msgid "Meeting Information"
+msgstr "ЗьвеÑткі аб нарадзе"
+
+#: calendar/gui/e-itip-control.c:1241
+#, c-format
+msgid "<b>%s</b> requests the presence of %s at a meeting."
+msgstr "<b>%s</b> запытваецца прыÑутнаÑьці %s на нарадзе."
+
+#: calendar/gui/e-itip-control.c:1243
+#, c-format
+msgid "<b>%s</b> requests your presence at a meeting."
+msgstr "<b>%s</b> запытваецца вашае прыÑутнаÑьці на нарадзе."
+
+#: calendar/gui/e-itip-control.c:1244
+msgid "Meeting Proposal"
+msgstr "ПлÑн нарады"
+
+#: calendar/gui/e-itip-control.c:1265
+#, c-format
+msgid "<b>%s</b> wishes to add to an existing meeting."
+msgstr "<b>%s</b> жадае далучыць да раÑпачатае нарады."
+
+#: calendar/gui/e-itip-control.c:1266
+msgid "Meeting Update"
+msgstr "Ðбнаўленьне нарады"
+
+#: calendar/gui/e-itip-control.c:1270
+#, c-format
+msgid "<b>%s</b> wishes to receive the latest meeting information."
+msgstr "<b>%s</b> запытвае апошнюю інфармацыю па нарадзе."
+
+#: calendar/gui/e-itip-control.c:1271
+msgid "Meeting Update Request"
+msgstr "Запыт на абнаўленьне нарады"
+
+#: calendar/gui/e-itip-control.c:1278
+#, c-format
+msgid "<b>%s</b> has replied to a meeting request."
+msgstr "<b>%s</b> мае адказ на запыт нарады."
+
+#: calendar/gui/e-itip-control.c:1279
+msgid "Meeting Reply"
+msgstr "Ðдказ па нарадзе"
+
+#: calendar/gui/e-itip-control.c:1286
+#, c-format
+msgid "<b>%s</b> has cancelled a meeting."
+msgstr "<b>%s</b> мае адмÑніць нараду."
+
+#: calendar/gui/e-itip-control.c:1287
+msgid "Meeting Cancellation"
+msgstr "Ðдмена нарады"
+
+#: calendar/gui/e-itip-control.c:1294 calendar/gui/e-itip-control.c:1362
+#: calendar/gui/e-itip-control.c:1397
+#, c-format
+msgid "<b>%s</b> has sent an unintelligible message."
+msgstr "<b>%s</b> мае даÑлаць неінтÑлегентнае паведамленьне."
+
+#: calendar/gui/e-itip-control.c:1295
+msgid "Bad Meeting Message"
+msgstr "ДрÑннае паведамленьне нарады"
+
+#: calendar/gui/e-itip-control.c:1320
+#, c-format
+msgid "<b>%s</b> has published task information."
+msgstr "<b>%s</b> мае апублікаваць зьвеÑткі аб заданьні."
+
+#: calendar/gui/e-itip-control.c:1321
+msgid "Task Information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ð°Ð± заданьні"
+
+#: calendar/gui/e-itip-control.c:1326
+#, c-format
+msgid "<b>%s</b> requests %s to perform a task."
+msgstr "<b>%s</b> пытаецца %s аб выкананьні заданьнÑ."
+
+#: calendar/gui/e-itip-control.c:1328
+#, c-format
+msgid "<b>%s</b> requests you perform a task."
+msgstr "<b>%s</b> пытаецца Ð²Ð°Ñ Ð°Ð± выкананьні заданьнÑ."
+
+#: calendar/gui/e-itip-control.c:1329
+msgid "Task Proposal"
+msgstr "ПлÑн заданьнÑ"
+
+#: calendar/gui/e-itip-control.c:1333
+#, c-format
+msgid "<b>%s</b> wishes to add to an existing task."
+msgstr "<b>%s</b> жадае дадаць да раÑпачатага заданьнÑ."
+
+#: calendar/gui/e-itip-control.c:1334
+msgid "Task Update"
+msgstr "Ðбнаўленьне заданьнÑ"
+
+#: calendar/gui/e-itip-control.c:1338
+#, c-format
+msgid "<b>%s</b> wishes to receive the latest task information."
+msgstr "<b>%s</b> жадае атрымаць Ð°Ð¿Ð¾ÑˆÐ½Ñ–Ñ Ð·ÑŒÐ²ÐµÑткі па заданьні."
+
+#: calendar/gui/e-itip-control.c:1339
+msgid "Task Update Request"
+msgstr "Запыт на абнаўленьне заданьнÑ"
+
+#: calendar/gui/e-itip-control.c:1346
+#, c-format
+msgid "<b>%s</b> has replied to a task assignment."
+msgstr "<b>%s</b> мае адказ на заданьне."
+
+#: calendar/gui/e-itip-control.c:1347
+msgid "Task Reply"
+msgstr "Ðдказ на заданьне"
+
+#: calendar/gui/e-itip-control.c:1354
+#, c-format
+msgid "<b>%s</b> has cancelled a task."
+msgstr "<b>%s</b> мае адмÑніць заданьне."
+
+#: calendar/gui/e-itip-control.c:1355
+msgid "Task Cancellation"
+msgstr "Ðдмена заданьнÑ"
+
+#: calendar/gui/e-itip-control.c:1363
+msgid "Bad Task Message"
+msgstr "ДрÑннае паведамленьне па заданьні"
+
+#: calendar/gui/e-itip-control.c:1382
+#, c-format
+msgid "<b>%s</b> has published free/busy information."
+msgstr "<b>%s</b> мае апублікаваць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\"."
+
+#: calendar/gui/e-itip-control.c:1383
+msgid "Free/Busy Information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/e-itip-control.c:1387
+#, c-format
+msgid "<b>%s</b> requests your free/busy information."
+msgstr "<b>%s</b> патрабуе ад Ð²Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹ÑŽ \"Вольны/ЗанÑÑ‚Ñ‹\"."
+
+#: calendar/gui/e-itip-control.c:1388
+msgid "Free/Busy Request"
+msgstr "Запыт \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/e-itip-control.c:1392
+#, c-format
+msgid "<b>%s</b> has replied to a free/busy request."
+msgstr "<b>%s</b> мае адказаць на запыт аб інфармацыі \"ЗанÑÑ‚Ñ‹/Вольны\"."
+
+#: calendar/gui/e-itip-control.c:1393
+msgid "Free/Busy Reply"
+msgstr "Ðдказ на \"ЗанÑÑ‚Ñ‹/Вольны\""
+
+#: calendar/gui/e-itip-control.c:1398
+msgid "Bad Free/Busy Message"
+msgstr "ДрÑннае паведамленьне \"Вольны /ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/e-itip-control.c:1473
+msgid "The message does not appear to be properly formed"
+msgstr "Падобна што паведамленьне не было правільна Ñфармавана"
+
+#: calendar/gui/e-itip-control.c:1532
+msgid "The message contains only unsupported requests."
+msgstr "Паведамленьне утрымлівае толькі запыты, ÑÐºÑ–Ñ Ð½Ðµ падтрымліваюцца."
+
+#: calendar/gui/e-itip-control.c:1563
+msgid "The attachment does not contain a valid calendar message"
+msgstr "Укладаньне Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ Ñ€ÑчаіÑнага Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ð»Ñндара"
+
+#: calendar/gui/e-itip-control.c:1595
+msgid "The attachment has no viewable calendar items"
+msgstr "Укладаньне мае ÑлемÑнты калÑндара, ÑÐºÑ–Ñ Ð½ÐµÐ»ÑŒÐ³Ð° адлюÑтраваць"
+
+#: calendar/gui/e-itip-control.c:1829
+msgid "Update complete\n"
+msgstr "Ðбнаўленьне завершана\n"
+
+#: calendar/gui/e-itip-control.c:1857
+msgid "Object is invalid and cannot be updated\n"
+msgstr "Ðб'ект нерÑчаіÑны Ñ– Ð½Ñ Ð±ÑƒÐ´Ð·Ðµ абноўлены\n"
+
+#: calendar/gui/e-itip-control.c:1867
+msgid "This response is not from a current attendee. Add as an attendee?"
+msgstr "Ðдказ не ад бÑгучага удзельніка. Дадаць Ñк ад Ñго?"
+
+#: calendar/gui/e-itip-control.c:1879
+msgid "Attendee status could not be updated because of an invalid status!\n"
+msgstr "Стан удзельніка Ð½Ñ Ð¼Ð¾Ð¶Ð° быць абноўлены, таму што ён нерÑчаіÑны!\n"
+
+#: calendar/gui/e-itip-control.c:1896
+msgid "Attendee status updated\n"
+msgstr "Стан удзельніка абноўлены\n"
+
+#: calendar/gui/e-itip-control.c:1899
+msgid "Attendee status can not be updated because the item no longer exists"
+msgstr "Стан удзельніка Ð½Ñ Ð¼Ð¾Ð¶Ð° быць абноўлены таму, што ÑлемÑнт ужо не Ñ–Ñнуе"
+
+#: calendar/gui/e-itip-control.c:1926
+msgid "Removal Complete"
+msgstr "Выдаленьне Ñкончана"
+
+#: calendar/gui/e-itip-control.c:1949 calendar/gui/e-itip-control.c:1997
+msgid "Item sent!\n"
+msgstr "ЭлемÑнт даÑланы!\n"
+
+#: calendar/gui/e-itip-control.c:1951 calendar/gui/e-itip-control.c:2001
+msgid "The item could not be sent!\n"
+msgstr "ЭлемÑнт Ð½Ñ Ð¼Ð¾Ð¶Ð° быць даÑланы!\n"
+
+#: calendar/gui/e-itip-control.glade.h:2
+#, no-c-format
+msgid "%P %%"
+msgstr "%P %%"
+
+#: calendar/gui/e-itip-control.glade.h:3
+msgid "--to--"
+msgstr "--у--"
+
+#: calendar/gui/e-itip-control.glade.h:4
+msgid "Calendar Message"
+msgstr "Паведамленьне калÑндара"
+
+#: calendar/gui/e-itip-control.glade.h:5
+msgid "Date:"
+msgstr "Дата:"
+
+#: calendar/gui/e-itip-control.glade.h:7
+msgid "Loading Calendar"
+msgstr "Загрузка калÑндара"
+
+#: calendar/gui/e-itip-control.glade.h:8
+msgid "Loading calendar..."
+msgstr "Загрузка калÑндара..."
+
+#: calendar/gui/e-itip-control.glade.h:10
+msgid "Server Message:"
+msgstr "Паведамленьне паÑлужніка:"
+
+#: calendar/gui/e-itip-control.glade.h:12
+msgid "date-end"
+msgstr "дата-завÑршÑньнÑ"
+
+#: calendar/gui/e-itip-control.glade.h:13
+msgid "date-start"
+msgstr "дата-пачатку"
+
+#: calendar/gui/e-meeting-list-view.c:59
+msgid "Chair Persons"
+msgstr "Кіраўнікі"
+
+#: calendar/gui/e-meeting-list-view.c:61
+msgid "Optional Participants"
+msgstr "Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
+
+#: calendar/gui/e-meeting-list-view.c:62
+msgid "Resources"
+msgstr "РÑÑурÑÑ‹"
+
+#: calendar/gui/e-meeting-list-view.c:118 calendar/gui/e-meeting-store.c:90
+#: calendar/gui/e-meeting-store.c:107 calendar/gui/e-meeting-store.c:759
+msgid "Individual"
+msgstr "ÐÑабіÑта"
+
+#: calendar/gui/e-meeting-list-view.c:119 calendar/gui/e-meeting-store.c:92
+#: calendar/gui/e-meeting-store.c:109
+msgid "Group"
+msgstr "Група"
+
+#: calendar/gui/e-meeting-list-view.c:120 calendar/gui/e-meeting-store.c:94
+#: calendar/gui/e-meeting-store.c:111
+msgid "Resource"
+msgstr "РÑÑурÑ"
+
+#: calendar/gui/e-meeting-list-view.c:121 calendar/gui/e-meeting-store.c:96
+#: calendar/gui/e-meeting-store.c:113
+msgid "Room"
+msgstr "Пакой"
+
+#: calendar/gui/e-meeting-list-view.c:132 calendar/gui/e-meeting-store.c:125
+#: calendar/gui/e-meeting-store.c:142
+msgid "Chair"
+msgstr "Кіраўнік"
+
+#: calendar/gui/e-meeting-list-view.c:133 calendar/gui/e-meeting-store.c:127
+#: calendar/gui/e-meeting-store.c:144 calendar/gui/e-meeting-store.c:762
+msgid "Required Participant"
+msgstr "Патрабаваны ўдзельнік"
+
+#: calendar/gui/e-meeting-list-view.c:134 calendar/gui/e-meeting-store.c:129
+#: calendar/gui/e-meeting-store.c:146
+msgid "Optional Participant"
+msgstr "Дадатковы удзельнік"
+
+#: calendar/gui/e-meeting-list-view.c:135 calendar/gui/e-meeting-store.c:131
+#: calendar/gui/e-meeting-store.c:148
+msgid "Non-Participant"
+msgstr "Ðеудзельнічае"
+
+#: calendar/gui/e-meeting-list-view.c:157 calendar/gui/e-meeting-store.c:177
+#: calendar/gui/e-meeting-store.c:200 calendar/gui/e-meeting-store.c:772
+msgid "Needs Action"
+msgstr "Ðеабходна дзеÑньне"
+
+#: calendar/gui/e-meeting-list-view.c:160 calendar/gui/e-meeting-store.c:183
+#: calendar/gui/e-meeting-store.c:206 calendar/gui/e-meeting-time-sel.c:398
+msgid "Tentative"
+msgstr "Пробны"
+
+#: calendar/gui/e-meeting-list-view.c:161 calendar/gui/e-meeting-store.c:185
+#: calendar/gui/e-meeting-store.c:208
+msgid "Delegated"
+msgstr "ДÑлегаваны"
+
+#: calendar/gui/e-meeting-store.c:189 calendar/gui/e-meeting-store.c:212
+msgid "In Process"
+msgstr "У выкананьні"
+
+#. This is a strftime() format string %A = full weekday name,
+#. %B = full month name, %d = month day, %Y = full year.
+#: calendar/gui/e-meeting-time-sel-item.c:452
+#: calendar/gui/e-meeting-time-sel.c:2069
+msgid "%A, %B %d, %Y"
+msgstr "%A, %B %d, %Y"
+
+#. This is a strftime() format string %a = abbreviated weekday
+#. name, %m = month number, %d = month day, %Y = full year.
+#. This is a strftime() format string %a = abbreviated weekday name,
+#. %m = month number, %d = month day, %Y = full year.
+#. strptime format of a weekday and a date.
+#. strftime format of a weekday and a date.
+#: calendar/gui/e-meeting-time-sel-item.c:456
+#: calendar/gui/e-meeting-time-sel.c:2102 e-util/e-time-utils.c:203
+#: e-util/e-time-utils.c:296 e-util/e-time-utils.c:384
+msgid "%a %m/%d/%Y"
+msgstr "%a %d/%m/%Y"
+
+#. This is a strftime() format string %m = month number,
+#. %d = month day, %Y = full year.
+#. strptime format of a weekday and a date.
+#. This is the preferred date format for the locale.
+#. This is a strftime() format for a short date. %m = month,
+#. %d = day of month, %Y = year (all digits).
+#: calendar/gui/e-meeting-time-sel-item.c:460 e-util/e-time-utils.c:238
+#: e-util/e-time-utils.c:299 widgets/misc/e-dateedit.c:1604
+msgid "%m/%d/%Y"
+msgstr "%d/%m/%Y"
+
+#: calendar/gui/e-meeting-time-sel.c:400 designs/OOA/ooa.glade.h:11
+msgid "Out of Office"
+msgstr "Пакінуу офіÑ"
+
+#: calendar/gui/e-meeting-time-sel.c:401
+msgid "No Information"
+msgstr "ЗьвеÑткі адÑутнічаюць"
+
+#: calendar/gui/e-meeting-time-sel.c:432
+#, fuzzy
+msgid "O_ptions"
+msgstr "ПарамÑтры"
+
+#: calendar/gui/e-meeting-time-sel.c:449
+#, fuzzy
+msgid "Show _only working hours"
+msgstr "ÐдлюÑтроўваць толькі _Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐ½Ñ‹Ñ Ñ‡Ð°ÑÑ‹"
+
+#: calendar/gui/e-meeting-time-sel.c:459
+#, fuzzy
+msgid "Show _zoomed out"
+msgstr "Паказаць паменшанае"
+
+#: calendar/gui/e-meeting-time-sel.c:474
+#, fuzzy
+msgid "_Update free/busy"
+msgstr "Ðб_навіць \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/e-meeting-time-sel.c:489
+msgid "_<<"
+msgstr "_<<"
+
+#: calendar/gui/e-meeting-time-sel.c:507
+msgid "_Autopick"
+msgstr "Ðўтавыбар"
+
+#: calendar/gui/e-meeting-time-sel.c:522
+msgid ">_>"
+msgstr ">_>"
+
+#: calendar/gui/e-meeting-time-sel.c:539
+#, fuzzy
+msgid "_All people and resources"
+msgstr "УÑе людзі й Ñ€ÑÑурÑÑ‹"
+
+#: calendar/gui/e-meeting-time-sel.c:548
+#, fuzzy
+msgid "All _people and one resource"
+msgstr "УÑе людзі й адзін Ñ€ÑÑурÑ"
+
+#: calendar/gui/e-meeting-time-sel.c:557
+#, fuzzy
+msgid "_Required people"
+msgstr "ÐŸÐ°Ñ‚Ñ€Ð°Ð±Ð°Ð²Ð°Ð½Ñ‹Ñ Ð»ÑŽÐ´Ð·Ñ–"
+
+#: calendar/gui/e-meeting-time-sel.c:566
+#, fuzzy
+msgid "Required people and _one resource"
+msgstr "ÐŸÐ°Ñ‚Ñ€Ð°Ð±Ð°Ð²Ð°Ð½Ñ‹Ñ Ð»ÑŽÐ´Ð·Ñ– й адзін Ñ€ÑÑурÑ"
+
+#: calendar/gui/e-pub-utils.c:300
+#, fuzzy, c-format
+msgid "Enter the password for %s"
+msgstr "Пазначце пароль Ð´Ð»Ñ %s"
+
+#: calendar/gui/e-tasks.c:744 calendar/gui/gnome-cal.c:2263
+#, c-format
+msgid ""
+"Error on %s:\n"
+" %s"
+msgstr ""
+"Памылка на %s\n"
+" %s"
+
+#: calendar/gui/e-tasks.c:792
+#, fuzzy
+msgid "Loading tasks"
+msgstr "Загрузка відарыÑаў"
+
+#: calendar/gui/e-tasks.c:873
+#, c-format
+msgid "Opening tasks at %s"
+msgstr "Ðдкрыцьцё заданьнÑÑž %s"
+
+#: calendar/gui/e-tasks.c:1070
+msgid "Completing tasks..."
+msgstr "ЗавÑршÑньне заданьнÑÑž..."
+
+#: calendar/gui/e-tasks.c:1093
+msgid "Deleting selected objects..."
+msgstr "Выдаленьне вылучаных аб'ектаў..."
+
+#: calendar/gui/e-tasks.c:1120
+msgid "Expunging"
+msgstr "ВыкрÑÑьленьне"
+
+#: calendar/gui/gnome-cal.c:705
+#, fuzzy
+msgid "Updating query"
+msgstr "Ðбнаўленьне аб'ектаў"
+
+#: calendar/gui/gnome-cal.c:2040
+#, fuzzy, c-format
+msgid "Loading appointments at %s"
+msgstr "СуÑÑ‚Ñ€Ñчы не заплÑнаваны."
+
+#: calendar/gui/gnome-cal.c:2059
+#, fuzzy, c-format
+msgid "Loading tasks at %s"
+msgstr "Загрузка відарыÑаў"
+
+#: calendar/gui/gnome-cal.c:2152
+#, fuzzy, c-format
+msgid "Opening %s"
+msgstr "Ðдкрыць у %s..."
+
+#: calendar/gui/gnome-cal.c:3122
+#, fuzzy
+msgid "Purging"
+msgstr "ТурÑцкае"
+
+#: calendar/gui/goto-dialog.glade.h:1
+msgid "April"
+msgstr "КраÑавік"
+
+#: calendar/gui/goto-dialog.glade.h:2
+msgid "August"
+msgstr "Жнівень"
+
+#: calendar/gui/goto-dialog.glade.h:3
+msgid "December"
+msgstr "Сьнежань"
+
+#: calendar/gui/goto-dialog.glade.h:4
+msgid "February"
+msgstr "Люты"
+
+#: calendar/gui/goto-dialog.glade.h:5
+msgid "January"
+msgstr "Студзень"
+
+#: calendar/gui/goto-dialog.glade.h:6
+msgid "July"
+msgstr "Ліпень"
+
+#: calendar/gui/goto-dialog.glade.h:7
+msgid "June"
+msgstr "ЧÑрвень"
+
+#: calendar/gui/goto-dialog.glade.h:8
+msgid "March"
+msgstr "Сакавік"
+
+#: calendar/gui/goto-dialog.glade.h:9
+msgid "May"
+msgstr "Травень"
+
+#: calendar/gui/goto-dialog.glade.h:10
+msgid "November"
+msgstr "ЛіÑтапад"
+
+#: calendar/gui/goto-dialog.glade.h:11
+msgid "October"
+msgstr "КаÑтрычнік"
+
+#: calendar/gui/goto-dialog.glade.h:12
+#, fuzzy
+msgid "Select Date"
+msgstr "Выбар імёнаў"
+
+#: calendar/gui/goto-dialog.glade.h:13
+msgid "September"
+msgstr "ВераÑень"
+
+#: calendar/gui/goto-dialog.glade.h:14
+#, fuzzy
+msgid "_Select Today"
+msgstr "Выбраць Ñ‚Ñчку"
+
+#: calendar/gui/itip-utils.c:271 calendar/gui/itip-utils.c:319
+#: calendar/gui/itip-utils.c:351
+msgid "An organizer must be set."
+msgstr "Ðрганізатар муÑіць быць пазначаны."
+
+#: calendar/gui/itip-utils.c:306
+msgid "At least one attendee is necessary"
+msgstr "ПатрÑбны мінімум адзін удзельнік"
+
+#: calendar/gui/itip-utils.c:394 calendar/gui/itip-utils.c:503
+msgid "Event information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ð°Ð± падзеі"
+
+#: calendar/gui/itip-utils.c:396 calendar/gui/itip-utils.c:505
+msgid "Task information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ð°Ð± заданьні"
+
+#: calendar/gui/itip-utils.c:398 calendar/gui/itip-utils.c:507
+msgid "Journal information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‡Ð°ÑопіÑа"
+
+#: calendar/gui/itip-utils.c:400 calendar/gui/itip-utils.c:525
+msgid "Free/Busy information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ \"Вольны/ЗанÑÑ‚Ñ‹\""
+
+#: calendar/gui/itip-utils.c:402
+msgid "Calendar information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#: calendar/gui/itip-utils.c:438
+msgid "Updated"
+msgstr "Ðбноўлена"
+
+#: calendar/gui/itip-utils.c:446
+msgid "Refresh"
+msgstr "Ðбнавіць"
+
+#: calendar/gui/itip-utils.c:450
+msgid "Counter-proposal"
+msgstr "Контар-прапанова"
+
+#: calendar/gui/itip-utils.c:521
+#, c-format
+msgid "Free/Busy information (%s to %s)"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ \"Вольны/ЗанÑÑ‚Ñ‹\" (%s да %s)"
+
+#: calendar/gui/itip-utils.c:531
+msgid "iCalendar information"
+msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ iCalendar"
+
+#: calendar/gui/itip-utils.c:673
+msgid "You must be an attendee of the event."
+msgstr "Ð’Ñ‹ муÑіце быць удзельнікам падзеі"
+
+#: calendar/gui/migration.c:150
+msgid ""
+"The location and hierarchy of the Evolution task folders has changed since "
+"Evolution 1.x.\n"
+"\n"
+"Please be patient while Evolution migrates your folders..."
+msgstr ""
+
+#: calendar/gui/migration.c:154
+msgid ""
+"The location and hierarchy of the Evolution calendar folders has changed "
+"since Evolution 1.x.\n"
+"\n"
+"Please be patient while Evolution migrates your folders..."
+msgstr ""
+
+#: calendar/gui/migration.c:380
+msgid "Birthdays & Anniversaries"
+msgstr ""
+
+#. Create the Webcal source group
+#: calendar/gui/migration.c:466 calendar/gui/migration.c:548
+msgid "On The Web"
+msgstr ""
+
+#. FIXME: set proper domain/code
+#: calendar/gui/migration.c:712 calendar/gui/migration.c:864
+msgid "Unable to migrate old settings from evolution/config.xmldb"
+msgstr ""
+
+#. FIXME: domain/code
+#: calendar/gui/migration.c:741
+#, fuzzy, c-format
+msgid "Unable to migrate calendar `%s'"
+msgstr "ÐдÑутнічаюць правы на адкрыцьцё калÑндара"
+
+#. FIXME: domain/code
+#: calendar/gui/migration.c:893
+#, fuzzy, c-format
+msgid "Unable to migrate tasks `%s'"
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ кнігу адрÑÑаў"
+
+#: calendar/gui/print.c:489
+msgid "1st"
+msgstr "1-га"
+
+#: calendar/gui/print.c:489
+msgid "2nd"
+msgstr "2-га"
+
+#: calendar/gui/print.c:489
+msgid "3rd"
+msgstr "3-га"
+
+#: calendar/gui/print.c:489
+msgid "4th"
+msgstr "4-га"
+
+#: calendar/gui/print.c:489
+msgid "5th"
+msgstr "5-га"
+
+#: calendar/gui/print.c:490
+msgid "6th"
+msgstr "6-га"
+
+#: calendar/gui/print.c:490
+msgid "7th"
+msgstr "7-га"
+
+#: calendar/gui/print.c:490
+msgid "8th"
+msgstr "8-га"
+
+#: calendar/gui/print.c:490
+msgid "9th"
+msgstr "9-га"
+
+#: calendar/gui/print.c:490
+msgid "10th"
+msgstr "10-га"
+
+#: calendar/gui/print.c:491
+msgid "11th"
+msgstr "11-га"
+
+#: calendar/gui/print.c:491
+msgid "12th"
+msgstr "12-га"
+
+#: calendar/gui/print.c:491
+msgid "13th"
+msgstr "13-га"
+
+#: calendar/gui/print.c:491
+msgid "14th"
+msgstr "14-га"
+
+#: calendar/gui/print.c:491
+msgid "15th"
+msgstr "15-га"
+
+#: calendar/gui/print.c:492
+msgid "16th"
+msgstr "16-га"
+
+#: calendar/gui/print.c:492
+msgid "17th"
+msgstr "17-е"
+
+#: calendar/gui/print.c:492
+msgid "18th"
+msgstr "18-е"
+
+#: calendar/gui/print.c:492
+msgid "19th"
+msgstr "19-е"
+
+#: calendar/gui/print.c:492
+msgid "20th"
+msgstr "20-е"
+
+#: calendar/gui/print.c:493
+msgid "21st"
+msgstr "21-га"
+
+#: calendar/gui/print.c:493
+msgid "22nd"
+msgstr "22-га"
+
+#: calendar/gui/print.c:493
+msgid "23rd"
+msgstr "23-га"
+
+#: calendar/gui/print.c:493
+msgid "24th"
+msgstr "24-га"
+
+#: calendar/gui/print.c:493
+msgid "25th"
+msgstr "25-га"
+
+#: calendar/gui/print.c:494
+msgid "26th"
+msgstr "26-га"
+
+#: calendar/gui/print.c:494
+msgid "27th"
+msgstr "27-га"
+
+#: calendar/gui/print.c:494
+msgid "28th"
+msgstr "28-га"
+
+#: calendar/gui/print.c:494
+msgid "29th"
+msgstr "29-га"
+
+#: calendar/gui/print.c:494
+msgid "30th"
+msgstr "30-га"
+
+#: calendar/gui/print.c:495
+msgid "31st"
+msgstr "31-га"
+
+#: calendar/gui/print.c:570
+msgid "Su"
+msgstr "Ðд"
+
+#: calendar/gui/print.c:570
+msgid "Mo"
+msgstr "Пн"
+
+#: calendar/gui/print.c:570
+msgid "Tu"
+msgstr "ÐÑ‚"
+
+#: calendar/gui/print.c:570
+msgid "We"
+msgstr "Ср"
+
+#: calendar/gui/print.c:571
+msgid "Th"
+msgstr "Чт"
+
+#: calendar/gui/print.c:571
+msgid "Fr"
+msgstr "Пт"
+
+#: calendar/gui/print.c:571
+msgid "Sa"
+msgstr "Сб"
+
+#. Day
+#: calendar/gui/print.c:1914
+msgid "Selected day (%a %b %d %Y)"
+msgstr "Вылучаны дзень (%a %b %d %Y)"
+
+#: calendar/gui/print.c:1939 calendar/gui/print.c:1943
+msgid "%a %b %d"
+msgstr "%a %b %d"
+
+#: calendar/gui/print.c:1940
+msgid "%a %d %Y"
+msgstr "%a %d %Y"
+
+#: calendar/gui/print.c:1944 calendar/gui/print.c:1946
+#: calendar/gui/print.c:1947
+msgid "%a %b %d %Y"
+msgstr "%a %b %d %Y"
+
+#: calendar/gui/print.c:1951
+#, c-format
+msgid "Selected week (%s - %s)"
+msgstr "Вылучаны тыдзень (%s - %s)"
+
+#. Month
+#: calendar/gui/print.c:1959
+msgid "Selected month (%b %Y)"
+msgstr "Вылучаны меÑÑц (%b %Y)"
+
+#. Year
+#: calendar/gui/print.c:1966
+msgid "Selected year (%Y)"
+msgstr "Вылучаны год (%Y)"
+
+#: calendar/gui/print.c:2356
+#, c-format
+msgid "Status: %s"
+msgstr "Стан: %s"
+
+#: calendar/gui/print.c:2373
+#, c-format
+msgid "Priority: %s"
+msgstr "ПрыÑрытÑÑ‚: %s"
+
+#: calendar/gui/print.c:2385
+#, c-format
+msgid "Percent Complete: %i"
+msgstr "ÐдÑоткі выкананьнÑ: %i"
+
+#: calendar/gui/print.c:2397
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: calendar/gui/print.c:2411
+#, c-format
+msgid "Categories: %s"
+msgstr "КатÑгорыі: %s"
+
+#: calendar/gui/print.c:2422
+msgid "Contacts: "
+msgstr "Кантакты: "
+
+#: calendar/gui/print.c:2559 calendar/gui/print.c:2645
+#: calendar/gui/print.c:2737 mail/em-format-html-print.c:178
+msgid "Print Preview"
+msgstr "ПерадпраглÑд друку"
+
+#: calendar/gui/print.c:2593
+msgid "Print Item"
+msgstr "Друк ÑлемÑнта"
+
+#: calendar/gui/print.c:2759
+msgid "Print Setup"
+msgstr "Ðаладка друку"
+
+#: calendar/gui/tasks-component.c:314
+#, c-format
+msgid "Task List '%s' will be removed. Are you sure you want to continue?"
+msgstr ""
+
+#: calendar/gui/tasks-component.c:372
+#, fuzzy
+msgid "New Task List"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/tasks-component.c:415
+#, fuzzy, c-format
+msgid "%d task"
+msgid_plural "%d tasks"
+msgstr[0] "Заданьні адÑутнічаюць"
+msgstr[1] "Заданьні адÑутнічаюць"
+
+#: calendar/gui/tasks-component.c:417 mail/mail-component.c:498
+#, fuzzy, c-format
+msgid ", %d selected"
+msgid_plural ", %d selected"
+msgstr[0] "%d выбраныÑ"
+msgstr[1] "%d выбраныÑ"
+
+#: calendar/gui/tasks-component.c:464
+#, fuzzy
+msgid "Failed upgrading tasks."
+msgstr "Загрузка відарыÑаў"
+
+#: calendar/gui/tasks-component.c:758
+#, c-format
+msgid "Unable to open the task list '%s' for creating events and meetings"
+msgstr ""
+
+#: calendar/gui/tasks-component.c:773
+msgid "There is no calendar available for creating tasks"
+msgstr ""
+
+#: calendar/gui/tasks-component.c:1047
+msgid "New task"
+msgstr "Ðовае заданьне"
+
+#: calendar/gui/tasks-component.c:1048
+msgid "_Task"
+msgstr "_Заданьне"
+
+#: calendar/gui/tasks-component.c:1049
+msgid "Create a new task"
+msgstr "Стварыць новае заданьне"
+
+#: calendar/gui/tasks-component.c:1055
+#, fuzzy
+msgid "New assigned task"
+msgstr "Прызначыць заданьне"
+
+#: calendar/gui/tasks-component.c:1056
+#, fuzzy
+msgid "Assigne_d Task"
+msgstr "Прызначыць заданьне"
+
+#: calendar/gui/tasks-component.c:1057
+#, fuzzy
+msgid "Create a new assigned task"
+msgstr "Стварыць новае заданьне"
+
+#: calendar/gui/tasks-component.c:1063
+#, fuzzy
+msgid "New task list"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/tasks-component.c:1064
+#, fuzzy
+msgid "Task l_ist"
+msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: calendar/gui/tasks-component.c:1065
+#, fuzzy
+msgid "Create a new task list"
+msgstr "Стварыць новае заданьне"
+
+#: calendar/gui/tasks-control.c:370
+msgid ""
+"This operation will permanently erase all tasks marked as completed. If you "
+"continue, you will not be able to recover these tasks.\n"
+"\n"
+"Really erase these tasks?"
+msgstr ""
+"ГÑÑ‚Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ назаўÑёды уÑе заданьні, ÑÐºÑ–Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹ Ñк выкананыÑ. "
+"Калі працÑгніце, тады Ð½Ñ Ð·Ð´Ð¾Ð»ÐµÐµÑ†Ðµ вÑрнуць гÑтую апÑрацыю.\n"
+"\n"
+"Выдаліць гÑÑ‚Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–?"
+
+#: calendar/gui/tasks-control.c:373
+msgid "Do not ask me again."
+msgstr "Ðе пытацца наÑтупнага разу."
+
+#: calendar/gui/tasks-control.c:431
+msgid "Print Tasks"
+msgstr "Друк заданьнÑÑž"
+
+#: calendar/gui/weekday-picker.c:326
+msgid "SMTWTFS"
+msgstr "ПÐСЧПСÐ"
+
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:1
+msgid "Evolution Calendar intelligent importer"
+msgstr "ІнтÑлектуальны імпарт калÑндара \"Эвалюцыі\""
+
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:2
+msgid "Evolution iCalendar importer"
+msgstr "Імпарт калÑндара \"Эвалюцыі\" (iCalendar)"
+
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:3
+msgid "Evolution vCalendar importer"
+msgstr "Імпарт калÑндара \"Эвалюцыі\" (vCalendar)"
+
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:4
+msgid "iCalendar files (.ics)"
+msgstr "Файлы калÑндара \"iCalendar\" (.ics)"
+
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:5
+msgid "vCalendar files (.vcf)"
+msgstr "Файлы калÑндара \"vCalendar\" (.vcf)"
+
+#: calendar/importers/icalendar-importer.c:82
+#, fuzzy
+msgid "Appointments and Meetings"
+msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð°Ñ Ñ‚Ñчка утрымлівае ÑуÑÑ‚Ñ€Ñчы Ñ– падзеі"
+
+#: calendar/importers/icalendar-importer.c:494
+msgid "Reminder!!"
+msgstr "Ðагаданьне!!!"
+
+#: calendar/importers/icalendar-importer.c:702
+msgid "Calendar Events"
+msgstr "Падзеі калÑндара"
+
+#: calendar/importers/icalendar-importer.c:727
+msgid ""
+"Evolution has found Gnome Calendar files.\n"
+"Would you like to import them into Evolution?"
+msgstr ""
+"\"ЭвалюцыÑ\" адшукала файлы калÑндара Gnome.\n"
+"Ці жадаеце імпартаваць іх у \"Эвалюцыю\"?"
+
+#: calendar/importers/icalendar-importer.c:734
+msgid "Gnome Calendar"
+msgstr "КалÑндар GNOME"
+
+#.
+#. * These are the timezone names from the Olson timezone data.
+#. * We only place them here so gettext picks them up for translation.
+#. * Don't include in any C files.
+#.
+#: calendar/zones.h:7
+msgid "Africa/Abidjan"
+msgstr "Aфрыка/ÐбідÑн"
+
+#: calendar/zones.h:8
+msgid "Africa/Accra"
+msgstr "Ðфрыка/Ðккра"
+
+#: calendar/zones.h:9
+msgid "Africa/Addis_Ababa"
+msgstr "Ðфрыка/ÐдыÑ-Ðбеба"
+
+#: calendar/zones.h:10
+msgid "Africa/Algiers"
+msgstr "Ðфрыка/Ðлжыр"
+
+#: calendar/zones.h:11
+msgid "Africa/Asmera"
+msgstr "Ðфрыка/ÐÑмÑра"
+
+#: calendar/zones.h:12
+msgid "Africa/Bamako"
+msgstr "Ðфрыка/Бамака"
+
+#: calendar/zones.h:13
+msgid "Africa/Bangui"
+msgstr "Ðфрыка/Бангуі"
+
+#: calendar/zones.h:14
+msgid "Africa/Banjul"
+msgstr "Ðфрыка/Банджул"
+
+#: calendar/zones.h:15
+msgid "Africa/Bissau"
+msgstr "Ðфрыка/БіÑÑаў"
+
+#: calendar/zones.h:16
+msgid "Africa/Blantyre"
+msgstr "Ðфрыка/БлÑнтыр"
+
+#: calendar/zones.h:17
+msgid "Africa/Brazzaville"
+msgstr "Ðфрыка/Бразывіль"
+
+#: calendar/zones.h:18
+msgid "Africa/Bujumbura"
+msgstr "Ðфрыка/Баджамбура"
+
+#: calendar/zones.h:19
+msgid "Africa/Cairo"
+msgstr "Ðфрыка/Каір"
+
+#: calendar/zones.h:20
+msgid "Africa/Casablanca"
+msgstr "Ðфрыка/КаÑаблÑнка"
+
+#: calendar/zones.h:21
+msgid "Africa/Ceuta"
+msgstr "Ðфрыка/Кеўта"
+
+#: calendar/zones.h:22
+msgid "Africa/Conakry"
+msgstr "Ðфрыка/Канакры"
+
+#: calendar/zones.h:23
+msgid "Africa/Dakar"
+msgstr "Ðфрыка/Дакар"
+
+#: calendar/zones.h:24
+msgid "Africa/Dar_es_Salaam"
+msgstr "Ðфрыка/Дар ÑÑ Ð¡Ð°Ð»Ñм"
+
+#: calendar/zones.h:25
+msgid "Africa/Djibouti"
+msgstr "Ðфрыка/Джыбоўці"
+
+#: calendar/zones.h:26
+msgid "Africa/Douala"
+msgstr "Ðфрыка/Даўла"
+
+#: calendar/zones.h:27
+msgid "Africa/El_Aaiun"
+msgstr "Ðфрыка/Эль Ðйюн"
+
+#: calendar/zones.h:28
+msgid "Africa/Freetown"
+msgstr "Ðфрыка/Фрытаўн"
+
+#: calendar/zones.h:29
+msgid "Africa/Gaborone"
+msgstr "Ðфрыка/Габарон"
+
+#: calendar/zones.h:30
+msgid "Africa/Harare"
+msgstr "Ðфрыка/Гарар"
+
+#: calendar/zones.h:31
+msgid "Africa/Johannesburg"
+msgstr "Ðфрыка/ÐханÑÑбург"
+
+#: calendar/zones.h:32
+msgid "Africa/Kampala"
+msgstr "Ðфрыка/КампалÑ"
+
+#: calendar/zones.h:33
+msgid "Africa/Khartoum"
+msgstr "Ðфрыка/Хартум"
+
+#: calendar/zones.h:34
+msgid "Africa/Kigali"
+msgstr "Ðфрыка/Кігалі"
+
+#: calendar/zones.h:35
+msgid "Africa/Kinshasa"
+msgstr "Ðфрыка/КіншаÑа"
+
+#: calendar/zones.h:36
+msgid "Africa/Lagos"
+msgstr "Ðфрыка/ЛÑгоÑ"
+
+#: calendar/zones.h:37
+msgid "Africa/Libreville"
+msgstr "Ðфрыка/ЛібрÑвіль"
+
+#: calendar/zones.h:38
+msgid "Africa/Lome"
+msgstr "Ðфрыка/Лёма"
+
+#: calendar/zones.h:39
+msgid "Africa/Luanda"
+msgstr "Ðфрыка/Люанда"
+
+#: calendar/zones.h:40
+msgid "Africa/Lubumbashi"
+msgstr "Ðфрыка/Любумбашы"
+
+#: calendar/zones.h:41
+msgid "Africa/Lusaka"
+msgstr "Ðфрыка/ЛюÑака"
+
+#: calendar/zones.h:42
+msgid "Africa/Malabo"
+msgstr "Ðфрыка/Малабо"
+
+#: calendar/zones.h:43
+msgid "Africa/Maputo"
+msgstr "Ðфрыка/Мапата"
+
+#: calendar/zones.h:44
+msgid "Africa/Maseru"
+msgstr "Ðфрыка/МаÑÑру"
+
+#: calendar/zones.h:45
+msgid "Africa/Mbabane"
+msgstr "Ðфрыка/Ðœ'бабан"
+
+#: calendar/zones.h:46
+msgid "Africa/Mogadishu"
+msgstr "Ðфрыка/Магадішу"
+
+#: calendar/zones.h:47
+msgid "Africa/Monrovia"
+msgstr "Ðфрыка/МанровіÑ"
+
+#: calendar/zones.h:48
+msgid "Africa/Nairobi"
+msgstr "Ðфрыка/Ðайрабі"
+
+#: calendar/zones.h:49
+msgid "Africa/Ndjamena"
+msgstr "Ðфрыка/Ð'дÑмÑна"
+
+#: calendar/zones.h:50
+msgid "Africa/Niamey"
+msgstr "Ðфрыка/ÐÑмÑй"
+
+#: calendar/zones.h:51
+msgid "Africa/Nouakchott"
+msgstr "Ðфрыка/Ðоўакчот"
+
+#: calendar/zones.h:52
+msgid "Africa/Ouagadougou"
+msgstr "Ðфрыка/Оўагадоўгоў"
+
+#: calendar/zones.h:53
+msgid "Africa/Porto-Novo"
+msgstr "Ðфрыка/Порта-Ðова"
+
+#: calendar/zones.h:54
+msgid "Africa/Sao_Tome"
+msgstr "Ðфрыка/СÑо-ТомÑ"
+
+#: calendar/zones.h:55
+msgid "Africa/Timbuktu"
+msgstr "Ðфрыка/Цімбукту"
+
+#: calendar/zones.h:56
+msgid "Africa/Tripoli"
+msgstr "Ðфрыка/Трыпалі"
+
+#: calendar/zones.h:57
+msgid "Africa/Tunis"
+msgstr "Ðфрыка/ТуніÑ"
+
+#: calendar/zones.h:58
+msgid "Africa/Windhoek"
+msgstr "Ðфрыка/Уіндгук"
+
+#: calendar/zones.h:59
+msgid "America/Adak"
+msgstr "ÐмÑрыка/Ðдак"
+
+#: calendar/zones.h:60
+msgid "America/Anchorage"
+msgstr "ÐмÑрыка/Ðнчураг"
+
+#: calendar/zones.h:61
+msgid "America/Anguilla"
+msgstr "ÐмÑрыка/ÐнджуліÑ"
+
+#: calendar/zones.h:62
+msgid "America/Antigua"
+msgstr "ÐмÑрыка/Ðнцігуа"
+
+#: calendar/zones.h:63
+msgid "America/Araguaina"
+msgstr "ÐмÑрыка/ÐрагуÑна"
+
+#: calendar/zones.h:64
+msgid "America/Aruba"
+msgstr "ÐмÑрыка/Ðруба"
+
+#: calendar/zones.h:65
+msgid "America/Asuncion"
+msgstr "ÐмÑрыка/ÐÑунÑыён"
+
+#: calendar/zones.h:66
+msgid "America/Barbados"
+msgstr "ÐмÑрыка/БарбадоÑ"
+
+#: calendar/zones.h:67
+msgid "America/Belem"
+msgstr "ÐмÑрыка/БÑлем"
+
+#: calendar/zones.h:68
+msgid "America/Belize"
+msgstr "ÐмÑрыка/БÑліз"
+
+#: calendar/zones.h:69
+msgid "America/Boa_Vista"
+msgstr "ÐмÑрыка/Боа-Ð’Ñ–Ñта"
+
+#: calendar/zones.h:70
+msgid "America/Bogota"
+msgstr "ÐмÑрыка/Багата"
+
+#: calendar/zones.h:71
+msgid "America/Boise"
+msgstr "ÐмÑрыка/Бойзе"
+
+#: calendar/zones.h:72
+msgid "America/Buenos_Aires"
+msgstr "ÐмÑрыка/БуанаÑ-ÐйрÑÑ"
+
+#: calendar/zones.h:73
+msgid "America/Cambridge_Bay"
+msgstr "ÐмÑрыка/КÑмбрыдж-Бай"
+
+#: calendar/zones.h:74
+msgid "America/Cancun"
+msgstr "ÐмÑрыка/Канкун"
+
+#: calendar/zones.h:75
+msgid "America/Caracas"
+msgstr "ÐмÑрыка/КаракаÑ"
+
+#: calendar/zones.h:76
+msgid "America/Catamarca"
+msgstr "ÐмÑрыка/Катамарка"
+
+#: calendar/zones.h:77
+msgid "America/Cayenne"
+msgstr "ÐмÑрыка/Кайін"
+
+#: calendar/zones.h:78
+msgid "America/Cayman"
+msgstr "ÐмÑрыка/КÑймÑн"
+
+#: calendar/zones.h:79
+msgid "America/Chicago"
+msgstr "ÐмÑрыка/Чыкага"
+
+#: calendar/zones.h:80
+msgid "America/Chihuahua"
+msgstr "ÐмÑрыка/Чыхуахуа"
+
+#: calendar/zones.h:81
+msgid "America/Cordoba"
+msgstr "ÐмÑрыка/Кардоба"
+
+#: calendar/zones.h:82
+msgid "America/Costa_Rica"
+msgstr "ÐмÑрыка/КоÑта-Рыка"
+
+#: calendar/zones.h:83
+msgid "America/Cuiaba"
+msgstr "ÐмÑрыка/КуÑба"
+
+#: calendar/zones.h:84
+msgid "America/Curacao"
+msgstr "ÐмÑрыка/Курацао"
+
+#: calendar/zones.h:85
+msgid "America/Danmarkshavn"
+msgstr "ÐмÑрыка/Данмаркшаўн"
+
+#: calendar/zones.h:86
+msgid "America/Dawson"
+msgstr "ÐмÑрыка/ДаўнÑан"
+
+#: calendar/zones.h:87
+msgid "America/Dawson_Creek"
+msgstr "ÐмÑрыка/ДаўнÑан-Крык"
+
+#: calendar/zones.h:88
+msgid "America/Denver"
+msgstr "ÐмÑрыка/ДÑнвÑÑ€"
+
+#: calendar/zones.h:89
+msgid "America/Detroit"
+msgstr "ÐмÑрыка/ДÑтройт"
+
+#: calendar/zones.h:90
+msgid "America/Dominica"
+msgstr "ÐмÑрыка/Дамініка"
+
+#: calendar/zones.h:91
+msgid "America/Edmonton"
+msgstr "ÐмÑрыка/Эдмантан"
+
+#: calendar/zones.h:92
+msgid "America/Eirunepe"
+msgstr "ÐмÑрыка/Эйрунеп"
+
+#: calendar/zones.h:93
+msgid "America/El_Salvador"
+msgstr "ÐмÑрыка/Эль-Сальвадор"
+
+#: calendar/zones.h:94
+msgid "America/Fortaleza"
+msgstr "ÐмÑрыка/Фарталіза"
+
+#: calendar/zones.h:95
+msgid "America/Glace_Bay"
+msgstr "ÐмÑрыка/ГлÑцÑ-Бай"
+
+#: calendar/zones.h:96
+msgid "America/Godthab"
+msgstr "ÐмÑрыка/ГудÑаб"
+
+#: calendar/zones.h:97
+msgid "America/Goose_Bay"
+msgstr "ÐмÑрыка/Гузе-Бай"
+
+#: calendar/zones.h:98
+msgid "America/Grand_Turk"
+msgstr "ÐмÑрыка/Гранд-Турк"
+
+#: calendar/zones.h:99
+msgid "America/Grenada"
+msgstr "ÐмÑрыка/ГрÑнада"
+
+#: calendar/zones.h:100
+msgid "America/Guadeloupe"
+msgstr "ÐмÑрыка/ГвадÑлупа"
+
+#: calendar/zones.h:101
+msgid "America/Guatemala"
+msgstr "ÐмÑрыка/ГватÑмала"
+
+#: calendar/zones.h:102
+msgid "America/Guayaquil"
+msgstr "ÐмÑрыка/ГуÑквіл"
+
+#: calendar/zones.h:103
+msgid "America/Guyana"
+msgstr "ÐмÑрыка/ГаÑна"
+
+#: calendar/zones.h:104
+msgid "America/Halifax"
+msgstr "ÐмÑрыка/ГаліхвакÑ"
+
+#: calendar/zones.h:105
+msgid "America/Havana"
+msgstr "ÐмÑрыка/Гавана"
+
+#: calendar/zones.h:106
+msgid "America/Hermosillo"
+msgstr "ÐмÑрыка/ГермаÑіла"
+
+#: calendar/zones.h:107
+msgid "America/Indiana/Indianapolis"
+msgstr "ÐмÑрыка/ІндыÑна/ІндыÑнаполіÑ"
+
+#: calendar/zones.h:108
+msgid "America/Indiana/Knox"
+msgstr "ÐмÑрыка/ІндыÑна/КнокÑ"
+
+#: calendar/zones.h:109
+msgid "America/Indiana/Marengo"
+msgstr "ÐмÑрыка/ІндыÑна/МарÑнга"
+
+#: calendar/zones.h:110
+msgid "America/Indiana/Vevay"
+msgstr "ÐмÑрыка/ІндыÑна/ВівÑй"
+
+#: calendar/zones.h:111
+msgid "America/Indianapolis"
+msgstr "ÐмÑрыка/ІндыÑнаполіÑ"
+
+#: calendar/zones.h:112
+msgid "America/Inuvik"
+msgstr "ÐмÑрыка/Інівік"
+
+#: calendar/zones.h:113
+msgid "America/Iqaluit"
+msgstr "ÐмÑрыка/Іквілют"
+
+#: calendar/zones.h:114
+msgid "America/Jamaica"
+msgstr "ÐмÑрыка/Ямайка"
+
+#: calendar/zones.h:115
+msgid "America/Jujuy"
+msgstr "ÐмÑрыка/Яджі"
+
+#: calendar/zones.h:116
+msgid "America/Juneau"
+msgstr "ÐмÑрыка/ЯнеÑ"
+
+#: calendar/zones.h:117
+msgid "America/Kentucky/Louisville"
+msgstr "ÐмÑрыка/Кентукі/ЛёўÑьвіль"
+
+#: calendar/zones.h:118
+msgid "America/Kentucky/Monticello"
+msgstr "ÐмÑрыка/Кентукі/МанцічÑла"
+
+#: calendar/zones.h:119
+msgid "America/La_Paz"
+msgstr "ÐмÑрыка/ЛÑ-паз"
+
+#: calendar/zones.h:120
+msgid "America/Lima"
+msgstr "ÐмÑрыка/Ліма"
+
+#: calendar/zones.h:121
+msgid "America/Los_Angeles"
+msgstr "ÐмÑрыка/ЛоÑ-ÐнжÑлеÑ"
+
+#: calendar/zones.h:122
+msgid "America/Louisville"
+msgstr "ÐмÑрыка/ЛёўÑьвіль"
+
+#: calendar/zones.h:123
+msgid "America/Maceio"
+msgstr "ÐмÑрыка/Мацейо"
+
+#: calendar/zones.h:124
+msgid "America/Managua"
+msgstr "ÐмÑрыка/Манагуа"
+
+#: calendar/zones.h:125
+msgid "America/Manaus"
+msgstr "ÐмÑрыка/МанаўÑ"
+
+#: calendar/zones.h:126
+msgid "America/Martinique"
+msgstr "ÐмÑрыка/Марцінікві"
+
+#: calendar/zones.h:127
+msgid "America/Mazatlan"
+msgstr "ÐмÑрыка/МазатлÑн"
+
+#: calendar/zones.h:128
+msgid "America/Mendoza"
+msgstr "ÐмÑрыка/ÐœÑндоза"
+
+#: calendar/zones.h:129
+msgid "America/Menominee"
+msgstr "ÐмÑрыка/ÐœÑнаміні"
+
+#: calendar/zones.h:130
+msgid "America/Merida"
+msgstr "ÐмÑрыка/ÐœÑрыда"
+
+#: calendar/zones.h:131
+msgid "America/Mexico_City"
+msgstr "ÐмÑрыка/ÐœÑкÑцка-Сіці"
+
+#: calendar/zones.h:132
+msgid "America/Miquelon"
+msgstr "ÐмÑрыка/Міквуелён"
+
+#: calendar/zones.h:133
+msgid "America/Monterrey"
+msgstr "ÐмÑрыка/МонтÑÑ€Ñй"
+
+#: calendar/zones.h:134
+msgid "America/Montevideo"
+msgstr "ÐмÑрыка/МонтÑвідÑа"
+
+#: calendar/zones.h:135
+msgid "America/Montreal"
+msgstr "ÐмÑрыка/МонрÑаль"
+
+#: calendar/zones.h:136
+msgid "America/Montserrat"
+msgstr "ÐмÑрыка/МанÑÑрат"
+
+#: calendar/zones.h:137
+msgid "America/Nassau"
+msgstr "ÐмÑрыка/ÐаÑÑаў"
+
+#: calendar/zones.h:138
+msgid "America/New_York"
+msgstr "ÐмÑрыка/Ð'ÑŽ-Ðрк"
+
+#: calendar/zones.h:139
+msgid "America/Nipigon"
+msgstr "ÐмÑрыка/Ðіпігон"
+
+#: calendar/zones.h:140
+msgid "America/Nome"
+msgstr "ÐмÑрыка/Ðом"
+
+#: calendar/zones.h:141
+msgid "America/Noronha"
+msgstr "ÐмÑрыка/Ðаронга"
+
+#: calendar/zones.h:142
+msgid "America/North_Dakota/Center"
+msgstr "ÐмÑрыка/ÐŸÐ°ÑžÐ½Ð¾Ñ‡Ð½Ð°Ñ Ð”Ð°ÐºÐ¾Ñ‚Ð°/ЦÑнтар"
+
+#: calendar/zones.h:143
+msgid "America/Panama"
+msgstr "ÐмÑрыка/Панама"
+
+#: calendar/zones.h:144
+msgid "America/Pangnirtung"
+msgstr "ÐмÑрыка/Пангніцюнг"
+
+#: calendar/zones.h:145
+msgid "America/Paramaribo"
+msgstr "ÐмÑрыка/Парамарыба"
+
+#: calendar/zones.h:146
+msgid "America/Phoenix"
+msgstr "ÐмÑрыка/ФенікÑ"
+
+#: calendar/zones.h:147
+msgid "America/Port-au-Prince"
+msgstr "ÐмÑрыка/Порт-аў-Прынц"
+
+#: calendar/zones.h:148
+msgid "America/Port_of_Spain"
+msgstr "ÐмÑрыка/ГішпанÑкі порт"
+
+#: calendar/zones.h:149
+msgid "America/Porto_Velho"
+msgstr "ÐмÑрыка/Порта-Ð’Ñльга"
+
+#: calendar/zones.h:150
+msgid "America/Puerto_Rico"
+msgstr "ÐмÑрыка/ПуÑрта-РÑка"
+
+#: calendar/zones.h:151
+msgid "America/Rainy_River"
+msgstr "ÐмÑрыка/РÑйні-Рыва"
+
+#: calendar/zones.h:152
+msgid "America/Rankin_Inlet"
+msgstr "ÐмÑрыка/Ранкін-Інлет"
+
+#: calendar/zones.h:153
+msgid "America/Recife"
+msgstr "ÐмÑрыка/РÑцыф"
+
+#: calendar/zones.h:154
+msgid "America/Regina"
+msgstr "ÐмÑрыка/РÑгуна"
+
+#: calendar/zones.h:155
+msgid "America/Rio_Branco"
+msgstr "ÐмÑрыка/РыÑ-Бранка"
+
+#: calendar/zones.h:156
+msgid "America/Rosario"
+msgstr "ÐмÑрыка/Разаліё"
+
+#: calendar/zones.h:157
+msgid "America/Santiago"
+msgstr "ÐмÑрыка/Санц'Ñга"
+
+#: calendar/zones.h:158
+msgid "America/Santo_Domingo"
+msgstr "ÐмÑрыка/Санта-Дамінга"
+
+#: calendar/zones.h:159
+msgid "America/Sao_Paulo"
+msgstr "ÐмÑрыка/СÑо-Паўла"
+
+#: calendar/zones.h:160
+msgid "America/Scoresbysund"
+msgstr "ÐмÑрыка/СкорÑбыÑанд"
+
+#: calendar/zones.h:161
+msgid "America/Shiprock"
+msgstr "ÐмÑрыка/Шыпрок"
+
+#: calendar/zones.h:162
+msgid "America/St_Johns"
+msgstr "ÐмÑрыка/Санта-ДжонÑ"
+
+#: calendar/zones.h:163
+msgid "America/St_Kitts"
+msgstr "ÐмÑрыка/Санта-КітÑ"
+
+#: calendar/zones.h:164
+msgid "America/St_Lucia"
+msgstr "ÐмÑрыка/Санта-ЛючыÑ"
+
+#: calendar/zones.h:165
+msgid "America/St_Thomas"
+msgstr "ÐмÑрыка/Sанта-ТомаÑ"
+
+#: calendar/zones.h:166
+msgid "America/St_Vincent"
+msgstr "ÐмÑрыка/Санта-ВінцÑнт"
+
+#: calendar/zones.h:167
+msgid "America/Swift_Current"
+msgstr "ÐмÑрыка/Свіфт-КарÑнт"
+
+#: calendar/zones.h:168
+msgid "America/Tegucigalpa"
+msgstr "ÐмÑрыка/ТÑгуцыгалпа"
+
+#: calendar/zones.h:169
+msgid "America/Thule"
+msgstr "ÐмÑрыка/Тал"
+
+#: calendar/zones.h:170
+msgid "America/Thunder_Bay"
+msgstr "ÐмÑрыка/ТандÑÑ€-Бай"
+
+#: calendar/zones.h:171
+msgid "America/Tijuana"
+msgstr "ÐмÑрыка/ЦіÑна"
+
+#: calendar/zones.h:172
+msgid "America/Tortola"
+msgstr "ÐмÑрыка/Тартала"
+
+#: calendar/zones.h:173
+msgid "America/Vancouver"
+msgstr "ÐмÑрыка/ВанкувÑÑ€"
+
+#: calendar/zones.h:174
+msgid "America/Whitehorse"
+msgstr "ÐмÑрыка/ВайтхоÑ"
+
+#: calendar/zones.h:175
+msgid "America/Winnipeg"
+msgstr "ÐмÑрыка/Вініпег"
+
+#: calendar/zones.h:176
+msgid "America/Yakutat"
+msgstr "ÐмÑрыка/Якутат"
+
+#: calendar/zones.h:177
+msgid "America/Yellowknife"
+msgstr "ÐмÑрыка/Елаўкніф"
+
+#: calendar/zones.h:178
+msgid "Antarctica/Casey"
+msgstr "Aнтарктыда/КаÑей"
+
+#: calendar/zones.h:179
+msgid "Antarctica/Davis"
+msgstr "Ðнтарктыда/ДÑвіÑ"
+
+#: calendar/zones.h:180
+msgid "Antarctica/DumontDUrville"
+msgstr "Ðнтарктыда/Д'юмонтдьюрвіль"
+
+#: calendar/zones.h:181
+msgid "Antarctica/Mawson"
+msgstr "Ðнтарктыда/МаўÑан"
+
+#: calendar/zones.h:182
+msgid "Antarctica/McMurdo"
+msgstr "Ðнтарктыда/Макмарда"
+
+#: calendar/zones.h:183
+msgid "Antarctica/Palmer"
+msgstr "Ðнтарктыда/Пальмер"
+
+#: calendar/zones.h:184
+msgid "Antarctica/South_Pole"
+msgstr "Ðнтарктыда/Сыдполен"
+
+#: calendar/zones.h:185
+msgid "Antarctica/Syowa"
+msgstr "Ðнтарктыда/Сыёва"
+
+#: calendar/zones.h:186
+msgid "Antarctica/Vostok"
+msgstr "Ðнтарктыда/УÑход"
+
+#: calendar/zones.h:187
+msgid "Arctic/Longyearbyen"
+msgstr "Ðрктыка/Лёнгырбаен"
+
+#: calendar/zones.h:188
+msgid "Asia/Aden"
+msgstr "ÐзыÑ/ÐдÑн"
+
+#: calendar/zones.h:189
+msgid "Asia/Almaty"
+msgstr "ÐзыÑ/Ðлма-ÐÑ‚Ñ‹"
+
+#: calendar/zones.h:190
+msgid "Asia/Amman"
+msgstr "ÐзыÑ/Ðман"
+
+#: calendar/zones.h:191
+msgid "Asia/Anadyr"
+msgstr "ÐзыÑ/Ðнадыр"
+
+#: calendar/zones.h:192
+msgid "Asia/Aqtau"
+msgstr "ÐзыÑ/Ðктаў"
+
+#: calendar/zones.h:193
+msgid "Asia/Aqtobe"
+msgstr "ÐзыÑ/Ðктобе"
+
+#: calendar/zones.h:194
+msgid "Asia/Ashgabat"
+msgstr "ÐзыÑ/Ðшхабад"
+
+#: calendar/zones.h:195
+msgid "Asia/Baghdad"
+msgstr "ÐзыÑ/Багдад"
+
+#: calendar/zones.h:196
+msgid "Asia/Bahrain"
+msgstr "ÐзыÑ/БахрÑін"
+
+#: calendar/zones.h:197
+msgid "Asia/Baku"
+msgstr "ÐзыÑ/Баку"
+
+#: calendar/zones.h:198
+msgid "Asia/Bangkok"
+msgstr "ÐзыÑ/Банкок"
+
+#: calendar/zones.h:199
+msgid "Asia/Beirut"
+msgstr "ÐзыÑ/БÑйрут"
+
+#: calendar/zones.h:200
+msgid "Asia/Bishkek"
+msgstr "ÐзыÑ/Бішкек"
+
+#: calendar/zones.h:201
+msgid "Asia/Brunei"
+msgstr "ÐзыÑ/БрунÑÑ–"
+
+#: calendar/zones.h:202
+msgid "Asia/Calcutta"
+msgstr "ÐзыÑ/Калькута"
+
+#: calendar/zones.h:203
+msgid "Asia/Choibalsan"
+msgstr "ÐзыÑ/ЧуйбальÑан"
+
+#: calendar/zones.h:204
+msgid "Asia/Chongqing"
+msgstr "ÐзыÑ/Чонгквінг"
+
+#: calendar/zones.h:205
+msgid "Asia/Colombo"
+msgstr "ÐзыÑ/Калумба"
+
+#: calendar/zones.h:206
+msgid "Asia/Damascus"
+msgstr "ÐзыÑ/ДамаÑкуÑ"
+
+#: calendar/zones.h:207
+msgid "Asia/Dhaka"
+msgstr "ÐзыÑ/Дгака"
+
+#: calendar/zones.h:208
+msgid "Asia/Dili"
+msgstr "ÐзыÑ/Дзілі"
+
+#: calendar/zones.h:209
+msgid "Asia/Dubai"
+msgstr "ÐзыÑ/Дзюбаі"
+
+#: calendar/zones.h:210
+msgid "Asia/Dushanbe"
+msgstr "ÐзыÑ/ДушанбÑ"
+
+#: calendar/zones.h:211
+msgid "Asia/Gaza"
+msgstr "ÐзыÑ/Газа"
+
+#: calendar/zones.h:212
+msgid "Asia/Harbin"
+msgstr "ÐзыÑ/Гарбін"
+
+#: calendar/zones.h:213
+msgid "Asia/Hong_Kong"
+msgstr "ÐзыÑ/СÑн-Ган"
+
+#: calendar/zones.h:214
+msgid "Asia/Hovd"
+msgstr "ÐзыÑ/Гоўд"
+
+#: calendar/zones.h:215
+msgid "Asia/Irkutsk"
+msgstr "ÐзыÑ/Іркуцк"
+
+#: calendar/zones.h:216
+msgid "Asia/Istanbul"
+msgstr "ÐзыÑ/Стамбул"
+
+#: calendar/zones.h:217
+msgid "Asia/Jakarta"
+msgstr "ÐзыÑ/Джакарта"
+
+#: calendar/zones.h:218
+msgid "Asia/Jayapura"
+msgstr "ÐзыÑ/ДжаÑпура"
+
+#: calendar/zones.h:219
+msgid "Asia/Jerusalem"
+msgstr "ÐзыÑ/ІеруÑалім"
+
+#: calendar/zones.h:220
+msgid "Asia/Kabul"
+msgstr "ÐзыÑ/Кабул"
+
+#: calendar/zones.h:221
+msgid "Asia/Kamchatka"
+msgstr "ÐзыÑ/Камчатка"
+
+#: calendar/zones.h:222
+msgid "Asia/Karachi"
+msgstr "ÐзыÑ/Карачы"
+
+#: calendar/zones.h:223
+msgid "Asia/Kashgar"
+msgstr "ÐзыÑ/Кашгар"
+
+#: calendar/zones.h:224
+msgid "Asia/Katmandu"
+msgstr "ÐзыÑ/Катманду"
+
+#: calendar/zones.h:225
+msgid "Asia/Krasnoyarsk"
+msgstr "ÐзыÑ/КраÑнаÑÑ€Ñк"
+
+#: calendar/zones.h:226
+msgid "Asia/Kuala_Lumpur"
+msgstr "ÐзыÑ/Куала-Люмпур"
+
+#: calendar/zones.h:227
+msgid "Asia/Kuching"
+msgstr "ÐзыÑ/Качынг"
+
+#: calendar/zones.h:228
+msgid "Asia/Kuwait"
+msgstr "ÐзыÑ/КювÑйт"
+
+#: calendar/zones.h:229
+msgid "Asia/Macao"
+msgstr "ÐзыÑ/Макао"
+
+#: calendar/zones.h:230
+msgid "Asia/Macau"
+msgstr "ÐзыÑ/Макаў"
+
+#: calendar/zones.h:231
+msgid "Asia/Magadan"
+msgstr "ÐзыÑ/Магадан"
+
+#: calendar/zones.h:232
+msgid "Asia/Makassar"
+msgstr "ÐзыÑ/МакаÑар"
+
+#: calendar/zones.h:233
+msgid "Asia/Manila"
+msgstr "ÐзыÑ/Маніла"
+
+#: calendar/zones.h:234
+msgid "Asia/Muscat"
+msgstr "ÐзыÑ/МуÑкат"
+
+#: calendar/zones.h:235
+msgid "Asia/Nicosia"
+msgstr "ÐзыÑ/ÐікоÑÑ"
+
+#: calendar/zones.h:236
+msgid "Asia/Novosibirsk"
+msgstr "ÐзыÑ/ÐаваÑібірÑк"
+
+#: calendar/zones.h:237
+msgid "Asia/Omsk"
+msgstr "ÐзыÑ/ОмÑк"
+
+#: calendar/zones.h:238
+msgid "Asia/Oral"
+msgstr "ÐзыÑ/Ðрол"
+
+#: calendar/zones.h:239
+msgid "Asia/Phnom_Penh"
+msgstr "ÐзыÑ/Хном-ПÑнг"
+
+#: calendar/zones.h:240
+msgid "Asia/Pontianak"
+msgstr "ÐзыÑ/ПонціÑнак"
+
+#: calendar/zones.h:241
+msgid "Asia/Pyongyang"
+msgstr "ÐзыÑ/ПёнгÑнг"
+
+#: calendar/zones.h:242
+msgid "Asia/Qatar"
+msgstr "ÐзыÑ/Кватар"
+
+#: calendar/zones.h:243
+msgid "Asia/Qyzylorda"
+msgstr "ÐзыÑ/Квізылёрда"
+
+#: calendar/zones.h:244
+msgid "Asia/Rangoon"
+msgstr "ÐзыÑ/Рангун"
+
+#: calendar/zones.h:245
+msgid "Asia/Riyadh"
+msgstr "ÐзыÑ/РыÑд"
+
+#: calendar/zones.h:246
+msgid "Asia/Saigon"
+msgstr "ÐзыÑ/Сайгон"
+
+#: calendar/zones.h:247
+msgid "Asia/Sakhalin"
+msgstr "ÐзыÑ/Сахалін"
+
+#: calendar/zones.h:248
+msgid "Asia/Samarkand"
+msgstr "ÐзыÑ/Самарканд"
+
+#: calendar/zones.h:249
+msgid "Asia/Seoul"
+msgstr "ÐзыÑ/Сеул"
+
+#: calendar/zones.h:250
+msgid "Asia/Shanghai"
+msgstr "ÐзыÑ/Шанхай"
+
+#: calendar/zones.h:251
+msgid "Asia/Singapore"
+msgstr "ÐзыÑ/Сынгапур"
+
+#: calendar/zones.h:252
+msgid "Asia/Taipei"
+msgstr "ÐзыÑ/ТайпÑй"
+
+#: calendar/zones.h:253
+msgid "Asia/Tashkent"
+msgstr "ÐзыÑ/Ташкент"
+
+#: calendar/zones.h:254
+msgid "Asia/Tbilisi"
+msgstr "ÐзыÑ/ДбіліÑÑ–"
+
+#: calendar/zones.h:255
+msgid "Asia/Tehran"
+msgstr "ÐзыÑ/ТÑгран"
+
+#: calendar/zones.h:256
+msgid "Asia/Thimphu"
+msgstr "ÐзыÑ/Цімпху"
+
+#: calendar/zones.h:257
+msgid "Asia/Tokyo"
+msgstr "ÐзыÑ/Токіё"
+
+#: calendar/zones.h:258
+msgid "Asia/Ujung_Pandang"
+msgstr "ÐзыÑ/Ðнг-Панданг"
+
+#: calendar/zones.h:259
+msgid "Asia/Ulaanbaatar"
+msgstr "ÐзыÑ/Уланбатар"
+
+#: calendar/zones.h:260
+msgid "Asia/Urumqi"
+msgstr "ÐзыÑ/Юрумкві"
+
+#: calendar/zones.h:261
+msgid "Asia/Vientiane"
+msgstr "ÐзыÑ/Ð’Ñнцын"
+
+#: calendar/zones.h:262
+msgid "Asia/Vladivostok"
+msgstr "ÐзыÑ/УладываÑток"
+
+#: calendar/zones.h:263
+msgid "Asia/Yakutsk"
+msgstr "ÐзыÑ/ЯкутÑк"
+
+#: calendar/zones.h:264
+msgid "Asia/Yekaterinburg"
+msgstr "ÐзыÑ/Екацерынбург"
+
+#: calendar/zones.h:265
+msgid "Asia/Yerevan"
+msgstr "ÐзыÑ/ЕрÑван"
+
+#: calendar/zones.h:266
+msgid "Atlantic/Azores"
+msgstr "ÐтлÑнтыка/ÐзорÑÑ"
+
+#: calendar/zones.h:267
+msgid "Atlantic/Bermuda"
+msgstr "ÐтлÑнтыка/БÑрмуды"
+
+#: calendar/zones.h:268
+msgid "Atlantic/Canary"
+msgstr "ÐтлÑнтыка/Канары"
+
+#: calendar/zones.h:269
+msgid "Atlantic/Cape_Verde"
+msgstr "ÐтлÑнтыка/КапÑ-Ð’Ñрдзі"
+
+#: calendar/zones.h:270
+msgid "Atlantic/Faeroe"
+msgstr "ÐтлÑнтыка/Фаеру"
+
+#: calendar/zones.h:271
+msgid "Atlantic/Jan_Mayen"
+msgstr "ÐтлÑнтыка/Ян-Майен"
+
+#: calendar/zones.h:272
+msgid "Atlantic/Madeira"
+msgstr "ÐтлÑнтыка/МадÑйра"
+
+#: calendar/zones.h:273
+msgid "Atlantic/Reykjavik"
+msgstr "ÐтлÑнтыка/РÑйкÑвік"
+
+#: calendar/zones.h:274
+msgid "Atlantic/South_Georgia"
+msgstr "ÐтлÑнтыка/ÐŸÐ°ÑžÐ´Ð·ÐµÐ½Ð½Ð°Ñ Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ñ‹Ñ"
+
+#: calendar/zones.h:275
+msgid "Atlantic/St_Helena"
+msgstr "ÐтлÑнтыка/Сан-Гелена"
+
+#: calendar/zones.h:276
+msgid "Atlantic/Stanley"
+msgstr "ÐтлÑнтыка/СтÑнлі"
+
+#: calendar/zones.h:277
+msgid "Australia/Adelaide"
+msgstr "ÐÑžÑтраліÑ/ÐдÑлÑд"
+
+#: calendar/zones.h:278
+msgid "Australia/Brisbane"
+msgstr "ÐÑžÑтраліÑ/Брышбан"
+
+#: calendar/zones.h:279
+msgid "Australia/Broken_Hill"
+msgstr "ÐÑžÑтраліÑ/Брокен-Хіл"
+
+#: calendar/zones.h:280
+msgid "Australia/Darwin"
+msgstr "ÐÑžÑтраліÑ/Дарвін"
+
+#: calendar/zones.h:281
+msgid "Australia/Hobart"
+msgstr "ÐÑžÑтраліÑ/Габарт"
+
+#: calendar/zones.h:282
+msgid "Australia/Lindeman"
+msgstr "ÐÑžÑтраліÑ/ЛіндÑман"
+
+#: calendar/zones.h:283
+msgid "Australia/Lord_Howe"
+msgstr "ÐÑžÑтраліÑ/Лёрд-Хоў"
+
+#: calendar/zones.h:284
+msgid "Australia/Melbourne"
+msgstr "ÐÑžÑтраліÑ/ÐœÑльбурн"
+
+#: calendar/zones.h:285
+msgid "Australia/Perth"
+msgstr "ÐÑžÑтраліÑ/ПерÑ"
+
+#: calendar/zones.h:286
+msgid "Australia/Sydney"
+msgstr "ÐÑžÑтраліÑ/СыднÑй"
+
+#: calendar/zones.h:287
+msgid "Europe/Amsterdam"
+msgstr "Эўропа/ÐмÑÑ‚Ñрдам"
+
+#: calendar/zones.h:288
+msgid "Europe/Andorra"
+msgstr "Эўропа/Ðндора"
+
+#: calendar/zones.h:289
+msgid "Europe/Athens"
+msgstr "Эўропа/ÐÑ‚ÑнÑ"
+
+#: calendar/zones.h:290
+msgid "Europe/Belfast"
+msgstr "Эўропа/БелхваÑÑ‚"
+
+#: calendar/zones.h:291
+msgid "Europe/Belgrade"
+msgstr "Эўропа/Белград"
+
+#: calendar/zones.h:292
+msgid "Europe/Berlin"
+msgstr "Эўропа/БÑрлін"
+
+#: calendar/zones.h:293
+msgid "Europe/Bratislava"
+msgstr "Эўропа/БратыÑлÑва"
+
+#: calendar/zones.h:294
+msgid "Europe/Brussels"
+msgstr "Эўропа/БруÑÑль"
+
+#: calendar/zones.h:295
+msgid "Europe/Bucharest"
+msgstr "Эўропа/БухарÑÑÑ‚"
+
+#: calendar/zones.h:296
+msgid "Europe/Budapest"
+msgstr "Эўропа/Будапешт"
+
+#: calendar/zones.h:297
+msgid "Europe/Chisinau"
+msgstr "Эўропа/Чызінаў"
+
+#: calendar/zones.h:298
+msgid "Europe/Copenhagen"
+msgstr "Эўропа/КопÑнгаген"
+
+#: calendar/zones.h:299
+msgid "Europe/Dublin"
+msgstr "Эўропа/Дублін"
+
+#: calendar/zones.h:300
+msgid "Europe/Gibraltar"
+msgstr "Эўропа/Гіблартар"
+
+#: calendar/zones.h:301
+msgid "Europe/Helsinki"
+msgstr "Эўропа/ХельÑынкі"
+
+#: calendar/zones.h:302
+msgid "Europe/Istanbul"
+msgstr "Эўропа/Стамбул"
+
+#: calendar/zones.h:303
+msgid "Europe/Kaliningrad"
+msgstr "Эўропа/КёнігÑбÑрг"
+
+#: calendar/zones.h:304
+msgid "Europe/Kiev"
+msgstr "Эўропа/Кіеў"
+
+#: calendar/zones.h:305
+msgid "Europe/Lisbon"
+msgstr "Эўропа/ЛіÑабон"
+
+#: calendar/zones.h:306
+msgid "Europe/Ljubljana"
+msgstr "Эўропа/ЛюблÑна"
+
+#: calendar/zones.h:307
+msgid "Europe/London"
+msgstr "Эўропа/Лёндан"
+
+#: calendar/zones.h:308
+msgid "Europe/Luxembourg"
+msgstr "Эўропа/ЛюкÑÑмбург"
+
+#: calendar/zones.h:309
+msgid "Europe/Madrid"
+msgstr "Эўропа/Мадрыд"
+
+#: calendar/zones.h:310
+msgid "Europe/Malta"
+msgstr "Эўропа/Мальта"
+
+#: calendar/zones.h:311
+msgid "Europe/Minsk"
+msgstr "Эўропа/МенÑк"
+
+#: calendar/zones.h:312
+msgid "Europe/Monaco"
+msgstr "Эўропа/Манака"
+
+#: calendar/zones.h:313
+msgid "Europe/Moscow"
+msgstr "Эўропа/МаÑква"
+
+#: calendar/zones.h:314
+msgid "Europe/Nicosia"
+msgstr "Эўропа/ÐікоÑÑ–Ñ"
+
+#: calendar/zones.h:315
+msgid "Europe/Oslo"
+msgstr "Эўропа/ОÑла"
+
+#: calendar/zones.h:316
+msgid "Europe/Paris"
+msgstr "Эўропа/Парыж"
+
+#: calendar/zones.h:317
+msgid "Europe/Prague"
+msgstr "Эўропа/Прага"
+
+#: calendar/zones.h:318
+msgid "Europe/Riga"
+msgstr "Эўропа/Рыга"
+
+#: calendar/zones.h:319
+msgid "Europe/Rome"
+msgstr "Эўропа/Рым"
+
+#: calendar/zones.h:320
+msgid "Europe/Samara"
+msgstr "Эўропа/Самара"
+
+#: calendar/zones.h:321
+msgid "Europe/San_Marino"
+msgstr "Эўропа/Сан-Марына"
+
+#: calendar/zones.h:322
+msgid "Europe/Sarajevo"
+msgstr "Эўропа/Сараева"
+
+#: calendar/zones.h:323
+msgid "Europe/Simferopol"
+msgstr "Эўропа/СімфÑропаль"
+
+#: calendar/zones.h:324
+msgid "Europe/Skopje"
+msgstr "Эўропа/Скоп'е"
+
+#: calendar/zones.h:325
+msgid "Europe/Sofia"
+msgstr "Эўропа/СафіÑ"
+
+#: calendar/zones.h:326
+msgid "Europe/Stockholm"
+msgstr "Эўропа/Стакгольм"
+
+#: calendar/zones.h:327
+msgid "Europe/Tallinn"
+msgstr "Эўропа/Талін"
+
+#: calendar/zones.h:328
+msgid "Europe/Tirane"
+msgstr "Эўропа/Цірана"
+
+#: calendar/zones.h:329
+msgid "Europe/Uzhgorod"
+msgstr "Эўропа/Ужгарад"
+
+#: calendar/zones.h:330
+msgid "Europe/Vaduz"
+msgstr "Эўропа/Вадзюз"
+
+#: calendar/zones.h:331
+msgid "Europe/Vatican"
+msgstr "Эўропа/Вацікан"
+
+#: calendar/zones.h:332
+msgid "Europe/Vienna"
+msgstr "Эўропа/Вена"
+
+#: calendar/zones.h:333
+msgid "Europe/Vilnius"
+msgstr "Эўропа/ВільнÑ"
+
+#: calendar/zones.h:334
+msgid "Europe/Warsaw"
+msgstr "Эўропа/Варшава"
+
+#: calendar/zones.h:335
+msgid "Europe/Zagreb"
+msgstr "Эўропа/ЗагрÑб"
+
+#: calendar/zones.h:336
+msgid "Europe/Zaporozhye"
+msgstr "Эўропа/Запарож'е"
+
+#: calendar/zones.h:337
+msgid "Europe/Zurich"
+msgstr "Эўропа/Цюрых"
+
+#: calendar/zones.h:338
+msgid "Indian/Antananarivo"
+msgstr "ІндыйÑкі акіÑн/Ðнтанарыва"
+
+#: calendar/zones.h:339
+msgid "Indian/Chagos"
+msgstr "ІндыйÑкі акіÑн/ЧагаÑ"
+
+#: calendar/zones.h:340
+msgid "Indian/Christmas"
+msgstr "ІндыйÑкі акіÑн/РаÑтво"
+
+#: calendar/zones.h:341
+msgid "Indian/Cocos"
+msgstr "ІндыйÑкі акіÑн/КакоÑ"
+
+#: calendar/zones.h:342
+msgid "Indian/Comoro"
+msgstr "ІндыйÑкі акіÑн/Камара"
+
+#: calendar/zones.h:343
+msgid "Indian/Kerguelen"
+msgstr "ІндыйÑкі акіÑн/КергуÑлен"
+
+#: calendar/zones.h:344
+msgid "Indian/Mahe"
+msgstr "ІндыйÑкі акіÑн/Мах"
+
+#: calendar/zones.h:345
+msgid "Indian/Maldives"
+msgstr "ІндыйÑкі акіÑн/Мальды"
+
+#: calendar/zones.h:346
+msgid "Indian/Mauritius"
+msgstr "ІндыйÑкі акіÑн/МаўрыцыюÑ"
+
+#: calendar/zones.h:347
+msgid "Indian/Mayotte"
+msgstr "ІндыйÑкі акіÑн/Майот"
+
+#: calendar/zones.h:348
+msgid "Indian/Reunion"
+msgstr "ІндыйÑкі акіÑн/РÑюніён"
+
+#: calendar/zones.h:349
+msgid "Pacific/Apia"
+msgstr "Ціхі акіÑн/ÐпіÑ"
+
+#: calendar/zones.h:350
+msgid "Pacific/Auckland"
+msgstr "Ціхі акіÑн/ÐўклÑнд"
+
+#: calendar/zones.h:351
+msgid "Pacific/Chatham"
+msgstr "Ціхі акіÑн/Чызам"
+
+#: calendar/zones.h:352
+msgid "Pacific/Easter"
+msgstr "Ціхі акіÑн/ПаÑха"
+
+#: calendar/zones.h:353
+msgid "Pacific/Efate"
+msgstr "Ціхі акіÑн/Эфіт"
+
+#: calendar/zones.h:354
+msgid "Pacific/Enderbury"
+msgstr "Ціхі акіÑн/Эндербары"
+
+#: calendar/zones.h:355
+msgid "Pacific/Fakaofo"
+msgstr "Ціхі акіÑн/Хвакахву"
+
+#: calendar/zones.h:356
+msgid "Pacific/Fiji"
+msgstr "Ціхі акіÑн/Фіджы"
+
+#: calendar/zones.h:357
+msgid "Pacific/Funafuti"
+msgstr "Ціхі акіÑн/Хванахваці"
+
+#: calendar/zones.h:358
+msgid "Pacific/Galapagos"
+msgstr "Ціхі акіÑн/ГалапагоÑ"
+
+#: calendar/zones.h:359
+msgid "Pacific/Gambier"
+msgstr "Ціхі акіÑн/Гамбір"
+
+#: calendar/zones.h:360
+msgid "Pacific/Guadalcanal"
+msgstr "Ціхі акіÑн/Гвадалканал"
+
+#: calendar/zones.h:361
+msgid "Pacific/Guam"
+msgstr "Ціхі акіÑн/ГуÑм"
+
+#: calendar/zones.h:362
+msgid "Pacific/Honolulu"
+msgstr "Ціхі акіÑн/Ганалулу"
+
+#: calendar/zones.h:363
+msgid "Pacific/Johnston"
+msgstr "Ціхі акіÑн/ДжонÑан"
+
+#: calendar/zones.h:364
+msgid "Pacific/Kiritimati"
+msgstr "Ціхі акіÑн/Кіріцімаці"
+
+#: calendar/zones.h:365
+msgid "Pacific/Kosrae"
+msgstr "Ціхі акіÑн/КаÑрае"
+
+#: calendar/zones.h:366
+msgid "Pacific/Kwajalein"
+msgstr "Ціхі акіÑн/КвайлÑйн"
+
+#: calendar/zones.h:367
+msgid "Pacific/Majuro"
+msgstr "Ціхі акіÑн/Маджура"
+
+#: calendar/zones.h:368
+msgid "Pacific/Marquesas"
+msgstr "Ціхі акіÑн/МаргуеÑаÑ"
+
+#: calendar/zones.h:369
+msgid "Pacific/Midway"
+msgstr "Ціхі акіÑн/МідвÑй"
+
+#: calendar/zones.h:370
+msgid "Pacific/Nauru"
+msgstr "Ціхі акіÑн/Ðауру"
+
+#: calendar/zones.h:371
+msgid "Pacific/Niue"
+msgstr "Ціхі акіÑн/ÐÑŽ"
+
+#: calendar/zones.h:372
+msgid "Pacific/Norfolk"
+msgstr "Ціхі акіÑн/Ðорфалк"
+
+#: calendar/zones.h:373
+msgid "Pacific/Noumea"
+msgstr "Ціхі акіÑн/Ðоўмі"
+
+#: calendar/zones.h:374
+msgid "Pacific/Pago_Pago"
+msgstr "Ціхі акіÑн/Пага-Пага"
+
+#: calendar/zones.h:375
+msgid "Pacific/Palau"
+msgstr "Ціхі акіÑн/Палаў"
+
+#: calendar/zones.h:376
+msgid "Pacific/Pitcairn"
+msgstr "Ціхі акіÑн/Піткайрн"
+
+#: calendar/zones.h:377
+msgid "Pacific/Ponape"
+msgstr "Ціхі акіÑн/ПонапÑ"
+
+#: calendar/zones.h:378
+msgid "Pacific/Port_Moresby"
+msgstr "Ціхі акіÑн/Порт-МарÑÑьбі"
+
+#: calendar/zones.h:379
+msgid "Pacific/Rarotonga"
+msgstr "Ціхі акіÑн/Раратанга"
+
+#: calendar/zones.h:380
+msgid "Pacific/Saipan"
+msgstr "Ціхі акіÑн/СайпÑн"
+
+#: calendar/zones.h:381
+msgid "Pacific/Tahiti"
+msgstr "Ціхі акіÑн/Тагіці"
+
+#: calendar/zones.h:382
+msgid "Pacific/Tarawa"
+msgstr "Ціхі акіÑн/Тарава"
+
+#: calendar/zones.h:383
+msgid "Pacific/Tongatapu"
+msgstr "Ціхі акіÑн/Тонгатапу"
+
+#: calendar/zones.h:384
+msgid "Pacific/Truk"
+msgstr "Ціхі акіÑн/Трак"
+
+#: calendar/zones.h:385
+msgid "Pacific/Wake"
+msgstr "Ціхі акіÑн/Вак"
+
+#: calendar/zones.h:386
+msgid "Pacific/Wallis"
+msgstr "Ціхі акіÑн/Валі"
+
+#: calendar/zones.h:387
+msgid "Pacific/Yap"
+msgstr "Ціхі акіÑн/Яп"
+
+#: camel/camel-cipher-context.c:102
+msgid "Signing is not supported by this cipher"
+msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ Ð½Ðµ падтрымліваецца гÑтым шыфрам"
+
+#: camel/camel-cipher-context.c:128
+#, fuzzy
+msgid "Signing message"
+msgstr "Ðдпраўка паведамленьнÑ"
+
+#: camel/camel-cipher-context.c:145
+msgid "Verifying is not supported by this cipher"
+msgstr "Праверка не падтрымліваецца гÑтым шыфрам"
+
+#: camel/camel-cipher-context.c:171
+#, fuzzy
+msgid "Verifying message"
+msgstr "Ðдпраўка паведамленьнÑ"
+
+#: camel/camel-cipher-context.c:189
+msgid "Encryption is not supported by this cipher"
+msgstr "Шыфраваньне не падтрымліваецца гÑтым шыфрам"
+
+#: camel/camel-cipher-context.c:215
+#, fuzzy
+msgid "Encrypting message"
+msgstr "Ðдпраўка паведамленьнÑ"
+
+#: camel/camel-cipher-context.c:232
+msgid "Decryption is not supported by this cipher"
+msgstr "РаÑшыфроўка не падтрымліваецца гÑтым шыфрам"
+
+#: camel/camel-cipher-context.c:254
+#, fuzzy
+msgid "Decrypting message"
+msgstr "Ðдпраўка паведамленьнÑ"
+
+#: camel/camel-cipher-context.c:271
+msgid "You may not import keys with this cipher"
+msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ імпартаваць ключы з гÑтым шыфрам"
+
+#: camel/camel-cipher-context.c:301
+msgid "You may not export keys with this cipher"
+msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ ÑкÑпартаваць ключы з гÑтым шыфрам"
+
+#: camel/camel-data-cache.c:133
+msgid "Unable to create cache path"
+msgstr "ÐеатрымалаÑÑ Ñтварыць шлÑÑ… Ð´Ð»Ñ ÐºÑшу"
+
+#: camel/camel-data-cache.c:375
+#, c-format
+msgid "Could not remove cache entry: %s: %s"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ кÑшаваны ÑлемÑнт: %s: %s"
+
+#: camel/camel-disco-diary.c:194
+#, c-format
+msgid ""
+"Could not write log entry: %s\n"
+"Further operations on this server will not be replayed when you\n"
+"reconnect to the network."
+msgstr ""
+"ÐеатрымалаÑÑ Ð·Ð°Ð¿Ñ–Ñаць у чаÑопіÑ: %s\n"
+"Ð”Ð°Ð»ÐµÐ¹ÑˆÑ‹Ñ Ð°Ð¿Ñрацыі Ð½Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ запіÑаны й, адпаведна, Ð½Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ\n"
+"Ð°Ð´Ð½Ð¾ÑžÐ»ÐµÐ½Ñ‹Ñ Ð¿Ð°ÑÑŒÐ»Ñ Ð´Ð°Ð»ÑƒÑ‡ÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка."
+
+#: camel/camel-disco-diary.c:257
+#, c-format
+msgid ""
+"Could not open `%s':\n"
+"%s\n"
+"Changes made to this folder will not be resynchronized."
+msgstr ""
+"Ðемагчыма адкрыць `%s':\n"
+"%s\n"
+"Зьмены, Ð·Ñ€Ð¾Ð±Ð»ÐµÐ½Ñ‹Ñ Ñƒ гÑтае Ñ‚Ñчцы, Ð½Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ ÑынхранізаваныÑ."
+
+#: camel/camel-disco-diary.c:293
+msgid "Resynchronizing with server"
+msgstr "ПераÑÑ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ð· паÑлужнікам"
+
+#: camel/camel-disco-folder.c:41
+msgid "Copy folder content locally for offline operation"
+msgstr ""
+
+#: camel/camel-disco-folder.c:103
+msgid "Downloading new messages for offline mode"
+msgstr ""
+
+#: camel/camel-disco-folder.c:466
+#, c-format
+msgid "Preparing folder '%s' for offline"
+msgstr "Падрыхтоўка Ñ‚Ñчкі \"%s\" Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ð½Ð¾Ð¼Ð½Ð°Ðµ працы"
+
+#: camel/camel-disco-store.c:404
+msgid "You must be working online to complete this operation"
+msgstr "Ð’Ñ‹ муÑіце працаваць у далучаным Ñтане Ð´Ð»Ñ Ð·Ð°Ð²ÑршÑÐ½ÑŒÐ½Ñ Ð³Ñтае апÑрацыі"
+
+#: camel/camel-filter-driver.c:669 camel/camel-filter-search.c:513
+#: camel/camel-process.c:48
+#, c-format
+msgid "Failed to create pipe to '%s': %s"
+msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ ÐºÐ°Ð½Ð°Ð»Ð° да \"%s\": %s"
+
+#: camel/camel-filter-driver.c:713 camel/camel-process.c:90
+#, fuzzy, c-format
+msgid "Failed to create child process '%s': %s"
+msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ Ð´Ð°Ñ‡ÑрнÑга працÑÑа '%s': %s"
+
+#: camel/camel-filter-driver.c:756
+#, c-format
+msgid "Invalid message stream received from %s: %s"
+msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð»Ñ‹Ð½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½Ð° ад %s: %s"
+
+#: camel/camel-filter-driver.c:945 camel/camel-filter-driver.c:954
+msgid "Syncing folders"
+msgstr "Ð¡Ñ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ñ‚Ñчак"
+
+#: camel/camel-filter-driver.c:1043 camel/camel-filter-driver.c:1420
+#, c-format
+msgid "Error parsing filter: %s: %s"
+msgstr "Памылка аналізу фільтра: %s: %s"
+
+#: camel/camel-filter-driver.c:1052 camel/camel-filter-driver.c:1426
+#, c-format
+msgid "Error executing filter: %s: %s"
+msgstr "Памылка Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°: %s: %s"
+
+#: camel/camel-filter-driver.c:1119
+msgid "Unable to open spool folder"
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ Ñ‚Ñчку Ñпула"
+
+#: camel/camel-filter-driver.c:1128
+msgid "Unable to process spool folder"
+msgstr "ÐеатрымалаÑÑ Ð°Ð¿Ñ€Ð°Ñ†Ð°Ð²Ð°Ñ†ÑŒ Ñ‚Ñчку Ñпула"
+
+#: camel/camel-filter-driver.c:1143
+#, c-format
+msgid "Getting message %d (%d%%)"
+msgstr "Ðтрыманьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %d (%d%%)"
+
+#: camel/camel-filter-driver.c:1147
+msgid "Cannot open message"
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#: camel/camel-filter-driver.c:1148 camel/camel-filter-driver.c:1160
+#, c-format
+msgid "Failed on message %d"
+msgstr "Збой на паведамленьні %d"
+
+#: camel/camel-filter-driver.c:1174 camel/camel-filter-driver.c:1265
+msgid "Syncing folder"
+msgstr "Ð¡Ñ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ñ‚Ñчкі"
+
+#: camel/camel-filter-driver.c:1235
+#, c-format
+msgid "Getting message %d of %d"
+msgstr "Ðтрыманьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %d з %d"
+
+#: camel/camel-filter-driver.c:1250
+#, c-format
+msgid "Failed at message %d of %d"
+msgstr "Збой на паведамленьні %d з %d"
+
+#: camel/camel-filter-search.c:136
+msgid "Failed to retrieve message"
+msgstr "Збой пад Ñ‡Ð°Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ"
+
+#: camel/camel-filter-search.c:386
+msgid "Invalid arguments to (system-flag)"
+msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð°Ñ€Ð³ÑƒÐ¼Ñнты Ð´Ð»Ñ system-flag"
+
+#: camel/camel-filter-search.c:401
+msgid "Invalid arguments to (user-tag)"
+msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð°Ñ€Ð³ÑƒÐ¼Ñнты Ð´Ð»Ñ user-tag"
+
+#: camel/camel-filter-search.c:549
+#, c-format
+msgid "Failed to create create child process '%s': %s"
+msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ Ð´Ð°Ñ‡ÑрнÑга працÑÑа '%s': %s"
+
+#. A filter search is a search through your filters, ie. your filters is the corpus being searched thru.
+#: camel/camel-filter-search.c:671 camel/camel-filter-search.c:679
+#, c-format
+msgid "Error executing filter search: %s: %s"
+msgstr "Памылка Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ фільтра: %s: %s"
+
+#: camel/camel-folder-search.c:355 camel/camel-folder-search.c:476
+#, c-format
+msgid ""
+"Cannot parse search expression: %s:\n"
+"%s"
+msgstr ""
+"Памылка Ñž Ñталым выразе \"%s\":\n"
+"%s"
+
+#: camel/camel-folder-search.c:365 camel/camel-folder-search.c:486
+#, c-format
+msgid ""
+"Error executing search expression: %s:\n"
+"%s"
+msgstr ""
+"Памылка пад Ñ‡Ð°Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð²Ñ‹Ñ€Ð°Ð·Ð° пошуку \"%s\":\n"
+"%s"
+
+#: camel/camel-folder-search.c:672 camel/camel-folder-search.c:705
+msgid "(match-all) requires a single bool result"
+msgstr "(Ñупадае ÑžÑе) патрабуе адзінага лÑгічнага выніка"
+
+#: camel/camel-folder-search.c:755
+msgid "(match-threads) not allowed inside match-all"
+msgstr ""
+
+#: camel/camel-folder-search.c:758 camel/camel-folder-search.c:762
+msgid "(match-threads) requires a match type string"
+msgstr ""
+
+#: camel/camel-folder-search.c:784
+#, fuzzy
+msgid "(match-threads) expects an array result"
+msgstr "(Ñупадае ÑžÑе) патрабуе адзінага лÑгічнага выніка"
+
+#: camel/camel-folder-search.c:790
+#, fuzzy
+msgid "(match-threads) requires the folder set"
+msgstr "(Ñупадае ÑžÑе) патрабуе адзінага лÑгічнага выніка"
+
+#: camel/camel-folder-search.c:879
+#, c-format
+msgid "Performing query on unknown header: %s"
+msgstr "ЗавÑршÑньне запыту на невÑдомым загалоўке: %s"
+
+#: camel/camel-folder.c:653
+#, c-format
+msgid "Unsupported operation: append message: for %s"
+msgstr "ÐпÑрацыÑ, ÑÐºÐ°Ñ Ð½Ðµ падтрымліваецца: даданьне паведамленьнÑ: Ð´Ð»Ñ %s"
+
+#: camel/camel-folder.c:1262
+#, c-format
+msgid "Unsupported operation: search by expression: for %s"
+msgstr "ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð½Ðµ падтрымліваецца: пошук выраза: Ð´Ð»Ñ %s"
+
+#: camel/camel-folder.c:1302
+#, c-format
+msgid "Unsupported operation: search by uids: for %s"
+msgstr ""
+"ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð½Ðµ падтрымліваецца: пошук па ідÑнтыфікатары карыÑтальніка: Ð´Ð»Ñ %s"
+
+#: camel/camel-folder.c:1416
+msgid "Moving messages"
+msgstr "ПерамÑшчÑньне паведамленьнÑÑž"
+
+#: camel/camel-folder.c:1416
+msgid "Copying messages"
+msgstr "КапіÑваньне паведамленьнÑÑž"
+
+#: camel/camel-folder.c:1665
+#, fuzzy
+msgid "Learning junk"
+msgstr "ПапÑÑ€Ñджаьне"
+
+#: camel/camel-folder.c:1682
+msgid "Learning non-junk"
+msgstr ""
+
+#: camel/camel-folder.c:1701
+#, fuzzy
+msgid "Filtering new message(s)"
+msgstr "Ðтрыманьне %d паведамленьнÑÑž"
+
+#: camel/camel-gpg-context.c:735
+#, c-format
+msgid ""
+"Unexpected GnuPG status message encountered:\n"
+"\n"
+"%s"
+msgstr ""
+"СуÑÑ‚Ñ€Ñта нечаканае паведамленьне аб Ñтане GnuPG:\n"
+"\n"
+"%s"
+
+#: camel/camel-gpg-context.c:749
+msgid "Failed to parse gpg userid hint."
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ– падказкі gpg userid."
+
+#: camel/camel-gpg-context.c:773
+msgid "Failed to parse gpg passphrase request."
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ– запыту парольнае фразы gpg."
+
+#: camel/camel-gpg-context.c:787
+#, c-format
+msgid ""
+"You need a passphrase to unlock the key for\n"
+"user: \"%s\""
+msgstr ""
+"Вам патрÑбны пароль каб разблÑкаваць ключ длÑ\n"
+"карыÑтальніка: \"%s\""
+
+#: camel/camel-gpg-context.c:804 camel/camel-gpg-context.c:1314
+#: camel/camel-gpg-context.c:1498 camel/camel-gpg-context.c:1589
+#: camel/camel-gpg-context.c:1697 camel/providers/nntp/camel-nntp-store.c:1231
+#: camel/providers/nntp/camel-nntp-store.c:1329 mail/mail-ops.c:705
+#: mail/mail-send-recv.c:611
+msgid "Cancelled."
+msgstr "Ðдменена."
+
+#: camel/camel-gpg-context.c:822
+msgid "Failed to unlock secret key: 3 bad passphrases given."
+msgstr ""
+"Збой пад Ñ‡Ð°Ñ Ñ€Ð°Ð·Ð±Ð»ÑÐºÐ°Ð²Ð°Ð½ÑŒÐ½Ñ ÑакрÑтнага ключа: пазначана 3 некарÑÐºÑ‚Ð½Ñ‹Ñ "
+"Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ñ‹Ñ Ñ„Ñ€Ð°Ð·Ñ‹."
+
+#: camel/camel-gpg-context.c:828
+#, c-format
+msgid "Unexpected response from GnuPG: %s"
+msgstr "Ðечаканы адказ ад GnuPG: %s"
+
+#: camel/camel-gpg-context.c:880
+msgid "Failed to encrypt: No valid recipients specified."
+msgstr ""
+"Ðеатрымліваецца зашыфраваць гÑтае паведамленьне: Ðевызначаны карÑÐºÑ‚Ð½Ñ‹Ñ "
+"атрымоўцы."
+
+#: camel/camel-gpg-context.c:1157
+#, c-format
+msgid ""
+"Failed to GPG %s: %s\n"
+"\n"
+"%s"
+msgstr ""
+"Збой у GPG %s: %s\n"
+"\n"
+"%s"
+
+#: camel/camel-gpg-context.c:1162
+#, c-format
+msgid "Failed to GPG %s: %s\n"
+msgstr "Збой у GPG %s: %s\n"
+
+#: camel/camel-gpg-context.c:1275 camel/camel-smime-context.c:419
+#, fuzzy, c-format
+msgid "Could not generate signing data: %s"
+msgstr "Ðемагчыма запіÑаць даньні: %s"
+
+#: camel/camel-gpg-context.c:1307 camel/camel-gpg-context.c:1762
+#: camel/camel-gpg-context.c:1813
+#, c-format
+msgid "Failed to execute gpg: %s"
+msgstr "Збой Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ gpg: %s"
+
+#: camel/camel-gpg-context.c:1331 camel/camel-gpg-context.c:1491
+#: camel/camel-gpg-context.c:1582 camel/camel-gpg-context.c:1605
+#: camel/camel-gpg-context.c:1690 camel/camel-gpg-context.c:1714
+#: camel/camel-gpg-context.c:1784 camel/camel-gpg-context.c:1835
+msgid "Failed to execute gpg."
+msgstr "Збой Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ gpg."
+
+#: camel/camel-gpg-context.c:1350
+msgid "This is a digitally signed message part"
+msgstr "ГÑÑ‚Ð°Ñ Ñ‡Ð°Ñтка Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð´Ð¿Ñ–Ñана Ñлектроным подпіÑам"
+
+#: camel/camel-gpg-context.c:1431 camel/camel-gpg-context.c:1437
+#: camel/camel-gpg-context.c:1443 camel/camel-smime-context.c:721
+#: camel/camel-smime-context.c:732 camel/camel-smime-context.c:739
+#, fuzzy
+msgid "Cannot verify message signature: Incorrect message format"
+msgstr ""
+"ÐеатрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ Ð¿Ð¾Ð´Ð¿Ñ–Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ: Ð½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð»Ð°ÑÑ Ñтварыць чаÑовы "
+"файл: %s"
+
+#: camel/camel-gpg-context.c:1477
+#, c-format
+msgid "Cannot verify message signature: could not create temp file: %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ Ð¿Ð¾Ð´Ð¿Ñ–Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ: Ð½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð»Ð°ÑÑ Ñтварыць чаÑовы "
+"файл: %s"
+
+#: camel/camel-gpg-context.c:1565
+#, fuzzy, c-format
+msgid "Could not generate encrypting data: %s"
+msgstr "Ðемагчыма запіÑаць даньні: %s"
+
+#: camel/camel-gpg-context.c:1623
+#, fuzzy
+msgid "This is a digitally encrypted message part"
+msgstr "ГÑÑ‚Ð°Ñ Ñ‡Ð°Ñтка Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð´Ð¿Ñ–Ñана Ñлектроным подпіÑам"
+
+#: camel/camel-gpg-context.c:1721 camel/camel-smime-context.c:995
+#, fuzzy
+msgid "Encrypted content"
+msgstr "Цела індÑкÑа утрымлівае"
+
+#: camel/camel-gpg-context.c:1740
+#, fuzzy
+msgid "Unable to parse message content"
+msgstr "Ðеатрымліваецца атрымаць паведамленьне з Ñ€Ñдактара"
+
+#: camel/camel-lock-client.c:100
+#, c-format
+msgid "Cannot build locking helper pipe: %s"
+msgstr "ÐеатрымалаÑÑ Ñтварыць канал Ð´Ð»Ñ Ð±Ð»Ñкавальніка: %s"
+
+#: camel/camel-lock-client.c:113
+#, c-format
+msgid "Cannot fork locking helper: %s"
+msgstr "Ðеатрымліваецца запуÑьціць блÑкавальніка: %s"
+
+#: camel/camel-lock-client.c:191 camel/camel-lock-client.c:214
+#, c-format
+msgid "Could not lock '%s': protocol error with lock-helper"
+msgstr "Ðеатрымліваецца заблÑкаваць \"%s\": памылка пратакола з блÑкавальнікам"
+
+#: camel/camel-lock-client.c:204
+#, c-format
+msgid "Could not lock '%s'"
+msgstr "ÐеатрымалаÑÑ Ð·Ð°Ð±Ð»Ñкаваць \"%s\""
+
+#: camel/camel-lock.c:92 camel/camel-lock.c:113
+#, c-format
+msgid "Could not create lock file for %s: %s"
+msgstr "ÐеатрымалаÑÑ Ñтварыць файл блÑÐºÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð´Ð»Ñ %s: %s"
+
+#: camel/camel-lock.c:154
+#, c-format
+msgid "Timed out trying to get lock file on %s. Try again later."
+msgstr ""
+"перавышÑньне чаÑу пад Ñ‡Ð°Ñ Ñпробы заблÑкаваць файл %s. ПаÑпрабуйце ÑÑˆÑ‡Ñ Ñ€Ð°Ð· "
+"пазьней."
+
+#: camel/camel-lock.c:209
+#, c-format
+msgid "Failed to get lock using fcntl(2): %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ lock карыÑтаючыÑÑ fcntl(2): %s"
+
+#: camel/camel-lock.c:272
+#, c-format
+msgid "Failed to get lock using flock(2): %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ lock карыÑтаючыÑÑ flock(2): %s"
+
+#: camel/camel-movemail.c:107
+#, c-format
+msgid "Could not check mail file %s: %s"
+msgstr "ÐеатрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ паштовы файл %s: %s"
+
+#: camel/camel-movemail.c:120
+#, c-format
+msgid "Could not open mail file %s: %s"
+msgstr "Ðемагчыма адчыніць паштовы файл %s: %s"
+
+#: camel/camel-movemail.c:128
+#, c-format
+msgid "Could not open temporary mail file %s: %s"
+msgstr "Ðемагчыма адчыніць чаÑовы паштовы файл %s: %s"
+
+#: camel/camel-movemail.c:157
+#, c-format
+msgid "Failed to store mail in temp file %s: %s"
+msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
+
+#: camel/camel-movemail.c:187
+#, c-format
+msgid "Could not create pipe: %s"
+msgstr "ÐеатрымалаÑÑ Ñтварыць канал: %s"
+
+#: camel/camel-movemail.c:199
+#, c-format
+msgid "Could not fork: %s"
+msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð³Ð°Ð»Ñ–Ð½Ð°Ñ†ÑŒ (fork): %s"
+
+#: camel/camel-movemail.c:237
+#, c-format
+msgid "Movemail program failed: %s"
+msgstr "Збой праграмы перамÑшчÑÐ½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹: %s"
+
+#: camel/camel-movemail.c:238
+msgid "(Unknown error)"
+msgstr "(ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°)"
+
+#: camel/camel-movemail.c:261
+#, c-format
+msgid "Error reading mail file: %s"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð³Ð° файла: %s"
+
+#: camel/camel-movemail.c:272
+#, c-format
+msgid "Error writing mail temp file: %s"
+msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñовага паштовага файла: %s"
+
+#: camel/camel-movemail.c:465 camel/camel-movemail.c:532
+#, c-format
+msgid "Error copying mail temp file: %s"
+msgstr "Памылка капіÑÐ²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñовага паштовага файла: %s"
+
+#: camel/camel-multipart-encrypted.c:229 camel/camel-multipart-encrypted.c:244
+msgid "Failed to decrypt MIME part: protocol error"
+msgstr "Збой пад Ñ‡Ð°Ñ Ð´ÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñткі MIME: памылка пратакола"
+
+#: camel/camel-multipart-encrypted.c:257
+msgid "Failed to decrypt MIME part: invalid structure"
+msgstr "Збой пад Ñ‡Ð°Ñ Ð»ÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñткі MIME: некарÑÐºÑ‚Ð½Ð°Ñ Ñтруктура"
+
+#: camel/camel-multipart-signed.c:673 camel/camel-multipart-signed.c:724
+msgid "parse error"
+msgstr "памылка разбору"
+
+#: camel/camel-provider.c:59
+msgid "Virtual folder email provider"
+msgstr "ПравайдÑÑ€ віртуальных Ñ‚Ñчак Ñлектронае пошты"
+
+#: camel/camel-provider.c:61
+msgid "For reading mail as a query of another set of folders"
+msgstr "Ð”Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ па запыце да іншага збору Ñ‚Ñчак"
+
+#: camel/camel-provider.c:172
+#, c-format
+msgid "Could not load %s: Module loading not supported on this system."
+msgstr ""
+"ÐеатрымалаÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ–Ñ†ÑŒ %s: Загрузка модулÑÑž не падтрымліваецца Ñž гÑтае "
+"ÑÑ‹ÑÑ‚Ñме."
+
+#: camel/camel-provider.c:181
+#, c-format
+msgid "Could not load %s: %s"
+msgstr "Ðемагчыма загрузіць %s: %s"
+
+#: camel/camel-provider.c:189
+#, c-format
+msgid "Could not load %s: No initialization code in module."
+msgstr "Ðемагчыма загрузіць %s: нÑма кода ініцыÑлізацыі Ñž модуле."
+
+#: camel/camel-provider.c:356 camel/camel-session.c:160
+#, c-format
+msgid "No provider available for protocol `%s'"
+msgstr "ПравайдÑÑ€ Ð´Ð»Ñ Ð¿Ñ€Ð°Ñ‚Ð°ÐºÐ¾Ð»Ð° \"%s\" недаÑтупны"
+
+#: camel/camel-sasl-anonymous.c:35
+msgid "Anonymous"
+msgstr "Ðнанімна"
+
+#: camel/camel-sasl-anonymous.c:37
+msgid "This option will connect to the server using an anonymous login."
+msgstr "Будзе адбывацца ананімнае (anonymous) далучÑньне да паÑлужніка"
+
+#: camel/camel-sasl-anonymous.c:112 camel/camel-sasl-plain.c:87
+msgid "Authentication failed."
+msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ Ð½Ðµ адбылаÑÑ."
+
+#: camel/camel-sasl-anonymous.c:121
+#, c-format
+msgid ""
+"Invalid email address trace information:\n"
+"%s"
+msgstr ""
+"ÐерÑчаіÑÐ½Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‚Ñ€Ð°ÑÑыроўкі паштовае адрÑÑÑ‹:\n"
+"%s"
+
+#: camel/camel-sasl-anonymous.c:133
+#, c-format
+msgid ""
+"Invalid opaque trace information:\n"
+"%s"
+msgstr ""
+"ÐерÑчаіÑÐ½Ð°Ñ Ð¹ Ð½ÐµÐ·Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ»Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‚Ñ€Ð°Ñыроўкі:\n"
+"%s"
+
+#: camel/camel-sasl-anonymous.c:145
+#, c-format
+msgid ""
+"Invalid trace information:\n"
+"%s"
+msgstr ""
+"ÐерÑчаіÑÐ½Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‚Ñ€Ð°ÑÑыроўкі:\n"
+"%s"
+
+#: camel/camel-sasl-cram-md5.c:35
+msgid "CRAM-MD5"
+msgstr "CRAM-MD5"
+
+#: camel/camel-sasl-cram-md5.c:37
+msgid ""
+"This option will connect to the server using a secure CRAM-MD5 password, if "
+"the server supports it."
+msgstr ""
+"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ– "
+"пратакола CRAM-MD5, калі паÑлужнік Ñго падтрымлівае."
+
+#: camel/camel-sasl-digest-md5.c:48
+msgid "DIGEST-MD5"
+msgstr "DIGEST-MD5"
+
+#: camel/camel-sasl-digest-md5.c:50
+msgid ""
+"This option will connect to the server using a secure DIGEST-MD5 password, "
+"if the server supports it."
+msgstr ""
+"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем зашыфраванага "
+"Ð¿Ð°Ñ€Ð¾Ð»Ñ DIGEST-MD5, калі паÑлужнік падтрымлівае Ñго."
+
+#: camel/camel-sasl-digest-md5.c:813
+msgid "Server challenge too long (>2048 octets)\n"
+msgstr "Ðдказ паÑлужніка завÑлікі (>2048 актÑтаў)\n"
+
+#: camel/camel-sasl-digest-md5.c:822
+msgid "Server challenge invalid\n"
+msgstr "Ðедапушчальны адказ паÑлужніка\n"
+
+#: camel/camel-sasl-digest-md5.c:828
+msgid "Server challenge contained invalid \"Quality of Protection\" token\n"
+msgstr "Ðдказ паÑлужніка утрымлівае недапушчальны талён \"ЯкаÑьць абароны\"\n"
+
+#: camel/camel-sasl-digest-md5.c:850
+msgid "Server response did not contain authorization data\n"
+msgstr "Ðдказ паÑлужніка Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ даньнÑÑž аўтарызацыі\n"
+
+#: camel/camel-sasl-digest-md5.c:868
+msgid "Server response contained incomplete authorization data\n"
+msgstr "Ðдказ паÑлужніка утрымлівае нÑÐ¿Ð¾ÑžÐ½Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– аўтарызацыі\n"
+
+#: camel/camel-sasl-digest-md5.c:878
+msgid "Server response does not match\n"
+msgstr "Памылковы адказ паÑлужніка\n"
+
+#: camel/camel-sasl-gssapi.c:52
+msgid "GSSAPI"
+msgstr "GSSAPI"
+
+#: camel/camel-sasl-gssapi.c:54
+msgid "This option will connect to the server using Kerberos 5 authentication."
+msgstr "ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем Kerberos 5."
+
+#: camel/camel-sasl-gssapi.c:152
+msgid ""
+"The specified mechanism is not supported by the provided credential, or is "
+"unrecognized by the implementation."
+msgstr ""
+"Пазначаны мÑханізм аўтарызацыі не падтрымліваецца прапанаванымі зьвеÑткамі "
+"Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ–, ці не прызнаны Ñ€ÑалізацыÑй."
+
+#: camel/camel-sasl-gssapi.c:157
+msgid "The provided target_name parameter was ill-formed."
+msgstr "Жаданы парамÑтар target_name мае кепÑкі выглÑд."
+
+#: camel/camel-sasl-gssapi.c:160
+msgid ""
+"The provided target_name parameter contained an invalid or unsupported type "
+"of name."
+msgstr ""
+"Жаданы парамÑтар target_name мане недапушчальны тып назвы, ці гÑÑ‚Ñ‹ тып не "
+"падтрымліваецца"
+
+#: camel/camel-sasl-gssapi.c:164
+msgid ""
+"The input_token contains different channel bindings to those specified via "
+"the input_chan_bindings parameter."
+msgstr ""
+
+#: camel/camel-sasl-gssapi.c:169
+msgid ""
+"The input_token contains an invalid signature, or a signature that could not "
+"be verified."
+msgstr ""
+
+#: camel/camel-sasl-gssapi.c:173
+msgid ""
+"The supplied credentials were not valid for context initiation, or the "
+"credential handle did not reference any credentials."
+msgstr ""
+
+#: camel/camel-sasl-gssapi.c:178
+msgid "The supplied context handle did not refer to a valid context."
+msgstr ""
+
+#: camel/camel-sasl-gssapi.c:181
+msgid "The consistency checks performed on the input_token failed."
+msgstr ""
+
+#: camel/camel-sasl-gssapi.c:184
+msgid "The consistency checks performed on the credential failed."
+msgstr ""
+
+#: camel/camel-sasl-gssapi.c:187
+msgid "The referenced credentials have expired."
+msgstr ""
+
+#: camel/camel-sasl-gssapi.c:193 camel/camel-sasl-gssapi.c:242
+#: camel/camel-sasl-gssapi.c:278 camel/camel-sasl-gssapi.c:293
+#: camel/camel-sasl-kerberos4.c:219
+#: camel/providers/imap/camel-imap-store.c:1236
+msgid "Bad authentication response from server."
+msgstr "КепÑкі адказ на аўтарызацыю з паÑлужніка."
+
+#: camel/camel-sasl-gssapi.c:217
+#, c-format
+msgid "Failed to resolve host `%s': %s"
+msgstr "Збой вызначÑÐ½ÑŒÐ½Ñ Ð²ÑƒÐ·Ð»Ð° \"%s\": %s"
+
+#: camel/camel-sasl-gssapi.c:303
+msgid "Unsupported security layer."
+msgstr "Узровень бÑÑьпекі непадтрымліваецца."
+
+#: camel/camel-sasl-kerberos4.c:41
+msgid "Kerberos 4"
+msgstr "Kerberos 4"
+
+#: camel/camel-sasl-kerberos4.c:43
+msgid "This option will connect to the server using Kerberos 4 authentication."
+msgstr ""
+"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем Ð´Ð»Ñ Ñ–Ð´Ñнтыфікацыі "
+"пратакола Kerberos 4."
+
+#: camel/camel-sasl-kerberos4.c:162
+#, c-format
+msgid ""
+"Could not get Kerberos ticket:\n"
+"%s"
+msgstr ""
+"ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ квіток Kerberos:\n"
+"%s"
+
+#: camel/camel-sasl-login.c:32
+msgid "Login"
+msgstr "Уваход"
+
+#: camel/camel-sasl-login.c:34 camel/camel-sasl-plain.c:34
+msgid "This option will connect to the server using a simple password."
+msgstr ""
+"ДалучÑньне да паÑлужніка будзе адбывацца з выкарыÑтаньнем незашыфраванага "
+"паролÑ."
+
+#: camel/camel-sasl-login.c:127
+msgid "Unknown authentication state."
+msgstr "ÐевÑдомы Ñтан аўтарызацыі."
+
+#: camel/camel-sasl-ntlm.c:31
+msgid "NTLM / SPA"
+msgstr "NTLM / SPA"
+
+#: camel/camel-sasl-ntlm.c:33
+msgid ""
+"This option will connect to a Windows-based server using NTLM / Secure "
+"Password Authentication."
+msgstr ""
+"ДалучÑньне да паÑлужніка заÑнаванага на Windows будзе адбывацца з "
+"выкарыÑтаньнем \"NTLM / Secure Password Authentication\"."
+
+#: camel/camel-sasl-plain.c:32
+msgid "PLAIN"
+msgstr "ЗВЫЧÐЙÐЫ ТЭКСТ"
+
+#: camel/camel-sasl-popb4smtp.c:36
+msgid "POP before SMTP"
+msgstr "POP перад SMTP"
+
+#: camel/camel-sasl-popb4smtp.c:38
+msgid "This option will authorise a POP connection before attempting SMTP"
+msgstr "Будзе адбывацца Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ POP да Ñпробы перадачы пошты па SMTP"
+
+#: camel/camel-sasl-popb4smtp.c:103
+msgid "POP Source URI"
+msgstr "URI крыніцы POP"
+
+#: camel/camel-sasl-popb4smtp.c:106
+msgid "POP Before SMTP auth using an unknown transport"
+msgstr "POP да SMTP аўтарызацыÑ, карыÑтаючыÑÑ Ð½ÐµÐ²Ñдомым транÑпартам"
+
+#: camel/camel-sasl-popb4smtp.c:111
+msgid "POP Before SMTP auth using a non-pop source"
+msgstr "POP да SMTP аўтарызацыÑ, карыÑтаючыÑÑ Ð½Ðµ POP крыніцай"
+
+#: camel/camel-search-private.c:114
+#, c-format
+msgid "Regular expression compilation failed: %s: %s"
+msgstr "Збой кампілÑцыі Ñталага выразу: %s: %s"
+
+#: camel/camel-service.c:271
+#, c-format
+msgid "URL '%s' needs a username component"
+msgstr "URL \"%s\" патрабуе кампанÑнт Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка"
+
+#: camel/camel-service.c:275
+#, c-format
+msgid "URL '%s' needs a host component"
+msgstr "URL \\\"%s\\\" патрабуе кампанÑнт вузла"
+
+#: camel/camel-service.c:279
+#, c-format
+msgid "URL '%s' needs a path component"
+msgstr "URL \\\"%s\\\" патрабуе кампанÑнт шлÑху"
+
+#: camel/camel-service.c:729
+#, c-format
+msgid "Resolving: %s"
+msgstr "ВызначÑньне: %s"
+
+#: camel/camel-service.c:760 camel/camel-service.c:884
+#, c-format
+msgid "Failure in name lookup: %s"
+msgstr "Памылка Ñž вызначÑньні назвы: %s"
+
+#: camel/camel-service.c:781 camel/camel-service.c:905
+#, fuzzy, c-format
+msgid "Host lookup failed: cannot create thread: %s"
+msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€ÑÑÑ‹ вузла не адбылоÑÑ: прычына невÑдома"
+
+#: camel/camel-service.c:794
+#, c-format
+msgid "Host lookup failed: %s: host not found"
+msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€ÑÑÑ‹ вузла не адбылоÑÑ: %s: вузел адÑутнічае"
+
+#: camel/camel-service.c:797
+#, c-format
+msgid "Host lookup failed: %s: unknown reason"
+msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€ÑÑÑ‹ вузла не адбылоÑÑ: %s: прычына невÑдома"
+
+#: camel/camel-service.c:851
+msgid "Resolving address"
+msgstr "ВызначÑньне адрÑÑÑ‹"
+
+#: camel/camel-service.c:920
+msgid "Host lookup failed: host not found"
+msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€ÑÑÑ‹ вузла не адбылоÑÑ: адÑутнічае вузел"
+
+#: camel/camel-service.c:923
+msgid "Host lookup failed: unknown reason"
+msgstr "ВызначÑÐ½ÑŒÐ½Ñ Ð°Ð´Ñ€ÑÑÑ‹ вузла не адбылоÑÑ: прычына невÑдома"
+
+#: camel/camel-session.c:282
+#, c-format
+msgid ""
+"Could not create directory %s:\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць каталёг %s:\n"
+"%s"
+
+#: camel/camel-smime-context.c:104
+#, fuzzy, c-format
+msgid "Enter security pass-phrase for `%s'"
+msgstr "Пазначце пароль Ð´Ð»Ñ %s"
+
+#: camel/camel-smime-context.c:261
+#, fuzzy, c-format
+msgid "Cannot find certificate for '%s'"
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÑˆÑƒÐºÐ°Ñ†ÑŒ ÑÑртыфікат Ð´Ð»Ñ \"%s\"."
+
+#: camel/camel-smime-context.c:267
+#, fuzzy
+msgid "Cannot create CMS message"
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#: camel/camel-smime-context.c:272
+msgid "Cannot create CMS signedData"
+msgstr ""
+
+#: camel/camel-smime-context.c:278
+#, fuzzy
+msgid "Cannot attach CMS signedData"
+msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
+
+#: camel/camel-smime-context.c:285
+#, fuzzy
+msgid "Cannot attach CMS data"
+msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
+
+#: camel/camel-smime-context.c:291
+msgid "Cannot create CMS SignerInfo"
+msgstr ""
+
+#: camel/camel-smime-context.c:297
+msgid "Cannot find cert chain"
+msgstr ""
+
+#: camel/camel-smime-context.c:303
+msgid "Cannot add CMS SigningTime"
+msgstr ""
+
+#: camel/camel-smime-context.c:325 camel/camel-smime-context.c:337
+#, fuzzy, c-format
+msgid "Encryption cert for '%s' does not exist"
+msgstr "СÑртыфікат ÑˆÑ‹Ñ„Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð´Ð»Ñ \"%s\" Ð½Ñ Ñ–Ñнуе."
+
+#: camel/camel-smime-context.c:344
+msgid "Cannot add SMIMEEncKeyPrefs attribute"
+msgstr ""
+
+#: camel/camel-smime-context.c:349
+msgid "Cannot add MS SMIMEEncKeyPrefs attribute"
+msgstr ""
+
+#: camel/camel-smime-context.c:354
+#, fuzzy
+msgid "Cannot add encryption certificate"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: camel/camel-smime-context.c:360
+msgid "Cannot add CMS SignerInfo"
+msgstr ""
+
+#: camel/camel-smime-context.c:430 camel/camel-smime-context.c:877
+#, fuzzy
+msgid "Cannot create encoder context"
+msgstr "Ðеатрымліваецца Ñтварыць кантÑкÑÑ‚ дÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ S/MIME"
+
+#: camel/camel-smime-context.c:436
+#, fuzzy
+msgid "Failed to add data to CMS encoder"
+msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
+
+#: camel/camel-smime-context.c:441 camel/camel-smime-context.c:894
+#, fuzzy
+msgid "Failed to encode data"
+msgstr "Збой аўтарызацыі.\n"
+
+#: camel/camel-smime-context.c:514
+#, fuzzy
+msgid "Unverified"
+msgstr "ÐÑвызначаны"
+
+#: camel/camel-smime-context.c:516
+#, fuzzy
+msgid "Good signature"
+msgstr "РÑдагаваць подпіÑ"
+
+#: camel/camel-smime-context.c:518
+#, fuzzy
+msgid "Bad signature"
+msgstr "РÑдагаваць подпіÑ"
+
+#: camel/camel-smime-context.c:520
+msgid "Content tampered with or altered in transit"
+msgstr ""
+
+#: camel/camel-smime-context.c:522
+#, fuzzy
+msgid "Signing certificate not found"
+msgstr "СамападпіÑаны ÑÑртыфікат у ланцужку"
+
+#: camel/camel-smime-context.c:524
+#, fuzzy
+msgid "Signing certificate not trusted"
+msgstr "СÑртыфікат ненадзейны"
+
+#: camel/camel-smime-context.c:526
+msgid "Signature algorithm unknown"
+msgstr ""
+
+#: camel/camel-smime-context.c:528
+msgid "Signature algorithm unsupported"
+msgstr ""
+
+#: camel/camel-smime-context.c:530
+#, fuzzy
+msgid "Malformed signature"
+msgstr "Захаваць подпіÑ"
+
+#: camel/camel-smime-context.c:532
+#, fuzzy
+msgid "Processing error"
+msgstr "Памылка разбору"
+
+#: camel/camel-smime-context.c:569
+#, fuzzy
+msgid "No signedData in signature"
+msgstr "Дадаць Ð¿Ð¾Ð´Ð¿Ñ–Ñ ÑцÑнара"
+
+#: camel/camel-smime-context.c:576
+msgid "Digests missing from enveloped data"
+msgstr ""
+
+#: camel/camel-smime-context.c:589 camel/camel-smime-context.c:599
+#, fuzzy
+msgid "Cannot calculate digests"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/camel-smime-context.c:604
+#, fuzzy
+msgid "Cannot set message digests"
+msgstr "Ðемагчыма атрымаць паведамленьне %s: %s"
+
+#: camel/camel-smime-context.c:614 camel/camel-smime-context.c:619
+#, fuzzy
+msgid "Certificate import failed"
+msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката памылковы"
+
+#: camel/camel-smime-context.c:628
+msgid "Certificate only message, cannot verify certificates"
+msgstr ""
+
+#: camel/camel-smime-context.c:631
+msgid "Certificate only message, certificates imported and verified"
+msgstr ""
+
+#: camel/camel-smime-context.c:635
+#, fuzzy
+msgid "Cannot find signature digests"
+msgstr "РÑдагаваць подпіÑ"
+
+#: camel/camel-smime-context.c:651
+#, fuzzy, c-format
+msgid "Signer: %s <%s>: %s\n"
+msgstr "ПаÑлужнік: %s, Тып: %s"
+
+#: camel/camel-smime-context.c:752
+#, fuzzy
+msgid "Decoder failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/camel-smime-context.c:804
+#, fuzzy, c-format
+msgid "Cannot find certificate for `%s'"
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÑˆÑƒÐºÐ°Ñ†ÑŒ ÑÑртыфікат Ð´Ð»Ñ \"%s\"."
+
+#: camel/camel-smime-context.c:811
+#, fuzzy
+msgid "Cannot find common bulk encryption algorithm"
+msgstr "Ðеатрымліваецца адшукаць агульны альгарытм."
+
+#. PORT_GetError(); ??
+#: camel/camel-smime-context.c:820
+msgid "Cannot allocate slot for encryption bulk key"
+msgstr ""
+
+#: camel/camel-smime-context.c:831
+#, fuzzy
+msgid "Cannot create CMS Message"
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#: camel/camel-smime-context.c:837
+#, fuzzy
+msgid "Cannot create CMS EnvelopedData"
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#: camel/camel-smime-context.c:843
+#, fuzzy
+msgid "Cannot attach CMS EnvelopedData"
+msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
+
+#: camel/camel-smime-context.c:849
+#, fuzzy
+msgid "Cannot attach CMS data object"
+msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
+
+#: camel/camel-smime-context.c:858
+#, fuzzy
+msgid "Cannot create CMS RecipientInfo"
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#: camel/camel-smime-context.c:863
+msgid "Cannot add CMS RecipientInfo"
+msgstr ""
+
+#: camel/camel-smime-context.c:888
+#, fuzzy
+msgid "Failed to add data to encoder"
+msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка LDAP"
+
+#: camel/camel-smime-context.c:975
+#, c-format
+msgid "Decoder failed, error %d"
+msgstr ""
+
+#: camel/camel-smime-context.c:982
+msgid "S/MIME Decrypt: No encrypted content found"
+msgstr ""
+
+#: camel/camel-smime-context.c:1009
+#, fuzzy
+msgid "import keys: unimplemented"
+msgstr "Каманда не реалізавана"
+
+#: camel/camel-smime-context.c:1017
+msgid "export keys: unimplemented"
+msgstr ""
+
+#: camel/camel-store.c:213
+msgid "Cannot get folder: Invalid operation on this store"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ñž гÑтым Ñховішчы"
+
+#: camel/camel-store.c:243
+#, fuzzy, c-format
+msgid "Cannot create folder `%s': folder exists"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/camel-store.c:297
+msgid "Cannot create folder: Invalid operation on this store"
+msgstr "ÐеатрымалаÑÑ Ñтварыць Ñ‚Ñчку: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ñž гÑтым Ñховішчы"
+
+#: camel/camel-store.c:325
+#, fuzzy, c-format
+msgid "Cannot create folder: %s: folder exists"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/camel-store.c:389 camel/camel-vee-store.c:351
+#, c-format
+msgid "Cannot delete folder: %s: Invalid operation"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/camel-store.c:439 camel/camel-vee-store.c:388
+#: camel/providers/local/camel-maildir-store.c:232
+#, c-format
+msgid "Cannot rename folder: %s: Invalid operation"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/camel-store.c:777
+msgid "Trash"
+msgstr "Сьметніца"
+
+#: camel/camel-store.c:779 mail/em-filter-i18n.h:35
+#: mail/mail-config.glade.h:95 ui/evolution-mail-message.xml.h:48
+#, fuzzy
+msgid "Junk"
+msgstr "ЧÑрвень"
+
+#: camel/camel-tcp-stream-openssl.c:568
+msgid "Unable to get issuer's certificate"
+msgstr "Ðемагчыма атрымаць ÑÑртыфікат выдаўца"
+
+#: camel/camel-tcp-stream-openssl.c:570
+msgid "Unable to get Certificate Revocation List"
+msgstr "Ðеатрымліваецца атрымаць ÑÑŒÐ¿Ñ–Ñ Ð°Ð½ÑƒÐ»Ñваных ÑÑртыфікатаў"
+
+#: camel/camel-tcp-stream-openssl.c:572
+msgid "Unable to decrypt certificate signature"
+msgstr "Ðемагчыма дÑкадаваць Ð¿Ð¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката"
+
+#: camel/camel-tcp-stream-openssl.c:574
+msgid "Unable to decrypt Certificate Revocation List signature"
+msgstr "Ðеатрымліваецца дÑкадаваць Ð¿Ð¾Ð´Ð¿Ñ–Ñ ÑьпіÑу анулÑваных ÑÑртыфікатаў"
+
+#: camel/camel-tcp-stream-openssl.c:576
+msgid "Unable to decode issuer's public key"
+msgstr "Ðемагчыма дÑкадаваць публічны ключ выдаўца"
+
+#: camel/camel-tcp-stream-openssl.c:578
+msgid "Certificate signature failure"
+msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката памылковы"
+
+#: camel/camel-tcp-stream-openssl.c:580
+msgid "Certificate Revocation List signature failure"
+msgstr "Памылка у подпіÑе ÑьпіÑа анулÑваных ÑÑртыфікатаў"
+
+#: camel/camel-tcp-stream-openssl.c:582
+msgid "Certificate not yet valid"
+msgstr "СÑртыфікат ÑÑˆÑ‡Ñ Ð½Ðµ зацьверджаны"
+
+#: camel/camel-tcp-stream-openssl.c:584
+msgid "Certificate has expired"
+msgstr "СÑртыфікат Ð½Ñ Ð¼Ð°Ðµ Ñілы"
+
+#: camel/camel-tcp-stream-openssl.c:586
+msgid "CRL not yet valid"
+msgstr "CRL ÑÑˆÑ‡Ñ Ð½Ðµ зацьверджаны"
+
+#: camel/camel-tcp-stream-openssl.c:588
+msgid "CRL has expired"
+msgstr "CRL згубіў Ñілу"
+
+#: camel/camel-tcp-stream-openssl.c:593
+msgid "Error in CRL"
+msgstr "Памылка у CRL"
+
+#: camel/camel-tcp-stream-openssl.c:595
+msgid "Out of memory"
+msgstr "Ðе хапае памÑці"
+
+#: camel/camel-tcp-stream-openssl.c:597
+msgid "Zero-depth self-signed certificate"
+msgstr "СамападпіÑаны ÑÑртыфікат нулÑвой глыбіні"
+
+#: camel/camel-tcp-stream-openssl.c:599
+msgid "Self-signed certificate in chain"
+msgstr "СамападпіÑаны ÑÑртыфікат у ланцужку"
+
+#: camel/camel-tcp-stream-openssl.c:601
+msgid "Unable to get issuer's certificate locally"
+msgstr "Ðемагчыма атрымаць ÑÑртыфікат выдаўца Ñž адлучаным Ñтане"
+
+#: camel/camel-tcp-stream-openssl.c:603
+msgid "Unable to verify leaf signature"
+msgstr "Ðемагчыма праверыць подпіÑ"
+
+#: camel/camel-tcp-stream-openssl.c:605
+msgid "Certificate chain too long"
+msgstr "Ланцужок ÑÑртыфіката завÑлікі"
+
+#: camel/camel-tcp-stream-openssl.c:607
+msgid "Certificate Revoked"
+msgstr "СÑртыфікат анулÑваны"
+
+#: camel/camel-tcp-stream-openssl.c:609
+msgid "Invalid Certificate Authority (CA)"
+msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
+
+#: camel/camel-tcp-stream-openssl.c:611
+msgid "Path length exceeded"
+msgstr "Перавышана Ð´Ð°ÑžÐ¶Ñ‹Ð½Ñ ÑˆÐ»Ñху"
+
+#: camel/camel-tcp-stream-openssl.c:613
+msgid "Invalid purpose"
+msgstr "ÐŸÐ°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ Ð¼Ñта"
+
+#: camel/camel-tcp-stream-openssl.c:615
+msgid "Certificate untrusted"
+msgstr "СÑртыфікат ненадзейны"
+
+#: camel/camel-tcp-stream-openssl.c:617
+msgid "Certificate rejected"
+msgstr "СÑртыфікат адвергнуты"
+
+#: camel/camel-tcp-stream-openssl.c:620
+msgid "Subject/Issuer mismatch"
+msgstr "ÐеÑупадзеньне ТÑма/Выдавец"
+
+#: camel/camel-tcp-stream-openssl.c:622
+msgid "AKID/SKID mismatch"
+msgstr "ÐеÑупадзеньне AKID/SKID"
+
+#: camel/camel-tcp-stream-openssl.c:624
+msgid "AKID/Issuer serial mismatch"
+msgstr "ПаÑьлÑдоўнае неÑупадзеньне AKID/Выдавец"
+
+#: camel/camel-tcp-stream-openssl.c:626
+msgid "Key usage does not support certificate signing"
+msgstr "ВыкарыÑтаньне ключа не падтрымлівае Ð¿Ð¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката"
+
+#: camel/camel-tcp-stream-openssl.c:629
+msgid "Error in application verification"
+msgstr "Памылка Ñž даÑтаÑаваньні праверкі ÑапраўднаÑьці"
+
+#: camel/camel-tcp-stream-openssl.c:696 camel/camel-tcp-stream-ssl.c:826
+#, c-format
+msgid ""
+"Issuer: %s\n"
+"Subject: %s\n"
+"Fingerprint: %s\n"
+"Signature: %s"
+msgstr ""
+"Выдавец: %s\n"
+"ТÑма: %s\n"
+"Ðдбітак пальца: %s\n"
+"ПодпіÑ: %s"
+
+#: camel/camel-tcp-stream-openssl.c:702 camel/camel-tcp-stream-ssl.c:832
+msgid "GOOD"
+msgstr "ДОБРÐ"
+
+#: camel/camel-tcp-stream-openssl.c:702 camel/camel-tcp-stream-ssl.c:832
+msgid "BAD"
+msgstr "КЕПСКÐ"
+
+#: camel/camel-tcp-stream-openssl.c:704
+#, c-format
+msgid ""
+"Bad certificate from %s:\n"
+"\n"
+"%s\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to accept anyway?"
+msgstr ""
+"ДрÑнны ÑÑртыфікат ад %s:\n"
+"\n"
+"%s\n"
+"\n"
+"%s\n"
+"\n"
+"УÑёроўна жадаеце прынÑць ?"
+
+#. construct our user prompt
+#: camel/camel-tcp-stream-ssl.c:836
+#, c-format
+msgid ""
+"SSL Certificate check for %s:\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to accept?"
+msgstr ""
+"СÑртыфікат SSL правераны Ð´Ð»Ñ %s:\n"
+"\n"
+"%s\n"
+"\n"
+"Жадаеце прынÑць?"
+
+#: camel/camel-tcp-stream-ssl.c:880
+#, c-format
+msgid ""
+"Certificate problem: %s\n"
+"Issuer: %s"
+msgstr ""
+"Праблема з ÑÑртыфікатам: %s\n"
+"Выдавец: %s"
+
+#: camel/camel-tcp-stream-ssl.c:932
+#, c-format
+msgid ""
+"Bad certificate domain: %s\n"
+"Issuer: %s"
+msgstr ""
+"ДрÑнны дамÑн ÑÑртыфікату: %s\n"
+"Выдавец: %s"
+
+#: camel/camel-tcp-stream-ssl.c:950
+#, c-format
+msgid ""
+"Certificate expired: %s\n"
+"Issuer: %s"
+msgstr ""
+"СÑртыфікат ÑаÑтарÑÑž: %s\n"
+"Выдавец: %s"
+
+#: camel/camel-tcp-stream-ssl.c:967
+#, c-format
+msgid ""
+"Certificate revocation list expired: %s\n"
+"Issuer: %s"
+msgstr ""
+"Ð¡ÑŒÐ¿Ñ–Ñ Ð²ÑÑ€Ñ‚Ð°Ð½ÑŒÐ½Ñ ÑÑртыфіката ÑаÑтарÑÑž: %s\n"
+"Выдавец: %s"
+
+#: camel/camel-url.c:292
+#, c-format
+msgid "Could not parse URL `%s'"
+msgstr "Ðемагчыма разабраць URL \"%s\""
+
+#: camel/camel-vee-folder.c:633
+#, c-format
+msgid "Error storing `%s': %s"
+msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ `%s': %s"
+
+#: camel/camel-vee-folder.c:675
+#, c-format
+msgid "No such message %s in %s"
+msgstr "Паведамленьне %s адÑутнічае Ñž %s"
+
+#: camel/camel-vee-folder.c:841 camel/camel-vee-folder.c:847
+msgid "Cannot copy or move messages into a Virtual Folder"
+msgstr "Ðемагчыма капіÑваць ці перамÑÑьціць паведамленьні у віртуальную Ñ‚Ñчку"
+
+#: camel/camel-vee-store.c:374
+#, c-format
+msgid "Cannot delete folder: %s: No such folder"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ñ‚Ñчка адÑутнічае"
+
+#: camel/camel-vee-store.c:396
+#, c-format
+msgid "Cannot rename folder: %s: No such folder"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ñ‚Ñчка адÑутнічае"
+
+#: camel/camel-vtrash-folder.c:44
+#, fuzzy
+msgid "Cannot copy messages to the Trash folder"
+msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
+
+#: camel/camel-vtrash-folder.c:46
+#, fuzzy
+msgid "Cannot copy messages to the Junk folder"
+msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:53
+#: camel/providers/imap4/camel-imap4-provider.c:35
+msgid "Checking for new mail"
+msgstr "Праверка новае пошты"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:55
+#: camel/providers/imap/camel-imap-provider.c:45
+#: camel/providers/imap4/camel-imap4-provider.c:37
+msgid "Check for new messages in all folders"
+msgstr "Праверка новае пошты ўва ÑžÑÑ–Ñ… Ñ‚Ñчках"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:59
+#, fuzzy
+msgid "Apply filters to new messages in Inbox on this server"
+msgstr ""
+"Ужыць фільтры да уÑÑ–Ñ… новых паведамленьнÑÑž у Ñ‚Ñчцы \"ÐтрыманыÑ\" (INBOX) на "
+"гÑтым паÑлужніку"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:61
+#: camel/providers/imap/camel-imap-provider.c:66
+#, fuzzy
+msgid "Check new messages for Junk contents"
+msgstr "Праверка новае пошты ўва ÑžÑÑ–Ñ… Ñ‚Ñчках"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:63
+#: camel/providers/imap/camel-imap-provider.c:68
+#, fuzzy
+msgid "Only check for Junk messages in the INBOX folder"
+msgstr "Праверка новае пошты ўва ÑžÑÑ–Ñ… Ñ‚Ñчках"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:65
+#: camel/providers/imap/camel-imap-provider.c:70
+#, fuzzy
+msgid "Automatically synchronize remote mail locally"
+msgstr "Ðўтаматычна правÑраць пошту кожныÑ"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:69
+#, fuzzy
+msgid "Address Book and Calendar"
+msgstr "Кніга адрÑÑаў"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:72
+msgid "Post Office Agent:"
+msgstr ""
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:75
+msgid "Post Office Agent SOAP Port:"
+msgstr ""
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:78
+#, fuzzy
+msgid "Use Secure Connection (SSL)"
+msgstr "_ВыкарыÑтоўваць злучÑньне праз SSL:"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:92
+msgid "Novell GroupWise"
+msgstr ""
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:94
+msgid "For accessing Novell Groupwise servers"
+msgstr ""
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:109
+#: camel/providers/imap/camel-imap-provider.c:93
+#: camel/providers/imap4/camel-imap4-provider.c:70
+#: camel/providers/imapp/camel-imapp-provider.c:65
+#: camel/providers/nntp/camel-nntp-provider.c:71
+#: camel/providers/pop3/camel-pop3-provider.c:71 mail/mail-config.glade.h:108
+msgid "Password"
+msgstr "Пароль"
+
+#: camel/providers/groupwise/camel-groupwise-provider.c:111
+#: camel/providers/imap/camel-imap-provider.c:95
+#: camel/providers/imapp/camel-imapp-provider.c:67
+msgid "This option will connect to the IMAP server using a plaintext password."
+msgstr ""
+"ДалучÑньне да IMAP паÑлужніка будзе адбывацца з выкарыÑтаньнем "
+"незашыфраванага паролÑ."
+
+#: camel/providers/groupwise/camel-gw-listener.c:332
+#: camel/providers/groupwise/camel-gw-listener.c:362
+#, fuzzy
+msgid "Checklist"
+msgstr "ГуÑÑ‚Ð°Ñ Ð´Ñ‹Ð¼ÐºÐ°"
+
+#: camel/providers/imap/camel-imap-command.c:218
+#: camel/providers/imap/camel-imap-command.c:257
+#: camel/providers/imap/camel-imap-command.c:447
+#: camel/providers/imap/camel-imap-store.c:3191
+msgid "Operation cancelled"
+msgstr "ДзеÑньне адмененае"
+
+#: camel/providers/imap/camel-imap-command.c:302
+#: camel/providers/imap/camel-imap-store.c:3194
+#, c-format
+msgid "Server unexpectedly disconnected: %s"
+msgstr "ПаÑлужнік нечакана адключыўÑÑ: %s"
+
+#: camel/providers/imap/camel-imap-command.c:303
+#: camel/providers/imap/camel-imap-command.c:400
+#: camel/providers/imap4/camel-imap4-store.c:283
+#: camel/providers/pop3/camel-pop3-store.c:543
+#: camel/providers/pop3/camel-pop3-store.c:550
+#: camel/providers/pop3/camel-pop3-store.c:556 shell/e-shell.c:1220
+msgid "Unknown error"
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
+
+#. for imap ALERT codes, account user@host
+#: camel/providers/imap/camel-imap-command.c:320
+#, c-format
+msgid ""
+"Alert from IMAP server %s@%s:\n"
+"%s"
+msgstr ""
+"Сыгнал ад паÑлужніка IMAP %s@%s:\n"
+"%s"
+
+#: camel/providers/imap/camel-imap-command.c:389
+#, c-format
+msgid "Unexpected response from IMAP server: %s"
+msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
+
+#: camel/providers/imap/camel-imap-command.c:399
+#, c-format
+msgid "IMAP command failed: %s"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/imap/camel-imap-command.c:457
+msgid "Server response ended too soon."
+msgstr "ЗаўчаÑны канец адказу паÑлужніка."
+
+#: camel/providers/imap/camel-imap-command.c:649
+#, c-format
+msgid "IMAP server response did not contain %s information"
+msgstr "Ðдказ IMAP паÑлужніка Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ інфармацыю пра %s"
+
+#: camel/providers/imap/camel-imap-command.c:685
+#, c-format
+msgid "Unexpected OK response from IMAP server: %s"
+msgstr "Ðечаканы адказ \"Добра\" ад IMAP паÑлужніка: %s"
+
+#: camel/providers/imap/camel-imap-folder.c:226
+#, c-format
+msgid "Could not create directory %s: %s"
+msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
+
+#: camel/providers/imap/camel-imap-folder.c:245
+#, c-format
+msgid "Could not load summary for %s"
+msgstr "Ðемагчыма загрузіць Ð°Ð³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі Ð´Ð»Ñ %s"
+
+#: camel/providers/imap/camel-imap-folder.c:330
+msgid "Folder was destroyed and recreated on server."
+msgstr "ТÑчка была зьнішчана Ñ– нанава Ñтворана на паÑлужніку."
+
+#. Check UIDs and flags of all messages we already know of.
+#: camel/providers/imap/camel-imap-folder.c:573
+msgid "Scanning for changed messages"
+msgstr "Сканаваньне зьмененых паведамленьнÑÑž"
+
+#: camel/providers/imap/camel-imap-folder.c:1938
+#, c-format
+msgid "Unable to retrieve message: %s"
+msgstr "Ðемагчыма арымаць паведамленьне: %s"
+
+#: camel/providers/imap/camel-imap-folder.c:1975
+#, c-format
+msgid ""
+"Cannot get message: %s\n"
+" %s"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s\n"
+" %s"
+
+#: camel/providers/imap/camel-imap-folder.c:1975
+#: camel/providers/local/camel-maildir-folder.c:244
+#: camel/providers/local/camel-mbox-folder.c:418
+#: camel/providers/local/camel-mh-folder.c:202
+msgid "No such message"
+msgstr "ÐÑма гÑткага паведамленьнÑ"
+
+#: camel/providers/imap/camel-imap-folder.c:2017
+#: camel/providers/imap/camel-imap-folder.c:2620
+#: camel/providers/nntp/camel-nntp-folder.c:220
+msgid "This message is not currently available"
+msgstr "ГÑтае паведамленьне Ñž бÑгучы момант недаÑтупна"
+
+#: camel/providers/imap/camel-imap-folder.c:2283
+#: camel/providers/imap/camel-imap-folder.c:2353
+msgid "Fetching summary information for new messages"
+msgstr "Ðтрыманьне агульнае інфармацыі Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… паведамленьнÑÑž"
+
+#: camel/providers/imap/camel-imap-folder.c:2461
+#, c-format
+msgid "Incomplete server response: no information provided for message %d"
+msgstr ""
+
+#: camel/providers/imap/camel-imap-folder.c:2469
+#, c-format
+msgid "Incomplete server response: no UID provided for message %d"
+msgstr ""
+
+#: camel/providers/imap/camel-imap-folder.c:2482
+#, c-format
+msgid ""
+"Unexpected server response: Identical UIDs provided for messages %d and %d"
+msgstr ""
+
+#: camel/providers/imap/camel-imap-folder.c:2658
+msgid "Could not find message body in FETCH response."
+msgstr "Ðемагчыма адшукаць цела Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž адказе FETCH."
+
+#: camel/providers/imap/camel-imap-message-cache.c:155
+#, c-format
+msgid "Could not open cache directory: %s"
+msgstr "Ðемагчыма адкрыць каталёг кÑша: %s"
+
+#: camel/providers/imap/camel-imap-message-cache.c:252
+#: camel/providers/imap/camel-imap-message-cache.c:309
+#: camel/providers/imap/camel-imap-message-cache.c:340
+#: camel/providers/imap/camel-imap-message-cache.c:372
+#, c-format
+msgid "Failed to cache message %s: %s"
+msgstr "Збой кÑÑˆÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %s: %s"
+
+#: camel/providers/imap/camel-imap-message-cache.c:417
+#, c-format
+msgid "Failed to cache %s: %s"
+msgstr "Збой у кÑшы %s: %s"
+
+#: camel/providers/imap/camel-imap-provider.c:43
+#, fuzzy
+msgid "Checking for New Mail"
+msgstr "Праверка новае пошты"
+
+#: camel/providers/imap/camel-imap-provider.c:48
+#, fuzzy
+msgid "Connection to Server"
+msgstr "ДалучÑньне да паÑлужніка..."
+
+#: camel/providers/imap/camel-imap-provider.c:50
+#, fuzzy
+msgid "Use custom command to connect to server"
+msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка LDAP"
+
+#: camel/providers/imap/camel-imap-provider.c:52
+#, fuzzy
+msgid "Command:"
+msgstr "ПрадпрыемÑтва"
+
+#: camel/providers/imap/camel-imap-provider.c:55
+#: camel/providers/imap4/camel-imap4-provider.c:40
+#: camel/providers/nntp/camel-nntp-provider.c:41
+msgid "Folders"
+msgstr "ТÑчкі"
+
+#: camel/providers/imap/camel-imap-provider.c:57
+#: camel/providers/imap4/camel-imap4-provider.c:42
+msgid "Show only subscribed folders"
+msgstr "Паказываць толькі Ð·Ð°Ð¿Ñ‹Ñ‚Ð°Ð½Ñ‹Ñ Ñ‚Ñчкі"
+
+#: camel/providers/imap/camel-imap-provider.c:59
+#: camel/providers/imap4/camel-imap4-provider.c:44
+msgid "Override server-supplied folder namespace"
+msgstr "Перавызначыць прапанаваную паÑлужнікам праÑтору назваў Ð´Ð»Ñ Ñ‚Ñчак"
+
+#: camel/providers/imap/camel-imap-provider.c:61
+#: camel/providers/imap4/camel-imap4-provider.c:46
+msgid "Namespace"
+msgstr "ПраÑтора назваў"
+
+#: camel/providers/imap/camel-imap-provider.c:64
+msgid "Apply filters to new messages in INBOX on this server"
+msgstr ""
+"Ужыць фільтры да уÑÑ–Ñ… новых паведамленьнÑÑž у Ñ‚Ñчцы \"ÐтрыманыÑ\" (INBOX) на "
+"гÑтым паÑлужніку"
+
+#: camel/providers/imap/camel-imap-provider.c:76
+msgid "IMAP"
+msgstr "IMAP"
+
+#: camel/providers/imap/camel-imap-provider.c:78
+msgid "For reading and storing mail on IMAP servers."
+msgstr "Ð”Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ñ– Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ на паÑлужніках IMAP."
+
+#: camel/providers/imap/camel-imap-store.c:424
+#: camel/providers/imap4/camel-imap4-store.c:177
+#, c-format
+msgid "IMAP server %s"
+msgstr "ПаÑлужнік IMAP %s"
+
+#: camel/providers/imap/camel-imap-store.c:426
+#: camel/providers/imap4/camel-imap4-store.c:179
+#, c-format
+msgid "IMAP service for %s on %s"
+msgstr "паÑлуга IMAP Ð´Ð»Ñ %s на %s"
+
+#: camel/providers/imap/camel-imap-store.c:547
+#: camel/providers/imap/camel-imap-store.c:567
+#: camel/providers/imap4/camel-imap4-store.c:214
+#: camel/providers/imap4/camel-imap4-store.c:230
+#: camel/providers/imapp/camel-imapp-store.c:231
+#: camel/providers/nntp/camel-nntp-store.c:209
+#: camel/providers/pop3/camel-pop3-store.c:175
+#: camel/providers/smtp/camel-smtp-transport.c:269
+#: camel/providers/smtp/camel-smtp-transport.c:285
+#, c-format
+msgid "Could not connect to %s (port %d): %s"
+msgstr "Ðемагчыма далучыцца да %s (порт %d): %s"
+
+#: camel/providers/imap/camel-imap-store.c:549
+#: camel/providers/imap4/camel-imap4-store.c:216
+#: camel/providers/pop3/camel-pop3-store.c:177
+#: camel/providers/smtp/camel-smtp-transport.c:271
+#, fuzzy
+msgid "SSL unavailable"
+msgstr "TLS адÑутнічае"
+
+#: camel/providers/imap/camel-imap-store.c:564
+#: camel/providers/imap/camel-imap-store.c:841
+#: camel/providers/imap4/camel-imap4-store.c:227
+#: camel/providers/imapp/camel-imapp-store.c:228
+#: camel/providers/nntp/camel-nntp-store.c:206
+#: camel/providers/nntp/camel-nntp-store.c:224
+#: camel/providers/pop3/camel-pop3-store.c:192
+msgid "Connection cancelled"
+msgstr "ДалучÑньне адмененае"
+
+#: camel/providers/imap/camel-imap-store.c:675
+#: camel/providers/imap/camel-imap-store.c:706
+#: camel/providers/imap4/camel-imap4-store.c:282
+#, c-format
+msgid "Failed to connect to IMAP server %s in secure mode: %s"
+msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка IMAP %s у Ñ€Ñжыме бÑÑьпекі: %s"
+
+#: camel/providers/imap/camel-imap-store.c:676
+#: camel/providers/pop3/camel-pop3-store.c:233
+msgid "SSL/TLS extension not supported."
+msgstr "ПашырÑньне SSL/TLS не падтрымліваецца."
+
+#: camel/providers/imap/camel-imap-store.c:707
+#: camel/providers/pop3/camel-pop3-store.c:274
+msgid "SSL negotiations failed"
+msgstr "Збой ÑƒÐ·Ð³Ð°Ð´Ð½ÐµÐ½ÑŒÐ½Ñ SSL"
+
+#: camel/providers/imap/camel-imap-store.c:844
+#, fuzzy, c-format
+msgid "Could not connect with command \"%s\": %s"
+msgstr "Ðемагчыма далучыцца да %s (порт %d): %s"
+
+#: camel/providers/imap/camel-imap-store.c:1268
+#, c-format
+msgid "IMAP server %s does not support requested authentication type %s"
+msgstr "ПаÑлужнік IMAP %s не падтрымлівае запатрабаваны тып ідÑнтыфікацыі %s"
+
+#: camel/providers/imap/camel-imap-store.c:1278
+#: camel/providers/smtp/camel-smtp-transport.c:486
+#, c-format
+msgid "No support for authentication type %s"
+msgstr "ІдÑÐ½Ñ‚Ñ‹Ñ„Ñ–ÐºÐ°Ñ†Ñ‹Ñ Ñ‚Ñ‹Ð¿Ð° %s не падтрымліваецца"
+
+#: camel/providers/imap/camel-imap-store.c:1301
+#: camel/providers/imapp/camel-imapp-store.c:344
+#, c-format
+msgid "%sPlease enter the IMAP password for %s@%s"
+msgstr "%sКалі лаÑка, увÑдзіце пароль IMAP Ð´Ð»Ñ %s@%s"
+
+#: camel/providers/imap/camel-imap-store.c:1315
+msgid "You didn't enter a password."
+msgstr "Вы не пазначылі пароль."
+
+#: camel/providers/imap/camel-imap-store.c:1344
+#, c-format
+msgid ""
+"Unable to authenticate to IMAP server.\n"
+"%s\n"
+"\n"
+msgstr ""
+"Ðемагчыма аўтарызавацца на паÑлужніку IMAP.\n"
+"%s\n"
+"\n"
+
+#: camel/providers/imap/camel-imap-store.c:1863
+#: camel/providers/imap/camel-imap-store.c:2053
+#, c-format
+msgid "No such folder %s"
+msgstr "ТÑчка %s адÑутнічае "
+
+#: camel/providers/imap/camel-imap-store.c:1881
+#: camel/providers/imap/camel-imap-store.c:2259
+#: camel/providers/imap4/camel-imap4-store.c:764
+#, fuzzy, c-format
+msgid ""
+"The folder name \"%s\" is invalid because it contains the character \"%c\""
+msgstr "Ðазва Ñ‚Ñчкі \"%s\" памылковаÑ, таму што утрымлівае Ñымбаль \"%c\""
+
+#: camel/providers/imap/camel-imap-store.c:1939
+#: camel/providers/imap/camel-imap-store.c:2320
+msgid "The parent folder is not allowed to contain subfolders"
+msgstr "ГÑÑ‚Ð°Ñ Ñ‚Ñчка Ð½Ñ Ð¼Ð¾Ð¶Ð° утрымліваць падтÑчкі"
+
+#: camel/providers/imap/camel-imap-store.c:1994
+#: camel/providers/local/camel-maildir-store.c:139
+#: camel/providers/local/camel-mbox-store.c:212
+#: camel/providers/local/camel-mh-store.c:236
+#, fuzzy, c-format
+msgid "Cannot create folder `%s': folder exists."
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap/camel-imap-store.c:2270
+#, c-format
+msgid "Unknown parent folder: %s"
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð±Ð°Ñ†ÑŒÐºÐ¾ÑžÑÐºÐ°Ñ Ñ‚Ñчка: %s"
+
+#: camel/providers/imap4/camel-imap4-command.c:550
+#: camel/providers/imap4/camel-imap4-command.c:557
+#, fuzzy, c-format
+msgid "Failed sending command to IMAP server %s: %s"
+msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
+
+#: camel/providers/imap4/camel-imap4-command.c:656
+#, fuzzy, c-format
+msgid "Unexpected response from IMAP4 server %s: %s"
+msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
+
+#: camel/providers/imap4/camel-imap4-engine.c:230
+#, fuzzy, c-format
+msgid "Unexpected greeting from IMAP server %s."
+msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
+
+#: camel/providers/imap4/camel-imap4-engine.c:414
+#, fuzzy, c-format
+msgid "Cannot select folder `%s': Invalid mailbox name"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/providers/imap4/camel-imap4-engine.c:420
+#, fuzzy, c-format
+msgid "Cannot select folder `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-engine.c:1401
+#: camel/providers/imap4/camel-imap4-engine.c:1431
+#: camel/providers/imap4/camel-imap4-engine.c:1463
+#: camel/providers/imap4/camel-imap4-engine.c:1505
+#, fuzzy, c-format
+msgid "IMAP4 server %s unexpectedly disconnected: %s"
+msgstr "ПаÑлужнік нечакана адключыўÑÑ: %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:359
+#, fuzzy, c-format
+msgid "Cannot sync flags to folder `%s': Unknown"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:365
+#, fuzzy, c-format
+msgid "Cannot sync flags to folder `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:502
+#, fuzzy, c-format
+msgid "Cannot expunge folder `%s': Unknown"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:507
+#, fuzzy, c-format
+msgid "Cannot expunge folder `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:697
+#, fuzzy, c-format
+msgid "Cannot get message %s from folder `%s': No such message"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
+" %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:702
+#, fuzzy, c-format
+msgid "Cannot get message %s from folder `%s': Bad command"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
+" %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:827
+#, fuzzy, c-format
+msgid "Cannot append message to folder `%s': Unknown error"
+msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі mh: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:856
+#, fuzzy, c-format
+msgid "Cannot append message to folder `%s': Bad command"
+msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі mh: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:935
+#, fuzzy, c-format
+msgid "Cannot move messages from folder `%s' to folder `%s': Unknown"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
+" %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:939
+#, fuzzy, c-format
+msgid "Cannot copy messages from folder `%s' to folder `%s': Unknown"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
+" %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:947
+#, fuzzy, c-format
+msgid "Cannot move messages from folder `%s' to folder `%s': Bad command"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
+" %s"
+
+#: camel/providers/imap4/camel-imap4-folder.c:951
+#, fuzzy, c-format
+msgid "Cannot copy messages from folder `%s' to folder `%s': Bad command"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
+" %s"
+
+#: camel/providers/imap4/camel-imap4-provider.c:53
+#, fuzzy
+msgid "IMAPv4rev1"
+msgstr "IMAPv4 "
+
+#: camel/providers/imap4/camel-imap4-provider.c:55
+#, fuzzy
+msgid "For reading and storing mail on IMAPv4rev1 servers. EXPERIMENTAL !!"
+msgstr "Ð”Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ñ– Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ на паÑлужніках IMAP."
+
+#: camel/providers/imap4/camel-imap4-provider.c:72
+#, fuzzy
+msgid ""
+"This option will connect to the IMAPv4rev1 server using a plaintext password."
+msgstr ""
+"ДалучÑньне да IMAP паÑлужніка будзе адбывацца з выкарыÑтаньнем "
+"незашыфраванага паролÑ."
+
+#: camel/providers/imap4/camel-imap4-store.c:257
+#, fuzzy, c-format
+msgid ""
+"Failed to connect to IMAP server %s in secure mode: Server does not support "
+"STARTTLS"
+msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка IMAP %s у Ñ€Ñжыме бÑÑьпекі: %s"
+
+#: camel/providers/imap4/camel-imap4-store.c:363
+#, fuzzy, c-format
+msgid ""
+"Cannot authenticate to IMAP server %s using the %s authentication mechanism"
+msgstr ""
+"Ðемагчыма далучыцца да паÑлужніка POP %s: Запытаны мÑханізм аўтарызацыі не "
+"падтрымліваецца."
+
+#: camel/providers/imap4/camel-imap4-store.c:408
+#, fuzzy, c-format
+msgid "%sPlease enter the IMAP password for %s on host %s"
+msgstr "%sКалі лаÑка, пазначце пароль SMTP Ð´Ð»Ñ %s@%s"
+
+#: camel/providers/imap4/camel-imap4-store.c:478
+#, fuzzy, c-format
+msgid "Cannot authenticate to IMAP server %s using %s"
+msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
+
+#: camel/providers/imap4/camel-imap4-store.c:701
+#, fuzzy, c-format
+msgid "Cannot get folder `%s' on IMAP server %s: Unknown"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-store.c:815
+#, fuzzy, c-format
+msgid "Cannot create folder `%s': Invalid mailbox name"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/providers/imap4/camel-imap4-store.c:821
+#, fuzzy, c-format
+msgid "Cannot create folder `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-store.c:852
+#, fuzzy, c-format
+msgid "Cannot delete folder `%s': Special folder"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ñ‚Ñчка адÑутнічае"
+
+#: camel/providers/imap4/camel-imap4-store.c:911
+#, fuzzy, c-format
+msgid "Cannot delete folder `%s': Invalid mailbox name"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/providers/imap4/camel-imap4-store.c:916
+#, fuzzy, c-format
+msgid "Cannot delete folder `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/providers/imap4/camel-imap4-store.c:936
+#, fuzzy, c-format
+msgid "Cannot rename folder `%s' to `%s': Special folder"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ñ‚Ñчка адÑутнічае"
+
+#: camel/providers/imap4/camel-imap4-store.c:968
+#, fuzzy, c-format
+msgid "Cannot rename folder `%s' to `%s': Invalid mailbox name"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/providers/imap4/camel-imap4-store.c:973
+#, fuzzy, c-format
+msgid "Cannot rename folder `%s' to `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-store.c:1221
+#, c-format
+msgid "Cannot get %s information for pattern `%s' on IMAP server %s: %s"
+msgstr ""
+
+#: camel/providers/imap4/camel-imap4-store.c:1223
+#, fuzzy
+msgid "Bad command"
+msgstr "ПрадпрыемÑтва"
+
+#: camel/providers/imap4/camel-imap4-store.c:1299
+#, fuzzy, c-format
+msgid "Cannot subscribe to folder `%s': Invalid mailbox name"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/providers/imap4/camel-imap4-store.c:1304
+#, fuzzy, c-format
+msgid "Cannot subscribe to folder `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-store.c:1364
+#, fuzzy, c-format
+msgid "Cannot unsubscribe from folder `%s': Invalid mailbox name"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#: camel/providers/imap4/camel-imap4-store.c:1369
+#, fuzzy, c-format
+msgid "Cannot unsubscribe from folder `%s': Bad command"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/imap4/camel-imap4-utils.c:250
+#, fuzzy, c-format
+msgid "Unexpected token in response from IMAP server %s: "
+msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
+
+#: camel/providers/imap4/camel-imap4-utils.c:273
+#, fuzzy
+msgid "No data"
+msgstr "Заданьні адÑутнічаюць"
+
+#: camel/providers/imap4/camel-imap4-utils.c:456
+#, fuzzy, c-format
+msgid "IMAP server %s unexpectedly disconnected: %s"
+msgstr "ПаÑлужнік нечакана адключыўÑÑ: %s"
+
+#: camel/providers/imapp/camel-imapp-provider.c:39
+#: camel/providers/pop3/camel-pop3-provider.c:38
+msgid "Message storage"
+msgstr "Сховішча паведамленьнÑÑž"
+
+#: camel/providers/imapp/camel-imapp-provider.c:47
+#, fuzzy
+msgid "IMAP+"
+msgstr "IMAP"
+
+#: camel/providers/imapp/camel-imapp-provider.c:49
+msgid ""
+"Experimental IMAP 4(.1) client\n"
+"This is untested and unsupported code, you want to use plain imap instead.\n"
+"\n"
+" !!! DO NOT USE THIS FOR PRODUCTION EMAIL !!!\n"
+msgstr ""
+
+#: camel/providers/imapp/camel-imapp-store.c:328
+#, fuzzy, c-format
+msgid "Could not connect to POP server on %s"
+msgstr "Ðемагчыма далучыцца да паÑлужніка POP %s"
+
+#: camel/providers/local/camel-local-folder.c:179
+#, fuzzy
+msgid "Index message body data"
+msgstr "ДаÑлаць паведамленьне кантактанае аÑобе"
+
+#. $HOME relative path + protocol string
+#: camel/providers/local/camel-local-folder.c:388
+#, c-format
+msgid "~%s (%s)"
+msgstr "~%s (%s)"
+
+#. /var/spool/mail relative path + protocol
+#: camel/providers/local/camel-local-folder.c:392
+#: camel/providers/local/camel-local-folder.c:395
+#, c-format
+msgid "mailbox:%s (%s)"
+msgstr "Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑкрынÑ:%s (%s)"
+
+#. a full path + protocol
+#: camel/providers/local/camel-local-folder.c:399
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: camel/providers/local/camel-local-provider.c:43
+msgid "Use the `.folders' folder summary file (exmh)"
+msgstr "ВыкарыÑтоўваць агульны файл Ñ‚Ñчак `.folders' (exmh)"
+
+#: camel/providers/local/camel-local-provider.c:49
+msgid "MH-format mail directories"
+msgstr "Каталёгі пошты у MH-фармаце"
+
+#: camel/providers/local/camel-local-provider.c:50
+msgid "For storing local mail in MH-like mail directories."
+msgstr "Ð”Ð»Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð»Ð°ÐºÐ°Ð»ÑŒÐ½Ð°Ðµ пошты Ñž паштовых каталёгах тыпа MH."
+
+#: camel/providers/local/camel-local-provider.c:65
+msgid "Local delivery"
+msgstr "Ð›Ð°ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð´Ð°Ñтаўка"
+
+#: camel/providers/local/camel-local-provider.c:66
+msgid ""
+"For retrieving (moving) local mail from standard mbox formated spools into "
+"folders managed by Evolution."
+msgstr ""
+
+#: camel/providers/local/camel-local-provider.c:77
+#: camel/providers/local/camel-local-provider.c:94
+msgid "Apply filters to new messages in INBOX"
+msgstr "Ужыць фільтры да новых паведамленьнÑÑž у Ñ‚Ñчцы \"ÐтрыманыÑ\""
+
+#: camel/providers/local/camel-local-provider.c:83
+msgid "Maildir-format mail directories"
+msgstr "ÐŸÐ°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ ÐºÐ°Ñ‚Ð°Ð»Ñ‘Ð³Ñ– Ñž фармаце Maildir"
+
+#: camel/providers/local/camel-local-provider.c:84
+msgid "For storing local mail in maildir directories."
+msgstr "Ð”Ð»Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð»Ð°ÐºÐ°Ð»ÑŒÐ½Ð°Ðµ пошты Ñž паштовых каталёгах maildir."
+
+#: camel/providers/local/camel-local-provider.c:95
+msgid "Store status headers in Elm/Pine/Mutt format"
+msgstr "Захоўваць загалоўкі Ñтану Ñž фармаце Elm/Pine/Mutt"
+
+#: camel/providers/local/camel-local-provider.c:101
+msgid "Standard Unix mbox spool or directory"
+msgstr "Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð´Ð»Ñ Unix чарга тыпа mbox"
+
+#: camel/providers/local/camel-local-provider.c:102
+msgid ""
+"For reading and storing local mail in external standard mbox spool files.\n"
+"May also be used to read a tree of Elm, Pine, or Mutt style folders."
+msgstr ""
+
+#: camel/providers/local/camel-local-store.c:142
+#: camel/providers/local/camel-local-store.c:253
+#: camel/providers/local/camel-mbox-store.c:355
+#: camel/providers/local/camel-spool-store.c:116
+#, c-format
+msgid "Store root %s is not an absolute path"
+msgstr "ÐдноÑны шлÑÑ… да Ñховішча %s"
+
+#: camel/providers/local/camel-local-store.c:149
+#, c-format
+msgid "Store root %s is not a regular directory"
+msgstr "Сховішча %s не зьÑўлÑецца каталёгам"
+
+#: camel/providers/local/camel-local-store.c:158
+#: camel/providers/local/camel-local-store.c:166
+#: camel/providers/local/camel-local-store.c:264
+#, c-format
+msgid "Cannot get folder: %s: %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/local/camel-local-store.c:178
+msgid "Local stores do not have an inbox"
+msgstr "Лакальнае Ñховішча Ð½Ñ Ð¼Ð°Ðµ Ñ‚Ñчкі \"Ðтрыманае\""
+
+#: camel/providers/local/camel-local-store.c:224
+#, c-format
+msgid "Local mail file %s"
+msgstr "Лакальны файл пошты %s"
+
+#: camel/providers/local/camel-local-store.c:333
+#, c-format
+msgid "Could not rename folder %s to %s: %s"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі %s у %s: %s"
+
+#: camel/providers/local/camel-local-store.c:398
+#, c-format
+msgid "Could not rename '%s': %s"
+msgstr "Ðемагчыма зьмÑніць назву '%s': %s"
+
+#: camel/providers/local/camel-local-store.c:423
+#: camel/providers/local/camel-mbox-store.c:284
+#, c-format
+msgid "Could not delete folder summary file `%s': %s"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ выніковы файл Ñ‚Ñчкі \"%s\": %s"
+
+#: camel/providers/local/camel-local-store.c:433
+#: camel/providers/local/camel-mbox-store.c:296
+#, c-format
+msgid "Could not delete folder index file `%s': %s"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ індÑкÑны файл Ñ‚Ñчкі \"%s\": %s"
+
+#: camel/providers/local/camel-local-store.c:456
+#: camel/providers/local/camel-mbox-store.c:320
+#, fuzzy, c-format
+msgid "Could not delete folder meta file `%s': %s"
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ выніковы файл Ñ‚Ñчкі \"%s\": %s"
+
+#: camel/providers/local/camel-local-summary.c:405
+#, c-format
+msgid "Could not save summary: %s: %s"
+msgstr "Ðемагчыма захаваць вынік: %s: %s"
+
+#: camel/providers/local/camel-local-summary.c:464
+msgid "Unable to add message to summary: unknown reason"
+msgstr "ÐеатрымалаÑÑ Ð´Ð°Ð´Ð°Ñ†ÑŒ паведамленьне да выніку: прычына невÑдома"
+
+#. Inbox is always first
+#: camel/providers/local/camel-maildir-folder.c:74
+#: camel/providers/local/camel-maildir-store.c:232
+#: camel/providers/local/camel-maildir-store.c:248
+#: mail/em-folder-tree-model.c:212 mail/em-folder-tree-model.c:214
+msgid "Inbox"
+msgstr "Ðтрыманае"
+
+#: camel/providers/local/camel-maildir-folder.c:214
+msgid "Maildir append message cancelled"
+msgstr "Даданьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð´Ð° Ñ‚Ñчкі паштовага каталёга адменена"
+
+#: camel/providers/local/camel-maildir-folder.c:217
+#, c-format
+msgid "Cannot append message to maildir folder: %s: %s"
+msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі паштовага каталёга: %s: %s"
+
+#: camel/providers/local/camel-maildir-folder.c:243
+#: camel/providers/local/camel-maildir-folder.c:257
+#: camel/providers/local/camel-maildir-folder.c:266
+#: camel/providers/local/camel-mbox-folder.c:417
+#: camel/providers/local/camel-mbox-folder.c:436
+#: camel/providers/local/camel-mbox-folder.c:467
+#: camel/providers/local/camel-mbox-folder.c:475
+#: camel/providers/local/camel-mh-folder.c:201
+#: camel/providers/local/camel-mh-folder.c:212
+#: camel/providers/local/camel-mh-folder.c:221
+#, c-format
+msgid ""
+"Cannot get message: %s from folder %s\n"
+" %s"
+msgstr ""
+"Ðемагчыма атрымаць паведамленьне: %s з Ñ‚Ñчкі %s\n"
+" %s"
+
+#: camel/providers/local/camel-maildir-folder.c:267
+msgid "Invalid message contents"
+msgstr "ÐерÑчаіÑны зьмеÑÑ‚ паведамленьнÑ"
+
+#: camel/providers/local/camel-maildir-store.c:109
+#: camel/providers/local/camel-mbox-store.c:154
+#: camel/providers/local/camel-mh-store.c:204
+#, fuzzy, c-format
+msgid "Cannot get folder `%s': %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/local/camel-maildir-store.c:113
+#: camel/providers/local/camel-mbox-store.c:162
+#: camel/providers/local/camel-mh-store.c:211
+#, fuzzy, c-format
+msgid "Cannot get folder `%s': folder does not exist."
+msgstr "ТÑчка \"%s\" не Ñ–Ñнуе."
+
+#: camel/providers/local/camel-maildir-store.c:121
+#: camel/providers/local/camel-mbox-store.c:184
+#: camel/providers/local/camel-mbox-store.c:196
+#, fuzzy, c-format
+msgid "Cannot create folder `%s': %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/local/camel-maildir-store.c:136
+#, fuzzy, c-format
+msgid "Cannot get folder `%s': not a maildir directory."
+msgstr "\"%s\" не зьÑўлÑецца паштовым каталёгам."
+
+#: camel/providers/local/camel-maildir-store.c:175
+#: camel/providers/local/camel-maildir-store.c:213
+#: camel/providers/local/camel-mh-store.c:260
+#, c-format
+msgid "Could not delete folder `%s': %s"
+msgstr ""
+"Ðемагчыма выдаліць Ñ‚Ñчку \"%s\":\n"
+"%s"
+
+#: camel/providers/local/camel-maildir-store.c:177
+msgid "not a maildir directory"
+msgstr "не зьÑўлÑецца паштовым каталёгам"
+
+#: camel/providers/local/camel-maildir-store.c:355
+#: camel/providers/local/camel-spool-store.c:284
+#: camel/providers/local/camel-spool-store.c:314
+#, c-format
+msgid "Could not scan folder `%s': %s"
+msgstr "Ðемагчыма Ñканаваць Ñ‚Ñчку `%s': %s"
+
+#: camel/providers/local/camel-maildir-summary.c:419
+#: camel/providers/local/camel-maildir-summary.c:550
+#, c-format
+msgid "Cannot open maildir directory path: %s: %s"
+msgstr "Ðеатрымліваецца адкрыць шлÑÑ… да Ñ‚Ñчкі паштовага каталёга: %s: %s"
+
+#: camel/providers/local/camel-maildir-summary.c:543
+msgid "Checking folder consistency"
+msgstr "Праверка Ð½Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ñ‚Ð°Ð»Ñ‘Ð³Ð°Ñž"
+
+#: camel/providers/local/camel-maildir-summary.c:646
+msgid "Checking for new messages"
+msgstr "Праверыць наÑўнаÑьць новых паведамленьнÑÑž"
+
+#: camel/providers/local/camel-maildir-summary.c:735
+#: camel/providers/local/camel-mbox-summary.c:369
+#: camel/providers/local/camel-mbox-summary.c:542
+#: camel/providers/local/camel-mbox-summary.c:633
+#: camel/providers/local/camel-spool-summary.c:137
+msgid "Storing folder"
+msgstr "Захаваньне Ñ‚Ñчкі"
+
+#: camel/providers/local/camel-mbox-folder.c:225
+#: camel/providers/local/camel-spool-folder.c:148
+#, c-format
+msgid "Cannot create folder lock on %s: %s"
+msgstr "Ðе атрымліваецца заблÑкаваць Ñ‚Ñчку %s: %s"
+
+#: camel/providers/local/camel-mbox-folder.c:284
+#, c-format
+msgid "Cannot open mailbox: %s: %s\n"
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ паштовую Ñкрыню: %s: %s\n"
+
+#: camel/providers/local/camel-mbox-folder.c:344
+msgid "Mail append cancelled"
+msgstr "Даданьне пошты адменена"
+
+#: camel/providers/local/camel-mbox-folder.c:347
+#, c-format
+msgid "Cannot append message to mbox file: %s: %s"
+msgstr "Ðемагчыма далучыць паведамленьне да файла mbox: %s: %s"
+
+#: camel/providers/local/camel-mbox-folder.c:468
+msgid "The folder appears to be irrecoverably corrupted."
+msgstr "Магчыма Ñ‚Ñчка ÑапÑавана й Ð½Ñ Ð¼Ð¾Ð¶Ð° быць адноўлена."
+
+#: camel/providers/local/camel-mbox-folder.c:476
+#: camel/providers/local/camel-mh-folder.c:222
+#, fuzzy
+msgid "Message construction failed."
+msgstr "Збой у канÑтрукцыі паведамленьнÑ: Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑÐºÑ€Ñ‹Ð½Ñ Ð¿Ð°ÑˆÐºÐ¾Ð´Ð¶Ð°Ð½Ð°?"
+
+#: camel/providers/local/camel-mbox-store.c:176
+#: camel/providers/local/camel-mbox-store.c:361
+#, fuzzy
+msgid "Cannot create a folder by this name."
+msgstr "Ðемагчыма Ñтварыць Ñ‚Ñчку з гÑткай назвай"
+
+#: camel/providers/local/camel-mbox-store.c:206
+#, fuzzy, c-format
+msgid "Cannot get folder `%s': not a regular file."
+msgstr "Ðемагчыма уклаÑьці файл %s: не зьÑўлÑецца Ñталым файлам"
+
+#: camel/providers/local/camel-mbox-store.c:236
+#: camel/providers/local/camel-mbox-store.c:247
+#: camel/providers/local/camel-mbox-store.c:270
+#, c-format
+msgid ""
+"Could not delete folder `%s':\n"
+"%s"
+msgstr ""
+"Ðемагчыма выдаліць Ñ‚Ñчку \"%s\":\n"
+"%s"
+
+#: camel/providers/local/camel-mbox-store.c:255
+#, c-format
+msgid "`%s' is not a regular file."
+msgstr "%s не зьÑўлÑецца звычайным файлам."
+
+#: camel/providers/local/camel-mbox-store.c:262
+#, c-format
+msgid "Folder `%s' is not empty. Not deleted."
+msgstr "ТÑчка \"%s\" не пуÑтаÑ. Ðе выдалена."
+
+#: camel/providers/local/camel-mbox-store.c:374
+#, fuzzy, c-format
+msgid "Cannot create directory `%s': %s."
+msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
+
+#: camel/providers/local/camel-mbox-store.c:388
+#, fuzzy, c-format
+msgid "Cannot create folder: %s: %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/local/camel-mbox-store.c:390
+#, fuzzy
+msgid "Folder already exists"
+msgstr "Ід карткі ужо Ñ–Ñнуе"
+
+#: camel/providers/local/camel-mbox-store.c:472
+#, fuzzy
+msgid "The new folder name is illegal."
+msgstr "ÐŸÐ°Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° Ñ‚Ñчкі недапушчальна: %s"
+
+#: camel/providers/local/camel-mbox-store.c:485
+#, fuzzy, c-format
+msgid "Could not rename `%s': `%s': %s"
+msgstr "Ðемагчыма зьмÑніць назву '%s': %s"
+
+#: camel/providers/local/camel-mbox-store.c:560
+#, fuzzy, c-format
+msgid "Could not rename '%s' to %s: %s"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі %s у %s: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:375
+#, c-format
+msgid "Could not open folder: %s: %s"
+msgstr "Ðемагчыма адкрыць Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:423
+#, c-format
+msgid "Fatal mail parser error near position %ld in folder %s"
+msgstr "Ð¤Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° паштовага аналізатара ÐºÐ°Ð»Ñ Ð¿Ð°Ð·Ñ‹Ñ†Ñ‹Ñ– %ld у Ñ‚Ñчцы %s"
+
+#: camel/providers/local/camel-mbox-summary.c:479
+#, c-format
+msgid "Cannot check folder: %s: %s"
+msgstr "Ðемагчыма праверыць Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:547
+#: camel/providers/local/camel-mbox-summary.c:638
+#: camel/providers/local/camel-spool-summary.c:142
+#, c-format
+msgid "Could not open file: %s: %s"
+msgstr "Ðемагчыма адкрыць файл: %s: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:559
+#: camel/providers/local/camel-spool-summary.c:162
+#, c-format
+msgid "Cannot open temporary mailbox: %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ чаÑовую паштовую Ñкрыню: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:572
+#: camel/providers/local/camel-mbox-summary.c:736
+#, c-format
+msgid "Could not close source folder %s: %s"
+msgstr "Ðемагчыма закрыць Ñ‚Ñчку крыніцы %s: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:581
+#, c-format
+msgid "Could not close temp folder: %s"
+msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:592
+#, c-format
+msgid "Could not rename folder: %s"
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:676
+#: camel/providers/local/camel-mbox-summary.c:684
+#: camel/providers/local/camel-mbox-summary.c:877
+#: camel/providers/local/camel-mbox-summary.c:885
+msgid "Summary and folder mismatch, even after a sync"
+msgstr "ÐеÑупадзеньне Ñ‚Ñчкі Ñ– выніка, нават паÑÑŒÐ»Ñ Ñынхранізацыі"
+
+#: camel/providers/local/camel-mbox-summary.c:811
+#: camel/providers/local/camel-spool-summary.c:334
+#, c-format
+msgid "Unknown error: %s"
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:846
+#, c-format
+msgid "Could not store folder: %s"
+msgstr "Ðемагчыма захаваць Ñ‚Ñчку: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:940
+#: camel/providers/local/camel-mbox-summary.c:966
+#, c-format
+msgid "Error writing to temp mailbox: %s"
+msgstr "Памылка запіÑу у чаÑовую паштовую Ñкрыню: %s"
+
+#: camel/providers/local/camel-mbox-summary.c:957
+#, c-format
+msgid "Writing to tmp mailbox failed: %s: %s"
+msgstr "Збой запіÑу Ñž чаÑовую паштовую Ñкрыню: %s: %s"
+
+#: camel/providers/local/camel-mh-folder.c:174
+msgid "MH append message cancelled"
+msgstr "Даданьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð´Ð° Ñ‚Ñчкі MH адменена"
+
+#: camel/providers/local/camel-mh-folder.c:177
+#, c-format
+msgid "Cannot append message to mh folder: %s: %s"
+msgstr "Ðемагчыма дадаць паведамленьне да Ñ‚Ñчкі mh: %s: %s"
+
+#: camel/providers/local/camel-mh-store.c:219
+#, fuzzy, c-format
+msgid "Could not create folder `%s': %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць Ñ‚Ñчку \"%s\":\n"
+"%s"
+
+#: camel/providers/local/camel-mh-store.c:231
+#, fuzzy, c-format
+msgid "Cannot get folder `%s': not a directory."
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: camel/providers/local/camel-mh-summary.c:244
+#, c-format
+msgid "Cannot open MH directory path: %s: %s"
+msgstr "Ðеатрымліваецца адкрыць MH каталёг: %s: %s"
+
+#: camel/providers/local/camel-spool-store.c:122
+#, c-format
+msgid "Spool `%s' cannot be opened: %s"
+msgstr "Ðеатрымліваецца адкрыць Ñпул \"%s\": %s"
+
+#: camel/providers/local/camel-spool-store.c:134
+#, c-format
+msgid "Spool `%s' is not a regular file or directory"
+msgstr "Спул \"%s\" не зьÑўлÑецца звычайным файлам ці каталёгам"
+
+#: camel/providers/local/camel-spool-store.c:153
+#, c-format
+msgid "Folder `%s/%s' does not exist."
+msgstr "ТÑчка \"%s%s\" не Ñ–Ñнуе."
+
+#: camel/providers/local/camel-spool-store.c:163
+#, c-format
+msgid ""
+"Could not open folder `%s':\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыть Ñ‚Ñчку \"%s\":\n"
+"%s"
+
+#: camel/providers/local/camel-spool-store.c:167
+#, c-format
+msgid "Folder `%s' does not exist."
+msgstr "ТÑчка \"%s\" не Ñ–Ñнуе."
+
+#: camel/providers/local/camel-spool-store.c:172
+#, c-format
+msgid ""
+"Could not create folder `%s':\n"
+"%s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць Ñ‚Ñчку \"%s\":\n"
+"%s"
+
+#: camel/providers/local/camel-spool-store.c:180
+#, c-format
+msgid "`%s' is not a mailbox file."
+msgstr "`%s' не файл паштовае Ñкрыні."
+
+#: camel/providers/local/camel-spool-store.c:197
+msgid "Store does not support an INBOX"
+msgstr "Сховішча не падтрымлівае INBOX"
+
+#: camel/providers/local/camel-spool-store.c:209
+#, c-format
+msgid "Spool mail file %s"
+msgstr "Файл паштовага Ñпула %s"
+
+#: camel/providers/local/camel-spool-store.c:209
+#, c-format
+msgid "Spool folder tree %s"
+msgstr "ДрÑва Ñ‚Ñчкі Ñпула %s"
+
+#: camel/providers/local/camel-spool-store.c:217
+msgid "Spool folders cannot be renamed"
+msgstr "Ðазвы Ñ‚Ñчак Ñпула Ð½Ñ Ð¼Ð¾Ð³ÑƒÑ†ÑŒ зьмененыÑ"
+
+#: camel/providers/local/camel-spool-store.c:225
+msgid "Spool folders cannot be deleted"
+msgstr "ТÑчкі Ñпула Ð½Ñ Ð¼Ð¾Ð³ÑƒÑ†ÑŒ быць выдаленыÑ"
+
+#: camel/providers/local/camel-spool-summary.c:175
+#: camel/providers/local/camel-spool-summary.c:185
+#: camel/providers/local/camel-spool-summary.c:195
+#, c-format
+msgid "Could not sync temporary folder %s: %s"
+msgstr "Ðеатрымліваецца Ñынхранізаваць чаÑовую Ñ‚Ñчку %s: %s"
+
+#: camel/providers/local/camel-spool-summary.c:211
+#, c-format
+msgid "Could not sync spool folder %s: %s"
+msgstr "Ðеатрымліваецца Ñынхранізаваць Ñ‚Ñчку Ñпула: %s: %s"
+
+#: camel/providers/local/camel-spool-summary.c:242
+#: camel/providers/local/camel-spool-summary.c:261
+#: camel/providers/local/camel-spool-summary.c:274
+#, c-format
+msgid ""
+"Could not sync spool folder %s: %s\n"
+"Folder may be corrupt, copy saved in `%s'"
+msgstr ""
+"Ðе магчыма Ñынхранізаваць Ñ‚Ñчку Ñпула %s: %s\n"
+"Магчыма Ñ‚Ñчка пашкоджана, ÐºÐ¾Ð¿Ñ–Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ð° у \"%s\""
+
+#: camel/providers/nntp/camel-nntp-auth.c:44
+#: camel/providers/nntp/camel-nntp-store.c:1126
+#, fuzzy, c-format
+msgid "Please enter the NNTP password for %s@%s"
+msgstr "%sКалі лаÑка, пазначце пароль SMTP Ð´Ð»Ñ %s@%s"
+
+#: camel/providers/nntp/camel-nntp-auth.c:64
+msgid "Server rejected username"
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-auth.c:70
+#, fuzzy
+msgid "Failed to send username to server"
+msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка LDAP"
+
+#: camel/providers/nntp/camel-nntp-auth.c:79
+msgid "Server rejected username/password"
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-folder.c:147
+#: camel/providers/nntp/camel-nntp-folder.c:149
+#: camel/providers/nntp/camel-nntp-folder.c:158
+#: camel/providers/nntp/camel-nntp-folder.c:234
+#: camel/providers/pop3/camel-pop3-folder.c:433
+#: camel/providers/pop3/camel-pop3-folder.c:494
+#: camel/providers/pop3/camel-pop3-folder.c:501
+#: camel/providers/pop3/camel-pop3-folder.c:512
+#, c-format
+msgid "Cannot get message %s: %s"
+msgstr "Ðемагчыма атрымаць паведамленьне %s: %s"
+
+#: camel/providers/nntp/camel-nntp-folder.c:156
+#: camel/providers/nntp/camel-nntp-folder.c:232
+#: camel/providers/nntp/camel-nntp-folder.c:371
+#: camel/providers/pop3/camel-pop3-folder.c:262
+#: camel/providers/pop3/camel-pop3-folder.c:430
+#: camel/providers/pop3/camel-pop3-folder.c:491
+#: camel/providers/pop3/camel-pop3-folder.c:509
+msgid "User cancelled"
+msgstr "КарыÑтальнік адмÑніў"
+
+#: camel/providers/nntp/camel-nntp-folder.c:176
+#: camel/providers/nntp/camel-nntp-folder.c:208
+#, c-format
+msgid "Internal error: uid in invalid format: %s"
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-folder.c:328
+#: camel/providers/nntp/camel-nntp-folder.c:331
+#: camel/providers/nntp/camel-nntp-folder.c:373
+#: camel/providers/nntp/camel-nntp-folder.c:375
+#, fuzzy, c-format
+msgid "Posting failed: %s"
+msgstr "Збой апÑрацыі: %s"
+
+#: camel/providers/nntp/camel-nntp-folder.c:393
+msgid "You cannot post NNTP messages while working offline!"
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-folder.c:404
+#, fuzzy
+msgid "You cannot copy messages from a NNTP folder!"
+msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
+
+#: camel/providers/nntp/camel-nntp-grouplist.c:44
+#, fuzzy
+msgid "Could not get group list from server."
+msgstr "Ðемагчыма атрымаць групу: %s"
+
+#: camel/providers/nntp/camel-nntp-grouplist.c:97
+#: camel/providers/nntp/camel-nntp-grouplist.c:106
+#, fuzzy, c-format
+msgid "Unable to load grouplist file for %s: %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
+" %s"
+
+#: camel/providers/nntp/camel-nntp-grouplist.c:157
+#, fuzzy, c-format
+msgid "Unable to save grouplist file for %s: %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
+" %s"
+
+#: camel/providers/nntp/camel-nntp-provider.c:43
+msgid ""
+"Show folders in short notation (e.g. c.o.linux rather than comp.os.linux)"
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-provider.c:45
+msgid "In the subscription dialog, show relative folder names"
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-provider.c:52
+msgid "USENET news"
+msgstr "Ðавіны USENET"
+
+#: camel/providers/nntp/camel-nntp-provider.c:54
+msgid "This is a provider for reading from and posting toUSENET newsgroups."
+msgstr ""
+"ГÑта правайдÑÑ€ Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ñ– адпраўкі паведамленьнÑÑž у групы навінаў USENET."
+
+#: camel/providers/nntp/camel-nntp-provider.c:73
+msgid ""
+"This option will authenticate with the NNTP server using a plaintext "
+"password."
+msgstr ""
+"ДалучÑньне да паÑлужніка NNTP будзе адбывацца з выкарыÑтаньнем "
+"незашыфраванага паролÑ."
+
+#: camel/providers/nntp/camel-nntp-store.c:118
+#: camel/providers/nntp/camel-nntp-store.c:1233
+#: camel/providers/nntp/camel-nntp-store.c:1331
+#, c-format
+msgid "NNTP Command failed: %s"
+msgstr "Збой каманды NNTP: %s"
+
+#: camel/providers/nntp/camel-nntp-store.c:227
+#, c-format
+msgid "Could not read greeting from %s: %s"
+msgstr "Ðеатрымліваецца прачытаць вітаньне з %s: %s"
+
+#: camel/providers/nntp/camel-nntp-store.c:239
+#, c-format
+msgid "NNTP server %s returned error code %d: %s"
+msgstr "ПаÑлужнік NNTP %s вÑрнуў код памылкі %d: %s"
+
+#: camel/providers/nntp/camel-nntp-store.c:403
+#, c-format
+msgid "USENET News via %s"
+msgstr "Ðавіны USENET праз %s"
+
+#: camel/providers/nntp/camel-nntp-store.c:777
+#, fuzzy, c-format
+msgid ""
+"Error retrieving newsgroups:\n"
+"\n"
+"%s"
+msgstr ""
+"Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž у: %s:\n"
+" %s"
+
+#: camel/providers/nntp/camel-nntp-store.c:872
+msgid ""
+"You cannot subscribe to this newsgroup:\n"
+"\n"
+"No such newsgroup. The selected item is a probably a parent folder."
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-store.c:904
+msgid ""
+"You cannot unsubscribe to this newsgroup:\n"
+"\n"
+"newsgroup does not exist!"
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-store.c:929
+msgid "You cannot create a folder in a News store: subscribe instead."
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-store.c:937
+#, fuzzy
+msgid "You cannot rename a folder in a News store."
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі %s у %s: %s"
+
+#: camel/providers/nntp/camel-nntp-store.c:945
+msgid "You cannot remove a folder in a News store: unsubscribe instead."
+msgstr ""
+
+#: camel/providers/nntp/camel-nntp-store.c:1118
+#, fuzzy
+msgid "Authentication requested but not username provided"
+msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ Ð¿Ð°Ñ‚Ñ€Ð°Ð±ÑƒÐµÑ†Ñ†Ð°"
+
+#: camel/providers/nntp/camel-nntp-store.c:1146
+#, fuzzy, c-format
+msgid "Cannot authenticate to server: %s"
+msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
+
+#: camel/providers/nntp/camel-nntp-store.c:1262
+#, fuzzy
+msgid "Not connected."
+msgstr "Паказаць кантакты"
+
+#: camel/providers/nntp/camel-nntp-store.c:1311
+#, c-format
+msgid "No such folder: %s"
+msgstr "Ðе адшукана Ñ‚Ñчка: %s"
+
+#: camel/providers/nntp/camel-nntp-summary.c:218
+#: camel/providers/nntp/camel-nntp-summary.c:314
+#, c-format
+msgid "%s: Scanning new messages"
+msgstr "%s: Сканаваннье новых паведамленьнÑÑž"
+
+#: camel/providers/nntp/camel-nntp-summary.c:225
+#, fuzzy, c-format
+msgid "Unexpected server response from xover: %s"
+msgstr "ЗаўчаÑнае завÑршÑньне адказу ад паÑлужніка IMAP: %s"
+
+#: camel/providers/nntp/camel-nntp-summary.c:328
+#, fuzzy, c-format
+msgid "Unexpected server response from head: %s"
+msgstr "Ðечаканы адказ ад GnuPG: %s"
+
+#: camel/providers/nntp/camel-nntp-summary.c:368
+msgid "Use cancel"
+msgstr "ÐдмÑніце"
+
+#: camel/providers/nntp/camel-nntp-summary.c:370
+#, c-format
+msgid "Operation failed: %s"
+msgstr "Збой апÑрацыі: %s"
+
+#: camel/providers/pop3/camel-pop3-folder.c:246
+msgid "Retrieving POP summary"
+msgstr "Ðтрыманьне зьвеÑтак POP"
+
+#: camel/providers/pop3/camel-pop3-folder.c:265
+#, c-format
+msgid "Cannot get POP summary: %s"
+msgstr "Ðемагчыма атрымаць зьвеÑткі POP: %s"
+
+#: camel/providers/pop3/camel-pop3-folder.c:308
+msgid "Expunging deleted messages"
+msgstr "Выкіданьне выдаленых паведамленьнÑÑž"
+
+#: camel/providers/pop3/camel-pop3-folder.c:404
+#, c-format
+msgid "No message with uid %s"
+msgstr "ÐÑма Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð· uid %s"
+
+#. Sigh, most of the crap in this function is so that the cancel button
+#. returns the proper exception code. Sigh.
+#: camel/providers/pop3/camel-pop3-folder.c:411
+#, c-format
+msgid "Retrieving POP message %d"
+msgstr "Ðтрыманнье паведамленьнÑÑž %d па POP"
+
+#: camel/providers/pop3/camel-pop3-folder.c:501 composer/e-msg-composer.c:1210
+#: composer/e-msg-composer.c:1231
+msgid "Unknown reason"
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ñ€Ñ‹Ñ‡Ñ‹Ð½Ð°"
+
+#: camel/providers/pop3/camel-pop3-provider.c:40
+msgid "Leave messages on server"
+msgstr "Пакідаць паведамленьні на паÑлужніку"
+
+#: camel/providers/pop3/camel-pop3-provider.c:43
+#, c-format
+msgid "Delete after %s day(s)"
+msgstr "ВыдалÑць праз %s дзён"
+
+#: camel/providers/pop3/camel-pop3-provider.c:46
+msgid "Disable support for all POP3 extensions"
+msgstr ""
+
+#: camel/providers/pop3/camel-pop3-provider.c:54 mail/mail-config.glade.h:107
+msgid "POP"
+msgstr "POP"
+
+#: camel/providers/pop3/camel-pop3-provider.c:56
+msgid "For connecting to and downloading mail from POP servers."
+msgstr "Ð”Ð»Ñ Ð´Ð°Ð»ÑƒÑ‡ÑÐ½ÑŒÐ½Ñ Ñ– Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ з паÑлужнікаў POP"
+
+#: camel/providers/pop3/camel-pop3-provider.c:73
+msgid ""
+"This option will connect to the POP server using a plaintext password. This "
+"is the only option supported by many POP servers."
+msgstr ""
+"ДалучÑньне да POP паÑлужніка будзе адбывацца з выкарыÑтаньнем "
+"незашыфраванага паролÑ. БольшаÑьцю POP паÑлужнікаў падтрымліваецца толькі "
+"гÑÑ‚Ñ‹ варыÑнт."
+
+#: camel/providers/pop3/camel-pop3-provider.c:83
+msgid ""
+"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."
+msgstr ""
+"ДалучÑньне да POP паÑлужніка будзе адбывацца з выкарыÑтаньнем шыфраванага "
+"Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ð° пратоколе APOP. ГÑта можа працаваць не Ð´Ð»Ñ ÑžÑÑ–Ñ… карыÑтальнікаў "
+"нават на паÑлужніках, ÑÐºÑ–Ñ Ð±Ñ‹Ñ†Ñ†Ð°Ð¼ бы падтрымліваюць гÑта."
+
+#: camel/providers/pop3/camel-pop3-store.c:195
+#, c-format
+msgid "Could not connect to POP server %s (port %d): %s"
+msgstr "Ðемагчыма далучыцца да паÑлужніка POP %s (порт %d): %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:214
+#, fuzzy, c-format
+msgid "Failed to read a valid greeting from POP server %s (port %d)"
+msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:232
+#: camel/providers/pop3/camel-pop3-store.c:261
+#: camel/providers/pop3/camel-pop3-store.c:273
+#, c-format
+msgid "Failed to connect to POP server %s in secure mode: %s"
+msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка POP %s у Ñ€Ñжыме бÑÑьпекі: %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:371
+#, c-format
+msgid "Could not connect to POP server %s"
+msgstr "Ðемагчыма далучыцца да паÑлужніка POP %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:412
+#: camel/providers/pop3/camel-pop3-store.c:526
+#, c-format
+msgid ""
+"Unable to connect to POP server %s: No support for requested authentication "
+"mechanism."
+msgstr ""
+"Ðемагчыма далучыцца да паÑлужніка POP %s: Запытаны мÑханізм аўтарызацыі не "
+"падтрымліваецца."
+
+#: camel/providers/pop3/camel-pop3-store.c:428
+#, c-format
+msgid "SASL `%s' Login failed for POP server %s: %s"
+msgstr "SASL `%s' Уваход на паÑлужнік POP неадбыўÑÑ %s: %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:440
+#, c-format
+msgid "Cannot login to POP server %s: SASL Protocol error"
+msgstr "ÐеадбыўÑÑ ÑžÐ²Ð°Ñ…Ð¾Ð´ на паÑлужнік POP %s: памылка пратакола SASL"
+
+#: camel/providers/pop3/camel-pop3-store.c:459
+#, c-format
+msgid "Failed to authenticate on POP server %s: %s"
+msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:485
+#, fuzzy, c-format
+msgid "%sPlease enter the POP password for %s on host %s"
+msgstr "%sКалі лаÑка пазначце пароль POP Ð´Ð»Ñ %s@%s"
+
+#: camel/providers/pop3/camel-pop3-store.c:540
+#: camel/providers/pop3/camel-pop3-store.c:553
+#, c-format
+msgid ""
+"Unable to connect to POP server %s.\n"
+"Error sending password: %s"
+msgstr ""
+"Ðемагчыма далучыцца да паÑлужніка POP %s.\n"
+"Памылка адпраўкі паролÑ: %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:547
+#, fuzzy, c-format
+msgid ""
+"Unable to connect to POP server %s.\n"
+"Error sending username: %s"
+msgstr ""
+"Ðемагчыма далучыцца да паÑлужніка POP %s.\n"
+"Памылка адпраўкі паролÑ: %s"
+
+#: camel/providers/pop3/camel-pop3-store.c:652
+#, c-format
+msgid "No such folder `%s'."
+msgstr "ÐÑма гÑткае Ñ‚Ñчкі \"%s\""
+
+#: camel/providers/sendmail/camel-sendmail-provider.c:36
+#: mail/mail-config.glade.h:132
+msgid "Sendmail"
+msgstr "Sendmail"
+
+#: camel/providers/sendmail/camel-sendmail-provider.c:38
+msgid ""
+"For delivering mail by passing it to the \"sendmail\" program on the local "
+"system."
+msgstr ""
+"Ð”Ð»Ñ Ð´Ð°Ñтаўкі пошты праз перадачу Ñе праграме \"Sendmail\" на лакальнае "
+"ÑÑ‹ÑÑ‚Ñме."
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:113
+msgid "Could not parse recipient list"
+msgstr "Ðеатрымліваецца апрацаваць ÑÑŒÐ¿Ñ–Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð¾ÑžÑ†Ð°Ñž"
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:144
+#, c-format
+msgid "Could not create pipe to sendmail: %s: mail not sent"
+msgstr "ÐеатрымалаÑÑ Ñтварыць канал да Sendmail: %s: пошта не даÑлана"
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:165
+#, c-format
+msgid "Could not fork sendmail: %s: mail not sent"
+msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð³Ð°Ð»Ñ–Ð½Ð°Ñ†ÑŒ Sendmail: %s: пошта не даÑлана"
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:205
+#, c-format
+msgid "Could not send message: %s"
+msgstr "ÐеатрымалаÑÑ Ð´Ð°Ñлаць паведамленьне: %s"
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:233
+#, c-format
+msgid "sendmail exited with signal %s: mail not sent."
+msgstr "Sendmail завершыла працу з ÑыгналÑм %s: пошта не даÑлана."
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:240
+#, c-format
+msgid "Could not execute %s: mail not sent."
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹ÐºÐ°Ð½Ð°Ñ†ÑŒ %s: пошта не даÑлана."
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:245
+#, c-format
+msgid "sendmail exited with status %d: mail not sent."
+msgstr "Sendmail завершыла працу Ñа Ñтанам %d: пошта не даÑлана."
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:259
+msgid "sendmail"
+msgstr "sendmail"
+
+#: camel/providers/sendmail/camel-sendmail-transport.c:261
+msgid "Mail delivery via the sendmail program"
+msgstr "ДаÑтаўка пошты праз праграму sendmail"
+
+#: camel/providers/smtp/camel-smtp-provider.c:37 mail/mail-config.glade.h:122
+msgid "SMTP"
+msgstr "SMTP"
+
+#: camel/providers/smtp/camel-smtp-provider.c:39
+#, fuzzy
+msgid "For delivering mail by connecting to a remote mailhub using SMTP."
+msgstr ""
+"Ð”Ð»Ñ Ð´Ð°Ñтаўкі пошты з дапамогай далучÑÐ½ÑŒÐ½Ñ Ð´Ð° аддаленага паштовага вузла па "
+"пратаколе SMTP.\n"
+
+#: camel/providers/smtp/camel-smtp-transport.c:174
+msgid "Syntax error, command unrecognized"
+msgstr "СынтакÑÑ‹Ñ‡Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°, каманда не раÑпазнана"
+
+#: camel/providers/smtp/camel-smtp-transport.c:176
+msgid "Syntax error in parameters or arguments"
+msgstr "СынтакÑÑ‹Ñ‡Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñž парамÑтрах ці аргумÑнтах"
+
+#: camel/providers/smtp/camel-smtp-transport.c:178
+msgid "Command not implemented"
+msgstr "Каманда не реалізавана"
+
+#: camel/providers/smtp/camel-smtp-transport.c:180
+msgid "Command parameter not implemented"
+msgstr "ПарамÑтар каманды не Ñ€Ñалізаваны"
+
+#: camel/providers/smtp/camel-smtp-transport.c:182
+msgid "System status, or system help reply"
+msgstr "Стан ÑÑ‹ÑÑ‚Ñмы ці адказдаведкі ÑÑ‹ÑÑ‚Ñмы"
+
+#: camel/providers/smtp/camel-smtp-transport.c:184
+msgid "Help message"
+msgstr "Даведачнае паведамленьне"
+
+#: camel/providers/smtp/camel-smtp-transport.c:186
+msgid "Service ready"
+msgstr "ПаÑлуга гатова"
+
+#: camel/providers/smtp/camel-smtp-transport.c:188
+msgid "Service closing transmission channel"
+msgstr "ПаÑлуга зачыніла канал перадачы"
+
+#: camel/providers/smtp/camel-smtp-transport.c:190
+msgid "Service not available, closing transmission channel"
+msgstr "ПаÑлуга недаÑтупна, закрыцьцё канала перадачы"
+
+#: camel/providers/smtp/camel-smtp-transport.c:192
+msgid "Requested mail action okay, completed"
+msgstr "Запытанае паштовае дзеÑньне выканана"
+
+#: camel/providers/smtp/camel-smtp-transport.c:194
+msgid "User not local; will forward to <forward-path>"
+msgstr "Ðе лакальны карыÑтальнік; будзе даÑлана да <шлÑÑ…-адпраўкі>"
+
+#: camel/providers/smtp/camel-smtp-transport.c:196
+msgid "Requested mail action not taken: mailbox unavailable"
+msgstr "Запытанае дзеÑньне з поштай не выканана: Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑÐºÑ€Ñ‹Ð½Ñ Ð½Ðµ даÑтупена"
+
+#: camel/providers/smtp/camel-smtp-transport.c:198
+msgid "Requested action not taken: mailbox unavailable"
+msgstr "Запытанае дзеÑньне не выканана: Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ñ ÑÐºÑ€Ñ‹Ð½Ñ Ð½Ðµ даÑтупена"
+
+#: camel/providers/smtp/camel-smtp-transport.c:200
+msgid "Requested action aborted: error in processing"
+msgstr "Запытанае дзеÑньне адменена: памылка пад Ñ‡Ð°Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ–"
+
+#: camel/providers/smtp/camel-smtp-transport.c:202
+msgid "User not local; please try <forward-path>"
+msgstr "КарыÑтальнік не лакальны; калі лаÑка, паÑпрабуйце <шлÑÑ…-пераÑылкі>"
+
+#: camel/providers/smtp/camel-smtp-transport.c:204
+msgid "Requested action not taken: insufficient system storage"
+msgstr "Запытанае дзеÑньне не выканана: недаÑтаткова ÑÑ‹ÑÑ‚Ñмнага Ñховішча"
+
+#: camel/providers/smtp/camel-smtp-transport.c:206
+msgid "Requested mail action aborted: exceeded storage allocation"
+msgstr "Запытанае дзеÑньне перарванае: вычарпана мейÑца Ñž Ñховішчы"
+
+#: camel/providers/smtp/camel-smtp-transport.c:208
+msgid "Requested action not taken: mailbox name not allowed"
+msgstr "Запытанае дзеÑньне не выканана: назва паштовае Ñкрыні недапушчальна"
+
+#: camel/providers/smtp/camel-smtp-transport.c:210
+msgid "Start mail input; end with <CRLF>.<CRLF>"
+msgstr "Пачатак уводу пошты; заканчÑньне паÑÑŒÐ»Ñ <CRLF>.<CRLF>"
+
+#: camel/providers/smtp/camel-smtp-transport.c:212
+msgid "Transaction failed"
+msgstr "Збой транзакцыі"
+
+#: camel/providers/smtp/camel-smtp-transport.c:216
+msgid "A password transition is needed"
+msgstr "Ðеабходна перадача паролÑ"
+
+#: camel/providers/smtp/camel-smtp-transport.c:218
+msgid "Authentication mechanism is too weak"
+msgstr "ЗаÑлабы мÑханізм аўтарызацыі"
+
+#: camel/providers/smtp/camel-smtp-transport.c:220
+msgid "Encryption required for requested authentication mechanism"
+msgstr "Ð”Ð»Ñ Ð·Ð°Ð¿Ñ‹Ñ‚Ð°Ð½Ð°Ð³Ð° мÑханізма аўтарызацыі патрабуецца шыфраваньне"
+
+#: camel/providers/smtp/camel-smtp-transport.c:222
+msgid "Temporary authentication failure"
+msgstr "ЧаÑовы збой аўтарызацыі"
+
+#: camel/providers/smtp/camel-smtp-transport.c:224
+msgid "Authentication required"
+msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ Ð¿Ð°Ñ‚Ñ€Ð°Ð±ÑƒÐµÑ†Ñ†Ð°"
+
+#: camel/providers/smtp/camel-smtp-transport.c:308
+msgid "Welcome response error"
+msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на вітаньне"
+
+#: camel/providers/smtp/camel-smtp-transport.c:343
+#: camel/providers/smtp/camel-smtp-transport.c:382
+#, c-format
+msgid "Failed to connect to SMTP server %s in secure mode: %s"
+msgstr ""
+"Ðеатрымліваецца далучыцца да паÑлужніка SMTP %s у бÑÑьпечным Ñ€Ñжыме : %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:344
+msgid "server does not appear to support SSL"
+msgstr "здаецца, паÑлужнік не падтрымлівае SSL"
+
+#: camel/providers/smtp/camel-smtp-transport.c:358
+#, fuzzy, c-format
+msgid "STARTTLS command failed: %s"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:373
+#, fuzzy
+msgid "STARTTLS command failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:476
+#, c-format
+msgid "SMTP server %s does not support requested authentication type %s."
+msgstr "ПаÑлужнік SMTP %s не падтрымлівае запатрабаваны тып ідÑнтыфікацыі %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:514
+#, fuzzy, c-format
+msgid "%sPlease enter the SMTP password for %s on host %s"
+msgstr "%sКалі лаÑка, пазначце пароль SMTP Ð´Ð»Ñ %s@%s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:533
+#, c-format
+msgid ""
+"Unable to authenticate to SMTP server.\n"
+"%s\n"
+"\n"
+msgstr ""
+"Ðемагчыма аўтарызавацца на паÑлужніку SMTP.\n"
+"%s\n"
+"\n"
+
+#: camel/providers/smtp/camel-smtp-transport.c:657
+#, c-format
+msgid "SMTP server %s"
+msgstr "SMTP-паÑлужнік %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:659
+#, c-format
+msgid "SMTP mail delivery via %s"
+msgstr "ДаÑтаўка пошты SMTP праз %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:677
+#, fuzzy
+msgid "Cannot send message: service not connected."
+msgstr "Ðемагчыма даÑлаць паведамленьне: Ð½Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹ атрымоўцы."
+
+#: camel/providers/smtp/camel-smtp-transport.c:683
+msgid "Cannot send message: sender address not valid."
+msgstr "Ðемагчыма даÑлаць паведамленьне: Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ Ð°Ð´Ñ€ÑÑа адпраўлÑльніка."
+
+#: camel/providers/smtp/camel-smtp-transport.c:687
+msgid "Sending message"
+msgstr "Ðдпраўка паведамленьнÑ"
+
+#: camel/providers/smtp/camel-smtp-transport.c:702
+msgid "Cannot send message: no recipients defined."
+msgstr "Ðемагчыма даÑлаць паведамленьне: Ð½Ñ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹ атрымоўцы."
+
+#: camel/providers/smtp/camel-smtp-transport.c:713
+msgid "Cannot send message: one or more invalid recipients"
+msgstr ""
+"Ðеатрымліваецца даÑлаць паведамленьне: пазначаны адзін ці некалькі "
+"некарÑктных атрымоўцаў"
+
+#: camel/providers/smtp/camel-smtp-transport.c:885
+msgid "SMTP Greeting"
+msgstr "Вітаньне SMTP"
+
+#: camel/providers/smtp/camel-smtp-transport.c:934
+#, fuzzy, c-format
+msgid "HELO command failed: %s"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:951
+#, fuzzy
+msgid "HELO command failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1017
+msgid "SMTP Authentication"
+msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ SMTP"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1023
+msgid "Error creating SASL authentication object."
+msgstr "Памылка ÑтварÑÐ½ÑŒÐ½Ñ Ð°Ð±'екта аўтарызацыі SASL"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1040
+#: camel/providers/smtp/camel-smtp-transport.c:1051
+#, fuzzy, c-format
+msgid "AUTH command failed: %s"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1057
+#, fuzzy
+msgid "AUTH command failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1119
+msgid "Bad authentication response from server.\n"
+msgstr "Ðдмоўны адказ ідÑнтыфікацыі ад паÑлужніка.\n"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1144
+#, fuzzy, c-format
+msgid "MAIL FROM command failed: %s: mail not sent"
+msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на MAIL FROM: %s: пошта не даÑлана"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1161
+#, fuzzy
+msgid "MAIL FROM command failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1185
+#, fuzzy, c-format
+msgid "RCPT TO command failed: %s: mail not sent"
+msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на RCPT TO: %s: пошта не даÑлана"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1204
+#, c-format
+msgid "RCPT TO <%s> failed"
+msgstr "RCPT TO <%s> Ð½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð»Ð°ÑÑ"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1243
+#: camel/providers/smtp/camel-smtp-transport.c:1301
+#: camel/providers/smtp/camel-smtp-transport.c:1320
+#, fuzzy, c-format
+msgid "DATA command failed: %s: mail not sent"
+msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на DATA: %s: пошта не даÑлана"
+
+#. we should have gotten instructions on how to use the DATA command:
+#. * 354 Enter mail, end with "." on a line by itself
+#.
+#: camel/providers/smtp/camel-smtp-transport.c:1260
+#: camel/providers/smtp/camel-smtp-transport.c:1336
+#, fuzzy
+msgid "DATA command failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1359
+#, fuzzy, c-format
+msgid "RSET command failed: %s"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1375
+#, fuzzy
+msgid "RSET command failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1398
+#, fuzzy, c-format
+msgid "QUIT command failed: %s"
+msgstr "Збой каманды IMAP: %s"
+
+#: camel/providers/smtp/camel-smtp-transport.c:1412
+#, fuzzy
+msgid "QUIT command failed"
+msgstr "Збой каманды IMAP: %s"
+
+#: composer/e-msg-composer-attachment-bar.c:106
+#, c-format
+msgid "%.0fK"
+msgstr "%.0fK"
+
+#: composer/e-msg-composer-attachment-bar.c:109
+#, c-format
+msgid "%.0fM"
+msgstr "%.0fM"
+
+#: composer/e-msg-composer-attachment-bar.c:112
+#, c-format
+msgid "%.0fG"
+msgstr "%.0fG"
+
+#: composer/e-msg-composer-attachment-bar.c:298 mail/em-utils.c:436
+msgid "attachment"
+msgstr "укладаньне"
+
+#: composer/e-msg-composer-attachment-bar.c:454
+msgid "Remove selected items from the attachment list"
+msgstr "Выдаліць Ð²Ñ‹Ð±Ñ€Ð°Ð½Ñ‹Ñ ÑлемÑнты Ñа ÑьпіÑа укладаньнÑÑž"
+
+#: composer/e-msg-composer-attachment-bar.c:494
+msgid "Add attachment..."
+msgstr "Дадаць укладаньне..."
+
+#: composer/e-msg-composer-attachment-bar.c:495
+msgid "Attach a file to the message"
+msgstr "УклаÑьці файл у паведамленьне"
+
+#: composer/e-msg-composer-attachment.c:173
+#: composer/e-msg-composer-attachment.c:189
+#, c-format
+msgid "Cannot attach file %s: %s"
+msgstr "Ðемагчыма ўклаÑьці файл %s: %s"
+
+#: composer/e-msg-composer-attachment.c:181
+#, c-format
+msgid "Cannot attach file %s: not a regular file"
+msgstr "Ðемагчыма уклаÑьці файл %s: не зьÑўлÑецца Ñталым файлам"
+
+#: composer/e-msg-composer-attachment.glade.h:2
+msgid "Attachment Properties"
+msgstr "УлаÑьціваÑьці укладаньнÑ"
+
+#: composer/e-msg-composer-attachment.glade.h:4
+msgid "File name:"
+msgstr "Ðазва файла:"
+
+#: composer/e-msg-composer-attachment.glade.h:5
+msgid "MIME type:"
+msgstr "Тып MIME:"
+
+#: composer/e-msg-composer-attachment.glade.h:6
+#: composer/e-msg-composer-select-file.c:92
+#: composer/e-msg-composer-select-file.c:111
+msgid "Suggest automatic display of attachment"
+msgstr "Прапаноўваць аўтаматычнае адлюÑтраваньне укладаньнÑ"
+
+#: composer/e-msg-composer-hdrs.c:512
+msgid "Posting destination"
+msgstr "МейÑца прызначÑньнÑ"
+
+#: composer/e-msg-composer-hdrs.c:513
+#, fuzzy
+msgid "Choose folders to post the message to."
+msgstr "УклаÑьці файл у паведамленьне"
+
+#: composer/e-msg-composer-hdrs.c:547
+msgid "Click here for the address book"
+msgstr "Клікніце тутака Ð´Ð»Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑƒ кнігі адрÑÑаў"
+
+#.
+#. * Reply-To:
+#. *
+#. * Create this before we call create_from_optionmenu,
+#. * because that causes from_changed to be called, which
+#. * expects the reply_to fields to be initialized.
+#.
+#: composer/e-msg-composer-hdrs.c:577
+msgid "Reply-To:"
+msgstr "Ðдказаць на:"
+
+#.
+#. * From
+#.
+#: composer/e-msg-composer-hdrs.c:583
+msgid "From:"
+msgstr "Ðд каго:"
+
+#.
+#. * Subject
+#.
+#: composer/e-msg-composer-hdrs.c:589
+msgid "Subject:"
+msgstr "ТÑма:"
+
+#: composer/e-msg-composer-hdrs.c:598
+msgid "To:"
+msgstr "Каму:"
+
+#: composer/e-msg-composer-hdrs.c:599
+msgid "Enter the recipients of the message"
+msgstr "Пазначце атрымоўцаў паведамленьнÑ"
+
+#: composer/e-msg-composer-hdrs.c:602
+msgid "Cc:"
+msgstr "КопіÑ:"
+
+#: composer/e-msg-composer-hdrs.c:603
+msgid "Enter the addresses that will receive a carbon copy of the message"
+msgstr "Пазначце атрымоўцаў, ÑÐºÑ–Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°ÑŽÑ†ÑŒ копію паведамленьнÑ"
+
+#: composer/e-msg-composer-hdrs.c:606
+msgid "Bcc:"
+msgstr "Сх. копіÑ:"
+
+#: composer/e-msg-composer-hdrs.c:607
+msgid ""
+"Enter the addresses that will receive a carbon copy of the message without "
+"appearing in the recipient list of the message."
+msgstr ""
+"Пазначце адрÑÑÑ‹ Ñ‚Ñ‹Ñ…, хто атрымае копію паведамленьнÑ, не патрапіўшы Ñž ÑÑŒÐ¿Ñ–Ñ "
+"атрымоўцаў."
+
+#.
+#. * Post-To
+#.
+#: composer/e-msg-composer-hdrs.c:614
+msgid "Post To:"
+msgstr "ДаÑлаць на:"
+
+#: composer/e-msg-composer-hdrs.c:619
+#, fuzzy
+msgid "Click here to select folders to post to"
+msgstr "<клікніце тутака Ð´Ð»Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ Ñ‚Ñчкі>"
+
+#: composer/e-msg-composer-select-file.c:186
+msgid "Attach file(s)"
+msgstr "УклаÑьці файл(Ñ‹)"
+
+#: composer/e-msg-composer.c:704
+#, fuzzy
+msgid ""
+"Cannot sign outgoing message: No signing certificate set for this account"
+msgstr ""
+"ЗаўÑёды падпіÑываць паведамленьні, калі выкарыÑтоўваецца гÑÑ‚Ñ‹ уліковы запіÑ"
+
+#: composer/e-msg-composer.c:711
+#, fuzzy
+msgid ""
+"Cannot encrypt outgoing message: No encryption certificate set for this "
+"account"
+msgstr ""
+"ЗаўÑёды падпіÑываць паведамленьні, калі выкарыÑтоўваецца гÑÑ‚Ñ‹ уліковы запіÑ"
+
+#: composer/e-msg-composer.c:1268
+#, fuzzy
+msgid "Could not open file"
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#: composer/e-msg-composer.c:1276
+msgid "Unable to retrieve message from editor"
+msgstr "Ðеатрымліваецца атрымаць паведамленьне з Ñ€Ñдактара"
+
+#: composer/e-msg-composer.c:1546
+#, fuzzy
+msgid "Untitled Message"
+msgstr "(Паведамленьне бÑз назвы)"
+
+#: composer/e-msg-composer.c:1576
+msgid "Open file"
+msgstr "Ðдкрыцьцё файла"
+
+#: composer/e-msg-composer.c:1983 mail/mail-account-gui.c:1491
+msgid "Autogenerated"
+msgstr "Створана аўтаматычна"
+
+#: composer/e-msg-composer.c:2082
+msgid "Signature:"
+msgstr "ПодпіÑ:"
+
+#: composer/e-msg-composer.c:2283
+#, c-format
+msgid "<b>%d</b> File Attached"
+msgid_plural "<b>%d</b> Files Attached"
+msgstr[0] ""
+msgstr[1] ""
+
+#: composer/e-msg-composer.c:2312
+msgid "Hide _Attachment Bar (drop attachments here)"
+msgstr ""
+
+#: composer/e-msg-composer.c:2315 composer/e-msg-composer.c:3271
+msgid "Show _Attachment Bar (drop attachments here)"
+msgstr ""
+
+#: composer/e-msg-composer.c:2332 composer/e-msg-composer.c:3163
+#: composer/e-msg-composer.c:3164
+msgid "Compose a message"
+msgstr "Стварыць паведамленьне"
+
+#: composer/e-msg-composer.c:2634
+#, fuzzy, c-format
+msgid "Attached message - %s"
+msgstr "ПерадаÑланае паведамленьне - %s"
+
+#. translators, this count will always be >1
+#: composer/e-msg-composer.c:2639 composer/e-msg-composer.c:2783
+#, fuzzy, c-format
+msgid "Attached message"
+msgid_plural "%d attached messages"
+msgstr[0] "УклаÑьці арыгінальнае паведамленьне"
+msgstr[1] "УклаÑьці арыгінальнае паведамленьне"
+
+#: composer/e-msg-composer.c:4341
+msgid ""
+"<b>(The composer contains a non-text message body, which cannot be edited.)"
+"<b>"
+msgstr ""
+"<b>(РÑдактар утрымлівае цÑла Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž фармаце (не Ñ‚ÑкÑьце), Ñкі "
+"нельга Ñ€Ñдагаваць.)<b>"
+
+#. mail-composer:no-attach primary
+#: composer/mail-composer-errors.xml.h:2
+#, fuzzy
+msgid "You cannot attach the file `{0}' to this message."
+msgstr "УклаÑьці файл у паведамленьне"
+
+#. mail-composer:attach-notfile primary
+#: composer/mail-composer-errors.xml.h:6
+msgid "The file `{0}' is not a regular file and cannot be sent in a message."
+msgstr ""
+
+#. mail-composer:attach-directory primary
+#: composer/mail-composer-errors.xml.h:8
+msgid "Directories can not be attached to Messages."
+msgstr ""
+
+#. mail-composer:attach-directory secondary
+#: composer/mail-composer-errors.xml.h:10
+msgid ""
+"To attach the contents of this directory, either attach the files in this "
+"directory individually, or create an archive of the directory and attach it."
+msgstr ""
+
+#. mail-composer:attach-nomessages primary
+#: composer/mail-composer-errors.xml.h:12
+#, fuzzy
+msgid "Could not retrieve messages to attach from {0}."
+msgstr "ÐеатрымалаÑÑ Ñтварыць канал: %s"
+
+#. mail-composer:attach-nomessages secondary
+#. mail-composer:no-sig-file secondary
+#. mail:no-create-tmp-path secondary
+#. mail:no-delete-folder secondary
+#. system:no-save-file secondary
+#. system:no-load-file secondary
+#: composer/mail-composer-errors.xml.h:14
+#: composer/mail-composer-errors.xml.h:42 mail/mail-errors.xml.h:100
+#: mail/mail-errors.xml.h:112 widgets/misc/e-system-errors.xml.h:11
+#: widgets/misc/e-system-errors.xml.h:15
+msgid "Because \"{1}\"."
+msgstr ""
+
+#. mail-composer:recover-autosave title
+#: composer/mail-composer-errors.xml.h:16
+#, fuzzy
+msgid "Unfinished messages found"
+msgstr "ÐаÑтупнае нечытанае паведамленьне"
+
+#. mail-composer:recover-autosave primary
+#: composer/mail-composer-errors.xml.h:18
+#, fuzzy
+msgid "Do you want to recover unfinished messages?"
+msgstr "Жадаеце захаваць зьмены?"
+
+#. mail-composer:recover-autosave secondary
+#: composer/mail-composer-errors.xml.h:20
+msgid ""
+"Evolution quit unexpectedly while you were composing a new message. "
+"Recovering the message will allow you to continue where you left off."
+msgstr ""
+
+#: composer/mail-composer-errors.xml.h:21
+#, fuzzy
+msgid "Don't Recover"
+msgstr "Ðе імпартаваць"
+
+#: composer/mail-composer-errors.xml.h:22
+#, fuzzy
+msgid "Recover"
+msgstr "Выдаліць"
+
+#. mail-composer:no-autosave primary
+#: composer/mail-composer-errors.xml.h:24
+#, fuzzy
+msgid "Could not save to autosave file \"{0}\"."
+msgstr "Ðеатрымліваецца захаваць файл подпіÑа: %s"
+
+#. mail-composer:no-autosave secondary
+#: composer/mail-composer-errors.xml.h:26
+#, fuzzy
+msgid "Error saving to autosave because \"{1}\"."
+msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð»Ñ‹Ñ‡Ð°Ðº."
+
+#. mail-composer:exit-unsaved title
+#: composer/mail-composer-errors.xml.h:28
+msgid "Warning: Modified Message"
+msgstr "Увага: Зьмененае паведамленьне"
+
+#. mail-composer:exit-unsaved primary
+#: composer/mail-composer-errors.xml.h:30
+#, fuzzy
+msgid ""
+"Are you sure you want to discard the message, titled '{0}', you are "
+"composing?"
+msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑтую ÑуÑÑ‚Ñ€Ñчу бÑз назвы?"
+
+#. mail-composer:exit-unsaved secondary
+#: composer/mail-composer-errors.xml.h:32
+msgid ""
+"Closing this composer window will discard the message permanently, unless "
+"you choose to save the message in your Drafts folder. This will allow you to "
+"continue the message at a later date."
+msgstr ""
+
+#: composer/mail-composer-errors.xml.h:34
+#, fuzzy
+msgid "Save Message"
+msgstr "Захаваць паведамлеьне Ñк..."
+
+#. mail-composer:no-build-message primary
+#: composer/mail-composer-errors.xml.h:36
+#, fuzzy
+msgid "Could not create message."
+msgstr "ÐеатрымалаÑÑ Ñтварыць канал: %s"
+
+#. mail-composer:no-build-message secondary
+#: composer/mail-composer-errors.xml.h:38
+msgid "Because \"{0}\", you may need to select different mail options."
+msgstr ""
+
+#. mail-composer:no-sig-file primary
+#: composer/mail-composer-errors.xml.h:40
+#, fuzzy
+msgid "Could not read signature file \"{0}\"."
+msgstr "Ðеатрымліваецца захаваць файл подпіÑа: %s"
+
+#. mail-composer:all-accounts-deleted primary
+#: composer/mail-composer-errors.xml.h:44
+msgid "All accounts have been removed."
+msgstr ""
+
+#. mail-composer:all-accounts-deleted secondary
+#: composer/mail-composer-errors.xml.h:46
+#, fuzzy
+msgid "You need to configure an account before you can compose mail."
+msgstr ""
+"Ð’Ñ‹ муÑіце наладзіць уліковы запіÑ\n"
+"да таго Ñк Ñтварыць паведамленьне."
+
+#. mail-composer:no-address-control primary
+#. mail-composer:no-editor-control primary
+#: composer/mail-composer-errors.xml.h:48
+#: composer/mail-composer-errors.xml.h:52
+#, fuzzy
+msgid "Could not create composer window."
+msgstr "ÐеатрымалаÑÑ Ñтварыць канал: %s"
+
+#. mail-composer:no-address-control secondary
+#: composer/mail-composer-errors.xml.h:50
+#, fuzzy
+msgid "Unable to activate the address selector control."
+msgstr ""
+"Ðемагчыма Ñтварыць акно Ñ€Ñдактара.\n"
+"Ðемагчыма актывізаваць кіраваньне выбарам адрÑÑÑ‹."
+
+#. mail-composer:no-editor-control secondary
+#: composer/mail-composer-errors.xml.h:54
+#, fuzzy
+msgid ""
+"Unable to activate the HTML editor control.\n"
+"\n"
+"Please make sure that you have the correct version of gtkhtml and libgtkhtml "
+"installed."
+msgstr ""
+"Ðемагчыма Ñтварыць акно Ñ€Ñдактара.\n"
+"Ðемагчыма актывізаваць кампанÑнт Ñ€Ñдактара HTML.\n"
+"Калі лаÑка, праверце карÑктнаÑьць уÑталÑванае вÑÑ€ÑÑ‹Ñ–\n"
+"gtkhtml Ñ– libgtkhtml.\n"
+
+#: data/evolution.desktop.in.in.h:1 shell/main.c:503
+msgid "Evolution"
+msgstr "\"ЭвалюцыÑ\""
+
+#: data/evolution.desktop.in.in.h:2
+#, fuzzy
+msgid "The Evolution Groupware Suite"
+msgstr "Збор даÑтаÑаваньнÑÑž Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð°Ð²Ð¾Ð¹ працы \"ЭвалюцыÑ\""
+
+#: data/evolution.keys.in.in.h:1
+msgid "address card"
+msgstr "візытоўка"
+
+#: data/evolution.keys.in.in.h:2
+msgid "calendar information"
+msgstr "Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»Ñндара"
+
+#: designs/OOA/ooa.glade.h:1
+msgid ""
+"<b>Currently, your status is \"Out of the Office\". </b>\n"
+"\n"
+"Would you like to change your status to \"In the Office\"? "
+msgstr ""
+"<b>Зараз, ваш Ñтан пазначаны Ñк \"За межамі офіÑа\". </b>\n"
+"\n"
+"Жадаеце зьмÑніць ваш Ñтан на \"У офіÑе\"? "
+
+#: designs/OOA/ooa.glade.h:4
+msgid "<b>Out of Office Message:</b>"
+msgstr "<b>Паведамленьне, Ð¿Ð°ÐºÑ–Ð´Ð°Ð½ÑŒÐ½Ñ Ð¾Ñ„Ñ–Ñу:</b>"
+
+#: designs/OOA/ooa.glade.h:5
+msgid "<b>Status:</b>"
+msgstr "<b>Стан:</b>"
+
+#: designs/OOA/ooa.glade.h:6
+msgid ""
+"<small>The message specified below will be automatically sent to each person "
+"who sends\n"
+"mail to you while you are out of the office.</small>"
+msgstr ""
+
+#: designs/OOA/ooa.glade.h:8
+msgid "I am currently in the office"
+msgstr "Я зараз у офіÑе"
+
+#: designs/OOA/ooa.glade.h:9
+msgid "I am currently out of the office"
+msgstr "Зараз Ñ Ð¿Ð°-за межамі офіÑа"
+
+#: designs/OOA/ooa.glade.h:10
+msgid "No, Don't Change Status"
+msgstr "Ðе, не зьмÑнÑць Ñтан"
+
+#: designs/OOA/ooa.glade.h:12
+msgid "Out of Office Assistant"
+msgstr "Пакінуў офіÑ"
+
+#: designs/OOA/ooa.glade.h:13
+msgid "Yes, Change Status"
+msgstr "Так, зьмÑніць Ñтан"
+
+#: designs/read_receipts/read.glade.h:1
+msgid " "
+msgstr " "
+
+#: designs/read_receipts/read.glade.h:2
+msgid "<b>Receiving Email</b>"
+msgstr "<b> Ðтрыманьне пошты</b>"
+
+#: designs/read_receipts/read.glade.h:3
+msgid "<b>Sending Email:</b>"
+msgstr "<b> Ðдпраўка пошты</b>"
+
+#: designs/read_receipts/read.glade.h:4
+msgid ""
+"<small>This page allows you to choose if you want to be notified via a read "
+"receipt when a message you\n"
+"sent is read, and to specify what Evolution should do when someone requests "
+"a receipt from you.</small>"
+msgstr ""
+
+#: designs/read_receipts/read.glade.h:6
+msgid "Always send back a read reciept"
+msgstr "ЗаўÑёды даÑылаць падцьверджаньне аб прачытаньні"
+
+#: designs/read_receipts/read.glade.h:7
+msgid "Ask me if I want to send back a read receipt"
+msgstr "Запытацца мÑне ці жадаю Ñ Ð´Ð°Ñлаць падцьверджаньне аб прачытаньні"
+
+#: designs/read_receipts/read.glade.h:8
+msgid "Never send back a read receipt"
+msgstr "Ðіколі не даÑылаць падцьверджаньне аб прачытаньні"
+
+#: designs/read_receipts/read.glade.h:9
+msgid "Read Receipts"
+msgstr "Чытаньне атрыманага"
+
+#: designs/read_receipts/read.glade.h:10
+msgid "Request a read receipt for all messages I send"
+msgstr ""
+"Запытваць падцьверджаньне Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ ÑƒÑÑ–Ñ… паведамленьнÑÑž ÑÐºÑ–Ñ Ñ Ð´Ð°Ñылаю"
+
+#: designs/read_receipts/read.glade.h:11
+msgid "Unless the message is sent to a mailing list, and not to me personally"
+msgstr "Пакуль паведамленьне даÑылаецца у ÑÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі, а не пÑÑ€Ñанальна мне"
+
+#: designs/read_receipts/read.glade.h:12
+msgid ""
+"When you receive an email with a read receipt request, what should Evolution "
+"do?"
+msgstr ""
+"Калі вы атрымалі паведамленьне з падцьверджаньнем Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ð²Ð°ÑˆÐ°Ð³Ð° ліÑта, "
+"што муÑіць рабіць \"ЭвалюцыÑ\"?"
+
+#: e-util/e-dialog-utils.c:265
+msgid ""
+"A file by that name already exists.\n"
+"Overwrite it?"
+msgstr ""
+"Файл з гÑтай назвай ужо Ñ–Ñнуе.\n"
+"ПерапіÑаць?"
+
+#. system:ask-save-file-exists-overwrite title
+#: e-util/e-dialog-utils.c:267 widgets/misc/e-system-errors.xml.h:2
+msgid "Overwrite file?"
+msgstr "ПерапіÑаць файл?"
+
+#: e-util/e-passwords.c:460
+msgid "_Remember this password"
+msgstr "_Запомніць гÑÑ‚Ñ‹ пароль"
+
+#: e-util/e-passwords.c:461
+msgid "_Remember this password for the remainder of this session"
+msgstr "_Запомніць гÑÑ‚Ñ‹ пароль да завÑршÑÐ½ÑŒÐ½Ñ ÑÑанÑа"
+
+#. strptime format of a weekday, a date and a time,
+#. in 12-hour format, without seconds.
+#. strftime format of a weekday, a date and a
+#. time, in 12-hour format, without seconds.
+#: e-util/e-time-utils.c:185 e-util/e-time-utils.c:398
+msgid "%a %m/%d/%Y %I:%M %p"
+msgstr "%a %d/%m/%Y %I:%M %p"
+
+#. strptime format of a weekday, a date and a time,
+#. in 24-hour format, without seconds.
+#. strftime format of a weekday, a date and a
+#. time, in 24-hour format, without seconds.
+#: e-util/e-time-utils.c:190 e-util/e-time-utils.c:389
+msgid "%a %m/%d/%Y %H:%M"
+msgstr "%a %d/%m/%Y %H:%M"
+
+#. strptime format of a weekday, a date and a time,
+#. in 12-hour format, without minutes or seconds.
+#: e-util/e-time-utils.c:195
+msgid "%a %m/%d/%Y %I %p"
+msgstr "%a %d/%m/%Y %I %p"
+
+#. strptime format of a weekday, a date and a time,
+#. in 24-hour format, without minutes or seconds.
+#: e-util/e-time-utils.c:200
+msgid "%a %m/%d/%Y %H"
+msgstr "%a %d/%m/%Y %H"
+
+#. strptime format of a date and a time, in 12-hour format.
+#: e-util/e-time-utils.c:211
+msgid "%m/%d/%Y %I:%M:%S %p"
+msgstr "%d/%m/%Y %I:%M:%S %p"
+
+#. strptime format of a date and a time, in 24-hour format.
+#: e-util/e-time-utils.c:215
+msgid "%m/%d/%Y %H:%M:%S"
+msgstr "%d/%m/%Y %H:%M:%S"
+
+#. strptime format of a date and a time, in 12-hour format,
+#. without seconds.
+#: e-util/e-time-utils.c:220
+msgid "%m/%d/%Y %I:%M %p"
+msgstr "%d/%m/%Y %I:%M %p"
+
+#. strptime format of a date and a time, in 24-hour format,
+#. without seconds.
+#: e-util/e-time-utils.c:225
+msgid "%m/%d/%Y %H:%M"
+msgstr "%d/%m/%Y %H:%M"
+
+#. strptime format of a date and a time, in 12-hour format,
+#. without minutes or seconds.
+#: e-util/e-time-utils.c:230
+msgid "%m/%d/%Y %I %p"
+msgstr "%d/%m/%Y %I %p"
+
+#. strptime format of a date and a time, in 24-hour format,
+#. without minutes or seconds.
+#: e-util/e-time-utils.c:235
+msgid "%m/%d/%Y %H"
+msgstr "%d/%m/%Y %H"
+
+#. strptime format for a time of day, in 12-hour format.
+#. strftime format of a time in 12-hour format.
+#: e-util/e-time-utils.c:339 e-util/e-time-utils.c:438
+msgid "%I:%M:%S %p"
+msgstr "%I:%M:%S %p"
+
+#. strptime format for a time of day, in 24-hour format.
+#. strftime format of a time in 24-hour format.
+#: e-util/e-time-utils.c:343 e-util/e-time-utils.c:430
+msgid "%H:%M:%S"
+msgstr "%H:%M:%S"
+
+#. strptime format for time of day, without seconds,
+#. in 12-hour format.
+#. strftime format of a time in 12-hour format,
+#. without seconds.
+#. This is a strftime() format. %I = hour (1-12), %M = minute, %p = am/pm string.
+#: e-util/e-time-utils.c:348 e-util/e-time-utils.c:435
+#: widgets/misc/e-dateedit.c:1414 widgets/misc/e-dateedit.c:1639
+msgid "%I:%M %p"
+msgstr "%I:%M %p"
+
+#. strptime format for time of day, without seconds 24-hour format.
+#. strftime format of a time in 24-hour format,
+#. without seconds.
+#. This is a strftime() format. %H = hour (0-23), %M = minute.
+#: e-util/e-time-utils.c:352 e-util/e-time-utils.c:427
+#: widgets/misc/e-dateedit.c:1411 widgets/misc/e-dateedit.c:1636
+msgid "%H:%M"
+msgstr "%H:%M"
+
+#. strptime format for hour and AM/PM, 12-hour format.
+#: e-util/e-time-utils.c:356
+msgid "%I %p"
+msgstr "%I %p"
+
+#: filter/filter-datespec.c:73
+#, fuzzy, c-format
+msgid "1 second ago"
+msgid_plural "%d seconds ago"
+msgstr[0] "1 ÑÑкунда таму"
+msgstr[1] "1 ÑÑкунда таму"
+
+#: filter/filter-datespec.c:74
+#, fuzzy, c-format
+msgid "1 minute ago"
+msgid_plural "%d minutes ago"
+msgstr[0] "1 хвіліна таму"
+msgstr[1] "1 хвіліна таму"
+
+#: filter/filter-datespec.c:75
+#, fuzzy, c-format
+msgid "1 hour ago"
+msgid_plural "%d hours ago"
+msgstr[0] "1 гадзіна таму"
+msgstr[1] "1 гадзіна таму"
+
+#: filter/filter-datespec.c:76
+#, fuzzy, c-format
+msgid "1 day ago"
+msgid_plural "%d days ago"
+msgstr[0] "1 дзень таму"
+msgstr[1] "1 дзень таму"
+
+#: filter/filter-datespec.c:77
+#, fuzzy, c-format
+msgid "1 week ago"
+msgid_plural "%d weeks ago"
+msgstr[0] "1 тыдзень таму"
+msgstr[1] "1 тыдзень таму"
+
+#: filter/filter-datespec.c:78
+#, fuzzy, c-format
+msgid "1 month ago"
+msgid_plural "%d months ago"
+msgstr[0] "1 меÑÑц таму"
+msgstr[1] "1 меÑÑц таму"
+
+#: filter/filter-datespec.c:79
+#, fuzzy, c-format
+msgid "1 year ago"
+msgid_plural "%d years ago"
+msgstr[0] "1 год таму"
+msgstr[1] "1 год таму"
+
+#: filter/filter-datespec.c:280
+msgid "<click here to select a date>"
+msgstr "<клікніце тутака Ð´Ð»Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ даты>"
+
+#: filter/filter-datespec.c:283 filter/filter-datespec.c:294
+msgid "now"
+msgstr "зараз"
+
+#. strftime for date filter display, only needs to show a day date (i.e. no time)
+#: filter/filter-datespec.c:290
+msgid "%d-%b-%Y"
+msgstr "%d-%b-%Y"
+
+#: filter/filter-datespec.c:406
+msgid "Select a time to compare against"
+msgstr "Выбраць Ñ‡Ð°Ñ Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°ÑžÐ½Ð°Ð½ÑŒÐ½Ñ"
+
+#. filter:no-date primary
+#: filter/filter-errors.xml.h:2
+#, fuzzy
+msgid "Missing date."
+msgstr "Ðбнаўленьне нарады"
+
+#. filter:no-date secondary
+#: filter/filter-errors.xml.h:4
+msgid "You must choose a date."
+msgstr "Ð’Ñ‹ муÑіце пазначыць дату."
+
+#. filter:no-file primary
+#: filter/filter-errors.xml.h:6
+#, fuzzy
+msgid "Missing file name."
+msgstr "_Ð£Ð´Ð°ÐºÐ»Ð°Ð´Ð½Ñ‘Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð°:"
+
+#. filter:no-file secondary
+#. filter:bad-file secondary
+#: filter/filter-errors.xml.h:8 filter/filter-errors.xml.h:12
+msgid "You must specify a file name."
+msgstr "Ð’Ñ‹ муÑіце пазначыць назву файла."
+
+#. filter:bad-file primary
+#: filter/filter-errors.xml.h:10
+#, fuzzy
+msgid "File \"{0}\" does not exist or is not a regular file."
+msgstr "Файл \"%s\" Ð½Ñ Ñ–Ñнуе альбо не зьÑўлÑецца звычайным файлам."
+
+#. filter:bad-regexp primary
+#: filter/filter-errors.xml.h:14
+#, fuzzy
+msgid "Bad regular expression \"{0}\"."
+msgstr ""
+"Памылка Ñž Ñталым выразе \"%s\":\n"
+"%s"
+
+#. filter:bad-regexp secondary
+#: filter/filter-errors.xml.h:16
+msgid "Could not compile regular expression \"{1}\"."
+msgstr ""
+
+#. filter:no-name primary
+#. mail:no-name-vfolder primary
+#: filter/filter-errors.xml.h:18 mail/mail-errors.xml.h:214
+#, fuzzy
+msgid "Missing name."
+msgstr "ПрызначÑньне"
+
+#. filter:no-name secondary
+#: filter/filter-errors.xml.h:20
+msgid "You must name this filter."
+msgstr "Ð’Ñ‹ муÑіце назваць фільтар."
+
+#. filter:bad-name-notunique primary
+#: filter/filter-errors.xml.h:22
+msgid "Name \"{0}\" already used."
+msgstr ""
+
+#. filter:bad-name-notunique secondary
+#: filter/filter-errors.xml.h:24
+msgid "Please choose another name."
+msgstr ""
+
+#: filter/filter-file.c:288
+msgid "Choose a file"
+msgstr "Выбар файла"
+
+#: filter/filter-label.c:121 mail/em-filter-i18n.h:26 mail/em-migrate.c:1011
+#: mail/mail-config.c:76 mail/mail-config.glade.h:93
+msgid "Important"
+msgstr "Важнае"
+
+#. forest green
+#: filter/filter-label.c:124 mail/em-migrate.c:1014 mail/mail-config.c:79
+#: mail/mail-config.glade.h:148
+msgid "To Do"
+msgstr "ТрÑба выканаць"
+
+#. blue
+#: filter/filter-label.c:125 mail/em-migrate.c:1015 mail/mail-config.c:80
+#: mail/mail-config.glade.h:97
+msgid "Later"
+msgstr "Пазьней"
+
+#: filter/filter-part.c:532 shell/GNOME_Evolution_Test.server.in.in.h:3
+msgid "Test"
+msgstr "ТÑÑÑ‚"
+
+#: filter/filter-rule.c:790
+#, fuzzy
+msgid "Rule name:"
+msgstr "Ðазва правіла: "
+
+#: filter/filter-rule.c:817
+#, fuzzy
+msgid "<b>If</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: filter/filter-rule.c:854
+msgid "if all criteria are met"
+msgstr "калі адпавÑдае ÑžÑім крытÑрам"
+
+#: filter/filter-rule.c:854
+msgid "if any criteria are met"
+msgstr "калі задавальнÑе па любому з крытÑраў"
+
+#: filter/filter-rule.c:856
+msgid "Execute actions"
+msgstr "Выканаць дзеÑньні"
+
+#: filter/filter-rule.c:877
+#, fuzzy
+msgid "All related"
+msgstr "ДÑлегаваны"
+
+#: filter/filter-rule.c:877
+#, fuzzy
+msgid "Replies"
+msgstr "Ðтрымоўцы"
+
+#: filter/filter-rule.c:877
+#, fuzzy
+msgid "Replies and parents"
+msgstr "Ðдказана на"
+
+#: filter/filter-rule.c:879
+#, fuzzy
+msgid "Include threads"
+msgstr "Уключае:"
+
+#: filter/filter-rule.c:974
+msgid "incoming"
+msgstr "атрыманае"
+
+#: filter/filter-rule.c:974
+msgid "outgoing"
+msgstr "даÑланае"
+
+#: filter/filter.glade.h:1
+#, fuzzy
+msgid "<b>_Filter Rules</b>"
+msgstr "Правілы філтра"
+
+#: filter/filter.glade.h:2
+msgid "Compare against"
+msgstr "Параўнаць з"
+
+#: filter/filter.glade.h:3
+msgid "Incoming"
+msgstr "ÐтрыманыÑ"
+
+#: filter/filter.glade.h:4
+msgid ""
+"The message's date will be compared against\n"
+"12:00am of the date specified."
+msgstr ""
+"Дата Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð±ÑƒÐ´Ð·Ðµ параўнана з\n"
+"12 гадзінамі пазначанай даты."
+
+#: filter/filter.glade.h:6
+#, fuzzy
+msgid ""
+"The message's date will be compared against\n"
+"a time relative to when filtering occurs."
+msgstr ""
+"Дата Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð±ÑƒÐ´Ð·Ðµ параўнана з\n"
+"12 гадзінамі пазначанай даты."
+
+#: filter/filter.glade.h:8
+#, fuzzy
+msgid ""
+"The message's date will be compared against\n"
+"the current time when filtering occurs."
+msgstr ""
+"Дата Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ð±ÑƒÐ´Ð·Ðµ параўнана з\n"
+"12 гадзінамі пазначанай даты."
+
+#: filter/filter.glade.h:11
+msgid "a time relative to the current time"
+msgstr "Ñ‡Ð°Ñ Ð°Ð´Ð½Ð¾Ñна бÑгучага"
+
+#: filter/filter.glade.h:12
+msgid "ago"
+msgstr "раней"
+
+#: filter/filter.glade.h:16
+msgid "months"
+msgstr "меÑÑцы"
+
+#: filter/filter.glade.h:17 mail/mail-config.glade.h:184
+msgid "seconds"
+msgstr "ÑÑкундаў"
+
+#: filter/filter.glade.h:18
+msgid "the current time"
+msgstr "бÑгучы чаÑ"
+
+#: filter/filter.glade.h:19
+msgid "the time you specify"
+msgstr "пазначаны вамі чаÑ"
+
+#: filter/filter.glade.h:21
+msgid "years"
+msgstr "гады"
+
+#: filter/rule-editor.c:285
+msgid "Add Rule"
+msgstr "Дадаць правіла"
+
+#: filter/rule-editor.c:361
+msgid "Edit Rule"
+msgstr "РÑдагаваць правіла"
+
+#: filter/rule-editor.c:685
+msgid "Rule name"
+msgstr "Ðазва правіла"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:1
+msgid "*Control*F1"
+msgstr ""
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:2
+msgid "Composer Preferences"
+msgstr "Перавагі Ñ€Ñдактара паведамленьнÑÑž"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:3
+msgid ""
+"Configure mail preferences, including security and message display, here"
+msgstr ""
+"Тут наладжваюцца парвмÑтры пошты, уключаючы бÑÑьпеку й адлюÑтраваньне "
+"паведамленьнÑÑž"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:4
+msgid "Configure spell-checking, signatures, and the message composer here"
+msgstr ""
+"Тут наладжваюцца праверка правапіÑу, подпіÑу й ÑтварÑньне паведамленьнÑÑž"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:5
+msgid "Configure your email accounts here"
+msgstr "Ðаладка вашых уліковых запіÑаў пошты робіцца тут"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:6
+msgid "Evolution Mail"
+msgstr "Пошта \"Эвалюцыі\""
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:7
+msgid "Evolution Mail accounts configuration control"
+msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑƒÐ»Ñ–ÐºÐ¾Ð²Ð°Ð¼Ñ– запіÑамі пошты \"Эвалюцыі\""
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:8
+msgid "Evolution Mail component"
+msgstr "КампанÑнт пошты \"Эвалюцыі\""
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:9
+msgid "Evolution Mail composer"
+msgstr "РÑдактар паведамленьнÑÑž \"Эвалюцыі\""
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:10
+msgid "Evolution Mail composer configuration control"
+msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ€Ñдактарам паведамленьнÑÑž \"Эвалюцыі\""
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:11
+msgid "Evolution Mail preferences control"
+msgstr "Кіраваньне перавагамі пошты \"Эвалюцыі\""
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:12 mail/em-folder-view.c:419
+#: mail/importers/elm-importer.c:418 mail/importers/netscape-importer.c:1902
+#: mail/importers/pine-importer.c:474 mail/mail-component.c:506
+#: mail/mail-component.c:557
+msgid "Mail"
+msgstr "Пошта"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:13
+msgid "Mail Accounts"
+msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:14 mail/mail-config.glade.h:99
+msgid "Mail Preferences"
+msgstr "Перавагі пошты"
+
+#: mail/GNOME_Evolution_Mail.server.in.in.h:15
+#, fuzzy
+msgid "_Mail"
+msgstr "_Пошта:"
+
+#. translators: default account indicator
+#: mail/em-account-prefs.c:418
+msgid "[Default]"
+msgstr "[Дапомна]"
+
+#: mail/em-account-prefs.c:472
+msgid "Account name"
+msgstr "Ðазва уліковага запіÑа"
+
+#: mail/em-account-prefs.c:474
+msgid "Protocol"
+msgstr "Пратакол"
+
+#: mail/em-composer-prefs.c:305 mail/em-composer-prefs.c:424
+#: mail/mail-config.c:1045
+msgid "Unnamed"
+msgstr "БÑз назвы"
+
+#: mail/em-composer-prefs.c:909
+msgid "Language(s)"
+msgstr "Мова(ы)"
+
+#: mail/em-composer-prefs.c:955
+#, fuzzy
+msgid "Add signature script"
+msgstr "_Дадаць подпіÑ"
+
+#: mail/em-composer-prefs.c:975
+msgid "Signature(s)"
+msgstr "ПодпіÑ(Ñ‹)"
+
+#: mail/em-composer-utils.c:889
+#, fuzzy
+msgid "-------- Forwarded Message --------"
+msgstr "ПерадаÑланае паведамленьне"
+
+#: mail/em-composer-utils.c:1502
+msgid "an unknown sender"
+msgstr "невÑдомы адпраўлÑльнік"
+
+#. Note to translators: this is the attribution string used when quoting messages.
+#. * each ${Variable} gets replaced with a value. To see a full list of available
+#. * variables, see em-composer-utils.c:1514
+#: mail/em-composer-utils.c:1549
+msgid ""
+"On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} "
+"${TimeZone}, ${Sender} wrote:"
+msgstr ""
+
+#: mail/em-filter-editor.c:147
+#, fuzzy
+msgid "_Filter Rules"
+msgstr "Правілы філтра"
+
+#: mail/em-filter-folder-element.c:237 mail/em-vfolder-rule.c:494
+#: mail/mail-account-gui.c:1347
+msgid "Select Folder"
+msgstr "Выбраць Ñ‚Ñчку"
+
+#. Automatically generated. Do not edit.
+#: mail/em-filter-i18n.h:2
+msgid "Adjust Score"
+msgstr "Падправіць лік"
+
+#: mail/em-filter-i18n.h:3
+msgid "Assign Color"
+msgstr "ЗьвÑзаць колер"
+
+#: mail/em-filter-i18n.h:4
+msgid "Assign Score"
+msgstr "Прызначыць лік"
+
+#: mail/em-filter-i18n.h:5
+msgid "Attachments"
+msgstr "Укладаньні"
+
+#: mail/em-filter-i18n.h:6
+msgid "Beep"
+msgstr "Сыгнал"
+
+#: mail/em-filter-i18n.h:7
+msgid "contains"
+msgstr "утрымлівае"
+
+#: mail/em-filter-i18n.h:8
+msgid "Copy to Folder"
+msgstr "КапіÑваць у Ñ‚Ñчку"
+
+#: mail/em-filter-i18n.h:9
+msgid "Date received"
+msgstr "Дата атрыманьнÑ"
+
+#: mail/em-filter-i18n.h:10
+msgid "Date sent"
+msgstr "Дата адпраўленьнÑ"
+
+#: mail/em-filter-i18n.h:12
+msgid "Deleted"
+msgstr "Выдаленае"
+
+#: mail/em-filter-i18n.h:13
+msgid "does not contain"
+msgstr "Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ"
+
+#: mail/em-filter-i18n.h:14
+msgid "does not end with"
+msgstr "не Ñканчаецца на"
+
+#: mail/em-filter-i18n.h:15
+msgid "does not exist"
+msgstr "Ð½Ñ Ñ–Ñнуе"
+
+#: mail/em-filter-i18n.h:16
+msgid "does not return"
+msgstr "не вÑртае"
+
+#: mail/em-filter-i18n.h:17
+msgid "does not sound like"
+msgstr "не гучыць Ñк"
+
+#: mail/em-filter-i18n.h:18
+msgid "does not start with"
+msgstr "не пачынаецца на"
+
+#: mail/em-filter-i18n.h:19
+msgid "Do Not Exist"
+msgstr "ÐеіÑнуе"
+
+#: mail/em-filter-i18n.h:20
+msgid "Draft"
+msgstr "Чарнавік"
+
+#: mail/em-filter-i18n.h:21
+msgid "ends with"
+msgstr "Ñканчаецца на"
+
+#: mail/em-filter-i18n.h:22
+msgid "Exist"
+msgstr "ІÑнуе"
+
+#: mail/em-filter-i18n.h:23
+msgid "exists"
+msgstr "Ñ–Ñнуе"
+
+#: mail/em-filter-i18n.h:24
+msgid "Expression"
+msgstr "Выраз"
+
+#: mail/em-filter-i18n.h:25
+msgid "Follow Up"
+msgstr "ПаднÑцца вышÑй"
+
+#: mail/em-filter-i18n.h:27
+msgid "is"
+msgstr "гÑта"
+
+#: mail/em-filter-i18n.h:28
+msgid "is after"
+msgstr "паÑьлÑ"
+
+#: mail/em-filter-i18n.h:29
+msgid "is before"
+msgstr "перад"
+
+#: mail/em-filter-i18n.h:30
+msgid "is Flagged"
+msgstr "пазначана"
+
+#: mail/em-filter-i18n.h:31
+msgid "is greater than"
+msgstr "больш за"
+
+#: mail/em-filter-i18n.h:32
+msgid "is less than"
+msgstr "менш за"
+
+#: mail/em-filter-i18n.h:33
+msgid "is not"
+msgstr "Ð½Ñ Ð³Ñта"
+
+#: mail/em-filter-i18n.h:34
+msgid "is not Flagged"
+msgstr "не пазначана"
+
+#: mail/em-filter-i18n.h:36
+#, fuzzy
+msgid "Junk Test"
+msgstr "ЧÑрвень"
+
+#: mail/em-filter-i18n.h:37 mail/em-folder-view.c:932
+#: widgets/misc/e-expander.c:189
+msgid "Label"
+msgstr "Ðдмеціна"
+
+#: mail/em-filter-i18n.h:38
+msgid "Mailing list"
+msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі"
+
+#: mail/em-filter-i18n.h:39
+msgid "Message Body"
+msgstr "Цела паведамленьнÑ"
+
+#: mail/em-filter-i18n.h:40
+msgid "Message Header"
+msgstr "Загаловак паведамленьнÑ"
+
+#: mail/em-filter-i18n.h:41
+#, fuzzy
+msgid "Message is Junk"
+msgstr "Паведамленьні"
+
+#: mail/em-filter-i18n.h:42
+#, fuzzy
+msgid "Message is not Junk"
+msgstr "Пазначыць Ñк важнае"
+
+#: mail/em-filter-i18n.h:43
+msgid "Move to Folder"
+msgstr "ПерамÑÑьціць у Ñ‚Ñчку"
+
+#: mail/em-filter-i18n.h:44
+#, fuzzy
+msgid "Pipe to Program"
+msgstr "ВыйÑьці з праграмы"
+
+#: mail/em-filter-i18n.h:45
+msgid "Play Sound"
+msgstr "Граць гук"
+
+#: mail/em-filter-i18n.h:46 mail/message-tag-followup.c:79
+msgid "Read"
+msgstr "Чытаньне"
+
+#: mail/em-filter-i18n.h:47
+msgid "Recipients"
+msgstr "Ðтрымоўцы"
+
+#: mail/em-filter-i18n.h:48
+msgid "Regex Match"
+msgstr "Супадзеньне Ñтал.выраза"
+
+#: mail/em-filter-i18n.h:49
+msgid "Replied to"
+msgstr "Ðдказана на"
+
+#: mail/em-filter-i18n.h:50
+msgid "returns"
+msgstr "вÑртае"
+
+#: mail/em-filter-i18n.h:51
+msgid "returns greater than"
+msgstr "вÑртае больш за"
+
+#: mail/em-filter-i18n.h:52
+msgid "returns less than"
+msgstr "вÑртае менш за"
+
+#: mail/em-filter-i18n.h:53
+#, fuzzy
+msgid "Run Program"
+msgstr "ЗапуÑьціць праграму:"
+
+#: mail/em-filter-i18n.h:54 mail/message-list.etspec.h:10
+msgid "Score"
+msgstr "Лік"
+
+#: mail/em-filter-i18n.h:55
+msgid "Sender"
+msgstr "ÐдпраўлÑльнік"
+
+#: mail/em-filter-i18n.h:56
+msgid "Set Status"
+msgstr "УÑталÑваць Ñтан"
+
+#: mail/em-filter-i18n.h:57
+msgid "Size (kB)"
+msgstr "Памер (kB)"
+
+#: mail/em-filter-i18n.h:58
+msgid "sounds like"
+msgstr "гукі Ñк"
+
+#: mail/em-filter-i18n.h:59
+msgid "Source Account"
+msgstr "Крыніца рахунка"
+
+#: mail/em-filter-i18n.h:60
+msgid "Specific header"
+msgstr "СпÑцыфічны загаловак"
+
+#: mail/em-filter-i18n.h:61
+msgid "starts with"
+msgstr "пачынаецца з"
+
+#: mail/em-filter-i18n.h:63
+msgid "Stop Processing"
+msgstr "Спыніць апрацоўку"
+
+#: mail/em-filter-i18n.h:64 mail/em-format-html.c:1550
+#: mail/em-format-quote.c:305 mail/em-format.c:805 mail/em-mailer-prefs.c:87
+#: mail/message-list.etspec.h:13 mail/message-tag-followup.c:329
+#: smime/lib/e-cert.c:1131
+msgid "Subject"
+msgstr "ТÑма"
+
+#: mail/em-filter-i18n.h:65
+msgid "Unset Status"
+msgstr "ÐдмÑніць папÑÑ€Ñдні Ñтан"
+
+#. and now for the action area
+#: mail/em-filter-rule.c:488
+#, fuzzy
+msgid "<b>Then</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: mail/em-folder-browser.c:129
+msgid "Create _Virtual Folder From Search..."
+msgstr "Стварыць _віртуальную Ñ‚Ñчку вынікаў пошуку..."
+
+#: mail/em-folder-properties.c:122
+#, fuzzy
+msgid "Folder Properties"
+msgstr "УлаÑьціваÑьці шрыфта"
+
+#. TODO: can this be done in a loop?
+#: mail/em-folder-properties.c:161
+#, fuzzy
+msgid "Total message:"
+msgid_plural "Total messages:"
+msgstr[0] "Даведачнае паведамленьне"
+msgstr[1] "Даведачнае паведамленьне"
+
+#: mail/em-folder-properties.c:173
+#, fuzzy
+msgid "Unread message:"
+msgid_plural "Unread messages:"
+msgstr[0] "ÐаÑтупнае нечытанае паведамленьне"
+msgstr[1] "ÐаÑтупнае нечытанае паведамленьне"
+
+#: mail/em-folder-selection-button.c:120
+msgid "<click here to select a folder>"
+msgstr "<клікніце тутака Ð´Ð»Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ Ñ‚Ñчкі>"
+
+#: mail/em-folder-selector.c:166
+msgid "Create New Folder"
+msgstr "Стварыць новую Ñ‚Ñчку"
+
+#: mail/em-folder-selector.c:166 mail/em-folder-tree.c:2330
+#: mail/mail-component.c:707
+msgid "Specify where to create the folder:"
+msgstr "Пазначце дзе Ñтварыць Ñ‚Ñчку:"
+
+#: mail/em-folder-selector.c:300
+#, fuzzy
+msgid "Create"
+msgstr "Стварыць новую Ñ‚Ñчку"
+
+#: mail/em-folder-selector.c:304
+msgid "Folder _name:"
+msgstr "_Ðазва Ñ‚Ñчкі:"
+
+#: mail/em-folder-tree-model.c:200 mail/em-folder-tree-model.c:202
+#: mail/mail-vfolder.c:872
+msgid "VFolders"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
+
+#. UNMATCHED is always last
+#: mail/em-folder-tree-model.c:206 mail/em-folder-tree-model.c:208
+msgid "UNMATCHED"
+msgstr ""
+
+#: mail/em-folder-tree-model.c:476 mail/em-folder-tree-model.c:780
+msgid "Loading..."
+msgstr "Загрузка..."
+
+#: mail/em-folder-tree.c:846
+#, fuzzy, c-format
+msgid "Moving folder %s"
+msgstr "Выдаленьне Ñ‚Ñчкі %s"
+
+#: mail/em-folder-tree.c:848
+#, fuzzy, c-format
+msgid "Copying folder %s"
+msgstr "Ðдкрыцьцё Ñ‚Ñчкі \"%s\""
+
+#: mail/em-folder-tree.c:855 mail/message-list.c:1613
+#, fuzzy, c-format
+msgid "Moving messages into folder %s"
+msgstr "ПерамÑшчÑньне паведамленьнÑÑž у %s"
+
+#: mail/em-folder-tree.c:857 mail/message-list.c:1615
+#, fuzzy, c-format
+msgid "Copying messages into folder %s"
+msgstr "КапіÑваньне паведамленьнÑÑž у %s"
+
+#: mail/em-folder-tree.c:873
+#, fuzzy
+msgid "Cannot drop message(s) into toplevel store"
+msgstr "Ðемагчыма капіÑваць ці перамÑÑьціць паведамленьні у віртуальную Ñ‚Ñчку"
+
+#: mail/em-folder-tree.c:963 ui/evolution-mail-message.xml.h:110
+msgid "_Copy to Folder"
+msgstr "КапіÑваць у Ñ‚Ñчку"
+
+#: mail/em-folder-tree.c:964 ui/evolution-mail-message.xml.h:119
+msgid "_Move to Folder"
+msgstr "ПерамÑÑьціць у Ñ‚Ñчку"
+
+#: mail/em-folder-tree.c:966 mail/em-folder-tree.c:2117
+#: mail/em-folder-view.c:803 mail/message-list.c:1703
+#, fuzzy
+msgid "_Move"
+msgstr "ПерамÑÑьціць"
+
+#: mail/em-folder-tree.c:968 mail/message-list.c:1705
+#, fuzzy
+msgid "Cancel _Drag"
+msgstr "ÐдмÑніць заданьне"
+
+#: mail/em-folder-tree.c:2104 mail/em-folder-tree.c:2117
+#: mail/em-folder-view.c:803 mail/em-folder-view.c:817
+#: mail/importers/evolution-mbox-importer.c:119
+#: mail/importers/evolution-outlook-importer.c:133
+msgid "Select folder"
+msgstr "Выбраць Ñ‚Ñчку"
+
+#: mail/em-folder-tree.c:2104 mail/em-folder-view.c:817
+#, fuzzy
+msgid "C_opy"
+msgstr "КапіÑваць"
+
+#: mail/em-folder-tree.c:2144
+#, fuzzy, c-format
+msgid "Creating folder `%s'"
+msgstr "Захаваньне Ñ‚Ñчкі \"%s\""
+
+#: mail/em-folder-tree.c:2330 mail/mail-component.c:707
+#, fuzzy
+msgid "Create folder"
+msgstr "Стварыць новую Ñ‚Ñчку"
+
+#: mail/em-folder-tree.c:2526
+#, c-format
+msgid "Rename the \"%s\" folder to:"
+msgstr "ЗьмÑніць назву Ñ‚Ñчкі \"%s\" на:"
+
+#: mail/em-folder-tree.c:2528
+msgid "Rename Folder"
+msgstr "ЗьмÑніць назву Ñ‚Ñчкі"
+
+#: mail/em-folder-tree.c:2603 ui/evolution-addressbook.xml.h:44
+#: ui/evolution-mail-global.xml.h:18 ui/evolution-mail-messagedisplay.xml.h:8
+#: ui/evolution-message-composer.xml.h:53 ui/evolution.xml.h:37
+msgid "_View"
+msgstr "ВыглÑд"
+
+#: mail/em-folder-tree.c:2604
+#, fuzzy
+msgid "Open in _New Window"
+msgstr "Ðдкрыць у новым акне"
+
+#: mail/em-folder-tree.c:2608
+msgid "_Copy..."
+msgstr "_КапіÑваць..."
+
+#: mail/em-folder-tree.c:2609
+msgid "_Move..."
+msgstr "Пера_мÑÑьціць..."
+
+#. FIXME: need to disable for nochildren folders
+#: mail/em-folder-tree.c:2613
+msgid "_New Folder..."
+msgstr "_ÐÐ¾Ð²Ð°Ñ Ñ‚Ñчка..."
+
+#: mail/em-folder-tree.c:2616
+msgid "_Rename..."
+msgstr "ЗьмÑніць назву..."
+
+#: mail/em-folder-tree.c:2619 ui/evolution-mail-list.xml.h:27
+#, fuzzy
+msgid "_Properties"
+msgstr "УлаÑьціваÑьці"
+
+#. { EM_POPUP_ITEM, "00.select.00", N_("_Open"), G_CALLBACK(emp_popup_open), NULL, NULL, 0 },
+#: mail/em-folder-view.c:900 mail/em-popup.c:690
+#: ui/evolution-mail-message.xml.h:113
+msgid "_Edit as New Message..."
+msgstr "ЗьмÑніць Ñк новае паведамленьне..."
+
+#: mail/em-folder-view.c:902
+msgid "_Print"
+msgstr "_Друк"
+
+#: mail/em-folder-view.c:905 ui/evolution-mail-message.xml.h:127
+msgid "_Reply to Sender"
+msgstr "Ðдказаць адпраўлÑльніку"
+
+#: mail/em-folder-view.c:906 mail/em-popup.c:811
+#: ui/evolution-mail-message.xml.h:88
+msgid "Reply to _List"
+msgstr "Ðдказаць у ÑьпіÑ"
+
+#: mail/em-folder-view.c:907 mail/em-popup.c:812
+#: ui/evolution-mail-message.xml.h:87
+msgid "Reply to _All"
+msgstr "Ðдказаць уÑім"
+
+#: mail/em-folder-view.c:908 mail/em-popup.c:814
+#: ui/evolution-mail-message.xml.h:114
+msgid "_Forward"
+msgstr "_ПерадаÑлаць"
+
+#: mail/em-folder-view.c:911
+msgid "Follo_w Up..."
+msgstr "ПаднÑцца вышÑй..."
+
+#: mail/em-folder-view.c:912
+msgid "Fla_g Completed"
+msgstr "Выкананы ÑьцÑг"
+
+#: mail/em-folder-view.c:913
+msgid "Cl_ear Flag"
+msgstr "ÐчыÑьціць ÑьцÑг"
+
+#: mail/em-folder-view.c:916 ui/evolution-mail-message.xml.h:50
+msgid "Mar_k as Read"
+msgstr "Пазначыць Ñк чытанае"
+
+#: mail/em-folder-view.c:917
+msgid "Mark as _Unread"
+msgstr "Пазначыць Ñк нечытанае"
+
+#: mail/em-folder-view.c:918
+msgid "Mark as _Important"
+msgstr "Пазначыць Ñк важнае"
+
+#: mail/em-folder-view.c:919
+msgid "_Mark as Unimportant"
+msgstr "Пазначыць Ñк неважнае"
+
+#: mail/em-folder-view.c:920 ui/evolution-mail-message.xml.h:54
+#, fuzzy
+msgid "Mark as _Junk"
+msgstr "Пазначыць Ñк нечытанае"
+
+#: mail/em-folder-view.c:921 ui/evolution-mail-message.xml.h:55
+#, fuzzy
+msgid "Mark as _Not Junk"
+msgstr "Пазначыць Ñк важнае"
+
+#: mail/em-folder-view.c:925
+msgid "U_ndelete"
+msgstr "_Ð’Ñрнуць"
+
+#: mail/em-folder-view.c:928
+msgid "Mo_ve to Folder..."
+msgstr "ПерамÑÑьціць у Ñ‚Ñчку..."
+
+#: mail/em-folder-view.c:929 ui/evolution-addressbook.xml.h:32
+msgid "_Copy to Folder..."
+msgstr "_КапіÑваць у Ñ‚Ñчку..."
+
+#: mail/em-folder-view.c:937
+msgid "Add Sender to Address_book"
+msgstr "Дадаць адпраўлÑльніка Ñž кнігу адрÑÑаў"
+
+#: mail/em-folder-view.c:940
+msgid "Appl_y Filters"
+msgstr "_Ужыць фільтары"
+
+#: mail/em-folder-view.c:941
+#, fuzzy
+msgid "F_ilter Junk"
+msgstr "Правілы філтра"
+
+#: mail/em-folder-view.c:944
+msgid "Crea_te Rule From Message"
+msgstr "Стварыць правіла з паведамленьнÑ"
+
+#: mail/em-folder-view.c:945
+msgid "VFolder on _Subject"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па Ñ‚Ñме"
+
+#: mail/em-folder-view.c:946
+msgid "VFolder on Se_nder"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па адпраўлÑльніку"
+
+#: mail/em-folder-view.c:947
+msgid "VFolder on _Recipients"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па атрымоўцы"
+
+#: mail/em-folder-view.c:948
+msgid "VFolder on Mailing _List"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па ÑьпіÑе раÑÑылкі"
+
+#: mail/em-folder-view.c:952
+msgid "Filter on Sub_ject"
+msgstr "Фільтар па Ñ‚Ñме"
+
+#: mail/em-folder-view.c:953
+msgid "Filter on Sen_der"
+msgstr "Фільтар па адпраўлÑльніку"
+
+#: mail/em-folder-view.c:954
+msgid "Filter on Re_cipients"
+msgstr "Фільтар па атрымоўцы"
+
+#: mail/em-folder-view.c:955
+msgid "Filter on _Mailing List"
+msgstr "Фільтар па ÑьпіÑе раÑÑылкі"
+
+#. default charset used in mail view
+#: mail/em-folder-view.c:1711 mail/em-folder-view.c:1751
+#: mail/mail-config.glade.h:68
+msgid "Default"
+msgstr "Дапомна"
+
+#: mail/em-folder-view.c:1848
+msgid "Print Message"
+msgstr "Друк паведамленьнÑ"
+
+#: mail/em-folder-view.c:2115
+#, fuzzy
+msgid "_Copy Link Location"
+msgstr "СкапіÑваць ÑпаÑылку"
+
+#: mail/em-folder-view.c:2380
+#, fuzzy, c-format
+msgid "Click to mail %s"
+msgstr "Клікніце каб дадаць заданьне"
+
+#. message-search popup match count string
+#: mail/em-format-html-display.c:410
+#, fuzzy, c-format
+msgid "Matches: %d"
+msgstr "Супадзеньні:"
+
+#: mail/em-format-html-display.c:641 mail/em-format-html.c:582
+#, fuzzy
+msgid "Unsigned"
+msgstr "Прызначана"
+
+#: mail/em-format-html-display.c:641
+#, fuzzy
+msgid ""
+"This message is not signed. There is no guarantee that this message is "
+"authentic."
+msgstr ""
+"ГÑта паведамленьне з лічбавым подпіÑам, Ñкі Ð½Ñ Ð¼Ð¾Ð¶Ð° быць правераны на "
+"тоеÑнаÑьць."
+
+#: mail/em-format-html-display.c:642 mail/em-format-html.c:583
+#, fuzzy
+msgid "Valid signature"
+msgstr "РÑдагаваць подпіÑ"
+
+#: mail/em-format-html-display.c:642
+#, fuzzy
+msgid ""
+"This message is signed and is valid meaning that it is very likely that this "
+"message is authentic."
+msgstr ""
+"ГÑта паведамленьне з лічбавым подпіÑам, Ñкі Ð½Ñ Ð¼Ð¾Ð¶Ð° быць правераны на "
+"тоеÑнаÑьць."
+
+#: mail/em-format-html-display.c:643 mail/em-format-html.c:584
+#, fuzzy
+msgid "Invalid signature"
+msgstr "РÑдагаваць подпіÑ"
+
+#: mail/em-format-html-display.c:643
+msgid ""
+"The signature of this message cannot be verified, it may have been altered "
+"in transit."
+msgstr ""
+
+#: mail/em-format-html-display.c:644
+msgid "Valid signature, cannot verify sender"
+msgstr ""
+
+#: mail/em-format-html-display.c:644
+msgid ""
+"This message is signed with a valid signature, but the sender of the message "
+"cannot be verified."
+msgstr ""
+
+#: mail/em-format-html-display.c:650 mail/em-format-html.c:591
+#, fuzzy
+msgid "Unencrypted"
+msgstr "Перарвана"
+
+#: mail/em-format-html-display.c:650
+msgid ""
+"This message is not encrypted. Its content may be viewed in transit across "
+"the Internet."
+msgstr ""
+
+#: mail/em-format-html-display.c:651 mail/em-format-html.c:592
+msgid "Encrypted, weak"
+msgstr ""
+
+#: mail/em-format-html-display.c:651
+msgid ""
+"This message is encrypted, but with a weak encryption algorithm. It would "
+"be difficult, but not impossible for an outsider to view the content of this "
+"message in a practical amount of time."
+msgstr ""
+
+#: mail/em-format-html-display.c:652 mail/em-format-html.c:593
+#, fuzzy
+msgid "Encrypted"
+msgstr "Кадаваньне PGP"
+
+#: mail/em-format-html-display.c:652
+msgid ""
+"This message is encrypted. It would be difficult for an outsider to view "
+"the content of this message."
+msgstr ""
+
+#: mail/em-format-html-display.c:653 mail/em-format-html.c:594
+msgid "Encrypted, strong"
+msgstr ""
+
+#: mail/em-format-html-display.c:653
+msgid ""
+"This message is encrypted, with a strong encryption algorithm. It would be "
+"very difficult for an outsider to view the content of this message in a "
+"practical amount of time."
+msgstr ""
+
+#: mail/em-format-html-display.c:754 smime/gui/smime-ui.glade.h:47
+#, fuzzy
+msgid "_View Certificate"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: mail/em-format-html-display.c:769
+#, fuzzy
+msgid "This certificate is not viewable"
+msgstr "СÑртыфікат ÑÑˆÑ‡Ñ Ð½Ðµ зацьверджаны"
+
+#: mail/em-format-html-display.c:1004
+#, fuzzy
+msgid "Completed on %B %d, %Y, %l:%M %p"
+msgstr "да %B %d, %Y, %l:%M %P"
+
+#: mail/em-format-html-display.c:1012
+msgid "Overdue:"
+msgstr "ПратÑрмінавана:"
+
+#: mail/em-format-html-display.c:1015
+#, fuzzy
+msgid "by %B %d, %Y, %l:%M %p"
+msgstr "да %B %d, %Y, %l:%M %P"
+
+#: mail/em-format-html-display.c:1054
+#, fuzzy
+msgid "_View Inline"
+msgstr "Убудаваны праглÑд"
+
+#: mail/em-format-html-display.c:1055
+#, fuzzy
+msgid "_Hide"
+msgstr "Схаваць"
+
+#: mail/em-format-html-print.c:130
+#, c-format
+msgid "Page %d of %d"
+msgstr "Ðркуш %d з %d"
+
+#: mail/em-format-html.c:475 mail/em-format-html.c:477
+#, fuzzy, c-format
+msgid "Retrieving `%s'"
+msgstr "Ðтрыманьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %s"
+
+#: mail/em-format-html.c:585
+msgid "Valid signature but cannot verify sender"
+msgstr ""
+
+#: mail/em-format-html.c:848
+msgid "Malformed external-body part."
+msgstr "ЧаÑка external-body памылкова ÑфармаванаÑ"
+
+#: mail/em-format-html.c:878
+#, c-format
+msgid "Pointer to FTP site (%s)"
+msgstr "Указальнік на FTP Ñайт (%s)"
+
+#: mail/em-format-html.c:889
+#, c-format
+msgid "Pointer to local file (%s) valid at site \"%s\""
+msgstr "Указальнік на лÑкальны файл (%s), даÑтупны на Ñайце \"%s\""
+
+#: mail/em-format-html.c:891
+#, c-format
+msgid "Pointer to local file (%s)"
+msgstr "Указальнік на лакальны файл (%s)"
+
+#: mail/em-format-html.c:912
+#, c-format
+msgid "Pointer to remote data (%s)"
+msgstr "Указальнік на Ð°Ð´Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– (%s)"
+
+#: mail/em-format-html.c:923
+#, c-format
+msgid "Pointer to unknown external data (\"%s\" type)"
+msgstr "Указальнік на невÑÐ´Ð¾Ð¼Ñ‹Ñ Ð²Ð¾Ð½ÐºÐ°Ð²Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– (тыпа \"%s\")"
+
+#: mail/em-format-html.c:1165
+#, fuzzy
+msgid "Formatting message"
+msgstr "ПерамÑшчÑньне паведамленьнÑÑž"
+
+#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:800
+#: mail/em-mailer-prefs.c:82 mail/message-list.etspec.h:7
+#: mail/message-tag-followup.c:325
+msgid "From"
+msgstr "Ðд каго"
+
+#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:801
+#: mail/em-mailer-prefs.c:83
+msgid "Reply-To"
+msgstr "Ðдказаць на"
+
+#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:802
+#: mail/em-mailer-prefs.c:84 mail/message-list.etspec.h:14
+msgid "To"
+msgstr "Каму"
+
+#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:803
+#: mail/em-mailer-prefs.c:85
+msgid "Cc"
+msgstr "КопіÑ"
+
+#: mail/em-format-html.c:1441 mail/em-format-quote.c:192 mail/em-format.c:804
+#: mail/em-mailer-prefs.c:86
+msgid "Bcc"
+msgstr "Сх.копіÑ"
+
+#. pseudo-header
+#: mail/em-format-html.c:1554 mail/em-format-quote.c:314
+#: mail/em-mailer-prefs.c:939
+msgid "Mailer"
+msgstr "Паштавік"
+
+#. translators: strftime format for local time equivalent in Date header display, with day
+#: mail/em-format-html.c:1581
+msgid "<I> (%a, %R %Z)</I>"
+msgstr ""
+
+#. translators: strftime format for local time equivalent in Date header display, without day
+#: mail/em-format-html.c:1584
+msgid "<I> (%R %Z)</I>"
+msgstr ""
+
+#: mail/em-format-html.c:1594 mail/em-format-quote.c:321 mail/em-format.c:806
+#: mail/em-mailer-prefs.c:88 mail/message-list.etspec.h:2
+msgid "Date"
+msgstr "Дата"
+
+#: mail/em-format-html.c:1617 mail/em-format.c:807 mail/em-mailer-prefs.c:89
+msgid "Newsgroups"
+msgstr ""
+
+#: mail/em-format.c:1056
+#, c-format
+msgid "%s attachment"
+msgstr "%s укладаньне"
+
+#: mail/em-format.c:1095 mail/em-format.c:1228
+#, fuzzy
+msgid "Could not parse S/MIME message: Unknown error"
+msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð°Ð±Ñ€Ð°Ñ†ÑŒ паведамленьне MIME. ÐдлюÑтроўваецца Ñк крыніца."
+
+#: mail/em-format.c:1218
+msgid "Unsupported encryption type for multipart/encrypted"
+msgstr ""
+
+#: mail/em-format.c:1379
+msgid "Could not parse MIME message. Displaying as source."
+msgstr "ÐеатрымалаÑÑ Ñ€Ð°Ð·Ð°Ð±Ñ€Ð°Ñ†ÑŒ паведамленьне MIME. ÐдлюÑтроўваецца Ñк крыніца."
+
+#: mail/em-format.c:1398
+#, fuzzy
+msgid "Unsupported signature format"
+msgstr "ТÑма не падтрымліваецца"
+
+#: mail/em-format.c:1406
+#, fuzzy
+msgid "Error verifying signature"
+msgstr "Ðемагчыма праверыць подпіÑ"
+
+#: mail/em-format.c:1406
+#, fuzzy
+msgid "Unknown error verifying signature"
+msgstr "Ðемагчыма праверыць подпіÑ"
+
+#: mail/em-junk-filter.c:86
+msgid "Spamassassin (built-in)"
+msgstr ""
+
+#: mail/em-mailer-prefs.c:100
+#, fuzzy
+msgid "Every time"
+msgstr "Штогод"
+
+#: mail/em-mailer-prefs.c:101
+#, fuzzy
+msgid "Once per day"
+msgstr "Ðдзін дзень"
+
+#: mail/em-mailer-prefs.c:102
+#, fuzzy
+msgid "Once per week"
+msgstr "Ðдзін тыдзень"
+
+#: mail/em-mailer-prefs.c:103
+#, fuzzy
+msgid "Once per month"
+msgstr "Ðдзін меÑÑ_ц"
+
+#: mail/em-migrate.c:1168
+msgid ""
+"The location and hierarchy of the Evolution mailbox folders has changed "
+"since Evolution 1.x.\n"
+"\n"
+"Please be patient while Evolution migrates your folders..."
+msgstr ""
+
+#: mail/em-migrate.c:1602
+#, fuzzy, c-format
+msgid "Unable to create new folder `%s': %s"
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#: mail/em-migrate.c:1628
+#, fuzzy, c-format
+msgid "Unable to copy folder `%s' to `%s': %s"
+msgstr ""
+"Ðемагчыма ÑкапіÑваць дÑÑкрыптар файла: %s\n"
+"%s"
+
+#: mail/em-migrate.c:1813
+#, fuzzy, c-format
+msgid "Unable to scan for existing mailboxes at `%s': %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
+" %s"
+
+#: mail/em-migrate.c:2017
+#, fuzzy, c-format
+msgid "Unable to open old POP keep-on-server data `%s': %s"
+msgstr "Збой аўтарызацыі на паÑлужніку POP %s: %s"
+
+#: mail/em-migrate.c:2031
+#, fuzzy, c-format
+msgid "Unable to create POP3 keep-on-server data directory `%s': %s"
+msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ ÐºÐ°Ð½Ð°Ð»Ð° да \"%s\": %s"
+
+#: mail/em-migrate.c:2060
+#, c-format
+msgid "Unable to copy POP3 keep-on-server data `%s': %s"
+msgstr ""
+
+#: mail/em-migrate.c:2415 mail/em-migrate.c:2427
+#, fuzzy, c-format
+msgid "Failed to create local mail storage `%s': %s"
+msgstr "Збой пад Ñ‡Ð°Ñ ÑтварÑÐ½ÑŒÐ½Ñ ÐºÐ°Ð½Ð°Ð»Ð° да \"%s\": %s"
+
+#: mail/em-migrate.c:2578
+#, fuzzy, c-format
+msgid "Unable to create local mail folders at `%s': %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
+" %s"
+
+#: mail/em-migrate.c:2596
+msgid ""
+"Unable to read settings from previous Evolution install, `evolution/config."
+"xmldb' does not exist or is corrupt."
+msgstr ""
+
+#: mail/em-popup.c:700
+msgid "Save As..."
+msgstr "Захаваць Ñк..."
+
+#: mail/em-popup.c:718
+#, fuzzy, c-format
+msgid "untitled_image.%s"
+msgstr "Паведамленьне бÑз назвы"
+
+#: mail/em-popup.c:808
+msgid "Set as _Background"
+msgstr ""
+
+#: mail/em-popup.c:810
+#, fuzzy
+msgid "_Reply to sender"
+msgstr "Ðдказаць адпраўлÑльніку"
+
+#: mail/em-popup.c:859
+#, fuzzy
+msgid "_Open Link in Browser"
+msgstr "Ðдкрыць ÑпаÑылку Ñž аглÑдальніке"
+
+#: mail/em-popup.c:860
+#, fuzzy
+msgid "Se_nd message to..."
+msgstr "ДаÑлаць паве_дамленьне Ñž ÑьпіÑ..."
+
+#: mail/em-popup.c:861
+#, fuzzy
+msgid "_Add to Addressbook"
+msgstr "Дадаць адпраўлÑльніка Ñž кнігу адрÑÑаў"
+
+#: mail/em-popup.c:985
+#, c-format
+msgid "Open in %s..."
+msgstr "Ðдкрыць у %s..."
+
+#: mail/em-subscribe-editor.c:606
+#, fuzzy
+msgid "This store does not support subscriptions, or they are not enabled."
+msgstr "ПаÑлужнік не падтрымлівае звеÑткі Ñхемы LDAPv3"
+
+#: mail/em-subscribe-editor.c:635
+#, fuzzy
+msgid "Subscribed"
+msgstr "ПадпіÑацца"
+
+#: mail/em-subscribe-editor.c:639
+msgid "Folder"
+msgstr "ТÑчка"
+
+#. FIXME: This is just to get the shadow, is there a better way?
+#: mail/em-subscribe-editor.c:852
+msgid "Please select a server."
+msgstr "Калі лаÑка, выбÑрыце паÑлужнік."
+
+#: mail/em-subscribe-editor.c:873
+msgid "No server has been selected"
+msgstr "Ðебыў выбраны паÑлужнік"
+
+#: mail/em-utils.c:104
+msgid "Don't show this message again."
+msgstr "ÐеадлюÑтроўваць гÑтае паведамленьне нанова."
+
+#: mail/em-utils.c:294
+msgid "Filters"
+msgstr "Фільтары"
+
+#: mail/em-utils.c:434
+#, fuzzy
+msgid "message"
+msgstr "Паведамленьне"
+
+#: mail/em-utils.c:543
+#, fuzzy
+msgid "Save Message..."
+msgstr "Захаваць паведамлеьне Ñк..."
+
+#: mail/em-utils.c:592
+#, fuzzy
+msgid "Add address"
+msgstr "ÐдрÑÑа"
+
+#. Drop filename for messages from a mailbox
+#: mail/em-utils.c:1053
+#, fuzzy, c-format
+msgid "Messages from %s"
+msgstr "ЛіÑÑ‚ ад %s"
+
+#: mail/em-vfolder-editor.c:104
+#, fuzzy
+msgid "Virtual _Folders"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
+
+#: mail/em-vfolder-rule.c:494
+msgid "_Add"
+msgstr "_Дадаць"
+
+#: mail/em-vfolder-rule.c:574
+msgid "VFolder source"
+msgstr "Крыніца віртуальнае Ñ‚Ñчкі"
+
+#: mail/evolution-mail.schemas.in.in.h:1
+#, fuzzy
+msgid "Automatic link recognition"
+msgstr "Ðўтаматычна дÑÑ‚Ñктаваць ÑпаÑылкі"
+
+#: mail/evolution-mail.schemas.in.in.h:2
+#, fuzzy
+msgid "Automatic smiley recognition"
+msgstr "Ðўтаматычна дÑÑ‚Ñктаваць ÑпаÑылкі"
+
+#: mail/evolution-mail.schemas.in.in.h:3
+msgid "Check incoming mail being junk"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:4
+msgid "Citation highlight color"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:5
+msgid "Citation highlight color."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:6
+msgid "Composer Window default height"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:7
+msgid "Composer Window default width"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:8
+#, fuzzy
+msgid "Default charset in which to compose messages"
+msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ñ‚Ñма паведамленьнÑ."
+
+#: mail/evolution-mail.schemas.in.in.h:9
+#, fuzzy
+msgid "Default charset in which to compose messages."
+msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ñ‚Ñма паведамленьнÑ."
+
+#: mail/evolution-mail.schemas.in.in.h:10
+#, fuzzy
+msgid "Default charset in which to display messages"
+msgstr "Шукаць Ñ‚ÑкÑÑ‚ у целе адлюÑтраванага паведамленьнÑ"
+
+#: mail/evolution-mail.schemas.in.in.h:11
+#, fuzzy
+msgid "Default charset in which to display messages."
+msgstr "Шукаць Ñ‚ÑкÑÑ‚ у целе адлюÑтраванага паведамленьнÑ"
+
+#: mail/evolution-mail.schemas.in.in.h:12
+#, fuzzy
+msgid "Default forward style"
+msgstr "Стыль пераÑылкі:"
+
+#: mail/evolution-mail.schemas.in.in.h:13
+#, fuzzy
+msgid "Default height of the Composer Window"
+msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ñ‚Ñма паведамленьнÑ."
+
+#: mail/evolution-mail.schemas.in.in.h:14
+#, fuzzy
+msgid "Default height of the Message Window"
+msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ñ‚Ñма паведамленьнÑ."
+
+#: mail/evolution-mail.schemas.in.in.h:15
+#, fuzzy
+msgid "Default height of the Subscribe dialog"
+msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ñ‚Ñма паведамленьнÑ."
+
+#: mail/evolution-mail.schemas.in.in.h:16
+#, fuzzy
+msgid "Default reply style"
+msgstr "Стыль _адказа:"
+
+#: mail/evolution-mail.schemas.in.in.h:17
+#, fuzzy
+msgid "Default width of the Composer Window"
+msgstr "Схаваць панÑлю лычак"
+
+#: mail/evolution-mail.schemas.in.in.h:18
+#, fuzzy
+msgid "Default width of the Message Window"
+msgstr "Схаваць панÑлю лычак"
+
+#: mail/evolution-mail.schemas.in.in.h:19
+#, fuzzy
+msgid "Default width of the Subscribe dialog"
+msgstr "Схаваць панÑлю лычак"
+
+#: mail/evolution-mail.schemas.in.in.h:20
+msgid "Draw spelling error indicators on words as you type."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:21
+#, fuzzy
+msgid "Empty Trash folders on exit"
+msgstr "Ðчышчаць Ñьметніцу пад Ñ‡Ð°Ñ Ð²Ñ‹Ñ…Ð°Ð´Ñƒ"
+
+#: mail/evolution-mail.schemas.in.in.h:22
+#, fuzzy
+msgid "Empty all Trash folders when exiting Evolution."
+msgstr "Ðчышчаць Ñьметніцу пад Ñ‡Ð°Ñ Ð²Ñ‹Ñ…Ð°Ð´Ñƒ"
+
+#: mail/evolution-mail.schemas.in.in.h:23
+msgid "Enable caret mode, so that you can see a cursor when reading mail."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:24
+msgid "Enable/disable caret mode"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:25
+msgid "Height of the message-list pane"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:26
+msgid "Height of the message-list pane."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:27
+msgid ""
+"If there isn't a builtin viewer for a particular mime-type inside Evolution, "
+"any mime-types appearing in this list which map to a bonobo-component viewer "
+"in GNOME's mime-type database may be used for displaying content."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:28
+msgid "Last time empty trash was run"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:29
+msgid "List of Labels and their associated colors"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:30
+#, fuzzy
+msgid "List of accepted licenses"
+msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
+
+#: mail/evolution-mail.schemas.in.in.h:31
+#, fuzzy
+msgid "List of accounts"
+msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
+
+#: mail/evolution-mail.schemas.in.in.h:32
+msgid ""
+"List of accounts known to the mail component of Evolution. The list contains "
+"strings naming subdirectories relative to /apps/evolution/mail/accounts."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:33
+msgid "List of custom headers and whether they are enabled."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:34
+msgid ""
+"List of labels known to the mail component of Evolution. The list contains "
+"strings containing name:color where color uses the HTML hex encoding."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:35
+msgid "List of mime types to check for bonobo component viewers"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:36
+msgid "List of protocol names whose license has been accepted."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:37
+msgid "Load images for HTML messages over http"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:38
+msgid ""
+"Load images for HTML messages over http(s). Possible values are: 0 - Never "
+"load images off the net 1 - Load images if sender is in the addressbook 2 - "
+"Always load images off the net"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:39
+#, fuzzy
+msgid "Log filter actions"
+msgstr "Выканаць дзеÑньні"
+
+#: mail/evolution-mail.schemas.in.in.h:40
+msgid "Log filter actions to the specified log file."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:41
+msgid "Logfile to log filter actions"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:42
+msgid "Logfile to log filter actions."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:43
+msgid "Mark as Seen after specified timeout"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:44
+msgid "Mark as Seen after specified timeout."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:45
+msgid "Mark citations in the message \"Preview\""
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:46
+msgid "Mark citations in the message \"Preview\"."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:47
+#, fuzzy
+msgid "Message Window default height"
+msgstr "Дапомны прыÑрытÑÑ‚:"
+
+#: mail/evolution-mail.schemas.in.in.h:48
+msgid "Message Window default width"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:49
+msgid "Message-display style (normal, full headers, source)"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:50
+msgid "Minimum days between emptying the trash on exit"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:51
+msgid "Minimum time between emptying the trash on exit, in days."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:52
+#, fuzzy
+msgid "New Mail Notify sound file"
+msgstr "Ðагаданьне аб пошце"
+
+#: mail/evolution-mail.schemas.in.in.h:53
+#, fuzzy
+msgid "New Mail Notify type"
+msgstr "Ðагаданьне аб пошце"
+
+#: mail/evolution-mail.schemas.in.in.h:54
+msgid "Prompt on empty subject"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:55
+msgid "Prompt the user when he or she tries to expunge a folder."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:56
+msgid ""
+"Prompt the user when he or she tries to send a message without a Subject."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:57
+msgid "Prompt when user expunges"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:58
+msgid "Prompt when user only fills Bcc"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:59
+#, fuzzy
+msgid ""
+"Prompt when user tries to send HTML mail to recipients that may not want to "
+"receive HTML mail."
+msgstr ""
+"_ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž у фармаце HTML тым, хто не "
+"жадае гÑтага"
+
+#: mail/evolution-mail.schemas.in.in.h:60
+#, fuzzy
+msgid "Prompt when user tries to send a message with no To or Cc recipients."
+msgstr ""
+"ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž, у Ñкіх вызначаны толькі "
+"атрымоўцы Ñхаванае копіі."
+
+#: mail/evolution-mail.schemas.in.in.h:61
+msgid "Prompt when user tries to send unwanted HTML"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:62
+msgid "Recognize links in text and replace them."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:63
+msgid "Recognize smileys in text and replace them with images."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:64
+msgid "Run junk test on incoming mail"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:65
+#, fuzzy
+msgid "Send HTML mail by default"
+msgstr "ДаÑлаць ліÑÑ‚ у фармаце HTML?"
+
+#: mail/evolution-mail.schemas.in.in.h:66
+#, fuzzy
+msgid "Send HTML mail by default."
+msgstr "ДаÑлаць ліÑÑ‚ у фармаце HTML?"
+
+#: mail/evolution-mail.schemas.in.in.h:67
+#, fuzzy
+msgid "Show Animations"
+msgstr "Паказываць Ð°Ð½Ñ–Ð¼Ð°Ð²Ð°Ð½Ñ‹Ñ Ð²Ñ–Ð´Ð°Ñ€Ñ‹ÑÑ‹"
+
+#: mail/evolution-mail.schemas.in.in.h:68
+#, fuzzy
+msgid "Show animated images as animations."
+msgstr "Паказываць Ð°Ð½Ñ–Ð¼Ð°Ð²Ð°Ð½Ñ‹Ñ Ð²Ñ–Ð´Ð°Ñ€Ñ‹ÑÑ‹"
+
+#: mail/evolution-mail.schemas.in.in.h:69
+msgid "Show deleted messages (with a strike-through) in the message-list."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:70
+#, fuzzy
+msgid "Show deleted messages in the message-list"
+msgstr "Паказаць паведамленьне Ñž звычайным Ñтылі"
+
+#: mail/evolution-mail.schemas.in.in.h:71
+#, fuzzy
+msgid "Show the \"Preview\" pane"
+msgstr "_Ðкно перадпраглÑду"
+
+#: mail/evolution-mail.schemas.in.in.h:72
+msgid "Show the \"Preview\" pane."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:73
+#, fuzzy
+msgid "Sound file to play when new mail arrives."
+msgstr "Граць файл, калі атрымана Ð½Ð¾Ð²Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ð°"
+
+#: mail/evolution-mail.schemas.in.in.h:74
+msgid "Specifies the type of New Mail Notification the user wishes to use."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:75
+#, fuzzy
+msgid "Spell check inline"
+msgstr "_Праверка правапіÑа"
+
+#: mail/evolution-mail.schemas.in.in.h:76
+#, fuzzy
+msgid "Subscribe dialog default height"
+msgstr "Дапомны прыÑрытÑÑ‚:"
+
+#: mail/evolution-mail.schemas.in.in.h:77
+msgid "Subscribe dialog default width"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:78
+#, fuzzy
+msgid "Terminal font"
+msgstr "ТÑрмінальны шрыфт:"
+
+#: mail/evolution-mail.schemas.in.in.h:79
+msgid "The last time empty trash was run, in days since the epoch."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:80
+msgid "The terminal font for mail display"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:81
+#, fuzzy
+msgid "The variable width font for mail display"
+msgstr "ВыбÑрыце шрыфт HTML пераменае шырыні Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ"
+
+#: mail/evolution-mail.schemas.in.in.h:82
+msgid ""
+"This key should contain a list of XML structures specifying custom headers, "
+"and whether they are to be displayed. The format of the XML structure is &lt;"
+"header enabled&gt; - set enabled if the header is to be displayed in the "
+"mail view."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:83
+#, fuzzy
+msgid "Thread the message list."
+msgstr "Паведамленьні Ñк абмеркаваньне Ñ‚Ñмы"
+
+#: mail/evolution-mail.schemas.in.in.h:84
+#, fuzzy
+msgid "Thread the message-list"
+msgstr "Паведамленьні Ñк абмеркаваньне Ñ‚Ñмы"
+
+#: mail/evolution-mail.schemas.in.in.h:85
+msgid "Thread the message-list based on Subject"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:86
+msgid "Timeout for marking message as Seen"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:87
+msgid "Timeout for marking message as Seen."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:88
+#, fuzzy
+msgid "UID string of the default account."
+msgstr "_Зрабіць дапомным уліковым запіÑам"
+
+#: mail/evolution-mail.schemas.in.in.h:89
+msgid "Use Spamasssassin daemon and client"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:90
+msgid "Use Spamasssassin daemon and client (spamc/spamd)"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:91
+msgid "Use custom fonts"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:92
+msgid "Use custom fonts for displaying mail"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:93
+msgid "Use only local spam tests."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:94
+msgid "Use only the local spam tests (no DNS)."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:95
+#, fuzzy
+msgid "Variable width font"
+msgstr "ÐŸÐµÑ€Ð°Ð¼ÐµÐ½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ:"
+
+#: mail/evolution-mail.schemas.in.in.h:96
+msgid "View/Bcc menu item is checked"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:97
+msgid "View/Bcc menu item is checked."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:98
+msgid "View/Cc menu item is checked"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:99
+msgid "View/Cc menu item is checked."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:100
+msgid "View/From menu item is checked"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:101
+msgid "View/From menu item is checked."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:102
+msgid "View/PostTo menu item is checked"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:103
+msgid "View/PostTo menu item is checked."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:104
+msgid "View/ReplyTo menu item is checked"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:105
+msgid "View/ReplyTo menu item is checked."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:106
+msgid ""
+"Whether or not to fall back on threading by subjects when the messages do "
+"not contain In-Reply-To or References headers."
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:107
+msgid "port for starting user runned spamd"
+msgstr ""
+
+#: mail/evolution-mail.schemas.in.in.h:108
+#, fuzzy
+msgid "spamd port"
+msgstr "Імпарт"
+
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:1
+msgid "Evolution Elm importer"
+msgstr "Імпарт у \"Эвалюцыю\" з Elm"
+
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:2
+msgid "Evolution Netscape Mail importer"
+msgstr "Імпарт у \"Эвалюцыю\" з пошты \"Netscape\""
+
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:3
+msgid "Evolution Outlook Express 4 importer"
+msgstr "Імпарт у \"Эвалюцыю\" з \"Outlook Express 4\""
+
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:4
+msgid "Evolution Pine importer"
+msgstr "Імпарт у \"Эвалюцыю\" з \"СаÑны\""
+
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:5
+msgid "Evolution mbox importer"
+msgstr "Імпарт у \"Эвалюцыю\" з mbox"
+
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:6
+msgid "MBox (mbox)"
+msgstr "MBox (mbox)"
+
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:7
+msgid "Outlook Express 4 (.mbx)"
+msgstr "Outlook Express 4 (.mbx)"
+
+#: mail/importers/elm-importer.c:88
+msgid "Evolution is importing your old Elm mail"
+msgstr "\"ЭвалюцыÑ\" імпартуе вашую Ñтарую пошту Elm"
+
+#: mail/importers/elm-importer.c:89
+#: mail/importers/evolution-mbox-importer.c:221
+#: mail/importers/evolution-outlook-importer.c:255
+#: mail/importers/netscape-importer.c:1251 mail/importers/pine-importer.c:117
+msgid "Importing..."
+msgstr "Імпартаваньне..."
+
+#: mail/importers/elm-importer.c:91
+#: mail/importers/evolution-mbox-importer.c:223
+#: mail/importers/evolution-outlook-importer.c:257
+#: mail/importers/netscape-importer.c:1253 mail/importers/pine-importer.c:119
+msgid "Please wait"
+msgstr "Калі лаÑка, пачакайце"
+
+#: mail/importers/elm-importer.c:244
+#, fuzzy
+msgid "Importing Elm data"
+msgstr "Імпартаваньне файлаў"
+
+#: mail/importers/elm-importer.c:436
+msgid ""
+"Evolution has found Elm mail files\n"
+"Would you like to import them into Evolution?"
+msgstr ""
+"\"ЭвалюцыÑ\" адшукала Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ Elm.\n"
+"Жадаеце імпартаваць іх у \"Эвалюцыю\"?"
+
+#: mail/importers/elm-importer.c:444
+msgid "Elm"
+msgstr "Elm"
+
+#: mail/importers/evolution-mbox-importer.c:116
+#: mail/importers/evolution-outlook-importer.c:130
+#, fuzzy
+msgid "Destination folder:"
+msgstr "Выдаліць гÑтую Ñ‚Ñчку"
+
+#: mail/importers/evolution-mbox-importer.c:119
+#: mail/importers/evolution-outlook-importer.c:133
+#, fuzzy
+msgid "Select folder to import into"
+msgstr "Выбраць імпарт"
+
+#: mail/importers/evolution-mbox-importer.c:220
+#: mail/importers/evolution-outlook-importer.c:254
+#: mail/importers/mail-importer.c:226
+#, fuzzy, c-format
+msgid "Importing `%s'"
+msgstr "Імпартаваньне"
+
+#: mail/importers/evolution-outlook-importer.c:301
+#: mail/importers/mail-importer.c:140
+#, fuzzy
+msgid "Importing mailbox"
+msgstr "Імпартаваньне файлаў"
+
+#: mail/importers/mail-importer.c:360
+#, c-format
+msgid "Scanning %s"
+msgstr "Сканаваньне %s"
+
+#: mail/importers/netscape-importer.c:73
+#, c-format
+msgid "Priority Filter \"%s\""
+msgstr "ПрыÑрытÑтны фільтар \"%s\""
+
+#: mail/importers/netscape-importer.c:662
+msgid ""
+"Some of your Netscape email filters are based on\n"
+"email priorities, which are not used in Evolution.\n"
+"Instead, Evolution provides scores in the range of\n"
+"-3 to 3 that can be assigned to emails and filtered\n"
+"accordingly.\n"
+"\n"
+"As a workaround, a set of filters called \"Priority Filter\"\n"
+"was added that converts Netscape's email priorities into\n"
+"Evolution's scores, and the affected filters use scores instead\n"
+"of priorities. Check the imported filters to make sure\n"
+"everything still works as intended."
+msgstr ""
+
+#: mail/importers/netscape-importer.c:686
+msgid ""
+"Some of your Netscape email filters use\n"
+"the \"Ignore Thread\" or \"Watch Thread\"\n"
+"feature, which is not supported in Evolution.\n"
+"These filters will be dropped."
+msgstr ""
+
+#: mail/importers/netscape-importer.c:703
+msgid ""
+"Some of your Netscape email filters test the\n"
+"body of emails for (in)equality to a given string,\n"
+"which is not supported in Evolution. Those filters\n"
+"were modified to test whether that string is or is not\n"
+"contained in the message body."
+msgstr ""
+
+#: mail/importers/netscape-importer.c:1250
+msgid "Evolution is importing your old Netscape data"
+msgstr "\"ЭвалюцыÑ\" імпартуе Ð²Ð°ÑˆÑ‹Ñ ÑÑ‚Ð°Ñ€Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– Netscape"
+
+#: mail/importers/netscape-importer.c:1707
+#, fuzzy
+msgid "Importing Netscape data"
+msgstr "\"ЭвалюцыÑ\" імпартуе Ð²Ð°ÑˆÑ‹Ñ ÑÑ‚Ð°Ñ€Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– Netscape"
+
+#: mail/importers/netscape-importer.c:1907
+msgid "Settings"
+msgstr "УÑталёўкі"
+
+#: mail/importers/netscape-importer.c:1912
+msgid "Mail Filters"
+msgstr "Фільтары пошты"
+
+#: mail/importers/netscape-importer.c:1933
+msgid ""
+"Evolution has found Netscape mail files.\n"
+"Would you like them to be imported into Evolution?"
+msgstr ""
+"\"ЭвалюцыÑ\" адшукала Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ Netscape.\n"
+"Жадаеце імпартаваць іх у \"Эвалюцыю\"?"
+
+#: mail/importers/pine-importer.c:116
+msgid "Evolution is importing your old Pine data"
+msgstr "\"ЭвалюцыÑ\" імпартуе Ð²Ð°ÑˆÑ‹Ñ ÑÑ‚Ð°Ñ€Ñ‹Ñ Ð´Ð°Ð½ÑŒÐ½Ñ– Pine"
+
+#: mail/importers/pine-importer.c:314
+#, fuzzy
+msgid "Importing Pine data"
+msgstr "Імпартаваньне файлаў"
+
+#: mail/importers/pine-importer.c:479
+msgid "Addressbook"
+msgstr "Кніга адрÑÑаў"
+
+#: mail/importers/pine-importer.c:498
+msgid ""
+"Evolution has found Pine mail files.\n"
+"Would you like to import them into Evolution?"
+msgstr ""
+"\"ЭвалюцыÑ\" адшукала Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ Pine.\n"
+"Жадаеце імпартаваць іх у \"Эвалюцыю\"?"
+
+#: mail/importers/pine-importer.c:506
+msgid "Pine"
+msgstr "Pine"
+
+#. give our dialog an OK button and title
+#: mail/mail-account-editor.c:155
+msgid "Evolution Account Editor"
+msgstr "РÑдактар уліковага запіÑа \"Эвалюцыі\""
+
+#: mail/mail-account-gui.c:246
+#, c-format
+msgid ""
+"\n"
+"Please read carefully the license agreement\n"
+"for %s displayed below\n"
+"and tick the check box for accepting it\n"
+msgstr ""
+
+#: mail/mail-account-gui.c:252
+#, c-format
+msgid "%s License Agreement"
+msgstr ""
+
+#: mail/mail-account-gui.c:957 mail/mail-config.glade.h:167
+msgid "_Host:"
+msgstr "_Вузел:"
+
+#: mail/mail-account-gui.c:961 mail/mail-config.glade.h:151
+msgid "User_name:"
+msgstr "_Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка:"
+
+#: mail/mail-account-gui.c:965 mail/mail-config.glade.h:173
+msgid "_Path:"
+msgstr "_ШлÑÑ…:"
+
+#: mail/mail-autofilter.c:74
+#, c-format
+msgid "Mail to %s"
+msgstr "ДаÑлаць на %s"
+
+#: mail/mail-autofilter.c:238
+#, c-format
+msgid "Subject is %s"
+msgstr "ТÑма %s"
+
+#: mail/mail-autofilter.c:254
+#, c-format
+msgid "Mail from %s"
+msgstr "ЛіÑÑ‚ ад %s"
+
+#: mail/mail-autofilter.c:271
+#, c-format
+msgid "%s mailing list"
+msgstr "%s ÑÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі"
+
+#: mail/mail-autofilter.c:326
+msgid "Add Filter Rule"
+msgstr "Дадаць правіла фільтра"
+
+#: mail/mail-component.c:459
+#, fuzzy, c-format
+msgid "%d deleted"
+msgid_plural "%d deleted"
+msgstr[0] "%d выбраныÑ"
+msgstr[1] "%d выбраныÑ"
+
+#: mail/mail-component.c:461
+#, fuzzy, c-format
+msgid "%d junk"
+msgid_plural "%d junk"
+msgstr[0] "%d недаÑланыÑ"
+msgstr[1] "%d недаÑланыÑ"
+
+#: mail/mail-component.c:484
+#, fuzzy, c-format
+msgid "%d draft"
+msgid_plural "%d drafts"
+msgstr[0] "Чарнавікі"
+msgstr[1] "Чарнавікі"
+
+#: mail/mail-component.c:486
+#, fuzzy, c-format
+msgid "%d sent"
+msgid_plural "%d sent"
+msgstr[0] "%d даÑланыÑ"
+msgstr[1] "%d даÑланыÑ"
+
+#: mail/mail-component.c:488
+#, fuzzy, c-format
+msgid "%d unsent"
+msgid_plural "%d unsent"
+msgstr[0] "%d недаÑланыÑ"
+msgstr[1] "%d недаÑланыÑ"
+
+#: mail/mail-component.c:492
+#, fuzzy, c-format
+msgid "%d total"
+msgid_plural "%d total"
+msgstr[0] "%d агулам"
+msgstr[1] "%d агулам"
+
+#: mail/mail-component.c:494
+#, fuzzy, c-format
+msgid ", %d unread"
+msgid_plural ", %d unread"
+msgstr[0] "%d недаÑланыÑ"
+msgstr[1] "%d недаÑланыÑ"
+
+#: mail/mail-component.c:659
+msgid "New Mail Message"
+msgstr "Ðовае паштовае паведамленьне"
+
+#: mail/mail-component.c:660
+msgid "_Mail Message"
+msgstr "_Паштовае паведамленьне"
+
+#: mail/mail-component.c:661
+msgid "Compose a new mail message"
+msgstr "СклаÑьці новае паведамленьне"
+
+#: mail/mail-component.c:667
+#, fuzzy
+msgid "New Mail Folder"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка"
+
+#: mail/mail-component.c:668
+#, fuzzy
+msgid "Mail _Folder"
+msgstr "Фільтары пошты"
+
+#: mail/mail-component.c:669
+#, fuzzy
+msgid "Create a new mail folder"
+msgstr "Стварыць новую Ñ‚Ñчку"
+
+#: mail/mail-component.c:801
+msgid "Failed upgrading Mail settings or folders."
+msgstr ""
+
+#: mail/mail-config-druid.c:362 mail/mail-config.glade.h:92
+msgid "Identity"
+msgstr "Ñапраўдны"
+
+#: mail/mail-config-druid.c:364
+msgid ""
+"Please enter your name and email address below. The \"optional\" fields "
+"below do not need to be filled in, unless you wish to include this "
+"information in email you send."
+msgstr ""
+
+#: mail/mail-config-druid.c:370 mail/mail-config-druid.c:377
+#: mail/mail-config.glade.h:119
+msgid "Receiving Mail"
+msgstr "Ðтрыманьне пошты"
+
+#: mail/mail-config-druid.c:372
+msgid ""
+"Please enter information about your incoming mail server below. If you are "
+"not sure, ask your system administrator or Internet Service Provider."
+msgstr ""
+"Калі лаÑка, пазначце ніжÑй інфармацыю пра ваш паÑлужнік Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹. "
+"Калі вы нÑпÑўныÑ, запытайцеÑÑ Ð²Ð°ÑˆÐ°Ð³Ð° ÑÑ‹ÑÑ‚Ñмнага адмініÑтратара ці правайдÑра "
+"паÑлуг ІнтарнÑÑ‚."
+
+#: mail/mail-config-druid.c:379
+msgid "Please select among the following options"
+msgstr "ВыбÑрыце адзін з наÑтупных варыÑнтаў"
+
+#: mail/mail-config-druid.c:382 mail/mail-config.glade.h:131
+msgid "Sending Mail"
+msgstr "Ðдпраўка пошты"
+
+#: mail/mail-config-druid.c:384
+msgid ""
+"Please enter information about the way you will send mail. If you are not "
+"sure, ask your system administrator or Internet Service Provider."
+msgstr ""
+"Калі лаÑка, пазначце інфармацыю аб шлÑхах адпраўкі пошты. Калі вы нÑпÑўныÑ, "
+"запытайцеÑÑ Ð²Ð°ÑˆÐ°Ð³Ð° ÑÑ‹ÑÑ‚Ñмнага адмініÑтратара ці правайдÑра паÑлуг ІнтарнÑÑ‚."
+
+#: mail/mail-config-druid.c:389 mail/mail-config.glade.h:37
+msgid "Account Management"
+msgstr "Кіраваньне рахункамі"
+
+#: mail/mail-config-druid.c:391
+msgid ""
+"You are almost done with the mail configuration process. The identity, "
+"incoming mail server and outgoing mail transport method which you provided "
+"will be grouped together to make an Evolution mail account. Please enter a "
+"name for this account in the space below. This name will be used for display "
+"purposes only."
+msgstr ""
+
+#: mail/mail-config.c:895
+msgid "Checking Service"
+msgstr "Праверка паÑлугі"
+
+#: mail/mail-config.c:973 mail/mail-config.c:977
+msgid "Connecting to server..."
+msgstr "ДалучÑньне да паÑлужніка..."
+
+#: mail/mail-config.glade.h:1 mail/mail-dialogs.glade.h:5
+#, fuzzy
+msgid " "
+msgstr " "
+
+#: mail/mail-config.glade.h:2
+#, fuzzy
+msgid " Ch_eck for Supported Types "
+msgstr " Праверка тыпаў ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð° "
+
+#: mail/mail-config.glade.h:5
+#, fuzzy
+msgid "<b>SSL is not supported in this build of evolution</b>"
+msgstr "(SSL не падтрымліваецца Ñž гÑтае зборцы \"Эвалюцыі\")"
+
+#: mail/mail-config.glade.h:6
+#, fuzzy
+msgid "<b>S_ignatures</b>"
+msgstr "<b>Стан:</b>"
+
+#: mail/mail-config.glade.h:7
+#, fuzzy
+msgid "<b>_Languages</b>"
+msgstr "<b>Стан:</b>"
+
+#: mail/mail-config.glade.h:8
+msgid "<small>This will make the the filter more reliable, but slower</small>"
+msgstr ""
+
+#: mail/mail-config.glade.h:9
+msgid "<span weight=\"bold\">Account Information</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:10
+msgid "<span weight=\"bold\">Alerts</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:11
+msgid "<span weight=\"bold\">Authentication Type</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:12
+msgid "<span weight=\"bold\">Authentication</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:13
+#, fuzzy
+msgid "<span weight=\"bold\">Checking for New Mail</span>"
+msgstr "Праверка новае пошты"
+
+#: mail/mail-config.glade.h:14
+msgid "<span weight=\"bold\">Composing Messages</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:15
+msgid "<span weight=\"bold\">Configuration</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:16
+msgid "<span weight=\"bold\">Default Behavior</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:17
+msgid "<span weight=\"bold\">Delete Mail</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:18
+msgid "<span weight=\"bold\">Displayed Mail _Headers</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:19
+msgid "<span weight=\"bold\">Filter Options</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:20
+msgid "<span weight=\"bold\">General</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:21
+msgid "<span weight=\"bold\">Labels and Colors</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:22
+msgid "<span weight=\"bold\">Loading Images</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:23
+#, fuzzy
+msgid "<span weight=\"bold\">Message Display</span>"
+msgstr "Паведамленьне, Ñкое адлюÑтроўваецца:"
+
+#: mail/mail-config.glade.h:24
+msgid "<span weight=\"bold\">Message Fonts</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:25
+#, fuzzy
+msgid "<span weight=\"bold\">New Mail Notification</span>"
+msgstr "Ðагаданьне аб пошце"
+
+#: mail/mail-config.glade.h:26
+msgid "<span weight=\"bold\">Optional Information</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:27
+msgid "<span weight=\"bold\">Options</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:28
+#, fuzzy
+msgid "<span weight=\"bold\">Pretty Good Privacy (PGP/GPG)</span>"
+msgstr "Pretty Good Privacy (PGP/GPG)"
+
+#: mail/mail-config.glade.h:29
+msgid "<span weight=\"bold\">Printed Fonts</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:30
+msgid "<span weight=\"bold\">Required Information</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:31
+msgid "<span weight=\"bold\">Secure MIME (S/MIME)</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:32
+msgid "<span weight=\"bold\">Security</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:33
+#, fuzzy
+msgid "<span weight=\"bold\">Sent and Draft Messages</span>"
+msgstr "ДаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñ– чарнавікі"
+
+#: mail/mail-config.glade.h:34
+msgid "<span weight=\"bold\">Server Configuration</span>"
+msgstr ""
+
+#: mail/mail-config.glade.h:35
+#, fuzzy
+msgid "A_lso encrypt to self when sending encrypted mail"
+msgstr "ЗаўÑёды шыфраваць маім ключом пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ"
+
+#: mail/mail-config.glade.h:36
+msgid "Account Editor"
+msgstr "РÑдактар уліковых запіÑаў"
+
+#: mail/mail-config.glade.h:38
+#, fuzzy
+msgid "Add Ne_w Signature..."
+msgstr "Дадаць новы подпіÑ..."
+
+#: mail/mail-config.glade.h:39
+#, fuzzy
+msgid "Add _Script"
+msgstr "Дадаць _ÑцÑнар"
+
+#: mail/mail-config.glade.h:40
+msgid "Al_ways encrypt to myself when sending encrypted mail"
+msgstr "ЗаўÑёды шыфраваць маім ключом пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– шыфраванае пошты"
+
+#: mail/mail-config.glade.h:41
+#, fuzzy
+msgid "Alway_s carbon-copy (cc) to:"
+msgstr "ЗаўÑёды даÑылаць копію (Cc) на:"
+
+#: mail/mail-config.glade.h:43
+#, fuzzy
+msgid "Always _blind carbon-copy (bcc) to:"
+msgstr "ЗаўÑёды даÑылаць нÑбачную копію (Bcc) на:"
+
+#: mail/mail-config.glade.h:44
+#, fuzzy
+msgid "Always _sign outgoing messages when using this account"
+msgstr ""
+"ЗаўÑёды падпіÑываць паведамленьні, калі выкарыÑтоўваецца гÑÑ‚Ñ‹ уліковы запіÑ"
+
+#: mail/mail-config.glade.h:45
+msgid "Always _trust keys in my keyring when encrypting"
+msgstr "ЗаўÑёды давÑраць ключам у маім зборы ключоў пад Ñ‡Ð°Ñ ÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ"
+
+#: mail/mail-config.glade.h:46
+msgid "Attach original message"
+msgstr "УклаÑьці арыгінальнае паведамленьне"
+
+#: mail/mail-config.glade.h:47 mail/message-list.etspec.h:1
+msgid "Attachment"
+msgstr "Укладаньне"
+
+#: mail/mail-config.glade.h:48
+#, fuzzy
+msgid "Automatically _insert smiley images"
+msgstr "_Ðўтаматычна уÑтаўлÑць відарыÑÑ‹ \"уÑьмешак\""
+
+#: mail/mail-config.glade.h:49
+#, fuzzy
+msgid "Automatically check for _new mail every"
+msgstr "Ðўтаматычна правÑраць пошту кожныÑ"
+
+#: mail/mail-config.glade.h:50
+msgid "Baltic (ISO-8859-13)"
+msgstr "Ð‘Ð°Ð»Ñ†ÐºÐ°Ñ (ISO-8859-13)"
+
+#: mail/mail-config.glade.h:51
+msgid "Baltic (ISO-8859-4)"
+msgstr "Ð‘Ð°Ð»Ñ†ÐºÐ°Ñ (ISO-8859-4)"
+
+#: mail/mail-config.glade.h:52
+#, fuzzy
+msgid "Beep w_hen new mail arrives"
+msgstr "_Гукавы Ñыгнал пад Ñ‡Ð°Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð½Ð¾Ð²Ð°Ðµ пошты"
+
+#: mail/mail-config.glade.h:53
+msgid "C_haracter set:"
+msgstr "Кадаваньне ÑымбалÑÑž:"
+
+#: mail/mail-config.glade.h:54
+#, fuzzy
+msgid "Ch_eck for Supported Types "
+msgstr " Праверка тыпаў ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð° "
+
+#: mail/mail-config.glade.h:55
+#, fuzzy
+msgid "Check _incoming mail for junk"
+msgstr "Праверка новае пошты"
+
+#: mail/mail-config.glade.h:56
+msgid "Check spelling while I _type"
+msgstr "ПравÑраць Ð¿Ñ€Ð°Ð²Ð°Ð¿Ñ–Ñ Ð¿Ð°Ð´ Ñ‡Ð°Ñ ÑƒÐ²Ð¾Ð´Ñƒ Ñ‚ÑкÑта"
+
+#: mail/mail-config.glade.h:57
+msgid "Checks incoming mail messages to be Junk"
+msgstr ""
+
+#: mail/mail-config.glade.h:58
+msgid "Color for _misspelled words:"
+msgstr "Колер Ð´Ð»Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ñ‹Ñ… Ñловаў:"
+
+#: mail/mail-config.glade.h:59
+#, fuzzy
+msgid "Colors"
+msgstr "Колеры"
+
+#: mail/mail-config.glade.h:60
+#, fuzzy
+msgid "Confirm _when expunging a folder"
+msgstr "_Запытвацца Ð¿Ð°Ð´Ñ†ÑŒÐ²ÐµÑ€Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ Ð°Ñ‡Ñ‹Ñткі Ñ‚Ñчкі ад выдаленых паведамленьнÑÑž"
+
+#: mail/mail-config.glade.h:61
+msgid ""
+"Congratulations, your mail configuration is complete.\n"
+"\n"
+"You are now ready to send and receive email \n"
+"using Evolution. \n"
+"\n"
+"Click \"Apply\" to save your settings."
+msgstr ""
+"Віншаваньні, канфігураваньне вашае пошты завершана.\n"
+"\n"
+"Ð’Ñ‹ ужо зараз Ð³Ð°Ñ‚Ð¾Ð²Ñ‹Ñ Ð´Ð° адпраўкі й Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ \n"
+"з дапамогай \"Эвалюцыі\". \n"
+"\n"
+"Клікніце \"Ужыць\" каб захаваць Ð²Ð°ÑˆÑ‹Ñ ÑƒÑталёўкі."
+
+#: mail/mail-config.glade.h:67
+msgid "De_fault"
+msgstr "_Дапомна"
+
+#: mail/mail-config.glade.h:69
+#, fuzzy
+msgid "Default character e_ncoding:"
+msgstr "Дапомнае кадаваньне ÑымбалÑÑž:"
+
+#: mail/mail-config.glade.h:70
+#, fuzzy
+msgid "Defaults"
+msgstr "Дапомнае"
+
+#: mail/mail-config.glade.h:72
+msgid "Do not quote original message"
+msgstr "Ðе цытавацьь зыходнае паведамленьне"
+
+#: mail/mail-config.glade.h:73
+msgid "Don't sign _meeting requests (for Outlook compatibility)"
+msgstr "Ðе падпіÑываць запыты на нараду (Ð´Ð»Ñ ÑумÑшчальнаÑьці з Outlook)"
+
+#: mail/mail-config.glade.h:74 shell/evolution-startup-wizard.glade.h:1
+msgid "Done"
+msgstr "Зроблена"
+
+#: mail/mail-config.glade.h:75
+#, fuzzy
+msgid "Drafts _Folder:"
+msgstr "ТÑчка чарнавіка:"
+
+#: mail/mail-config.glade.h:77
+msgid "Email Accounts"
+msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
+
+#: mail/mail-config.glade.h:78
+#, fuzzy
+msgid "Email _Address:"
+msgstr "Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð°Ñ Ð°Ð´Ñ€ÑÑа пошты:"
+
+#: mail/mail-config.glade.h:79
+#, fuzzy
+msgid "Empty trash folders on e_xit"
+msgstr "Ðчышчаць Ñьметніцу пад Ñ‡Ð°Ñ Ð²Ñ‹Ñ…Ð°Ð´Ñƒ"
+
+#: mail/mail-config.glade.h:80
+#, fuzzy
+msgid "Encry_ption certificate:"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: mail/mail-config.glade.h:81
+msgid "Evolution Account Assistant"
+msgstr "Дапаможнік уліковага запіÑу \"Эвалюцыі\""
+
+#: mail/mail-config.glade.h:82
+msgid "Execute Command..."
+msgstr "Выканаць каманду..."
+
+#: mail/mail-config.glade.h:83
+#, fuzzy
+msgid "Fi_xed-width:"
+msgstr "ФікÑÐ°Ð²Ð°Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ:"
+
+#: mail/mail-config.glade.h:84
+msgid "Font Properties"
+msgstr "УлаÑьціваÑьці шрыфта"
+
+#: mail/mail-config.glade.h:85
+msgid "Format messages in _HTML"
+msgstr "Фарматаваць паведамленьні ў HTML"
+
+#: mail/mail-config.glade.h:87
+#, fuzzy
+msgid "HTML Mail"
+msgstr "По_шта у HTML"
+
+#: mail/mail-config.glade.h:88
+#, fuzzy
+msgid "Headers"
+msgstr "Загаловак"
+
+#: mail/mail-config.glade.h:89
+msgid "Highlight _quotations with"
+msgstr "Вылучаць _цытаваньне:"
+
+#: mail/mail-config.glade.h:90
+msgid "IMAPv4 "
+msgstr "IMAPv4 "
+
+#: mail/mail-config.glade.h:91
+#, fuzzy
+msgid "I_nclude remote tests"
+msgstr "Уключае:"
+
+#: mail/mail-config.glade.h:94
+msgid "Inline"
+msgstr "убудаваны"
+
+#: mail/mail-config.glade.h:96
+msgid "Kerberos "
+msgstr "Kerberos "
+
+#: mail/mail-config.glade.h:98
+msgid "Mail Configuration"
+msgstr "Ðаладка пошты"
+
+#: mail/mail-config.glade.h:100
+msgid "Mailbox location"
+msgstr "РазьмÑшчÑньне паштовае Ñкрыні"
+
+#: mail/mail-config.glade.h:101
+msgid "Message Composer"
+msgstr "РÑдактар паведамленьнÑÑž"
+
+#: mail/mail-config.glade.h:104
+msgid ""
+"Note: you will not be prompted for a password until you connect for the "
+"first time"
+msgstr ""
+
+#: mail/mail-config.glade.h:105
+msgid "Or_ganization:"
+msgstr "УÑтанова:"
+
+#: mail/mail-config.glade.h:106
+msgid "PGP/GPG _Key ID:"
+msgstr "Ід ключа PGP/GPG:"
+
+#: mail/mail-config.glade.h:111
+#, fuzzy
+msgid "Play sound file when new mail arri_ves"
+msgstr "Граць файл, калі атрымана Ð½Ð¾Ð²Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ð°"
+
+#: mail/mail-config.glade.h:112
+msgid "Pr_ompt when sending messages with only Bcc recipients defined"
+msgstr ""
+"ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž, у Ñкіх вызначаны толькі "
+"атрымоўцы Ñхаванае копіі."
+
+#: mail/mail-config.glade.h:113
+msgid "Qmail maildir "
+msgstr "Паштовы каталёг Qmail"
+
+#: mail/mail-config.glade.h:114
+msgid "Quote original message"
+msgstr "Цытаваць арыгінальнае паведамленьне"
+
+#: mail/mail-config.glade.h:115
+msgid "Quoted"
+msgstr "Працытавана"
+
+#: mail/mail-config.glade.h:116
+#, fuzzy
+msgid "Re_member password"
+msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
+
+#: mail/mail-config.glade.h:117
+msgid "Re_ply-To:"
+msgstr "Ðдказаць на:"
+
+#: mail/mail-config.glade.h:118
+msgid "Receiving Email"
+msgstr "Ðтрыманьне пошты"
+
+#: mail/mail-config.glade.h:120
+#, fuzzy
+msgid "Receiving Options"
+msgstr "ПарамÑтры атрыманьнÑ"
+
+#: mail/mail-config.glade.h:121
+#, fuzzy
+msgid "Remember _password"
+msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
+
+#: mail/mail-config.glade.h:123
+#, fuzzy
+msgid "S_tandard Font:"
+msgstr "Стандартны шрыфт:"
+
+#: mail/mail-config.glade.h:124
+#, fuzzy
+msgid "Security"
+msgstr "БÑÑьпека"
+
+#: mail/mail-config.glade.h:125
+msgid "Select HTML fixed width font"
+msgstr "ВыбÑрыце шрыфт HTML фікÑаванае шырыні"
+
+#: mail/mail-config.glade.h:126
+msgid "Select HTML fixed width font for printing"
+msgstr "ВыбÑрыце шрыфт HTML фікÑаванае шырыні Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ"
+
+#: mail/mail-config.glade.h:127
+msgid "Select HTML variable width font"
+msgstr "ВыбÑрыце шрыфт HTML пераменае шырыні"
+
+#: mail/mail-config.glade.h:128
+msgid "Select HTML variable width font for printing"
+msgstr "ВыбÑрыце шрыфт HTML пераменае шырыні Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ"
+
+#: mail/mail-config.glade.h:129
+#, fuzzy
+msgid "Select..."
+msgstr "Выдаліць..."
+
+#: mail/mail-config.glade.h:130
+msgid "Sending Email"
+msgstr "Ðдпраўка пошты"
+
+#: mail/mail-config.glade.h:133
+#, fuzzy
+msgid "Sent _Messages Folder:"
+msgstr "ТÑчка даÑланых паведамленьнÑÑž:"
+
+#: mail/mail-config.glade.h:134
+msgid "Ser_ver requires authentication"
+msgstr "ПаÑлужнік патрабуе аўтарызацыю"
+
+#: mail/mail-config.glade.h:135
+msgid "Server _Type: "
+msgstr "Тып паÑлужніка: "
+
+#: mail/mail-config.glade.h:136
+#, fuzzy
+msgid "Si_gning certificate:"
+msgstr "СамападпіÑаны ÑÑртыфікат у ланцужку"
+
+#: mail/mail-config.glade.h:137
+#, fuzzy
+msgid "Signat_ure:"
+msgstr "ПодпіÑ:"
+
+#: mail/mail-config.glade.h:138
+#, fuzzy
+msgid "Signatures"
+msgstr "_ПодпіÑÑ‹"
+
+#: mail/mail-config.glade.h:139
+msgid "Specify _filename:"
+msgstr "Пазначце назву файла:"
+
+#: mail/mail-config.glade.h:140
+#, fuzzy
+msgid "Spell Checking"
+msgstr "_Праверка правапіÑа"
+
+#: mail/mail-config.glade.h:141
+msgid "Standard Unix mbox"
+msgstr "Стандартны файл Unix mbox"
+
+#: mail/mail-config.glade.h:142
+#, fuzzy
+msgid "T_erminal Font:"
+msgstr "ТÑрмінальны шрыфт:"
+
+#: mail/mail-config.glade.h:143
+#, fuzzy
+msgid "T_ype: "
+msgstr "Тып:"
+
+#: mail/mail-config.glade.h:144
+msgid ""
+"The output of this script will be used as your\n"
+"signature. The name you specify will be used\n"
+"for display purposes only. "
+msgstr ""
+
+#: mail/mail-config.glade.h:147
+msgid ""
+"This page allows you to configure spell checking behavior and language. The "
+"list of languages here reflects only the languages for which you have a "
+"dictionary installed."
+msgstr ""
+"ГÑÑ‚Ð°Ñ Ñтаронка дазвалÑе наладзіць паводзіны праверкі правапіÑа Ñ– мову. Ð¡Ñ–Ð¿Ñ–Ñ "
+"моваў адлюÑтроўвае толькі мовы, Ñлоўнікі Ñкіх уÑталÑваны Ñž вашае ÑÑ‹ÑÑ‚Ñме."
+
+#: mail/mail-config.glade.h:149
+msgid ""
+"Type the name by which you would like to refer to this account.\n"
+"For example: \"Work\" or \"Personal\""
+msgstr ""
+"Пазначце назву Ð´Ð»Ñ Ð³Ñтага рахунка.\n"
+"Да прыкладу: \"Праца\" ці \"ÐÑабіÑтае\""
+
+#: mail/mail-config.glade.h:152
+msgid "V_ariable-width:"
+msgstr "ÐŸÐµÑ€Ð°Ð¼ÐµÐ½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ:"
+
+#: mail/mail-config.glade.h:153
+msgid ""
+"Welcome to the Evolution Mail Configuration Assistant.\n"
+"\n"
+"Click \"Forward\" to begin. "
+msgstr ""
+"Калі лаÑка, у Памочніка па наладцы пошты \"Эвалюцыі\".\n"
+"\n"
+"Калі лаÑка, клікніце \"Ðаперад\" каб пачаць. "
+
+#: mail/mail-config.glade.h:158
+msgid "_Add Signature"
+msgstr "_Дадаць подпіÑ"
+
+#: mail/mail-config.glade.h:159
+#, fuzzy
+msgid "_Always load images from the Internet"
+msgstr "ЗаўÑёды загружаць відарыÑÑ‹ з Ñеціва"
+
+#: mail/mail-config.glade.h:160
+#, fuzzy
+msgid "_Digitally sign outgoing messages (by default)"
+msgstr ""
+"ЗаўÑёды падпіÑываць паведамленьні, калі выкарыÑтоўваецца гÑÑ‚Ñ‹ уліковы запіÑ"
+
+#: mail/mail-config.glade.h:161
+msgid "_Do not notify me when new mail arrives"
+msgstr "_Ðе паведамлÑць пра атрыманьне новай пошты"
+
+#: mail/mail-config.glade.h:163
+msgid "_Enable"
+msgstr "_Уключыць"
+
+#: mail/mail-config.glade.h:164
+msgid "_Encrypt outgoing messages (by default)"
+msgstr ""
+
+#: mail/mail-config.glade.h:165
+msgid "_Forward style:"
+msgstr "Стыль пераÑылкі:"
+
+#: mail/mail-config.glade.h:168
+#, fuzzy
+msgid "_Load images if sender is in address book"
+msgstr "Загрузіць відарыÑÑ‹, калі адпраўлÑльнік Ñ‘Ñьць у кнізе адрÑÑаў"
+
+#: mail/mail-config.glade.h:169
+msgid "_Make this my default account"
+msgstr "_Зрабіць дапомным уліковым запіÑам"
+
+#: mail/mail-config.glade.h:170
+msgid "_Mark messages as read after"
+msgstr "Паз_начаць паведамленьні Ñк \"Прачытанае\" праз:"
+
+#: mail/mail-config.glade.h:172
+#, fuzzy
+msgid "_Never load images from the Internet"
+msgstr "Ðіколі не загружаць відарыÑÑ‹ з Ñеціва"
+
+#: mail/mail-config.glade.h:174
+msgid "_Prompt when sending HTML messages to contacts that don't want them"
+msgstr ""
+"_ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž у фармаце HTML тым, хто не "
+"жадае гÑтага"
+
+#: mail/mail-config.glade.h:175
+msgid "_Prompt when sending messages with an empty subject line"
+msgstr "_ПапÑÑ€Ñджваць пад Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– паведамленьнÑÑž з пуÑтой Ñ‚Ñмай"
+
+#: mail/mail-config.glade.h:176
+msgid "_Reply style:"
+msgstr "Стыль _адказа:"
+
+#: mail/mail-config.glade.h:177
+msgid "_Script:"
+msgstr "_СцÑнар:"
+
+#: mail/mail-config.glade.h:178
+msgid "_Show animated images"
+msgstr "Паказываць Ð°Ð½Ñ–Ð¼Ð°Ð²Ð°Ð½Ñ‹Ñ Ð²Ñ–Ð´Ð°Ñ€Ñ‹ÑÑ‹"
+
+#: mail/mail-config.glade.h:179
+#, fuzzy
+msgid "_Use Secure Connection (SSL):"
+msgstr "_ВыкарыÑтоўваць злучÑньне праз SSL:"
+
+#: mail/mail-config.glade.h:180
+msgid "_Use the same fonts as other applications"
+msgstr "ВыкарыÑтоўваць тойжа шрыфт што Ñ– аÑÐ½Ð°Ñ‚Ð½Ñ–Ñ Ð´Ð°ÑтаÑаваньні"
+
+#: mail/mail-config.glade.h:181
+msgid "color"
+msgstr "колер"
+
+#: mail/mail-config.glade.h:182
+msgid "description"
+msgstr "апіÑаньне"
+
+#: mail/mail-dialogs.glade.h:1
+msgid ""
+"\n"
+" Please read carefully the license agreement displayed\n"
+" below and tick the check box for accepting it\n"
+msgstr ""
+
+#: mail/mail-dialogs.glade.h:7
+#, fuzzy
+msgid "<b>vFolder Sources</b>"
+msgstr "Крыніцы віртуальных Ñ‚Ñчак"
+
+#: mail/mail-dialogs.glade.h:8
+msgid "<span weight=\"bold\">Digital Signature</span>"
+msgstr ""
+
+#: mail/mail-dialogs.glade.h:9
+msgid "<span weight=\"bold\">Encryption</span>"
+msgstr ""
+
+#: mail/mail-dialogs.glade.h:10
+#, fuzzy
+msgid "Accept License"
+msgstr "ПрынÑта"
+
+#: mail/mail-dialogs.glade.h:11 mail/message-tags.glade.h:2
+msgid "C_ompleted"
+msgstr "За_вершана"
+
+#: mail/mail-dialogs.glade.h:12
+msgid "Case Sensitive"
+msgstr "Улічваць Ñ€ÑгіÑтар"
+
+#: mail/mail-dialogs.glade.h:14
+msgid "Find in Message"
+msgstr "Пошук у паведамленьні"
+
+#: mail/mail-dialogs.glade.h:15
+msgid "Find:"
+msgstr "Пошук:"
+
+#: mail/mail-dialogs.glade.h:16 mail/message-tag-followup.c:294
+#: mail/message-tags.glade.h:3
+msgid "Flag to Follow Up"
+msgstr "Пазначыць Ñк \"Да выкананьнÑ\""
+
+#: mail/mail-dialogs.glade.h:17
+msgid "Folder Subscriptions"
+msgstr "ТÑчка з падпіÑкамі"
+
+#: mail/mail-dialogs.glade.h:18
+msgid "License Agreement"
+msgstr ""
+
+#: mail/mail-dialogs.glade.h:19
+msgid "None Selected"
+msgstr "Ðе вылучана"
+
+#: mail/mail-dialogs.glade.h:20
+msgid "S_erver:"
+msgstr "ПаÑлужнік:"
+
+#: mail/mail-dialogs.glade.h:21
+#, fuzzy
+msgid "Security Information"
+msgstr "ЗьвеÑткі аб уліковым запіÑе"
+
+#: mail/mail-dialogs.glade.h:23 mail/message-tags.glade.h:4
+msgid ""
+"The messages you have selected for follow up are listed below.\n"
+"Please select a follow up action from the \"Flag\" menu."
+msgstr ""
+
+#: mail/mail-dialogs.glade.h:25
+#, fuzzy
+msgid "Tick this to accept the license agreement"
+msgstr "Ð£Ð»Ñ–ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ пошты"
+
+#: mail/mail-dialogs.glade.h:26 mail/message-tags.glade.h:6
+#, fuzzy
+msgid "_Due By:"
+msgstr "Умоўлена да:"
+
+#: mail/mail-dialogs.glade.h:27 mail/message-tags.glade.h:7
+msgid "_Flag:"
+msgstr "_СьцÑг:"
+
+#: mail/mail-dialogs.glade.h:28
+msgid "_Subscribe"
+msgstr "_ПадпіÑацца"
+
+#: mail/mail-dialogs.glade.h:29
+msgid "_Unsubscribe"
+msgstr "_Ðдмовіцца ад падпіÑкі"
+
+#: mail/mail-dialogs.glade.h:30
+msgid "specific folders only"
+msgstr "толькі Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñ‚Ñчкі"
+
+#: mail/mail-dialogs.glade.h:31
+msgid "with all active remote folders"
+msgstr "з уÑімі актыўнымі адаленымі Ñ‚Ñчкамі"
+
+#: mail/mail-dialogs.glade.h:32
+msgid "with all local and active remote folders"
+msgstr "з уÑімі лакальнымі й актыўнымі аддаленымі течкамі"
+
+#: mail/mail-dialogs.glade.h:33
+msgid "with all local folders"
+msgstr "з уÑімі лакальнымі Ñ‚Ñчкамі"
+
+#. mail:camel-service-auth-invalid primary
+#: mail/mail-errors.xml.h:2
+#, fuzzy
+msgid "Invalid authentication"
+msgstr "ÐўтарызацыÑ"
+
+#. mail:camel-service-auth-invalid secondary
+#: mail/mail-errors.xml.h:4
+#, fuzzy
+msgid ""
+"This server does not support this type of authentication and may not support "
+"authentication at all."
+msgstr "ПаÑлужнік SMTP %s не падтрымлівае запатрабаваны тып ідÑнтыфікацыі %s"
+
+#. mail:camel-service-auth-failed primary
+#: mail/mail-errors.xml.h:6
+msgid "Your login to your server \"{0}\" as \"{0}\" failed."
+msgstr ""
+
+#. mail:camel-service-auth-failed secondary
+#: mail/mail-errors.xml.h:8
+msgid ""
+"Check to make sure your password is spelled correctly. Remember that many "
+"passwords are case sensitive; your caps lock might be on."
+msgstr ""
+
+#. mail:ask-send-html primary
+#: mail/mail-errors.xml.h:10
+#, fuzzy
+msgid "Are you sure you want to send a message in HTML format?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце перадаÑлаць уÑе %d паведамленьні?"
+
+#. mail:ask-send-html secondary
+#: mail/mail-errors.xml.h:12
+#, fuzzy
+msgid ""
+"Please make sure the following recipients are willing and able to receive "
+"HTML email:\n"
+"{0}\n"
+"Send anyway?"
+msgstr ""
+"Ð’Ñ‹ даÑылаеце паведамленьне фарматаванае Ñž HTML. Калі лаÑка,\n"
+"упÑўніцеÑÑ ÑˆÑ‚Ð¾ наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð¾ÑžÑ†Ñ‹ жадаюць Ñ– могуць атрымліваць\n"
+"пошту у фармаце HTML:\n"
+
+#: mail/mail-errors.xml.h:15 mail/mail-errors.xml.h:20
+#: mail/mail-errors.xml.h:27 mail/mail-errors.xml.h:32
+#, fuzzy
+msgid "_Send"
+msgstr "ДаÑлаць"
+
+#. mail:ask-send-no-subject primary
+#: mail/mail-errors.xml.h:17
+#, fuzzy
+msgid "Are you sure you want to send a message without a subject?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце перадаÑлаць уÑе %d паведамленьні?"
+
+#. mail:ask-send-no-subject secondary
+#: mail/mail-errors.xml.h:19
+msgid ""
+"Adding a meaningful Subject line to your messages will give your recipients "
+"an idea of what your mail is about."
+msgstr ""
+
+#. mail:ask-send-only-bcc-contact primary
+#. mail:ask-send-only-bcc primary
+#: mail/mail-errors.xml.h:22 mail/mail-errors.xml.h:29
+#, fuzzy
+msgid "Are you sure you want to send a message with only BCC recipients?"
+msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце перадаÑлаць уÑе %d паведамленьні?"
+
+#. mail:ask-send-only-bcc-contact secondary
+#: mail/mail-errors.xml.h:24
+msgid ""
+"The contact list you are sending to is configured to hide list recipients.\n"
+"\n"
+"Many email systems add an Apparently-To header to messages that only have "
+"BCC recipients. This header, if added, will list all of your recipients in "
+"your message. To avoid this, you should add at least one To: or CC: "
+"recipient. "
+msgstr ""
+
+#. mail:ask-send-only-bcc secondary
+#: mail/mail-errors.xml.h:31
+msgid ""
+"Many email systems add an Apparently-To header to messages that only have "
+"BCC recipients. This header, if added, will list all of your recipients to "
+"your message anyway. To avoid this, you should add at least one To: or CC: "
+"recipient."
+msgstr ""
+
+#. mail:send-no-recipients primary
+#: mail/mail-errors.xml.h:34
+msgid ""
+"This message cannot be sent because you have not specified any Recipients"
+msgstr ""
+
+#. mail:send-no-recipients secondary
+#: mail/mail-errors.xml.h:36
+msgid ""
+"Please enter a valid email address in the To: field. You can search for "
+"email addresses by clicking on the To: button next to the entry box."
+msgstr ""
+
+#. mail:ask-default-drafts primary
+#: mail/mail-errors.xml.h:38
+#, fuzzy
+msgid "Use default drafts folder?"
+msgstr "Ðдкрыцьцё Ñ‚Ñчкі з дапомнымі задачамі"
+
+#. mail:ask-default-drafts secondary
+#: mail/mail-errors.xml.h:40
+#, fuzzy
+msgid ""
+"Unable to open the drafts folder for this account. Use the system drafts "
+"folder instead?"
+msgstr ""
+"ÐеатрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ Ñ‚Ñчку чарнавікоў Ð´Ð»Ñ Ð³Ñтага рахунка.\n"
+"Жадаеце дапомна выкарыÑтоўваць Ñ‚Ñчку чарнавікоў?"
+
+#: mail/mail-errors.xml.h:41
+#, fuzzy
+msgid "Use _Default"
+msgstr "Дапомна"
+
+#. mail:ask-expunge primary
+#: mail/mail-errors.xml.h:43
+#, fuzzy
+msgid ""
+"Are you sure you want to permanently remove all the deleted message in "
+"folder \"{0}\"?"
+msgstr ""
+"Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце адкрыць уÑе %d паведамленьні Ñž аÑобных вокнах?"
+
+#. mail:ask-expunge secondary
+#. mail:ask-empty-trash secondary
+#: mail/mail-errors.xml.h:45 mail/mail-errors.xml.h:50
+msgid "If you continue, you will not be able to recover these messages."
+msgstr ""
+
+#: mail/mail-errors.xml.h:46
+#, fuzzy
+msgid "_Expunge"
+msgstr "_ВыкрÑÑьліць"
+
+#. mail:ask-empty-trash primary
+#: mail/mail-errors.xml.h:48
+#, fuzzy
+msgid ""
+"Are you sure you want to permanently remove all the deleted messages in all "
+"folders?"
+msgstr "Зьнішчыць уÑе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– з уÑÑ–Ñ… Ñ‚Ñчак"
+
+#: mail/mail-errors.xml.h:51
+#, fuzzy
+msgid "_Empty Trash"
+msgstr "СпуÑтошыць _Ñьметніцу"
+
+#. mail:exit-unsaved primary
+#: mail/mail-errors.xml.h:53
+msgid "You have unsent messages, do you wish to quit anyway?"
+msgstr "Маюцца недаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–! Ð’Ñ‹ жадаеце завÑршыць працу?"
+
+#. mail:exit-unsaved secondary
+#: mail/mail-errors.xml.h:55
+msgid ""
+"If you quit, these messages will not be sent until Evolution is started "
+"again."
+msgstr ""
+
+#. mail:camel-exception primary
+#: mail/mail-errors.xml.h:57
+msgid "Your message with the subject \"{0}\" was not delivered."
+msgstr ""
+
+#. mail:camel-exception secondary
+#: mail/mail-errors.xml.h:59
+msgid ""
+"The message was sent via the \"sendmail\" external application. Sendmail "
+"reports the following error: status 67: mail not sent.\n"
+"The message is stored in the Outbox folder. Check the message for errors "
+"and resend."
+msgstr ""
+
+#. mail:async-error primary
+#: mail/mail-errors.xml.h:62
+#, fuzzy
+msgid "Error while {0}."
+msgstr ""
+"Памылка пад Ñ‡Ð°Ñ \"%s\":\n"
+"%s"
+
+#. mail:async-error secondary
+#: mail/mail-errors.xml.h:64
+msgid "{1}."
+msgstr ""
+
+#. mail:async-error-nodescribe primary
+#: mail/mail-errors.xml.h:66
+#, fuzzy
+msgid "Error while performing operation."
+msgstr ""
+"Памылка пад Ñ‡Ð°Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ Ð°Ð¿Ñрацыі:\n"
+"%s"
+
+#. mail:async-error-nodescribe secondary
+#: mail/mail-errors.xml.h:68
+msgid "{0}."
+msgstr ""
+
+#. mail:ask-session-password primary
+#: mail/mail-errors.xml.h:82
+#, fuzzy
+msgid "Enter password."
+msgstr "Пазначце пароль"
+
+#. mail:filter-load-error primary
+#: mail/mail-errors.xml.h:86
+#, fuzzy
+msgid "Error loading filter definitions."
+msgstr ""
+"Памылка пад Ñ‡Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ– інфармацыі фільтара:\n"
+"%s"
+
+#. mail:no-save-path primary
+#: mail/mail-errors.xml.h:90
+#, fuzzy
+msgid "Cannot save to directory \"{0}\"."
+msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
+
+#. mail:no-create-path primary
+#. mail:no-write-path-exists primary
+#. mail:no-write-path-notfile primary
+#: mail/mail-errors.xml.h:94 mail/mail-errors.xml.h:102
+#: mail/mail-errors.xml.h:106
+#, fuzzy
+msgid "Cannot save to file \"{0}\"."
+msgstr ""
+"Ðемагчыма захаваць у `%s'\n"
+" %s"
+
+#. mail:no-create-path secondary
+#: mail/mail-errors.xml.h:96
+#, fuzzy
+msgid "Cannot create the save directory, because \"{1}\""
+msgstr ""
+"Ðемагчыма Ñтварыць каталёг\n"
+" %s\n"
+"Памылка: %s"
+
+#. mail:no-create-tmp-path primary
+#: mail/mail-errors.xml.h:98
+#, fuzzy
+msgid "Cannot create temporary save directory."
+msgstr "ÐеатрымалаÑÑ Ñтварыць чаÑовы каталёг: %s"
+
+#. mail:no-write-path-exists secondary
+#: mail/mail-errors.xml.h:104
+#, fuzzy
+msgid "File exists but cannot overwrite it."
+msgstr "Файл Ñ–Ñнуе, перапіÑаць?"
+
+#. mail:no-write-path-notfile secondary
+#: mail/mail-errors.xml.h:108
+#, fuzzy
+msgid "File exists but is not a regular file."
+msgstr "Файл \"%s\" Ð½Ñ Ñ–Ñнуе альбо не зьÑўлÑецца звычайным файлам."
+
+#. mail:no-delete-folder primary
+#: mail/mail-errors.xml.h:110
+#, fuzzy
+msgid "Cannot delete folder \"{0}\"."
+msgstr ""
+"Ðемагчыма выдаліць Ñ‚Ñчку:\n"
+"%s"
+
+#. mail:no-delete-spethal-folder primary
+#: mail/mail-errors.xml.h:114
+#, fuzzy
+msgid "Cannot delete system folder \"{0}\"."
+msgstr "ÐеатрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñ‚Ñчку: %s: Ñ‚Ñчка адÑутнічае"
+
+#. mail:no-delete-spethal-folder secondary
+#. mail:no-rename-spethal-folder secondary
+#: mail/mail-errors.xml.h:116 mail/mail-errors.xml.h:120
+msgid ""
+"System folders are required for Ximian Evolution to function correctly and "
+"cannot be renamed, moved, or deleted."
+msgstr ""
+
+#. mail:no-rename-spethal-folder primary
+#: mail/mail-errors.xml.h:118
+#, fuzzy
+msgid "Cannot rename or move system folder \"{0}\"."
+msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ñ‚Ñчка адÑутнічае"
+
+#. mail:ask-delete-folder title
+#: mail/mail-errors.xml.h:122
+#, fuzzy
+msgid "Delete \"{0}\"?"
+msgstr "Выдаліць \"%s\""
+
+#. mail:ask-delete-folder primary
+#: mail/mail-errors.xml.h:124
+#, fuzzy
+msgid "Really delete folder \"{0}\" and all of its subfolders?"
+msgstr "Сапраўды выдаліць Ñ‚Ñчку \"%s\"?"
+
+#. mail:ask-delete-folder secondary
+#: mail/mail-errors.xml.h:126
+msgid ""
+"If you delete the folder, all of its contents and its subfolders contents "
+"will be deleted permanently."
+msgstr ""
+
+#. mail:no-rename-folder-exists primary
+#. mail:no-rename-folder primary
+#: mail/mail-errors.xml.h:128 mail/mail-errors.xml.h:132
+#, fuzzy
+msgid "Cannot rename \"{0}\" to \"{1}\"."
+msgstr "Ðемагчыма перамÑÑьціць Ñ‚Ñчку: %s"
+
+#. mail:no-rename-folder-exists secondary
+#. mail:vfolder-notunique secondary
+#: mail/mail-errors.xml.h:130 mail/mail-errors.xml.h:192
+msgid "A folder named \"{1}\" already exists. Please use a different name."
+msgstr ""
+
+#. mail:no-rename-folder secondary
+#: mail/mail-errors.xml.h:134
+msgid "Because \"{2}\"."
+msgstr ""
+
+#. mail:no-move-folder-nostore primary
+#. mail:no-move-folder-to-nostore primary
+#: mail/mail-errors.xml.h:136 mail/mail-errors.xml.h:140
+#, fuzzy
+msgid "Cannot move folder \"{0}\" to \"{1}\"."
+msgstr "Ðемагчыма перамÑÑьціць Ñ‚Ñчку: %s"
+
+#. mail:no-move-folder-nostore secondary
+#. mail:no-copy-folder-nostore secondary
+#: mail/mail-errors.xml.h:138 mail/mail-errors.xml.h:146
+#, fuzzy
+msgid "Cannot open source \"{2}\"."
+msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ падзеленую Ñ‚Ñчку: %s"
+
+#. mail:no-move-folder-to-nostore secondary
+#. mail:no-copy-folder-to-nostore secondary
+#: mail/mail-errors.xml.h:142 mail/mail-errors.xml.h:150
+#, fuzzy
+msgid "Cannot open target \"{2}\"."
+msgstr "Ðемагчыма адкрыць паведамленьне"
+
+#. mail:no-copy-folder-nostore primary
+#. mail:no-copy-folder-to-nostore primary
+#: mail/mail-errors.xml.h:144 mail/mail-errors.xml.h:148
+#, fuzzy
+msgid "Cannot copy folder \"{0}\" to \"{1}\"."
+msgstr "Ðемагчыма капіÑваць Ñ‚Ñчку: %s"
+
+#. mail:no-create-folder-nostore primary
+#: mail/mail-errors.xml.h:152
+#, fuzzy
+msgid "Cannot create folder \"{0}\"."
+msgstr "ÐеатрымалаÑÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ñ†ÑŒ Ñ‚Ñчку: %s: %s"
+
+#. mail:no-create-folder-nostore secondary
+#: mail/mail-errors.xml.h:154
+#, fuzzy
+msgid "Cannot open source \"{1}\""
+msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ падзеленую Ñ‚Ñчку: %s"
+
+#. mail:account-incomplete primary
+#. mail:account-notunique primary
+#: mail/mail-errors.xml.h:156 mail/mail-errors.xml.h:160
+#, fuzzy
+msgid "Cannot save changes to account."
+msgstr "Ñ– адна Ñ–Ð½ÑˆÐ°Ñ ÐºÐ°Ñ€Ñ‚ÐºÐ°."
+
+#. mail:account-incomplete secondary
+#: mail/mail-errors.xml.h:158
+msgid "You have not filled in all of the required information."
+msgstr "Ð’Ñ‹ не пазначылі ÑžÑÑ‘ неабходную інфармацыю."
+
+#. mail:account-notunique secondary
+#: mail/mail-errors.xml.h:162
+msgid "You may not create two accounts with the same name."
+msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ Ñтварыць два рахункі з аднолькавымі назвамі."
+
+#. mail:ask-delete-account title
+#: mail/mail-errors.xml.h:164
+#, fuzzy
+msgid "Delete account?"
+msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#. mail:ask-delete-account primary
+#: mail/mail-errors.xml.h:166
+msgid "Are you sure you want to delete this account?"
+msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑÑ‚Ñ‹ рахунак?"
+
+#. mail:ask-delete-account secondary
+#: mail/mail-errors.xml.h:168
+msgid "If you proceed, the account information will be deleted permanently."
+msgstr ""
+
+#: mail/mail-errors.xml.h:169
+#, fuzzy
+msgid "Don't delete"
+msgstr "Ð’Ñрнуць з выдаленага"
+
+#. mail:no-save-signature primary
+#: mail/mail-errors.xml.h:171
+#, fuzzy
+msgid "Could not save signature file."
+msgstr "Ðеатрымліваецца захаваць файл подпіÑа: %s"
+
+#. mail:no-save-signature secondary
+#: mail/mail-errors.xml.h:173
+msgid "Because \"{0}\"."
+msgstr ""
+
+#. mail:signature-notscript primary
+#: mail/mail-errors.xml.h:175
+#, fuzzy
+msgid "Cannot set signature script \"{0}\"."
+msgstr "_Дадаць подпіÑ"
+
+#. mail:signature-notscript secondary
+#: mail/mail-errors.xml.h:177
+msgid "The script file must exist and be executable."
+msgstr ""
+
+#. mail:ask-signature-changed title
+#: mail/mail-errors.xml.h:179
+#, fuzzy
+msgid "Discard changed?"
+msgstr "_Ðдкінуць зьмены"
+
+#. mail:ask-signature-changed primary
+#: mail/mail-errors.xml.h:181
+#, fuzzy
+msgid "Do you wish to save your changes?"
+msgstr "Жадаеце захаваць зьмены?"
+
+#. mail:ask-signature-changed secondary
+#: mail/mail-errors.xml.h:183
+#, fuzzy
+msgid "This signature has been changed, but has not been saved."
+msgstr ""
+"ГÑÑ‚Ñ‹ Ð¿Ð¾Ð´Ð¿Ñ–Ñ Ð±Ñ‹Ñž зьменены, але Ð½Ñ Ð±Ñ‹Ñž захаваны.\n"
+"\n"
+"Вы жадаеце захаваць зьмены?"
+
+#: mail/mail-errors.xml.h:184
+msgid "_Discard changes"
+msgstr "_Ðдкінуць зьмены"
+
+#. mail:vfolder-notexist primary
+#: mail/mail-errors.xml.h:186
+#, fuzzy
+msgid "Cannot edit vFolder \"{0}\" as it does not exist."
+msgstr "ТÑчка \"%s\" не Ñ–Ñнуе."
+
+#. mail:vfolder-notexist secondary
+#: mail/mail-errors.xml.h:188
+msgid ""
+"This folder may have been added implictly, go to the virtual folder editor "
+"to add it explictly, if required."
+msgstr ""
+
+#. mail:vfolder-notunique primary
+#: mail/mail-errors.xml.h:190
+#, fuzzy
+msgid "Cannot add vFolder \"{0}\"."
+msgstr ""
+"Ðемагчыма выдаліць Ñ‚Ñчку:\n"
+"%s"
+
+#. mail:vfolder-updated primary
+#: mail/mail-errors.xml.h:194
+msgid "vFolders automatically updated."
+msgstr ""
+
+#. mail:vfolder-updated secondary
+#: mail/mail-errors.xml.h:196
+#, fuzzy
+msgid ""
+"The following vFolder(s):\n"
+"{0}\n"
+"Used the now removed folder:\n"
+" \"{1}\"\n"
+"And have been updated."
+msgstr ""
+"ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі:\n"
+"%sВыкарыÑтана Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°Ñ Ñ‚Ñчка:\n"
+" \"%s\"\n"
+"І быдзе абноўлена."
+
+#. mail:filter-updated primary
+#: mail/mail-errors.xml.h:202
+msgid "Mail filters automatically updated."
+msgstr ""
+
+#. mail:filter-updated secondary
+#: mail/mail-errors.xml.h:204
+#, fuzzy
+msgid ""
+"The following filter rule(s):\n"
+"{0}\n"
+"Used the now removed folder:\n"
+" \"{1}\"\n"
+"And have been updated."
+msgstr ""
+"ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі:\n"
+"%sВыкарыÑтана Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°Ñ Ñ‚Ñчка:\n"
+" \"%s\"\n"
+"І быдзе абноўлена."
+
+#. mail:no-folder primary
+#: mail/mail-errors.xml.h:210
+#, fuzzy
+msgid "Missing folder."
+msgstr "Выдаленьне Ñ‚Ñчкі %s"
+
+#. mail:no-folder secondary
+#: mail/mail-errors.xml.h:212
+msgid "You must specify a folder."
+msgstr "Ð’Ñ‹ муÑіце пазначыць Ñ‚Ñчку."
+
+#. mail:no-name-vfolder secondary
+#: mail/mail-errors.xml.h:216
+#, fuzzy
+msgid "You must name this vFolder."
+msgstr "Ð’Ñ‹ муÑіце назваць гÑтую віртуальную Ñ‚Ñчку."
+
+#. mail:vfolder-no-source primary
+#: mail/mail-errors.xml.h:218
+#, fuzzy
+msgid "No sources selected."
+msgstr "Ðебыў выбраны паÑлужнік"
+
+#. mail:vfolder-no-source secondary
+#: mail/mail-errors.xml.h:220
+msgid ""
+"You must specify at least one folder as a source.\n"
+"Either by selecting the folders individually, and/or by selecting\n"
+"all local folders, all remote folders, or both."
+msgstr ""
+
+#. mail:ask-migrate-existing primary
+#: mail/mail-errors.xml.h:224
+msgid "Problem migrating old mail folder \"{0}\"."
+msgstr ""
+
+#. mail:ask-migrate-existing secondary
+#: mail/mail-errors.xml.h:226
+msgid ""
+"A non-empty folder at \"{1}\" already exists.\n"
+"\n"
+"You can choose to ignore this folder, overwrite or append its contents, or "
+"quit.\n"
+msgstr ""
+
+#: mail/mail-errors.xml.h:230
+msgid "Ignore"
+msgstr ""
+
+#: mail/mail-errors.xml.h:231 widgets/misc/e-system-errors.xml.h:7
+#, fuzzy
+msgid "_Overwrite"
+msgstr "ПерапіÑаць"
+
+#: mail/mail-errors.xml.h:232
+#, fuzzy
+msgid "_Append"
+msgstr "ÐÑьпÑн"
+
+#. mail:gw-accountsetup-error primary
+#: mail/mail-errors.xml.h:234
+msgid ""
+"Could not connect to {0}. Groupwise account setup is incomplete. You may "
+"need to setup the account again"
+msgstr ""
+
+#: mail/mail-folder-cache.c:795
+#, c-format
+msgid "Pinging %s"
+msgstr "Зандаваньне %s"
+
+#: mail/mail-ops.c:98
+msgid "Filtering Folder"
+msgstr "Фільтраваньне Ñ‚Ñчкі"
+
+#: mail/mail-ops.c:259
+msgid "Fetching Mail"
+msgstr "Ðтрыманьне пошты"
+
+#: mail/mail-ops.c:542
+#, fuzzy, c-format
+msgid "Failed to apply outgoing filters: %s"
+msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
+
+#: mail/mail-ops.c:567
+#, c-format
+msgid ""
+"Failed to append to %s: %s\n"
+"Appending to local `Sent' folder instead."
+msgstr ""
+
+#: mail/mail-ops.c:576
+#, fuzzy, c-format
+msgid "Failed to append to local `Sent' folder: %s"
+msgstr "Збой пад Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹ Ñž чаÑовым файле %s: %s"
+
+#: mail/mail-ops.c:672
+#, c-format
+msgid "Sending message %d of %d"
+msgstr "Ðдпраўленьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %d з %d"
+
+#: mail/mail-ops.c:703
+#, fuzzy, c-format
+msgid "Failed to send %d of %d messages"
+msgstr "ÐеатрымалаÑÑ Ð´Ñкадаваць паведамленьне."
+
+#: mail/mail-ops.c:707
+msgid "Complete."
+msgstr "Выканана."
+
+#: mail/mail-ops.c:804
+msgid "Saving message to folder"
+msgstr "Захаваньне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž Ñ‚Ñчцы"
+
+#: mail/mail-ops.c:889
+#, c-format
+msgid "Moving messages to %s"
+msgstr "ПерамÑшчÑньне паведамленьнÑÑž у %s"
+
+#: mail/mail-ops.c:889
+#, c-format
+msgid "Copying messages to %s"
+msgstr "КапіÑваньне паведамленьнÑÑž у %s"
+
+#: mail/mail-ops.c:1002
+#, c-format
+msgid "Scanning folders in \"%s\""
+msgstr "Сканаваньне Ñ‚Ñчак у \"%s\""
+
+#: mail/mail-ops.c:1115
+msgid "Forwarded messages"
+msgstr "ПерадаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: mail/mail-ops.c:1158
+#, c-format
+msgid "Opening folder %s"
+msgstr "Ðдкрыцьцё Ñ‚Ñчкі \"%s\""
+
+#: mail/mail-ops.c:1230
+#, c-format
+msgid "Opening store %s"
+msgstr "Ðдкрыцьцё Ñховішча %s"
+
+#: mail/mail-ops.c:1308
+#, c-format
+msgid "Removing folder %s"
+msgstr "Выдаленьне Ñ‚Ñчкі %s"
+
+#: mail/mail-ops.c:1402
+#, c-format
+msgid "Storing folder '%s'"
+msgstr "Захаваньне Ñ‚Ñчкі \"%s\""
+
+#: mail/mail-ops.c:1467
+#, c-format
+msgid "Expunging and storing account '%s'"
+msgstr ""
+
+#: mail/mail-ops.c:1468
+#, fuzzy, c-format
+msgid "Storing account '%s'"
+msgstr "Захаваньне Ñ‚Ñчкі \"%s\""
+
+#: mail/mail-ops.c:1523
+msgid "Refreshing folder"
+msgstr "Ðбнаўленьне Ñ‚Ñчкі"
+
+#: mail/mail-ops.c:1559 mail/mail-ops.c:1610
+msgid "Expunging folder"
+msgstr "ВыкрÑÑьленьне Ñ‚Ñчкі"
+
+#: mail/mail-ops.c:1607
+#, c-format
+msgid "Emptying trash in '%s'"
+msgstr "СпуÑташÑньне Ñьметніцы Ñž \"%s\""
+
+#: mail/mail-ops.c:1608
+msgid "Local Folders"
+msgstr "Ð›Ð°ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
+
+#: mail/mail-ops.c:1691
+#, c-format
+msgid "Retrieving message %s"
+msgstr "Ðтрыманьне Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ %s"
+
+#: mail/mail-ops.c:1763
+#, fuzzy, c-format
+msgid "Retrieving %d message"
+msgid_plural "Retrieving %d messages"
+msgstr[0] "Ðтрыманьне %d паведамленьнÑÑž"
+msgstr[1] "Ðтрыманьне %d паведамленьнÑÑž"
+
+#: mail/mail-ops.c:1849
+#, fuzzy, c-format
+msgid "Saving %d message"
+msgid_plural "Saving %d messsages"
+msgstr[0] "Захаваньне %d паведамленьнÑÑž"
+msgstr[1] "Захаваньне %d паведамленьнÑÑž"
+
+#: mail/mail-ops.c:1899
+#, c-format
+msgid ""
+"Unable to create output file: %s\n"
+" %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
+" %s"
+
+#: mail/mail-ops.c:1927
+#, c-format
+msgid ""
+"Error saving messages to: %s:\n"
+" %s"
+msgstr ""
+"Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž у: %s:\n"
+" %s"
+
+#: mail/mail-ops.c:1998
+msgid "Saving attachment"
+msgstr "Захаваньне ўкладаньнÑ"
+
+#: mail/mail-ops.c:2010
+#, c-format
+msgid ""
+"Cannot create output file: %s:\n"
+" %s"
+msgstr ""
+"ÐеатрымалаÑÑ Ñтварыць файл вываду: %s\n"
+" %s"
+
+#: mail/mail-ops.c:2020
+#, c-format
+msgid "Could not write data: %s"
+msgstr "Ðемагчыма запіÑаць даньні: %s"
+
+#: mail/mail-ops.c:2168
+#, c-format
+msgid "Disconnecting from %s"
+msgstr "ÐдлучÑньне ад %s"
+
+#: mail/mail-ops.c:2168
+#, c-format
+msgid "Reconnecting to %s"
+msgstr "ПерадалучÑньне да %s"
+
+#: mail/mail-send-recv.c:157
+msgid "Cancelling..."
+msgstr "Ðдмена..."
+
+#: mail/mail-send-recv.c:264
+#, c-format
+msgid "Server: %s, Type: %s"
+msgstr "ПаÑлужнік: %s, Тып: %s"
+
+#: mail/mail-send-recv.c:266
+#, c-format
+msgid "Path: %s, Type: %s"
+msgstr "ШлÑÑ…: %s, Тып: %s"
+
+#: mail/mail-send-recv.c:268
+#, c-format
+msgid "Type: %s"
+msgstr "Тып: %s"
+
+#: mail/mail-send-recv.c:320
+msgid "Send & Receive Mail"
+msgstr "Ðтрыманьне Ñ– адпраўленьне пошты"
+
+#: mail/mail-send-recv.c:323
+msgid "Cancel _All"
+msgstr "ÐдмÑніць _уÑÑ‘"
+
+#: mail/mail-send-recv.c:412
+msgid "Updating..."
+msgstr "Ðбнаўленьне..."
+
+#: mail/mail-send-recv.c:412 mail/mail-send-recv.c:466
+msgid "Waiting..."
+msgstr "Чаканьне..."
+
+#: mail/mail-session.c:207
+#, c-format
+msgid "Enter Password for %s"
+msgstr "Пазначце пароль Ð´Ð»Ñ %s"
+
+#: mail/mail-session.c:209
+msgid "Enter Password"
+msgstr "Пазначце пароль"
+
+#: mail/mail-session.c:238
+msgid "User canceled operation."
+msgstr "ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð°Ð´Ð¼ÐµÐ½ÐµÐ½Ð° карыÑтальнікам."
+
+#: mail/mail-signature-editor.c:371
+msgid "Edit signature"
+msgstr "РÑдагаваць подпіÑ"
+
+#: mail/mail-signature-editor.c:411
+msgid "Enter a name for this signature."
+msgstr "Пазначце назву Ð´Ð»Ñ Ð³Ñтага подпіÑа."
+
+#: mail/mail-signature-editor.c:414
+msgid "Name:"
+msgstr "Ðазва:"
+
+#: mail/mail-tools.c:114
+#, fuzzy, c-format
+msgid "Could not create spool directory `%s': %s"
+msgstr ""
+"Ðемагчыма Ñтварыць каталёг %s:\n"
+"%s"
+
+#: mail/mail-tools.c:141
+#, c-format
+msgid "Trying to movemail a non-mbox source `%s'"
+msgstr ""
+
+#: mail/mail-tools.c:276
+#, c-format
+msgid "Forwarded message - %s"
+msgstr "ПерадаÑланае паведамленьне - %s"
+
+#: mail/mail-tools.c:278
+msgid "Forwarded message"
+msgstr "ПерадаÑланае паведамленьне"
+
+#: mail/mail-tools.c:319
+#, fuzzy, c-format
+msgid "Invalid folder: `%s'"
+msgstr "Ðдкрыцьцё Ñ‚Ñчкі \"%s\""
+
+#: mail/mail-vfolder.c:87
+#, c-format
+msgid "Setting up vfolder: %s"
+msgstr "Ðаладка віртуальнае Ñ‚Ñчкі %s"
+
+#: mail/mail-vfolder.c:235
+#, fuzzy, c-format
+msgid "Updating vFolders for '%s:%s'"
+msgstr "Ðбнаўленьне віртуальнае Ñ‚Ñчкі на URI: %s"
+
+#: mail/mail-vfolder.c:242
+#, fuzzy, c-format
+msgid "Updating vFolders for '%s'"
+msgstr "Ðбнаўленьне віртуальнае Ñ‚Ñчкі на URI: %s"
+
+#: mail/mail-vfolder.c:942
+msgid "vFolders"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
+
+#: mail/mail-vfolder.c:981
+msgid "Edit VFolder"
+msgstr "РÑдагаваньне віртуальных Ñ‚Ñчак"
+
+#: mail/mail-vfolder.c:1065
+msgid "New VFolder"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка"
+
+#: mail/message-list.c:1000
+msgid "Unseen"
+msgstr "Ðечытанае"
+
+#: mail/message-list.c:1001
+msgid "Seen"
+msgstr "Прагледзенае"
+
+#: mail/message-list.c:1002
+msgid "Answered"
+msgstr "Ðдказанае"
+
+#: mail/message-list.c:1003
+msgid "Multiple Unseen Messages"
+msgstr "Ð¨Ð¼Ð°Ñ‚Ð»Ñ–ÐºÑ–Ñ Ð½ÐµÐ¿Ñ€Ð°Ð³Ð»ÐµÐ´Ð·ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: mail/message-list.c:1004
+msgid "Multiple Messages"
+msgstr "Ð¨Ð¼Ð°Ñ‚Ð»Ñ–ÐºÑ–Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: mail/message-list.c:1008
+msgid "Lowest"
+msgstr "ÐіжÑйшы"
+
+#: mail/message-list.c:1009
+msgid "Lower"
+msgstr "Ðіжей"
+
+#: mail/message-list.c:1013
+msgid "Higher"
+msgstr "Ð’Ñ‹Ñокі"
+
+#: mail/message-list.c:1014
+msgid "Highest"
+msgstr "ВышÑйшы"
+
+#: mail/message-list.c:1337
+msgid "?"
+msgstr "?"
+
+#: mail/message-list.c:1344
+msgid "Today %l:%M %p"
+msgstr "Ð¡Ñ‘Ð½ÑŒÐ½Ñ %I:%M %p"
+
+#: mail/message-list.c:1353
+msgid "Yesterday %l:%M %p"
+msgstr "Учора %l:%M %p"
+
+#: mail/message-list.c:1365
+msgid "%a %l:%M %p"
+msgstr "%a %l:%M %p"
+
+#: mail/message-list.c:1373
+msgid "%b %d %l:%M %p"
+msgstr "%b %d %l:%M %p"
+
+#: mail/message-list.c:1375
+msgid "%b %d %Y"
+msgstr "%b %d %Y"
+
+#: mail/message-list.c:3376
+msgid "Generating message list"
+msgstr "СтварÑньне ÑьпіÑу паведамленьнÑÑž"
+
+#: mail/message-list.etspec.h:3
+msgid "Due By"
+msgstr "Умоўлена да"
+
+#: mail/message-list.etspec.h:4
+msgid "Flag Status"
+msgstr "СьцÑг Ñтану"
+
+#: mail/message-list.etspec.h:5
+msgid "Flagged"
+msgstr "Пазначана"
+
+#: mail/message-list.etspec.h:6
+msgid "Follow Up Flag"
+msgstr "СьцÑг \"Да выкананьнÑ\""
+
+#: mail/message-list.etspec.h:8
+msgid "Original Location"
+msgstr "Зыходнае разьмÑшчÑньне"
+
+#: mail/message-list.etspec.h:9
+msgid "Received"
+msgstr "Ðтрымана"
+
+#: mail/message-list.etspec.h:11
+msgid "Size"
+msgstr "Памер"
+
+#: mail/message-tag-followup.c:73
+msgid "Call"
+msgstr "Выклік"
+
+#: mail/message-tag-followup.c:74
+msgid "Do Not Forward"
+msgstr "Ðе перадаÑылаць"
+
+#: mail/message-tag-followup.c:75
+msgid "Follow-Up"
+msgstr "Да выкананьнÑ"
+
+#: mail/message-tag-followup.c:76
+msgid "For Your Information"
+msgstr "Да вашага ведама"
+
+#: mail/message-tag-followup.c:77 ui/evolution-mail-message.xml.h:42
+msgid "Forward"
+msgstr "ПерадаÑлаць"
+
+#: mail/message-tag-followup.c:78
+msgid "No Response Necessary"
+msgstr "Можна не адказваць"
+
+#: mail/message-tag-followup.c:80 ui/evolution-mail-message.xml.h:85
+msgid "Reply"
+msgstr "Ðдказаць"
+
+#: mail/message-tag-followup.c:81 ui/evolution-mail-message.xml.h:86
+msgid "Reply to All"
+msgstr "Ðдказаць уÑім"
+
+#: mail/message-tag-followup.c:82
+msgid "Review"
+msgstr "Праверыць"
+
+#: mail/searchtypes.xml.h:1
+msgid "Body contains"
+msgstr "ЦÑла ўтрымлівае"
+
+#: mail/searchtypes.xml.h:2
+msgid "Body does not contain"
+msgstr "Цела Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ"
+
+#: mail/searchtypes.xml.h:3
+msgid "Body or subject contains"
+msgstr "Цела ці Ñ‚Ñма ўтрымліваюць"
+
+#: mail/searchtypes.xml.h:4
+msgid "Message contains"
+msgstr "Паведамленьне ўтрымлівае"
+
+#: mail/searchtypes.xml.h:5
+msgid "Recipients contain"
+msgstr "\"Ðтрымоўцы\" утрымлівае"
+
+#: mail/searchtypes.xml.h:6
+msgid "Sender contains"
+msgstr "ÐдпраўлÑльнік утрымлівае"
+
+#: mail/searchtypes.xml.h:7
+msgid "Subject contains"
+msgstr "ТÑма ўтрымлівае"
+
+#: mail/searchtypes.xml.h:8
+msgid "Subject does not contain"
+msgstr "Тема Ð½Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ"
+
+#: shell/GNOME_Evolution_Shell.server.in.in.h:1
+msgid "Evolution Shell"
+msgstr "Ðбалонка \"Эвалюцыі\""
+
+#: shell/GNOME_Evolution_Test.server.in.in.h:1
+#, fuzzy
+msgid "Evolution Test"
+msgstr "\"ЭвалюцыÑ\""
+
+#: shell/GNOME_Evolution_Test.server.in.in.h:2
+#, fuzzy
+msgid "Evolution Test component"
+msgstr "КампанÑнт Ñ‚ÑÑÑ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ \"Эвалюцыі\"."
+
+#: shell/apps_evolution_shell.schemas.in.in.h:1
+#, fuzzy
+msgid "480"
+msgstr "380"
+
+#: shell/apps_evolution_shell.schemas.in.in.h:2
+msgid "Default width of the folder bar pane"
+msgstr ""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:3
+#, fuzzy
+msgid "Default window height"
+msgstr "Дапомны прыÑрытÑÑ‚:"
+
+#: shell/apps_evolution_shell.schemas.in.in.h:4
+#, fuzzy
+msgid "Default window width"
+msgstr "Дапомны прыÑрытÑÑ‚:"
+
+#: shell/apps_evolution_shell.schemas.in.in.h:5
+#, fuzzy
+msgid "Evolution configuration version"
+msgstr "ІнтÑрфÑÐ¹Ñ Ð½Ð°Ð»Ð°Ð´ÐºÑ– пошты \"Эвалюцыі\""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:6
+#, fuzzy
+msgid "ID or alias of the component to be shown by default at start-up."
+msgstr "Дапомна пазначаць укладаньне Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑžÐ±ÑƒÐ´Ð°Ð²Ð°Ð½Ñ‹Ð¼."
+
+#: shell/apps_evolution_shell.schemas.in.in.h:7
+msgid ""
+"If set to true, Evolution will start up in offline mode instead of online "
+"mode."
+msgstr ""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:8
+msgid ""
+"If set to true, the warning dialog in development versions of Evolution is "
+"not displayed."
+msgstr ""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:9
+#, fuzzy
+msgid "Last upgraded Evolution configuration version"
+msgstr "ІнтÑрфÑÐ¹Ñ Ð½Ð°Ð»Ð°Ð´ÐºÑ– пошты \"Эвалюцыі\""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:10
+msgid ""
+"List of paths for the folders to be synchronized to disk for offline usage"
+msgstr ""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:11
+msgid "Toolbar is visible"
+msgstr ""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:12
+msgid "Whether Evolution should start up in offline mode"
+msgstr ""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:13
+msgid "Whether the toolbar should be visible."
+msgstr ""
+
+#: shell/apps_evolution_shell.schemas.in.in.h:14
+msgid "Whether to skip the development warning dialog"
+msgstr ""
+
+#: shell/e-active-connection-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Active Connections</b>"
+msgstr "ÐÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ Ð´Ð°Ð»ÑƒÑ‡Ñньні"
+
+#: shell/e-active-connection-dialog.glade.h:2
+msgid "Active Connections"
+msgstr "ÐÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ Ð´Ð°Ð»ÑƒÑ‡Ñньні"
+
+#: shell/e-active-connection-dialog.glade.h:3
+msgid "Click OK to close these connections and go offline"
+msgstr ""
+"ÐаціÑьніце \"Так\" каб закрыць гÑÑ‚Ñ‹Ñ Ð´Ð°Ð»ÑƒÑ‡Ñньні й працаваць у адлучаным "
+"Ñ€Ñжыме"
+
+#: shell/e-shell-folder-title-bar.c:592 shell/e-shell-folder-title-bar.c:593
+msgid "(Untitled)"
+msgstr "(БÑз назвы)"
+
+#: shell/e-shell-importer.c:146
+msgid "Choose the type of importer to run:"
+msgstr "ВыбÑрыце тып імпарту Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ:"
+
+#: shell/e-shell-importer.c:149
+msgid ""
+"Choose the file that you want to import into Evolution, and select what type "
+"of file it is from the list.\n"
+"\n"
+"You can select \"Automatic\" if you do not know, and Evolution will attempt "
+"to work it out."
+msgstr ""
+"ВыбÑрыце файл, Ñкі вы жадаеце імпартаваць у \"Эвалюцыю\", Ñ– выбÑрыце Ñа "
+"ÑьпіÑу тып файла.\n"
+"\n"
+"Ð’Ñ‹ можаце выбраць \"Ðўтаматычна\", калі не ведаеце, Ñ– \"ЭвалюцыÑ\" паÑпрабуе "
+"зрабіць гÑта Ñама."
+
+#: shell/e-shell-importer.c:155
+#, fuzzy
+msgid "Choose the destination for this import"
+msgstr "ÐдмÑніць нараду Ð´Ð»Ñ Ð³Ñтага ÑлемÑнта"
+
+#: shell/e-shell-importer.c:158 shell/e-shell-startup-wizard.c:748
+msgid "Please select the information that you would like to import:"
+msgstr "Калі лаÑка выбÑрыце інфармацыю, Ñкую вы жадаеце імпартаваць:"
+
+#: shell/e-shell-importer.c:161
+msgid ""
+"Evolution checked for settings to import from the following\n"
+"applications: Pine, Netscape, Elm, iCalendar. No settings\n"
+"that could be imported where found. If you would like to\n"
+"try again, please click the \"Back\" button.\n"
+msgstr ""
+
+#: shell/e-shell-importer.c:229 shell/e-shell-importer.c:260
+#, c-format
+msgid ""
+"Importing %s\n"
+"Importing item %d."
+msgstr ""
+"Імпартаваньне %s\n"
+"Імпартаваньне ÑлемÑнта %d."
+
+#: shell/e-shell-importer.c:333
+msgid "Select importer"
+msgstr "Выбраць імпарт"
+
+#: shell/e-shell-importer.c:451 shell/e-shell-importer.c:1056
+#, c-format
+msgid "File %s does not exist"
+msgstr "файл \"%s\" не Ñ–Ñнуе"
+
+#: shell/e-shell-importer.c:459
+msgid "Importing"
+msgstr "Імпартаваньне"
+
+#: shell/e-shell-importer.c:467
+#, fuzzy, c-format
+msgid "Importing %s.\n"
+msgstr "Імпартаваньне"
+
+#: shell/e-shell-importer.c:477 shell/e-shell-importer.c:478
+#, c-format
+msgid "Error loading %s"
+msgstr "Памылка загрузк %s"
+
+#: shell/e-shell-importer.c:495
+#, c-format
+msgid ""
+"Importing %s\n"
+"Importing item 1."
+msgstr ""
+"Імпартаваньне %s\n"
+"Імпартаваньне 1 ÑлемÑнта."
+
+#: shell/e-shell-importer.c:570
+msgid "Automatic"
+msgstr "Ðўтаматычна"
+
+#: shell/e-shell-importer.c:626
+#, fuzzy
+msgid "F_ilename:"
+msgstr "Ðазва файла:"
+
+#: shell/e-shell-importer.c:631
+msgid "Select a file"
+msgstr "ВыбÑрыце файл"
+
+#: shell/e-shell-importer.c:643
+#, fuzzy
+msgid "File _type:"
+msgstr "Тып файла:"
+
+#: shell/e-shell-importer.c:682
+#, fuzzy
+msgid "Import data and settings from _older programs"
+msgstr "Імпартаваньне даньнÑÑž Ñ– уÑталёвак Ñа Ñтарых праграм"
+
+#: shell/e-shell-importer.c:685
+#, fuzzy
+msgid "Import a _single file"
+msgstr "Імпартаваньне аÑобнага файла"
+
+#: shell/e-shell-importer.c:753 shell/e-shell-startup-wizard.c:571
+msgid ""
+"Please wait...\n"
+"Scanning for existing setups"
+msgstr ""
+"Калі лаÑка пачакайце...\n"
+"Сканаваньне Ñ–Ñнуючых уÑталёвак"
+
+#: shell/e-shell-importer.c:757
+msgid "Starting Intelligent Importers"
+msgstr "ЗапуÑк інтÑлектуальнага імпарту"
+
+#: shell/e-shell-importer.c:883 shell/e-shell-startup-wizard.c:698
+#, c-format
+msgid "From %s:"
+msgstr "Ðд %s:"
+
+#: shell/e-shell-importer.c:1074
+#, fuzzy, c-format
+msgid "No importer available for file %s"
+msgstr "ПравайдÑÑ€ Ð´Ð»Ñ Ð¿Ñ€Ð°Ñ‚Ð°ÐºÐ¾Ð»Ð° \"%s\" недаÑтупны"
+
+#: shell/e-shell-importer.c:1086
+#, fuzzy
+msgid "Unable to execute importer"
+msgstr "Збой Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ gpg."
+
+#: shell/e-shell-importer.c:1200
+#, fuzzy
+msgid "_Import"
+msgstr "Імпарт"
+
+#: shell/e-shell-offline-handler.c:594
+msgid "Closing connections..."
+msgstr "Закрыцьцё далучÑньнÑÑž..."
+
+#: shell/e-shell-settings-dialog.c:326
+msgid "Evolution Settings"
+msgstr "Ðаладкі \"Эвалюцыі\""
+
+#: shell/e-shell-startup-wizard.c:575
+msgid "Starting import"
+msgstr "РаÑпачата імпартаваньне"
+
+#: shell/e-shell-startup-wizard.c:795
+msgid ""
+"If you quit the Evolution Setup Assistant now, all of the information that "
+"you have entered will be forgotten. You will need to run this assistant "
+"again before using Evolution.\n"
+"\n"
+"Do you want to quit using the Assistant now?"
+msgstr ""
+
+#: shell/e-shell-utils.c:116
+msgid "No folder name specified."
+msgstr "Ðазва Ñ‚Ñчкі не пазначана"
+
+#: shell/e-shell-utils.c:123
+msgid "Folder name cannot contain the Return character."
+msgstr "Ðазва Ð½Ñ Ð¼ÑƒÑіць ўтрымліваць Ñымбаль новага радка."
+
+#: shell/e-shell-utils.c:129
+msgid "Folder name cannot contain the character \"/\"."
+msgstr "Ðазва Ñ‚Ñчкі Ð½Ñ Ð¼ÑƒÑіць ўтрымліваць Ñымбаль \"/\"."
+
+#: shell/e-shell-utils.c:135
+msgid "Folder name cannot contain the character \"#\"."
+msgstr "Ðазва Ñ‚Ñчкі Ð½Ñ Ð¼ÑƒÑіць ўтрымліваць Ñымбаль \"#\"."
+
+#: shell/e-shell-utils.c:141
+msgid "'.' and '..' are reserved folder names."
+msgstr "'.' Ñ– '..' зарÑзÑÑ€Ð²Ð°Ð²Ð°Ð½Ñ‹Ñ Ð½Ð°Ð·Ð²Ñ‹ Ñ‚Ñчак."
+
+#: shell/e-shell-window-commands.c:67
+msgid "The GNOME Pilot tools do not appear to be installed on this system."
+msgstr "Сродкі GNOME Ð´Ð»Ñ ÑувÑзі з \"Пілётам\" не ÑžÑталÑÐ²Ð°Ð½Ñ‹Ñ Ð½Ð° гÑтае ÑÑ‹ÑÑ‚Ñме."
+
+#: shell/e-shell-window-commands.c:75
+#, c-format
+msgid "Error executing %s."
+msgstr "Памылка выкананьнÑ: %s"
+
+#: shell/e-shell-window-commands.c:124
+msgid "Bug buddy is not installed."
+msgstr "\"Bug buddy\" не ÑžÑталÑваны."
+
+#: shell/e-shell-window-commands.c:132
+msgid "Bug buddy could not be run."
+msgstr "\"Bug buddy\" не запушчаны."
+
+#: shell/e-shell-window-commands.c:323
+#, fuzzy
+msgid "Groupware Suite"
+msgstr "Група"
+
+#: shell/e-shell-window-commands.c:563
+msgid "_Work Online"
+msgstr "_Далучаны Ñ€Ñжым"
+
+#: shell/e-shell-window-commands.c:576 ui/evolution.xml.h:39
+msgid "_Work Offline"
+msgstr "_Ðдлучаны Ñ€Ñжым"
+
+#: shell/e-shell-window-commands.c:589 ui/evolution.xml.h:25
+msgid "Work Offline"
+msgstr "Працаваць у адлучаным Ñ€Ñжыме"
+
+#: shell/e-shell-window.c:337
+#, fuzzy
+msgid "Evolution is currently online. Click on this button to work offline."
+msgstr ""
+"\"ЭвалюцыÑ\" працуе Ñž далучаным Ñ€Ñжыме. Клікніце на гÑтую кнопку каб "
+"працаваць у адлучаным Ñ€Ñжыме."
+
+#: shell/e-shell-window.c:344
+#, fuzzy
+msgid "Evolution is in the process of going offline."
+msgstr "Ð­Ð²Ð°Ð»ÑŽÑ†Ñ‹Ñ Ð¿ÐµÑ€Ð°Ñ…Ð¾Ð´Ð·Ñ–Ñ†ÑŒ да працы Ñž адлучаным Ñ€Ñжымн."
+
+#: shell/e-shell-window.c:350
+#, fuzzy
+msgid "Evolution is currently offline. Click on this button to work online."
+msgstr ""
+"\"ЭвалюцыÑ\" працуе Ñž адлучаным Ñ€Ñжыме. Клікніце на гÑтую кнопку каб "
+"працаваць у далучаным Ñ€Ñжыме."
+
+#: shell/e-shell-window.c:637
+#, fuzzy, c-format
+msgid "Switch to %s"
+msgstr "ДаÑлаць на %s"
+
+#: shell/e-shell.c:585
+#, fuzzy
+msgid "Uknown system error."
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
+
+#: shell/e-shell.c:789 shell/e-shell.c:790
+#, fuzzy, c-format
+msgid "%ld KB"
+msgstr "%d %B"
+
+#: shell/e-shell.c:1212
+msgid "Invalid arguments"
+msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð°Ñ€Ð³ÑƒÐ¼Ñнты"
+
+#: shell/e-shell.c:1214
+msgid "Cannot register on OAF"
+msgstr "ÐеатрымалаÑÑ Ð·Ð°Ñ€ÑгіÑтраваць на OAF"
+
+#: shell/e-shell.c:1216
+msgid "Configuration Database not found"
+msgstr "ÐдÑутніча ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ Ð±Ð°Ð·Ñ‹ даньнÑÑž"
+
+#: shell/e-shell.c:1218
+msgid "Generic error"
+msgstr "Ð—Ð²Ñ‹Ñ‡Ð°Ð¹Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
+
+#: shell/e-user-creatable-items-handler.c:691
+msgid "New"
+msgstr "Стварыць"
+
+#: shell/evolution-startup-wizard.glade.h:2
+msgid "Evolution Setup Assistant"
+msgstr "Дапаможнік уÑталёўкі \"Эвалюцыі\""
+
+#: shell/evolution-startup-wizard.glade.h:3
+msgid "Importing Files"
+msgstr "Імпартаваньне файлаў"
+
+#: shell/evolution-startup-wizard.glade.h:4
+msgid "Timezone "
+msgstr "ЧаÑÐ°Ð²Ð°Ñ Ð·Ð¾Ð½Ð° "
+
+#: shell/evolution-startup-wizard.glade.h:5
+msgid "Welcome"
+msgstr "Вітаем"
+
+#: shell/evolution-startup-wizard.glade.h:6
+msgid ""
+"Welcome to Evolution. The next few screens will allow\n"
+"Evolution to connect to your email accounts, and to import\n"
+"files from other applications. \n"
+"\n"
+"Please click the \"Forward\" button to continue. "
+msgstr ""
+"Вітаем у \"Эвалюцыі\". Колькі наÑтупных дыÑлёгаў\n"
+"дазволÑць далучыцца да вашах уліковах запіÑаў, Ñ–\n"
+"імпартаваць файлы з іншых даÑтаÑаваньнÑÑž. \n"
+"\n"
+"Калі лаÑка, клікніце кнопку \"Ðаперад\" каб працÑгнуць. "
+
+#: shell/evolution-startup-wizard.glade.h:11
+msgid ""
+"You have successfully entered all of the information\n"
+"needed to set up Evolution. \n"
+"\n"
+"Click the \"Apply\" button to save your settings. "
+msgstr ""
+"Ð’Ñ‹ муÑіце увеÑьці уÑÑŽ інфармацыю, Ñкую патрабуе\n"
+"уÑталÑваньне \"Эвалюцыі\"\n"
+"\n"
+"Клікніце кнопку \"Ужыць\" каб захаваць Ð²Ð°ÑˆÑ‹Ñ ÑƒÑталёўкі. "
+
+#: shell/evolution-test-component.c:140
+#, fuzzy
+msgid "New Test"
+msgstr "Ðовае заданьне"
+
+#: shell/evolution-test-component.c:141
+#, fuzzy
+msgid "_Test"
+msgstr "ТÑÑÑ‚"
+
+#: shell/evolution-test-component.c:142
+#, fuzzy
+msgid "Create a new test item"
+msgstr "Стварыць новае заданьне"
+
+#: shell/importer/import.glade.h:1
+msgid "Click \"Import\" to begin importing the file into Evolution. "
+msgstr "Клікніце \"Імпарт\" Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ„Ð°Ð¹Ð»Ð°Ñž у \"Эвалюцыю\"."
+
+#: shell/importer/import.glade.h:2
+msgid "Evolution Import Assistant"
+msgstr "Дапаможнік Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ \"Эвалюцыі\""
+
+#: shell/importer/import.glade.h:3
+#, fuzzy
+msgid "Import File"
+msgstr "Імпартаваньне файлаў"
+
+#: shell/importer/import.glade.h:4
+#, fuzzy
+msgid "Import Location"
+msgstr "МейÑца:"
+
+#: shell/importer/import.glade.h:5
+#, fuzzy
+msgid "Importer Type"
+msgstr "Імпарт"
+
+#: shell/importer/import.glade.h:6
+#, fuzzy
+msgid "Select Importers"
+msgstr "Выбраць імпарт"
+
+#: shell/importer/import.glade.h:7
+#, fuzzy
+msgid "Select a File"
+msgstr "ВыбÑрыце файл"
+
+#: shell/importer/import.glade.h:8
+msgid ""
+"Welcome to the Evolution Import Assistant.\n"
+"With this assistant you will be guided through the process of\n"
+"importing external files into Evolution."
+msgstr ""
+"Вітаем у дапаможніку па імпартаваньні \"Эвалюцыі\".\n"
+"ГÑÑ‚Ñ‹ дапаможнік правÑдзе Ð²Ð°Ñ Ð¿Ð° уÑім працÑÑе імпартаваньнÑ\n"
+"вонкавых файлаў у \"Эвалюцыю\"."
+
+#: shell/importer/intelligent.c:193
+msgid "Importers"
+msgstr "Імпарт"
+
+#: shell/importer/intelligent.c:195 smime/gui/smime-ui.glade.h:28
+msgid "Import"
+msgstr "Імпарт"
+
+#: shell/importer/intelligent.c:199
+msgid "Don't import"
+msgstr "Ðе імпартаваць"
+
+#: shell/importer/intelligent.c:203
+msgid "Don't ask me again"
+msgstr "Ðе пытацца наÑтупнага разу."
+
+#: shell/importer/intelligent.c:211
+msgid "Evolution can import data from the following files:"
+msgstr "\"ЭвалюцыÑ\" можа імпартаваць даньні з наÑтупных файлаў:"
+
+#. Preview/Alpha/Beta version warning message
+#: shell/main.c:226
+#, no-c-format
+msgid ""
+"Hi. Thanks for taking the time to download this preview release\n"
+"of the Evolution groupware suite.\n"
+"\n"
+"This version of Evolution is not yet complete. It is getting close,\n"
+"but some features are either unfinished or do not work properly.\n"
+"\n"
+"If you want a stable version of Evolution, we urge you to uninstall\n"
+"this version, and install version %s instead.\n"
+"\n"
+"If you find bugs, please report them to us at bugzilla.ximian.com.\n"
+"This product comes with no warranty and is not intended for\n"
+"individuals prone to violent fits of anger.\n"
+"\n"
+"We hope that you enjoy the results of our hard work, and we\n"
+"eagerly await your contributions!\n"
+msgstr ""
+
+#: shell/main.c:250
+#, fuzzy
+msgid ""
+"Thanks\n"
+"The Evolution Team\n"
+msgstr ""
+"ДзÑкуй\n"
+"Каманда раÑпрацоўшчыкаў \"Эвалюцыі Ximian\"\n"
+
+#: shell/main.c:257
+msgid "Don't tell me again"
+msgstr "Ðе пытацца Ñž наÑтупны раз."
+
+#: shell/main.c:462
+msgid "Start Evolution activating the specified component"
+msgstr ""
+
+#: shell/main.c:464
+msgid "Start in offline mode"
+msgstr "ЗапуÑк у адлучаным Ñ€Ñжыме"
+
+#: shell/main.c:466
+msgid "Start in online mode"
+msgstr "ЗапуÑк у далучаным Ñ€Ñжыме"
+
+#: shell/main.c:469
+msgid "Forcibly shut down all evolution components"
+msgstr "ПрымуÑова выключыць уÑе кампанÑнты \"Эвалюцыі\""
+
+#: shell/main.c:473
+msgid "Forcibly re-migrate from Evolution 1.4"
+msgstr ""
+
+#: shell/main.c:476
+msgid "Send the debugging output of all components to a file."
+msgstr "ДаÑлаць вывад адладкі уÑÑ–Ñ… кампанÑнтаў у файле."
+
+#: shell/main.c:507
+#, c-format
+msgid ""
+"%s: --online and --offline cannot be used together.\n"
+" Use %s --help for more information.\n"
+msgstr ""
+"%s: --online Ñ– --offline не могуць выкарыÑтоўвацца разам.\n"
+" Use %s --help Ð´Ð»Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð´Ñ€Ð°Ð±ÑзнаÑьцÑÑž.\n"
+
+#. shell:upgrade-nospace primary
+#: shell/shell-errors.xml.h:2
+msgid "Insufficient disk space for upgrade."
+msgstr ""
+
+#. shell:upgrade-nospace secondary
+#: shell/shell-errors.xml.h:4
+msgid ""
+"Upgrading your data and settings will require upto {0} of disk space, but "
+"you only have {1} available.\n"
+"\n"
+"You will need to make more space available in your home directory before you "
+"can continue."
+msgstr ""
+
+#. shell:upgrade-failed primary
+#: shell/shell-errors.xml.h:8
+msgid ""
+"Upgrade from previous version failed:\n"
+"{0}"
+msgstr ""
+
+#. shell:upgrade-failed secondary
+#: shell/shell-errors.xml.h:11
+msgid ""
+"{1}\n"
+"\n"
+"If you choose to continue, you may not have access to some of your old "
+"data.\n"
+msgstr ""
+
+#: shell/shell-errors.xml.h:15
+#, fuzzy
+msgid "Continue"
+msgstr "ДалучÑньне"
+
+#. shell:upgrade-remove-1-4 title
+#. shell:upgrade-remove-1-4 primary
+#: shell/shell-errors.xml.h:17 shell/shell-errors.xml.h:19
+msgid "Delete old data from version {0}?"
+msgstr ""
+
+#. shell:upgrade-remove-1-4 secondary
+#: shell/shell-errors.xml.h:21
+msgid ""
+"The previous version of evolution stored its data in a different location.\n"
+"\n"
+"If you choose to remove this data, the entire contents of the \"evolution\" "
+"directory will be removed permanently. If you choose to keep this data, "
+"then you may manually remove the contents of \"evolution\" at your "
+"convenience.\n"
+msgstr ""
+
+#: shell/shell-errors.xml.h:25
+#, fuzzy
+msgid "_Remind Me Later"
+msgstr "Ðагадваньне"
+
+#: shell/shell-errors.xml.h:26
+msgid "_Keep Data"
+msgstr ""
+
+#. shell:upgrade-remove-1-4-confirm title
+#. shell:upgrade-remove-1-4-confirm primary
+#: shell/shell-errors.xml.h:28 shell/shell-errors.xml.h:30
+#, fuzzy
+msgid "Really delete old data?"
+msgstr "Сапраўды выдаліць Ñ‚Ñчку \"%s\"?"
+
+#. shell:upgrade-remove-1-4-confirm secondary
+#: shell/shell-errors.xml.h:32
+msgid ""
+"The entire contents of the \"evolution\" directory is about to be be "
+"permanently removed.\n"
+"\n"
+"It is suggested you manually verify that all of your mail, contact, and "
+"calendar data is present, and that this version of Evolution operates "
+"correctly before deleting this old data.\n"
+"\n"
+"Once deleted, you cannot downgrade to the previous version of Evolution "
+"without manual intervention.\n"
+msgstr ""
+
+#. shell:noshell title
+#. shell:noshell-reason title
+#: shell/shell-errors.xml.h:39 shell/shell-errors.xml.h:47
+#, fuzzy
+msgid "Cannot start Evolution"
+msgstr "ÐÑма доÑтупу да абалонкі \"Эвалюцыі\"."
+
+#. shell:noshell primary
+#. shell:noshell-reason primary
+#: shell/shell-errors.xml.h:41 shell/shell-errors.xml.h:49
+#, fuzzy
+msgid "Evolution can not start."
+msgstr "Дапаможнік уліковага запіÑу \"Эвалюцыі\""
+
+#. shell:noshell secondary
+#: shell/shell-errors.xml.h:43
+msgid ""
+"Your system configuration does not match your Evolution configuration.\n"
+"\n"
+"Click help for details"
+msgstr ""
+
+#. shell:noshell-reason secondary
+#: shell/shell-errors.xml.h:51
+msgid ""
+"Your system configuration does not match your Evolution configuration:\n"
+"\n"
+"{0}\n"
+"\n"
+"Click help for details."
+msgstr ""
+
+#: smime/gui/ca-trust-dialog.c:91
+#, c-format
+msgid ""
+"Certificate '%s' is a CA certificate.\n"
+"\n"
+"Edit trust settings:"
+msgstr ""
+
+#: smime/gui/cert-trust-dialog.c:145
+msgid ""
+"Because you trust the certificate authority that issued this certificate, "
+"then you trust the authenticity of this certificate unless otherwise "
+"indicated here"
+msgstr ""
+
+#: smime/gui/cert-trust-dialog.c:149
+msgid ""
+"Because you do not trust the certificate authority that issued this "
+"certificate, then you do not trust the authenticity of this certificate "
+"unless otherwise indicated here"
+msgstr ""
+
+#: smime/gui/certificate-manager.c:134 smime/gui/certificate-manager.c:142
+#: smime/gui/certificate-manager.c:375 smime/gui/certificate-manager.c:383
+#: smime/gui/certificate-manager.c:595 smime/gui/certificate-manager.c:603
+#, fuzzy
+msgid "Select a cert to import..."
+msgstr "Выбраць імпарт"
+
+#: smime/gui/certificate-manager.c:263 smime/gui/certificate-manager.c:472
+#: smime/gui/certificate-manager.c:690
+#, fuzzy
+msgid "Certificate Name"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/gui/certificate-manager.c:272 smime/gui/certificate-manager.c:490
+#, fuzzy
+msgid "Purposes"
+msgstr "Выкананьне"
+
+#: smime/gui/certificate-manager.c:281 smime/gui/smime-ui.glade.h:36
+#: smime/lib/e-cert.c:569
+msgid "Serial Number"
+msgstr ""
+
+#: smime/gui/certificate-manager.c:289
+#, fuzzy
+msgid "Expires"
+msgstr "Выраз"
+
+#: smime/gui/certificate-manager.c:481
+#, fuzzy
+msgid "E-Mail Address"
+msgstr "ÐдрÑÑа пошты:"
+
+#: smime/gui/certificate-viewer.c:334
+#, fuzzy, c-format
+msgid "Certificate Viewer: %s"
+msgstr ""
+"СÑртыфікат ÑаÑтарÑÑž: %s\n"
+"Выдавец: %s"
+
+#: smime/gui/component.c:45
+#, fuzzy, c-format
+msgid "Enter the password for `%s'"
+msgstr "Пазначце пароль Ð´Ð»Ñ %s"
+
+#. we're setting the password initially
+#: smime/gui/component.c:68
+#, fuzzy
+msgid "Enter new password for certificate database"
+msgstr "Пазначце пароль Ð´Ð»Ñ %s"
+
+#: smime/gui/component.c:70
+#, fuzzy
+msgid "Enter new password"
+msgstr "Пазначце пароль"
+
+#. FIXME: add serial no, validity date, uses
+#: smime/gui/e-cert-selector.c:121
+#, c-format
+msgid ""
+"Issued to:\n"
+" Subject: %s\n"
+msgstr ""
+
+#: smime/gui/e-cert-selector.c:122
+#, c-format
+msgid ""
+"Issued by:\n"
+" Subject: %s\n"
+msgstr ""
+
+#: smime/gui/e-cert-selector.c:169
+#, fuzzy
+msgid "Select certificate"
+msgstr "ІÑьці да пазначанай даты"
+
+#: smime/gui/smime-ui.glade.h:1
+msgid "<Not Part of Certificate>"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:2
+#, fuzzy
+msgid "<b>Certificate Fields</b>"
+msgstr "СÑртыфікат анулÑваны"
+
+#: smime/gui/smime-ui.glade.h:3
+msgid "<b>Certificate Hierarchy</b>"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:4
+#, fuzzy
+msgid "<b>Field Value</b>"
+msgstr "<b> Ðдпраўка пошты</b>"
+
+#: smime/gui/smime-ui.glade.h:5
+msgid "<b>Fingerprints</b>"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:6
+#, fuzzy
+msgid "<b>Issued By</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: smime/gui/smime-ui.glade.h:7
+#, fuzzy
+msgid "<b>Issued To</b>"
+msgstr "<b>Умоўлена:</b> "
+
+#: smime/gui/smime-ui.glade.h:8
+msgid "<b>This certificate has been verified for the following uses:</b>"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:9
+#, fuzzy
+msgid "<b>Validity</b>"
+msgstr "<b>Стан:</b>"
+
+#: smime/gui/smime-ui.glade.h:10
+#, fuzzy
+msgid "Authorities"
+msgstr "УлаÑьціваÑьці"
+
+#: smime/gui/smime-ui.glade.h:11
+msgid "Backup"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:12
+msgid "Backup All"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:13
+msgid ""
+"Before trusting this CA for any purpose, you should examine its certificate "
+"and its policy and procedures (if available)."
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:14 smime/lib/e-cert.c:1076
+#, fuzzy
+msgid "Certificate"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/gui/smime-ui.glade.h:15
+#, fuzzy
+msgid "Certificate Authority Trust"
+msgstr "СÑртыфікат ненадзейны"
+
+#: smime/gui/smime-ui.glade.h:16
+#, fuzzy
+msgid "Certificate details"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/gui/smime-ui.glade.h:17
+#, fuzzy
+msgid "Common Name (CN)"
+msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ð°Ñ Ð½Ð°Ð·Ð²Ð°"
+
+#: smime/gui/smime-ui.glade.h:18
+#, fuzzy
+msgid "Contact Certificates"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/gui/smime-ui.glade.h:20
+msgid "Do not trust the authenticity of this certificate"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:21
+msgid "Dummy window only"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:22
+#, fuzzy
+msgid "Edit"
+msgstr "_РÑдагаваньне"
+
+#: smime/gui/smime-ui.glade.h:23
+#, fuzzy
+msgid "Email Certificate Trust Settings"
+msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
+
+#: smime/gui/smime-ui.glade.h:24
+msgid "Email Recipient Certificate"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:25
+#, fuzzy
+msgid "Email Signer Certificate"
+msgstr "ÐеатрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ ÑÑртыфікаты."
+
+#: smime/gui/smime-ui.glade.h:26
+#, fuzzy
+msgid "Expires On"
+msgstr "Выраз"
+
+#: smime/gui/smime-ui.glade.h:29
+msgid "Issued On"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:30
+msgid "MD5 Fingerprint"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:31
+#, fuzzy
+msgid "Organization (O)"
+msgstr "УÑтанова"
+
+#: smime/gui/smime-ui.glade.h:32
+#, fuzzy
+msgid "Organizational Unit (OU)"
+msgstr "ПаÑада"
+
+#: smime/gui/smime-ui.glade.h:33
+msgid "SHA1 Fingerprint"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:34 smime/lib/e-cert.c:818
+msgid "SSL Client Certificate"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:35 smime/lib/e-cert.c:822
+msgid "SSL Server Certificate"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:37
+msgid "Trust the authenticity of this certificate"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:38
+msgid "Trust this CA to identify email users."
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:39
+msgid "Trust this CA to identify software developers."
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:40
+msgid "Trust this CA to identify web sites."
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:41
+#, fuzzy
+msgid "View"
+msgstr "ВыглÑд"
+
+#: smime/gui/smime-ui.glade.h:42
+msgid "You have certificates from these organizations that identify you:"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:43
+msgid ""
+"You have certificates on file that identify these certificate authorities:"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:44
+msgid "You have certificates on file that identify these people:"
+msgstr ""
+
+#: smime/gui/smime-ui.glade.h:45
+#, fuzzy
+msgid "Your Certificates"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/gui/smime-ui.glade.h:46
+msgid "_Edit CA Trust"
+msgstr ""
+
+#. XXX we shouldn't be popping up dialogs in this code.
+#: smime/lib/e-cert-db.c:612
+#, fuzzy
+msgid "Certificate already exists"
+msgstr "Ід карткі ужо Ñ–Ñнуе"
+
+#: smime/lib/e-cert.c:238 smime/lib/e-cert.c:248
+#, fuzzy
+msgid "%d/%m/%Y"
+msgstr "%d/%m/%Y"
+
+#. x509 certificate usage types
+#: smime/lib/e-cert.c:424
+#, fuzzy
+msgid "Sign"
+msgstr "ЗапуÑкаецца:"
+
+#: smime/lib/e-cert.c:425
+#, fuzzy
+msgid "Encrypt"
+msgstr "Кадаваньне PGP"
+
+#: smime/lib/e-cert.c:530
+#, fuzzy
+msgid "Version"
+msgstr "меÑÑц"
+
+#: smime/lib/e-cert.c:545
+#, fuzzy
+msgid "Version 1"
+msgstr "меÑÑц"
+
+#: smime/lib/e-cert.c:548
+#, fuzzy
+msgid "Version 2"
+msgstr "меÑÑц"
+
+#: smime/lib/e-cert.c:551
+#, fuzzy
+msgid "Version 3"
+msgstr "меÑÑц"
+
+#: smime/lib/e-cert.c:633
+msgid "PKCS #1 MD2 With RSA Encryption"
+msgstr ""
+
+#: smime/lib/e-cert.c:636
+msgid "PKCS #1 MD5 With RSA Encryption"
+msgstr ""
+
+#: smime/lib/e-cert.c:639
+msgid "PKCS #1 SHA-1 With RSA Encryption"
+msgstr ""
+
+#: smime/lib/e-cert.c:642
+#, fuzzy
+msgid "C"
+msgstr " °C"
+
+#: smime/lib/e-cert.c:645
+#, fuzzy
+msgid "CN"
+msgstr "N"
+
+#: smime/lib/e-cert.c:648
+msgid "OU"
+msgstr ""
+
+#: smime/lib/e-cert.c:651
+#, fuzzy
+msgid "O"
+msgstr "Так"
+
+#: smime/lib/e-cert.c:654
+msgid "L"
+msgstr ""
+
+#: smime/lib/e-cert.c:657
+#, fuzzy
+msgid "DN"
+msgstr "N"
+
+#: smime/lib/e-cert.c:660
+msgid "DC"
+msgstr ""
+
+#: smime/lib/e-cert.c:663
+#, fuzzy
+msgid "ST"
+msgstr "SMTP"
+
+#: smime/lib/e-cert.c:666
+msgid "PKCS #1 RSA Encryption"
+msgstr ""
+
+#: smime/lib/e-cert.c:669
+#, fuzzy
+msgid "Certificate Key Usage"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/lib/e-cert.c:672
+#, fuzzy
+msgid "Netscape Certificate Type"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/lib/e-cert.c:675
+#, fuzzy
+msgid "Certificate Authority Key Identifier"
+msgstr "СÑртыфікат ненадзейны"
+
+#: smime/lib/e-cert.c:678
+#, fuzzy
+msgid "UID"
+msgstr "Iд"
+
+#: smime/lib/e-cert.c:687
+#, c-format
+msgid "Object Identifier (%s)"
+msgstr ""
+
+#: smime/lib/e-cert.c:738
+msgid "Algorithm Identifier"
+msgstr ""
+
+#: smime/lib/e-cert.c:746
+msgid "Algorithm Parameters"
+msgstr ""
+
+#: smime/lib/e-cert.c:768
+msgid "Subject Public Key Info"
+msgstr ""
+
+#: smime/lib/e-cert.c:773
+msgid "Subject Public Key Algorithm"
+msgstr ""
+
+#: smime/lib/e-cert.c:788
+#, fuzzy
+msgid "Subject's Public Key"
+msgstr "ТÑма %s"
+
+#: smime/lib/e-cert.c:809 smime/lib/e-cert.c:858
+#, fuzzy
+msgid "Error: Unable to process extension"
+msgstr "ÐеатрымалаÑÑ Ð°Ð¿Ñ€Ð°Ñ†Ð°Ð²Ð°Ñ†ÑŒ Ñ‚Ñчку Ñпула"
+
+#: smime/lib/e-cert.c:830 smime/lib/e-cert.c:842
+msgid "Object Signer"
+msgstr ""
+
+#: smime/lib/e-cert.c:834
+#, fuzzy
+msgid "SSL Certificate Authority"
+msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
+
+#: smime/lib/e-cert.c:838
+#, fuzzy
+msgid "Email Certificate Authority"
+msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
+
+#: smime/lib/e-cert.c:866
+#, fuzzy
+msgid "Signing"
+msgstr "ЗапуÑкаецца:"
+
+#: smime/lib/e-cert.c:870
+#, fuzzy
+msgid "Non-repudiation"
+msgstr "ЗьвеÑткі адÑутнічаюць"
+
+#: smime/lib/e-cert.c:874
+msgid "Key Encipherment"
+msgstr ""
+
+#: smime/lib/e-cert.c:878
+#, fuzzy
+msgid "Data Encipherment"
+msgstr "укладаньне"
+
+#: smime/lib/e-cert.c:882
+msgid "Key Agreement"
+msgstr ""
+
+#: smime/lib/e-cert.c:886
+#, fuzzy
+msgid "Certificate Signer"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: smime/lib/e-cert.c:890
+msgid "CRL Signer"
+msgstr ""
+
+#: smime/lib/e-cert.c:938
+#, fuzzy
+msgid "Critical"
+msgstr "ХарватыÑ"
+
+#: smime/lib/e-cert.c:940 smime/lib/e-cert.c:943
+msgid "Not Critical"
+msgstr ""
+
+#: smime/lib/e-cert.c:964
+#, fuzzy
+msgid "Extensions"
+msgstr "Выраз"
+
+#: smime/lib/e-cert.c:1035
+#, fuzzy, c-format
+msgid "%s = %s"
+msgstr "%s на %s"
+
+#: smime/lib/e-cert.c:1091 smime/lib/e-cert.c:1211
+#, fuzzy
+msgid "Certificate Signature Algorithm"
+msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката памылковы"
+
+#: smime/lib/e-cert.c:1100
+#, fuzzy
+msgid "Issuer"
+msgstr "УÑтавіць"
+
+#: smime/lib/e-cert.c:1154
+msgid "Issuer Unique ID"
+msgstr ""
+
+#: smime/lib/e-cert.c:1173
+#, fuzzy
+msgid "Subject Unique ID"
+msgstr "ТÑма %s"
+
+#: smime/lib/e-cert.c:1216
+#, fuzzy
+msgid "Certificate Signature Value"
+msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ ÑÑртыфіката памылковы"
+
+#: smime/lib/e-pkcs12.c:263
+msgid "PKCS12 File Password"
+msgstr ""
+
+#: smime/lib/e-pkcs12.c:263
+#, fuzzy
+msgid "Enter password for PKCS12 file:"
+msgstr "Пазначце пароль Ð´Ð»Ñ %s"
+
+#: smime/lib/e-pkcs12.c:362
+#, fuzzy
+msgid "Imported Certificate"
+msgstr "_Ід ÑÑртыфіката:"
+
+#: tools/evolution-launch-composer.c:324
+msgid "An attachment to add."
+msgstr "Укладаньне Ð´Ð»Ñ Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ."
+
+#: tools/evolution-launch-composer.c:325
+msgid "Content type of the attachment."
+msgstr "Тып зьмеÑта укладаньнÑ."
+
+#: tools/evolution-launch-composer.c:326
+msgid "The filename to display in the mail."
+msgstr "Ðазва файла Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñž ліÑьце."
+
+#: tools/evolution-launch-composer.c:327
+msgid "Description of the attachment."
+msgstr "ÐпіÑаньне укладаньнÑ."
+
+#: tools/evolution-launch-composer.c:328
+msgid "Mark attachment to be shown inline by default."
+msgstr "Дапомна пазначаць укладаньне Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑžÐ±ÑƒÐ´Ð°Ð²Ð°Ð½Ñ‹Ð¼."
+
+#: tools/evolution-launch-composer.c:329
+msgid "Default subject for the message."
+msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ð°Ñ Ñ‚Ñма паведамленьнÑ."
+
+#. This most likely means that KILL_PROCESS_CMD wasn't
+#. * found, so just bail completely.
+#.
+#: tools/killev.c:61
+#, c-format
+msgid "Could not execute '%s': %s\n"
+msgstr "Ðемагчыма выканаць '%s': %s\n"
+
+#: tools/killev.c:76
+#, c-format
+msgid "Shutting down %s (%s)\n"
+msgstr "ВыключÑньне %s (%s)\n"
+
+#: ui/evolution-addressbook.xml.h:3
+msgid "Copy Contact(s) to Another Folder..."
+msgstr "КапіÑваць кантакты у іншую Ñ‚Ñчку..."
+
+#: ui/evolution-addressbook.xml.h:4 ui/evolution-calendar.xml.h:2
+msgid "Copy the selection"
+msgstr "КапіÑваць вылучÑньне"
+
+#: ui/evolution-addressbook.xml.h:5
+msgid "Copy to Folder..."
+msgstr "КапіÑваць у Ñ‚Ñчку..."
+
+#: ui/evolution-addressbook.xml.h:7 ui/evolution-calendar.xml.h:3
+msgid "Cut the selection"
+msgstr "Выразаць вылучÑньне"
+
+#: ui/evolution-addressbook.xml.h:9
+msgid "Delete selected contacts"
+msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#: ui/evolution-addressbook.xml.h:11
+msgid "Move Contact(s) to Another Folder..."
+msgstr "ПерамÑÑьціць кантакты у іншую Ñ‚Ñчку"
+
+#: ui/evolution-addressbook.xml.h:12
+msgid "Move to Folder..."
+msgstr "ПерамÑÑьціць у Ñ‚Ñчку..."
+
+#: ui/evolution-addressbook.xml.h:14 ui/evolution-calendar.xml.h:16
+msgid "Paste the clipboard"
+msgstr "УÑтавіць з буфÑра абмену"
+
+#: ui/evolution-addressbook.xml.h:15
+msgid "Previews the contacts to be printed"
+msgstr "Прагледзіць выглÑд кантактаў у друку"
+
+#: ui/evolution-addressbook.xml.h:17 ui/evolution-calendar.xml.h:20
+#: ui/evolution-comp-editor.xml.h:9 ui/evolution-mail-message.xml.h:81
+#: ui/evolution-tasks.xml.h:15
+msgid "Print Pre_view"
+msgstr "_ПерадпраглÑд друку"
+
+#: ui/evolution-addressbook.xml.h:18
+msgid "Print selected contacts"
+msgstr "Друкаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#: ui/evolution-addressbook.xml.h:20
+msgid "Save selected contacts as a VCard."
+msgstr "Захаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹ Ñк візытоўку (VCard)"
+
+#: ui/evolution-addressbook.xml.h:21
+msgid "Select All"
+msgstr "Вылучыць уÑÑ‘"
+
+#: ui/evolution-addressbook.xml.h:22
+msgid "Select all contacts"
+msgstr "Вылучыць уÑе кантакты"
+
+#: ui/evolution-addressbook.xml.h:23
+#, fuzzy
+msgid "Send a message to the selected contacts."
+msgstr "ДаÑлаць паведамленьні аÑобам вылучаных кантактаў."
+
+#: ui/evolution-addressbook.xml.h:24
+msgid "Send message to contact"
+msgstr "ДаÑлаць паведамленьне кантактанае аÑобе"
+
+#: ui/evolution-addressbook.xml.h:25
+msgid "Send selected contacts to another person."
+msgstr "ДаÑлаць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹ іншай аÑобе."
+
+#: ui/evolution-addressbook.xml.h:26
+#, fuzzy
+msgid "Show contact preview window"
+msgstr "Паказаць акно папÑÑ€ÑднÑга праглÑду"
+
+#: ui/evolution-addressbook.xml.h:27
+msgid "Stop"
+msgstr "Спыніць"
+
+#: ui/evolution-addressbook.xml.h:28
+msgid "Stop Loading"
+msgstr "Спыніць загрузку"
+
+#: ui/evolution-addressbook.xml.h:29
+msgid "View the current contact"
+msgstr "Прагледзіць бÑгучы кантакт"
+
+#: ui/evolution-addressbook.xml.h:30 ui/evolution-calendar.xml.h:38
+#: ui/evolution-comp-editor.xml.h:16 ui/evolution-contact-editor.xml.h:13
+#: ui/evolution-contact-list-editor.xml.h:11
+#: ui/evolution-event-editor.xml.h:11 ui/evolution-mail-global.xml.h:15
+#: ui/evolution-mail-list.xml.h:23 ui/evolution-mail-message.xml.h:107
+#: ui/evolution-mail-messagedisplay.xml.h:4 ui/evolution-task-editor.xml.h:9
+#: ui/evolution-tasks.xml.h:19 ui/evolution.xml.h:27
+msgid "_Actions"
+msgstr "_ДзеÑньні"
+
+#: ui/evolution-addressbook.xml.h:35 ui/evolution-contact-editor.xml.h:16
+msgid "_Forward Contact..."
+msgstr "_ПерадаÑлаць кантакт..."
+
+#: ui/evolution-addressbook.xml.h:36
+msgid "_Move to Folder..."
+msgstr "ПерамÑÑьціць у Ñ‚Ñчку..."
+
+#: ui/evolution-addressbook.xml.h:39 ui/evolution-mail-global.xml.h:17
+msgid "_Preview Pane"
+msgstr "_Ðкно перадпраглÑду"
+
+#: ui/evolution-addressbook.xml.h:41
+#, fuzzy
+msgid "_Save as VCard..."
+msgstr "Захаваць Ñк візытоўку"
+
+#: ui/evolution-addressbook.xml.h:42
+msgid "_Select All"
+msgstr "Вылучыць уÑÑ‘"
+
+#: ui/evolution-addressbook.xml.h:43
+msgid "_Send Message to Contact..."
+msgstr "ДаÑлаць паведамленьне кантактанае аÑобе..."
+
+#: ui/evolution-calendar.xml.h:4
+msgid "Day"
+msgstr "Дзень"
+
+#: ui/evolution-calendar.xml.h:6
+msgid "Delete All Occurrences"
+msgstr "Выдаліць уÑе падзеі"
+
+#: ui/evolution-calendar.xml.h:7
+msgid "Delete the appointment"
+msgstr "Выдаліць ÑуÑÑ‚Ñ€Ñчу"
+
+#: ui/evolution-calendar.xml.h:8
+msgid "Delete this Occurrence"
+msgstr "Выдаліць гÑтую падзею"
+
+#: ui/evolution-calendar.xml.h:9
+msgid "Delete this occurrence"
+msgstr "Выдаліць гÑтую падзею"
+
+#: ui/evolution-calendar.xml.h:10
+msgid "Go To"
+msgstr "ПерайÑьці"
+
+#: ui/evolution-calendar.xml.h:11
+msgid "Go back"
+msgstr "Ð’Ñрнуцца назад"
+
+#: ui/evolution-calendar.xml.h:12
+msgid "Go forward"
+msgstr "ІÑьці далей"
+
+#: ui/evolution-calendar.xml.h:13
+msgid "List"
+msgstr "СьпіÑ"
+
+#: ui/evolution-calendar.xml.h:14
+msgid "Month"
+msgstr "МеÑÑц"
+
+#: ui/evolution-calendar.xml.h:15 ui/evolution-mail-message.xml.h:65
+msgid "Next"
+msgstr "ÐаÑтупнае"
+
+#: ui/evolution-calendar.xml.h:17
+msgid "Previews the calendar to be printed"
+msgstr "Прагледзіць выглÑд калÑндара Ñž друку"
+
+#: ui/evolution-calendar.xml.h:18 ui/evolution-mail-message.xml.h:79
+msgid "Previous"
+msgstr "ПапÑÑ€ÑднÑе"
+
+#: ui/evolution-calendar.xml.h:21
+msgid "Print this calendar"
+msgstr "Ðадрукаваць гÑÑ‚Ñ‹ калÑндар"
+
+#: ui/evolution-calendar.xml.h:22
+msgid "Publish Free/Busy information for this calendar"
+msgstr "Ðпублікаваць інфармацыю \"Вольны/ЗанÑÑ‚Ñ‹\" Ð´Ð»Ñ Ð³Ñтага калÑндара"
+
+#: ui/evolution-calendar.xml.h:23 ui/evolution-tasks.xml.h:17
+#, fuzzy
+msgid "Purg_e"
+msgstr "Старонка"
+
+#: ui/evolution-calendar.xml.h:24
+#, fuzzy
+msgid "Purge old appointments and meetings"
+msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð°Ñ Ñ‚Ñчка утрымлівае ÑуÑÑ‚Ñ€Ñчы Ñ– падзеі"
+
+#: ui/evolution-calendar.xml.h:25
+#, fuzzy
+msgid "Select _Date"
+msgstr "Выбар імёнаў"
+
+#: ui/evolution-calendar.xml.h:27
+#, fuzzy
+msgid "Select a specific date"
+msgstr "ІÑьці да пазначанай даты"
+
+#: ui/evolution-calendar.xml.h:28
+#, fuzzy
+msgid "Select today"
+msgstr "Выбраць Ñ‚Ñчку"
+
+#: ui/evolution-calendar.xml.h:29
+#, fuzzy
+msgid "Show as list"
+msgstr "Паказаць падрабÑзнаÑьці"
+
+#: ui/evolution-calendar.xml.h:30
+msgid "Show one day"
+msgstr "Паказаць адзень"
+
+#: ui/evolution-calendar.xml.h:31
+msgid "Show one month"
+msgstr "Паказаць адзін меÑÑц"
+
+#: ui/evolution-calendar.xml.h:32
+msgid "Show one week"
+msgstr "Паказаць адзін тыдзень"
+
+#: ui/evolution-calendar.xml.h:33
+msgid "Show the working week"
+msgstr "Паказаць працоўны тыдзень"
+
+#: ui/evolution-calendar.xml.h:34 widgets/misc/e-cell-date-edit.c:249
+#: widgets/misc/e-dateedit.c:435
+msgid "Today"
+msgstr "СёньнÑ"
+
+#: ui/evolution-calendar.xml.h:35
+#, fuzzy
+msgid "View the current appointment"
+msgstr "Прагледзіць бÑгучы кантакт"
+
+#: ui/evolution-calendar.xml.h:36
+msgid "Week"
+msgstr "Тыдзень"
+
+#: ui/evolution-calendar.xml.h:37
+msgid "Work Week"
+msgstr "Працоўны тыдзень"
+
+#: ui/evolution-calendar.xml.h:42
+#, fuzzy
+msgid "_Open Appointment"
+msgstr "_СуÑÑ‚Ñ€Ñча"
+
+#: ui/evolution-comp-editor.xml.h:1 ui/evolution-contact-editor.xml.h:1
+#: ui/evolution-contact-list-editor.xml.h:1
+#: ui/evolution-signature-editor.xml.h:1
+msgid "C_lose"
+msgstr "_Закрыць"
+
+#: ui/evolution-comp-editor.xml.h:2 ui/evolution-contact-editor.xml.h:2
+#: ui/evolution-contact-list-editor.xml.h:2
+#: ui/evolution-mail-messagedisplay.xml.h:1
+#: ui/evolution-message-composer.xml.h:3 ui/evolution-signature-editor.xml.h:2
+#: ui/evolution.xml.h:4
+msgid "Close"
+msgstr "Закрыць"
+
+#: ui/evolution-comp-editor.xml.h:3
+msgid "Close this item"
+msgstr "Закрыць гÑÑ‚Ñ‹ ÑлемÑнт"
+
+#: ui/evolution-comp-editor.xml.h:5 ui/evolution-contact-editor.xml.h:4
+msgid "Delete this item"
+msgstr "Выдаліць гÑÑ‚Ñ‹ ÑлемÑнт"
+
+#: ui/evolution-comp-editor.xml.h:6 ui/evolution-event-editor.xml.h:5
+#: ui/evolution-mail-messagedisplay.xml.h:3 ui/evolution.xml.h:13
+msgid "Main toolbar"
+msgstr "ÐœÐ°Ñ Ð¿Ð°Ð½ÑÐ»Ñ Ñ–Ð½ÑтрумÑнта"
+
+#: ui/evolution-comp-editor.xml.h:7
+msgid "Preview the printed item"
+msgstr "Прагледзіць выглÑд ÑлемÑнта Ñž друку"
+
+#: ui/evolution-comp-editor.xml.h:10 ui/evolution-contact-editor.xml.h:7
+msgid "Print this item"
+msgstr "Ðадрукаваць гÑÑ‚Ñ‹ ÑлемÑнт"
+
+#: ui/evolution-comp-editor.xml.h:11 ui/evolution-contact-editor.xml.h:8
+#: ui/evolution-contact-list-editor.xml.h:5
+#: ui/evolution-message-composer.xml.h:18
+msgid "Save _As..."
+msgstr "Захаваць _Ñк..."
+
+#: ui/evolution-comp-editor.xml.h:12 ui/evolution-contact-editor.xml.h:9
+#: ui/evolution-contact-list-editor.xml.h:6
+#: ui/evolution-signature-editor.xml.h:7
+msgid "Save and Close"
+msgstr "Захаваць і закрыць"
+
+#: ui/evolution-comp-editor.xml.h:13 ui/evolution-contact-editor.xml.h:10
+#: ui/evolution-contact-list-editor.xml.h:7
+#: ui/evolution-signature-editor.xml.h:8
+#, fuzzy
+msgid "Save and _Close"
+msgstr "Захаваць і закрыць"
+
+#: ui/evolution-comp-editor.xml.h:14
+msgid "Save the item and close the dialog box"
+msgstr "Захаваць гÑÑ‚Ñ‹ ÑлемÑнт Ñ– закрыць дыÑлёг"
+
+#: ui/evolution-comp-editor.xml.h:15
+msgid "Save this item to disk"
+msgstr "Захаваць гÑÑ‚Ñ‹ ÑлемÑнт на дыÑк"
+
+#: ui/evolution-comp-editor.xml.h:18 ui/evolution-contact-editor.xml.h:15
+#: ui/evolution-contact-list-editor.xml.h:13
+#: ui/evolution-mail-messagedisplay.xml.h:7
+#: ui/evolution-message-composer.xml.h:44
+#: ui/evolution-signature-editor.xml.h:13 ui/evolution-subscribe.xml.h:11
+#: ui/evolution.xml.h:29
+msgid "_File"
+msgstr "_Файл"
+
+#: ui/evolution-composer-entries.xml.h:1
+msgid "Copy selected text to the clipboard"
+msgstr "КапіÑваць вылучаны Ñ‚ÑкÑÑ‚ у буфÑÑ€ абмену"
+
+#: ui/evolution-composer-entries.xml.h:2 ui/evolution-mail-message.xml.h:21
+msgid "Cu_t"
+msgstr "_Выразаць"
+
+#: ui/evolution-composer-entries.xml.h:3
+msgid "Cut selected text to the clipboard"
+msgstr "УÑтавіць вылучаны Ñ‚ÑкÑÑ‚ з буфÑра абмену"
+
+#: ui/evolution-composer-entries.xml.h:4
+msgid "Paste text from the clipboard"
+msgstr "УÑтавіць Ñ‚ÑкÑÑ‚ з буфÑра абмену"
+
+#: ui/evolution-composer-entries.xml.h:5 ui/evolution-mail-list.xml.h:13
+#: ui/evolution-subscribe.xml.h:6
+msgid "Select _All"
+msgstr "Вылучыць _уÑÑ‘"
+
+#: ui/evolution-composer-entries.xml.h:6
+msgid "Select all text"
+msgstr "Вылучыць увеÑÑŒ Ñ‚ÑкÑÑ‚"
+
+#: ui/evolution-contact-editor.xml.h:6
+msgid "Print En_velope..."
+msgstr "Друкаваць _капÑрту..."
+
+#: ui/evolution-contact-editor.xml.h:11
+msgid "Save the contact and close the dialog box"
+msgstr "Захаваць кантакт Ñ– закрыць дыÑлёг"
+
+#: ui/evolution-contact-editor.xml.h:12
+msgid "Send _Message to Contact..."
+msgstr "ДаÑлаць паведамленьне кантактнае аÑобе..."
+
+#: ui/evolution-contact-editor.xml.h:18
+#: ui/evolution-contact-list-editor.xml.h:14
+#: ui/evolution-message-composer.xml.h:50
+#: ui/evolution-signature-editor.xml.h:15
+msgid "_Save"
+msgstr "_Захаваць"
+
+#: ui/evolution-contact-list-editor.xml.h:4
+msgid "Delete this list"
+msgstr "Выдаліць гÑÑ‚Ñ‹ ÑьпіÑ"
+
+#: ui/evolution-contact-list-editor.xml.h:8
+msgid "Save the list and close the dialog box"
+msgstr "Захаваць ÑÑŒÐ¿Ñ–Ñ Ñ– закрыць дыÑлёг"
+
+#: ui/evolution-contact-list-editor.xml.h:9
+msgid "Se_nd list to other..."
+msgstr "Да_Ñлаць ÑÑŒÐ¿Ñ–Ñ Ñ–Ð½ÑˆÑ‹Ð¼..."
+
+#: ui/evolution-contact-list-editor.xml.h:10
+msgid "Send _message to list..."
+msgstr "ДаÑлаць паве_дамленьне Ñž ÑьпіÑ..."
+
+#: ui/evolution-contact-list-editor.xml.h:12
+#, fuzzy
+msgid "_Delete..."
+msgstr "Выдаліць..."
+
+#: ui/evolution-event-editor.xml.h:1
+msgid "Cancel Mee_ting"
+msgstr "ÐдмÑніць на_раду"
+
+#: ui/evolution-event-editor.xml.h:2
+msgid "Cancel the meeting for this item"
+msgstr "ÐдмÑніць нараду Ð´Ð»Ñ Ð³Ñтага ÑлемÑнта"
+
+#: ui/evolution-event-editor.xml.h:3 ui/evolution-task-editor.xml.h:5
+msgid "Forward as i_Calendar"
+msgstr "_ПерадаÑлаць Ñк iCalendar"
+
+#: ui/evolution-event-editor.xml.h:4 ui/evolution-task-editor.xml.h:6
+msgid "Forward this item via email"
+msgstr "ПерадаÑлаць гÑÑ‚Ñ‹ ÑлемÑнт праз пошту"
+
+#: ui/evolution-event-editor.xml.h:6
+msgid "Meeting"
+msgstr "Ðарада"
+
+#: ui/evolution-event-editor.xml.h:7
+msgid "Obtain the latest meeting information"
+msgstr "Ðтрымаць апошнюю інфармацыю аб нарадзе"
+
+#: ui/evolution-event-editor.xml.h:8
+msgid "Re_fresh Meeting"
+msgstr "Ðбнавіць _нараду"
+
+#: ui/evolution-event-editor.xml.h:9
+msgid "Schedule _Meeting"
+msgstr "_ЗаплÑнаваць нараду"
+
+#: ui/evolution-event-editor.xml.h:10
+msgid "Schedule a meeting for this item"
+msgstr "ЗаплÑнаваць нараду Ð´Ð»Ñ Ð³Ñтага ÑлемÑнта"
+
+#: ui/evolution-executive-summary.xml.h:1
+msgid "Customize My Evolution"
+msgstr "Ðаладзіць \"Маю Эвалюцыю\""
+
+#: ui/evolution-mail-global.xml.h:2
+msgid "Cancel the current mail operation"
+msgstr "ÐдмÑніць бÑгучую паштовую апÑрацыю"
+
+#: ui/evolution-mail-global.xml.h:3
+msgid "Compose _New Message"
+msgstr "Стварыць _новае паведамленьне"
+
+#: ui/evolution-mail-global.xml.h:4
+msgid "Create or edit rules for filtering new mail"
+msgstr "Стварыць ці Ñ€Ñдагаваць правілы Ð´Ð»Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð½Ð¾Ð²Ñ‹Ñ… ліÑтоў"
+
+#: ui/evolution-mail-global.xml.h:5
+msgid "Create or edit virtual folder definitions"
+msgstr "Стварыць ці Ñ€Ñдагаваць вызначÑньні віртуальнае Ñ‚Ñчкі"
+
+#: ui/evolution-mail-global.xml.h:6
+msgid "Empty _Trash"
+msgstr "СпуÑтошыць _Ñьметніцу"
+
+#: ui/evolution-mail-global.xml.h:7
+msgid "Open a window for composing a mail message"
+msgstr "Ðдкрыць акно Ð´Ð»Ñ ÑтварÑÐ½ÑŒÐ½Ñ Ð¿Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð³Ð° паведамленьнÑ"
+
+#: ui/evolution-mail-global.xml.h:8
+msgid "Permanently remove all deleted messages from all folders"
+msgstr "Зьнішчыць уÑе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– з уÑÑ–Ñ… Ñ‚Ñчак"
+
+#: ui/evolution-mail-global.xml.h:9
+#, fuzzy
+msgid "Post Ne_w Message"
+msgstr "ДаÑлаць новае паведамленьне"
+
+#: ui/evolution-mail-global.xml.h:10
+msgid "Post a message to a Public folder"
+msgstr "ДаÑлаць паведамленьне Ñž публічную Ñ‚Ñчку"
+
+#: ui/evolution-mail-global.xml.h:11
+msgid "S_ubscribe to Folders..."
+msgstr "ПадпіÑваньне на Ñ‚Ñчкі..."
+
+#: ui/evolution-mail-global.xml.h:12
+msgid "Show message preview window"
+msgstr "Паказаць акно папÑÑ€ÑднÑга праглÑду"
+
+#: ui/evolution-mail-global.xml.h:13
+msgid "Subscribe or unsubscribe to folders on remote servers"
+msgstr ""
+
+#: ui/evolution-mail-global.xml.h:14
+msgid "Virtual Folder _Editor..."
+msgstr "_РÑдактар Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчак..."
+
+#: ui/evolution-mail-global.xml.h:16
+msgid "_Filters..."
+msgstr "_Фільтары..."
+
+#: ui/evolution-mail-list.xml.h:1
+msgid "Change the properties of this folder"
+msgstr "ЗьмÑніць улаÑьціваÑьці гÑтае Ñ‚Ñчкі"
+
+#: ui/evolution-mail-list.xml.h:2 ui/evolution-mail-message.xml.h:10
+msgid "Copy selected message(s) to the clipboard"
+msgstr "КапіÑваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– у буфÑÑ€ абмену"
+
+#: ui/evolution-mail-list.xml.h:3 ui/evolution-mail-message.xml.h:22
+msgid "Cut selected message(s) to the clipboard"
+msgstr "Выразаць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– у буфÑÑ€ абмену"
+
+#: ui/evolution-mail-list.xml.h:4
+#, fuzzy
+msgid "E_xpunge"
+msgstr "_ВыкрÑÑьліць"
+
+#: ui/evolution-mail-list.xml.h:5
+msgid "Hide S_elected Messages"
+msgstr "Схаваць _Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: ui/evolution-mail-list.xml.h:6
+msgid "Hide _Deleted Messages"
+msgstr "Схаваць вы_Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: ui/evolution-mail-list.xml.h:7
+msgid "Hide _Read Messages"
+msgstr "Схаваць _Ñ‡Ñ‹Ñ‚Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: ui/evolution-mail-list.xml.h:8
+msgid ""
+"Hide deleted messages rather than displaying them with a line through them"
+msgstr ""
+
+#: ui/evolution-mail-list.xml.h:9
+#, fuzzy
+msgid "Mark All as _Read"
+msgstr "Пазначыць уÑÑ‘ Ñк _чытанае"
+
+#: ui/evolution-mail-list.xml.h:10
+msgid "Mark all visible messages as read"
+msgstr "Пазначыць уÑе Ð±Ð°Ñ‡Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк чытанае"
+
+#: ui/evolution-mail-list.xml.h:11 ui/evolution-mail-message.xml.h:74
+msgid "Paste message(s) from the clipboard"
+msgstr "УÑтавіць паведамленьне(Ñ–) з буфÑра абмену"
+
+#: ui/evolution-mail-list.xml.h:12
+msgid "Permanently remove all deleted messages from this folder"
+msgstr "Зьнішчыць уÑе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– з гÑтае Ñ‚Ñчкі"
+
+#: ui/evolution-mail-list.xml.h:14
+msgid "Select _Thread"
+msgstr "Вылучыць абмеркаваньне Ñ‚Ñмы"
+
+#: ui/evolution-mail-list.xml.h:15
+msgid "Select all and only the messages that are not currently selected"
+msgstr ""
+
+#: ui/evolution-mail-list.xml.h:16
+msgid "Select all messages in the same thread as the selected message"
+msgstr "Вылучыць уÑе паведамленьні з абмеркаваньнем гÑтае Ñ‚Ñмы"
+
+#: ui/evolution-mail-list.xml.h:17
+msgid "Select all visible messages"
+msgstr "Вылучыць уÑе Ð±Ð°Ñ‡Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: ui/evolution-mail-list.xml.h:18
+msgid "Sh_ow Hidden Messages"
+msgstr "Паказаць ÑÑ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: ui/evolution-mail-list.xml.h:19
+msgid "Show messages that have been temporarily hidden"
+msgstr "Паказаць паведамленьні ÑÐºÑ–Ñ Ð±Ñ‹Ð»Ñ– чаÑова ÑхаваныÑ"
+
+#: ui/evolution-mail-list.xml.h:20
+msgid "Temporarily hide all messages that have already been read"
+msgstr "ЧаÑова Ñхаваць уÑе паведамленьні ÑÐºÑ–Ñ ÑžÐ¶Ð¾ былі прачытаны"
+
+#: ui/evolution-mail-list.xml.h:21
+msgid "Temporarily hide the selected messages"
+msgstr "ЧаÑова Ñхаваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: ui/evolution-mail-list.xml.h:22
+msgid "Threaded Message list"
+msgstr "Паведамленьні Ñк абмеркаваньне Ñ‚Ñмы"
+
+#: ui/evolution-mail-list.xml.h:25
+msgid "_Folder"
+msgstr "_ТÑчка"
+
+#: ui/evolution-mail-list.xml.h:26 ui/evolution-subscribe.xml.h:12
+msgid "_Invert Selection"
+msgstr "_Інвертаваць вылучÑньне"
+
+#: ui/evolution-mail-list.xml.h:28
+msgid "_Threaded Message List"
+msgstr "Паведамленьні Ñк абмеркаваньне Ñ‚Ñмы"
+
+#: ui/evolution-mail-message.xml.h:1
+#, fuzzy
+msgid "A_dd Sender to Address Book"
+msgstr "_Дадаць адпраўлÑльніка Ñž кнігу адрÑÑаў"
+
+#: ui/evolution-mail-message.xml.h:2
+msgid "A_pply Filters"
+msgstr "_Ужыць фільтары"
+
+#: ui/evolution-mail-message.xml.h:3
+#, fuzzy
+msgid "Add Sender to Address Book"
+msgstr "Дадаць адпраўлÑльніка Ñž кнігу адрÑÑаў"
+
+#: ui/evolution-mail-message.xml.h:4
+msgid "Apply filter rules to the selected messages"
+msgstr "Ужыць правіла фільтрацыі да вылучаных паведамленьнÑÑž"
+
+#: ui/evolution-mail-message.xml.h:5
+#, fuzzy
+msgid "Caret _Mode"
+msgstr "МадÑль Ñ‚ÑкÑта"
+
+#: ui/evolution-mail-message.xml.h:6
+msgid "Compose a reply to all of the recipients of the selected message"
+msgstr "Стварыць адказ уÑім атрымоўцам вылучанага паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:7
+msgid "Compose a reply to the mailing list of the selected message"
+msgstr "Стварыць адказ у ÑÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі вылучанага паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:8
+msgid "Compose a reply to the sender of the selected message"
+msgstr "Стварыць адказ адпраўлÑльніку вылучанага паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:11
+msgid "Copy selected messages to another folder"
+msgstr "КапіÑваць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñž іншую Ñ‚Ñчку"
+
+#: ui/evolution-mail-message.xml.h:12
+msgid "Create _Virtual Folder From Message"
+msgstr "Стварыць _віртуальную Ñ‚Ñчку з паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:13
+msgid "Create a rule to filter messages from this sender"
+msgstr ""
+"Стварыць правіла Ð´Ð»Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ‹Ñ– паведамленьнÑÑž ад гÑтага адпраўлÑльніка"
+
+#: ui/evolution-mail-message.xml.h:14
+msgid "Create a rule to filter messages to these recipients"
+msgstr ""
+"Стварыць правіла Ð´Ð»Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ‹Ñ– паведамленьнÑÑž да гÑÑ‚Ñ‹Ñ… адпраўлÑльнікаў"
+
+#: ui/evolution-mail-message.xml.h:15
+msgid "Create a rule to filter messages to this mailing list"
+msgstr ""
+"Стварыць правіла Ð´Ð»Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ‹Ñ– паведамленьнÑÑž да гÑтага ÑьпіÑу раÑÑылкі"
+
+#: ui/evolution-mail-message.xml.h:16
+msgid "Create a rule to filter messages with this subject"
+msgstr "Стварыць правіла Ð´Ð»Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ‹Ñ–Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½ÑÑž з гÑтай Ñ‚Ñмай"
+
+#: ui/evolution-mail-message.xml.h:17
+msgid "Create a virtual folder for these recipients"
+msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³ÑÑ‚Ñ‹Ñ… атрымоўцаў"
+
+#: ui/evolution-mail-message.xml.h:18
+msgid "Create a virtual folder for this mailing list"
+msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³Ñтага ÑьпіÑу раÑÑылкі"
+
+#: ui/evolution-mail-message.xml.h:19
+msgid "Create a virtual folder for this sender"
+msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³Ñтага адпраўлÑльніка"
+
+#: ui/evolution-mail-message.xml.h:20
+msgid "Create a virtual folder for this subject"
+msgstr "Стварыць віртуальную Ñ‚Ñчку Ð´Ð»Ñ Ð³Ñтае Ñ‚Ñмы"
+
+#: ui/evolution-mail-message.xml.h:23
+msgid "Decrease the text size"
+msgstr "Паменшыць памер Ñ‚ÑкÑта"
+
+#: ui/evolution-mail-message.xml.h:25
+msgid "Display the next important message"
+msgstr "ÐдлюÑтраваць наÑтупнае важнае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:26
+msgid "Display the next message"
+msgstr "ÐдлюÑтраваць наÑтупнае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:27
+msgid "Display the next unread message"
+msgstr "ÐдлюÑтраваць наÑтупнае нечытанае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:28
+msgid "Display the next unread thread"
+msgstr "ÐдлюÑтраваць наÑтупнае нечытанае абмеркаваньне Ñ‚Ñмы"
+
+#: ui/evolution-mail-message.xml.h:29
+msgid "Display the previous important message"
+msgstr "ÐдлюÑтраваць папÑÑ€ÑднÑе важнае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:30
+msgid "Display the previous message"
+msgstr "ÐдлюÑтраваць папÑÑ€ÑднÑе паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:31
+msgid "Display the previous unread message"
+msgstr "ÐдлюÑтраваць папÑÑ€ÑднÑе нечытанае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:32
+#, fuzzy
+msgid "F_orward As..."
+msgstr "ПерадаÑлаць"
+
+#: ui/evolution-mail-message.xml.h:33
+#, fuzzy
+msgid "Filter _Junk"
+msgstr "Правілы філтра"
+
+#: ui/evolution-mail-message.xml.h:34
+msgid "Filter on Mailing _List..."
+msgstr "Фільтар па ÑьпіÑе раÑÑылкі..."
+
+#: ui/evolution-mail-message.xml.h:35
+msgid "Filter on Se_nder..."
+msgstr "Фільтар па адпраўлÑльніку..."
+
+#: ui/evolution-mail-message.xml.h:36
+msgid "Filter on _Recipients..."
+msgstr "Фільтар па атрымоўцах..."
+
+#: ui/evolution-mail-message.xml.h:37
+msgid "Filter on _Subject..."
+msgstr "Фільтар па Ñ‚Ñме..."
+
+#: ui/evolution-mail-message.xml.h:38
+#, fuzzy
+msgid "Filter the selected messages for junk status"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк нÑважныÑ"
+
+#: ui/evolution-mail-message.xml.h:39
+msgid "Flag selected message(s) for follow-up"
+msgstr ""
+
+#: ui/evolution-mail-message.xml.h:40
+msgid "Follow _Up..."
+msgstr "\"Да выкананьнÑ\"..."
+
+#: ui/evolution-mail-message.xml.h:41
+msgid "Force images in HTML mail to be loaded"
+msgstr "ПрымуÑова загружаць відарыÑÑ‹ Ñž HTML ліÑтах"
+
+#: ui/evolution-mail-message.xml.h:43
+msgid "Forward the selected message in the body of a new message"
+msgstr "ПерадаÑлаць вылучанае паведамленьне Ñž целе новага паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:44
+msgid "Forward the selected message quoted like a reply"
+msgstr "ПерадаÑлаць вылучанае паведамленьне цытаваным Ñк адказ"
+
+#: ui/evolution-mail-message.xml.h:45
+msgid "Forward the selected message to someone"
+msgstr "ПерадаÑлаць вылучанае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:46
+msgid "Forward the selected message to someone as an attachment"
+msgstr "ПерадаÑлаць вылучанае паведамленьне Ñк укладаньне"
+
+#: ui/evolution-mail-message.xml.h:47
+msgid "Increase the text size"
+msgstr "ПавÑлічыць памер Ñ‚ÑкÑта"
+
+#: ui/evolution-mail-message.xml.h:49
+msgid "Load _Images"
+msgstr "Загрузіць відарыÑÑ‹"
+
+#: ui/evolution-mail-message.xml.h:51
+msgid "Mark as I_mportant"
+msgstr "Пазначыць Ñк важнае"
+
+#: ui/evolution-mail-message.xml.h:52
+msgid "Mark as U_nread"
+msgstr "Пазначыць Ñк нечытанае"
+
+#: ui/evolution-mail-message.xml.h:53
+msgid "Mark as Unimp_ortant"
+msgstr "Пазначыць Ñк нÑважнае"
+
+#: ui/evolution-mail-message.xml.h:56
+msgid "Mark the selected message(s) as having been read"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк \"да чытаньнÑ\""
+
+#: ui/evolution-mail-message.xml.h:57
+msgid "Mark the selected message(s) as important"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк важныÑ"
+
+#: ui/evolution-mail-message.xml.h:58
+#, fuzzy
+msgid "Mark the selected message(s) as junk"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк нÑважныÑ"
+
+#: ui/evolution-mail-message.xml.h:59
+#, fuzzy
+msgid "Mark the selected message(s) as not being junk"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк \"не Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ\""
+
+#: ui/evolution-mail-message.xml.h:60
+msgid "Mark the selected message(s) as not having been read"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк \"не Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ\""
+
+#: ui/evolution-mail-message.xml.h:61
+msgid "Mark the selected message(s) as unimportant"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñк нÑважныÑ"
+
+#: ui/evolution-mail-message.xml.h:62
+msgid "Mark the selected messages for deletion"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ"
+
+#: ui/evolution-mail-message.xml.h:63
+msgid "Move"
+msgstr "ПерамÑÑьціць"
+
+#: ui/evolution-mail-message.xml.h:64
+msgid "Move selected message(s) to another folder"
+msgstr "ПерамÑÑьціць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– у іншую Ñ‚Ñчку"
+
+#: ui/evolution-mail-message.xml.h:66
+msgid "Next _Important Message"
+msgstr "ÐаÑтупнае важнае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:67
+msgid "Next _Thread"
+msgstr "ÐаÑтупнае абмеркаваньне Ñ‚Ñмы"
+
+#: ui/evolution-mail-message.xml.h:68
+msgid "Next _Unread Message"
+msgstr "ÐаÑтупнае нечытанае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:69
+#, fuzzy
+msgid "Not Junk"
+msgstr "ÐдÑутнічае"
+
+#: ui/evolution-mail-message.xml.h:70
+msgid "Open the selected message in a new window"
+msgstr "Ðдкрыць вылучанае паведамленьне Ñž новым акне"
+
+#: ui/evolution-mail-message.xml.h:71
+#, fuzzy
+msgid "Open the selected message in the composer for editing"
+msgstr "Ðдкрыць вылучанае паведамленьне Ñž Ñ€Ñдактары каб перадаÑлаць Ñго"
+
+#: ui/evolution-mail-message.xml.h:72
+msgid "Original Si_ze"
+msgstr "Ðрыгінальны памер"
+
+#: ui/evolution-mail-message.xml.h:73
+msgid "P_revious Unread Message"
+msgstr "ПапÑÑ€ÑднÑе нечытанае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:75
+#, fuzzy
+msgid "Post a Repl_y"
+msgstr "ДаÑлаць адказ"
+
+#: ui/evolution-mail-message.xml.h:76
+msgid "Post a reply to a message in a Public folder"
+msgstr "ДаÑлаць адказ на паведамленьне Ñž публічную Ñ‚Ñчку"
+
+#: ui/evolution-mail-message.xml.h:77
+msgid "Pr_evious Important Message"
+msgstr "ПапÑÑ€ÑднÑе важнае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:78
+msgid "Preview the message to be printed"
+msgstr "Прагледзіць выглÑд Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ Ñž друку"
+
+#: ui/evolution-mail-message.xml.h:82
+msgid "Print this message"
+msgstr "Ðадрукаваць гÑтае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:83
+msgid "Re_direct"
+msgstr "Пера_накіраваць"
+
+#: ui/evolution-mail-message.xml.h:84
+msgid "Redirect (bounce) the selected message to someone"
+msgstr ""
+
+#: ui/evolution-mail-message.xml.h:89
+msgid "Reset the text to its original size"
+msgstr "Скінуць Ñ‚ÑкÑÑ‚ да Ñгонага арыгінальнага памера"
+
+#: ui/evolution-mail-message.xml.h:90
+#, fuzzy
+msgid "S_earch in Message..."
+msgstr "Шукаць паведамленьне..."
+
+#: ui/evolution-mail-message.xml.h:91
+msgid "S_maller"
+msgstr "Меншы"
+
+#: ui/evolution-mail-message.xml.h:92
+msgid "Save the message as a text file"
+msgstr "Захаваць паведамленьне Ñк файл Ñ‚ÑкÑта"
+
+#: ui/evolution-mail-message.xml.h:93
+msgid "Search for text in the body of the displayed message"
+msgstr "Шукаць Ñ‚ÑкÑÑ‚ у целе адлюÑтраванага паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:94
+msgid "Set up the page settings for your current printer"
+msgstr "УÑталÑваць парамÑтры аркуша Ð´Ð»Ñ Ð²Ð°ÑˆÐ°Ðµ бÑгучае друкаркі"
+
+#: ui/evolution-mail-message.xml.h:95
+msgid "Show Email _Source"
+msgstr "Паказаць крыніцу паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:96
+msgid "Show Full _Headers"
+msgstr "Паказаць уÑе загалоўкі"
+
+#: ui/evolution-mail-message.xml.h:97
+#, fuzzy
+msgid "Show a blinking cursor in the body of displayed messages"
+msgstr "Шукаць Ñ‚ÑкÑÑ‚ у целе адлюÑтраванага паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:98
+msgid "Show message in the normal style"
+msgstr "Паказаць паведамленьне Ñž звычайным Ñтылі"
+
+#: ui/evolution-mail-message.xml.h:99
+msgid "Show message with all email headers"
+msgstr "Паказаць паведамленьне з уÑімі загалоўкамі"
+
+#: ui/evolution-mail-message.xml.h:100
+msgid "Show the raw email source of the message"
+msgstr "Паказаць зьмеÑÑ‚ крыніцы паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:101
+msgid "Text Si_ze"
+msgstr "Памер Ñ‚ÑкÑта"
+
+#: ui/evolution-mail-message.xml.h:102
+msgid "Un-delete the selected messages"
+msgstr "Ð’Ñрнуць з выдаленага Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ–"
+
+#: ui/evolution-mail-message.xml.h:103
+msgid "VFolder on Mailing _List..."
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па ÑьпіÑе раÑÑылкі..."
+
+#: ui/evolution-mail-message.xml.h:104
+msgid "VFolder on Se_nder..."
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па адпраўлÑльніках..."
+
+#: ui/evolution-mail-message.xml.h:105
+msgid "VFolder on _Recipients..."
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па атрымоўцах..."
+
+#: ui/evolution-mail-message.xml.h:106
+msgid "VFolder on _Subject..."
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па Ñ‚Ñме..."
+
+#: ui/evolution-mail-message.xml.h:108
+msgid "_Attached"
+msgstr "Як укладзенае"
+
+#: ui/evolution-mail-message.xml.h:111
+msgid "_Create Filter From Message"
+msgstr "Стварыць фільтар з паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:115
+msgid "_Go To"
+msgstr "ПерайÑьці да"
+
+#: ui/evolution-mail-message.xml.h:116
+msgid "_Inline"
+msgstr "Як убудаванае"
+
+#: ui/evolution-mail-message.xml.h:117
+msgid "_Larger"
+msgstr "Большы"
+
+#: ui/evolution-mail-message.xml.h:118
+msgid "_Message Display"
+msgstr "ВыглÑд паведамленьнÑ"
+
+#: ui/evolution-mail-message.xml.h:120
+msgid "_Next Message"
+msgstr "ÐаÑтупнае паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:121
+msgid "_Normal Display"
+msgstr "Звычайны выглÑд"
+
+#: ui/evolution-mail-message.xml.h:122
+msgid "_Open Message"
+msgstr "Ðдкрыць паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:124
+msgid "_Previous Message"
+msgstr "ПапÑÑ€ÑднÑе паведамленьне"
+
+#: ui/evolution-mail-message.xml.h:126
+msgid "_Quoted"
+msgstr "_Цытавана"
+
+#: ui/evolution-mail-message.xml.h:129 ui/evolution.xml.h:36
+msgid "_Tools"
+msgstr "ІнÑтрумÑнты"
+
+#: ui/evolution-mail-message.xml.h:130
+msgid "_Undelete"
+msgstr "Ð’Ñрнуць з выдаленага"
+
+#: ui/evolution-mail-messagedisplay.xml.h:2 ui/evolution.xml.h:5
+msgid "Close this window"
+msgstr "Закрыць гÑтае акно"
+
+#: ui/evolution-mail-messagedisplay.xml.h:5
+#: ui/evolution-message-composer.xml.h:41 ui/evolution-subscribe.xml.h:9
+#: ui/evolution.xml.h:28
+msgid "_Close"
+msgstr "Закрыць"
+
+#: ui/evolution-message-composer.xml.h:1
+msgid "Attach"
+msgstr "УклаÑьці"
+
+#: ui/evolution-message-composer.xml.h:2
+msgid "Attach a file"
+msgstr "УклаÑьці файл"
+
+#: ui/evolution-message-composer.xml.h:4 ui/evolution-signature-editor.xml.h:3
+msgid "Close the current file"
+msgstr "Закрыць бÑгучы файл"
+
+#: ui/evolution-message-composer.xml.h:5
+msgid "Delete all but signature"
+msgstr ""
+
+#: ui/evolution-message-composer.xml.h:6
+msgid "Encrypt this message with PGP"
+msgstr "Закадаваць гÑтае паведамленьне з дапамогай PGP"
+
+#: ui/evolution-message-composer.xml.h:7
+msgid "Encrypt this message with your S/MIME Encryption Cetificate"
+msgstr "Закадаваць гÑтае паведамленьне вашым ÑÑртыфікатам ÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ S/MIME"
+
+#: ui/evolution-message-composer.xml.h:8 ui/evolution-signature-editor.xml.h:4
+msgid "For_mat"
+msgstr "Фармат"
+
+#: ui/evolution-message-composer.xml.h:9
+msgid "HT_ML"
+msgstr "HTML"
+
+#: ui/evolution-message-composer.xml.h:11
+msgid "Open a file"
+msgstr "Ðдкрыць файл"
+
+#: ui/evolution-message-composer.xml.h:12
+msgid "PGP Encrypt"
+msgstr "Кадаваньне PGP"
+
+#: ui/evolution-message-composer.xml.h:13
+msgid "PGP Sign"
+msgstr "ÐŸÐ¾Ð´Ð¿Ñ–Ñ PGP"
+
+#: ui/evolution-message-composer.xml.h:14
+msgid "S/MIME Encrypt"
+msgstr "Кадаваньне S/MIME"
+
+#: ui/evolution-message-composer.xml.h:15
+msgid "S/MIME Sign"
+msgstr "ÐŸÐ»Ð´Ð¿Ñ–Ñ S/MIME"
+
+#: ui/evolution-message-composer.xml.h:16
+#: ui/evolution-signature-editor.xml.h:6
+msgid "Save"
+msgstr "Захаваць"
+
+#: ui/evolution-message-composer.xml.h:17
+msgid "Save As"
+msgstr "Захаваць Ñк"
+
+#: ui/evolution-message-composer.xml.h:19
+msgid "Save _Draft"
+msgstr "Захаваць чарнавік"
+
+#: ui/evolution-message-composer.xml.h:20
+msgid "Save in folder..."
+msgstr "Захаваць у Ñ‚Ñчку..."
+
+#: ui/evolution-message-composer.xml.h:21
+#: ui/evolution-signature-editor.xml.h:9
+msgid "Save the current file"
+msgstr "Захаваць бÑгучы файл"
+
+#: ui/evolution-message-composer.xml.h:22
+msgid "Save the current file with a different name"
+msgstr "Захаваць бÑгучы файл пад іншай назвай"
+
+#: ui/evolution-message-composer.xml.h:23
+msgid "Save the message in a specified folder"
+msgstr "Захаваць паведамленьне Ñž пазначанай Ñ‚Ñчцы"
+
+#: ui/evolution-message-composer.xml.h:25
+#: ui/evolution-signature-editor.xml.h:11
+msgid "Send the mail in HTML format"
+msgstr "ДаÑлаць ліÑÑ‚ у фармаце HTML"
+
+#: ui/evolution-message-composer.xml.h:26
+msgid "Send this message"
+msgstr "ДаÑлаць гÑтае паведамленьне"
+
+#: ui/evolution-message-composer.xml.h:27
+msgid "Show / hide attachments"
+msgstr "Паказаць / Ñхаваць укладаньні"
+
+#: ui/evolution-message-composer.xml.h:28
+msgid "Show _attachments"
+msgstr "ÐдлюÑтраваць укладаньні"
+
+#: ui/evolution-message-composer.xml.h:29
+msgid "Show attachments"
+msgstr "ÐдлюÑтраваць укладаньні"
+
+#: ui/evolution-message-composer.xml.h:30
+msgid "Sign this message with your PGP key"
+msgstr "ПадпіÑаць гÑтае паведамленьне вышым ключом PGP"
+
+#: ui/evolution-message-composer.xml.h:31
+msgid "Sign this message with your S/MIME Signature Certificate"
+msgstr "ПадпіÑаць гÑтае паведамленьне вашым ÑÑртыфікатам подпіÑа S/MIME"
+
+#: ui/evolution-message-composer.xml.h:32
+msgid "Toggles whether the BCC field is displayed"
+msgstr ""
+
+#: ui/evolution-message-composer.xml.h:33
+msgid "Toggles whether the CC field is displayed"
+msgstr ""
+
+#: ui/evolution-message-composer.xml.h:34
+msgid "Toggles whether the From chooser is displayed"
+msgstr ""
+
+#: ui/evolution-message-composer.xml.h:35
+msgid "Toggles whether the Post-To field is displayed"
+msgstr ""
+
+#: ui/evolution-message-composer.xml.h:36
+msgid "Toggles whether the Reply-To field is displayed"
+msgstr ""
+
+#: ui/evolution-message-composer.xml.h:37
+msgid "Toggles whether the To field is displayed"
+msgstr ""
+
+#: ui/evolution-message-composer.xml.h:38
+msgid "_Attachment..."
+msgstr "Укладаньне..."
+
+#: ui/evolution-message-composer.xml.h:39
+msgid "_Bcc Field"
+msgstr "Поле Ñхаванае копіÑ"
+
+#: ui/evolution-message-composer.xml.h:40
+msgid "_Cc Field"
+msgstr "Поле копіі"
+
+#: ui/evolution-message-composer.xml.h:42
+msgid "_Delete all"
+msgstr "Выдаліць уÑÑ‘"
+
+#: ui/evolution-message-composer.xml.h:45
+msgid "_From Field"
+msgstr "Поле \"Ðд каго\""
+
+#: ui/evolution-message-composer.xml.h:46
+#: ui/evolution-signature-editor.xml.h:14
+msgid "_Insert"
+msgstr "УÑтавіць"
+
+#: ui/evolution-message-composer.xml.h:47
+msgid "_Open..."
+msgstr "Ðдкрыць..."
+
+#: ui/evolution-message-composer.xml.h:48
+#, fuzzy
+msgid "_Post-To Field"
+msgstr "Поле \"Ðдказаць на\""
+
+#: ui/evolution-message-composer.xml.h:49
+msgid "_Reply-To Field"
+msgstr "Поле \"Ðдказаць на\""
+
+#: ui/evolution-message-composer.xml.h:51
+msgid "_Security"
+msgstr "БÑÑьпека"
+
+#: ui/evolution-message-composer.xml.h:52
+#, fuzzy
+msgid "_To Field"
+msgstr "Поле \"Ðд каго\""
+
+#: ui/evolution-signature-editor.xml.h:5
+msgid "H_TML"
+msgstr "H_TML"
+
+#: ui/evolution-signature-editor.xml.h:10
+msgid "Save the current file and close the window"
+msgstr "Захаваць бÑгучы файл Ñ– закрыць акно"
+
+#: ui/evolution-subscribe.xml.h:1
+msgid "Add folder to your list of subscribed folders"
+msgstr "Дадаць Ñ‚Ñчку да вашага ÑьпіÑу падпіÑаных Ñ‚Ñчак"
+
+#: ui/evolution-subscribe.xml.h:2
+msgid "F_older"
+msgstr "ТÑчка"
+
+#: ui/evolution-subscribe.xml.h:3
+msgid "Refresh List"
+msgstr "Ðбнавіць ÑьпіÑ"
+
+#: ui/evolution-subscribe.xml.h:4
+msgid "Refresh List of Folders"
+msgstr "Ðбнавіць ÑÑŒÐ¿Ñ–Ñ Ñ‚Ñчак"
+
+#: ui/evolution-subscribe.xml.h:5
+msgid "Remove folder from your list of subscribed folders"
+msgstr "Выдаліць Ñ‚Ñчку з вашага ÑьпіÑу падпіÑаных Ñ‚Ñчак"
+
+#: ui/evolution-subscribe.xml.h:7
+msgid "Subscribe"
+msgstr "ПадпіÑацца"
+
+#: ui/evolution-subscribe.xml.h:8
+msgid "Unsubscribe"
+msgstr "ÐдпіÑацца"
+
+#: ui/evolution-task-editor.xml.h:1
+msgid "Assign Task"
+msgstr "Прызначыць заданьне"
+
+#: ui/evolution-task-editor.xml.h:2
+msgid "Assign this task to others"
+msgstr "Прызначыць гÑтае заданьне іншым"
+
+#: ui/evolution-task-editor.xml.h:3
+msgid "Cancel Task"
+msgstr "ÐдмÑніць заданьне"
+
+#: ui/evolution-task-editor.xml.h:4
+msgid "Cancel this task"
+msgstr "ÐдмÑніць гÑтае заданьне"
+
+#: ui/evolution-task-editor.xml.h:7
+msgid "Obtain the latest task information"
+msgstr "Ðтрымаць інфармацыю па апошнім заданьні"
+
+#: ui/evolution-task-editor.xml.h:8
+msgid "Re_fresh Task"
+msgstr "Ðбнавіць заданьне"
+
+#: ui/evolution-tasks.xml.h:3
+msgid "Copy selected task"
+msgstr "КапіÑваць вылучанае заданьне"
+
+#: ui/evolution-tasks.xml.h:5
+msgid "Cut selected task"
+msgstr "Выразаць вылучанае заданьне"
+
+#: ui/evolution-tasks.xml.h:7
+msgid "Delete completed tasks"
+msgstr "Выдаліць ÑÐºÐ¾Ð½Ñ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
+
+#: ui/evolution-tasks.xml.h:8
+msgid "Delete selected tasks"
+msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
+
+#: ui/evolution-tasks.xml.h:9
+msgid "Mar_k as Complete"
+msgstr "Пазначыць Ñк Ñкончанае"
+
+#: ui/evolution-tasks.xml.h:10
+#, fuzzy
+msgid "Mark selected tasks as complete"
+msgstr "Пазначыць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ– Ñк выкананыÑ"
+
+#: ui/evolution-tasks.xml.h:12
+msgid "Paste task from the clipboard"
+msgstr "УÑтавіць заданьне з буфÑра абмену"
+
+#: ui/evolution-tasks.xml.h:13
+msgid "Previews the list of tasks to be printed"
+msgstr "Прагледзіць ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž Ñкі муÑіць быць надрукаваны"
+
+#: ui/evolution-tasks.xml.h:16
+msgid "Print the list of tasks"
+msgstr "Ðадрукаваць ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#: ui/evolution-tasks.xml.h:18
+#, fuzzy
+msgid "View the selected task"
+msgstr "Выдаліць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
+
+#: ui/evolution-tasks.xml.h:23
+#, fuzzy
+msgid "_Open Task"
+msgstr "_Заданьне"
+
+#: ui/evolution.xml.h:1
+#, fuzzy
+msgid "About Evolution..."
+msgstr "Пра \"Эвалюцыю\" Ximian"
+
+#: ui/evolution.xml.h:2
+msgid "Change Evolution's settings"
+msgstr "ЗьмÑніць наладкі \"Эвалюцыі\""
+
+#: ui/evolution.xml.h:3
+#, fuzzy
+msgid "Change the visibility of the toolbar"
+msgstr "ЗьмÑніць улаÑьціваÑьці гÑтае Ñ‚Ñчкі"
+
+#: ui/evolution.xml.h:6
+msgid "Create a new window displaying this folder"
+msgstr "Стварыць новае акно Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð³Ñтае Ñ‚Ñчкі"
+
+#: ui/evolution.xml.h:7
+msgid "E_xit"
+msgstr "Выхад"
+
+#: ui/evolution.xml.h:8
+#, fuzzy
+msgid "Evolution _FAQ"
+msgstr "ЧаÑÑ‚Ñ‹Ñ Ð¿Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ–"
+
+#: ui/evolution.xml.h:9
+msgid "Exit the program"
+msgstr "ВыйÑьці з праграмы"
+
+#: ui/evolution.xml.h:10
+msgid "Forget _Passwords"
+msgstr "Забыцца на _пароль"
+
+#: ui/evolution.xml.h:11
+msgid "Forget remembered passwords so you will be prompted for them again"
+msgstr ""
+
+#: ui/evolution.xml.h:12
+msgid "Import data from other programs"
+msgstr "Імпартаваць даньні з іншай праграмы"
+
+#: ui/evolution.xml.h:14
+#, fuzzy
+msgid "New _Window"
+msgstr "_Шукаць зараз"
+
+#: ui/evolution.xml.h:15
+msgid "Pi_lot Settings..."
+msgstr "Ðаладкі \"Пілёта\"..."
+
+#: ui/evolution.xml.h:16
+msgid "Send / Receive"
+msgstr "ДаÑлаць / Ðтрымаць"
+
+#: ui/evolution.xml.h:17
+msgid "Send queued items and retrieve new items"
+msgstr "ДаÑлаць паведамленьні з чаргі й атрымаць новыÑ"
+
+#: ui/evolution.xml.h:18
+msgid "Set up Pilot configuration"
+msgstr "Ðаладзіць \"Пілёт\""
+
+#: ui/evolution.xml.h:19
+#, fuzzy
+msgid "Show information about Evolution"
+msgstr "Паказаць інфармацыю пра \"Эвалюцыю\" Ximian"
+
+#: ui/evolution.xml.h:20
+msgid "Submit Bug Report"
+msgstr "ДаÑлаць паведамленьне аб памылках"
+
+#: ui/evolution.xml.h:21
+msgid "Submit _Bug Report"
+msgstr "ДаÑлаць паведамленьне аб памылках"
+
+#: ui/evolution.xml.h:22
+msgid "Submit a bug report using Bug Buddy"
+msgstr "ДаÑлаць паведамленьне аб памылках карыÑтаючыÑÑ \"Bug Buddy\""
+
+#: ui/evolution.xml.h:23
+#, fuzzy
+msgid "T_oolbar"
+msgstr "ÐœÐ°Ñ Ð¿Ð°Ð½ÑÐ»Ñ Ñ–Ð½ÑтрумÑнта"
+
+#: ui/evolution.xml.h:24
+msgid "Toggle whether we are working offline."
+msgstr "Пераключыць у выпадку працы Ñž адлучаным Ñ€Ñжыме."
+
+#: ui/evolution.xml.h:26
+#, fuzzy
+msgid "_About Evolution..."
+msgstr "Пра \"Эвалюцыю\" Ximian"
+
+#: ui/evolution.xml.h:30
+msgid "_Help"
+msgstr "_Дапамога"
+
+#: ui/evolution.xml.h:31
+msgid "_Import..."
+msgstr "_Імпартаваць..."
+
+#: ui/evolution.xml.h:32
+msgid "_New"
+msgstr "_Стварыць"
+
+#: ui/evolution.xml.h:33
+#, fuzzy
+msgid "_Quick Reference"
+msgstr "Перавагі пошты"
+
+#: ui/evolution.xml.h:34
+msgid "_Send / Receive"
+msgstr "ДаÑлаць / Ðтрымаць"
+
+#: ui/evolution.xml.h:38
+#, fuzzy
+msgid "_Window"
+msgstr "_Шукаць зараз"
+
+#: views/addressbook/galview.xml.h:1
+msgid "By _Company"
+msgstr "Па уÑтановах"
+
+#: views/addressbook/galview.xml.h:2
+msgid "_Address Cards"
+msgstr "Візытоўкі"
+
+#: views/addressbook/galview.xml.h:3
+msgid "_Phone List"
+msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ñ‚Ñлефонаў"
+
+#: views/calendar/galview.xml.h:1
+msgid "W_eek View"
+msgstr "ПраглÑд тыднÑ"
+
+#: views/calendar/galview.xml.h:2
+msgid "_Day View"
+msgstr "ПраглÑд днÑ"
+
+#: views/calendar/galview.xml.h:3
+#, fuzzy
+msgid "_List View"
+msgstr "ПраглÑд карыÑтальніка"
+
+#: views/calendar/galview.xml.h:4
+msgid "_Month View"
+msgstr "ПраглÑд меÑÑца"
+
+#: views/calendar/galview.xml.h:5
+msgid "_Work Week View"
+msgstr "ПраглÑд працоўнага тыднÑ"
+
+#: views/mail/galview.xml.h:1
+#, fuzzy
+msgid "As _Sent Folder"
+msgstr "Як Ñ‚Ñчка \"даÑланае\""
+
+#: views/mail/galview.xml.h:2
+#, fuzzy
+msgid "By S_tatus"
+msgstr "Па Ñтану"
+
+#: views/mail/galview.xml.h:3
+#, fuzzy
+msgid "By Se_nder"
+msgstr "Па адпраўлÑльніку"
+
+#: views/mail/galview.xml.h:4
+#, fuzzy
+msgid "By Su_bject"
+msgstr "Па Ñ‚Ñме"
+
+#: views/mail/galview.xml.h:5
+#, fuzzy
+msgid "By _Follow Up Flag"
+msgstr "Па ÑьцÑгу \"Да выкананьнÑ\""
+
+#: views/mail/galview.xml.h:6
+#, fuzzy
+msgid "_Messages"
+msgstr "Паведамленьні"
+
+#: views/tasks/galview.xml.h:1
+#, fuzzy
+msgid "With _Due Date"
+msgstr "_Ð£Ð¼Ð¾ÑžÐ»ÐµÐ½Ð°Ñ Ð´Ð°Ñ‚Ð°:"
+
+#: views/tasks/galview.xml.h:2
+#, fuzzy
+msgid "With _Status"
+msgstr "УÑталÑваць Ñтан"
+
+#: widgets/e-timezone-dialog/e-timezone-dialog.c:197
+#: widgets/e-timezone-dialog/e-timezone-dialog.c:635
+msgid "UTC"
+msgstr "UTC"
+
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:2
+#, fuzzy
+msgid "<b>Time Zones</b>"
+msgstr "ЧаÑÐ°Ð²Ñ‹Ñ Ð·Ð¾Ð½Ñ‹"
+
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:3
+#, fuzzy
+msgid "<b>_Selection</b>"
+msgstr "_РазьмÑшчÑньне:"
+
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:4
+msgid "Select a Time Zone"
+msgstr "ВыбÑрыце чаÑавую зону"
+
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:5
+msgid ""
+"Use the left mouse button to zoom in on an area of the map and select a time "
+"zone.\n"
+"Use the right mouse button to zoom out."
+msgstr ""
+"КарыÑтайцеÑÑ Ð»ÐµÐ²Ð°Ð¹ кнопкай мышы каб павÑлічыць маштаб мапы й выбÑрыце "
+"чаÑавую зону.\n"
+"КарыÑтайцеÑÑ Ð¿Ñ€Ð°Ð²Ð°Ð¹ клÑвішай каб паменшыць маштаб."
+
+#: widgets/menus/gal-view-menus.c:292
+msgid "_Current View"
+msgstr "БÑгучы праглÑд"
+
+#. bonobo displays this string so it must be in locale
+#: widgets/menus/gal-view-menus.c:351
+msgid "Custom View"
+msgstr "ПраглÑд карыÑтальніка"
+
+#: widgets/menus/gal-view-menus.c:360
+msgid "Save Custom View..."
+msgstr "Захаваць праглÑд карыÑтальніка..."
+
+#: widgets/menus/gal-view-menus.c:373
+msgid "Define Views..."
+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:423
+msgid "MTWTFSS"
+msgstr "ПÐСЧПСÐ"
+
+#. This is a strftime() format. %B = Month name, %Y = Year.
+#: widgets/misc/e-calendar-item.c:1128
+msgid "%B %Y"
+msgstr "%B %Y"
+
+#: widgets/misc/e-cell-date-edit.c:241 widgets/misc/e-dateedit.c:429
+msgid "Now"
+msgstr "Зараз"
+
+#: widgets/misc/e-cell-date-edit.c:805
+#, c-format
+msgid "The time must be in the format: %s"
+msgstr "Ð§Ð°Ñ Ð¼ÑƒÑіць быць у фармаце: %s"
+
+#: widgets/misc/e-cell-percent.c:77
+msgid "The percent value must be between 0 and 100, inclusive"
+msgstr "ÐдÑоткавае значÑньне муÑіць быць між 0 Ñ– 100, уключна"
+
+#: widgets/misc/e-charset-picker.c:63
+msgid "Baltic"
+msgstr "Балцкае"
+
+#: widgets/misc/e-charset-picker.c:64
+msgid "Central European"
+msgstr "ЦÑнтральна-ÑўрапейÑкае"
+
+#: widgets/misc/e-charset-picker.c:65
+msgid "Chinese"
+msgstr "КітайÑкае"
+
+#: widgets/misc/e-charset-picker.c:66
+msgid "Cyrillic"
+msgstr "Кірылічнае"
+
+#: widgets/misc/e-charset-picker.c:67
+msgid "Greek"
+msgstr "ГрÑцкае"
+
+#: widgets/misc/e-charset-picker.c:68
+msgid "Hebrew"
+msgstr "ЖыдоўÑкае"
+
+#: widgets/misc/e-charset-picker.c:69
+msgid "Japanese"
+msgstr "ЯпонÑкае"
+
+#: widgets/misc/e-charset-picker.c:70
+msgid "Korean"
+msgstr "КарÑйÑкае"
+
+#: widgets/misc/e-charset-picker.c:71
+msgid "Turkish"
+msgstr "ТурÑцкае"
+
+#: widgets/misc/e-charset-picker.c:72
+msgid "Unicode"
+msgstr "Юнікод"
+
+#: widgets/misc/e-charset-picker.c:73
+msgid "Western European"
+msgstr "Заходне-ÑўрапейÑкае"
+
+#: widgets/misc/e-charset-picker.c:74
+#, fuzzy
+msgid "Western European, New"
+msgstr "Заходне-ÑўрапейÑкае"
+
+#: widgets/misc/e-charset-picker.c:91 widgets/misc/e-charset-picker.c:92
+#: widgets/misc/e-charset-picker.c:93
+msgid "Traditional"
+msgstr "Традыцыйнае"
+
+#: widgets/misc/e-charset-picker.c:94 widgets/misc/e-charset-picker.c:95
+#: widgets/misc/e-charset-picker.c:96 widgets/misc/e-charset-picker.c:97
+msgid "Simplified"
+msgstr "Спрошчанае"
+
+#: widgets/misc/e-charset-picker.c:100
+msgid "Ukrainian"
+msgstr "УкраінÑкае"
+
+#: widgets/misc/e-charset-picker.c:103
+msgid "Visual"
+msgstr "Візуальна"
+
+#: widgets/misc/e-charset-picker.c:171
+#, c-format
+msgid "Unknown character set: %s"
+msgstr "ÐевÑдомы знаказбор: %s"
+
+#: widgets/misc/e-charset-picker.c:216 widgets/misc/e-charset-picker.c:479
+msgid "Character Encoding"
+msgstr "Кадаваньне набору ÑымбалÑÑž"
+
+#: widgets/misc/e-charset-picker.c:231
+msgid "Enter the character set to use"
+msgstr "Пазначце знаказбор Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑтаньнÑ"
+
+#: widgets/misc/e-charset-picker.c:338
+msgid "Other..."
+msgstr "Іншае..."
+
+#: widgets/misc/e-clipped-label.c:111
+msgid "..."
+msgstr "..."
+
+#: widgets/misc/e-error.c:83 widgets/misc/e-error.c:84
+#: widgets/misc/e-error.c:126
+msgid "Evolution Error"
+msgstr "Памылка \"Эвалюцыі\""
+
+#: widgets/misc/e-error.c:85 widgets/misc/e-error.c:86
+#: widgets/misc/e-error.c:124
+#, fuzzy
+msgid "Evolution Warning"
+msgstr "Пошта \"Эвалюцыі\""
+
+#: widgets/misc/e-error.c:123
+#, fuzzy
+msgid "Evolution Information"
+msgstr "ЗьвеÑткі аб нарадзе"
+
+#: widgets/misc/e-error.c:125
+#, fuzzy
+msgid "Evolution Query"
+msgstr "ÐÐ³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі \"Эвалюцыі\""
+
+#. setup a dummy error
+#: widgets/misc/e-error.c:421
+#, fuzzy, c-format
+msgid ""
+"<span weight=\"bold\">Internal error, unknown error '%s' requested</span>"
+msgstr "ДаÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– Ñ– чарнавікі"
+
+#: widgets/misc/e-expander.c:181
+#, fuzzy
+msgid "Expanded"
+msgstr "_ВыкрÑÑьліць"
+
+#: widgets/misc/e-expander.c:182
+#, fuzzy
+msgid "Whether or not the expander is expanded"
+msgstr "Запыт на падцьверджаньне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ ÑлемÑнтаў"
+
+#: widgets/misc/e-expander.c:190
+msgid "Text of the expander's label"
+msgstr ""
+
+#: widgets/misc/e-expander.c:197
+#, fuzzy
+msgid "Use underline"
+msgstr "ÐÑвызначаны"
+
+#: widgets/misc/e-expander.c:198
+msgid ""
+"If set, an underline in the text indicates the next character should be used "
+"for the mnemonic accelerator key"
+msgstr ""
+
+#: widgets/misc/e-expander.c:205
+#, fuzzy
+msgid "Spacing"
+msgstr "ГішпаніÑ"
+
+#: widgets/misc/e-expander.c:206
+msgid "Space to put between the label and the child"
+msgstr ""
+
+#: widgets/misc/e-expander.c:215
+msgid "Label widget"
+msgstr ""
+
+#: widgets/misc/e-expander.c:216
+msgid "A widget to display in place of the usual expander label"
+msgstr ""
+
+#: widgets/misc/e-expander.c:222
+msgid "Expander Size"
+msgstr ""
+
+#: widgets/misc/e-expander.c:223
+msgid "Size of the expander arrow"
+msgstr ""
+
+#: widgets/misc/e-expander.c:231
+#, fuzzy
+msgid "Indicator Spacing"
+msgstr "ÐліÑ-СпрынгÑ"
+
+#: widgets/misc/e-expander.c:232
+msgid "Spacing around expander arrow"
+msgstr ""
+
+#: widgets/misc/e-filter-bar.c:195
+#, fuzzy
+msgid "_Searches"
+msgstr "По_шук"
+
+#: widgets/misc/e-filter-bar.c:197
+msgid "Search Editor"
+msgstr "РÑдактар пошуку"
+
+#. FIXME: get the toplevel window...
+#: widgets/misc/e-filter-bar.c:220
+msgid "Save Search"
+msgstr "Захаваць пошук"
+
+#: widgets/misc/e-filter-bar.h:92 widgets/misc/e-filter-bar.h:99
+msgid "_Save Search..."
+msgstr "Захаваць вынік пошуку..."
+
+#: widgets/misc/e-filter-bar.h:93 widgets/misc/e-filter-bar.h:100
+msgid "_Edit Saved Searches..."
+msgstr "РÑдагаваць захаваны пошук..."
+
+#: widgets/misc/e-filter-bar.h:94 widgets/misc/e-filter-bar.h:101
+msgid "_Advanced..."
+msgstr "_ÐдмыÑловае..."
+
+#: widgets/misc/e-image-chooser.c:172
+#, fuzzy
+msgid "Choose Image"
+msgstr "Выбар файла"
+
+#: widgets/misc/e-pilot-settings.c:103
+#, fuzzy
+msgid "Sync with:"
+msgstr "Ñканчаецца на"
+
+#: widgets/misc/e-pilot-settings.c:111
+msgid "Sync Private Records:"
+msgstr "Сынхранізаваць Ð¿Ñ€Ñ‹Ð²Ð°Ñ‚Ð½Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹:"
+
+#: widgets/misc/e-pilot-settings.c:120
+msgid "Sync Categories:"
+msgstr "Сынхранізаваць катÑгорыі:"
+
+#: widgets/misc/e-search-bar.c:540
+msgid "_Search"
+msgstr "По_шук"
+
+#: widgets/misc/e-search-bar.c:546
+msgid "_Find Now"
+msgstr "_Шукаць зараз"
+
+#: widgets/misc/e-search-bar.c:547 widgets/misc/e-search-bar.c:929
+msgid "_Clear"
+msgstr "Ð_чыÑьціць"
+
+#: widgets/misc/e-search-bar.c:837
+msgid "Item ID"
+msgstr "ІД пункта"
+
+#: widgets/misc/e-search-bar.c:844
+msgid "Subitem ID"
+msgstr "ІД падпункта"
+
+#: widgets/misc/e-search-bar.c:851
+msgid "Text"
+msgstr "ТÑкÑÑ‚"
+
+#: widgets/misc/e-search-bar.c:931
+#, fuzzy
+msgid "Find _Now"
+msgstr "Шукаць зараз"
+
+#. system:ask-save-file-exists-overwrite primary
+#: widgets/misc/e-system-errors.xml.h:4
+msgid "File exists \"{0}\"."
+msgstr ""
+
+#. system:ask-save-file-exists-overwrite secondary
+#: widgets/misc/e-system-errors.xml.h:6
+#, fuzzy
+msgid "Do you wish to overwrite it?"
+msgstr ""
+"%s ужо Ñ–Ñнуе\n"
+"Жадаеце перапіÑаць?"
+
+#. system:no-save-file primary
+#: widgets/misc/e-system-errors.xml.h:9
+#, fuzzy
+msgid "Cannot save file \"{0}\"."
+msgstr ""
+"Ðемагчыма захаваць у `%s'\n"
+" %s"
+
+#. system:no-load-file primary
+#: widgets/misc/e-system-errors.xml.h:13
+#, fuzzy
+msgid "Cannot open file \"{0}\"."
+msgstr ""
+"Ðемагчыма захаваць у `%s'\n"
+" %s"
+
+#: widgets/misc/e-task-widget.c:212
+#, c-format
+msgid "%s (...)"
+msgstr "%s (...)"
+
+#: widgets/misc/e-task-widget.c:217
+#, c-format
+msgid "%s (%d%% complete)"
+msgstr "%s (%d%% завершана)"
+
+#, fuzzy
+#~ msgid "_Add Group"
+#~ msgstr "_Дадаць групу..."
+
+#, fuzzy
+#~ msgid "Ximian Evolution (Unstable)"
+#~ msgstr "\"Ð­Ð²Ð°Ð»ÑŽÑ†Ñ‹Ñ Ximian\""
+
+#~ msgid "Remember this password"
+#~ msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
+
+#~ msgid "Remember this password for the remainder of this session"
+#~ msgstr "Запомніць гÑÑ‚Ñ‹ пароль да заканчÑÐ½ÑŒÐ½Ñ ÑÑанÑа"
+
+#, fuzzy
+#~ msgid "Keep"
+#~ msgstr "Сыгнал"
+
+#, fuzzy
+#~ msgid "New Contacts Group"
+#~ msgstr "Ðовы кантакт:"
+
+#, fuzzy
+#~ msgid "Contacts Grou_p"
+#~ msgstr "_Кантакты: "
+
+#, fuzzy
+#~ msgid "Create a new contacts group"
+#~ msgstr "Стварыць новую групу лычак"
+
+#, fuzzy
+#~ msgid "Add Contacts Group"
+#~ msgstr "_Кантакты: "
+
+#, fuzzy
+#~ msgid "Download limit:"
+#~ msgstr "Ðб_межаваньне загрузкі:"
+
+#, fuzzy
+#~ msgid "Search base only"
+#~ msgstr "_База пошуку:"
+
+#, fuzzy
+#~ msgid "Search base:"
+#~ msgstr "_База пошуку:"
+
+#, fuzzy
+#~ msgid "Search scope:"
+#~ msgstr "Межы _пошуку:"
+
+#, fuzzy
+#~ msgid "Timeout:"
+#~ msgstr "Фармат чаÑу:"
+
+#, fuzzy
+#~ msgid "_Add Contacts Group"
+#~ msgstr "_Кантакты: "
+
+#, fuzzy
+#~ msgid "_Email address:"
+#~ msgstr "Э.пошта:"
+
+#, fuzzy
+#~ msgid "_Log in:"
+#~ msgstr "Уваход"
+
+#, fuzzy
+#~ msgid "Add Tasks Group"
+#~ msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#, fuzzy
+#~ msgid "L_ocation:"
+#~ msgstr "МейÑца:"
+
+#, fuzzy
+#~ msgid "<b>Organizer</b>"
+#~ msgstr "<b>Умоўлена:</b> "
+
+#, fuzzy
+#~ msgid "_Organizer:"
+#~ msgstr "Ðрганізатар:"
+
+#, fuzzy
+#~ msgid "New tasks group"
+#~ msgstr "Ðовае заданьне"
+
+#, fuzzy
+#~ msgid "Tasks Gro_up"
+#~ msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#, fuzzy
+#~ msgid "Create a new tasks group"
+#~ msgstr "Стварыць новае заданьне"
+
+#, fuzzy
+#~ msgid "mail"
+#~ msgstr "Э. пошта"
+
+#, fuzzy
+#~ msgid "Authentication Credentials for HTTP Server"
+#~ msgstr "КепÑкі адказ на аўтарызацыю з паÑлужніка."
+
+#, fuzzy
+#~ msgid "Login name:"
+#~ msgstr "Ðазва ÑьпіÑа:"
+
+#~ msgid "URL:"
+#~ msgstr "URL:"
+
+#~ msgid "contact-list-editor"
+#~ msgstr "Ñ€Ñдактар ÑьпіÑу кантактаў"
+
+#~ msgid "Save List as VCard"
+#~ msgstr "Захаваць ÑÑŒÐ¿Ñ–Ñ Ñк Візытоўку (VCard)"
+
+#, fuzzy
+#~ msgid "Groupwise"
+#~ msgstr "Група"
+
+#~ msgid "Could not start wombat"
+#~ msgstr "ÐеатрымалаÑÑ Ð·Ð°Ð¿ÑƒÑьціць wombat"
+
+#, fuzzy
+#~ msgid "C_alendar"
+#~ msgstr "Ка_лÑндар:"
+
+#~ msgid "Audio Alarm Options"
+#~ msgstr "ПарамÑтры Ð½Ð°Ð³Ð°Ð´Ð²Ð°Ð½ÑŒÐ½Ñ Ð³ÑƒÐºÐ°Ð¼"
+
+#~ msgid "Message Alarm Options"
+#~ msgstr "ПарамÑтры паведамленьнÑÑž нагадваньнÑ"
+
+#~ msgid "Email Alarm Options"
+#~ msgstr "ПарамÑтры Ð½Ð°Ð³Ð°Ð´Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ñ€Ð°Ð· пошту"
+
+#~ msgid "Program Alarm Options"
+#~ msgstr "ПарамÑтры праграмы нагадваньнÑ"
+
+#~ msgid "Unknown Alarm Options"
+#~ msgstr "ПарамÑтры невÑдомага нагадваньнÑ"
+
+#, fuzzy
+#~ msgid "Alarm Repeat"
+#~ msgstr "Паўтор нагадваньнÑ"
+
+#, fuzzy
+#~ msgid "Message to Display:"
+#~ msgstr "ÐдлюÑтраваньне паведамленьнÑÑž"
+
+#~ msgid "Message to Send"
+#~ msgstr "Паведамленьне Ð´Ð»Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ–"
+
+#~ msgid "Play sound:"
+#~ msgstr "Граць гук:"
+
+#~ msgid "Run program:"
+#~ msgstr "ЗапуÑьціць праграму:"
+
+#~ msgid "With these arguments:"
+#~ msgstr "З гÑткімі аргумÑнтамі:"
+
+#~ msgid "Basics"
+#~ msgstr "ÐÑноўнае"
+
+#~ msgid "Date/Time:"
+#~ msgstr "Дата/ЧаÑ:"
+
+#, fuzzy
+#~ msgid "Reminders"
+#~ msgstr "Ðагадваньне"
+
+#~ msgid "_Options..."
+#~ msgstr "_ПарамÑтры..."
+
+#~ msgid "Addressbook..."
+#~ msgstr "Кніга адрÑÑаў..."
+
+#~ msgid "B_usy"
+#~ msgstr "_ЗанÑÑ‚Ñ‹"
+
+#, fuzzy
+#~ msgid "Co_nfidential"
+#~ msgstr "СакрÑтнае"
+
+#, fuzzy
+#~ msgid "Date & Time"
+#~ msgstr "Дата/ЧаÑ:"
+
+#~ msgid "F_ree"
+#~ msgstr "_Вольны"
+
+#~ msgid "Pri_vate"
+#~ msgstr "_Прыватнае"
+
+#~ msgid "Pu_blic"
+#~ msgstr "Пу_блічнае"
+
+#, fuzzy
+#~ msgid "Add A_ttendee"
+#~ msgstr "Удзельнік"
+
+#, fuzzy
+#~ msgid "Add attendees from addressbook."
+#~ msgstr "Дадаць адпраўлÑльніка Ñž кнігу адрÑÑаў"
+
+#, fuzzy
+#~ msgid "Exceptions"
+#~ msgstr "ВыключÑньні"
+
+#, fuzzy
+#~ msgid "Preview"
+#~ msgstr "Прыклад:"
+
+#, fuzzy
+#~ msgid "Recurrence Rule"
+#~ msgstr "Правіла вÑртаньнÑ"
+
+#~ msgid "_Custom recurrence"
+#~ msgstr "_Ð’Ñртаньне вызначаецца карыÑтальнікам"
+
+#~ msgid "_Modify"
+#~ msgstr "_ЗьмÑненьне"
+
+#~ msgid "_No recurrence"
+#~ msgstr "_БÑз вÑртаньнÑ"
+
+#~ msgid "_Simple recurrence"
+#~ msgstr "_ПроÑтае вÑртаньне"
+
+#, fuzzy
+#~ msgid "% _Complete"
+#~ msgstr "% Завершана"
+
+#, fuzzy
+#~ msgid "Progress"
+#~ msgstr "Выконваецца"
+
+#~ msgid "Con_fidential"
+#~ msgstr "_СакрÑтна"
+
+#, fuzzy
+#~ msgid "Folder:"
+#~ msgstr "_ТÑчка:"
+
+#~ msgid "<b>Starts:</b> "
+#~ msgstr "<b>Пачынаецца:</b> "
+
+#~ msgid "<b>Ends:</b> "
+#~ msgstr "<b>Сканчаецца:</b> "
+
+#~ msgid "<b>Completed:</b> "
+#~ msgstr "<b> Выканана</b> "
+
+#~ msgid "<b>Due:</b> "
+#~ msgstr "<b>Умоўлена:</b> "
+
+#~ msgid "<i>None</i>"
+#~ msgstr "<i>ÐÑма</i>"
+
+#~ msgid "There was an error on the CORBA system\n"
+#~ msgstr "ÐдбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñž ÑÑ‹ÑÑ‚Ñме CORBA\n"
+
+#~ msgid "Object could not be found\n"
+#~ msgstr "Ðб'ект адÑутнічае\n"
+
+#~ msgid "You don't have the right permissions to update the calendar\n"
+#~ msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð°ÐµÑ†Ðµ правільных правоў Ð´Ð»Ñ Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ð»Ñндара\n"
+
+#~ msgid "Attendee status could not be updated!\n"
+#~ msgstr "Стан удзельніка Ð½Ñ Ð¼Ð¾Ð¶Ð° быць абноўлены!\n"
+
+#, fuzzy
+#~ msgid "Add attendees from addressbook"
+#~ msgstr "Дадаць адпраўлÑльніка Ñž кнігу адрÑÑаў"
+
+#~ msgid "_Options"
+#~ msgstr "_ПарамÑтры"
+
+#~ msgid "Meeting _start time:"
+#~ msgstr "Ð§Ð°Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÑƒ нарады:"
+
+#~ msgid "Meeting _end time:"
+#~ msgstr "Ð§Ð°Ñ Ð·Ð°ÐºÐ°Ð½Ñ‡ÑÐ½ÑŒÐ½Ñ Ð½Ð°Ñ€Ð°Ð´Ñ‹:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error opening %s:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Памылка на %s\n"
+#~ " %s"
+
+#, fuzzy
+#~ msgid "Can't find certificate for `%s'"
+#~ msgstr "ÐеатрымалаÑÑ Ð°Ð´ÑˆÑƒÐºÐ°Ñ†ÑŒ ÑÑртыфікат Ð´Ð»Ñ \"%s\"."
+
+#, fuzzy
+#~ msgid "Can't create CMS Message"
+#~ msgstr "Стварыць правіла з паведамленьнÑ"
+
+#, fuzzy
+#~ msgid "Can't create encoder context"
+#~ msgstr "Ðеатрымліваецца Ñтварыць кантÑкÑÑ‚ дÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ S/MIME"
+
+#~ msgid ""
+#~ "Could not create composer window:\n"
+#~ "Unable to activate HTML editor component."
+#~ msgstr ""
+#~ "ÐеатрымалаÑÑ Ñтварыць акно Ñ€Ñдактара:\n"
+#~ "ÐеатрымалаÑÑ Ð°ÐºÑ‚Ñ‹Ð²Ñ–Ð·Ð°Ð²Ð°Ñ†ÑŒ HTML-кампанÑнт Ñ€Ñдактара."
+
+#, fuzzy
+#~ msgid "_Score Rules"
+#~ msgstr "Правіла падліку"
+
+#, fuzzy
+#~ msgid "On %a, %Y-%m-%d at %H:%M %%+05d, %%s wrote:"
+#~ msgstr "%a, %Y-%m-%d у %H:%M, %%s піша:"
+
+#, fuzzy
+#~ msgid "Folder Name"
+#~ msgstr "Ðазва _Ñ‚Ñчкі:"
+
+#~ msgid "_Rename"
+#~ msgstr "ЗьмÑніць _назву"
+
+#~ msgid "_Properties..."
+#~ msgstr "_УлаÑьціваÑьці..."
+
+#~ msgid "Checkbox"
+#~ msgstr "Пазначальнік"
+
+#~ msgid "C_alendar:"
+#~ msgstr "Ка_лÑндар:"
+
+#, fuzzy
+#~ msgid "_Contacts:"
+#~ msgstr "Кантакты: "
+
+#~ msgid "_Mail:"
+#~ msgstr "_Пошта:"
+
+#~ msgid "_Tasks:"
+#~ msgstr "_Заданьні:"
+
+#~ msgid "Folder _type:"
+#~ msgstr "Т_ып Ñ‚Ñчкі:"
+
+#~ msgid "Open Other User's Folder"
+#~ msgstr "Ðдкрыць іншую Ñ‚Ñчку карыÑтальніка"
+
+#~ msgid "_Folder Name:"
+#~ msgstr "Ðазва _Ñ‚Ñчкі:"
+
+#~ msgid "_User:"
+#~ msgstr "_Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка:"
+
+#~ msgid "Failed to connect to LDAP server"
+#~ msgstr "Збой далучÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка LDAP"
+
+#~ msgid "Could not perform query on Root DSE"
+#~ msgstr "Ðемагчыма выканаць запыт да карÑннага DSE"
+
+#~ msgid "Error retrieving schema information"
+#~ msgstr "Памылка Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð½ÑŒÐ½Ñ Ð·ÑŒÐ²ÐµÑтак Ñхемы"
+
+#~ msgid " S_how Supported Bases "
+#~ msgstr " _ÐдлюÑтраваць базы, ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð°"
+
+#~ msgid "1:00"
+#~ msgstr "1:00"
+
+#~ msgid "5:00"
+#~ msgstr "5:00"
+
+#~ msgid "Connecting"
+#~ msgstr "ДалучÑньне"
+
+#~ msgid "Distinguished _name:"
+#~ msgstr "_Ð£Ð´Ð°ÐºÐ»Ð°Ð´Ð½Ñ‘Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð°:"
+
+#~ msgid "Email address:"
+#~ msgstr "Э.пошта:"
+
+#~ msgid "Evolution will use this DN to authenticate you with the server"
+#~ msgstr ""
+#~ "\"ЭвалюцыÑ\" будзе выкарыÑтоўваць гÑтае DN Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ– на паÑлужніку"
+
+#~ msgid "S_earch scope: "
+#~ msgstr "Межы _пошуку:"
+
+#~ msgid "Searching"
+#~ msgstr "Пошук"
+
+#~ msgid "This option controls how long a search will be run."
+#~ msgstr "ГÑÑ‚Ð°Ñ Ð¼Ð¾Ð¶Ð½Ð°Ñьць кантралюе працÑглаÑьць пошуку."
+
+#~ msgid "U_se SSL/TLS:"
+#~ msgstr "Ð’Ñ‹_карыÑтоўваць SSL/TLS:"
+
+#~ msgid "_Display name:"
+#~ msgstr "_Ðазва Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑтраваньнÑ:"
+
+#~ msgid "_Port number:"
+#~ msgstr "_Ðумар порта:"
+
+#~ msgid "_Search base:"
+#~ msgstr "_База пошуку:"
+
+#~ msgid "_Server name:"
+#~ msgstr "_Ðазва паÑлужніка:"
+
+#~ msgid "_Timeout (minutes):"
+#~ msgstr "_Таймаут (хвіліны):"
+
+#~ msgid "connecting-tab"
+#~ msgstr "закладка далучÑньнÑ"
+
+#~ msgid "general-tab"
+#~ msgstr "Ð°Ð³ÑƒÐ»ÑŒÐ½Ð°Ñ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°"
+
+#~ msgid "searching-tab"
+#~ msgstr "закладка пошуку"
+
+#, fuzzy
+#~ msgid "Job title:"
+#~ msgstr "ПаÑа_да:"
+
+#, fuzzy
+#~ msgid "Webcam:"
+#~ msgstr "Старонка"
+
+#, fuzzy
+#~ msgid ""
+#~ "The following entries are invalid:\n"
+#~ "\n"
+#~ msgstr "ÐÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ Ñƒ бÑгучы момант далучÑньні:"
+
+#~ msgid "Could not find widget for a field: `%s'"
+#~ msgstr "ÐеатрымалаÑÑ Ð°Ð´ÑˆÑƒÐºÐ°Ñ†ÑŒ віджÑÑ‚ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ: \"%s\""
+
+#~ msgid "Do you want to save changes?"
+#~ msgstr "Жадаеце захаваць зьмены?"
+
+#~ msgid "Error saving %s: %s"
+#~ msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ %s: %s"
+
+#~ msgid ""
+#~ "The addressbook backend for\n"
+#~ "%s\n"
+#~ "has crashed. You will have to restart Evolution in order to use it again"
+#~ msgstr ""
+#~ "Праграма кнігі адрÑÑаў длÑ\n"
+#~ "%s\n"
+#~ "абрушылаÑÑ. Ð’Ñ‹ муÑіце перазапуÑьціць \"Эвалюцыю\" Ñ– паÑпрабаваць "
+#~ "выкарыÑтаць гÑта нанава"
+
+#, fuzzy
+#~ msgid "Can not load URI"
+#~ msgstr "Картка Ð½Ñ Ð°Ð´ÑˆÑƒÐºÐ°Ð½Ð°"
+
+#, fuzzy
+#~ msgid "Calendar Properties"
+#~ msgstr "Памылка iCalendar"
+
+#, fuzzy
+#~ msgid "Remote"
+#~ msgstr "Выдаліць"
+
+#, fuzzy
+#~ msgid "Task List Properties"
+#~ msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#, fuzzy
+#~ msgid "_Refresh Interval:"
+#~ msgstr "Ðбнавіць ÑьпіÑ"
+
+#, fuzzy
+#~ msgid "_Source URL:"
+#~ msgstr "URI крыніцы POP"
+
+#~ msgid ""
+#~ "The event being deleted is a meeting, would you like to send a "
+#~ "cancellation notice?"
+#~ msgstr ""
+#~ "ÐŸÐ°Ð´Ð·ÐµÑ ÑˆÑ‚Ð¾ будзе выдалена гÑта ÑуÑÑ‚Ñ€Ñча, ці паведаміць пра Ñе адмену "
+#~ "іншым?"
+
+#~ msgid ""
+#~ "The task being deleted is assigned, would you like to send a cancellation "
+#~ "notice?"
+#~ msgstr ""
+#~ "Заданьне Ñкое будзе выдалена \"прызначана\", ці жадаеце вы даÑлаць "
+#~ "паведамленьне аб адмене?"
+
+#~ msgid "Are you sure you want to cancel and delete this task?"
+#~ msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ Ñž тым, што жадаеце адмÑніць Ñ– выдаліць гÑтае заданьне?"
+
+#~ msgid ""
+#~ "The journal entry being deleted is published, would you like to send a "
+#~ "cancellation notice?"
+#~ msgstr ""
+#~ "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа Ñкі будзе выдалены апублікаваны, ці жадаеце даÑлаць "
+#~ "паведамленьне пра адмену?"
+
+#~ msgid "Are you sure you want to delete this untitled appointment?"
+#~ msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑтую ÑуÑÑ‚Ñ€Ñчу бÑз назвы?"
+
+#~ msgid "Are you sure you want to delete this untitled task?"
+#~ msgstr "Ð’Ñ‹ упÑўнены што жадаеце выдаліць гÑтае заданьне бÑз назвы?"
+
+#~ msgid "Are you sure want to delete this untitled journal entry?"
+#~ msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце выдаліць Ð·Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа бÑз назвы?"
+
+#~ msgid "_Invite Others..."
+#~ msgstr "_ЗапраÑіць іншых..."
+
+#~ msgid ""
+#~ "This event has been changed, but has not been saved.\n"
+#~ "\n"
+#~ "Do you wish to save your changes?"
+#~ msgstr ""
+#~ "ГÑÑ‚Ð°Ñ Ð¿Ð°Ð´Ð·ÐµÑ Ð±Ñ‹Ð»Ð° зьменена, але не была захавана.\n"
+#~ "\n"
+#~ "Вы жадаеце захаваць зьмены?"
+
+#~ msgid "_Discard Changes"
+#~ msgstr "_Ðдкінуць зьмены"
+
+#~ msgid "Save Event"
+#~ msgstr "Захаваць падзею"
+
+#~ msgid "The meeting information has been created. Send it?"
+#~ msgstr "ЗьвеÑткі па нарадзе Ñтвораны. ДаÑлаць?"
+
+#~ msgid "The meeting information has changed. Send an updated version?"
+#~ msgstr "ЗьвеÑткі па нарадзе зьменены. ДаÑлаць Ñ– абнавіць вÑÑ€ÑÑ‹ÑŽ?"
+
+#~ msgid "The task assignment information has been created. Send it?"
+#~ msgstr "ЗьвеÑткі па заданьні Ñтвораны. ДаÑлаць?"
+
+#~ msgid "The task information has changed. Send an updated version?"
+#~ msgstr "ЗьвеÑткі па заданьні зьменены. ДаÑлаць Ñ– абнавіць вÑÑ€ÑÑ‹ÑŽ?"
+
+#, fuzzy
+#~ msgid "Error posting message: %s: message not posted"
+#~ msgstr ""
+#~ "Памылка Ð°ÑžÑ‚Ð°Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ: %s\n"
+#~ " %s"
+
+#, fuzzy
+#~ msgid "Stream error"
+#~ msgstr "памылка разбору"
+
+#, fuzzy
+#~ msgid "Connection error: %s"
+#~ msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°: %s"
+
+#~ msgid "Could not get group: %s"
+#~ msgstr "Ðемагчыма атрымаць групу: %s"
+
+#, fuzzy
+#~ msgid "Could not get messages: unspecified error"
+#~ msgstr "ÐеатрымалаÑÑ Ð´Ð°Ñлаць паведамленьне: %s"
+
+#~ msgid "Unknown server response: %s"
+#~ msgstr "ÐевÑдомы адказ паÑлужніка: %s"
+
+#~ msgid "Working"
+#~ msgstr "Праца"
+
+#, fuzzy
+#~ msgid "_Filename:"
+#~ msgstr "Ðазва файла:"
+
+#~ msgid ""
+#~ "%s\n"
+#~ "\n"
+#~ "Unknown error."
+#~ msgstr ""
+#~ "%s\n"
+#~ "\n"
+#~ "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°."
+
+#~ msgid ""
+#~ "%s\n"
+#~ "\n"
+#~ "The error from the component system is:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s\n"
+#~ "\n"
+#~ "Памылка ад актывацыі кампанÑнта ÑÑ‹ÑÑ‚Ñмы:\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "%s\n"
+#~ "\n"
+#~ "The error from the activation system is:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s\n"
+#~ "\n"
+#~ "Памылка ад актывацыі ÑÑ‹ÑÑ‚Ñмы:\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "View Certificate"
+#~ msgstr "_Ід ÑÑртыфіката:"
+
+#, fuzzy
+#~ msgid "You have been asked to trust a new Certificate Authority (CA)."
+#~ msgstr "ÐекарÑÐºÑ‚Ð½Ð°Ñ Ð°ÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ ÑÑртыфіката (CA)"
+
+#~ msgid "About Ximian Evolution..."
+#~ msgstr "Пра \"Эвалюцыю\" Ximian..."
+
+#~ msgid "_About Ximian Evolution..."
+#~ msgstr "_Пра \"Эвалюцыю\" Ximian"
+
+#~ msgid "Evolution Addressbook folder viewer"
+#~ msgstr "ПраглÑдальнік Ñ‚Ñчак кнігі адрÑÑаў \"Эвалюцыі\""
+
+#, fuzzy
+#~ msgid "Address 2:"
+#~ msgstr "ÐдрÑÑа _2:"
+
+#, fuzzy
+#~ msgid "Blog:"
+#~ msgstr "Більбао"
+
+#~ msgid "Evolution Calendar viewer"
+#~ msgstr "ПраглÑдальнік калÑндара \"Эвалюцыі\""
+
+#~ msgid "Evolution Tasks viewer"
+#~ msgstr "ПраглÑдальнік заданьнÑÑž \"Эвалюцыі\""
+
+#~ msgid "Could not initialize gnome-vfs"
+#~ msgstr "Ðемагчыма ініцыÑлізаваць gnome-vfs"
+
+#~ msgid "Could not open the folder in '%s'"
+#~ msgstr "Ðемагчыма адчыніць Ñ‚Ñчку у '%s'"
+
+#~ msgid "The URI that the calendar will display"
+#~ msgstr "URI, Ñкі будзе адлюÑтроўваць калÑндар"
+
+#~ msgid "The type of view to show"
+#~ msgstr "Тып праглÑду"
+
+#~ msgid "Display a message"
+#~ msgstr "ÐдлюÑтраваць паведамленьне"
+
+#~ msgid "Alerts"
+#~ msgstr "Сыгналы"
+
+#~ msgid "Time"
+#~ msgstr "ЧаÑ"
+
+#~ msgid "_General"
+#~ msgstr "_ÐÑноўнае"
+
+#, fuzzy
+#~ msgid "Select source"
+#~ msgstr "Выбраць імпарт"
+
+#, fuzzy
+#~ msgid "calendar"
+#~ msgstr "КалÑндар"
+
+#~ msgid "Calendar file could not be updated!\n"
+#~ msgstr "Файл калÑндара Ð½Ñ Ð¼Ð¾Ð¶Ð° быць абноўлены!\n"
+
+#~ msgid "The URI of the tasks folder to display"
+#~ msgstr "URI, Ñкі будзе паказаны у Ñ‚Ñчцы заданьнÑÑž"
+
+#~ msgid "Could not load the tasks in `%s'"
+#~ msgstr "Ðемагчыма загрузіць заданьне Ñž \"%s\""
+
+#~ msgid "Evolution Mail folder viewer"
+#~ msgstr "ПраглÑдальнік паштовае Ñ‚Ñчкі \"Эвалюцыі\"."
+
+#, fuzzy
+#~ msgid "VFolder on Thread"
+#~ msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па адпраўлÑльніку"
+
+#, fuzzy
+#~ msgid "Filter on Thread"
+#~ msgstr "Фільтар па адпраўлÑльніку"
+
+#, fuzzy
+#~ msgid "Failed to migrate pop3 uid caches: %s"
+#~ msgstr "Збой у кÑшы %s: %s"
+
+#, fuzzy
+#~ msgid "Failed to migrate folder expand state: %s"
+#~ msgstr "Збой у кÑшы %s: %s"
+
+#, fuzzy
+#~ msgid "Failed to open store for `%s': %s"
+#~ msgstr "Збой вызначÑÐ½ÑŒÐ½Ñ Ð²ÑƒÐ·Ð»Ð° \"%s\": %s"
+
+#, fuzzy
+#~ msgid "URI of the mail source that the view will display"
+#~ msgstr "URI, Ñкі будзе адлюÑтроўваць калÑндар"
+
+#, fuzzy
+#~ msgid "Default shortcut group"
+#~ msgstr "ЗьмÑніць назву групы лычак"
+
+#, fuzzy
+#~ msgid "Default width of the shortcut bar pane"
+#~ msgstr "Схаваць панÑлю лычак"
+
+#, fuzzy
+#~ msgid "Path to the default contacts folder"
+#~ msgstr "Ðдкрыцьцё Ñ‚Ñчкі з дапомнымі задачамі"
+
+#, fuzzy
+#~ msgid "Path to the default mail folder"
+#~ msgstr "Ðдкрыцьцё Ñ‚Ñчкі з дапомнымі задачамі"
+
+#, fuzzy
+#~ msgid "Path to the default tasks folder"
+#~ msgstr "Ðдкрыцьцё Ñ‚Ñчкі з дапомнымі задачамі"
+
+#, fuzzy
+#~ msgid "Physical URI to the default tasks folder"
+#~ msgstr "Ðдкрыцьцё Ñ‚Ñчкі з дапомнымі задачамі"
+
+#, fuzzy
+#~ msgid "Whether to show the folder bar"
+#~ msgstr "ЗьмÑніць назву гÑтае Ñ‚Ñчкі"
+
+#, fuzzy
+#~ msgid "Whether to show the shortcut bar"
+#~ msgstr "Схаваць панÑлю лычак"
+
+#~ msgid "Cannot initialize the Ximian Evolution shell: %s"
+#~ msgstr "Ðе атрымліваецца ініцыÑлізаваць абалонку \"Эвалюцыі\": %s"
+
+#~ msgid "_Resend..."
+#~ msgstr "ПерадаÑлаць..."
+
+#, fuzzy
+#~ msgid "UID of the contacts source that the view will display"
+#~ msgstr "URI, Ñкі будзе адлюÑтроўваць калÑндар"
+
+#, fuzzy
+#~ msgid "The URI that the address book will display"
+#~ msgstr "URI, Ñкі будзе адлюÑтроўваць калÑндар"
+
+#, fuzzy
+#~ msgid "Address Book Creation Assistant"
+#~ msgstr "Дапаможнік наладкі LDAP"
+
+#, fuzzy
+#~ msgid ""
+#~ "Congratulations, you are\n"
+#~ "\t finished setting up this address book.\n"
+#~ "\n"
+#~ "Please click the \"Apply\" button to save the settings you have entered "
+#~ "here."
+#~ msgstr ""
+#~ "Віншуем! Ð’Ñ‹ Ñкончылі уÑталёўваць доÑтуп да паÑлужніка LDAP.\n"
+#~ "Ð’Ñ‹ ужо зараз маеце доÑтуп да гÑтага каталёга.\n"
+#~ "\n"
+#~ "Калі лаÑка, клікніце кнопку \"Завершыць\", каб захаваць парамÑтры\n"
+#~ "Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñ‚ÑƒÑ‚Ð°ÐºÐ°."
+
+#~ msgid "Finished"
+#~ msgstr "Скончана"
+
+#~ msgid ""
+#~ "Now, you must specify how you want to connect to the LDAP server. The SSL "
+#~ "(Secure Sockets Layer)\n"
+#~ "and TLS (Transport Layer Security) protocols are used by some servers to "
+#~ "cryptographically protect\n"
+#~ "your connection. Ask your system administrator if your LDAP server uses "
+#~ "these protocols."
+#~ msgstr ""
+#~ "Зараз Ð’Ñ‹ муÑіце пазначыць Ñк Ð’Ñ‹ зьбіраецеÑÑ Ð´Ð°Ð»ÑƒÑ‡Ð°Ñ†Ñ†Ð° да "
+#~ "паÑлужнікаLDAP. \n"
+#~ "SSL Ñ– TLS пратаколы ÑÐºÑ–Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўваюцца некаторымі паÑлужнікамі Ð´Ð»Ñ "
+#~ "абароны \n"
+#~ "вашага злучÑньнÑ. Спытайце вашага ÑÑ‹ÑÑ‚Ñмнага адмініÑтратара,Ñкі "
+#~ "пратакол \n"
+#~ "падтрымлівае ваш паÑлужнік LDAP."
+
+#~ msgid ""
+#~ "Selecting this option will let you change Evolution's default settings "
+#~ "for LDAP\n"
+#~ "searches, and for creating and editing contacts. "
+#~ msgstr ""
+#~ "Выбар гÑтага парамÑтра зьменіць Ð´Ð°Ð¿Ð¾Ð¼Ð½Ñ‹Ñ ÑžÑталёўкі \"Эвалюцыі\" Ð´Ð»Ñ "
+#~ "пошукаў на паÑлужніку LDAP,\n"
+#~ "Ñ– ÑварÑÐ½ÑŒÐ½Ñ Ñ– Ñ€ÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž. "
+
+#, fuzzy
+#~ msgid ""
+#~ "Specifying a\n"
+#~ "\t\t\t display name and group is the first step in setting\n"
+#~ "\t\t\t up an address book."
+#~ msgstr ""
+#~ "Пазначае назву ÑÐºÐ°Ñ Ð±Ñ‹Ð»Ð° вызначана на апошнім кроку наладкі паÑлужніка "
+#~ "LDAP."
+
+#, fuzzy
+#~ msgid "Step 3: Connecting to Server"
+#~ msgstr "Крок 2 : ДалучÑньне да паÑлужніка"
+
+#, fuzzy
+#~ msgid "Step 4: Searching the Directory"
+#~ msgstr "Крок 3: Пошук каталёга"
+
+#~ msgid ""
+#~ "The options on this page control how many entries should be included in "
+#~ "your\n"
+#~ "searches, and how long a search should take. Ask your system "
+#~ "administrator if you\n"
+#~ "need to change these options."
+#~ msgstr ""
+#~ "ПарамÑтры на гÑтае Ñтаронцы кіруюць шматлікімі ÑлемÑнтамі ÑÐºÑ–Ñ "
+#~ "адбіваюцца\n"
+#~ "на пошуку, Ñ– Ñгонае працÑглаÑьці. ЗапытайцеÑÑ Ð²Ð°ÑˆÐ°Ð³Ð° ÑÑ‹ÑÑ‚Ñмнага \n"
+#~ "адмініÑтратара,\n"
+#~ "калі вам патрÑбна зьмÑніць гÑÑ‚Ñ‹Ñ Ð¾Ð¿Ñ†Ñ‹Ñ–."
+
+#, fuzzy
+#~ msgid ""
+#~ "This assistant will help you\n"
+#~ "\t create a new address book. \n"
+#~ "\n"
+#~ "Depending on the type of address book you create, additional\n"
+#~ "parameters may be required. Please contact your system\n"
+#~ "administrator if you need help finding this information."
+#~ msgstr ""
+#~ "ГÑÑ‚Ñ‹ дапаможнік дапаможавам наладзіць доÑтуп да паÑлугі\n"
+#~ "каталёгаў выкарыÑтоўваючы паÑлужнікі LDAP. \n"
+#~ "\n"
+#~ "Даданьне новага паÑлужніка LDAP патрабуе пÑўную \n"
+#~ "ÑпÑцыÑлізаваную інфармацыю аб паÑлужніку. Калі лаÑка,\n"
+#~ "зьвÑжыцеÑÑ Ð· вашым адмініÑтратарам каб атрымаць Ñе."
+
+#, fuzzy
+#~ msgid ""
+#~ "This is the name that will appear in your Evolution folder list. It is "
+#~ "for display purposes only. "
+#~ msgstr ""
+#~ "ГÑта назва паÑлужніка ÑÐºÐ°Ñ Ð±ÑƒÐ´Ð·Ðµ адлюÑтроўвацца Ñž ÑьпіÑе \"Эвалюцыі\".\n"
+#~ "ГÑта толькі Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑтраваньнÑ. "
+
+#, fuzzy
+#~ msgid ""
+#~ "You have decided to configure an LDAP server. The first step in doing "
+#~ "this is to provide its name and your\n"
+#~ "log in information. Please ask your system administrator if you are "
+#~ "unsure of this information."
+#~ msgstr ""
+#~ "ГÑта першы крок у наладцы перадачы вашага Ñ–Ð¼Ñ Ð¹ зьвеÑтак Ð´Ð»Ñ ÑƒÐ²Ð°Ñ…Ð¾Ð´Ñƒ на "
+#~ "паÑлужнік LDAP.\n"
+#~ "Калі лаÑка, запытайцеÑÑ, вашага ÑÑ‹ÑÑ‚Ñмнага адмініÑтратара, калі вы "
+#~ "нÑпÑÑžÐ½Ñ‹Ñ Ñƒ гÑÑ‚Ñ‹Ñ… зьвеÑтках."
+
+#~ msgid " B_usiness:"
+#~ msgstr " Працоўны:"
+
+#~ msgid "A_ddress..."
+#~ msgstr "_ÐдрÑÑа..."
+
+#~ msgid "A_ssistant's name:"
+#~ msgstr "Ð†Ð¼Ñ _памочніка:"
+
+#, fuzzy
+#~ msgid "Addressbook:"
+#~ msgstr "Кніга адрÑÑаў"
+
+#, fuzzy
+#~ msgid "Blog address:"
+#~ msgstr "Э.пошта:"
+
+#~ msgid "Business fa_x:"
+#~ msgstr "Працоўны факÑ:"
+
+#~ msgid "Collaboration"
+#~ msgstr "Супрацоўніцтва"
+
+#~ msgid "File a_s:"
+#~ msgstr "Файл _Ñк:"
+
+#, fuzzy
+#~ msgid ""
+#~ "If this person has the ability to participate in a video conference, "
+#~ "enter their address here."
+#~ msgstr ""
+#~ "Калі гÑÑ‚Ñ‹ чалавек разьмÑшчае інфармацыю аб тым калі ён вольны/занÑÑ‚Ñ‹ Ñž "
+#~ "Internet, пазначце тут\n"
+#~ "адрÑÑу гÑтае інфармацыі."
+
+#~ msgid ""
+#~ "If this person publishes free/busy or other calendar information on the "
+#~ "Internet, enter the address\n"
+#~ "of that information here."
+#~ msgstr ""
+#~ "Калі гÑÑ‚Ñ‹ чалавек разьмÑшчае інфармацыю аб тым калі ён вольны/занÑÑ‚Ñ‹ Ñž "
+#~ "Internet, пазначце тут\n"
+#~ "адрÑÑу гÑтае інфармацыі."
+
+#~ msgid "New phone type"
+#~ msgstr "Ðовы тып Ñ‚Ñлефона"
+
+#~ msgid "Organi_zation:"
+#~ msgstr "_УÑтанова:"
+
+#~ msgid "Primary _email:"
+#~ msgstr "ПершаÑÐ½Ð°Ñ Ð­. пошта:"
+
+#~ msgid "_Business:"
+#~ msgstr "Працоўны:"
+
+#~ msgid "_Categories..."
+#~ msgstr "_КатÑгорыі..."
+
+#~ msgid "_Home:"
+#~ msgstr "Хатні:"
+
+#~ msgid "_Manager's name:"
+#~ msgstr "Ð†Ð¼Ñ Ð¼Ñнаджара:"
+
+#~ msgid "_Mobile:"
+#~ msgstr "Мабільны:"
+
+#~ msgid "_Public Calendar URL:"
+#~ msgstr "URI публічнага калÑндару:"
+
+#~ msgid "_This is the mailing address"
+#~ msgstr "ГÑта адрÑÑа Ð´Ð»Ñ Ð»Ñ–ÑтаваньнÑ"
+
+#~ msgid "_Web page address:"
+#~ msgstr "ÐдрÑÑа Web-Ñтаронкі:"
+
+#~ msgid "Account Name"
+#~ msgstr "Ðазва уліковага запіÑа"
+
+#~ msgid "Save Contact as VCard"
+#~ msgstr "Захаваць кантакт Ñк візытоўку (VCard)"
+
+#~ msgid "Business"
+#~ msgstr "Працоўны"
+
+#, fuzzy
+#~ msgid "Calendar Creation Assistant"
+#~ msgstr "Дапаможнік наладкі LDAP"
+
+#, fuzzy
+#~ msgid ""
+#~ "Congratulations, you are finished setting up this calendar.\n"
+#~ "\n"
+#~ "Please click the \"Apply\" button to save the settings you have entered "
+#~ "here."
+#~ msgstr ""
+#~ "Віншуем! Ð’Ñ‹ Ñкончылі уÑталёўваць доÑтуп да паÑлужніка LDAP.\n"
+#~ "Ð’Ñ‹ ужо зараз маеце доÑтуп да гÑтага каталёга.\n"
+#~ "\n"
+#~ "Калі лаÑка, клікніце кнопку \"Завершыць\", каб захаваць парамÑтры\n"
+#~ "Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñ‚ÑƒÑ‚Ð°ÐºÐ°."
+
+#, fuzzy
+#~ msgid ""
+#~ "Congratulations, you are finished setting up this task list.\n"
+#~ "\n"
+#~ "Please click the \"Apply\" button to save the settings you have entered "
+#~ "here."
+#~ msgstr ""
+#~ "Віншуем! Ð’Ñ‹ Ñкончылі уÑталёўваць доÑтуп да паÑлужніка LDAP.\n"
+#~ "Ð’Ñ‹ ужо зараз маеце доÑтуп да гÑтага каталёга.\n"
+#~ "\n"
+#~ "Калі лаÑка, клікніце кнопку \"Завершыць\", каб захаваць парамÑтры\n"
+#~ "Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñ‚ÑƒÑ‚Ð°ÐºÐ°."
+
+#, fuzzy
+#~ msgid ""
+#~ "Specifying a display name and group is the first step in setting up a "
+#~ "calendar."
+#~ msgstr ""
+#~ "Пазначае назву ÑÐºÐ°Ñ Ð±Ñ‹Ð»Ð° вызначана на апошнім кроку наладкі паÑлужніка "
+#~ "LDAP."
+
+#, fuzzy
+#~ msgid ""
+#~ "Specifying a display name and group is the first step in setting up a "
+#~ "task list."
+#~ msgstr ""
+#~ "Пазначае назву ÑÐºÐ°Ñ Ð±Ñ‹Ð»Ð° вызначана на апошнім кроку наладкі паÑлужніка "
+#~ "LDAP."
+
+#, fuzzy
+#~ msgid "Task List Creation Assistant"
+#~ msgstr "Дапаможнік наладкі LDAP"
+
+#, fuzzy
+#~ msgid ""
+#~ "This assistant will help you create a new calendar. \n"
+#~ "\n"
+#~ "Depending on the type of calendar you create, additional\n"
+#~ "parameters may be required. Please contact your system\n"
+#~ "administrator if you need help finding this information."
+#~ msgstr ""
+#~ "ГÑÑ‚Ñ‹ дапаможнік дапаможавам наладзіць доÑтуп да паÑлугі\n"
+#~ "каталёгаў выкарыÑтоўваючы паÑлужнікі LDAP. \n"
+#~ "\n"
+#~ "Даданьне новага паÑлужніка LDAP патрабуе пÑўную \n"
+#~ "ÑпÑцыÑлізаваную інфармацыю аб паÑлужніку. Калі лаÑка,\n"
+#~ "зьвÑжыцеÑÑ Ð· вашым адмініÑтратарам каб атрымаць Ñе."
+
+#, fuzzy
+#~ msgid ""
+#~ "This assistant will help you create a new task list.\n"
+#~ "\n"
+#~ "Depending on the type of task list you create, additional\n"
+#~ "parameters may be required. Please contact your system\n"
+#~ "administrator if you need help finding this information."
+#~ msgstr ""
+#~ "ГÑÑ‚Ñ‹ дапаможнік дапаможавам наладзіць доÑтуп да паÑлугі\n"
+#~ "каталёгаў выкарыÑтоўваючы паÑлужнікі LDAP. \n"
+#~ "\n"
+#~ "Даданьне новага паÑлужніка LDAP патрабуе пÑўную \n"
+#~ "ÑпÑцыÑлізаваную інфармацыю аб паÑлужніку. Калі лаÑка,\n"
+#~ "зьвÑжыцеÑÑ Ð· вашым адмініÑтратарам каб атрымаць Ñе."
+
+#~ msgid ""
+#~ "Error while reading file %s:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Памылка пад Ñ‡Ð°Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ñ„Ð°Ð¹Ð»Ð° %s:\n"
+#~ "%s"
+
+#~ msgid "Error saving file: %s"
+#~ msgstr "Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ„Ð°Ð¹Ð»Ð°: %s"
+
+#~ msgid "Error loading file: %s"
+#~ msgstr "Памылка пад Ñ‡Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ– файла: %s"
+
+#~ msgid "Error accessing file: %s"
+#~ msgstr "Памылка доÑтупу да файла: %s"
+
+#~ msgid ""
+#~ "Unable to seek on file: %s\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма зрушыць па файле: %s\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "Unable to truncate file: %s\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма уÑекчы файл: %s\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "Error autosaving message: %s\n"
+#~ " %s"
+#~ msgstr ""
+#~ "Памылка Ð°ÑžÑ‚Ð°Ð·Ð°Ñ…Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ: %s\n"
+#~ " %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Ximian Evolution has found unsaved messages from a previous session.\n"
+#~ "Would you like to try to recover them?"
+#~ msgstr ""
+#~ "\"ЭвалюцыÑ\" адшукала Ð½ÐµÐ·Ð°Ñ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ з папÑÑ€ÑднÑга ÑÑанÑа.\n"
+#~ "Жадаеце пÑпрабаваць аднавіць Ñ–Ñ…?"
+
+#~ msgid ""
+#~ "The message \"%s\" has not been sent.\n"
+#~ "\n"
+#~ "Do you wish to save your changes?"
+#~ msgstr ""
+#~ "Паведамленьне \"%s\" не было даÑлана.\n"
+#~ "\n"
+#~ "Жадаеце захаваць зьмены?"
+
+#~ msgid "Rule name '%s' is not unique, choose another."
+#~ msgstr "Пазва правіла '%s' Ð½Ñ ÑžÐ½Ñ–ÐºÐ°Ð»ÑŒÐ½Ð°, выбÑрыце іншую."
+
+#~ msgid "You need to to specify at least one folder as a source."
+#~ msgstr "Вам Ñ‚Ñ€Ñба пазначыць Ñ…Ð°Ñ†Ñ Ð±Ñ‹ адну Ñ‚Ñчку Ñž ÑкаÑьці крыніцы."
+
+#~ msgid "You must specify a valid script name."
+#~ msgstr "Ðеабходна пазначыць правільную назву ÑцÑнара."
+
+#~ msgid ""
+#~ "This message has no subject.\n"
+#~ "Really send?"
+#~ msgstr ""
+#~ "ГÑтае паведамленьне Ð½Ñ Ð¼Ð°Ðµ Ñ‚Ñмы.\n"
+#~ "ДаÑлаць Ñго?"
+
+#~ msgid "This message contains only Bcc recipients."
+#~ msgstr "ГÑтае паведамленьне утрымлівае толькі атрымоўцаў Ñхаванае копіі."
+
+#~ msgid "You must specify recipients in order to send this message."
+#~ msgstr "Ð’Ñ‹ муÑіце пазначыць атрымоўцаў, каб даÑлаць гÑтае паведамленьне."
+
+#, fuzzy
+#~ msgid "Cannot move folder `%s': illegal operation"
+#~ msgstr "ÐеатрымалаÑÑ Ð·ÑŒÐ¼Ñніць назву Ñ‚Ñчкі: %s: Ð½ÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð¿ÑрацыÑ"
+
+#, fuzzy
+#~ msgid "Could not delete folder: %s"
+#~ msgstr ""
+#~ "Ðемагчыма выдаліць Ñ‚Ñчку \"%s\":\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "`%s' already exists.\n"
+#~ "Overwrite it?"
+#~ msgstr ""
+#~ "`%s' ужо Ñ–Ñнуе.\n"
+#~ "ПеразапіÑаць?"
+
+#, fuzzy
+#~ msgid "Error: '%s' exists and is not a regular file"
+#~ msgstr "Файл \"%s\" Ð½Ñ Ñ–Ñнуе альбо не зьÑўлÑецца звычайным файлам."
+
+#, fuzzy
+#~ msgid ""
+#~ "This operation will permanently remove all deleted messages in the folder "
+#~ "`%s'. If you continue, you will not be able to recover these messages.\n"
+#~ "\n"
+#~ "Really erase these messages?"
+#~ msgstr ""
+#~ "ГÑÑ‚Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ð¿Ñ€Ñ‹Ð²Ñдзе да поўнага вынішчÑÐ½ÑŒÐ½Ñ ÑƒÑÑ–Ñ… паведамленьнÑÑž\n"
+#~ "пазначаных Ñк выдаленыÑ. Калі вы працÑгніце, гÑтае нельга будзе "
+#~ "аднавіць.\n"
+#~ "\n"
+#~ "Сапраўды Ñьцёрці паведамленьні?"
+
+#, fuzzy
+#~ msgid ""
+#~ "This operation will permanently remove all deleted messages in all "
+#~ "folders. If you continue, you will not be able to recover these "
+#~ "messages.\n"
+#~ "\n"
+#~ "Really erase these messages?"
+#~ msgstr ""
+#~ "ГÑÑ‚Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ð¿Ñ€Ñ‹Ð²Ñдзе да поўнага вынішчÑÐ½ÑŒÐ½Ñ ÑƒÑÑ–Ñ… паведамленьнÑÑž\n"
+#~ "пазначаных Ñк выдаленыÑ. Калі вы працÑгніце, гÑтае нельга будзе "
+#~ "аднавіць.\n"
+#~ "\n"
+#~ "Сапраўды Ñьцёрці паведамленьні?"
+
+#~ msgid "The following filter rule(s):\n"
+#~ msgstr "ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ð²Ñ–Ð»Ñ‹ фільтара(Ñž):\n"
+
+#~ msgid ""
+#~ "Used the removed folder:\n"
+#~ " '%s'\n"
+#~ "And have been updated."
+#~ msgstr ""
+#~ "ВыкарыÑтана Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°Ñ Ñ‚Ñчка:\n"
+#~ " '%s'\n"
+#~ "І будзе абноўлена."
+
+#~ msgid "Save signature"
+#~ msgstr "Захаваць подпіÑ"
+
+#~ msgid "Trying to edit a vfolder '%s' which doesn't exist."
+#~ msgstr "Спроба Ñ€Ñдагаваць віртуальную Ñ‚Ñчку '%s' ÑÐºÐ°Ñ Ð½Ðµ Ñ–Ñнуе."
+
+#~ msgid "_Selection:"
+#~ msgstr "_ВылучÑньне:"
+
+#, fuzzy
+#~ msgid "New Addressbook Book"
+#~ msgstr "Кніга адрÑÑаў"
+
+#, fuzzy
+#~ msgid "The view showing when the calendar starts"
+#~ msgstr "Прагледзіць выглÑд калÑндара Ñž друку"
+
+#, fuzzy
+#~ msgid "_Task List"
+#~ msgstr "Ð—ÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž"
+
+#, fuzzy
+#~ msgid "_minute(s)"
+#~ msgstr "хвіліна(ы)"
+
+#~ msgid "Select Default Folder"
+#~ msgstr "Выбраць дапомную Ñ‚Ñчку"
+
+#~ msgid "Default Folders"
+#~ msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ñ‹Ñ Ñ‚Ñчкі"
+
+#~ msgid "Offline Folders"
+#~ msgstr "Ð›Ð°ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі"
+
+#~ msgid "Autocompletion Folders"
+#~ msgstr "ТÑчкі аўтазавÑршÑньнÑ"
+
+#~ msgid ""
+#~ "Cannot create the specified folder:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма Ñтварыць пазначаную Ñ‚Ñчку:\n"
+#~ "%s"
+
+#~ msgid "The specified folder name is not valid: %s"
+#~ msgstr "ÐŸÐ°Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° Ñ‚Ñчкі недапушчальна: %s"
+
+#~ msgid "Please select a user."
+#~ msgstr "Калі лаÑка, выбÑрыце карыÑтальніка."
+
+#~ msgid "Opening Folder"
+#~ msgstr "Ðдкрыцьцё Ñ‚Ñчкі"
+
+#~ msgid "Opening Folder \"%s\""
+#~ msgstr "Ðдкрыцьцё Ñ‚Ñчкі \"%s\""
+
+#~ msgid "in \"%s\" ..."
+#~ msgstr "у \"%s\" ..."
+
+#~ msgid "Could not open shared folder: %s."
+#~ msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ падзеленую Ñ‚Ñчку: %s"
+
+#~ msgid "Cannot find the specified shared folder."
+#~ msgstr "Ðемагчыма адшукаць пазначаную падзеленую Ñ‚Ñчку."
+
+#, fuzzy
+#~ msgid "Create a new window"
+#~ msgstr "Стварыць запыт новае нарады"
+
+#, fuzzy
+#~ msgid "Open a new window"
+#~ msgstr "Ðдкрыць у новым акне"
+
+#~ msgid "2:30"
+#~ msgstr "2:30"
+
+#, fuzzy
+#~ msgid "Address Book Sources"
+#~ msgstr "Крыніцы кнігі адрÑÑаў..."
+
+#~ msgid "Selected:"
+#~ msgstr "Выбранае:"
+
+#, fuzzy
+#~ msgid "1 contact"
+#~ msgstr "Кантакт"
+
+#, fuzzy
+#~ msgid "and %d other contacts."
+#~ msgstr "і %d іншых картак."
+
+#~ msgid "Send an Email"
+#~ msgstr "ДаÑлаць пошту"
+
+#~ msgid "1 day"
+#~ msgstr "1 дзень"
+
+#~ msgid "1 week"
+#~ msgstr "1 тыдзень"
+
+#~ msgid "1 hour"
+#~ msgstr "1 гадзіна"
+
+#~ msgid "1 minute"
+#~ msgstr "1 хвіліна"
+
+#~ msgid "1 second"
+#~ msgstr "1 ÑÑкунда"
+
+#, fuzzy
+#~ msgid "Description"
+#~ msgstr "ÐпіÑаньне:"
+
+#, fuzzy
+#~ msgid "component"
+#~ msgstr "СуÑÑ‚Ñ€Ñча"
+
+#~ msgid "Geographical Position"
+#~ msgstr "Геаграфічнае разьмÑшчÑньне"
+
+#~ msgid "URL"
+#~ msgstr "URL"
+
+#~ msgid "Every %d days"
+#~ msgstr "ÐšÐ¾Ð¶Ð½Ñ‹Ñ %d дзён"
+
+#~ msgid "Every %d weeks"
+#~ msgstr "ÐšÐ¾Ð¶Ð½Ñ‹Ñ %d тыдні"
+
+#~ msgid "Every %d weeks on "
+#~ msgstr "ÐšÐ¾Ð¶Ð½Ñ‹Ñ %d тыдні на"
+
+#~ msgid "every %d months"
+#~ msgstr "ÐºÐ¾Ð¶Ð½Ñ‹Ñ %d мÑÑацаў"
+
+#~ msgid "Every %d years"
+#~ msgstr "ÐšÐ¾Ð¶Ð½Ñ‹Ñ %d год"
+
+#~ msgid "Go To Date"
+#~ msgstr "ПерайÑьці да даты"
+
+#, fuzzy
+#~ msgid "_Go To Today"
+#~ msgstr "ПерайÑьці да ÑёньнÑ"
+
+#, fuzzy
+#~ msgid "LDAP Server Name:"
+#~ msgstr "Ðазва паÑлужніка"
+
+#~ msgid "STARTTLS request timed out: %s"
+#~ msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на запыт STARTTLS: %s"
+
+#~ msgid "STARTTLS response error"
+#~ msgstr "Памылка пад Ñ‡Ð°Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на STARTTLS"
+
+#~ msgid "HELO request timed out: %s"
+#~ msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на запыт HELO: %s"
+
+#~ msgid "HELO response error"
+#~ msgstr "Памылка адказу на HELO"
+
+#~ msgid "AUTH request timed out: %s"
+#~ msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на запыт AUTH: %s"
+
+#~ msgid "AUTH request failed."
+#~ msgstr "Памылка запыту AUTH."
+
+#~ msgid "MAIL FROM response error"
+#~ msgstr "Памылка адказу на MAIL FROM"
+
+#~ msgid "DATA response error"
+#~ msgstr "Памылка адказу на DATA"
+
+#~ msgid "DATA send timed out: message termination: %s: mail not sent"
+#~ msgstr ""
+#~ "Перавышаны Ñ‡Ð°Ñ Ð°Ð´Ð¿Ñ€Ð°ÑžÐºÑ– DATA: паведамленьне перарвана: %s: пошта не "
+#~ "даÑлана"
+
+#~ msgid "DATA termination response error"
+#~ msgstr "Збой адказу пад Ñ‡Ð°Ñ Ð¿ÐµÑ€Ð°Ñ€Ñ‹Ð²Ð°Ð½ÑŒÐ½Ñ DATA"
+
+#~ msgid "RSET request timed out: %s"
+#~ msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на RSET: %s"
+
+#~ msgid "RSET response error"
+#~ msgstr "Памылка адказу на RSET"
+
+#~ msgid "QUIT request timed out: %s"
+#~ msgstr "Перавышаны Ñ‡Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½ÑŒÐ½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ на запыт QUIT: %s"
+
+#~ msgid "QUIT response error"
+#~ msgstr "Памылка адказу на QUIT"
+
+#~ msgid "%d seconds ago"
+#~ msgstr "%d ÑÑкунды таму"
+
+#~ msgid "%d minutes ago"
+#~ msgstr "%d хвіліны таму"
+
+#~ msgid "%d hours ago"
+#~ msgstr "%d гадзіны таму"
+
+#~ msgid "%d days ago"
+#~ msgstr "%d дзён таму"
+
+#~ msgid "%d weeks ago"
+#~ msgstr "%d тыдні таму"
+
+#~ msgid "%d months ago"
+#~ msgstr "%d меÑÑцаў таму"
+
+#~ msgid "%d years ago"
+#~ msgstr "%d гады таму"
+
+#~ msgid "Then"
+#~ msgstr "Тады"
+
+#~ msgid "If"
+#~ msgstr "Калі"
+
+#~ msgid "Edit Filters"
+#~ msgstr "РÑдагаваньне фільтраў"
+
+#~ msgid "Edit VFolders"
+#~ msgstr "РÑдагаваньне віртуальных Ñ‚Ñчак"
+
+#~ msgid "Outgoing"
+#~ msgstr "ДаÑланыÑ"
+
+#~ msgid "Pipe Message to Shell Command"
+#~ msgstr "Скіраваць паведамленьне у каманду абалонкі"
+
+#~ msgid "Shell Command"
+#~ msgstr "Каманда абалонкі"
+
+#~ msgid "Rules"
+#~ msgstr "Правілы"
+
+#~ msgid "[script]"
+#~ msgstr "[ÑцÑнар]"
+
+#~ msgid "Current store format:"
+#~ msgstr "БÑгучы фармат захаваньнÑ:"
+
+#~ msgid "Index body contents"
+#~ msgstr "Цела індÑкÑа утрымлівае"
+
+#~ msgid "New store format:"
+#~ msgstr "Ðовы фармат захаваньнÑ:"
+
+#~ msgid ""
+#~ "Note: When converting between mailbox formats, a failure\n"
+#~ "(such as lack of disk space) may not be automatically\n"
+#~ "recoverable. Please use this feature with care."
+#~ msgstr ""
+#~ "Увага: пад Ñ‡Ð°Ñ ÐºÐ°Ð½Ð²ÑÑ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¼Ñ–Ð¶ фарматамі паштовых ÑкрынÑÑž збой \n"
+#~ "(Ñк недахоп дыÑкавае праÑторы) може Ð½Ñ Ð±Ñ‹Ñ†ÑŒ аўтаматычна адноўлены\n"
+#~ "КарыÑтайцеÑÑ Ð³Ñтай магчымаÑьцю аÑьцÑрожна."
+
+#~ msgid "maildir"
+#~ msgstr "maildir"
+
+#~ msgid "mbox"
+#~ msgstr "mbox"
+
+#~ msgid "mh"
+#~ msgstr "mh"
+
+#~ msgid "(SSL is not supported in this build of Evolution)"
+#~ msgstr "(SSL не падтрымліваецца Ñž гÑтае зборцы \"Эвалюцыі\")"
+
+#~ msgid "Account Information"
+#~ msgstr "ЗьвеÑткі аб уліковым запіÑе"
+
+#~ msgid "Composing Messages"
+#~ msgstr "СтварÑньне паведамленьнÑÑž"
+
+#~ msgid "Configuration"
+#~ msgstr "КанфігурацыÑ"
+
+#~ msgid "Default Behavior"
+#~ msgstr "Ð”Ð°Ð¿Ð¾Ð¼Ð½Ñ‹Ñ Ð¿Ð°Ð²Ð¾Ð´Ð·Ñ–Ð½Ñ‹"
+
+#~ msgid "Deleting Mail"
+#~ msgstr "Выдаленьне пошты"
+
+#, fuzzy
+#~ msgid "Filter Options"
+#~ msgstr "<< Менш можнаÑьцÑÑž"
+
+#~ msgid "Labels and Colors"
+#~ msgstr "Ðдмеціны Ñ– колеры"
+
+#~ msgid "Loading Images"
+#~ msgstr "Загрузка відарыÑаў"
+
+#~ msgid "Message Display"
+#~ msgstr "ÐдлюÑтраваньне паведамленьнÑÑž"
+
+#~ msgid "Message Fonts"
+#~ msgstr "Шрыфт паведамленьнÑ"
+
+#~ msgid "Printed Fonts"
+#~ msgstr "Шрыфты Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ"
+
+#~ msgid "Re_member this password"
+#~ msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
+
+#~ msgid "Remember this _password"
+#~ msgstr "Запомніць гÑÑ‚Ñ‹ пароль"
+
+#~ msgid "Required Information"
+#~ msgstr "ÐÐµÐ°Ð±Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ"
+
+#~ msgid "Restore Defaults"
+#~ msgstr "Ðднавіць дапомнае"
+
+#~ msgid "S_ecurity"
+#~ msgstr "БÑÑьпека"
+
+#~ msgid "Secure MIME (S/MIME)"
+#~ msgstr "Ðбараніць MIME (S/MIME)"
+
+#~ msgid "Server Configuration"
+#~ msgstr "Ðаладка паÑлужніка"
+
+#~ msgid "_Authentication Type: "
+#~ msgstr "Тып аўтарызацыі: "
+
+#~ msgid "_Authentication type: "
+#~ msgstr "_Тып аўтарызацыі: "
+
+#~ msgid "_Default signature:"
+#~ msgstr "_Дапомны подпіÑ:"
+
+#~ msgid "_Full name:"
+#~ msgstr "Поўнае імÑ:"
+
+#~ msgid "_Identity"
+#~ msgstr "_ТоеÑнаÑьць"
+
+#, fuzzy
+#~ msgid "_Junk"
+#~ msgstr "ЧÑрвень"
+
+#~ msgid "_Receiving Mail"
+#~ msgstr "_Ðтрыманьне пошты"
+
+#~ msgid "_Restore defaults"
+#~ msgstr "_Ð’Ñрнуць дапомнаÑьці"
+
+#~ msgid "_Sending Mail"
+#~ msgstr "Ð_дпраўка пошты"
+
+#~ msgid "Sending \"%s\""
+#~ msgstr "Ðдпраўленьне \"%s\""
+
+#~ msgid "Failed on message %d of %d"
+#~ msgstr "Збой на паведамленьні %d з %d"
+
+#~ msgid "Search"
+#~ msgstr "Пошук"
+
+#, fuzzy
+#~ msgid "Digital Signature"
+#~ msgstr "РÑдагаваць подпіÑ"
+
+#, fuzzy
+#~ msgid "Encryption"
+#~ msgstr "ВыключÑньні"
+
+#, fuzzy
+#~ msgid "Quit Assistant"
+#~ msgstr "Памочнік"
+
+#~ msgid "_Search for Contacts"
+#~ msgstr "Шукаць кантакты"
+
+#~ msgid "Go to _Date"
+#~ msgstr "ПерайÑьці да _даты"
+
+#~ msgid "Go to today"
+#~ msgstr "ПерайÑьці да ÑёньнÑ"
+
+#~ msgid "With _Category"
+#~ msgstr "з _катÑгорыÑй"
+
+#~ msgid "Addressbook Sources"
+#~ msgstr "Крыніцы кнігаў адрÑÑаў..."
+
+#~ msgid "No data provided"
+#~ msgstr "ÐÑма даньнÑÑž"
+
+#~ msgid ""
+#~ "Could not open file `%s':\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма адкрыць файл \"%s\":\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Could not create directory `%s':\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма Ñтварыць каталёг %s:\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "Could not create file `%s':\n"
+#~ "%s"
+#~ msgstr ""
+#~ "ÐеатрымалаÑÑ Ñтварыць файл \"%s\":\n"
+#~ "%s"
+
+#~ msgid "`%s' is not a directory."
+#~ msgstr "\"%s\" не зьÑўлÑецца каталёгам."
+
+#~ msgid "Importing %s as %s"
+#~ msgstr "Імпартаваньне %s Ñк %s"
+
+#~ msgid "Scanning mail filters"
+#~ msgstr "Сканаваньне фільтараў пошты"
+
+#~ msgid "Scanning directory"
+#~ msgstr "Сканаваньне каталёга"
+
+#~ msgid "Cannot move a folder over itself."
+#~ msgstr "Ðемагчыма перанеÑьці Ñ‚Ñчку Ñž Ñаму ÑÑбе."
+
+#~ msgid "Cannot copy a folder over itself."
+#~ msgstr "Ðемагчыма капіÑваць Ñ‚Ñчку Ñž Ñаму ÑÑбе."
+
+#~ msgid "Specify a folder to copy folder \"%s\" into:"
+#~ msgstr "Пазначце Ñ‚Ñчку Ð´Ð»Ñ ÐºÐ°Ð¿Ñ–ÑÐ²Ð°Ð½ÑŒÐ½Ñ Ñž Ñе Ñ‚Ñчкі \"%s\":"
+
+#~ msgid "Copy Folder"
+#~ msgstr "КапіÑваць Ñ‚Ñчку"
+
+#~ msgid "Specify a folder to move folder \"%s\" into:"
+#~ msgstr "Пазначце Ñ‚Ñчку Ð´Ð»Ñ Ð¿ÐµÑ€Ð°Ð½Ð¾Ñу Ñž Ñе Ñ‚Ñчкі \"%s\":"
+
+#~ msgid "Move Folder"
+#~ msgstr "ПерамÑÑьціць Ñ‚Ñчку"
+
+#~ msgid ""
+#~ "Cannot rename folder:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма зьмÑніць назву Ñ‚Ñчкі:\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "Cannot remove folder:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма зьмÑніць назву Ñ‚Ñчкі:\n"
+#~ " %s"
+
+#~ msgid "Create New Shortcut Group"
+#~ msgstr "Стварыць новую групу лычак"
+
+#~ msgid "Group name:"
+#~ msgstr "Ðазва групы:"
+
+#~ msgid "Do you really want to remove group \"%s\" from the shortcut bar?"
+#~ msgstr "Ð’Ñ‹ Ñапраўды жадаеце зьмÑніць назву групы \"%s\" з панÑлі лычак?"
+
+#~ msgid "Rename Shortcut Group"
+#~ msgstr "ЗьмÑніць назву групы лычак"
+
+#~ msgid "Rename selected shortcut group to:"
+#~ msgstr "ЗьмÑніць назву вылучанае групы лычак на:"
+
+#~ msgid "_Small Icons"
+#~ msgstr "_ÐœÐ°Ð»Ñ‹Ñ Ð·Ð½Ð°Ñ‡ÐºÑ–"
+
+#~ msgid "Show the shortcuts as small icons"
+#~ msgstr "Паказаць лычкі Ñк Ð¼Ð°Ð»Ñ‹Ñ Ð·Ð½Ð°Ñ‡ÐºÑ–"
+
+#~ msgid "_Large Icons"
+#~ msgstr "_Ð’ÑÐ»Ñ–ÐºÑ–Ñ Ð·Ð½Ð°Ñ‡ÐºÑ–"
+
+#~ msgid "Show the shortcuts as large icons"
+#~ msgstr "Паказаць лычкі Ñк вÑÐ»Ñ–ÐºÑ–Ñ Ð·Ð½Ð°Ñ‡ÐºÑ–"
+
+#~ msgid "_Remove this Group..."
+#~ msgstr "_Выдаліць групу..."
+
+#~ msgid "Remove this shortcut group"
+#~ msgstr "Выдаліць групу лычак"
+
+#~ msgid "Re_name this Group..."
+#~ msgstr "ЗьмÑніць назву групы..."
+
+#~ msgid "Rename this shortcut group"
+#~ msgstr "ЗьмÑніць назву групы лычак"
+
+#~ msgid "_Hide the Shortcut Bar"
+#~ msgstr "_Схаваць панÑлю лычак"
+
+#~ msgid "Hide the shortcut bar"
+#~ msgstr "Схаваць панÑлю лычак"
+
+#~ msgid "Create _Default Shortcuts"
+#~ msgstr "Стварыць Ð´Ð°Ð¿Ð¾Ð¼Ð½Ñ‹Ñ _лычкі"
+
+#~ msgid "Create Default Shortcuts"
+#~ msgstr "Стварыць Ð´Ð°Ð¿Ð¾Ð¼Ð½Ñ‹Ñ Ð»Ñ‹Ñ‡ÐºÑ–"
+
+#~ msgid "Rename Shortcut"
+#~ msgstr "ЗьмÑніць назву лычкі"
+
+#~ msgid "Rename selected shortcut to:"
+#~ msgstr "ЗьмÑніць назву вылучанай Ñ‚Ñчкі на:"
+
+#~ msgid "Open the folder linked to this shortcut"
+#~ msgstr "Ðдкрыць Ñ‚Ñчку зьвÑзаную з гÑтай лычкай"
+
+#~ msgid "Open in New _Window"
+#~ msgstr "Ðдкрыць у новым акне"
+
+#~ msgid "Open the folder linked to this shortcut in a new window"
+#~ msgstr "Ðдкрыць Ñ‚Ñчку зьвÑзаную з гÑтай лычкай у новым акне"
+
+#~ msgid "Rename this shortcut"
+#~ msgstr "ЗьмÑніць назву лычкі"
+
+#~ msgid "Re_move"
+#~ msgstr "_Выдаліць"
+
+#~ msgid "Remove this shortcut from the shortcut bar"
+#~ msgstr "Выдаліць гÑтую лычку з панÑлі лычак"
+
+#~ msgid "Shortcuts"
+#~ msgstr "Лычкаі"
+
+#~ msgid "\"%s\" in \"%s\""
+#~ msgstr "\"%s\" у \"%s\""
+
+#~ msgid "Print Summary"
+#~ msgstr "Ðадрукаваць Ð°Ð³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі"
+
+#~ msgid "Print summary"
+#~ msgstr "Ðадрукаваць Ð°Ð³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі"
+
+#~ msgid "Reload"
+#~ msgstr "Перагрузка"
+
+#~ msgid "Reload the view"
+#~ msgstr "Перагрузіць праглÑд"
+
+#~ msgid "Copy to folder..."
+#~ msgstr "КапіÑваць у Ñ‚Ñчку..."
+
+#~ msgid "Move to folder..."
+#~ msgstr "ПерамÑÑÑŒÑціць у Ñ‚Ñчку..."
+
+#, fuzzy
+#~ msgid "Map It"
+#~ msgstr "МайотÑ"
+
+#~ msgid "Home Address"
+#~ msgstr "ХатнÑÑ Ð°Ð´Ñ€ÑÑа"
+
+#, fuzzy
+#~ msgid "Work Address"
+#~ msgstr "ХатнÑÑ Ð°Ð´Ñ€ÑÑа"
+
+#~ msgid "Other Address"
+#~ msgstr "Ð†Ð½ÑˆÑ‹Ñ Ð°Ð´Ñ€ÑÑÑ‹"
+
+#, fuzzy
+#~ msgid "Could not open '%s': %s"
+#~ msgstr "Ðемагчыма зьмÑніць назву '%s': %s"
+
+#, fuzzy
+#~ msgid "Could not create temporary mbox store: %s"
+#~ msgstr "ÐеатрымалаÑÑ Ñтварыць чаÑовы каталёг: %s"
+
+#, fuzzy
+#~ msgid "Could not create temporary mbox folder: %s"
+#~ msgstr "Ðемагчыма Ñтварыць чаÑовы файл '%s': %s"
+
+#, fuzzy
+#~ msgid "Could not copy messages to temporary mbox folder: %s"
+#~ msgstr "Ðемагчыма закрыць чаÑовую Ñ‚Ñчку: %s"
+
+#, fuzzy
+#~ msgid "Session not initialised"
+#~ msgstr "ÐеатрымалаÑÑ Ñ–Ð½Ñ–Ñ†Ñ‹Ñлізаваць Bonobo"
+
+#~ msgid "This message is digitally signed and has been found to be authentic."
+#~ msgstr ""
+#~ "ГÑта паведамленьне з лічбавым подпіÑам, Ñкі прайшоў праверку тоеÑнаÑьці."
+
+#~ msgid ""
+#~ "This message is digitally signed but can not be proven to be authentic."
+#~ msgstr ""
+#~ "ГÑта паведамленьне з лічбавым подпіÑам, Ñкі Ð½Ñ Ð¼Ð¾Ð¶Ð° быць правераны на "
+#~ "тоеÑнаÑьць."
+
+#~ msgid ""
+#~ "There is no importer that is able to handle\n"
+#~ "%s"
+#~ msgstr ""
+#~ "ÐÑма адпаведнага імпарту каб апрацаваць гÑта\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "Importing %s.\n"
+#~ "Starting %s"
+#~ msgstr ""
+#~ "Імпартаваньне %s.\n"
+#~ "ЗапуÑк %s"
+
+#~ msgid "Error starting %s"
+#~ msgstr "Памылка запуÑку %s"
+
+#~ msgid "Select a destination folder for importing this data"
+#~ msgstr "ВыбÑрыце мейÑца прызначÑÐ½ÑŒÐ½Ñ Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð³ÑÑ‚Ñ‹Ñ… даньнÑÑž"
+
+#~ msgid "Go to folder..."
+#~ msgstr "Пераход у Ñ‚Ñчку..."
+
+#~ msgid "Select the folder that you want to open"
+#~ msgstr "ВыбÑрыце Ñ‚Ñчку, Ñкую вы жадаеце адкрыць"
+
+#~ msgid "Create New Shortcut"
+#~ msgstr "Стварыць новую лычку"
+
+#~ msgid "Select the folder you want the shortcut to point to:"
+#~ msgstr "ВыбÑрыце Ñ‚Ñчку на Ñкую муÑіць указываць лычка:"
+
+#~ msgid "Import File (step 3 of 3)"
+#~ msgstr "Імпартаваньне файла (апошні крок з 3)"
+
+#~ msgid "Importer Type (step 1 of 3)"
+#~ msgstr "Тып імпарту (1 крок з 3)"
+
+#~ msgid "Select Importers (step 2 of 3)"
+#~ msgstr "ВыбÑрыце імпарт (2 крок з 3)"
+
+#~ msgid "Select a File (step 2 of 3)"
+#~ msgstr "ВыбÑрыце файл (2 крок з 3)"
+
+#~ msgid "Evolution is now exiting ..."
+#~ msgstr "\"ЭвалюцыÑ\" зараз Ñканчае працу..."
+
+#, fuzzy
+#~ msgid "Could not create a directory for the new addressbook."
+#~ msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
+
+#, fuzzy
+#~ msgid "Birthdays"
+#~ msgstr "_Дзень народзінаў:"
+
+#, fuzzy
+#~ msgid "Could not create directory for new calendar"
+#~ msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
+
+#~ msgid ""
+#~ "The task backend for\n"
+#~ "%s\n"
+#~ " has crashed. You will have to restart Evolution in order to use it again"
+#~ msgstr ""
+#~ "Праграма задачаў\n"
+#~ "%s\n"
+#~ "павалілаÑÑ. Ð’Ñ‹ муÑіце перазагрузіць \"Эвалюцыю\" Ñ– паÑпрабаваць ÑÑˆÑ‡Ñ Ñ€Ð°Ð·"
+
+#~ msgid ""
+#~ "The calendar backend for\n"
+#~ "%s\n"
+#~ " has crashed. You will have to restart Evolution in order to use it again"
+#~ msgstr ""
+#~ "Праграма календара длÑ\n"
+#~ "%s\n"
+#~ "павалілаÑÑ. Ð’Ñ‹ муÑіце перазагрузіць \"Эвалюцыю\" Ñ– паÑпрабаваць ÑÑˆÑ‡Ñ Ñ€Ð°Ð·"
+
+#, fuzzy
+#~ msgid "Spam"
+#~ msgstr "ПырÑкі"
+
+#, fuzzy
+#~ msgid "Failed to migrate `%s': %s"
+#~ msgstr "Збой у кÑшы %s: %s"
+
+#, fuzzy
+#~ msgid "Rename"
+#~ msgstr "ЗьмÑніць _назву"
+
+#~ msgid "Edit LDAP Server"
+#~ msgstr "РÑдагаваць паÑлужнік LDAP"
+
+#~ msgid "Selected Contacts:"
+#~ msgstr "Ð’Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹:"
+
+#~ msgid ""
+#~ "Type a name into the entry, or\n"
+#~ "select one from the list below:"
+#~ msgstr ""
+#~ "ÐабÑрыце Ñ–Ð¼Ñ Ñƒ полі, ці\n"
+#~ "выбÑрыце Ñго Ñа ÑьпіÑу:"
+
+#~ msgid "_Folder:"
+#~ msgstr "_ТÑчка:"
+
+#~ msgid "East Timor"
+#~ msgstr "УÑходні Тымор"
+
+#~ msgid "Yugoslavia"
+#~ msgstr "ЮгаÑлавіÑ"
+
+#, fuzzy
+#~ msgid "Rename this calendar to"
+#~ msgstr "Ðадрукаваць гÑÑ‚Ñ‹ калÑндар"
+
+#, fuzzy
+#~ msgid "<b>Alarm Action</b>"
+#~ msgstr "Ð†Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð°"
+
+#, fuzzy
+#~ msgid "<b>Classification</b>"
+#~ msgstr "КлÑÑыфікацыÑ"
+
+#, fuzzy
+#~ msgid "<b>Su_mmary</b>"
+#~ msgstr "<b>Пачынаецца:</b> "
+
+#, fuzzy
+#~ msgid "Could not create cache for new calendar"
+#~ msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
+
+#, fuzzy
+#~ msgid "A group must be selected"
+#~ msgstr "Ðрганізатар муÑіць быць пазначаны."
+
+#, fuzzy
+#~ msgid "Could not create directory for new task list"
+#~ msgstr "Ðемагчыма Ñтварыць каталёг %s: %s"
+
+#, fuzzy
+#~ msgid "<b>Progress</b>"
+#~ msgstr "Выкананьне"
+
+#~ msgid "The method required to load `%s' is not supported"
+#~ msgstr "ÐœÑтад неабходны Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ– \"%s\" не падтрымліваецца"
+
+#~ msgid "You don't have permission to open the folder in `%s'"
+#~ msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð°ÐµÑ†Ðµ правоў Ð´Ð»Ñ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒÑ†Ñ Ñ‚Ñчкі Ñž `%s'"
+
+#~ msgid "Could not open the folder in `%s'"
+#~ msgstr "Ðемагчыма адчыніць Ñ‚Ñчку \"%s\""
+
+#~ msgid "The method required to open `%s' is not supported"
+#~ msgstr "ÐœÑтад неабходны Ð´Ð»Ñ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒÑ†Ñ \"%s\" не падтрымліваецца"
+
+#, fuzzy
+#~ msgid "Adding %s"
+#~ msgstr "Ðдпраўленьне \"%s\""
+
+#, fuzzy
+#~ msgid "Rename this task list to"
+#~ msgstr "ЗьмÑніць назву лычкі"
+
+#~ msgid "Important mail (local)"
+#~ msgstr "Ð’Ð°Ð¶Ð½Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ð° (лакальна)"
+
+#~ msgid "Unread mail (local)"
+#~ msgstr "ÐÐµÑ‡Ñ‹Ñ‚Ð°Ð½Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ð° (лакальна)"
+
+#~ msgid "Could not update files correctly"
+#~ msgstr "Ðемагчыма карÑктана абнавіць файлы"
+
+#~ msgid ""
+#~ "An error occurred in copying files into\n"
+#~ "`%s'."
+#~ msgstr ""
+#~ "ÐдбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° пад Ñ‡Ð°Ñ ÐºÐ°Ð¿Ñ–ÑÐ²Ð°Ð½ÑŒÐ½Ñ Ñ„Ð°Ð¹Ð»Ð°Ñž у\n"
+#~ "`%s'."
+
+#~ msgid "Select Calendar Folder"
+#~ msgstr "Ð’ÑбÑрыце Ñ‚Ñчку калÑндара"
+
+#~ msgid "Select Tasks Folder"
+#~ msgstr "ВыбÑрыце Ñ‚Ñчку заданьнÑÑž"
+
+#~ msgid "Adding alarms for %s"
+#~ msgstr "Даданьне Ð½Ð°Ð³Ð°Ð´Ð²Ð°Ð½ÑŒÐ½Ñ Ð´Ð»Ñ %s"
+
+#~ msgid "Configure special folders and offline folder behavior here"
+#~ msgstr "Ðаладжваеце паводзіны адмыÑловых Ñ– лакальных Ñ‚Ñчак тут"
+
+#~ msgid "Folder Settings"
+#~ msgstr "УÑталёўкі Ñ‚Ñчкі"
+
+#, fuzzy
+#~ msgid "New _Calendar"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#~ msgid "_Forward Message"
+#~ msgstr "ПерадаÑлаць паведамленьне"
+
+#~ msgid "LDAP was not enabled in this build of Evolution"
+#~ msgstr "Падтрымка LDAP не уключана Ñž гÑтае зборцы \"Эвалюцыі\""
+
+#~ msgid "Other Contacts"
+#~ msgstr "Ð†Ð½ÑˆÑ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#~ msgid "Configure access to LDAP directory servers here"
+#~ msgstr "Ðаладжвайце доÑтуп да паÑлужніка каталёгаў LDAP тутака"
+
+#~ msgid "Directory Servers"
+#~ msgstr "ПаÑлужнікі каталёгаў"
+
+#~ msgid "Evolution Addressbook LDAP Configuration Control"
+#~ msgstr "Сродак ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ LDAP кнігі адрÑÑаў \"Эвалюцыі\"."
+
+#~ msgid "Add LDAP Server"
+#~ msgstr "Дадаць паÑлужнік LDAP"
+
+#~ msgid "Step 4: Display Name"
+#~ msgstr "Крок 4: ÐдлюÑтраваньне назвы"
+
+#~ msgid "Find contact in"
+#~ msgstr "Пошук кантактаў у"
+
+#~ msgid "* Click here to add a contact *"
+#~ msgstr "* Клікніце тутака каб дадаць кантакт *"
+
+#~ msgid "Business Address"
+#~ msgstr "ÐŸÑ€Ð°Ñ†Ð¾ÑžÐ½Ð°Ñ Ð°Ð´Ñ€ÑÑа"
+
+#~ msgid "Department"
+#~ msgstr "ПадразьдзÑленьне"
+
+#~ msgid "Free-busy URL"
+#~ msgstr "Вольны/занÑÑ‚Ñ‹ URL"
+
+#~ msgid "ISDN"
+#~ msgstr "ISDN"
+
+#~ msgid "Profession"
+#~ msgstr "ПрафÑÑÑ‹Ñ"
+
+#~ msgid "TTY"
+#~ msgstr "TTY"
+
+#~ msgid "Send anyway?"
+#~ msgstr "ДаÑлаць у любым выпадку?"
+
+#, fuzzy
+#~ msgid "Folder _name"
+#~ msgstr "_Ðазва Ñ‚Ñчкі:"
+
+#~ msgid ""
+#~ "This message is digitally signed. Click the lock icon for more "
+#~ "information."
+#~ msgstr ""
+#~ "ГÑта паведамленьне мае лічбавы подпіÑ. Клікніце па значке замка Ð´Ð»Ñ "
+#~ "дадатковых зьвеÑтак."
+
+#~ msgid "Connecting..."
+#~ msgstr "ДалучÑньне..."
+
+#~ msgid "This folder cannot contain messages."
+#~ msgstr "ГÑÑ‚Ð°Ñ Ñ‚Ñчка Ð½Ñ Ð¼Ð°Ð¶Ð° ўтрымліваць паведамленьні."
+
+#, fuzzy
+#~ msgid "Select destination to move folder into"
+#~ msgstr "ВыбÑрыце мейÑца прызначÑÐ½ÑŒÐ½Ñ Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð³ÑÑ‚Ñ‹Ñ… даньнÑÑž"
+
+#~ msgid ""
+#~ "Cannot transfer folder:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðе атрымалаÑÑ Ð¿ÐµÑ€Ð°Ð´Ð°Ñ†ÑŒ Ñ‚Ñчку:\n"
+#~ "%s"
+
+#~ msgid "Add a Folder"
+#~ msgstr "Дадаць Ñ‚Ñчку"
+
+#~ msgid "Outbox"
+#~ msgstr "Чакае адпраўкі"
+
+#~ msgid "Sent"
+#~ msgstr "ДаÑланае"
+
+#~ msgid ""
+#~ "Error synchronizing \"%s\":\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Памылка Ñынхранізацыі \"%s\":\n"
+#~ "%s"
+
+#~ msgid "Syncing Folder"
+#~ msgstr "Ð¡Ñ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ñ‚Ñчкі"
+
+#~ msgid "Synchronizing \"%s\" (%d of %d) ..."
+#~ msgstr "Ð¡Ñ‹Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ \"%s\" (%d з %d) ..."
+
+#~ msgid "%s (%d)"
+#~ msgstr "%s (%d)"
+
+#~ msgid "(None)"
+#~ msgstr "(ÐÑма)"
+
+#~ msgid "No error"
+#~ msgstr "ÐÑма памылкі"
+
+#~ msgid "A folder with the same name already exists"
+#~ msgstr "ТÑчка з гÑткай назвай ужо Ñ–Ñнуе."
+
+#~ msgid "The specified folder type is not valid"
+#~ msgstr "Пазначаны тып Ñ‚Ñчкі недапушчальны"
+
+#~ msgid "I/O error"
+#~ msgstr "Памылка ўводу/вываду"
+
+#~ msgid "Not enough space to create the folder"
+#~ msgstr "Ðедахоп праÑторы Ð´Ð»Ñ ÑтварÑÐ½ÑŒÐ½Ñ Ñ‚Ñчкі"
+
+#~ msgid "The folder is not empty"
+#~ msgstr "ТÑчка не пуÑтаÑ"
+
+#~ msgid "The specified folder was not found"
+#~ msgstr "ÐŸÐ°Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ñ‚Ñчка адÑутнічае"
+
+#~ msgid "Function not implemented in this storage"
+#~ msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ‹Ñ Ð½Ðµ вызначана Ñž гÑтым Ñховішчы"
+
+#~ msgid "Operation not supported"
+#~ msgstr "ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð½Ðµ падтрымліваецца"
+
+#~ msgid "The specified type is not supported in this storage"
+#~ msgstr "Пазначаны тып не падтрымліваецца у гÑтым Ñховішчы"
+
+#~ msgid "The specified folder cannot be modified or removed"
+#~ msgstr "ÐŸÐ°Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ñ‚Ñчка Ð½Ñ Ð¼Ð¾Ð¶Ð° мадыфікавацца ці выдалÑцца"
+
+#~ msgid "Cannot create a folder with that name"
+#~ msgstr "Ðемагчыма Ñтварыць Ñ‚Ñчку з гÑткай назвай"
+
+#~ msgid "This operation cannot be performed in off-line mode"
+#~ msgstr "ГÑÑ‚Ð°Ñ Ð°Ð¿ÑÑ€Ð°Ñ†Ñ‹Ñ Ð½Ðµ працуе Ñž адлучаным Ñ€Ñжыме."
+
+#~ msgid "CORBA error"
+#~ msgstr "Памылка CORBA"
+
+#~ msgid "Invalid argument"
+#~ msgstr "Ðедапушчальны аргумÑнт"
+
+#~ msgid "Already has an owner"
+#~ msgstr "Ужо мае ўладальніка"
+
+#~ msgid "No owner"
+#~ msgstr "ÐÑма ўладальніка"
+
+#~ msgid "Unsupported type"
+#~ msgstr "Тып не падтрымліваецца"
+
+#~ msgid "Unsupported schema"
+#~ msgstr "ТÑма не падтрымліваецца"
+
+#~ msgid "Unsupported operation"
+#~ msgstr "ÐпÑÑ€Ð°Ñ†Ñ‹Ñ Ð½Ðµ падтрымліваецца"
+
+#~ msgid "Internal error"
+#~ msgstr "ÐÑƒÑ‚Ñ€Ð°Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°"
+
+#~ msgid "Exists"
+#~ msgstr "ІÑнуе"
+
+#~ msgid "Invalid URI"
+#~ msgstr "Памылковы URI"
+
+#~ msgid "Has subfolders"
+#~ msgstr "Мае падтÑчкі"
+
+#~ msgid "No space left"
+#~ msgstr "Ðедахоп праÑторы"
+
+#~ msgid "Old owner has died"
+#~ msgstr "Стары уладальнік памёр"
+
+#~ msgid "Test type"
+#~ msgstr "Тып Ñ‚ÑÑта"
+
+#, fuzzy
+#~ msgid "import"
+#~ msgstr "Імпарт"
+
+#, fuzzy
+#~ msgid "Create a new all-day event"
+#~ msgstr "Стварыць новую ÑуÑÑ‚Ñ€Ñчу на увеÑÑŒ дзень"
+
+#~ msgid "New _Appointment"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ _ÑуÑÑ‚Ñ€Ñча"
+
+#, fuzzy
+#~ msgid "New _Meeting"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ð½Ð°Ñ€Ð°Ð´Ð°"
+
+#, fuzzy
+#~ msgid "New _Task"
+#~ msgstr "Ðовае заданьне"
+
+#, fuzzy
+#~ msgid "Open a new Evolution window"
+#~ msgstr "Ðкно \"Эвалюцыі\""
+
+#~ msgid "Toggle"
+#~ msgstr "Пераключыць"
+
+#~ msgid "Clear"
+#~ msgstr "ÐчыÑьціць"
+
+#, fuzzy
+#~ msgid "e_book_cancel: there is no current operation"
+#~ msgstr "ÐдмÑніць бÑгучую паштовую апÑрацыю"
+
+#, fuzzy
+#~ msgid "Address List"
+#~ msgstr "ÐдрÑÑа"
+
+#, fuzzy
+#~ msgid "Home Address Label"
+#~ msgstr "Ðдмеціна адрÑÑÑ‹"
+
+#, fuzzy
+#~ msgid "Work Address Label"
+#~ msgstr "Ðдмеціна адрÑÑÑ‹"
+
+#, fuzzy
+#~ msgid "Other Address Label"
+#~ msgstr "Ðдмеціна адрÑÑÑ‹"
+
+#, fuzzy
+#~ msgid "Email List"
+#~ msgstr "Э. пошта 2"
+
+#, fuzzy
+#~ msgid "Email 1"
+#~ msgstr "Э. пошта 3"
+
+#, fuzzy
+#~ msgid "Wants HTML Mail"
+#~ msgstr "Жадае HTML"
+
+#, fuzzy
+#~ msgid "ICQ Id List"
+#~ msgstr "ГÑта новы ÑьпіÑ"
+
+#~ msgid "Organizational Unit"
+#~ msgstr "ПаÑада"
+
+#, fuzzy
+#~ msgid "Photo"
+#~ msgstr "Праф."
+
+#, fuzzy
+#~ msgid "Logo"
+#~ msgstr "Тога"
+
+#~ msgid "Category List"
+#~ msgstr "Ð¡ÑŒÐ¿Ñ–Ñ ÐºÐ°Ñ‚ÑгорыÑÑž"
+
+#~ msgid "Calendar URI"
+#~ msgstr "URI календара"
+
+#~ msgid "Free/Busy URL"
+#~ msgstr "Вольны/ЗанÑÑ‚Ñ‹ URL"
+
+#~ msgid "ICS Calendar"
+#~ msgstr "КалÑндар ICS"
+
+#, fuzzy
+#~ msgid "Spouse's Name"
+#~ msgstr "Супруг(а)"
+
+#~ msgid "Birth Date"
+#~ msgstr "Дзень народзінаў"
+
+#~ msgid "Anniversary"
+#~ msgstr "Юбілей"
+
+#~ msgid "List Show Addresses"
+#~ msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ð°Ð´Ð»ÑŽÑтраваных адрÑÑаў"
+
+#, fuzzy
+#~ msgid "Evolution LDIF importer factory"
+#~ msgstr "Імпарт LDIF \"Эвалюцыі\""
+
+#~ msgid "Searching..."
+#~ msgstr "Пошук..."
+
+#~ msgid "Using Distinguished Name (DN)"
+#~ msgstr "ВыкарыÑтоўваць удакладнёную назву (DN)"
+
+#~ msgid "Using Email Address"
+#~ msgstr "ВыкарыÑтоўваць адрÑÑу пошты"
+
+#~ msgid "Reconnecting to LDAP server..."
+#~ msgstr "ПерадалучÑньне да паÑлужніка LDAP..."
+
+#, fuzzy
+#~ msgid "Adding contact to LDAP server..."
+#~ msgstr "Даданьне карткі да паÑлужніка LDAP..."
+
+#, fuzzy
+#~ msgid "Removing contact from LDAP server..."
+#~ msgstr "Выдаленьне карткі з паÑлужніка LDAP..."
+
+#, fuzzy
+#~ msgid "Modifying contact from LDAP server..."
+#~ msgstr "ЗьмÑненьне карткі на паÑлужніку LDAP..."
+
+#~ msgid "Receiving LDAP search results..."
+#~ msgstr "Ðтрыманьне вынікаў пошуку з паÑлужніка LDAP..."
+
+#, fuzzy
+#~ msgid "Repository is offline"
+#~ msgstr "Сховішча знаходзіцца Ñž адлучаным Ñтане"
+
+#, fuzzy
+#~ msgid "No such calendar"
+#~ msgstr "ТÑчка %s адÑутнічае "
+
+#, fuzzy
+#~ msgid "Object not found"
+#~ msgstr "Ðб'ект адÑутнічае\n"
+
+#, fuzzy
+#~ msgid "URI not loaded"
+#~ msgstr "EBook не загружана\n"
+
+#, fuzzy
+#~ msgid "Operation has been cancelled"
+#~ msgstr "ДзеÑньне адмененае"
+
+#, fuzzy
+#~ msgid "Authentication failed"
+#~ msgstr "ÐÑžÑ‚Ð°Ñ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ Ð½Ðµ адбылаÑÑ."
+
+#~ msgid "Untitled appointment"
+#~ msgstr "СуÑÑ‚Ñ€Ñча бÑз назвы"
+
+#~ msgid "Can't save calendar data: Malformed URI."
+#~ msgstr "Ðемагчыма захаваць даньні калÑндара: Памылковы URI."
+
+#~ msgid "time-now expects 0 arguments"
+#~ msgstr "time-now не патрабуе аргумÑнтаў"
+
+#~ msgid "make-time expects 1 argument"
+#~ msgstr "make-time патрабуе 1 аргумÑнт"
+
+#~ msgid "make-time expects argument 1 to be a string"
+#~ msgstr "make-time патрабуе радок у ÑкаÑьці аргумÑнта 1"
+
+#~ msgid "make-time argument 1 must be an ISO 8601 date/time string"
+#~ msgstr "аргумÑнт 1 make-time муÑіць быць радком даты Ñž фармаце ISO 8601"
+
+#~ msgid "time-add-day expects 2 arguments"
+#~ msgstr "time-add-day патрабуе 2 аргумÑнта"
+
+#~ msgid "time-add-day expects argument 1 to be a time_t"
+#~ msgstr "time-add-day патрабуе тып time_t у ÑкаÑьці аргумÑнта 1"
+
+#~ msgid "time-add-day expects argument 2 to be an integer"
+#~ msgstr "time-add-day патрабуе цÑлы лік у ÑкаÑьці аргумÑнта 2"
+
+#~ msgid "time-day-begin expects 1 argument"
+#~ msgstr "time-day-begin патрабуе 1 аргумÑнт"
+
+#~ msgid "time-day-begin expects argument 1 to be a time_t"
+#~ msgstr "time-day-begin патрабуе тып time_t у ÑкаÑьці аргумÑнта 1"
+
+#~ msgid "time-day-end expects 1 argument"
+#~ msgstr "time-day-end патрабуе 1 аргумÑнт"
+
+#~ msgid "time-day-end expects argument 1 to be a time_t"
+#~ msgstr "time-day-end патрабуе тып time_t у ÑкаÑьці аргумÑнта 1"
+
+#~ msgid "get-vtype expects 0 arguments"
+#~ msgstr "get-vtype не патрабуе аргумÑнтаў"
+
+#~ msgid "occur-in-time-range? expects 2 arguments"
+#~ msgstr "occur-in-time-range? патрабуе 2 аргумÑнты"
+
+#~ msgid "occur-in-time-range? expects argument 1 to be a time_t"
+#~ msgstr "occur-in-time-range? патрабуе тып time_t у ÑкаÑьці аргумÑнта 1"
+
+#~ msgid "occur-in-time-range? expects argument 2 to be a time_t"
+#~ msgstr "occur-in-time-range? патрабуе тып time_t у ÑкаÑьці аргумÑнта 2"
+
+#~ msgid "contains? expects 2 arguments"
+#~ msgstr "contains? патрабуе два аргумÑнты"
+
+#~ msgid "contains? expects argument 1 to be a string"
+#~ msgstr "contains? патрабуе радок у ÑкаÑьці аргумÑнта 1"
+
+#~ msgid "contains? expects argument 2 to be a string"
+#~ msgstr "contains? патрабуе радок у ÑкаÑьці аргумÑнта 2"
+
+#~ msgid ""
+#~ "contains? expects argument 1 to be one of \"any\", \"summary\", "
+#~ "\"description\""
+#~ msgstr ""
+#~ "contains? патрабуе аргумÑнт 1 адным з \"любы\", \"агулам\", \"апіÑаньне\""
+
+#, fuzzy
+#~ msgid "has-alarms? expects at least 1 argument"
+#~ msgstr "has-categories? патрабуе хацÑб адзін аргумÑнт"
+
+#, fuzzy
+#~ msgid "has-alarms? excepts argument to be a boolean"
+#~ msgstr "contains? патрабуе радок у ÑкаÑьці аргумÑнта 2"
+
+#~ msgid "has-categories? expects at least 1 argument"
+#~ msgstr "has-categories? патрабуе хацÑб адзін аргумÑнт"
+
+#~ msgid ""
+#~ "has-categories? expects all arguments to be strings or one and only one "
+#~ "argument to be a boolean false (#f)"
+#~ msgstr ""
+#~ "has-categories? патрабуе уÑе аргумÑнты Ñк радкі ці адзін Ñ– толькі адзін "
+#~ "аргумÑнт Ñк булева мана (#f)"
+
+#~ msgid "is-completed? expects 0 arguments"
+#~ msgstr "is-completed? не патрабуе аргумÑнтаў"
+
+#~ msgid "completed-before? expects 1 argument"
+#~ msgstr "completed-before? патрабуе 1 аргумÑнт"
+
+#~ msgid "completed-before? expects argument 1 to be a time_t"
+#~ msgstr "completed-before? патрабуе тып time_t у ÑкаÑьці аргумÑнта 1"
+
+#~ msgid "Alwa_ys sign outgoing messages when using this account"
+#~ msgstr ""
+#~ "ЗаўÑёды падпіÑываць даÑÐ»Ð°Ð½Ñ‹Ñ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½ÑŒÐ½Ñ– пры выкарыÑтаньні гÑтага "
+#~ "уліковага запіÑа"
+
+#~ msgid "Digital IDs..."
+#~ msgstr "Ð›Ñ–Ñ‡Ð±Ð°Ð²Ñ‹Ñ Ð†Ð´..."
+
+#~ msgid "Get Digital ID..."
+#~ msgstr "Ðтрымаць лічбавы Ід..."
+
+#~ msgid "_Certificate ID:"
+#~ msgstr "_Ід ÑÑртыфіката:"
+
+#~ msgid "Evolution Addressbook local/LDAP backend"
+#~ msgstr "Праграма лакальнай/LDAP кнігі адрÑÑаў \"Эвалюцыі\""
+
+#, fuzzy
+#~ msgid "Evolution Addressbook local backend"
+#~ msgstr "Праграма лакальнай/LDAP кнігі адрÑÑаў \"Эвалюцыі\""
+
+#~ msgid "Primary"
+#~ msgstr "ПершаÑны"
+
+#~ msgid "Prim"
+#~ msgstr "Перш"
+
+#~ msgid "Bus"
+#~ msgstr "Прац."
+
+#~ msgid "Callback"
+#~ msgstr "Зваротны выклік"
+
+#~ msgid "Comp"
+#~ msgstr "Прадпр"
+
+#~ msgid "Org"
+#~ msgstr "УÑÑ‚"
+
+#~ msgid "Mobile"
+#~ msgstr "Мабільны"
+
+#~ msgid "Car"
+#~ msgstr "Ðўто"
+
+#~ msgid "Bus Fax"
+#~ msgstr "Прац. факÑ"
+
+#~ msgid "Business 2"
+#~ msgstr "Працоўны 2"
+
+#~ msgid "Bus 2"
+#~ msgstr "Прац. 2"
+
+#~ msgid "Home 2"
+#~ msgstr "Хатні 2"
+
+#~ msgid "Url"
+#~ msgstr "Url"
+
+#~ msgid "Dep"
+#~ msgstr "Падр."
+
+#~ msgid "Off"
+#~ msgstr "ОфіÑ"
+
+#~ msgid "Prof"
+#~ msgstr "Праф."
+
+#~ msgid "Man"
+#~ msgstr "MÑн."
+
+#~ msgid "Ass"
+#~ msgstr "Дап."
+
+#~ msgid "Nick"
+#~ msgstr "ÐœÑнушка"
+
+#~ msgid "CALUri"
+#~ msgstr "Кал. Uri"
+
+#~ msgid "FBUrl"
+#~ msgstr "В/З Url"
+
+#~ msgid "Default server calendar"
+#~ msgstr "Дапомны калÑндар паÑлужніка"
+
+#~ msgid "icsCalendar"
+#~ msgstr "icsCalendar"
+
+#~ msgid "Anniv"
+#~ msgstr "Юбілей"
+
+#~ msgid "ECard"
+#~ msgstr "Э. картка"
+
+#~ msgid "%x"
+#~ msgstr "%x"
+
+#~ msgid "Birth date"
+#~ msgstr "Дата нараджÑньнÑ"
+
+#~ msgid "Related Contacts"
+#~ msgstr "ЗьвÑÐ·Ð°Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#~ msgid "Wants HTML set"
+#~ msgstr "Жадае уÑталÑваць HTML"
+
+#~ msgid "Arbitrary"
+#~ msgstr "Ðдвольнае"
+
+#~ msgid "Last Use"
+#~ msgstr "ÐпошнÑе ÑкарыÑтанае"
+
+#~ msgid "Use Score"
+#~ msgstr "ВыкарыÑтоўвае лік"
+
+#~ msgid "Folder containing contact information"
+#~ msgstr "ТÑчка ÑÐºÐ°Ñ ÑƒÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ кантактную інфармацыю"
+
+#~ msgid "LDAP server containing contact information"
+#~ msgstr "ПаÑлужнік LDAP, Ñкі утрымлівае кантактную інфармацыю"
+
+#~ msgid "Public Contacts"
+#~ msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ñ‹Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ñ‹"
+
+#~ msgid "Public folder containing contact information"
+#~ msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð°Ñ Ñ‚Ñчка, ÑÐºÐ°Ñ ÑƒÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ кантактную інфармацыю"
+
+#~ msgid "The URI that the Folder Browser will display"
+#~ msgstr "URI, Ñкі будзе адлюÑтроўваць праграма праглÑду Ñ‚Ñчак"
+
+#~ msgid "Disable Queries"
+#~ msgstr "Выключыць чÑргі"
+
+#~ msgid "Enable Queries (Dangerous!)"
+#~ msgstr "Уключыць чÑргі (ÐебÑÑьпечна!)"
+
+#~ msgid "Card"
+#~ msgstr "Картка"
+
+#~ msgid "Is New Card"
+#~ msgstr "ГÑта Ð½Ð¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚ÐºÐ°"
+
+#~ msgid "No cards"
+#~ msgstr "ÐÑма карткі"
+
+#~ msgid "%d cards"
+#~ msgstr "%d карткі"
+
+#~ msgid ",123,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"
+#~ msgstr ",123,Ð,Б,Ð’,Г,Д,Е,Ð,Ж,З,І,К,Л,Ðœ,Ð,О,П,Р,С,Т,У,Ф,Ð¥,Ц,Ч,Ш,Ы,Э,Ю,Я"
+
+#~ msgid ",0,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"
+#~ msgstr ",0,а,б,в,г,д,е,Ñ‘,ж,з,Ñ–,к,л,м,н,о,п,Ñ€,Ñ,Ñ‚,у,Ñ„,Ñ…,ц,ч,ш,Ñ‹,Ñ,ÑŽ,Ñ"
+
+#~ msgid "Print cards"
+#~ msgstr "Друк картак"
+
+#~ msgid "Print card"
+#~ msgstr "Друк карткі"
+
+#~ msgid "Error while communicating with calendar server"
+#~ msgstr "Памылка пад Ñ‡Ð°Ñ Ð´Ð°Ð»ÑƒÑ‡ÑÐ½ÑŒÐ½Ñ Ð´Ð° паÑлужніка калÑндара"
+
+#~ msgid ""
+#~ "Could not create the calendar view. Please check your ORBit and OAF "
+#~ "setup."
+#~ msgstr ""
+#~ "ÐеатрымалаÑÑ Ñтварыць акно калÑндара. Калі лаÑка, праверце вашу уÑталёўку "
+#~ "ORBit Ñ– OAF."
+
+#~ msgid "Folder containing appointments and events"
+#~ msgstr "ТÑчка утрымлівае ÑуÑÑ‚Ñ€Ñчы Ñ– падзеі"
+
+#~ msgid "Public Calendar"
+#~ msgstr "Публічны калÑндар"
+
+#~ msgid "Folder containing to-do items"
+#~ msgstr "ТÑчка утрымлівае запіÑÑ‹ аб заданьнÑÑ… ÑÐºÑ–Ñ Ñ‚Ñ€Ñба выканаць"
+
+#~ msgid "Public Tasks"
+#~ msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
+
+#~ msgid "Public folder containing to-do items"
+#~ msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð°Ñ Ñ‚Ñчка утрымлівае запіÑÑ‹ заданьнÑÑž ÑÐºÑ–Ñ Ñ‚Ñ€Ñба выканаць"
+
+#~ msgid "Could not update invalid object"
+#~ msgstr "Ðемагчыма абнавіць нерÑчаіÑны аб'ект"
+
+#~ msgid "Object not found, not updated"
+#~ msgstr "Ðб'ект адÑутнічае, не абноўлена"
+
+#~ msgid "You don't have permissions to update this object"
+#~ msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð°ÐµÑ†Ðµ правоў на абнаўленьне аб'екта"
+
+#~ msgid "The event could not be deleted because it was invalid"
+#~ msgstr "ÐŸÐ°Ð´Ð·ÐµÑ Ð½Ðµ можа быць выдалена пакуль Ñна нерÑчаіÑнаÑ"
+
+#~ msgid "The task could not be deleted because it was invalid"
+#~ msgstr "Заданьне не можа быць выдалена пакуль Ñно нерÑчаіÑнае"
+
+#~ msgid "The journal entry could not be deleted because it was invalid"
+#~ msgstr "Ð—Ð°Ð¿Ñ–Ñ Ñ‡Ð°ÑопіÑа не можа быць выдалены пакуль ён нерÑчаіÑны"
+
+#~ msgid "The item could not be deleted because it was invalid"
+#~ msgstr "ЭлемÑнт не можа быць выдалена пакуль ён нерÑчаіÑны"
+
+#~ msgid "That person is already attending the meeting!"
+#~ msgstr "ГÑÑ‚Ñ‹ чалавек ужо ўдзельнічае у нарадзе!"
+
+#~ msgid "_Save as..."
+#~ msgstr "Захаваць _Ñк..."
+
+#~ msgid "Print..."
+#~ msgstr "Друк..."
+
+#~ msgid "You do not have the right permissions to update the calendar\n"
+#~ msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð°ÐµÑ†Ðµ правільных правоў доÑтупу Ð´Ð»Ñ Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ ÐºÐ°Ð»Ñндара\n"
+
+#~ msgid "Opening calendar at %s"
+#~ msgstr "Ðдкрыцьцё календара %s"
+
+#~ msgid "Evaluation of the search expression did not yield a boolean value"
+#~ msgstr "Выкананьне выраза пошуку не выдала лÑгічнага значÑньнÑ"
+
+#~ msgid "Failed to decrypt MIME part: parse error"
+#~ msgstr "Збой пад Ñ‡Ð°Ñ Ð´ÑÐºÐ°Ð´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ‡Ð°Ñткі MIME: апрацоўка памылкі"
+
+#~ msgid "Please enter your password for %s"
+#~ msgstr "Калі лаÑка, пазначце ваш пароль Ð´Ð»Ñ %s"
+
+#~ msgid "Please indicate the nickname of a certificate to sign with."
+#~ msgstr ""
+#~ "Калі лаÑка, пазначце ÑÑртыфікат, Ñкі вы будзіце выкарыÑтоўваць Ð´Ð»Ñ "
+#~ "подпіÑу."
+
+#~ msgid "The signature certificate for \"%s\" does not exist."
+#~ msgstr "СÑртыфікат подпіÑу Ð´Ð»Ñ \"%s\" Ð½Ñ Ñ–Ñнуе."
+
+#~ msgid "Could not create a PGP signature context"
+#~ msgstr "ÐеатрымалаÑÑ Ñтварыць кантÑкÑÑ‚ подпіÑа PGP"
+
+#~ msgid ""
+#~ "Evolution has found GnomeCard files.\n"
+#~ "Would you like them to be imported into Evolution?"
+#~ msgstr ""
+#~ "\"ЭвалюцыÑ\" адшукала файлы GnomeCard.\n"
+#~ "Жадаеце імпартаваць іх у \"Эвалюцыю\"?"
+
+#~ msgid "Folder containing mail"
+#~ msgstr "ТÑчка, ÑÐºÐ°Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ пошту"
+
+#~ msgid "Public Mail"
+#~ msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð°Ñ Ð¿Ð¾ÑˆÑ‚Ð°"
+
+#~ msgid "Public folder containing mail"
+#~ msgstr "ÐŸÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð°Ñ Ñ‚Ñчка, ÑÐºÐ°Ñ ÑƒÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ пошту"
+
+#~ msgid "Virtual Trash"
+#~ msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñьметніца"
+
+#~ msgid "Virtual Trash folder"
+#~ msgstr "ТÑчка віртуальнае Ñьметніцы"
+
+#~ msgid "Change this folder's properties"
+#~ msgstr "ЗьмÑніць улаÑьціваÑьць гÑтае Ñ‚Ñчкі"
+
+#~ msgid "You have not set a mail transport method"
+#~ msgstr "Ð’Ñ‹ не уÑталÑвалі мÑтад транÑÐ¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ñ‹"
+
+#~ msgid "New Message Post"
+#~ msgstr "ДаÑлаць новае паведамленьне"
+
+#~ msgid "Post a new mail message"
+#~ msgstr "ДаÑлаць новае паштовае паведамленьне"
+
+#~ msgid "Cannot register storage with shell"
+#~ msgstr "ÐеатрымалаÑÑ Ð·Ð°Ñ€ÑгіÑтраваць Ñховішча з дапамогай абалонкі"
+
+#~ msgid "Properties for \"%s\""
+#~ msgstr "УлаÑьціваÑьці Ð´Ð»Ñ \"%s\""
+
+#~ msgid "%d new"
+#~ msgstr "%d новыÑ"
+
+#~ msgid ", "
+#~ msgstr ", "
+
+#~ msgid "%d hidden"
+#~ msgstr "%d ÑхаваныÑ"
+
+#~ msgid "%d visible"
+#~ msgstr "%d бачныÑ"
+
+#~ msgid "VFolder on M_ailing List"
+#~ msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па ÑьпіÑе раÑÑылкі"
+
+#~ msgid "Filter on _Mailing List (%s)"
+#~ msgstr "Фільтар па ÑьпіÑе раÑÑылкі (%s)"
+
+#~ msgid "VFolder on M_ailing List (%s)"
+#~ msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ñчка па ÑьпіÑе раÑÑылкі (%s)"
+
+#~ msgid "Getting Folder Information"
+#~ msgstr "Ðтрыманьне інфармацыі па Ñ‚Ñчке"
+
+#~ msgid ""
+#~ "You have not configured the mail client.\n"
+#~ "You need to do this before you can send,\n"
+#~ "receive or compose mail.\n"
+#~ "Would you like to configure it now?"
+#~ msgstr ""
+#~ "Вы не наладзілі паштовага кліента.\n"
+#~ "Вам Ñ‚Ñ€Ñба зрабіць гÑта да тагочаÑу, Ñк вы здолееце\n"
+#~ "даÑылаць, атрымліваць ці Ñ€Ñдагаваць пошту.\n"
+#~ "Ð’Ñ‹ жадаеце наладзіць гÑта зараз?"
+
+#~ msgid ""
+#~ "You need to configure an identity\n"
+#~ "before you can compose mail."
+#~ msgstr ""
+#~ "Ð’Ñ‹ муÑіце наладзіць карыÑтальніка\n"
+#~ "да таго Ñк вы здолееце даÑылаць пошту."
+
+#~ msgid ""
+#~ "You need to configure a mail transport\n"
+#~ "before you can compose mail."
+#~ msgstr ""
+#~ "Ð’Ñ‹ муÑіце наладзіць перадачу пошты\n"
+#~ "да таго Ñк вы здолееце даÑлаць пошту."
+
+#~ msgid "Move message(s) to"
+#~ msgstr "ПерамÑÑьціць паведамленьне(Ñ–) Ñž"
+
+#~ msgid "Copy message(s) to"
+#~ msgstr "КапіÑваць паведамленьне(Ñ–) Ñž"
+
+#~ msgid "Are you sure you want to edit all %d messages?"
+#~ msgstr "Ð’Ñ‹ упÑÑžÐ½ÐµÐ½Ñ‹Ñ ÑˆÑ‚Ð¾ жадаеце даÑлаць уÑе %d паведамленьні?"
+
+#~ msgid ""
+#~ "You may only edit messages saved\n"
+#~ "in the Drafts folder."
+#~ msgstr ""
+#~ "Ð’Ñ‹ можаце даÑлаць толькі паведамленьні\n"
+#~ "Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ñž Ñ‚Ñчцы \"Чарнавікі\"."
+
+#~ msgid ""
+#~ "You may only resend messages\n"
+#~ "in the Sent folder."
+#~ msgstr ""
+#~ "Ð’Ñ‹ можаце толькі перадаÑылаць паведамленьні\n"
+#~ "з Ñ‚Ñчкі \"ДаÑланыÑ\"."
+
+#~ msgid "No Message Selected"
+#~ msgstr "Паведамленьне Ð½Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð°"
+
+#~ msgid "Save Messages As..."
+#~ msgstr "Захаваць паведамленьні Ñк..."
+
+#~ msgid "Printing of message failed"
+#~ msgstr "Збой друку паведамленьнÑ"
+
+#~ msgid "Could not create a S/MIME signature context."
+#~ msgstr "Ðеатрымліваецца Ñтварыць кантÑкÑÑ‚ подпіÑа s/MIME"
+
+#~ msgid "Could not create a S/MIME certsonly context."
+#~ msgstr "Ðеатрымліваецца Ñтварыць кантÑкÑÑ‚ S/MIME certonly"
+
+#~ msgid "Could not create a S/MIME encryption context."
+#~ msgstr "Ðеатрымліваецца Ñтварыць кантÑкÑÑ‚ ÑˆÑ‹Ñ„Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ S/MIME"
+
+#~ msgid "Could not create a S/MIME envelope context."
+#~ msgstr "Ðеатрымліваецца Ñтварыць кантÑкÑÑ‚ абалонкі S/MIME"
+
+#~ msgid ""
+#~ "File `%s' already exists.\n"
+#~ "Overwrite it?"
+#~ msgstr ""
+#~ "Файл `%s' ужо Ñ–Ñнуе.\n"
+#~ "ПерапіÑаць Ñго?"
+
+#~ msgid "Save Attachment"
+#~ msgstr "Захаваць укладаньне"
+
+#~ msgid "Save Attachment..."
+#~ msgstr "Захаваць укладаньне..."
+
+#~ msgid "View Inline (via %s)"
+#~ msgstr "Убудаваны праглÑд (праз %s)"
+
+#~ msgid "External Viewer"
+#~ msgstr "Вонкавы праглÑдальнік"
+
+#~ msgid "Downloading images"
+#~ msgstr "Загрузка відарыÑаў"
+
+#~ msgid "Loading message content"
+#~ msgstr "Загрузка зьмеÑту паведамленьнÑ"
+
+#~ msgid "Save Link as (FIXME)"
+#~ msgstr "Захаваць ÑпаÑылку Ñк"
+
+#~ msgid "Save Image as..."
+#~ msgstr "Захаваць Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ Ñк..."
+
+#~ msgid "Bad Address"
+#~ msgstr "КепÑÐºÐ°Ñ Ð°Ð´Ñ€ÑÑа"
+
+#~ msgid "Could not create a PGP verfication context"
+#~ msgstr "ÐеатрымалаÑÑ Ñтварыць кантÑкÑÑ‚ праверкі PGP"
+
+#~ msgid "Local folders/%s"
+#~ msgstr "Ð›Ð°ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ‚Ñчкі/%s"
+
+#~ msgid "Reconfiguring folder"
+#~ msgstr "Пераналадка Ñ‚Ñчкі"
+
+#~ msgid "Cannot save folder metainfo to %s: %s"
+#~ msgstr "Ðеатрымліваецца захаваць мÑтаданьні Ñ‚Ñчкі Ñž %s: %s"
+
+#~ msgid "Cannot delete folder metadata %s: %s"
+#~ msgstr "Ðеатрымліваецца выдаліць мÑтаданьні Ñ‚Ñчкі %s: %s"
+
+#~ msgid "Changing folder \"%s\" to \"%s\" format"
+#~ msgstr "ЗьмÑненьне Ñ‚Ñчкі \"%s\" у фармат \"%s\""
+
+#~ msgid "Reconfigure /%s"
+#~ msgstr "Пераналадзіць /%s"
+
+#~ msgid "You cannot change the format of a non-local folder."
+#~ msgstr "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ зьмÑніць фармат нелакальнай Ñ‚Ñчкі."
+
+#~ msgid "However, the message was successfully sent."
+#~ msgstr "Ðднак паведамленьне было паÑьпÑхова даÑлана."
+
+#~ msgid "Empty Message"
+#~ msgstr "ПуÑтое паведамленьне"
+
+#~ msgid "Search Forward"
+#~ msgstr "Пошук наперад"
+
+#~ msgid "(No subject)"
+#~ msgstr "(БÑз Ñ‚Ñмы)"
+
+#~ msgid "%s - Message"
+#~ msgstr "%s - Паведамленьне"
+
+#~ msgid "Scanning folders under %s on \"%s\""
+#~ msgstr "Сканаваньне Ñ‚Ñчак у %s на \"%s\""
+
+#~ msgid "Scanning root-level folders on \"%s\""
+#~ msgstr "Сканаваньне карÑнных Ñ‚Ñчак у \"%s\""
+
+#~ msgid "Subscribing to folder \"%s\""
+#~ msgstr "ПадпіÑваньне на Ñ‚Ñчку \"%s\""
+
+#~ msgid "Unsubscribing to folder \"%s\""
+#~ msgstr "Ðдмаўленьне ад Ñ‚Ñчкі \"%s\""
+
+#~ msgid "Scanning folders ..."
+#~ msgstr "Сканаваньне Ñ‚Ñчак..."
+
+#~ msgid "Configure the appearance of the Evolution Summary here"
+#~ msgstr "Тутака наладжваецца вонкавы выглÑд вынікаў \"Эвалюцыі\""
+
+#~ msgid "Evolution Summary component"
+#~ msgstr "КампанÑнт агульных зьвеÑтак \"Эвалюцыі\""
+
+#~ msgid "Evolution Summary configuration control"
+#~ msgstr "Сродак ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð°Ð³ÑƒÐ»ÑŒÐ½Ñ‹Ñ… зьвеÑтак \"Эвалюцыі\"."
+
+#~ msgid "Summary Preferences"
+#~ msgstr "УлаÑьціваÑьці вынікаў"
+
+#~ msgid "Aarhus"
+#~ msgstr "ÐархуÑ"
+
+#~ msgid "Abakan"
+#~ msgstr "Ðбакан"
+
+#~ msgid "Abbotsford"
+#~ msgstr "ÐбатÑфорд"
+
+#~ msgid "Aberdeen"
+#~ msgstr "ÐбÑрдзін"
+
+#~ msgid "Abha"
+#~ msgstr "Ðбха"
+
+#~ msgid "Abilene"
+#~ msgstr "Ðбілін"
+
+#~ msgid "Abingdon"
+#~ msgstr "Ðбінгтон"
+
+#~ msgid "Abu Dhabi"
+#~ msgstr "Ðбу-Дабі"
+
+#~ msgid "Abu Dhabi - Bateen"
+#~ msgstr "Ðбу-Дабі (Батін)"
+
+#~ msgid "Acajutla"
+#~ msgstr "Ðкаютла"
+
+#~ msgid "Acapulco"
+#~ msgstr "Ðкапулька"
+
+#~ msgid "Acarigua"
+#~ msgstr "Ðкарігуа"
+
+#~ msgid "Adak"
+#~ msgstr "Ðдак"
+
+#~ msgid "Adana"
+#~ msgstr "Ðдана"
+
+#~ msgid "Adana/Incirlik"
+#~ msgstr "Ðдана/Інчырлік"
+
+#~ msgid "Adelaide"
+#~ msgstr "ÐдÑлайда"
+
+#~ msgid "Aden"
+#~ msgstr "ÐдÑн"
+
+#~ msgid "Adrar"
+#~ msgstr "Ðдрар"
+
+#~ msgid "Aeroparque"
+#~ msgstr "ÐÑрапарк"
+
+#~ msgid "Aeropuerto del Norte"
+#~ msgstr "Паўночны ÐÑрапорт"
+
+#~ msgid "Afonsos"
+#~ msgstr "ÐфонÑаÑ"
+
+#~ msgid "Africa"
+#~ msgstr "Ðфрыка"
+
+#~ msgid "Afyon"
+#~ msgstr "Ðфьён"
+
+#~ msgid "Agen"
+#~ msgstr "Ðген"
+
+#~ msgid "Aguascaliantes"
+#~ msgstr "ÐгуаÑкальÑнтÑÑ"
+
+#~ msgid "Ahmadabad"
+#~ msgstr "Ðхмадабад"
+
+#~ msgid "Ahwaz"
+#~ msgstr "Ðхмаз"
+
+#~ msgid "Ainsworth"
+#~ msgstr "ЭйнÑварт"
+
+#~ msgid "Air Force"
+#~ msgstr "Эйр ФорÑ"
+
+#~ msgid "Ajaccio/Campo dell'Oro"
+#~ msgstr "ÐÑчча/Кампа ДÑльорÑ"
+
+#~ msgid "Akeno Ab"
+#~ msgstr "Ðкена Ðб"
+
+#~ msgid "Akita Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#~ msgid "Akron"
+#~ msgstr "Ðкрон"
+
+#~ msgid "Akrotiri"
+#~ msgstr "Ðкраціры"
+
+#~ msgid "Alabama"
+#~ msgstr "ÐлÑбама"
+
+#~ msgid "Al Ahsa"
+#~ msgstr "Ðль Ðша"
+
+#~ msgid "Al Ain"
+#~ msgstr "Ðль Эйн"
+
+#~ msgid "Alamogordo"
+#~ msgstr "ÐлÑмагарда"
+
+#~ msgid "Alamosa"
+#~ msgstr "ÐлÑмоÑа"
+
+#~ msgid "Alaska"
+#~ msgstr "ÐлÑÑка"
+
+#~ msgid "Al Baha"
+#~ msgstr "Ðль Баха"
+
+#~ msgid "Albany"
+#~ msgstr "Ðльбані"
+
+#~ msgid "Albenga"
+#~ msgstr "Ðльбенга"
+
+#~ msgid "Alberta"
+#~ msgstr "ÐльбÑрта"
+
+#~ msgid "Alborg"
+#~ msgstr "Ðльборг"
+
+#~ msgid "Albuquerque"
+#~ msgstr "Ðльбукерке"
+
+#~ msgid "Alderney"
+#~ msgstr "ÐлдÑрні"
+
+#~ msgid "Alesund"
+#~ msgstr "ÐлÑÑунд"
+
+#~ msgid "Alexandria"
+#~ msgstr "ÐлÑкÑандрыÑ"
+
+#~ msgid "Alexandria-Esler"
+#~ msgstr "ÐлÑкÑандрыÑ-ЭÑьлер"
+
+#~ msgid "Alexandria/Nouzha"
+#~ msgstr "ÐлÑкÑандрыÑ/Ðуза"
+
+#~ msgid "Alexandroupolis"
+#~ msgstr "ÐлÑкÑандраполіÑ"
+
+#~ msgid "Alghero"
+#~ msgstr "Ðльжыр"
+
+#~ msgid "Algona"
+#~ msgstr "Ðльгона"
+
+#~ msgid "Alicante"
+#~ msgstr "ÐлікантÑ"
+
+#~ msgid "Alice"
+#~ msgstr "ÐліÑ"
+
+#~ msgid "Alice Springs"
+#~ msgstr "ÐліÑ-СпрынгÑ"
+
+#~ msgid "Al-Jouf"
+#~ msgstr "Эль-Джаўф"
+
+#~ msgid "Allentown"
+#~ msgstr "Ðлентаўн"
+
+#~ msgid "Alliance"
+#~ msgstr "ÐлайнÑ"
+
+#~ msgid "Alma"
+#~ msgstr "Ðльма"
+
+#~ msgid "Almeria"
+#~ msgstr "ÐльмерыÑ"
+
+#~ msgid "Alpena"
+#~ msgstr "Ðльпена"
+
+#~ msgid "Al Qaysumah"
+#~ msgstr "Ðль Казума"
+
+#~ msgid "Alta"
+#~ msgstr "Ðльта"
+
+#~ msgid "Altamira"
+#~ msgstr "Ðльтаміра"
+
+#~ msgid "Alton"
+#~ msgstr "Элтан"
+
+#~ msgid "Altoona"
+#~ msgstr "Ðльтуна"
+
+#~ msgid "Alturas"
+#~ msgstr "ÐльтураÑ"
+
+#~ msgid "Altus"
+#~ msgstr "ÐльтуÑ"
+
+#~ msgid "Amami Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#~ msgid "Amapala"
+#~ msgstr "Ðмапала"
+
+#~ msgid "Amarillo"
+#~ msgstr "Ðмарыла"
+
+#~ msgid "Amasya"
+#~ msgstr "ÐмаÑÑ"
+
+#~ msgid "Ambler"
+#~ msgstr "ÐмбÑÑ€"
+
+#~ msgid "Amelia"
+#~ msgstr "ÐмÑліÑ"
+
+#~ msgid "Amendola"
+#~ msgstr "ÐмÑндола"
+
+#~ msgid "Ames"
+#~ msgstr "ÐмÑÑ"
+
+#~ msgid "Amritsar"
+#~ msgstr "ÐмрытÑар"
+
+#~ msgid "Amsterdam"
+#~ msgstr "ÐмÑÑ‚Ñрдам"
+
+#~ msgid "Anadyr"
+#~ msgstr "Ðнадыр"
+
+#~ msgid "Anaktuvuk"
+#~ msgstr "Ðнактувік"
+
+#~ msgid "Anapa"
+#~ msgstr "Ðнапа"
+
+#~ msgid "Anchorage"
+#~ msgstr "Ðнкорыдж"
+
+#~ msgid "Anchorage - Elmendorf AFB"
+#~ msgstr "Ðнкорыдж - авіÑбаза ЭльмÑндорф"
+
+#~ msgid "Ancona"
+#~ msgstr "Ðнкона"
+
+#~ msgid "Andahuayla"
+#~ msgstr "ÐндаўÑлÑ"
+
+#~ msgid "Anderson"
+#~ msgstr "ÐндÑÑ€Ñан"
+
+#~ msgid "Andoya"
+#~ msgstr "ÐндоÑ"
+
+#~ msgid "Andravida"
+#~ msgstr "Ðндравіда"
+
+#~ msgid "Andrews AFB"
+#~ msgstr "ÐндрюÑ, авіÑбаза"
+
+#~ msgid "Angleton"
+#~ msgstr "ЕйнджÑльтан"
+
+#~ msgid "Aniak"
+#~ msgstr "ÐніÑк"
+
+#~ msgid "Ankara/Esenboga"
+#~ msgstr "Ðнкара/ЕÑÑнбога"
+
+#~ msgid "Ankara/Etimesgut"
+#~ msgstr "Ðнкара/ЭцімеÑгут"
+
+#~ msgid "Annaba"
+#~ msgstr "Ðннаба"
+
+#~ msgid "Ann Arbor"
+#~ msgstr "Ðн-Ðрбор"
+
+#~ msgid "Annette"
+#~ msgstr "ÐнÑÑ‚"
+
+#~ msgid "Anniston"
+#~ msgstr "ÐніÑтан"
+
+#~ msgid "Antalya"
+#~ msgstr "ÐнталіÑ"
+
+#~ msgid "Antartica"
+#~ msgstr "Ðнтарктыка"
+
+#~ msgid "Antigo"
+#~ msgstr "Ðнціга"
+
+#~ msgid "Antigua"
+#~ msgstr "Ðнцігуа"
+
+#~ msgid "Antigua and Barbuda"
+#~ msgstr "Ðнцігуа Ñ– Барбуда"
+
+#~ msgid "Antofagasta"
+#~ msgstr "ÐнтафагаÑта"
+
+#~ msgid "Antwerpen/Deurne"
+#~ msgstr "ÐнтвÑрпÑн/ДеўрнÑ"
+
+#~ msgid "Aomori Airport"
+#~ msgstr "ÐÑрапорт Ðомры"
+
+#~ msgid "Apalachicola"
+#~ msgstr "Ðпалічікола"
+
+#~ msgid "Appleton"
+#~ msgstr "Эйплетон"
+
+#~ msgid "Aquadilla"
+#~ msgstr "ÐкуаділÑ"
+
+#~ msgid "Aracaju"
+#~ msgstr "Ðракаю"
+
+#~ msgid "Arad"
+#~ msgstr "Ðрад"
+
+#~ msgid "Arar"
+#~ msgstr "Ðрар"
+
+#~ msgid "Araxos"
+#~ msgstr "ÐракÑоÑ"
+
+#~ msgid "Arcata"
+#~ msgstr "Ðрката"
+
+#~ msgid "Ardmore"
+#~ msgstr "Ðрдмор"
+
+#~ msgid "Arequipa"
+#~ msgstr "ÐÑ€Ñкіпа"
+
+#~ msgid "Arica"
+#~ msgstr "Ðріка"
+
+#~ msgid "Arizona"
+#~ msgstr "Ðрызона"
+
+#~ msgid "Arkansas"
+#~ msgstr "ÐрканзаÑ"
+
+#~ msgid "Arkhangelsk"
+#~ msgstr "ÐрхангельÑк"
+
+#~ msgid "Arlington"
+#~ msgstr "Ðрлінгтон"
+
+#~ msgid "Artigas"
+#~ msgstr "ÐрцігаÑ"
+
+#~ msgid "Asahikawa Ab"
+#~ msgstr "ÐÑахікава Ðб"
+
+#~ msgid "Asahikawa Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#~ msgid "Ashburnam"
+#~ msgstr "Aшбурнам"
+
+#~ msgid "Asheville"
+#~ msgstr "Эшвіль"
+
+#~ msgid "Ashfield"
+#~ msgstr "Эшфільд"
+
+#~ msgid "Ashiya Ab"
+#~ msgstr "Ðша Ðб"
+
+#~ msgid "Ashland"
+#~ msgstr "Ðшленд"
+
+#~ msgid "Asia"
+#~ msgstr "ÐзыÑ"
+
+#~ msgid "Asswan"
+#~ msgstr "ЭÑван"
+
+#~ msgid "Astoria"
+#~ msgstr "ÐÑторыÑ"
+
+#~ msgid "Astrakhan"
+#~ msgstr "ÐÑтрахань"
+
+#~ msgid "Asturias"
+#~ msgstr "ÐÑтурыÑÑ"
+
+#~ msgid "Asuncion"
+#~ msgstr "ÐÑунцыён"
+
+#~ msgid "Athens"
+#~ msgstr "ÐзÑнÑ"
+
+#~ msgid "Athinai"
+#~ msgstr "Ðзінай"
+
+#~ msgid "Atlanta"
+#~ msgstr "ÐтлÑнта"
+
+#~ msgid "Atlantic"
+#~ msgstr "ÐнтлÑнтычны акіÑн"
+
+#~ msgid "Atlantic City"
+#~ msgstr "ÐтлÑнтык-Ñіці"
+
+#~ msgid "Auburn"
+#~ msgstr "Aўбурн"
+
+#~ msgid "Auckland"
+#~ msgstr "ÐўклÑнд"
+
+#~ msgid "Augsburg"
+#~ msgstr "ÐўгÑбург"
+
+#~ msgid "Augusta"
+#~ msgstr "ÐўгуÑта"
+
+#~ msgid "Aurora"
+#~ msgstr "Ðўрора"
+
+#~ msgid "Austin"
+#~ msgstr "ÐÑžÑьцін"
+
+#~ msgid "Australasia"
+#~ msgstr "ÐÑžÑтралазыÑ"
+
+#~ msgid "Avalon"
+#~ msgstr "Ðвалон"
+
+#~ msgid "Aviano"
+#~ msgstr "ÐвіÑна"
+
+#~ msgid "Ayacucho"
+#~ msgstr "Ðыцача"
+
+#~ msgid "Bage"
+#~ msgstr "Баге"
+
+#~ msgid "Bagotville"
+#~ msgstr "Багатвіль"
+
+#~ msgid "Bahia Blanca"
+#~ msgstr "БагіÑ-БлÑнка"
+
+#~ msgid "Bahias de Huatulco"
+#~ msgstr "Ð‘Ð°Ñ…Ñ–Ñ Ð´Ñ Ð“Ð°Ñ‚ÑƒÐ»ÑŒÐºÐ°"
+
+#~ msgid "Baker City"
+#~ msgstr "Бакер-Сіці"
+
+#~ msgid "Bakersfield"
+#~ msgstr "Бакершфільд"
+
+#~ msgid "Bale-Mulhouse"
+#~ msgstr "Бале-ÐœÑлхаўз"
+
+#~ msgid "Balikesir"
+#~ msgstr "Баліказір"
+
+#~ msgid "Balikesir/Bandirma"
+#~ msgstr "Балікезір/Бандзірма"
+
+#~ msgid "Ball Mountain"
+#~ msgstr "БÑл-МоўнтÑйн"
+
+#~ msgid "Baltimore"
+#~ msgstr "Бальцімор"
+
+#~ msgid "Baltimore-Glen Burnie"
+#~ msgstr "Бальцімор-Глен Барні"
+
+#~ msgid "Banak"
+#~ msgstr "Банак"
+
+#~ msgid "Bandarabbass"
+#~ msgstr "БандараббаÑ"
+
+#~ msgid "Bangor"
+#~ msgstr "Бангор"
+
+#~ msgid "Baracoa"
+#~ msgstr "Баракоа"
+
+#~ msgid "Barbers Point"
+#~ msgstr "БарберÑ-пойнт"
+
+#~ msgid "Barcelona"
+#~ msgstr "БарÑÑлёна"
+
+#~ msgid "Bardufoss"
+#~ msgstr "БардуфоÑ"
+
+#~ msgid "Bar Harbor"
+#~ msgstr "Бар-Гарбар"
+
+#~ msgid "Bari"
+#~ msgstr "Бары"
+
+#~ msgid "Bariloche"
+#~ msgstr "БарылочÑ"
+
+#~ msgid "Barinas"
+#~ msgstr "БарынаÑ"
+
+#~ msgid "Barking Sand"
+#~ msgstr "Баркінг СÑнд"
+
+#~ msgid "Barksdale"
+#~ msgstr "БаркÑдÑль"
+
+#~ msgid "Barnaul"
+#~ msgstr "Барнаул"
+
+#~ msgid "Barquisimeto"
+#~ msgstr "БарквіÑімета"
+
+#~ msgid "Barter Island"
+#~ msgstr "Ð’Ñ‹Ñпа БартÑÑ€"
+
+#~ msgid "Bastia"
+#~ msgstr "БаÑьціа"
+
+#~ msgid "Batesville"
+#~ msgstr "БатÑшвіль"
+
+#~ msgid "Bauru"
+#~ msgstr "Баўру"
+
+#~ msgid "Bayamo"
+#~ msgstr "БаÑма"
+
+#~ msgid "Beijing"
+#~ msgstr "Бейнг"
+
+#~ msgid "Beirut"
+#~ msgstr "БÑйрут"
+
+#~ msgid "Belem"
+#~ msgstr "Белем"
+
+#~ msgid "Belleville"
+#~ msgstr "Белевіль"
+
+#~ msgid "Benina"
+#~ msgstr "Беніна"
+
+#~ msgid "Bentonville"
+#~ msgstr "БÑнтанвіль"
+
+#~ msgid "Berlin"
+#~ msgstr "БÑрлін"
+
+#~ msgid "Bern"
+#~ msgstr "БÑрн"
+
+#~ msgid "Billings"
+#~ msgstr "БілінгÑ"
+
+#~ msgid "Billund"
+#~ msgstr "Біланг"
+
+#~ msgid "Binghamton"
+#~ msgstr "Бінгамтон"
+
+#~ msgid "Birmingham"
+#~ msgstr "Бірмінгем"
+
+#~ msgid "Bisha"
+#~ msgstr "Біша"
+
+#~ msgid "Bishop"
+#~ msgstr "Бішоп"
+
+#~ msgid "Bismark"
+#~ msgstr "БіÑмарк"
+
+#~ msgid "Blagoveschensk"
+#~ msgstr "БлагавешчанÑк"
+
+#~ msgid "Boa Vista"
+#~ msgstr "Боа-Ð’Ñ–Ñта"
+
+#~ msgid "Bodo"
+#~ msgstr "Бода"
+
+#~ msgid "Boone"
+#~ msgstr "БунÑ"
+
+#~ msgid "Bosnia-Herzegovina"
+#~ msgstr "БоÑÑŒÐ½Ñ–Ñ Ñ– ГерцÑгавіна"
+
+#~ msgid "Bradford"
+#~ msgstr "Брадфорд"
+
+#~ msgid "Brainerd"
+#~ msgstr "БрÑінÑрд"
+
+#~ msgid "Brasilia"
+#~ msgstr "БразыліÑ"
+
+#~ msgid "Bratislava"
+#~ msgstr "БратыÑлÑва"
+
+#~ msgid "Bratsk"
+#~ msgstr "БратÑк"
+
+#~ msgid "Bremen"
+#~ msgstr "БрÑмен"
+
+#~ msgid "Bremerton"
+#~ msgstr "БрÑмÑртон"
+
+#~ msgid "Brest"
+#~ msgstr "БрÑÑÑ‚"
+
+#~ msgid "Brisbane"
+#~ msgstr "Брышбан"
+
+#~ msgid "Bristol"
+#~ msgstr "БрыÑтоль"
+
+#~ msgid "British Columbia"
+#~ msgstr "БрытанÑÐºÐ°Ñ ÐšÐ°Ð»ÑŽÐ¼Ð±Ñ–Ñ"
+
+#~ msgid "Brno"
+#~ msgstr "Брно"
+
+#~ msgid "Brooksville"
+#~ msgstr "БрукÑьвіль"
+
+#~ msgid "Broome"
+#~ msgstr "БрумÑ"
+
+#~ msgid "Brownsville"
+#~ msgstr "БраўнÑьвіль"
+
+#~ msgid "Bryansk"
+#~ msgstr "БранÑк"
+
+#~ msgid "Budapest"
+#~ msgstr "Будапешт"
+
+#~ msgid "Burbank"
+#~ msgstr "Бурбанк"
+
+#~ msgid "Burgas"
+#~ msgstr "БаргаÑ"
+
+#~ msgid "Burley"
+#~ msgstr "Барлей"
+
+#~ msgid "Burlington"
+#~ msgstr "Барлінгтон"
+
+#~ msgid "Burnet"
+#~ msgstr "БурнÑÑ‚"
+
+#~ msgid "Burns"
+#~ msgstr "БарнÑ"
+
+#~ msgid "Bursa"
+#~ msgstr "БарÑа"
+
+#~ msgid "Cairo"
+#~ msgstr "Каір"
+
+#~ msgid "Calabozo"
+#~ msgstr "Калабоза"
+
+#~ msgid "Calcutta/Dum Dum"
+#~ msgstr "Калькута/Дам Дам"
+
+#~ msgid "Caldwell"
+#~ msgstr "КальдвÑл"
+
+#~ msgid "Calgary"
+#~ msgstr "Кальгары"
+
+#~ msgid "Caliente"
+#~ msgstr "КаліÑнта"
+
+#~ msgid "California"
+#~ msgstr "КаліфорніÑ"
+
+#~ msgid "Camarillo"
+#~ msgstr "Камарыла"
+
+#~ msgid "Cambridge"
+#~ msgstr "КÑмбрыдж"
+
+#~ msgid "Cameron"
+#~ msgstr "КамÑрун"
+
+#~ msgid "Camiri"
+#~ msgstr "Кіміры"
+
+#~ msgid "Campeche"
+#~ msgstr "Кампече"
+
+#~ msgid "Campinas"
+#~ msgstr "КампінаÑ"
+
+#~ msgid "Campo"
+#~ msgstr "Кампу"
+
+#~ msgid "Canaan"
+#~ msgstr "Канаан"
+
+#~ msgid "Canberra"
+#~ msgstr "КанбÑра"
+
+#~ msgid "Cancun"
+#~ msgstr "Канкун"
+
+#~ msgid "Capitan Corbeta"
+#~ msgstr "Капітан-КарбÑта"
+
+#~ msgid "Capo Mele"
+#~ msgstr "Капа-ÐœÑле"
+
+#~ msgid "Caracas Maiquetia"
+#~ msgstr "КаракаÑ-Маквута"
+
+#~ msgid "Caravelas"
+#~ msgstr "КаравÑлÑÑ"
+
+#~ msgid "Carbondale"
+#~ msgstr "КарбондÑль"
+
+#~ msgid "Cardiff"
+#~ msgstr "Кардыф"
+
+#~ msgid "Caribou"
+#~ msgstr "Карыбоў"
+
+#~ msgid "Carlisle"
+#~ msgstr "КарліÑьле"
+
+#~ msgid "Carlsbad"
+#~ msgstr "КарлÑбад"
+
+#~ msgid "Carroll"
+#~ msgstr "Карол"
+
+#~ msgid "Casa Granda"
+#~ msgstr "Каза-Гранда"
+
+#~ msgid "Cascade"
+#~ msgstr "КаÑкадÑ"
+
+#~ msgid "Casper"
+#~ msgstr "КаÑпÑÑ€"
+
+#~ msgid "Catacamas"
+#~ msgstr "КатакамаÑ"
+
+#~ msgid "Catania"
+#~ msgstr "КатаніÑ"
+
+#~ msgid "Cedar City"
+#~ msgstr "ЦÑдар-Ñыці"
+
+#~ msgid "Cedar Rapids"
+#~ msgstr "ЦÑдар-РапідÑ"
+
+#~ msgid "Central and South America"
+#~ msgstr "ЦÑÐ½Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¹ ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ð°Ñ ÐмÑрыка"
+
+#~ msgid "Cervia"
+#~ msgstr "ЦÑрвіÑ"
+
+#~ msgid "Chacarita"
+#~ msgstr "Чакарыта"
+
+#~ msgid "Chadron"
+#~ msgstr "Чадрон"
+
+#~ msgid "Challis"
+#~ msgstr "ЧаліÑ"
+
+#~ msgid "Chamberlain"
+#~ msgstr "ЧÑмбÑрлен"
+
+#~ msgid "Chambery"
+#~ msgstr "ЧÑмбÑры"
+
+#~ msgid "Chandler"
+#~ msgstr "ЧÑндлер"
+
+#~ msgid "Chania"
+#~ msgstr "ЧÑніÑ"
+
+#~ msgid "Chelyabinsk"
+#~ msgstr "ЧылÑбінÑк"
+
+#~ msgid "Chihuahua"
+#~ msgstr "Чыхуахуа"
+
+#~ msgid "Childress"
+#~ msgstr "ЧылдрÑÑ"
+
+#~ msgid "Chita"
+#~ msgstr "Чыта"
+
+#~ msgid "Clarinda"
+#~ msgstr "КлÑрында"
+
+#~ msgid "Clarion"
+#~ msgstr "КлÑрыён"
+
+#~ msgid "Clayton"
+#~ msgstr "КлÑйтан"
+
+#~ msgid "Clinton"
+#~ msgstr "Клінтан"
+
+#~ msgid "Cobija"
+#~ msgstr "КобіÑ"
+
+#~ msgid "Cody"
+#~ msgstr "Кодзі"
+
+#~ msgid "Colima"
+#~ msgstr "Коліма"
+
+#~ msgid "Colorado"
+#~ msgstr "КалÑрада"
+
+#~ msgid "Colorado Springs"
+#~ msgstr "КалÑрада-СпрынгÑ"
+
+#~ msgid "Columbia"
+#~ msgstr "КалюмбіÑ"
+
+#~ msgid "Columbus"
+#~ msgstr "КалюмбуÑ"
+
+#~ msgid "Concord"
+#~ msgstr "Канкорд"
+
+#~ msgid "Concordia"
+#~ msgstr "КанкордыÑ"
+
+#~ msgid "Connecticut"
+#~ msgstr "КанÑктыкут"
+
+#~ msgid "Cordoba"
+#~ msgstr "Кардаба"
+
+#~ msgid "Cordova"
+#~ msgstr "Кардава"
+
+#~ msgid "Cork"
+#~ msgstr "Корк"
+
+#~ msgid "Coro"
+#~ msgstr "Кора"
+
+#~ msgid "Corona"
+#~ msgstr "Карона"
+
+#~ msgid "Corumba"
+#~ msgstr "Карумба"
+
+#~ msgid "Covington"
+#~ msgstr "Кавінгтон"
+
+#~ msgid "Delta"
+#~ msgstr "ДÑльта"
+
+#~ msgid "Deming"
+#~ msgstr "ДÑмінг"
+
+#~ msgid "Denison"
+#~ msgstr "ДÑніÑан"
+
+#~ msgid "Denton"
+#~ msgstr "ДÑнтан"
+
+#~ msgid "Denver"
+#~ msgstr "ДÑнвÑÑ€"
+
+#~ msgid "Destin"
+#~ msgstr "ДÑÑцін"
+
+#~ msgid "Detroit"
+#~ msgstr "ДÑтройт"
+
+#~ msgid "Dnipropetrovsk"
+#~ msgstr "ДнепрапетроўÑк"
+
+#~ msgid "Dole"
+#~ msgstr "Доле"
+
+#~ msgid "Donetsk"
+#~ msgstr "Данецк"
+
+#~ msgid "Dublin"
+#~ msgstr "Дублін"
+
+#~ msgid "Dubrovnik"
+#~ msgstr "Дуброўнік"
+
+#~ msgid "Edinburgh"
+#~ msgstr "Эдзінбург"
+
+#~ msgid "Edmonton"
+#~ msgstr "Эдмантан"
+
+#~ msgid "Eglin"
+#~ msgstr "Эглін"
+
+#~ msgid "Eindhoven"
+#~ msgstr "ЭйндховÑн"
+
+#~ msgid "Ekofisk"
+#~ msgstr "ЭкафіÑк"
+
+#~ msgid "Elazig"
+#~ msgstr "Элазыг"
+
+#~ msgid "El Centro"
+#~ msgstr "Эль-ЦÑнтра"
+
+#~ msgid "El Dorado"
+#~ msgstr "Эль-Дарада"
+
+#~ msgid "Elefsis"
+#~ msgstr "ЭлефÑÑ‹Ñ"
+
+#~ msgid "Elfin Cove"
+#~ msgstr "Эльфін-ковÑ"
+
+#~ msgid "Elizabeth City"
+#~ msgstr "ЭлізабÑÑ‚-Ñыці"
+
+#~ msgid "Elk City"
+#~ msgstr "Эльк-Ñыці"
+
+#~ msgid "Elkhart"
+#~ msgstr "Элькхарт"
+
+#~ msgid "Elkins"
+#~ msgstr "ЭлькінÑ"
+
+#~ msgid "Elko"
+#~ msgstr "Элько"
+
+#~ msgid "Elmira"
+#~ msgstr "Эльміра"
+
+#~ msgid "El Monte"
+#~ msgstr "Эль-МонтÑ"
+
+#~ msgid "El Paso"
+#~ msgstr "Эль-ПаÑо"
+
+#~ msgid "Elsenborn"
+#~ msgstr "ЭлеÑборн"
+
+#~ msgid "Ely"
+#~ msgstr "Элі"
+
+#~ msgid "Emmonak"
+#~ msgstr "Эмманак"
+
+#~ msgid "Emporia"
+#~ msgstr "ЭмпорыÑ"
+
+#~ msgid "Ephrata"
+#~ msgstr "Эфарата"
+
+#~ msgid "Ercan"
+#~ msgstr "Эркан"
+
+#~ msgid "Erie"
+#~ msgstr "Эры"
+
+#~ msgid "Erzurum"
+#~ msgstr "Эрзурум"
+
+#~ msgid "Esbjerg"
+#~ msgstr "ЭÑбжÑрг"
+
+#~ msgid "Escanaba"
+#~ msgstr "ЭÑканаба"
+
+#~ msgid "Esfahan"
+#~ msgstr "ЭÑфахан"
+
+#~ msgid "Eskisehir"
+#~ msgstr "ЭÑкеÑÑ–Ñ…Ñ–Ñ€"
+
+#~ msgid "Estherville"
+#~ msgstr "ЭÑÑ‚Ñ…Ñрвіль"
+
+#~ msgid "Europe"
+#~ msgstr "Эўропа"
+
+#~ msgid "Exeter"
+#~ msgstr "ЭкÑÑÑ‚ÑÑ€"
+
+#~ msgid "Ezeiza"
+#~ msgstr "ЭзÑйза"
+
+#~ msgid "Florida"
+#~ msgstr "ФлÑрыда"
+
+#~ msgid "Formosa"
+#~ msgstr "Фармоза"
+
+#~ msgid "Fortaleza"
+#~ msgstr "Фарталіза"
+
+#~ msgid "Frigg"
+#~ msgstr "Фрыг"
+
+#~ msgid "Frontone"
+#~ msgstr "Франтон"
+
+#~ msgid "Frosinone"
+#~ msgstr "ФраÑінон"
+
+#~ msgid "Fryeburg"
+#~ msgstr "Фрыбург"
+
+#~ msgid "Fukue Airport"
+#~ msgstr "Факае (аÑрапорт)"
+
+#~ msgid "Fukui Airport"
+#~ msgstr "Факаі (аÑрапорт)"
+
+#~ msgid "Fukuoka Airport"
+#~ msgstr "Факуока (аÑрапорт)"
+
+#~ msgid "Fullerton"
+#~ msgstr "Фаллертон"
+
+#~ msgid "FYR Macedonia"
+#~ msgstr "МакедоніÑ"
+
+#~ msgid "Gander"
+#~ msgstr "ГандÑÑ€"
+
+#~ msgid "Garden City"
+#~ msgstr "ГардÑн Ñыці"
+
+#~ msgid "Gary"
+#~ msgstr "Гары"
+
+#~ msgid "Gdansk"
+#~ msgstr "ГданÑк"
+
+#~ msgid "Geneve"
+#~ msgstr "ЖÑнева"
+
+#~ msgid "Genova"
+#~ msgstr "ЖÑнова"
+
+#~ msgid "Gillette"
+#~ msgstr "Жылетт"
+
+#~ msgid "Girona"
+#~ msgstr "Гірона"
+
+#~ msgid "Gizan"
+#~ msgstr "Гізан"
+
+#~ msgid "Glasgow"
+#~ msgstr "ГлаÑгоў"
+
+#~ msgid "Glendive"
+#~ msgstr "Глендзіў"
+
+#~ msgid "Goiania"
+#~ msgstr "ГаÑна"
+
+#~ msgid "Goose Bay"
+#~ msgstr "Гузе-Бай"
+
+#~ msgid "Granada"
+#~ msgstr "ГрÑнада"
+
+#~ msgid "Grand Canyon"
+#~ msgstr "Ð’Ñлікі каньён"
+
+#~ msgid "Grand Cayman"
+#~ msgstr "Гранд КÑймÑн"
+
+#~ msgid "Grants"
+#~ msgstr "ГрантÑ"
+
+#~ msgid "Graz"
+#~ msgstr "Краз"
+
+#, fuzzy
+#~ msgid "Greenville"
+#~ msgstr "ГрынлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Greenwood"
+#~ msgstr "ГрынлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Groningen"
+#~ msgstr "ПапÑÑ€Ñджаьне"
+
+#, fuzzy
+#~ msgid "Guadalajara"
+#~ msgstr "ГватÑмала"
+
+#, fuzzy
+#~ msgid "Guadalupe Pass"
+#~ msgstr "ГвадÑлупа"
+
+#, fuzzy
+#~ msgid "Guanare"
+#~ msgstr "ГайÑна"
+
+#, fuzzy
+#~ msgid "Guantanamo"
+#~ msgstr "ГватÑмала"
+
+#, fuzzy
+#~ msgid "Guarany"
+#~ msgstr "ÐÑмеччына"
+
+#, fuzzy
+#~ msgid "Guaratingueta"
+#~ msgstr "ГвінеÑ"
+
+#, fuzzy
+#~ msgid "Guaymas"
+#~ msgstr "Гуам"
+
+#, fuzzy
+#~ msgid "Guidonia"
+#~ msgstr "ГвінеÑ"
+
+#, fuzzy
+#~ msgid "Gulkana"
+#~ msgstr "ГайÑна"
+
+#, fuzzy
+#~ msgid "Gunnison"
+#~ msgstr "ÐніÑтан"
+
+#, fuzzy
+#~ msgid "Gunnison (2)"
+#~ msgstr "ÐніÑтан"
+
+#, fuzzy
+#~ msgid "Guriat"
+#~ msgstr "ГвінеÑ"
+
+#, fuzzy
+#~ msgid "Guymon"
+#~ msgstr "ГайÑна"
+
+#, fuzzy
+#~ msgid "Habana"
+#~ msgstr "ÐлÑбама"
+
+#, fuzzy
+#~ msgid "Hachijojima Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Hail"
+#~ msgstr "Пошта"
+
+#, fuzzy
+#~ msgid "Haines"
+#~ msgstr "Загалоўкі"
+
+#, fuzzy
+#~ msgid "Hakodate Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Halifax"
+#~ msgstr "ÐмÑрыка/ГаліхвакÑ"
+
+#, fuzzy
+#~ msgid "Hamilton"
+#~ msgstr "Элтан"
+
+#, fuzzy
+#~ msgid "Hanamaki Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Hanksville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Harlingen"
+#~ msgstr "Ðрлінгтон"
+
+#, fuzzy
+#~ msgid "Hastings"
+#~ msgstr "Загалоўкі"
+
+#, fuzzy
+#~ msgid "Haugesund"
+#~ msgstr "ÐлÑÑунд"
+
+#, fuzzy
+#~ msgid "Havre"
+#~ msgstr "_Захаваць"
+
+#, fuzzy
+#~ msgid "Hawaii"
+#~ msgstr "Гаіці"
+
+#, fuzzy
+#~ msgid "Hayden"
+#~ msgstr "Загаловак"
+
+#, fuzzy
+#~ msgid "Hays"
+#~ msgstr "Дні"
+
+#, fuzzy
+#~ msgid "Helena"
+#~ msgstr "Св. Гелена"
+
+#, fuzzy
+#~ msgid "Helsinki"
+#~ msgstr "Эўропа/ХельÑынкі"
+
+#, fuzzy
+#~ msgid "Henderson"
+#~ msgstr "ÐндÑÑ€Ñан"
+
+#, fuzzy
+#~ msgid "Hermosillo"
+#~ msgstr "ÐмÑрыка/ГермаÑіла"
+
+#, fuzzy
+#~ msgid "Hinesville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Hiroshima Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Hobbs"
+#~ msgstr "Гадзіны"
+
+#, fuzzy
+#~ msgid "Holguin"
+#~ msgstr "Уваход"
+
+#, fuzzy
+#~ msgid "Homer"
+#~ msgstr "Хатні"
+
+#, fuzzy
+#~ msgid "Homestead AFB"
+#~ msgstr "Выканана "
+
+#, fuzzy
+#~ msgid "Hondo"
+#~ msgstr "ГандураÑ"
+
+#, fuzzy
+#~ msgid "Honolulu"
+#~ msgstr "Ціхі акіÑн/Ганалулу"
+
+#, fuzzy
+#~ msgid "Hoonah"
+#~ msgstr "Ðльтуна"
+
+#, fuzzy
+#~ msgid "Hot Springs"
+#~ msgstr "ÐліÑ-СпрынгÑ"
+
+#, fuzzy
+#~ msgid "Houlton"
+#~ msgstr "даÑланае"
+
+#, fuzzy
+#~ msgid "Houma"
+#~ msgstr "Хатні"
+
+#, fuzzy
+#~ msgid "Hulien"
+#~ msgstr "Схаваць"
+
+#, fuzzy
+#~ msgid "Huntington"
+#~ msgstr "Ðрлінгтон"
+
+#, fuzzy
+#~ msgid "Huntsville"
+#~ msgstr "пакуль"
+
+#, fuzzy
+#~ msgid "Huron"
+#~ msgstr "Гадзіны"
+
+#, fuzzy
+#~ msgid "Iasi"
+#~ msgstr "ÐÑноўнае"
+
+#, fuzzy
+#~ msgid "Ibiza"
+#~ msgstr "ІндыÑ"
+
+#, fuzzy
+#~ msgid "Ichikawa"
+#~ msgstr "ÐÑахікава Ðб"
+
+#, fuzzy
+#~ msgid "Idaho"
+#~ msgstr "ІндыÑ"
+
+#, fuzzy
+#~ msgid "Iki Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Iliamna"
+#~ msgstr "убудаваны"
+
+#, fuzzy
+#~ msgid "Imperial"
+#~ msgstr "ÐльмерыÑ"
+
+#, fuzzy
+#~ msgid "In Amenas"
+#~ msgstr "ÐрменіÑ"
+
+#, fuzzy
+#~ msgid "Indiana"
+#~ msgstr "ІндыÑ"
+
+#, fuzzy
+#~ msgid "Indianapolis"
+#~ msgstr "ÐмÑрыка/ІндыÑнаполіÑ"
+
+#, fuzzy
+#~ msgid "International Falls"
+#~ msgstr "Збой аўтарызацыі"
+
+#, fuzzy
+#~ msgid "Intracoastal"
+#~ msgstr "ÐнтафагаÑта"
+
+#, fuzzy
+#~ msgid "Inverness"
+#~ msgstr "У выкананьні"
+
+#, fuzzy
+#~ msgid "Iowa"
+#~ msgstr "ÐарвÑгіÑ"
+
+#, fuzzy
+#~ msgid "Iqaluit"
+#~ msgstr "ÐмÑрыка/Іквілют"
+
+#, fuzzy
+#~ msgid "Iraklion"
+#~ msgstr "ІнфармацыÑ"
+
+#, fuzzy
+#~ msgid "Iran, Islamic Republic of"
+#~ msgstr "КарÑйÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#, fuzzy
+#~ msgid "Iron Mountain"
+#~ msgstr "КамÑнтар утрымлівае"
+
+#, fuzzy
+#~ msgid "Istanbul"
+#~ msgstr "ÐзыÑ/Стамбул"
+
+#, fuzzy
+#~ msgid "Izumo Airport"
+#~ msgstr "ÐÑрапорт Ðомры"
+
+#, fuzzy
+#~ msgid "Janesville"
+#~ msgstr "ЯпонÑкае"
+
+#, fuzzy
+#~ msgid "Johnstown"
+#~ msgstr "Ціхі акіÑн/ДжонÑан"
+
+#, fuzzy
+#~ msgid "Jonkoping"
+#~ msgstr "Праца"
+
+#, fuzzy
+#~ msgid "Juigalpa"
+#~ msgstr "ЯпоніÑ"
+
+#, fuzzy
+#~ msgid "Jujuy"
+#~ msgstr "Ліпень"
+
+#, fuzzy
+#~ msgid "Juliaca"
+#~ msgstr "Публічнае"
+
+#, fuzzy
+#~ msgid "Junction"
+#~ msgstr "ÐÑунцыён"
+
+#, fuzzy
+#~ msgid "Juneau"
+#~ msgstr "ЧÑрвень"
+
+#, fuzzy
+#~ msgid "Kagoshima Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Kalamata"
+#~ msgstr "Мальта"
+
+#, fuzzy
+#~ msgid "Kansas"
+#~ msgstr "ÐрканзаÑ"
+
+#, fuzzy
+#~ msgid "Karachi"
+#~ msgstr "ÐзыÑ/Карачы"
+
+#, fuzzy
+#~ msgid "Karup"
+#~ msgstr "Ðаўру"
+
+#, fuzzy
+#~ msgid "Kavala"
+#~ msgstr "Ðмапала"
+
+#, fuzzy
+#~ msgid "Kazan"
+#~ msgstr "КазахÑтан"
+
+#, fuzzy
+#~ msgid "Kearney"
+#~ msgstr "КеніÑ"
+
+#, fuzzy
+#~ msgid "Keene"
+#~ msgstr "Прагледзенае"
+
+#, fuzzy
+#~ msgid "Kenai"
+#~ msgstr "КеніÑ"
+
+#, fuzzy
+#~ msgid "Kenosha"
+#~ msgstr "КеніÑ"
+
+#, fuzzy
+#~ msgid "Kentucky"
+#~ msgstr "КеніÑ"
+
+#, fuzzy
+#~ msgid "Kerman"
+#~ msgstr "ÐÑмеччына"
+
+#, fuzzy
+#~ msgid "Kikai Island"
+#~ msgstr "Ð’Ñ‹Ñпы Кука"
+
+#, fuzzy
+#~ msgid "Kingston"
+#~ msgstr "Ðрлінгтон"
+
+#, fuzzy
+#~ msgid "Kingsville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Kinston"
+#~ msgstr "ÐніÑтан"
+
+#, fuzzy
+#~ msgid "Kirksville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Kitakyushu Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Kliningrad"
+#~ msgstr "Эўропа/КёнігÑбÑрг"
+
+#, fuzzy
+#~ msgid "Kochi Airport"
+#~ msgstr "ÐÑрапорт Ðомры"
+
+#, fuzzy
+#~ msgid "Kodiak"
+#~ msgstr "Ðдак"
+
+#, fuzzy
+#~ msgid "Konya"
+#~ msgstr "КеніÑ"
+
+#, fuzzy
+#~ msgid "Korea, Republic of"
+#~ msgstr "КарÑйÑÐºÐ°Ñ Ð ÑÑпубліка"
+
+#, fuzzy
+#~ msgid "Kozani"
+#~ msgstr "КарÑйÑкае"
+
+#, fuzzy
+#~ msgid "Krasnodar"
+#~ msgstr "ÐзыÑ/КраÑнаÑÑ€Ñк"
+
+#, fuzzy
+#~ msgid "Krasnoyarsk"
+#~ msgstr "ÐзыÑ/КраÑнаÑÑ€Ñк"
+
+#, fuzzy
+#~ msgid "Kumamoto Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Kunming"
+#~ msgstr "атрыманае"
+
+#, fuzzy
+#~ msgid "Kushiro Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Laconia"
+#~ msgstr "МакедоніÑ"
+
+#, fuzzy
+#~ msgid "La Crosse"
+#~ msgstr "ЛаоÑ"
+
+#, fuzzy
+#~ msgid "Lafayette"
+#~ msgstr "МайотÑ"
+
+#, fuzzy
+#~ msgid "Lahaina"
+#~ msgstr "БахрÑйн"
+
+#, fuzzy
+#~ msgid "Lahore"
+#~ msgstr "Большы"
+
+#, fuzzy
+#~ msgid "Lajes"
+#~ msgstr "ЛаоÑ"
+
+#, fuzzy
+#~ msgid "Lakeland"
+#~ msgstr "ІрлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Lakeview"
+#~ msgstr "Праверыць"
+
+#, fuzzy
+#~ msgid "Lamar"
+#~ msgstr "МаÑнмар"
+
+#, fuzzy
+#~ msgid "La Mesa"
+#~ msgstr "_Паштовае паведамленьне"
+
+#, fuzzy
+#~ msgid "Lamezia"
+#~ msgstr "ÐмÑліÑ"
+
+#, fuzzy
+#~ msgid "Lamoni"
+#~ msgstr "Лібанон"
+
+#, fuzzy
+#~ msgid "Lanai"
+#~ msgstr "Мова"
+
+#, fuzzy
+#~ msgid "Lancaster"
+#~ msgstr "Пазьней"
+
+#, fuzzy
+#~ msgid "Lander"
+#~ msgstr "Пазьней"
+
+#, fuzzy
+#~ msgid "Langebaanweg"
+#~ msgstr "Мова"
+
+#, fuzzy
+#~ msgid "Lannion"
+#~ msgstr "Лібанон"
+
+#, fuzzy
+#~ msgid "Laredo"
+#~ msgstr "Большы"
+
+#, fuzzy
+#~ msgid "Larnaka"
+#~ msgstr "Шры Ланка"
+
+#, fuzzy
+#~ msgid "La Romana"
+#~ msgstr "РумыніÑ"
+
+#, fuzzy
+#~ msgid "Las Americas"
+#~ msgstr "ÐмÑрыка/Бойзе"
+
+#, fuzzy
+#~ msgid "Latina"
+#~ msgstr "ЛатвіÑ"
+
+#, fuzzy
+#~ msgid "Latrobe"
+#~ msgstr "Пазьней"
+
+#, fuzzy
+#~ msgid "Laughlin"
+#~ msgstr "Уваход"
+
+#, fuzzy
+#~ msgid "Laurel"
+#~ msgstr "Ðдмеціна"
+
+#, fuzzy
+#~ msgid "La Verne"
+#~ msgstr "Капа Ð’ÑрдÑ"
+
+#, fuzzy
+#~ msgid "Lawton"
+#~ msgstr "МейÑца:"
+
+#, fuzzy
+#~ msgid "Leadville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Learmouth"
+#~ msgstr "ЛіÑота"
+
+#, fuzzy
+#~ msgid "Leesburg"
+#~ msgstr "ЛюкÑембург"
+
+#, fuzzy
+#~ msgid "Le Mans"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Le Marine"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Lemmon"
+#~ msgstr "Лібанон"
+
+#, fuzzy
+#~ msgid "Lemoore"
+#~ msgstr "Выдаліць"
+
+#, fuzzy
+#~ msgid "Leuchars"
+#~ msgstr "карткі"
+
+#, fuzzy
+#~ msgid "Lewisburg"
+#~ msgstr "ЛюкÑембург"
+
+#, fuzzy
+#~ msgid "Lewiston"
+#~ msgstr "СьпіÑ"
+
+#, fuzzy
+#~ msgid "Lewistown"
+#~ msgstr "ЛіÑота"
+
+#, fuzzy
+#~ msgid "Lexington"
+#~ msgstr "Ðрлінгтон"
+
+#, fuzzy
+#~ msgid "Liberal"
+#~ msgstr "ЛібÑрыÑ"
+
+#, fuzzy
+#~ msgid "Liege"
+#~ msgstr "Ðігер"
+
+#, fuzzy
+#~ msgid "Lihue"
+#~ msgstr "ÐÑŽ"
+
+#, fuzzy
+#~ msgid "Limnos"
+#~ msgstr "СьпіÑ"
+
+#, fuzzy
+#~ msgid "Limoges"
+#~ msgstr "ÐіжÑйшы"
+
+#, fuzzy
+#~ msgid "Limon"
+#~ msgstr "меÑÑц"
+
+#, fuzzy
+#~ msgid "Lincoln"
+#~ msgstr "атрыманае"
+
+#, fuzzy
+#~ msgid "Linz"
+#~ msgstr "Уваход"
+
+#, fuzzy
+#~ msgid "Lisboa"
+#~ msgstr "ЛібÑрыÑ"
+
+#, fuzzy
+#~ msgid "Lista"
+#~ msgstr "СьпіÑ"
+
+#, fuzzy
+#~ msgid "Litchfield"
+#~ msgstr "Эшфільд"
+
+#, fuzzy
+#~ msgid "Livermore"
+#~ msgstr "Ðрдмор"
+
+#, fuzzy
+#~ msgid "Livingston"
+#~ msgstr "Ðрлінгтон"
+
+#, fuzzy
+#~ msgid "Ljubljana"
+#~ msgstr "Эўропа/ЛюблÑна"
+
+#, fuzzy
+#~ msgid "Logan"
+#~ msgstr "Уваход"
+
+#, fuzzy
+#~ msgid "Lompoc"
+#~ msgstr "Прадпр"
+
+#, fuzzy
+#~ msgid "London"
+#~ msgstr "Эўропа/Лёндан"
+
+#, fuzzy
+#~ msgid "Londrina"
+#~ msgstr "ГандураÑ"
+
+#, fuzzy
+#~ msgid "Longview"
+#~ msgstr "Уваход"
+
+#, fuzzy
+#~ msgid "Los Alamos"
+#~ msgstr "ÐлÑмоÑа"
+
+#, fuzzy
+#~ msgid "Los Angeles"
+#~ msgstr "ÐмÑрыка/ЛоÑ-ÐнжÑлеÑ"
+
+#, fuzzy
+#~ msgid "Louisville"
+#~ msgstr "ÐмÑрыка/ЛёўÑьвіль"
+
+#, fuzzy
+#~ msgid "Lousiana"
+#~ msgstr "БатÑвана"
+
+#, fuzzy
+#~ msgid "Lugano"
+#~ msgstr "Лібанон"
+
+#, fuzzy
+#~ msgid "Luton"
+#~ msgstr "ДаÑланыÑ"
+
+#, fuzzy
+#~ msgid "Luxor"
+#~ msgstr "ЛюкÑембург"
+
+#, fuzzy
+#~ msgid "Lviv"
+#~ msgstr "ЛатвіÑ"
+
+#, fuzzy
+#~ msgid "Maastricht"
+#~ msgstr "Сакавік"
+
+#, fuzzy
+#~ msgid "Macae"
+#~ msgstr "Макаў"
+
+#, fuzzy
+#~ msgid "Macapa"
+#~ msgstr "Макаў"
+
+#, fuzzy
+#~ msgid "Maceio"
+#~ msgstr "Манака"
+
+#, fuzzy
+#~ msgid "Macon"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Madinah"
+#~ msgstr "МакедоніÑ"
+
+#, fuzzy
+#~ msgid "Madison"
+#~ msgstr "Радыё"
+
+#, fuzzy
+#~ msgid "Magadan"
+#~ msgstr "ÐзыÑ/Магадан"
+
+#, fuzzy
+#~ msgid "Maine"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Makung"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Malad City"
+#~ msgstr "МалÑві"
+
+#, fuzzy
+#~ msgid "Malaga"
+#~ msgstr "Мальта"
+
+#, fuzzy
+#~ msgid "Malatya"
+#~ msgstr "Мальта"
+
+#, fuzzy
+#~ msgid "Manassas"
+#~ msgstr "ÐрканзаÑ"
+
+#, fuzzy
+#~ msgid "Manaus"
+#~ msgstr "Макаў"
+
+#, fuzzy
+#~ msgid "Manchester"
+#~ msgstr "Супадзеньні:"
+
+#, fuzzy
+#~ msgid "Manisa"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Manistee"
+#~ msgstr "УÑтавіць"
+
+#, fuzzy
+#~ msgid "Manitoba"
+#~ msgstr "Мальта"
+
+#, fuzzy
+#~ msgid "Mankato"
+#~ msgstr "Манака"
+
+#, fuzzy
+#~ msgid "Mansfield"
+#~ msgstr "Эшфільд"
+
+#, fuzzy
+#~ msgid "Manta"
+#~ msgstr "Мальта"
+
+#, fuzzy
+#~ msgid "Maraba"
+#~ msgstr "МаўрытаніÑ"
+
+#, fuzzy
+#~ msgid "Marathon"
+#~ msgstr "Сакавік"
+
+#, fuzzy
+#~ msgid "Margarita"
+#~ msgstr "МаўрытаніÑ"
+
+#, fuzzy
+#~ msgid "Marianna"
+#~ msgstr "МаўрытаніÑ"
+
+#, fuzzy
+#~ msgid "Marib"
+#~ msgstr "Палі"
+
+#, fuzzy
+#~ msgid "Maribor"
+#~ msgstr "Паштавік"
+
+#, fuzzy
+#~ msgid "Marietta"
+#~ msgstr "МаўрытаніÑ"
+
+#, fuzzy
+#~ msgid "Marion"
+#~ msgstr "Палі"
+
+#, fuzzy
+#~ msgid "Marseilles"
+#~ msgstr "Фільтары пошты"
+
+#, fuzzy
+#~ msgid "Marshall"
+#~ msgstr "Маршалавы выÑпы"
+
+#, fuzzy
+#~ msgid "Marshalltown"
+#~ msgstr "Маршалавы выÑпы"
+
+#, fuzzy
+#~ msgid "Marshfield"
+#~ msgstr "Эшфільд"
+
+#, fuzzy
+#~ msgid "Marte"
+#~ msgstr "МайотÑ"
+
+#, fuzzy
+#~ msgid "Marthas Vineyard"
+#~ msgstr "Пазначыць Ñк нечытанае"
+
+#, fuzzy
+#~ msgid "Martinsburg"
+#~ msgstr "Марцінік"
+
+#, fuzzy
+#~ msgid "Martinsville"
+#~ msgstr "Марцінік"
+
+#, fuzzy
+#~ msgid "Maryland"
+#~ msgstr "ІрлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Marysville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Masirah"
+#~ msgstr "Сакавік"
+
+#, fuzzy
+#~ msgid "Massena"
+#~ msgstr "МакедоніÑ"
+
+#, fuzzy
+#~ msgid "Matamoros"
+#~ msgstr "КамараÑ"
+
+#, fuzzy
+#~ msgid "Matsumoto Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Matsushima Ab"
+#~ msgstr "Ðша Ðб"
+
+#, fuzzy
+#~ msgid "Matsuyama Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Mattoon"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Mayaguez"
+#~ msgstr "ÐœÑнаджар"
+
+#, fuzzy
+#~ msgid "Mazatlan"
+#~ msgstr "КазахÑтан"
+
+#, fuzzy
+#~ msgid "Mazu"
+#~ msgstr "Макаў"
+
+#, fuzzy
+#~ msgid "McAllen"
+#~ msgstr "Ðлентаўн"
+
+#, fuzzy
+#~ msgid "McCall"
+#~ msgstr "Выклік"
+
+#, fuzzy
+#~ msgid "McCarthy"
+#~ msgstr "Сакавік"
+
+#, fuzzy
+#~ msgid "McClellan"
+#~ msgstr "ІÑлÑндыÑ"
+
+#, fuzzy
+#~ msgid "McComb"
+#~ msgstr "Прадпр"
+
+#, fuzzy
+#~ msgid "McCook"
+#~ msgstr "Кніга"
+
+#, fuzzy
+#~ msgid "Meacham"
+#~ msgstr "Сакавік"
+
+#, fuzzy
+#~ msgid "Medford"
+#~ msgstr "перад"
+
+#, fuzzy
+#~ msgid "Mehamn"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Melbourne"
+#~ msgstr "ÐÑžÑтраліÑ/ÐœÑльбурн"
+
+#, fuzzy
+#~ msgid "Melfa"
+#~ msgstr "МадÑлÑ"
+
+#, fuzzy
+#~ msgid "Melilla"
+#~ msgstr "ÐмÑліÑ"
+
+#, fuzzy
+#~ msgid "Memambetsu Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Mendoza"
+#~ msgstr "ÐмÑндола"
+
+#, fuzzy
+#~ msgid "Menominee"
+#~ msgstr "ÐмÑрыка/ÐœÑнаміні"
+
+#, fuzzy
+#~ msgid "Merida"
+#~ msgstr "ПÑтніца"
+
+#, fuzzy
+#~ msgid "Merril Field"
+#~ msgstr "Палі у ÑÐºÑ–Ñ Ð¼Ð¾Ð¶Ð½Ð° піÑаць"
+
+#, fuzzy
+#~ msgid "Mexicali"
+#~ msgstr "ÐœÑкÑыка"
+
+#, fuzzy
+#~ msgid "Miami"
+#~ msgstr "Малі"
+
+#, fuzzy
+#~ msgid "Middle East"
+#~ msgstr "_Ð†Ð¼Ñ Ð¿Ð° бацьку:"
+
+#, fuzzy
+#~ msgid "Middleton Island"
+#~ msgstr "Саламонавы выÑпы"
+
+#, fuzzy
+#~ msgid "Middletown"
+#~ msgstr "_Ð†Ð¼Ñ Ð¿Ð° бацьку:"
+
+#, fuzzy
+#~ msgid "Midland"
+#~ msgstr "ФінлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Milano/Malpensa"
+#~ msgstr "ІндыйÑкі акіÑн/Мальды"
+
+#, fuzzy
+#~ msgid "Milford"
+#~ msgstr "Паштавік"
+
+#, fuzzy
+#~ msgid "Millinocket"
+#~ msgstr "ÐлайнÑ"
+
+#, fuzzy
+#~ msgid "Milton"
+#~ msgstr "Элтан"
+
+#, fuzzy
+#~ msgid "Minatitlan"
+#~ msgstr "МаўрытаніÑ"
+
+#, fuzzy
+#~ msgid "Minchumina"
+#~ msgstr "атрыманае"
+
+#, fuzzy
+#~ msgid "Minnesota"
+#~ msgstr "МікранÑзыÑн"
+
+#, fuzzy
+#~ msgid "Minot"
+#~ msgstr "Ð½Ñ Ð³Ñта"
+
+#, fuzzy
+#~ msgid "Misawa Ab"
+#~ msgstr "ÐÑахікава Ðб"
+
+#, fuzzy
+#~ msgid "Missoula"
+#~ msgstr "Спарычна"
+
+#, fuzzy
+#~ msgid "Missouri"
+#~ msgstr "Спарычна"
+
+#, fuzzy
+#~ msgid "Mitchell"
+#~ msgstr "Супадзеньні:"
+
+#, fuzzy
+#~ msgid "Mitilini"
+#~ msgstr "Ð¡ÑŒÐ¿Ñ–Ñ Ñ€Ð°ÑÑылкі"
+
+#, fuzzy
+#~ msgid "Miyakejima Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Miyazaki Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Moa"
+#~ msgstr "Пн"
+
+#, fuzzy
+#~ msgid "Mobile Downtown"
+#~ msgstr "Мабільны Ñ‚Ñлефон"
+
+#, fuzzy
+#~ msgid "Mobridge"
+#~ msgstr "Мабільны"
+
+#, fuzzy
+#~ msgid "Modesto"
+#~ msgstr "МадÑлÑ"
+
+#, fuzzy
+#~ msgid "Mojave"
+#~ msgstr "ПерамÑÑьціць"
+
+#, fuzzy
+#~ msgid "Molde"
+#~ msgstr "МадÑлÑ"
+
+#, fuzzy
+#~ msgid "Moldova"
+#~ msgstr "ПанÑдзелак"
+
+#, fuzzy
+#~ msgid "Molokai"
+#~ msgstr "МалÑві"
+
+#, fuzzy
+#~ msgid "Mombetsu Airport"
+#~ msgstr "ÐÑрапорт Ðомры"
+
+#, fuzzy
+#~ msgid "Monclova"
+#~ msgstr "Манака"
+
+#, fuzzy
+#~ msgid "Moncton"
+#~ msgstr "Манака"
+
+#, fuzzy
+#~ msgid "Monida"
+#~ msgstr "ПанÑдзелак"
+
+#, fuzzy
+#~ msgid "Monroe"
+#~ msgstr "Манака"
+
+#, fuzzy
+#~ msgid "Montague"
+#~ msgstr "ÐœÑнаджар"
+
+#, fuzzy
+#~ msgid "Montana"
+#~ msgstr "утрымлівае"
+
+#, fuzzy
+#~ msgid "Monte Cimone"
+#~ msgstr "ПраглÑд меÑÑцу"
+
+#, fuzzy
+#~ msgid "Montego Bay"
+#~ msgstr "МанголіÑ"
+
+#, fuzzy
+#~ msgid "Monterey"
+#~ msgstr "МанÑÑрат"
+
+#, fuzzy
+#~ msgid "Monterrey"
+#~ msgstr "МанÑÑрат"
+
+#, fuzzy
+#~ msgid "Monte Scuro"
+#~ msgstr "ПерамÑÑÑŒÑціць картку Ñž"
+
+#, fuzzy
+#~ msgid "Montgomery"
+#~ msgstr "МанÑÑрат"
+
+#, fuzzy
+#~ msgid "Monticello"
+#~ msgstr "Манака"
+
+#, fuzzy
+#~ msgid "Montpelier"
+#~ msgstr "МанÑÑрат"
+
+#, fuzzy
+#~ msgid "Montrose"
+#~ msgstr "МанÑÑрат"
+
+#, fuzzy
+#~ msgid "Morelia"
+#~ msgstr "МанголіÑ"
+
+#, fuzzy
+#~ msgid "Morgantown"
+#~ msgstr "УÑтанова"
+
+#, fuzzy
+#~ msgid "Moriarty"
+#~ msgstr "ПершаÑны"
+
+#, fuzzy
+#~ msgid "Mosinee"
+#~ msgstr "Мабільны"
+
+#, fuzzy
+#~ msgid "Mountain View"
+#~ msgstr "ПраглÑд меÑÑцу"
+
+#, fuzzy
+#~ msgid "Mount Vernon"
+#~ msgstr "ПраглÑд меÑÑцу"
+
+#, fuzzy
+#~ msgid "Muir"
+#~ msgstr "Паштавік"
+
+#, fuzzy
+#~ msgid "Mullan"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Muncie"
+#~ msgstr "ЧÑрвень"
+
+#, fuzzy
+#~ msgid "Murcia"
+#~ msgstr "МаўрытаніÑ"
+
+#, fuzzy
+#~ msgid "Mus"
+#~ msgstr "Сп."
+
+#, fuzzy
+#~ msgid "Muscatine"
+#~ msgstr "Марцінік"
+
+#, fuzzy
+#~ msgid "Mykonos"
+#~ msgstr "Манака"
+
+#, fuzzy
+#~ msgid "Nagasaki Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Nagoya Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Naha Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Najran"
+#~ msgstr "БахрÑйн"
+
+#, fuzzy
+#~ msgid "Nakashibetsu Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Namsos"
+#~ msgstr "ÐлÑмоÑа"
+
+#, fuzzy
+#~ msgid "Nankishirahama Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Nanning"
+#~ msgstr "ПапÑÑ€Ñджаьне"
+
+#, fuzzy
+#~ msgid "Napa"
+#~ msgstr "ÐÑпал"
+
+#, fuzzy
+#~ msgid "Naples"
+#~ msgstr "ІмÑ"
+
+#, fuzzy
+#~ msgid "Napoli"
+#~ msgstr "Малі"
+
+#, fuzzy
+#~ msgid "Narvik"
+#~ msgstr "ÐœÑнушка"
+
+#, fuzzy
+#~ msgid "Nashville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Nassau"
+#~ msgstr "ÐмÑрыка/ÐаÑÑаў"
+
+#, fuzzy
+#~ msgid "Natal"
+#~ msgstr "Кватар"
+
+#, fuzzy
+#~ msgid "Natchez"
+#~ msgstr "Супадзеньні:"
+
+#, fuzzy
+#~ msgid "Nebraska"
+#~ msgstr "Ðовае заданьне"
+
+#, fuzzy
+#~ msgid "Nenana"
+#~ msgstr "ГрÑнада"
+
+#, fuzzy
+#~ msgid "Nevada"
+#~ msgstr "ГрÑнада"
+
+#, fuzzy
+#~ msgid "Newark"
+#~ msgstr "Ðовае заданьне"
+
+#, fuzzy
+#~ msgid "New Bern"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ñ‚Ñчка"
+
+#, fuzzy
+#~ msgid "New Delhi/Palam"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ð—ÑлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Newfoundland"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ð—ÑлÑндыÑ"
+
+#, fuzzy
+#~ msgid "New Haven"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#, fuzzy
+#~ msgid "New Iberia"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÑдоніÑ"
+
+#, fuzzy
+#~ msgid "New Mexico"
+#~ msgstr "ÐœÑкÑыка"
+
+#, fuzzy
+#~ msgid "New Orleans"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ð—ÑлÑндыÑ"
+
+#, fuzzy
+#~ msgid "New River"
+#~ msgstr "Ðіколі"
+
+#, fuzzy
+#~ msgid "Newton"
+#~ msgstr "Стварыць"
+
+#, fuzzy
+#~ msgid "New York"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ñ‚Ñчка"
+
+#, fuzzy
+#~ msgid "Niigata Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Nimes-Garons"
+#~ msgstr "РазьмернаÑьць:"
+
+#, fuzzy
+#~ msgid "Nipawin"
+#~ msgstr "ГішпаніÑ"
+
+#, fuzzy
+#~ msgid "Nis"
+#~ msgstr "гÑта"
+
+#, fuzzy
+#~ msgid "Nogales"
+#~ msgstr "Ðармальны"
+
+#, fuzzy
+#~ msgid "Norfolk"
+#~ msgstr "ÐорфалÑÐºÑ–Ñ Ð²Ñ‹Ñпы"
+
+#, fuzzy
+#~ msgid "Norfolk NAS"
+#~ msgstr "ÐорфалÑÐºÑ–Ñ Ð²Ñ‹Ñпы"
+
+#, fuzzy
+#~ msgid "Norrkoping"
+#~ msgstr "Праца"
+
+#, fuzzy
+#~ msgid "North Conway"
+#~ msgstr "ÐарвÑгіÑ"
+
+#, fuzzy
+#~ msgid "North Dakota"
+#~ msgstr "Дзень народзінаў"
+
+#, fuzzy
+#~ msgid "North Platte"
+#~ msgstr "Дата нараджÑньнÑ"
+
+#, fuzzy
+#~ msgid "Northway"
+#~ msgstr "ÐарвÑгіÑ"
+
+#, fuzzy
+#~ msgid "Northwest Territories"
+#~ msgstr "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ñ‹Ñ Ð¤Ñ€Ð°Ð½Ñ†ÑƒÑÐºÑ–Ñ Ð¢Ñрыторыі"
+
+#, fuzzy
+#~ msgid "Norwich"
+#~ msgstr "ÐарвÑгіÑ"
+
+#, fuzzy
+#~ msgid "Norwood"
+#~ msgstr "ÐарвÑгіÑ"
+
+#, fuzzy
+#~ msgid "Notodden"
+#~ msgstr "Заўвага"
+
+#, fuzzy
+#~ msgid "Novosibirsk"
+#~ msgstr "ÐзыÑ/ÐаваÑібірÑк"
+
+#, fuzzy
+#~ msgid "Nuevo Laredo"
+#~ msgstr "Ðе раÑпачаты"
+
+#, fuzzy
+#~ msgid "Oahu"
+#~ msgstr "ÐархуÑ"
+
+#, fuzzy
+#~ msgid "Oakland"
+#~ msgstr "Тайланд"
+
+#, fuzzy
+#~ msgid "Oaxaca"
+#~ msgstr "Ямайка"
+
+#, fuzzy
+#~ msgid "Obihiro Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Ocala"
+#~ msgstr "Ðкаютла"
+
+#, fuzzy
+#~ msgid "Oceanside"
+#~ msgstr "ІÑлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Odense"
+#~ msgstr "Ðдзін"
+
+#, fuzzy
+#~ msgid "Oelwen"
+#~ msgstr "Прагледзенае"
+
+#, fuzzy
+#~ msgid "Ogden"
+#~ msgstr "Ðдкрыць"
+
+#, fuzzy
+#~ msgid "Ohrid"
+#~ msgstr "Ñ‚Ñ€Ñці"
+
+#, fuzzy
+#~ msgid "Oita Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Ojika Island"
+#~ msgstr "Ð’Ñ‹Ñпы Кука"
+
+#, fuzzy
+#~ msgid "Okayama Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Oki Airport"
+#~ msgstr "Ðкіта (аÑрапорт)"
+
+#, fuzzy
+#~ msgid "Okushiri Island"
+#~ msgstr "Ð’Ñ‹Ñпа РаÑÑтва"
+
+#, fuzzy
+#~ msgid "Olathe"
+#~ msgstr "Іншы"
+
+#, fuzzy
+#~ msgid "Olbia"
+#~ msgstr "ÐльбаніÑ"
+
+#, fuzzy
+#~ msgid "Omaha"
+#~ msgstr "Ðман"
+
+#, fuzzy
+#~ msgid "Omak"
+#~ msgstr "Ðман"
+
+#, fuzzy
+#~ msgid "Omsk"
+#~ msgstr "ÐзыÑ/ОмÑк"
+
+#, fuzzy
+#~ msgid "Ontario"
+#~ msgstr "ÐрыентацыÑ"
+
+#, fuzzy
+#~ msgid "Oostende"
+#~ msgstr "Удзельнік"
+
+#, fuzzy
+#~ msgid "Oran"
+#~ msgstr "Ðман"
+
+#, fuzzy
+#~ msgid "Orange"
+#~ msgstr "УÑÑ‚"
+
+#, fuzzy
+#~ msgid "Oregon"
+#~ msgstr "УÑÑ‚"
+
+#, fuzzy
+#~ msgid "Orland"
+#~ msgstr "ІрлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Orlando"
+#~ msgstr "ІрлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Oruro"
+#~ msgstr "Памылка"
+
+#, fuzzy
+#~ msgid "Osan Ab"
+#~ msgstr "Ðша Ðб"
+
+#, fuzzy
+#~ msgid "Oscoda"
+#~ msgstr "другі"
+
+#, fuzzy
+#~ msgid "Oshima Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Ostrava"
+#~ msgstr "ÐÑтрахань"
+
+#, fuzzy
+#~ msgid "Owyhee"
+#~ msgstr "тыдзень"
+
+#, fuzzy
+#~ msgid "Oxford"
+#~ msgstr "длÑ"
+
+#, fuzzy
+#~ msgid "Oxnard"
+#~ msgstr "Картка"
+
+#, fuzzy
+#~ msgid "Paganella"
+#~ msgstr "Старонка"
+
+#, fuzzy
+#~ msgid "Palacios"
+#~ msgstr "Палаў"
+
+#, fuzzy
+#~ msgid "Palermo"
+#~ msgstr "Папера"
+
+#, fuzzy
+#~ msgid "Palmdale"
+#~ msgstr "Палаў"
+
+#, fuzzy
+#~ msgid "Palmer"
+#~ msgstr "ПÑйджар"
+
+#, fuzzy
+#~ msgid "Palm Springs"
+#~ msgstr "ÐліÑ-СпрынгÑ"
+
+#, fuzzy
+#~ msgid "Pamplona"
+#~ msgstr "Палаў"
+
+#, fuzzy
+#~ msgid "Panama City"
+#~ msgstr "Панама"
+
+#, fuzzy
+#~ msgid "Pantelleria"
+#~ msgstr "Ðдменена"
+
+#, fuzzy
+#~ msgid "Papa"
+#~ msgstr "Папера"
+
+#, fuzzy
+#~ msgid "Paphos"
+#~ msgstr "ЛаоÑ"
+
+#, fuzzy
+#~ msgid "Paris"
+#~ msgstr "Перш"
+
+#, fuzzy
+#~ msgid "Pasco"
+#~ msgstr "Пароль"
+
+#, fuzzy
+#~ msgid "Patna"
+#~ msgstr "Панама"
+
+#, fuzzy
+#~ msgid "Patterson"
+#~ msgstr "ПÑÑ€Ñанальнае"
+
+#, fuzzy
+#~ msgid "Paysandu"
+#~ msgstr "Граць гук:"
+
+#, fuzzy
+#~ msgid "Payson"
+#~ msgstr "Граць гук:"
+
+#, fuzzy
+#~ msgid "Pellston"
+#~ msgstr "ПÑÑ€Ñанальнае"
+
+#, fuzzy
+#~ msgid "Pelotas"
+#~ msgstr "Перагрузка"
+
+#, fuzzy
+#~ msgid "Pendleton"
+#~ msgstr "ЕйнджÑльтан"
+
+#, fuzzy
+#~ msgid "Peoria"
+#~ msgstr "ГрузыÑ"
+
+#, fuzzy
+#~ msgid "Pereira/Matecana"
+#~ msgstr "ÐмÑрыка/МазатлÑн"
+
+#, fuzzy
+#~ msgid "Perm"
+#~ msgstr "Перу"
+
+#, fuzzy
+#~ msgid "Perth"
+#~ msgstr "Перу"
+
+#, fuzzy
+#~ msgid "Perugia"
+#~ msgstr "Перу"
+
+#, fuzzy
+#~ msgid "Philip"
+#~ msgstr "Хвіліпіны"
+
+#, fuzzy
+#~ msgid "Philipsburg"
+#~ msgstr "Хвіліпіны"
+
+#, fuzzy
+#~ msgid "Phillips"
+#~ msgstr "Хвіліпіны"
+
+#, fuzzy
+#~ msgid "Phoenix"
+#~ msgstr "ТÑлефон"
+
+#, fuzzy
+#~ msgid "Pierre"
+#~ msgstr "Pine"
+
+#, fuzzy
+#~ msgid "Pietersburg"
+#~ msgstr "ÐзыÑ/Екацерынбург"
+
+#, fuzzy
+#~ msgid "Pikeville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Pisa"
+#~ msgstr "гÑта"
+
+#, fuzzy
+#~ msgid "Plymouth"
+#~ msgstr "меÑÑц"
+
+#, fuzzy
+#~ msgid "Point Hope"
+#~ msgstr "Друк паштоўкі"
+
+#, fuzzy
+#~ msgid "Point Lay"
+#~ msgstr "Ðадрукаваць вынікі"
+
+#, fuzzy
+#~ msgid "Point Mugu"
+#~ msgstr "Друк паведамленьнÑ"
+
+#, fuzzy
+#~ msgid "Pontiac"
+#~ msgstr "Кантакт"
+
+#, fuzzy
+#~ msgid "Poprad"
+#~ msgstr "Польша"
+
+#, fuzzy
+#~ msgid "Port Alexander"
+#~ msgstr "ÐлÑкÑандрыÑ"
+
+#, fuzzy
+#~ msgid "Port Alsworth"
+#~ msgstr "ЭйнÑварт"
+
+#, fuzzy
+#~ msgid "Port Angeles"
+#~ msgstr "Друкаваць паштоўку"
+
+#, fuzzy
+#~ msgid "Port-Au-Prince"
+#~ msgstr "ÐмÑрыка/Порт-аў-Прынц"
+
+#, fuzzy
+#~ msgid "Porterville"
+#~ msgstr "ПерадпраглÑд"
+
+#, fuzzy
+#~ msgid "Port Hardy"
+#~ msgstr "Друк карткі"
+
+#, fuzzy
+#~ msgid "Port Hedland"
+#~ msgstr "Польша"
+
+#, fuzzy
+#~ msgid "Portland"
+#~ msgstr "Польша"
+
+#, fuzzy
+#~ msgid "Porto Alegre"
+#~ msgstr "Выкананьне"
+
+#, fuzzy
+#~ msgid "Portoroz"
+#~ msgstr "ПартрÑÑ‚"
+
+#, fuzzy
+#~ msgid "Porto Santo"
+#~ msgstr "ПартрÑÑ‚"
+
+#, fuzzy
+#~ msgid "Porto Velho"
+#~ msgstr "ÐмÑрыка/Порта-Ð’Ñльга"
+
+#, fuzzy
+#~ msgid "Port Said"
+#~ msgstr "ПартрÑÑ‚"
+
+#, fuzzy
+#~ msgid "Posadas"
+#~ msgstr "Польша"
+
+#, fuzzy
+#~ msgid "Pownal"
+#~ msgstr "ПÑÑ€Ñанальнае"
+
+#, fuzzy
+#~ msgid "Poza Rica"
+#~ msgstr "КоÑта-Рыка"
+
+#, fuzzy
+#~ msgid "Poznan"
+#~ msgstr "Польша"
+
+#, fuzzy
+#~ msgid "Praha"
+#~ msgstr "Парагвай"
+
+#, fuzzy
+#~ msgid "Presidente Prudente"
+#~ msgstr "ПерадпраглÑд друку"
+
+#, fuzzy
+#~ msgid "Pretoria"
+#~ msgstr "ГрузыÑ"
+
+#, fuzzy
+#~ msgid "Preveza"
+#~ msgstr "ПерадпраглÑд"
+
+#, fuzzy
+#~ msgid "Price-Carbon"
+#~ msgstr "Паткаірн"
+
+#, fuzzy
+#~ msgid "Pristina"
+#~ msgstr "Традыцыйнае"
+
+#, fuzzy
+#~ msgid "Providence"
+#~ msgstr "_ВоблаÑьць/Раён:"
+
+#, fuzzy
+#~ msgid "Provincetown"
+#~ msgstr "ПерадпраглÑд"
+
+#, fuzzy
+#~ msgid "Provo"
+#~ msgstr "Праф."
+
+#, fuzzy
+#~ msgid "Pucallpa"
+#~ msgstr "Палаў"
+
+#, fuzzy
+#~ msgid "Puebla"
+#~ msgstr "Публічнае"
+
+#, fuzzy
+#~ msgid "Pueblo"
+#~ msgstr "Публічнае"
+
+#, fuzzy
+#~ msgid "Puerto Barrios"
+#~ msgstr "ПуÑрта Рыка"
+
+#, fuzzy
+#~ msgid "Puerto Escondido"
+#~ msgstr "ПуÑрта Рыка"
+
+#, fuzzy
+#~ msgid "Puerto Lempira"
+#~ msgstr "ПуÑрта Рыка"
+
+#, fuzzy
+#~ msgid "Puerto Limon"
+#~ msgstr "ПуÑрта Рыка"
+
+#, fuzzy
+#~ msgid "Puerto Montt"
+#~ msgstr "ПуÑрта Рыка"
+
+#, fuzzy
+#~ msgid "Puerto Plata"
+#~ msgstr "ПуÑрта Рыка"
+
+#, fuzzy
+#~ msgid "Pula"
+#~ msgstr "Палаў"
+
+#, fuzzy
+#~ msgid "Pullman"
+#~ msgstr "Польша"
+
+#, fuzzy
+#~ msgid "Pyongyang"
+#~ msgstr "ÐзыÑ/ПёнгÑнг"
+
+#, fuzzy
+#~ msgid "Quantico"
+#~ msgstr "Пытаньне"
+
+#, fuzzy
+#~ msgid "Quebec"
+#~ msgstr "ТÑма"
+
+#, fuzzy
+#~ msgid "Quimper"
+#~ msgstr "Запыт"
+
+#, fuzzy
+#~ msgid "Rapid City"
+#~ msgstr "Ðдказана на"
+
+#, fuzzy
+#~ msgid "Reading"
+#~ msgstr "Загалоўкі"
+
+#, fuzzy
+#~ msgid "Rebun Island"
+#~ msgstr "Ð’Ñ‹Ñпа Боўвіт"
+
+#, fuzzy
+#~ msgid "Recife"
+#~ msgstr "Ðтрымана"
+
+#, fuzzy
+#~ msgid "Redding"
+#~ msgstr "Загалоўкі"
+
+#, fuzzy
+#~ msgid "Redig"
+#~ msgstr "Чытаньне"
+
+#, fuzzy
+#~ msgid "Redmond"
+#~ msgstr "Ðагадваньне"
+
+#, fuzzy
+#~ msgid "Regina"
+#~ msgstr "ГрузыÑ"
+
+#, fuzzy
+#~ msgid "Rennes"
+#~ msgstr "Ðагадваньні"
+
+#, fuzzy
+#~ msgid "Reno"
+#~ msgstr "Перааб'Ñднаньне"
+
+#, fuzzy
+#~ msgid "Renton"
+#~ msgstr "Перааб'Ñднаньне"
+
+#, fuzzy
+#~ msgid "Reus"
+#~ msgstr "Правілы"
+
+#, fuzzy
+#~ msgid "Reyes"
+#~ msgstr "Ðбнавіць"
+
+#, fuzzy
+#~ msgid "Reykjavik"
+#~ msgstr "ÐтлÑнтыка/РÑйкÑвік"
+
+#, fuzzy
+#~ msgid "Reynosa"
+#~ msgstr "Перагрузка"
+
+#, fuzzy
+#~ msgid "Rhinelander"
+#~ msgstr "ФінлÑндыÑ"
+
+#, fuzzy
+#~ msgid "Rhode Island"
+#~ msgstr "Ð’Ñ‹Ñпы Фаро"
+
+#, fuzzy
+#~ msgid "Riberalta"
+#~ msgstr "Гібралтар"
+
+#, fuzzy
+#~ msgid "Rickenbacker"
+#~ msgstr "ÐœÑнушка"
+
+#, fuzzy
+#~ msgid "Rieti"
+#~ msgstr "Гаіці"
+
+#, fuzzy
+#~ msgid "Rifle"
+#~ msgstr "РолÑ"
+
+#, fuzzy
+#~ msgid "Rijeka"
+#~ msgstr "Чытаньне"
+
+#, fuzzy
+#~ msgid "Rimini"
+#~ msgstr "РумыніÑ"
+
+#, fuzzy
+#~ msgid "Rioja"
+#~ msgstr "Радыё"
+
+#, fuzzy
+#~ msgid "Rio / Jacarepagua"
+#~ msgstr "Ðікарагуа"
+
+#, fuzzy
+#~ msgid "Rishiri Island"
+#~ msgstr "Ð’Ñ‹Ñпа РаÑÑтва"
+
+#, fuzzy
+#~ msgid "Rivera"
+#~ msgstr "ЛібÑрыÑ"
+
+#, fuzzy
+#~ msgid "Rivne"
+#~ msgstr "Pine"
+
+#, fuzzy
+#~ msgid "Riyadh"
+#~ msgstr "ÐзыÑ/РыÑд"
+
+#, fuzzy
+#~ msgid "Roatan"
+#~ msgstr "ХарватыÑ"
+
+#, fuzzy
+#~ msgid "Robore"
+#~ msgstr "перад"
+
+#, fuzzy
+#~ msgid "Rockland"
+#~ msgstr "Польша"
+
+#, fuzzy
+#~ msgid "Rock Springs"
+#~ msgstr "ÐліÑ-СпрынгÑ"
+
+#, fuzzy
+#~ msgid "Rodos"
+#~ msgstr "Пакой"
+
+#, fuzzy
+#~ msgid "Rogers"
+#~ msgstr "ТÑчкі"
+
+#, fuzzy
+#~ msgid "Roma/Ciampino"
+#~ msgstr "РумыніÑ"
+
+#, fuzzy
+#~ msgid "Roros"
+#~ msgstr "Пакой"
+
+#, fuzzy
+#~ msgid "Rosario"
+#~ msgstr "Радыё"
+
+#, fuzzy
+#~ msgid "Roseglen"
+#~ msgstr "РолÑ"
+
+#, fuzzy
+#~ msgid "Rost"
+#~ msgstr "_Вузел:"
+
+#, fuzzy
+#~ msgid "Rotterdam"
+#~ msgstr "ÐмÑÑ‚Ñрдам"
+
+#, fuzzy
+#~ msgid "Rurrenabaque"
+#~ msgstr "Ð’Ñртаньне"
+
+#, fuzzy
+#~ msgid "Russia"
+#~ msgstr "ÐÑžÑтрыÑ"
+
+#, fuzzy
+#~ msgid "Rutland"
+#~ msgstr "Бутан"
+
+#, fuzzy
+#~ msgid "Sacramento"
+#~ msgstr "укладаньне"
+
+#, fuzzy
+#~ msgid "Saginaw"
+#~ msgstr "ГішпаніÑ"
+
+#, fuzzy
+#~ msgid "Saint Mary's"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Saint Mawgan"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Saint Paul"
+#~ msgstr "Санта ЛючыÑ"
+
+#, fuzzy
+#~ msgid "Saiq"
+#~ msgstr "ГішпаніÑ"
+
+#, fuzzy
+#~ msgid "Salem"
+#~ msgstr "Меншы"
+
+#, fuzzy
+#~ msgid "Salida"
+#~ msgstr "СамаліÑ"
+
+#, fuzzy
+#~ msgid "Salina"
+#~ msgstr "СамаліÑ"
+
+#, fuzzy
+#~ msgid "Salinas"
+#~ msgstr "СамаліÑ"
+
+#, fuzzy
+#~ msgid "Salmon"
+#~ msgstr "Самоа"
+
+#, fuzzy
+#~ msgid "Salta"
+#~ msgstr "Мальта"
+
+#, fuzzy
+#~ msgid "Saltillo"
+#~ msgstr "Ðмарыла"
+
+#, fuzzy
+#~ msgid "Salto"
+#~ msgstr "Суб"
+
+#, fuzzy
+#~ msgid "Salvador"
+#~ msgstr "Эль Сальвадор"
+
+#, fuzzy
+#~ msgid "Samara"
+#~ msgstr "Самоа"
+
+#, fuzzy
+#~ msgid "Samos"
+#~ msgstr "Самоа"
+
+#, fuzzy
+#~ msgid "Samsun"
+#~ msgstr "ÐÑд"
+
+#, fuzzy
+#~ msgid "San Angelo"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "San Carlos"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Sandane"
+#~ msgstr "Судан"
+
+#, fuzzy
+#~ msgid "Sandberg"
+#~ msgstr "ÐдпраўлÑльнік"
+
+#, fuzzy
+#~ msgid "Sanderson"
+#~ msgstr "ÐндÑÑ€Ñан"
+
+#, fuzzy
+#~ msgid "San Diego"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Sand Point"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Sanford"
+#~ msgstr "длÑ"
+
+#, fuzzy
+#~ msgid "San Francisco"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Sangju"
+#~ msgstr "Ðапаўтон"
+
+#, fuzzy
+#~ msgid "San Joaquin"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "San Juan"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Sanliurfa"
+#~ msgstr "СамаліÑ"
+
+#, fuzzy
+#~ msgid "San Miguel"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "San Nicholas Island"
+#~ msgstr "ÐорфалÑÐºÑ–Ñ Ð²Ñ‹Ñпы"
+
+#, fuzzy
+#~ msgid "San Salvador"
+#~ msgstr "Эль Сальвадор"
+
+#, fuzzy
+#~ msgid "San Sebastian"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Santa Ana"
+#~ msgstr "Санта ЛючыÑ"
+
+#, fuzzy
+#~ msgid "Santa Maria"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Santa Monica"
+#~ msgstr "Санта ЛючыÑ"
+
+#, fuzzy
+#~ msgid "Santander"
+#~ msgstr "ÐдпраўлÑльнік"
+
+#, fuzzy
+#~ msgid "Santarem"
+#~ msgstr "Кватар"
+
+#, fuzzy
+#~ msgid "Santiago"
+#~ msgstr "Ðнціга"
+
+#, fuzzy
+#~ msgid "Santorini"
+#~ msgstr "Сан Марына"
+
+#, fuzzy
+#~ msgid "Santos"
+#~ msgstr "Стан"
+
+#, fuzzy
+#~ msgid "Sao Luiz"
+#~ msgstr "Санта ЛючыÑ"
+
+#, fuzzy
+#~ msgid "Sao Paulo"
+#~ msgstr "ÐмÑрыка/СÑо-Паўла"
+
+#, fuzzy
+#~ msgid "Sarajevo"
+#~ msgstr "Эўропа/Сараева"
+
+#, fuzzy
+#~ msgid "Sarasota"
+#~ msgstr "Самоа"
+
+#, fuzzy
+#~ msgid "Sarzana"
+#~ msgstr "Шры Ланка"
+
+#, fuzzy
+#~ msgid "Sayun"
+#~ msgstr "ÐÑд"
+
+#, fuzzy
+#~ msgid "Scatsta"
+#~ msgstr "Ðрката"
+
+#, fuzzy
+#~ msgid "Schenectady"
+#~ msgstr "Вылучаны"
+
+#, fuzzy
+#~ msgid "Scranton"
+#~ msgstr "УÑтанова"
+
+#, fuzzy
+#~ msgid "Seattle-Boeing"
+#~ msgstr "УÑталёўкі"
+
+#, fuzzy
+#~ msgid "Sedalia"
+#~ msgstr "СамаліÑ"
+
+#, fuzzy
+#~ msgid "Seeb"
+#~ msgstr "Прагледзенае"
+
+#, fuzzy
+#~ msgid "Sendai Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Sevilla"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Seward"
+#~ msgstr "Пошук"
+
+#, fuzzy
+#~ msgid "Shanghai"
+#~ msgstr "ÐзыÑ/Шанхай"
+
+#, fuzzy
+#~ msgid "Sharjah"
+#~ msgstr "Пошук"
+
+#, fuzzy
+#~ msgid "Sharurah"
+#~ msgstr "Субота"
+
+#, fuzzy
+#~ msgid "Shawbury"
+#~ msgstr "Субота"
+
+#, fuzzy
+#~ msgid "Shearwater"
+#~ msgstr "Дата пачатку"
+
+#, fuzzy
+#~ msgid "Sheldon"
+#~ msgstr "ШвÑцыÑ"
+
+#, fuzzy
+#~ msgid "Shelton"
+#~ msgstr "ВылучÑньне:"
+
+#, fuzzy
+#~ msgid "Sheridan"
+#~ msgstr "Судан"
+
+#, fuzzy
+#~ msgid "Shiraz"
+#~ msgstr "Памер"
+
+#, fuzzy
+#~ msgid "Shoreham"
+#~ msgstr "Лік"
+
+#, fuzzy
+#~ msgid "Sidney"
+#~ msgstr "Памер"
+
+#, fuzzy
+#~ msgid "Siloam Springs"
+#~ msgstr "ÐліÑ-СпрынгÑ"
+
+#, fuzzy
+#~ msgid "Silver City"
+#~ msgstr "БÑÑьпека"
+
+#, fuzzy
+#~ msgid "Sindal"
+#~ msgstr "Sendmail"
+
+#, fuzzy
+#~ msgid "Skive"
+#~ msgstr "Памер"
+
+#, fuzzy
+#~ msgid "Skopje"
+#~ msgstr "Эўропа/Скоп'е"
+
+#, fuzzy
+#~ msgid "Slana"
+#~ msgstr "ÐльбаніÑ"
+
+#, fuzzy
+#~ msgid "Smithers"
+#~ msgstr "хвіліны"
+
+#, fuzzy
+#~ msgid "Socorro"
+#~ msgstr "Лік"
+
+#, fuzzy
+#~ msgid "Socotra"
+#~ msgstr "Лік"
+
+#, fuzzy
+#~ msgid "Soda Springs"
+#~ msgstr "ÐліÑ-СпрынгÑ"
+
+#, fuzzy
+#~ msgid "Sofia"
+#~ msgstr "СамаліÑ"
+
+#, fuzzy
+#~ msgid "Sogndal"
+#~ msgstr "Sendmail"
+
+#, fuzzy
+#~ msgid "Soldotna"
+#~ msgstr "СлавеніÑ"
+
+#, fuzzy
+#~ msgid "Somerset"
+#~ msgstr "Лік"
+
+#, fuzzy
+#~ msgid "Sonderborg"
+#~ msgstr "ÐдпраўлÑльнік"
+
+#, fuzzy
+#~ msgid "South Carolina"
+#~ msgstr "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ð°Ñ Ðфрыка"
+
+#, fuzzy
+#~ msgid "South Marsh Island"
+#~ msgstr "Маршалавы выÑпы"
+
+#, fuzzy
+#~ msgid "Spencer"
+#~ msgstr "ÐдпраўлÑльнік"
+
+#, fuzzy
+#~ msgid "Spickard"
+#~ msgstr "_Ðдмовіць"
+
+#, fuzzy
+#~ msgid "Split"
+#~ msgstr "ÑьпіÑ"
+
+#, fuzzy
+#~ msgid "Spokane"
+#~ msgstr "ГішпаніÑ"
+
+#, fuzzy
+#~ msgid "Springfield"
+#~ msgstr "Спрошчанае"
+
+#, fuzzy
+#~ msgid "State College"
+#~ msgstr "Дата заканчÑньнÑ:"
+
+#, fuzzy
+#~ msgid "Staverton"
+#~ msgstr "ЗапуÑкаецца:"
+
+#, fuzzy
+#~ msgid "Steamboat Springs"
+#~ msgstr "ÐліÑ-СпрынгÑ"
+
+#, fuzzy
+#~ msgid "Stephenville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "St. George"
+#~ msgstr "Св. Гелена"
+
+#, fuzzy
+#~ msgid "St Louis"
+#~ msgstr "Санта ЛючыÑ"
+
+#, fuzzy
+#~ msgid "Storm Lake"
+#~ msgstr "Шры Ланка"
+
+#, fuzzy
+#~ msgid "Stornoway"
+#~ msgstr "ÐарвÑгіÑ"
+
+#, fuzzy
+#~ msgid "St Paul"
+#~ msgstr "Стан"
+
+#, fuzzy
+#~ msgid "St Simon's Island"
+#~ msgstr "Саламонавы выÑпы"
+
+#, fuzzy
+#~ msgid "Sturgeon Bay"
+#~ msgstr "Субота"
+
+#, fuzzy
+#~ msgid "Sucre"
+#~ msgstr "Лік"
+
+#, fuzzy
+#~ msgid "Sumburgh"
+#~ msgstr "ЛюкÑембург"
+
+#~ msgid "Sumter"
+#~ msgstr "СамтÑÑ€"
+
+#~ msgid "Sumter (2)"
+#~ msgstr "СамтÑÑ€ (2)"
+
+#, fuzzy
+#~ msgid "Sungshan/Taipei"
+#~ msgstr "ÐзыÑ/ТайпÑй"
+
+#, fuzzy
+#~ msgid "Sutton"
+#~ msgstr "ÐÑд"
+
+#, fuzzy
+#~ msgid "Swift Current"
+#~ msgstr "ÐмÑрыка/Свіфт-КарÑнт"
+
+#, fuzzy
+#~ msgid "Tabatinga"
+#~ msgstr "Традыцыйнае"
+
+#, fuzzy
+#~ msgid "Tabuk"
+#~ msgstr "Заданьне"
+
+#, fuzzy
+#~ msgid "Tachikawa Ab"
+#~ msgstr "ÐÑахікава Ðб"
+
+#, fuzzy
+#~ msgid "Tacna"
+#~ msgstr "Тонга"
+
+#, fuzzy
+#~ msgid "Taejon"
+#~ msgstr "Тады"
+
+#, fuzzy
+#~ msgid "Taif"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tainan"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Taiyuan"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Taiz"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tajima"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Takamatsu Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Tallinn"
+#~ msgstr "Эўропа/Талін"
+
+#, fuzzy
+#~ msgid "Tampa"
+#~ msgstr "Самоа"
+
+#, fuzzy
+#~ msgid "Tampere"
+#~ msgstr "Папера"
+
+#, fuzzy
+#~ msgid "Tanana"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tanegashima Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Taos"
+#~ msgstr "ЛаоÑ"
+
+#, fuzzy
+#~ msgid "Taoyuan"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tapachula"
+#~ msgstr "Ðмапала"
+
+#, fuzzy
+#~ msgid "Taranto"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tarbes"
+#~ msgstr "ТÑÑÑ‚"
+
+#, fuzzy
+#~ msgid "Tarija"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tatalina"
+#~ msgstr "Традыцыйнае"
+
+#, fuzzy
+#~ msgid "Tegucigalpa"
+#~ msgstr "ÐмÑрыка/ТÑгуцыгалпа"
+
+#, fuzzy
+#~ msgid "Tela"
+#~ msgstr "Такелаў"
+
+#, fuzzy
+#~ msgid "Temple"
+#~ msgstr "ТÑлекÑ"
+
+#, fuzzy
+#~ msgid "Teresina"
+#~ msgstr "ПÑÑ€Ñанальнае"
+
+#, fuzzy
+#~ msgid "Texas"
+#~ msgstr "ТÑкÑÑ‚"
+
+#, fuzzy
+#~ msgid "The Dalles"
+#~ msgstr "СейшÑлы"
+
+#, fuzzy
+#~ msgid "Thisted"
+#~ msgstr "ПаÑада"
+
+#, fuzzy
+#~ msgid "Thumrait"
+#~ msgstr "Чацьвер"
+
+#, fuzzy
+#~ msgid "Tianjin"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tijuana"
+#~ msgstr "ÐмÑрыка/ЦіÑна"
+
+#, fuzzy
+#~ msgid "Tirana"
+#~ msgstr "Тайвань"
+
+#, fuzzy
+#~ msgid "Tiree"
+#~ msgstr "ЧаÑ"
+
+#, fuzzy
+#~ msgid "Titusville"
+#~ msgstr "ПаÑада"
+
+#, fuzzy
+#~ msgid "Tivat"
+#~ msgstr "Прыватнае"
+
+#, fuzzy
+#~ msgid "Tokunoshima Island"
+#~ msgstr "Ð’Ñ‹Ñпа РаÑÑтва"
+
+#, fuzzy
+#~ msgid "Tokushima Ab"
+#~ msgstr "Ðша Ðб"
+
+#, fuzzy
+#~ msgid "Toledo"
+#~ msgstr "Пераключыць"
+
+#, fuzzy
+#~ msgid "Toluca"
+#~ msgstr "Такелаў"
+
+#, fuzzy
+#~ msgid "Tonopah"
+#~ msgstr "Тонга"
+
+#, fuzzy
+#~ msgid "Topeka"
+#~ msgstr "Такелаў"
+
+#, fuzzy
+#~ msgid "Torp"
+#~ msgstr "Зверху:"
+
+#, fuzzy
+#~ msgid "Torrance"
+#~ msgstr "ФранцыÑ"
+
+#, fuzzy
+#~ msgid "Torreon"
+#~ msgstr "КарÑйÑкае"
+
+#, fuzzy
+#~ msgid "Tottori Airport"
+#~ msgstr "ÐÑрапорт Ðомры"
+
+#, fuzzy
+#~ msgid "Toulouse"
+#~ msgstr "Зачыніць"
+
+#, fuzzy
+#~ msgid "Townsville"
+#~ msgstr "Эшвіль"
+
+#, fuzzy
+#~ msgid "Toyama Airport"
+#~ msgstr "ÐÑрапорт Ðмамі"
+
+#, fuzzy
+#~ msgid "Trabzon"
+#~ msgstr "Габон"
+
+#, fuzzy
+#~ msgid "Trapani"
+#~ msgstr "ЯпоніÑ"
+
+#, fuzzy
+#~ msgid "Trelew"
+#~ msgstr "ТÑлекÑ"
+
+#, fuzzy
+#~ msgid "Trenton"
+#~ msgstr "ÐрыентацыÑ"
+
+#, fuzzy
+#~ msgid "Trevico"
+#~ msgstr "ПапÑÑ€ÑднÑе"
+
+#, fuzzy
+#~ msgid "Tripoli"
+#~ msgstr "Ðфрыка/Трыпалі"
+
+#, fuzzy
+#~ msgid "Truckee"
+#~ msgstr "ТурцыÑ"
+
+#, fuzzy
+#~ msgid "Tsushima Airport"
+#~ msgstr "ÐÑрапорт ÐÑахікава"
+
+#, fuzzy
+#~ msgid "Tulcea"
+#~ msgstr "Ðўторак"
+
+#, fuzzy
+#~ msgid "Tulsa"
+#~ msgstr "ТуніÑÑ–Ñ"
+
+#, fuzzy
+#~ msgid "Tupelo"
+#~ msgstr "Ðўт"
+
+#, fuzzy
+#~ msgid "Turaif"
+#~ msgstr "ТурÑцкае"
+
+#, fuzzy
+#~ msgid "Turku"
+#~ msgstr "ТурцыÑ"
+
+#, fuzzy
+#~ msgid "Twenthe"
+#~ msgstr "Пробны"
+
+#, fuzzy
+#~ msgid "Tyler"
+#~ msgstr "год"
+
+#, fuzzy
+#~ msgid "Tyumen"
+#~ msgstr "Ðўт"
+
+#, fuzzy
+#~ msgid "Umea"
+#~ msgstr "ÐмÑліÑ"
+
+#, fuzzy
+#~ msgid "United Arab Emirates "
+#~ msgstr "Ð—Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÐрабÑÐºÑ–Ñ Ð­Ð¼Ñ–Ñ€Ð°Ñ‚Ñ‹"
+
+#, fuzzy
+#~ msgid "Upington"
+#~ msgstr "Ðрлінгтон"
+
+#, fuzzy
+#~ msgid "Uruapan"
+#~ msgstr "ЯпоніÑ"
+
+#, fuzzy
+#~ msgid "Uruguaiana"
+#~ msgstr "Уругвай"
+
+#, fuzzy
+#~ msgid "Urumqi"
+#~ msgstr "ÐзыÑ/Юрумкві"
+
+#, fuzzy
+#~ msgid "Utah"
+#~ msgstr "УклаÑьці"
+
+#, fuzzy
+#~ msgid "Utica"
+#~ msgstr "Ðріка"
+
+#, fuzzy
+#~ msgid "Utsunomiya Ab"
+#~ msgstr "Ðша Ðб"
+
+#, fuzzy
+#~ msgid "Uzhgorod"
+#~ msgstr "Эўропа/Ужгарад"
+
+#, fuzzy
+#~ msgid "Vadso"
+#~ msgstr "карткі"
+
+#, fuzzy
+#~ msgid "Vaerlose"
+#~ msgstr "Зачыніць"
+
+#, fuzzy
+#~ msgid "Vagar"
+#~ msgstr "Кватар"
+
+#, fuzzy
+#~ msgid "Valdosta"
+#~ msgstr "Мальта"
+
+#, fuzzy
+#~ msgid "Valencia"
+#~ msgstr "КалÑндар"
+
+#, fuzzy
+#~ msgid "Valentine"
+#~ msgstr "ÐзыÑ/Ð’Ñнцын"
+
+#, fuzzy
+#~ msgid "Valera*"
+#~ msgstr "Паштавік"
+
+#, fuzzy
+#~ msgid "Valley"
+#~ msgstr "Выклік"
+
+#, fuzzy
+#~ msgid "Van"
+#~ msgstr "MÑн."
+
+#, fuzzy
+#~ msgid "Vancouver"
+#~ msgstr "ÐмÑрыка/ВанкувÑÑ€"
+
+#, fuzzy
+#~ msgid "Vandel"
+#~ msgstr "ÐдмÑніць"
+
+#, fuzzy
+#~ msgid "Varadero"
+#~ msgstr "БарбадоÑ"
+
+#, fuzzy
+#~ msgid "Varna"
+#~ msgstr "Ванааці"
+
+#, fuzzy
+#~ msgid "Vasteras"
+#~ msgstr "ÐÑтурыÑÑ"
+
+#, fuzzy
+#~ msgid "Venezia"
+#~ msgstr "ВенÑÑуÑла"
+
+#, fuzzy
+#~ msgid "Venice"
+#~ msgstr "Юнікод"
+
+#, fuzzy
+#~ msgid "Vernal"
+#~ msgstr "ПÑÑ€Ñанальнае"
+
+#, fuzzy
+#~ msgid "Vicenza"
+#~ msgstr "ВенÑÑуÑла"
+
+#~ msgid "Vicksburg"
+#~ msgstr "ВікÑбург"
+
+#~ msgid "Victoria"
+#~ msgstr "ВікторыÑ"
+
+#~ msgid "Vigo"
+#~ msgstr "Віго"
+
+#~ msgid "Vilhena"
+#~ msgstr "Вільгена"
+
+#~ msgid "Villafranca"
+#~ msgstr "ВілÑфранка"
+
+#~ msgid "Villahermosa"
+#~ msgstr "ВілÑхермоза"
+
+#~ msgid "Vilnius"
+#~ msgstr "ВільнÑ"
+
+#~ msgid "Virginia"
+#~ msgstr "ВірджыніÑ"
+
+#~ msgid "Visalia"
+#~ msgstr "ВізаліÑ"
+
+#~ msgid "Visby"
+#~ msgstr "Ð’Ñ–Ñбы"
+
+#~ msgid "Viterbo"
+#~ msgstr "Ð’Ñ–Ñ‚Ñрбо"
+
+#~ msgid "Vitoria"
+#~ msgstr "ВіторыÑ"
+
+#~ msgid "Vladikavkaz"
+#~ msgstr "Уладыкаўказ"
+
+#~ msgid "Vladivostok"
+#~ msgstr "УладываÑток"
+
+#~ msgid "Vlieland"
+#~ msgstr "ВлілÑнд"
+
+#~ msgid "Volgograd"
+#~ msgstr "Валгаград"
+
+#~ msgid "Volkel"
+#~ msgstr "Волькель"
+
+#~ msgid "Volk Field"
+#~ msgstr "Волк Фільд"
+
+#~ msgid "Voronezh"
+#~ msgstr "Варонеж"
+
+#~ msgid "Voslau"
+#~ msgstr "ВоÑлаў"
+
+#~ msgid "Waco"
+#~ msgstr "Вако"
+
+#~ msgid "Wakefield"
+#~ msgstr "Вакефілд"
+
+#~ msgid "Wakkanai Airport"
+#~ msgstr "ÐÑрапорт Вакканай"
+
+#~ msgid "Walla Walla"
+#~ msgstr "Вала Вала"
+
+#~ msgid "Warroad"
+#~ msgstr "Варроад"
+
+#~ msgid "Warszawa"
+#~ msgstr "Варшава"
+
+#~ msgid "Washington"
+#~ msgstr "Вашынгтон"
+
+#~ msgid "Waterbury"
+#~ msgstr "ВатÑрбары"
+
+#~ msgid "Waterloo"
+#~ msgstr "ВатÑрлоў"
+
+#~ msgid "Watertown"
+#~ msgstr "ВатÑртоўн"
+
+#~ msgid "Waterville"
+#~ msgstr "Ð’Ñ‹Ñ‚Ñрвіль"
+
+#~ msgid "Waukesha"
+#~ msgstr "Вашкеша"
+
+#~ msgid "Wausau"
+#~ msgstr "ВаўÑаў"
+
+#~ msgid "Waycross"
+#~ msgstr "Ð’ÑйкроÑ"
+
+#, fuzzy
+#~ msgid "Webster City"
+#~ msgstr "І-нÑÑ‚ плÑцоўка"
+
+#, fuzzy
+#~ msgid "Wellington"
+#~ msgstr "Ðрлінгтон"
+
+#, fuzzy
+#~ msgid "Wenatchee"
+#~ msgstr "Ðадвор'е"
+
+#, fuzzy
+#~ msgid "Wendover"
+#~ msgstr "ÐдпраўлÑльнік"
+
+#, fuzzy
+#~ msgid "West Burke"
+#~ msgstr "Заходне-ÑўрапейÑкае"
+
+#, fuzzy
+#~ msgid "Westerland"
+#~ msgstr "ÐідÑрлÑнды"
+
+#~ msgid "Westfield"
+#~ msgstr "Ð’ÑÑтфільд"
+
+#~ msgid "Westhampton"
+#~ msgstr "Ð’ÑÑÑ‚Ñ…Ñмптан"
+
+#~ msgid "Wheeling"
+#~ msgstr "Вілінг"
+
+#~ msgid "Whitefield"
+#~ msgstr "Вайтфілд"
+
+#~ msgid "Wichita"
+#~ msgstr "Вічыта"
+
+#~ msgid "Wick"
+#~ msgstr "Вік"
+
+#~ msgid "Wien"
+#~ msgstr "Вена"
+
+#~ msgid "Wildwood"
+#~ msgstr "Вілдвуд"
+
+#~ msgid "Williston"
+#~ msgstr "ВіліÑтон"
+
+#~ msgid "Wilmington"
+#~ msgstr "Вільмінгтон"
+
+#~ msgid "Winchester"
+#~ msgstr "ВінчÑÑцер"
+
+#~ msgid "Windsor"
+#~ msgstr "Віндзор"
+
+#~ msgid "Wink"
+#~ msgstr "Вінк"
+
+#~ msgid "Winnipeg"
+#~ msgstr "Вініпег"
+
+#~ msgid "Winslow"
+#~ msgstr "ВінÑлоў"
+
+#~ msgid "Wiscasset"
+#~ msgstr "Ð’Ñ–ÑкаÑÑÑ‚"
+
+#~ msgid "Wisconsin"
+#~ msgstr "Ð’Ñ–ÑконÑін"
+
+#~ msgid "Wise"
+#~ msgstr "ВізÑ"
+
+#~ msgid "Wooster"
+#~ msgstr "ВуÑÑ‚ÑÑ€"
+
+#~ msgid "Worcester"
+#~ msgstr "ВорцÑÑÑ‚ÑÑ€"
+
+#~ msgid "Worland"
+#~ msgstr "ВорлÑнд"
+
+#~ msgid "Worthington"
+#~ msgstr "ВорÑінгтон"
+
+#~ msgid "Wrangell"
+#~ msgstr "Врангель"
+
+#~ msgid "Yacuiba"
+#~ msgstr "Якуіба"
+
+#~ msgid "Yakima"
+#~ msgstr "Якіма"
+
+#~ msgid "Yakushima"
+#~ msgstr "Якушыма"
+
+#~ msgid "Yakutat"
+#~ msgstr "Якутат"
+
+#~ msgid "Yakutsk"
+#~ msgstr "ЯкутÑк"
+
+#~ msgid "Yamagata Airport"
+#~ msgstr "Ðмагата (аÑрапорт)"
+
+#~ msgid "Yankton"
+#~ msgstr "Янктон"
+
+#~ msgid "Yao Airport"
+#~ msgstr "Яо (аÑрапорт)"
+
+#~ msgid "Yekaterinburg"
+#~ msgstr "Екацерынбург"
+
+#~ msgid "Yellowknife"
+#~ msgstr "Ялаўкнайф"
+
+#~ msgid "Yellowstone"
+#~ msgstr "ЕлаўÑтон"
+
+#~ msgid "Yenbo"
+#~ msgstr "Йенба"
+
+#~ msgid "Yosu"
+#~ msgstr "ÐÑу"
+
+#~ msgid "Youngstown"
+#~ msgstr "ЯнгÑтаўн"
+
+#~ msgid "Ypsilanti"
+#~ msgstr "ЯпÑіланці"
+
+#~ msgid "Yukon"
+#~ msgstr "Юкон"
+
+#~ msgid "Yurimaguas"
+#~ msgstr "ЯрімагаÑ"
+
+#~ msgid "Yuzhno-Sakhalinsk"
+#~ msgstr "Южна-СахалінÑк"
+
+#~ msgid "Zacatecas"
+#~ msgstr "ЗакатекаÑ"
+
+#~ msgid "Zadar"
+#~ msgstr "Задар"
+
+#~ msgid "Zagreb"
+#~ msgstr "ЗагрÑб"
+
+#~ msgid "Zakinthos"
+#~ msgstr "ЗакінÑоÑ"
+
+#~ msgid "Zanesville"
+#~ msgstr "ЗанÑÑьвіль"
+
+#~ msgid "Zaragoza"
+#~ msgstr "Зарагоза"
+
+#~ msgid "Zuni Pueblo"
+#~ msgstr "Цані-ПуÑбла"
+
+#~ msgid "Zurich"
+#~ msgstr "Цюрых"
+
+#~ msgid "Folder containing the Evolution Summary"
+#~ msgstr "ТÑчка утрымлівае Ð°Ð³ÑƒÐ»ÑŒÐ½Ñ‹Ñ Ð·ÑŒÐ²ÐµÑткі \"Эвалюцыі\""
+
+#~ msgid "Appointments"
+#~ msgstr "СуÑÑ‚Ñ€Ñчы"
+
+#~ msgid "%k:%M %d %B"
+#~ msgstr "%k:%M %d %B"
+
+#~ msgid "%l:%M%P %d %B"
+#~ msgstr "%l:%M%P %d %B"
+
+#~ msgid "No description"
+#~ msgstr "ÐÑма апіÑаньнÑ"
+
+#~ msgid "Mail summary"
+#~ msgstr "Пошта агулам"
+
+#~ msgid "Dictionary.com Word of the Day"
+#~ msgstr "Dictionary.com - Слова днÑ"
+
+#~ msgid "Quotes of the Day"
+#~ msgstr "Цытата днÑ"
+
+#~ msgid "New News Feed"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÑ€Ñ‹Ð½Ñ–Ñ†Ð° навінаў"
+
+#~ msgid "Error downloading RDF"
+#~ msgstr "Памылка загрузкі RDF"
+
+#~ msgid "News Feed"
+#~ msgstr "Крыніца навінаў"
+
+#~ msgid "All"
+#~ msgstr "УÑÑ‘"
+
+#~ msgid "Shown"
+#~ msgstr "Паказанае"
+
+#~ msgid "(No Description)"
+#~ msgstr "(ÐÑма апіÑаньнÑ)"
+
+#~ msgid "My Weather"
+#~ msgstr "Маё надвор'е"
+
+#~ msgid "There was an error downloading data for"
+#~ msgstr "ÐдбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° загрузкі даньнÑÑž длÑ"
+
+#~ msgid "Weather"
+#~ msgstr "Ðадвор'е"
+
+#~ msgid "KBOS"
+#~ msgstr "UMMM"
+
+#~ msgid "%A, %B %e %Y"
+#~ msgstr "%A, %B %e %Y"
+
+#~ msgid "Please wait..."
+#~ msgstr "Калі лаÑка, пачакайце..."
+
+#~ msgid "Printing of Summary failed"
+#~ msgstr "Збой друку агульных зьвеÑтак"
+
+#~ msgid " F"
+#~ msgstr " °F"
+
+#~ msgid "knots"
+#~ msgstr "вузлы"
+
+#~ msgid "kph"
+#~ msgstr "кПа"
+
+#~ msgid "inHg"
+#~ msgstr "цалÑÑž рт. Ñлупка"
+
+#~ msgid "mmHg"
+#~ msgstr "мм рт.Ñлупка"
+
+#~ msgid "miles"
+#~ msgstr "мілі"
+
+#~ msgid "kilometers"
+#~ msgstr "кілÑмÑтры"
+
+#~ msgid "Clear sky"
+#~ msgstr "ЧыÑтае неба"
+
+#~ msgid "Broken clouds"
+#~ msgstr "ÐŸÐµÑ€Ð°Ð¼ÐµÐ½Ð½Ð°Ñ Ð²Ð¾Ð±Ð»Ð°Ñ‡Ð½Ð°Ñьць"
+
+#~ msgid "Scattered clouds"
+#~ msgstr "ÐдаÑÐ¾Ð±Ð»ÐµÐ½Ñ‹Ñ Ð°Ð±Ð»Ð¾ÐºÑ–"
+
+#~ msgid "Few clouds"
+#~ msgstr "Ðебагата аблокаў"
+
+#~ msgid "Overcast"
+#~ msgstr "Воблачна"
+
+#~ msgid "Invalid"
+#~ msgstr "Памылкова"
+
+#~ msgid "Variable"
+#~ msgstr "ПераменнаÑ"
+
+#~ msgid "North"
+#~ msgstr "Паўночны"
+
+#~ msgid "North - NorthEast"
+#~ msgstr "Паўночны - Паўночна-уÑходні"
+
+#~ msgid "Northeast"
+#~ msgstr "Паўночна-уÑходні"
+
+#~ msgid "East - NorthEast"
+#~ msgstr "УÑходні - Паўночна-уÑходні"
+
+#~ msgid "East"
+#~ msgstr "УÑходні"
+
+#~ msgid "East - Southeast"
+#~ msgstr "УÑходні - Паўднёва-уÑходні"
+
+#~ msgid "Southeast"
+#~ msgstr "Паўднёва-уÑходні"
+
+#~ msgid "South - Southeast"
+#~ msgstr "Паўднёвы - Паўднёва-уÑходні"
+
+#~ msgid "South"
+#~ msgstr "Паўднёвы"
+
+#~ msgid "South - Southwest"
+#~ msgstr "Паўднёвы - Паўднёва-заходні"
+
+#~ msgid "Southwest"
+#~ msgstr "Паўднёва-заходні"
+
+#~ msgid "West - Southwest"
+#~ msgstr "Заходні - Паўднёва-заходні"
+
+#~ msgid "West"
+#~ msgstr "Заходні"
+
+#~ msgid "West - Northwest"
+#~ msgstr "Заходні - Паўночна-заходні"
+
+#~ msgid "Northwest"
+#~ msgstr "Паўночна-заходні"
+
+#~ msgid "North - Northwest"
+#~ msgstr "Паўночны - Паўночна-заходні"
+
+#~ msgid "Drizzle"
+#~ msgstr "Імга"
+
+#~ msgid "Drizzle in the vicinity"
+#~ msgstr "Імга ў ваколіцах"
+
+#~ msgid "Light drizzle"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÐ°Ñ Ñ–Ð¼Ð³Ð°"
+
+#~ msgid "Moderate drizzle"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ð°Ñ Ñ–Ð¼Ð³Ð°"
+
+#~ msgid "Heavy drizzle"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ð°Ñ Ñ–Ð¼Ð³Ð°"
+
+#~ msgid "Shallow drizzle"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ð°Ñ Ñ–Ð¼Ð³Ð°"
+
+#~ msgid "Thunderstorm"
+#~ msgstr "Ðавальніца"
+
+#~ msgid "Windy drizzle"
+#~ msgstr "Ð’ÐµÑ‚Ñ€Ð°Ð½Ð°Ñ Ñ–Ð¼Ð³Ð°"
+
+#~ msgid "Showers"
+#~ msgstr "Ліўні"
+
+#~ msgid "Freezing drizzle"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ð°Ñ Ñ–Ð¼Ð³Ð°"
+
+#~ msgid "Rain"
+#~ msgstr "Дождж"
+
+#~ msgid "Rain in the vicinity"
+#~ msgstr "Дождж у ваколіцах"
+
+#~ msgid "Light rain"
+#~ msgstr "Лёхкі дождж"
+
+#~ msgid "Moderate rain"
+#~ msgstr "Умераны дождж"
+
+#~ msgid "Heavy rain"
+#~ msgstr "Моцны дождж"
+
+#~ msgid "Shallow rain"
+#~ msgstr "Дробны дождж"
+
+#~ msgid "Rain showers"
+#~ msgstr "Ліўні"
+
+#~ msgid "Freezing rain"
+#~ msgstr "Халодны дождж"
+
+#~ msgid "Snow"
+#~ msgstr "Сьнег"
+
+#~ msgid "Snow in the vicinity"
+#~ msgstr "Сьнег у ваколіцах"
+
+#~ msgid "Light snow"
+#~ msgstr "Лёхкі Ñьнег"
+
+#~ msgid "Moderate snow"
+#~ msgstr "Умераны Ñьнег"
+
+#~ msgid "Heavy snow"
+#~ msgstr "Моцны Ñьнег"
+
+#~ msgid "Shallow snow"
+#~ msgstr "Дробны Ñьнег"
+
+#~ msgid "Snowstorm"
+#~ msgstr "Сьнежны шторм"
+
+#~ msgid "Snow showers"
+#~ msgstr "Сьнегапад"
+
+#~ msgid "Freezing snow"
+#~ msgstr "Халодны Ñьнег"
+
+#~ msgid "Snow grains"
+#~ msgstr "Гранулы Ñьнегу"
+
+#~ msgid "Snow grains in the vicinity"
+#~ msgstr "Гранулы Ñьнегу Ñž ваколіцах"
+
+#~ msgid "Light snow grains"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÑ–Ñ Ð³Ñ€Ð°Ð½ÑƒÐ»Ñ‹ Ñьнегу"
+
+#~ msgid "Moderate snow grains"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ñ‹Ñ Ð³Ñ€Ð°Ð½ÑƒÐ»Ñ‹ Ñьнега"
+
+#~ msgid "Heavy snow grains"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ñ‹Ñ Ð³Ñ€Ð°Ð½ÑƒÐ»Ñ‹ Ñьнегу"
+
+#~ msgid "Shallow snow grains"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ñ‹Ñ Ð³Ñ€Ð°Ð½ÑƒÐ»Ñ‹ Ñьнега"
+
+#~ msgid "Snow grain showers"
+#~ msgstr "Гранулы Ñьнега"
+
+#~ msgid "Freezing snow grains"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ñ‹Ñ Ð³Ñ€Ð°Ð½ÑƒÐ»Ñ‹ Ñьнега"
+
+#~ msgid "Ice crystals"
+#~ msgstr "ЛедзÑÐ½Ñ‹Ñ ÐºÑ€Ñ‹ÑˆÑ‚Ð°Ð»Ñ–"
+
+#~ msgid "Ice crystals in the vicinity"
+#~ msgstr "ЛедзÑÐ½Ñ‹Ñ ÐºÑ€Ñ‹ÑˆÑ‚Ð°Ð»Ñ– Ñž ваколіцах"
+
+#~ msgid "Moderate ice crystals"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ñ‹Ñ Ð»ÐµÐ´Ð·ÑÐ½Ñ‹Ñ ÐºÑ€Ñ‹ÑˆÑ‚Ð°Ð»Ñ–"
+
+#~ msgid "Heavy ice crystals"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ñ‹Ñ Ð»ÐµÐ´Ð·ÑÐ½Ñ‹Ñ ÐºÑ€Ñ‹ÑˆÑ‚Ð°Ð»Ñ–"
+
+#~ msgid "Ice crystal storm"
+#~ msgstr "Шторм ледзÑных крышталÑÑž"
+
+#~ msgid "Showers of ice crystals"
+#~ msgstr "Град ледзÑных крышталÑÑž"
+
+#~ msgid "Freezing ice crystals"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ñ‹Ñ Ð»ÐµÐ´Ð·ÑÐ½Ñ‹Ñ ÐºÑ€Ñ‹ÑˆÑ‚Ð°Ð»Ñ–"
+
+#~ msgid "Ice pellets"
+#~ msgstr "ЛедзÑÐ½Ñ‹Ñ ÑˆÐ°Ñ€Ñ‹ÐºÑ–"
+
+#~ msgid "Ice pellets in the vicinity"
+#~ msgstr "ЛедзÑÐ½Ñ‹Ñ ÑˆÐ°Ñ€Ñ‹ÐºÑ– Ñž ваколіцах"
+
+#~ msgid "Moderate ice pellets"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ñ‹Ñ Ð»ÐµÐ´Ð·ÑÐ½Ñ‹Ñ ÑˆÐ°Ñ€Ñ‹ÐºÑ–"
+
+#~ msgid "Heavy ice pellets"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ñ‹Ñ Ð»ÐµÐ´Ð·ÑÐ½Ñ‹Ñ ÑˆÐ°Ñ€Ñ‹ÐºÑ–"
+
+#~ msgid "Shallow ice pellets"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ñ‹Ñ Ð»ÐµÐ´Ð·ÑÐ½Ñ‹Ñ ÑˆÐ°Ñ€Ñ‹ÐºÑ–"
+
+#~ msgid "Ice pellet storm"
+#~ msgstr "Шторм ледзÑных шарыкаў"
+
+#~ msgid "Showers of ice pellets"
+#~ msgstr "Град ледзÑных шарыкаў"
+
+#~ msgid "Freezing ice pellets"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ñ‹Ñ Ð»ÐµÐ´Ð·ÑÐ½Ñ‹Ñ ÑˆÐ°Ñ€Ñ‹ÐºÑ–"
+
+#~ msgid "Hail in the vicinity"
+#~ msgstr "Град у ваколіцах"
+
+#~ msgid "Light hail"
+#~ msgstr "Лёхкі град"
+
+#~ msgid "Moderate hail"
+#~ msgstr "Умераны град"
+
+#~ msgid "Heavy hail"
+#~ msgstr "Моцны град"
+
+#~ msgid "Shallow hail"
+#~ msgstr "Дробны град"
+
+#~ msgid "Hailstorm"
+#~ msgstr "Шторм граду"
+
+#~ msgid "Hail showers"
+#~ msgstr "Шквальны град"
+
+#~ msgid "Freezing hail"
+#~ msgstr "Халодны град"
+
+#~ msgid "Small hail"
+#~ msgstr "Дробны град"
+
+#~ msgid "Small hail in the vicinity"
+#~ msgstr "Дробны град у ваколіцах"
+
+#~ msgid "Moderate small hail"
+#~ msgstr "Умераны дробны град"
+
+#~ msgid "Heavy small hail"
+#~ msgstr "Моцны дробны град"
+
+#~ msgid "Shallow small hail"
+#~ msgstr "Шквальны дробны град"
+
+#~ msgid "Small hailstorm"
+#~ msgstr "Шторм дробнага граду"
+
+#~ msgid "Showers of small hail"
+#~ msgstr "Дробны град"
+
+#~ msgid "Freezing small hail"
+#~ msgstr "Халодны дробны град"
+
+#~ msgid "Unknown precipitation"
+#~ msgstr "ÐевÑÐ´Ð¾Ð¼Ñ‹Ñ Ð°Ð¿Ð°Ð´ÐºÑ–"
+
+#~ msgid "Precipitation in the vicinity"
+#~ msgstr "Ðпадкі Ñž ваколіцах"
+
+#~ msgid "Light precipitation"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÑ–Ñ Ð°Ð¿Ð°Ð´ÐºÑ–"
+
+#~ msgid "Moderate precipitation"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ñ‹Ñ Ð°Ð¿Ð°Ð´ÐºÑ–"
+
+#~ msgid "Heavy precipitation"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ñ‹Ñ Ð°Ð¿Ð°Ð´ÐºÑ–"
+
+#~ msgid "Shallow precipitation"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ñ‹Ñ Ð°Ð¿Ð°Ð´ÐºÑ–"
+
+#~ msgid "Unknown thunderstorm"
+#~ msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð½Ð°Ð²Ð°Ð»ÑŒÐ½Ñ–Ñ†Ð°"
+
+#~ msgid "Showers, type unknown"
+#~ msgstr "Ліўні, тып невÑдомы"
+
+#~ msgid "Freezing precipitation"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ñ‹Ñ Ð°Ð¿Ð°Ð´ÐºÑ–"
+
+#~ msgid "Mist"
+#~ msgstr "Дымка"
+
+#~ msgid "Mist in the vicinity"
+#~ msgstr "Дымка ў ваколіцах"
+
+#~ msgid "Light mist"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÐ°Ñ Ð´Ñ‹Ð¼ÐºÐ°"
+
+#~ msgid "Moderate mist"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ð°Ñ Ð´Ñ‹Ð¼ÐºÐ°"
+
+#~ msgid "Shallow mist"
+#~ msgstr "ÐегуÑÑ‚Ð°Ñ Ð´Ñ‹Ð¼ÐºÐ°"
+
+#~ msgid "Mist with wind"
+#~ msgstr "Дымка зь ветрам"
+
+#~ msgid "Freezing mist"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ð°Ñ Ð´Ñ‹Ð¼ÐºÐ°"
+
+#~ msgid "Fog"
+#~ msgstr "Туман"
+
+#~ msgid "Fog in the vicinity"
+#~ msgstr "Туман у ваколіцах"
+
+#~ msgid "Light fog"
+#~ msgstr "Лёхкі туман"
+
+#~ msgid "Moderate fog"
+#~ msgstr "Умераны туман"
+
+#~ msgid "Thick fog"
+#~ msgstr "ГуÑÑ‚Ñ‹ туман"
+
+#~ msgid "Shallow fog"
+#~ msgstr "ÐегуÑÑ‚Ñ‹ туман"
+
+#~ msgid "Fog with wind"
+#~ msgstr "Туман зь ветрам"
+
+#~ msgid "Freezing fog"
+#~ msgstr "Халодны туман"
+
+#~ msgid "Smoke"
+#~ msgstr "Дымка"
+
+#~ msgid "Smoke in the vicinity"
+#~ msgstr "Дым ў ваколіцах"
+
+#~ msgid "Thin smoke"
+#~ msgstr "ÐегуÑÑ‚Ñ‹ дым"
+
+#~ msgid "Moderate smoke"
+#~ msgstr "Умераны дым"
+
+#~ msgid "Thick smoke"
+#~ msgstr "ГуÑÑ‚Ñ‹ дым"
+
+#~ msgid "Shallow smoke"
+#~ msgstr "ÐегуÑÑ‚Ñ‹ дым"
+
+#~ msgid "Thunderous smoke"
+#~ msgstr "Грамавы дым"
+
+#~ msgid "Smoke with wind"
+#~ msgstr "Дым зь ветрам"
+
+#~ msgid "Volcanic ash"
+#~ msgstr "Вулканічны попел"
+
+#~ msgid "Volcanic ash in the vicinity"
+#~ msgstr "Вулканічны попел у ваколіцах"
+
+#~ msgid "Moderate volcanic ash"
+#~ msgstr "Умераны вулканічны попел"
+
+#~ msgid "Thick volcanic ash"
+#~ msgstr "ГуÑÑ‚Ñ‹ вулканічны попел"
+
+#~ msgid "Shallow volcanic ash"
+#~ msgstr "ÐегуÑÑ‚Ñ‹ вулканічны попел"
+
+#~ msgid "Thunderous volcanic ash"
+#~ msgstr "Ðавальніца вулканічнага попелу"
+
+#~ msgid "Showers of volcanic ash"
+#~ msgstr "Град вулканічнага попелу"
+
+#~ msgid "Freezing volcanic ash"
+#~ msgstr "Халодны вулканічны попел"
+
+#~ msgid "Sand"
+#~ msgstr "ПÑÑок"
+
+#~ msgid "Sand in the vicinity"
+#~ msgstr "ПÑÑок у ваколіцах"
+
+#~ msgid "Light sand"
+#~ msgstr "Лёхкі пÑÑок"
+
+#~ msgid "Moderate sand"
+#~ msgstr "Умераны пÑÑок"
+
+#~ msgid "Heavy sand"
+#~ msgstr "Моцны пÑÑок"
+
+#~ msgid "Haze"
+#~ msgstr "Смуга"
+
+#~ msgid "Haze in the vicinity"
+#~ msgstr "Смуга ў ваколіцах"
+
+#~ msgid "Light haze"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÐ°Ñ Ñмуга"
+
+#~ msgid "Moderate haze"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ð°Ñ Ñмуга"
+
+#~ msgid "Thick haze"
+#~ msgstr "ГуÑÑ‚Ð°Ñ Ñмуга"
+
+#~ msgid "Shallow haze"
+#~ msgstr "ÐегуÑÑ‚Ð°Ñ Ñмуга"
+
+#~ msgid "Haze with wind"
+#~ msgstr "Смуга зь ветрам"
+
+#~ msgid "Freezing haze"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ð°Ñ Ñмуга"
+
+#~ msgid "Spray in the vicinity"
+#~ msgstr "ПырÑкі Ñž ваколіцах"
+
+#~ msgid "Light spray"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÑ–Ñ Ð¿Ñ‹Ñ€Ñкі"
+
+#~ msgid "Moderate spray"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ñ‹Ñ Ð¿Ñ‹Ñ€Ñкі"
+
+#~ msgid "Heavy spray"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ñ‹Ñ Ð¿Ñ‹Ñ€Ñкі"
+
+#~ msgid "Shallow spray"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ñ‹Ñ Ð¿Ñ‹Ñ€Ñкі"
+
+#~ msgid "Freezing spray"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ñ‹Ñ Ð¿Ñ‹Ñ€Ñкі"
+
+#~ msgid "Dust"
+#~ msgstr "Пыл"
+
+#~ msgid "Dust in the vicinity"
+#~ msgstr "Пыл у ваколіцах"
+
+#~ msgid "Light dust"
+#~ msgstr "Лёхкі пыл"
+
+#~ msgid "Moderate dust"
+#~ msgstr "Умераны пыл"
+
+#~ msgid "Heavy dust"
+#~ msgstr "Моцны пыл"
+
+#~ msgid "Squall"
+#~ msgstr "Шквал"
+
+#~ msgid "Squall in the vicinity"
+#~ msgstr "Шквал у ваколіцах"
+
+#~ msgid "Light squall"
+#~ msgstr "Лёхкі шквал"
+
+#~ msgid "Moderate squall"
+#~ msgstr "Умераны шквал"
+
+#~ msgid "Heavy squall"
+#~ msgstr "Моцны шквал"
+
+#~ msgid "Thunderous squall"
+#~ msgstr "Ðавальнічны шквал"
+
+#~ msgid "Freezing squall"
+#~ msgstr "Халодны шквал"
+
+#~ msgid "Sandstorm"
+#~ msgstr "ПÑÑÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Sandstorm in the vicinity"
+#~ msgstr "ПÑÑÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð° Ñž ваколіцах"
+
+#~ msgid "Light standstorm"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÐ°Ñ Ð¿ÑÑÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Moderate sandstorm"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ð°Ñ Ð¿ÑÑÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Heavy sandstorm"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ð°Ñ Ð¿ÑÑÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Shallow sandstorm"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¿ÑÑÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Thunderous sandstorm"
+#~ msgstr "ÐÐ°Ð²Ð°Ð»ÑŒÐ½Ñ–Ñ‡Ð½Ð°Ñ Ð¿ÑÑˆÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Freezing sandstorm"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ð°Ñ Ð¿ÑÑˆÑ‡Ð°Ð½Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Duststorm"
+#~ msgstr "ÐŸÑ‹Ð»Ð°Ð²Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Duststorm in the vicinity"
+#~ msgstr "ÐŸÑ‹Ð»Ð°Ð²Ð°Ñ Ð±ÑƒÑ€Ð° Ñž ваколіцах"
+
+#~ msgid "Light duststorm"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÐ°Ñ Ð¿Ñ‹Ð»Ð°Ð²Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Moderate duststorm"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ð°Ñ Ð¿Ñ‹Ð»Ð°Ð²Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Heavy duststorm"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ð°Ñ Ð¿Ñ‹Ð»Ð°Ð²Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Shallow duststorm"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¿Ñ‹Ð»Ð°Ð²Ð°Ñ Ð±ÑƒÑ€Ð°"
+
+#~ msgid "Thunderous duststorm"
+#~ msgstr "Ðавальніца пылавой буры"
+
+#~ msgid "Freezing duststorm"
+#~ msgstr "Ð¥Ð°Ð»Ð¾Ð´Ð½Ð°Ñ Ð±ÑƒÑ€Ð° пылу"
+
+#~ msgid "Funnel cloud"
+#~ msgstr "Ðблокі дыму"
+
+#~ msgid "Funnel cloud in the vicinity"
+#~ msgstr "Ðблокі дыму Ñž ваколіцах"
+
+#~ msgid "Light funnel cloud"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÑ–Ñ Ð°Ð±Ð»Ð¾ÐºÑ– дыму"
+
+#~ msgid "Moderate funnel cloud"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ñ‹Ñ Ð°Ð±Ð»Ð¾ÐºÑ– дыму"
+
+#~ msgid "Thick funnel cloud"
+#~ msgstr "ÐегуÑÑ‚Ñ‹Ñ Ð°Ð±Ð»Ð¾ÐºÑ– тыму"
+
+#~ msgid "Shallow funnel cloud"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ñ‹Ñ Ð°Ð±Ð»Ð¾ÐºÑ– дыму"
+
+#~ msgid "Funnel cloud w/ wind"
+#~ msgstr "Ðблокі дыму зь ветрам"
+
+#~ msgid "Tornado"
+#~ msgstr "Тарнада"
+
+#~ msgid "Tornado in the vicinity"
+#~ msgstr "Тарнада ў ваколіцах"
+
+#~ msgid "Moderate tornado"
+#~ msgstr "Умераны тарнада"
+
+#~ msgid "Raging tornado"
+#~ msgstr "Люты тарнада"
+
+#~ msgid "Thunderous tornado"
+#~ msgstr "Ðавальніца тарнада"
+
+#~ msgid "Freezing tornado"
+#~ msgstr "Халодны тарнада"
+
+#~ msgid "Dust whirls"
+#~ msgstr "ÐŸÑ‹Ð»Ð°Ð²Ñ‹Ñ Ð²Ñ–Ñ…Ð¾Ñ€Ñ‹"
+
+#~ msgid "Dust whirls in the vicinity"
+#~ msgstr "ÐŸÑ‹Ð»Ð°Ð²Ñ‹Ñ Ð²Ñ–Ñ…Ð¾Ñ€Ñ‹ зь ветрам"
+
+#~ msgid "Light dust whirls"
+#~ msgstr "Ð›Ñ‘Ñ…ÐºÑ–Ñ Ð¿Ñ‹Ð»Ð°Ð²Ñ‹Ñ Ð²Ñ–Ñ…Ð¾Ñ€Ñ‹"
+
+#~ msgid "Moderate dust whirls"
+#~ msgstr "Ð£Ð¼ÐµÑ€Ð°Ð½Ñ‹Ñ Ð¿Ñ‹Ð»Ð°Ð²Ñ‹Ñ Ð²Ñ–Ñ…Ð¾Ñ€Ñ‹"
+
+#~ msgid "Heavy dust whirls"
+#~ msgstr "ÐœÐ¾Ñ†Ð½Ñ‹Ñ Ð¿Ñ‹Ð»Ð°Ð²Ñ‹Ñ Ð²Ñ–Ñ…Ð¾Ñ€Ñ‹"
+
+#~ msgid "Shallow dust whirls"
+#~ msgstr "Ð”Ñ€Ð¾Ð±Ð½Ñ‹Ñ Ð¿Ñ‹Ð»Ð°Ð²Ñ‹Ñ Ð²Ñ–Ñ…Ð¾Ñ€Ñ‹"
+
+#~ msgid "C_elsius"
+#~ msgstr "ЦÑльÑÑ‹ÑÑ…"
+
+#~ msgid "How many days should the calendar display at once?"
+#~ msgstr "Колькі дзён муÑіць адлюÑтроўваць калÑндар за раз?"
+
+#~ msgid "News Feed Settings"
+#~ msgstr "УÑталёўкі крыніц навінаў"
+
+#~ msgid "News Feeds"
+#~ msgstr "Крыніцы навінаў"
+
+#~ msgid "R_efresh time (seconds):"
+#~ msgstr "ЧаÑÑŒÑ†Ñ–Ð½Ñ Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ (ÑÑкунды):"
+
+#~ msgid "Refresh _time (seconds):"
+#~ msgstr "ЧаÑÑŒÑ†Ñ–Ð½Ñ Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ (ÑÑкунды):"
+
+#~ msgid "Schedule"
+#~ msgstr "ПлÑнаваньне"
+
+#~ msgid "Show _all tasks"
+#~ msgstr "ÐдлюÑтраваць уÑе заданьні"
+
+#~ msgid "Show _today's tasks"
+#~ msgstr "ÐдлюÑтраваць ÑёньнÑÑˆÐ½Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ–"
+
+#~ msgid "Show temperatures in:"
+#~ msgstr "Паказываць Ñ‚Ñмпературу Ñž:"
+
+#~ msgid "Weather Settings"
+#~ msgstr "УÑталёўкі надвор'Ñ"
+
+#~ msgid "_Delete Feed"
+#~ msgstr "Вы_даліць крыніцу"
+
+#~ msgid "_Fahrenheit"
+#~ msgstr "_ФарÑнгейтах"
+
+#~ msgid "_Five days"
+#~ msgstr "ПÑць дзён"
+
+#~ msgid "_Max number of items shown:"
+#~ msgstr "МакÑÑ‹Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñьць пунктаў:"
+
+#~ msgid "_New Feed"
+#~ msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÑ€Ñ‹Ð½Ñ–Ñ†Ð°"
+
+#~ msgid "_Show full path for folders"
+#~ msgstr "Паказаць поўны _шлÑÑ… да Ñ‚Ñчак"
+
+#~ msgid ""
+#~ "Cannot activate component %s :\n"
+#~ "The error from the activation system is:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ðемагчыма актывізаваць кампанÑнт %s :\n"
+#~ "Памылка ад актывацыі ÑÑ‹ÑÑ‚Ñмы:\n"
+#~ "%s"
+
+#~ msgid "Cannot set up local storage -- %s"
+#~ msgstr "Ðемагчыма наладзіць лакальнае Ñховішча -- %s"
+
+#~ msgid "Disable splash screen"
+#~ msgstr "Выключыць заÑтаўку"
+
+#~ msgid "Add to _Shortcut Bar"
+#~ msgstr "Дадаць да панÑлі лычак"
+
+#~ msgid "Copy this folder"
+#~ msgstr "КапіÑваць гÑтую Ñ‚Ñчку"
+
+#~ msgid "Create a link to this folder in the shortcut bar"
+#~ msgstr "Стварыць ÑпаÑылку на гÑтую Ñ‚Ñчку праз лычку на панÑлі лычак"
+
+#~ msgid "Create a new shortcut"
+#~ msgstr "Стварыць новую лычку"
+
+#~ msgid "Display a different folder"
+#~ msgstr "ÐдлюÑтраваць іншую Ñ‚Ñчку"
+
+#~ msgid "Move this folder to another place"
+#~ msgstr "ПерамÑÑьціць гÑтую Ñ‚Ñчку Ñž іншае мейÑца"
+
+#~ msgid "Open Other _User's Folder..."
+#~ msgstr "Ðдкрыць іншую Ñ‚Ñчку карыÑтальніка..."
+
+#~ msgid "Open this folder in an other window"
+#~ msgstr "Ðдкрыць гÑтую Ñ‚Ñчку Ñž іншым акне"
+
+#~ msgid "Remove a folder added with \"Open Other User's Folder\""
+#~ msgstr "Выдаліць Ñ‚Ñчку даданую праз \"Ðдкрыць Ñ–Ð½ÑˆÑ‹Ñ Ñ‚Ñчкі карыÑтальніка\""
+
+#~ msgid "View the selected folder"
+#~ msgstr "ПраглÑд вылучанае Ñ‚Ñчкі"
+
+#~ msgid "_Folder Bar"
+#~ msgstr "ПанÑÐ»Ñ _Ñ‚Ñчак"
+
+#~ msgid "_Folder..."
+#~ msgstr "_ТÑчка..."
+
+#~ msgid "_Go to Folder..."
+#~ msgstr "ІÑьці да _Ñ‚Ñчкі..."
+
+#~ msgid "_New Folder"
+#~ msgstr "_ÐÐ¾Ð²Ð°Ñ Ñ‚Ñчка"
+
+#~ msgid "_Remove Other User's Folder"
+#~ msgstr "Выдаліць Ñ–Ð½ÑˆÑ‹Ñ Ñ‚Ñчкі карыÑтальніка"
+
+#~ msgid "_Shortcut Bar"
+#~ msgstr "ПанÑÐ»Ñ Ð»Ñ‹Ñ‡Ð°Ðº"
+
+#~ msgid "_Shortcut..."
+#~ msgstr "_Лычка..."
+
+#~ msgid "Error"
+#~ msgstr "Памылка"
+
+#~ msgid "Question"
+#~ msgstr "Пытаньне"
+
+#~ msgid "Evolution Addressbook local file backend"
+#~ msgstr "Праграма лакальнай кнігі адрÑÑаў \"Эвалюцыі\""
+
+#~ msgid ""
+#~ "ping_timeout_callback: could not determine if the CORBA object is nil or "
+#~ "not"
+#~ msgstr ""
+#~ "ping_timeout_callback: Ð½Ñ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÐµÑ†Ñ†Ð° вызначыць, пуÑÑ‚Ñ‹ ці не аб'ект "
+#~ "CORBA"
+
+#~ msgid "_Weather"
+#~ msgstr "Ðадвор'е"
+
+#~ msgid "(%d not shown)"
+#~ msgstr "(%d не паказана)"
+
+#~ msgid "1234"
+#~ msgstr "1234"
+
+#~ msgid "666"
+#~ msgstr "666"
+
+#~ msgid "<- _Remove"
+#~ msgstr "<- _Выдаліць"
+
+#~ msgid "A Bonobo control for an address popup."
+#~ msgstr "Кіраваньне Bonobo Ð´Ð»Ñ Ð°Ð´Ñ€ÑÑаў."
+
+#~ msgid "A Bonobo control for displaying an address."
+#~ msgstr "Кіраваньне Bonobo Ð´Ð»Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð°Ð´Ñ€ÑÑаў."
+
+#~ msgid "A Bonobo control which displays a task list."
+#~ msgstr "Кіраваньне Bonobo што адлюÑтроўвае ÑÑŒÐ¿Ñ–Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½ÑÑž."
+
+#~ msgid "A sample Bonobo control which displays an addressbook."
+#~ msgstr "Узор ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Bonobo Ñкі адлюÑтроўвае кнігу адрÑÑаў."
+
+#~ msgid "A sample Bonobo control which displays an calendar."
+#~ msgstr "ПроÑтае кіраваньне Bonobo Ñкое адлюÑтроўвае калÑндар."
+
+#~ msgid "Add"
+#~ msgstr "Дадаць"
+
+#~ msgid "Add (or Edit) Attribute Mappings"
+#~ msgstr "Дадаць (ці Ñ€Ñдагаваць) мапы атрыбута"
+
+#~ msgid "Add Anyway"
+#~ msgstr "Дадаць у любым выпадку"
+
+#~ msgid "Alarm notification service"
+#~ msgstr "ПаÑлуга нагадваньнÑ"
+
+#~ msgid "All folders"
+#~ msgstr "УÑе Ñ‚Ñчкі"
+
+#~ msgid "Can't call getFolderAtPath on storage: %s"
+#~ msgstr "Ðемагчыма выклікаць \"getFolderAtPath\" на Ñховішчы: %s"
+
+#~ msgid "Can't get storage list from registry: %s"
+#~ msgstr "Ðемагчыма узÑць ÑÑŒÐ¿Ñ–Ñ Ð· Ñ€ÑгіÑтра : %s"
+
+#~ msgid "Cannot initialize Evolution's folder info component."
+#~ msgstr "ÐÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÐµÑ†Ñ†Ð° ініцыÑлізаваць кампанÑнт інфармацыі пра Ñ‚Ñчку."
+
+#~ msgid "Cannot initialize Evolution's mail config component."
+#~ msgstr "Ðемагчыма ініцыÑлізаваць кампанÑнт наладкі пошты Evolution."
+
+#~ msgid "Cannot initialize the Evolution mail component."
+#~ msgstr "Ðемагчыма иницыÑлизаваць кампанÑнт пошты \"Эвалюцыі\"."
+
+#~ msgid "Change Anyway"
+#~ msgstr "ЗьмÑніць у любым выпадку"
+
+#~ msgid "Check Address"
+#~ msgstr "Праверыць адрÑÑу"
+
+#~ msgid "Check Full Name"
+#~ msgstr "Праверыць поўнае імÑ"
+
+#~ msgid "Configuration control for the Evolution Addressbook Storages."
+#~ msgstr "ÐšÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñховішча кнігі адрÑÑаў \"Эвалюцыі\"."
+
+#~ msgid "Configuration control for the Evolution Calendar."
+#~ msgstr "ÐšÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð´Ð»Ñ ÐºÐ°Ð»Ñндару \"Эвалюцыі\"."
+
+#~ msgid "Configuration control for the Evolution Display Fonts."
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ ÐºÑ–Ñ€ÑƒÑŽÑ‡Ð°Ð³Ð° ÑлемÑнта шрыфтоў Ñкрана Evolution."
+
+#~ msgid "Configuration control for the Evolution Mail Accounts."
+#~ msgstr ""
+#~ "ВытворчаÑьць Ð´Ð»Ñ ÐºÑ–Ñ€ÑƒÑŽÑ‡Ð°Ð³Ð° ÑлемÑнта уліковых запіÑаў пошты \"Эвалюцыі\"."
+
+#~ msgid "Configuration control for the Evolution Mailer."
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ ÐºÑ–Ñ€ÑƒÑŽÑ‡Ð°Ð³Ð° ÑлемÑнта пошты \"Эвалюцыі\"."
+
+#~ msgid "Configuration control for the Evolution Message Composer."
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ ÐºÑ–Ñ€ÑƒÑŽÑ‡Ð°Ð³Ð° ÑлемÑнта Ñ€Ñдактара пошты \"Эвалюцыі\"."
+
+#~ msgid "Configuration control for the Evolution Summary."
+#~ msgstr "ÐšÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð²Ñ‹Ð½Ñ–ÐºÐ°Ð¼Ñ– \"Эвалюцыі\"."
+
+#~ msgid "Configure the fonts used by Evolution here"
+#~ msgstr "Ðаладка шрыфтоў, ÑÐºÑ–Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўвае \"ЭвалюцыÑ\", робіцца тут"
+
+#~ msgid "Control that displays an Evolution addressbook minicard."
+#~ msgstr "Што адлюÑтроўваць у візытоўках кнігі адрÑÑаў \"Эвалюцыі\"."
+
+#~ msgid ""
+#~ "Could not create composer window, because you have not yet\n"
+#~ "configured any identities in the mail component."
+#~ msgstr ""
+#~ "ÐÑ Ð°Ñ‚Ñ€Ñ‹Ð¼Ð°Ð»Ð°ÑÑ Ñтварыць акно Ñ€Ñдактара, таму што вы ÑÑˆÑ‡Ñ Ð½Ðµ наладзілі\n"
+#~ "ні воднае аÑобы Ñž паштовым кампанÑнце."
+
+#~ msgid ""
+#~ "Could not open `%s'; no items from the calendar folder will be migrated "
+#~ "to the tasks folder."
+#~ msgstr ""
+#~ "Ðемагчыма адчыніць `%s'; ÑлемÑнты з Ñ‚Ñчкі календара не будуць перанеÑÐµÐ½Ñ‹Ñ "
+#~ "Ñž Ñ‚Ñчку заданьнÑÑž."
+
+#~ msgid "DN Customization"
+#~ msgstr "Ðаладка DN"
+
+#~ msgid "De_lete"
+#~ msgstr "Вы_даліць"
+
+#~ msgid "Display Options"
+#~ msgstr "МожнаÑьці адлюÑтраваньнÑ"
+
+#~ msgid "Edit Contact List"
+#~ msgstr "РÑдагаваць ÑÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž"
+
+#~ msgid "Emacs"
+#~ msgstr "Emacs"
+
+#~ msgid "Evolution component for handling contacts."
+#~ msgstr "КампанÑнт \"Эвалюцыі\" Ð´Ð»Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ– кантактаў."
+
+#~ msgid "Evolution component for handling the calendar."
+#~ msgstr "КампанÑнт Evolution Ð´Ð»Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐºÑ– калÑндара."
+
+#~ msgid ""
+#~ "Evolution has taken the tasks that were in your calendar folder and "
+#~ "automatically migrated them to the new tasks folder."
+#~ msgstr ""
+#~ "\"ЭвалюцыÑ\" мае узÑць заданьні з Ñ‚Ñчкі калÑндара й аўтаматычна "
+#~ "перанеÑьці Ñ–Ñ… у новую Ñ‚Ñчку заданьнÑÑž."
+
+#~ msgid ""
+#~ "Evolution has tried to take the tasks that were in your calendar folder "
+#~ "and migrate them to the new tasks folder.\n"
+#~ "Some of the tasks could not be migrated, so this process may be attempted "
+#~ "again in the future."
+#~ msgstr ""
+#~ "\"ЭвалюцыÑ\" Ñпрабавала узÑць заданьні з Ñ‚Ñчкі калÑндара й аўтаматычна "
+#~ "перанеÑьці Ñ–Ñ… у новую Ñ‚Ñчку заданьнÑÑž.\n"
+#~ "ПÑÑžÐ½Ñ‹Ñ Ð·Ð°Ð´Ð°Ð½ÑŒÐ½Ñ– не былі перанеÑены, але гÑÑ‚Ð°Ñ Ð¿Ñ€Ð°Ñ†Ñдура можа быць "
+#~ "паÑпрабавана Ñž будучым."
+
+#~ msgid "Factory for the Addressbook's name selection interface"
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ Ð²Ñ‹Ð±Ð°Ñ€Ñƒ Ñ–Ð¼Ñ Ð· кнігі адрÑÑаў \"Эвалюцыі\""
+
+#~ msgid "Factory for the Evolution Calendar objects"
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ Ð°Ð±'ектаў калÑндара \"Эвалюцыі\""
+
+#~ msgid "Factory for the controls exported by the Evolution Addressbook"
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑкÑпарту кнігі адрÑÑаў \"Эвалюцыі\""
+
+#~ msgid "Factory for the controls exported by the Evolution Mailer"
+#~ msgstr "ВытворчаÑьць ÐºÑ–Ñ€Ð°Ð²Ð°Ð½ÑŒÐ½Ñ ÑкÑпартам \"Эвалюцыі\""
+
+#~ msgid "Factory to centralize calendar component editor dialogs"
+#~ msgstr ""
+#~ "ВытворчаÑьць Ð´Ð»Ñ Ñ†Ñнтралізацыі кампанÑнта Ñ€ÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð´Ñ‹Ñлёгаў календара"
+
+#~ msgid "Factory to import Outlook Express 4 mails into Evolution"
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð° файлаў Outlook Express 4 у Evolution"
+
+#~ msgid "Factory to import VCard files into Evolution."
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ñƒ файлаў VCard у \"Эвалюцыю\"."
+
+#~ msgid "Factory to import iCalendar files into Evolution"
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ„Ð°Ð¹Ð»Ð°Ñž iCalendar у \"Эвалюцыю\""
+
+#~ msgid "Factory to import mbox into Evolution"
+#~ msgstr "ВытворчаÑьць Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð°Ñ€Ñ‚Ð° файлаў mbox у Evolution"
+
+#~ msgid "Folders whose names begin with:"
+#~ msgstr "ТÑчкі, назвы Ñкіх пачынаюцца з:"
+
+#~ msgid "Font Preferences"
+#~ msgstr "Перавагі шрыфтоў"
+
+#~ msgid "Imports LDIF files into Evolution."
+#~ msgstr "Імпартуе файлы LDIF у \"Эвалюцыю\"."
+
+#~ msgid "Imports Outlook Express 4 files into Evolution"
+#~ msgstr "Імпартуе файлы Outlook Express 4 у \"Эвалюцыю\""
+
+#~ msgid "Imports VCard files into Evolution."
+#~ msgstr "Імпартуе файлы VCard у \"Эвалюцыю\"."
+
+#~ msgid "Imports iCalendar files into Evolution"
+#~ msgstr "Імпартуе файлы iCalendar у \"Эвалюцыю\""
+
+#~ msgid "Imports mbox files into Evolution"
+#~ msgstr "Імпартуе файлы mbox у \"Эвалюцыю\""
+
+#~ msgid "Imports vCalendar files into Evolution"
+#~ msgstr "Імпартуе файлы vCalendar у \"Эвалюцыю\""
+
+#~ msgid "Mappings"
+#~ msgstr "Мапаваньне"
+
+#~ msgid "Microsoft"
+#~ msgstr "Microsoft"
+
+#~ msgid "Objectclasses"
+#~ msgstr "КлÑÑÑ‹ абьектаў"
+
+#~ msgid "Objectclasses Used in Evolution:"
+#~ msgstr "КлÑÑÑ‹ аб'ектаў, ÑÐºÑ–Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўвае \"ЭвалюцыÑ\":"
+
+#~ msgid "Objectclasses Used on Server:"
+#~ msgstr "КлÑÑÑ‹ аб'ектаў, ÑÐºÑ–Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўвае паÑлужнік:"
+
+#~ msgid "On Screen fonts"
+#~ msgstr "Шрыфты Ð´Ð»Ñ Ñкрана"
+
+#~ msgid "Pilot Con_duit Settings..."
+#~ msgstr "УÑталёўкі ÑувÑзі з \"Пілётам\""
+
+#~ msgid ""
+#~ "Please select an Evolution attribute and an\n"
+#~ "LDAP attribute to associate with it."
+#~ msgstr ""
+#~ "Калі лаÑка, выбÑрыце атрыбуты \"Эвалюцыі\" Ñ–\n"
+#~ "зьвÑжыце Ñ–Ñ… з атрыбутамі LDAP."
+
+#~ msgid ""
+#~ "Please specify signature filename\n"
+#~ "in Advanced section of signature settings."
+#~ msgstr ""
+#~ "Калі лаÑка пазначце назву файла подпіÑа\n"
+#~ "у падзеле \"ÐдмыÑловае\" наладак подпіÑа."
+
+#~ msgid "R_estore Defaults"
+#~ msgstr "_Ð’Ñрнуцца да дапомнага"
+
+#~ msgid "Re_store Defaults"
+#~ msgstr "_Ð’Ñрнуцца да дапомнага"
+
+#~ msgid "S_elect server: "
+#~ msgstr "ВыбÑрыце паÑлужнік: "
+
+#~ msgid "Set up Pilot conduit configuration"
+#~ msgstr "Ðаладзіць канфігурацыю ÑувÑзі з \"Пілётам\""
+
+#~ msgid "Shortcuts _type:"
+#~ msgstr "Тып лычак:"
+
+#~ msgid "The Personal Addressbook Server"
+#~ msgstr "ПаÑлужнік пÑÑ€Ñанальнай кнігі адрÑÑаў"
+
+#~ msgid "The Personal Calendar Server; calendar factory"
+#~ msgstr "ПаÑлужнік пÑÑ€Ñанальнака калÑндара; вытворчаÑьць калÑндара"
+
+#~ msgid ""
+#~ "The method required to load `%s' is not supported; no items from the "
+#~ "calendar folder will be migrated to the tasks folder."
+#~ msgstr ""
+#~ "ÐœÑтад патрÑбны Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ– \"%s\" не падтрымліваецца, нÑма ÑлемÑнтаў з "
+#~ "Ñ‚Ñчкі калÑндара Ð´Ð»Ñ Ð¿ÐµÑ€Ð°Ð½Ð¾Ñу з Ñ‚Ñчкі заданьнÑÑž."
+
+#~ msgid ""
+#~ "To add an attribute to the DN, select it from the list and click the "
+#~ "\"Add Attribute\" button.\n"
+#~ "Any values that you add to the DN will become required values for any new "
+#~ "contacts\n"
+#~ "that you add to the directory on the LDAP server. "
+#~ msgstr ""
+#~ "Каб дадаць атрыбут да DN, выбÑрыце Ñго Ñа ÑьпіÑу Ñ– націÑьніце \"Дадаць "
+#~ "атрыбут\".\n"
+#~ "Ð›ÑŽÐ±Ñ‹Ñ Ð·Ð½Ð°Ñ‡Ñньні ÑÐºÑ–Ñ Ð²Ñ‹ дадаецё да DN будуць патрабавацца любым\n"
+#~ "новым кантактам Ñкі вы пажадаеце дадаць да каталёгу паÑлужніка LDAP."
+
+#~ msgid "Unnamed Contact List"
+#~ msgstr "Ð¡ÑŒÐ¿Ñ–Ñ ÐºÐ°Ð½Ñ‚Ð°ÐºÑ‚Ð°Ñž бÑз назвы"
+
+#~ msgid "XEmacs"
+#~ msgstr "XEmacs"
+
+#~ msgid "_Add Mapping"
+#~ msgstr "_Дадаць мапаваньне"
+
+#~ msgid "_Add to DN"
+#~ msgstr "_Дадаць у DN"
+
+#~ msgid "_Always"
+#~ msgstr "_ЗаўÑёды"
+
+#~ msgid "_Clear Flag"
+#~ msgstr "_ÐчыÑьціць ÑьцÑг"
+
+#~ msgid "_Delete Mapping"
+#~ msgstr "_Выдаліць мапаваньне"
+
+#~ msgid "_Distinguished Name (DN):"
+#~ msgstr "_Ð£Ð´Ð°ÐºÐ»Ð°Ð´Ð½Ñ‘Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° (DN):"
+
+#~ msgid "_Don't use SSL/TLS"
+#~ msgstr "_ÐÑ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўваць SSL/TLS"
+
+#~ msgid "_Edit Mapping"
+#~ msgstr "_РÑдагаваньне мапаваньнÑ"
+
+#~ msgid "_Evolution attribute:"
+#~ msgstr "_Ðтрыбут \"Эвалюцыі\":"
+
+#~ msgid "_Fixed-width:"
+#~ msgstr "_ФікÑÐ°Ð²Ð°Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ:"
+
+#~ msgid "_If necessary "
+#~ msgstr "_Калі неабходна"
+
+#~ msgid "_LDAP attribute:"
+#~ msgstr "Ð_трыбут LDAP:"
+
+#~ msgid "_LDAP attributes:"
+#~ msgstr "ÐÑ‚_рыбуты LDAP:"
+
+#~ msgid "_More Options >>"
+#~ msgstr "_Болей можнаÑьцÑÑž >>"
+
+#~ msgid "_Restore Defaults"
+#~ msgstr "_Ð’Ñрнуцца да дапомнага"
+
+#~ msgid "_Signature editor"
+#~ msgstr "РÑдактар подпіÑаў"
+
+#~ msgid "account-druid"
+#~ msgstr "чараўнік ÑтварÑÐ½ÑŒÐ½Ñ ÑžÐ»Ñ–ÐºÐ¾Ð²Ð°Ð³Ð° запіÑа"
+
+#~ msgid "account-editor"
+#~ msgstr "Ñ€Ñдактар уліковага запіÑа"
+
+#~ msgid "dn-customization-tab"
+#~ msgstr "закладка наладкі удакладнёнае назвы"
+
+#~ msgid "edit_server_window_simple"
+#~ msgstr "edit_server_window_simple"
+
+#~ msgid "hour"
+#~ msgstr "гадзіна"
+
+#~ msgid "mappings-tab"
+#~ msgstr "закладка мапаваньнÑ"
+
+#~ msgid "minute"
+#~ msgstr "хвіліна"
+
+#~ msgid "objectclasses-tab"
+#~ msgstr "закладка клÑÑаў аб'ектаў"
diff --git a/shell/ChangeLog b/shell/ChangeLog
index d2ed6880a8..6130f811bc 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,15 +1,3 @@
-2004-10-07 Not Zed <NotZed@Ximian.com>
-
- * main.c (main): initialise plugin system.
- (main): add --disable-eplugin and --disable-mono arguments.
-
-2004-09-30 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-shell-importer.c: (import_cb): use g_timeout_add().
- * importer/intelligent.c: (select_row_cb), (unselect_row_cb),
- (create_gui): use gtk_notebook_set_current_page() instead of
- deprecated gtk_notebook_set_page()
-
2004-09-24 Not Zed <NotZed@Ximian.com>
* e-shell-window-commands.c: Added ed catmur to the credits.
@@ -26,6 +14,10 @@
* e-shell-window-commands.c (about_box_new): don't show
"translator-credits" if not translated
+2004-09-13 JP Rosevear <jpr@novell.com>
+
+ * main.c: turn off development mode
+
2004-09-07 JP Rosevear <jpr@novell.com>
Fixes #17338
@@ -34,6 +26,14 @@
translator credits, update authors lists (not strictly authors,
but we have a lot of helpful people)
+2004-09-03 Not Zed <NotZed@Ximian.com>
+
+ ** See bug #61285.
+
+ * e-shell-settings-dialog.c (load_pages): use a better query to
+ get the configuration pages, the old one didn't include version
+ information properly.
+
2004-09-13 Sivaiah Nallagatla <snallagatla@novell.com>
* e-shell.c (offline_procedure_finished_cb)
@@ -130,10 +130,6 @@
* e-shell-errors.xml.h: Add this back to CVS for translators
* .cvsignore: Don't ignore e-shell-errors.xml.h
-2004-09-07 Not Zed <NotZed@Ximian.com>
-
- * e-shell.c (e_shell_construct): disable the startup wizard.
-
2004-06-24 Not Zed <NotZed@Ximian.com>
** See bug #57367.
diff --git a/shell/e-shell.c b/shell/e-shell.c
index 07c7dd9df5..0e43ee3fd7 100644
--- a/shell/e-shell.c
+++ b/shell/e-shell.c
@@ -643,12 +643,10 @@ e_shell_construct (EShell *shell,
e_shell_attempt_upgrade(shell);
-#if 0
if (e_shell_startup_wizard_create () == FALSE) {
bonobo_object_unref (BONOBO_OBJECT (shell));
exit (0);
}
-#endif
priv->is_initialized = TRUE;
diff --git a/shell/main.c b/shell/main.c
index c3f9cde841..e31afd75a2 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -81,12 +81,8 @@
#include <pthread.h>
-#include "e-util/e-plugin.h"
-#ifdef ENABLE_MONO
-#include "e-util/e-plugin-mono.h"
-#endif
-#define DEVELOPMENT
+/* #define DEVELOPMENT */
static EShell *shell = NULL;
@@ -99,10 +95,6 @@ static gboolean killev = FALSE;
#ifdef DEVELOPMENT
static gboolean force_migrate = FALSE;
#endif
-#ifdef ENABLE_MONO
-static gboolean disable_mono = FALSE;
-#endif
-static gboolean disable_eplugin = FALSE;
static gint idle_cb (void *data);
@@ -482,12 +474,6 @@ main (int argc, char **argv)
#endif
{ "debug", '\0', POPT_ARG_STRING, &evolution_debug_log, 0,
N_("Send the debugging output of all components to a file."), NULL },
-#ifdef ENABLE_MONO
- { "disable-mono", '\0', POPT_ARG_NONE, &disable_mono, 0,
- N_("Disable the mono plugin environment."), NULL },
-#endif
- { "disable-eplugin", '\0', POPT_ARG_NONE, &disable_eplugin, 0,
- N_("Disable loading of any plugins."), NULL },
{ "setup-only", '\0', POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN,
&setup_only, 0, NULL, NULL },
{ NULL, '\0', 0, NULL, 0, NULL, NULL }
@@ -585,15 +571,6 @@ main (int argc, char **argv)
gnome_sound_init ("localhost");
- if (!disable_eplugin) {
-#ifdef ENABLE_MONO
- if (!disable_mono && getenv("EVOLUTION_DISABLE_MONO") == NULL)
- e_plugin_register_type(e_plugin_mono_get_type());
-#endif
- e_plugin_register_type(e_plugin_lib_get_type());
- e_plugin_load_plugins();
- }
-
#ifdef DEVELOPMENT
client = gconf_client_get_default ();
skip_warning_dialog = gconf_client_get_bool (client, "/apps/evolution/shell/skip_warning_dialog", NULL);
diff --git a/widgets/menus/gal-define-views-dialog.c b/widgets/menus/gal-define-views-dialog.c
deleted file mode 100644
index 4d2854a0e1..0000000000
--- a/widgets/menus/gal-define-views-dialog.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-define-views-dialog.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "gal-define-views-dialog.h"
-
-#include <gtk/gtk.h>
-#include "gal-define-views-model.h"
-#include "gal-view-new-dialog.h"
-#include <gal/e-table/e-table-scrolled.h>
-#include <gal/util/e-i18n.h>
-#include <gal/util/e-util.h>
-
-static void gal_define_views_dialog_init (GalDefineViewsDialog *card);
-static void gal_define_views_dialog_class_init (GalDefineViewsDialogClass *klass);
-static void gal_define_views_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void gal_define_views_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
-static void gal_define_views_dialog_dispose (GObject *object);
-
-static GtkDialogClass *parent_class = NULL;
-#define PARENT_TYPE GTK_TYPE_DIALOG
-
-/* The properties we support */
-enum {
- PROP_0,
- PROP_COLLECTION
-};
-
-typedef struct {
- char *title;
- ETableModel *model;
- GalDefineViewsDialog *names;
-} GalDefineViewsDialogChild;
-
-
-E_MAKE_TYPE(gal_define_views_dialog, "GalDefineViewsDialog", GalDefineViewsDialog, gal_define_views_dialog_class_init, gal_define_views_dialog_init, PARENT_TYPE)
-
-static void
-gal_define_views_dialog_class_init (GalDefineViewsDialogClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass*) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->set_property = gal_define_views_dialog_set_property;
- object_class->get_property = gal_define_views_dialog_get_property;
- object_class->dispose = gal_define_views_dialog_dispose;
-
- g_object_class_install_property (object_class, PROP_COLLECTION,
- g_param_spec_object ("collection",
- _("Collection"),
- /*_( */"XXX blurb" /*)*/,
- GAL_VIEW_COLLECTION_TYPE,
- G_PARAM_READWRITE));
-}
-
-/* ETable creation */
-#define SPEC "<ETableSpecification cursor-mode=\"line\" draw-grid=\"true\" selection-mode=\"single\" gettext-domain=\"" E_I18N_DOMAIN "\">" \
- "<ETableColumn model_col= \"0\" _title=\"Name\" expansion=\"1.0\" minimum_width=\"18\" resizable=\"true\" cell=\"string\" compare=\"string\"/>" \
- "<ETableState> <column source=\"0\"/> <grouping> </grouping> </ETableState>" \
- "</ETableSpecification>"
-
-/* For use from libglade. */
-GtkWidget *gal_define_views_dialog_create_etable(char *name, char *string1, char *string2, int int1, int int2);
-
-GtkWidget *
-gal_define_views_dialog_create_etable(char *name, char *string1, char *string2, int int1, int int2)
-{
- GtkWidget *table;
- ETableModel *model;
- model = gal_define_views_model_new();
- table = e_table_scrolled_new(model, NULL, SPEC, NULL);
- g_object_set_data(G_OBJECT (table), "GalDefineViewsDialog::model", model);
- return table;
-}
-
-/* Button callbacks */
-
-static void
-gdvd_button_new_dialog_callback(GtkWidget *widget, int id, GalDefineViewsDialog *dialog)
-{
- gchar *name;
- GalView *view;
- GalViewFactory *factory;
- switch (id) {
- case GTK_RESPONSE_OK:
- g_object_get(widget,
- "name", &name,
- "factory", &factory,
- NULL);
- if (name && factory) {
- g_strchomp(name);
- if (*name != '\0') {
- view = gal_view_factory_new_view(factory, name);
- gal_define_views_model_append(GAL_DEFINE_VIEWS_MODEL(dialog->model), view);
- gal_view_edit(view, GTK_WINDOW (dialog));
- g_object_unref(view);
- }
- }
- g_object_unref(factory);
- g_free(name);
- break;
- }
- gtk_widget_destroy (widget);
-}
-
-static void
-gdvd_button_new_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
-{
- GtkWidget *view_new_dialog = gal_view_new_dialog_new(dialog->collection);
- gtk_window_set_transient_for (GTK_WINDOW (view_new_dialog), GTK_WINDOW (dialog));
- g_signal_connect(view_new_dialog, "response",
- G_CALLBACK(gdvd_button_new_dialog_callback), dialog);
- gtk_widget_show(view_new_dialog);
-}
-
-static void
-gdvd_button_modify_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
-{
- int row;
- GtkWidget *scrolled;
- ETable *etable;
-
- scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
- etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
- row = e_table_get_cursor_row (E_TABLE(etable));
-
- if (row != -1) {
- GalView *view;
- view = gal_define_views_model_get_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
- row);
- gal_view_edit(view, GTK_WINDOW (dialog));
- }
-}
-
-static void
-gdvd_button_delete_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
-{
- int row;
- GtkWidget *scrolled;
- ETable *etable;
-
- scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
- etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
- row = e_table_get_cursor_row (E_TABLE(etable));
-
- if (row != -1) {
- gal_define_views_model_delete_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
- row);
- }
-
-}
-
-#if 0
-static void
-gdvd_button_copy_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
-{
- int row;
- GtkWidget *scrolled;
- ETable *etable;
-
- scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
- etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
- row = e_table_get_cursor_row (E_TABLE(etable));
-
- if (row != -1) {
- gal_define_views_model_copy_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
- row);
- }
-
-}
-#endif
-
-static void
-gdvd_connect_signal(GalDefineViewsDialog *dialog, char *widget_name, char *signal, GCallback handler)
-{
- GtkWidget *widget;
-
- widget = glade_xml_get_widget(dialog->gui, widget_name);
-
- if (widget)
- g_signal_connect(widget, signal, handler, dialog);
-}
-
-static void
-etable_selection_change_forall_cb (int row, GalDefineViewsDialog *dialog)
-{
- if (row != -1) {
- GalViewCollectionItem *item = gal_view_collection_get_view_item (dialog->collection, row);
-
- if (item)
- gtk_widget_set_sensitive (glade_xml_get_widget (dialog->gui, "button-delete"),
- !item->built_in);
- }
-}
-
-static void
-etable_selection_change (ETable *etable, GalDefineViewsDialog *dialog)
-{
- e_table_selected_row_foreach (etable, (EForeachFunc) etable_selection_change_forall_cb, dialog);
-}
-
-static void
-dialog_response (GalDefineViewsDialog *dialog, int response_id, gpointer data)
-{
- gal_view_collection_save (dialog->collection);
-}
-
-static void
-gal_define_views_dialog_init (GalDefineViewsDialog *dialog)
-{
- GladeXML *gui;
- GtkWidget *widget;
- GtkWidget *etable;
-
- dialog->collection = NULL;
-
- gui = glade_xml_new (GAL_GLADEDIR "/gal-define-views.glade", NULL, E_I18N_DOMAIN);
- dialog->gui = gui;
-
- widget = glade_xml_get_widget(gui, "table-top");
- if (!widget) {
- return;
- }
- gtk_widget_ref(widget);
- gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
- gtk_window_set_default_size(GTK_WINDOW(dialog), 360, 270);
- gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), widget, TRUE, TRUE, 0);
- gtk_widget_unref(widget);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
- NULL);
-
- gdvd_connect_signal(dialog, "button-new", "clicked", G_CALLBACK(gdvd_button_new_callback));
- gdvd_connect_signal(dialog, "button-modify", "clicked", G_CALLBACK(gdvd_button_modify_callback));
- gdvd_connect_signal(dialog, "button-delete", "clicked", G_CALLBACK(gdvd_button_delete_callback));
-#if 0
- gdvd_connect_signal(dialog, "button-copy", "clicked", G_CALLBACK(gdvd_button_copy_callback));
-#endif
-
- dialog->model = NULL;
- etable = glade_xml_get_widget(dialog->gui, "custom-table");
- if (etable) {
- dialog->model = g_object_get_data(G_OBJECT (etable), "GalDefineViewsDialog::model");
- g_object_set(dialog->model,
- "collection", dialog->collection,
- NULL);
- g_signal_connect (e_table_scrolled_get_table (E_TABLE_SCROLLED (etable)),
- "selection_change",
- G_CALLBACK (etable_selection_change), dialog);
- gtk_widget_show_all (etable);
- }
-
- gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, TRUE, FALSE);
-
- g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), NULL);
-
-}
-
-static void
-gal_define_views_dialog_dispose (GObject *object)
-{
- GalDefineViewsDialog *gal_define_views_dialog = GAL_DEFINE_VIEWS_DIALOG(object);
-
- if (gal_define_views_dialog->gui)
- g_object_unref(gal_define_views_dialog->gui);
- gal_define_views_dialog->gui = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-gal_define_views_dialog_set_collection(GalDefineViewsDialog *dialog,
- GalViewCollection *collection)
-{
- dialog->collection = collection;
- if (dialog->model) {
- g_object_set(dialog->model,
- "collection", collection,
- NULL);
- }
- if (dialog->gui) {
- GtkWidget *widget = glade_xml_get_widget(dialog->gui, "label-views");
- if (widget && GTK_IS_LABEL (widget)) {
- if (collection->title) {
- char *text = g_strdup_printf (_("Define Views for %s"),
- collection->title);
- gtk_label_set_text (GTK_LABEL (widget),
- text);
- gtk_window_set_title (GTK_WINDOW (dialog), text);
- g_free (text);
- } else {
- gtk_label_set_text (GTK_LABEL (widget),
- _("Define Views"));
- gtk_window_set_title (GTK_WINDOW (dialog),
- _("Define Views"));
- }
- }
- }
-}
-
-/**
- * gal_define_views_dialog_new
- *
- * Returns a new dialog for defining views.
- *
- * Returns: The GalDefineViewsDialog.
- */
-GtkWidget*
-gal_define_views_dialog_new (GalViewCollection *collection)
-{
- GtkWidget *widget = g_object_new (GAL_DEFINE_VIEWS_DIALOG_TYPE, NULL);
- gal_define_views_dialog_set_collection(GAL_DEFINE_VIEWS_DIALOG (widget), collection);
- return widget;
-}
-
-static void
-gal_define_views_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GalDefineViewsDialog *dialog;
-
- dialog = GAL_DEFINE_VIEWS_DIALOG (object);
-
- switch (prop_id){
- case PROP_COLLECTION:
- if (g_value_get_object (value))
- gal_define_views_dialog_set_collection(dialog, GAL_VIEW_COLLECTION(g_value_get_object (value)));
- else
- gal_define_views_dialog_set_collection(dialog, NULL);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- return;
- }
-}
-
-static void
-gal_define_views_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GalDefineViewsDialog *dialog;
-
- dialog = GAL_DEFINE_VIEWS_DIALOG (object);
-
- switch (prop_id) {
- case PROP_COLLECTION:
- g_value_set_object (value, dialog->collection);
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
diff --git a/widgets/menus/gal-define-views-dialog.h b/widgets/menus/gal-define-views-dialog.h
deleted file mode 100644
index 03a047b9fe..0000000000
--- a/widgets/menus/gal-define-views-dialog.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-define-views-dialog.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __GAL_DEFINE_VIEWS_DIALOG_H__
-#define __GAL_DEFINE_VIEWS_DIALOG_H__
-
-#include <gtk/gtkdialog.h>
-#include <glade/glade.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/menus/gal-view-collection.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* GalDefineViewsDialog - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name type read/write description
- * --------------------------------------------------------------------------------
- */
-
-#define GAL_DEFINE_VIEWS_DIALOG_TYPE (gal_define_views_dialog_get_type ())
-#define GAL_DEFINE_VIEWS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_DEFINE_VIEWS_DIALOG_TYPE, GalDefineViewsDialog))
-#define GAL_DEFINE_VIEWS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_DEFINE_VIEWS_DIALOG_TYPE, GalDefineViewsDialogClass))
-#define GAL_IS_DEFINE_VIEWS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_DEFINE_VIEWS_DIALOG_TYPE))
-#define GAL_IS_DEFINE_VIEWS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GAL_DEFINE_VIEWS_DIALOG_TYPE))
-
-typedef struct _GalDefineViewsDialog GalDefineViewsDialog;
-typedef struct _GalDefineViewsDialogClass GalDefineViewsDialogClass;
-
-struct _GalDefineViewsDialog
-{
- GtkDialog parent;
-
- /* item specific fields */
- GladeXML *gui;
- ETableModel *model;
-
- GalViewCollection *collection;
-};
-
-struct _GalDefineViewsDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GtkWidget *gal_define_views_dialog_new (GalViewCollection *collection);
-GType gal_define_views_dialog_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GAL_DEFINE_VIEWS_DIALOG_H__ */
diff --git a/widgets/menus/gal-define-views-model.c b/widgets/menus/gal-define-views-model.c
deleted file mode 100644
index 40e54a53b6..0000000000
--- a/widgets/menus/gal-define-views-model.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-define-views-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-#include "gal-define-views-model.h"
-#include <gal/util/e-i18n.h>
-#include <gal/util/e-util.h>
-
-#define PARENT_TYPE E_TABLE_MODEL_TYPE
-static ETableModelClass *parent_class;
-
-/*
- * GalDefineViewsModel callbacks
- * These are the callbacks that define the behavior of our custom model.
- */
-static void gal_define_views_model_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void gal_define_views_model_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
-
-enum {
- PROP_0,
- PROP_EDITABLE,
- PROP_COLLECTION
-};
-
-static void
-gdvm_dispose(GObject *object)
-{
- GalDefineViewsModel *model = GAL_DEFINE_VIEWS_MODEL(object);
-
- if (model->collection)
- g_object_unref(model->collection);
- model->collection = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-/* This function returns the number of columns in our ETableModel. */
-static int
-gdvm_col_count (ETableModel *etc)
-{
- return 1;
-}
-
-/* This function returns the number of rows in our ETableModel. */
-static int
-gdvm_row_count (ETableModel *etc)
-{
- GalDefineViewsModel *views = GAL_DEFINE_VIEWS_MODEL(etc);
- if (views->collection)
- return gal_view_collection_get_count(views->collection);
- else
- return 0;
-}
-
-/* This function returns the value at a particular point in our ETableModel. */
-static void *
-gdvm_value_at (ETableModel *etc, int col, int row)
-{
- GalDefineViewsModel *views = GAL_DEFINE_VIEWS_MODEL(etc);
- const char *value;
-
- value = gal_view_get_title (gal_view_collection_get_view(views->collection, row));
-
- return (void *)(value ? value : "");
-}
-
-/* This function sets the value at a particular point in our ETableModel. */
-static void
-gdvm_set_value_at (ETableModel *etc, int col, int row, const void *val)
-{
- GalDefineViewsModel *views = GAL_DEFINE_VIEWS_MODEL(etc);
- if (views->editable) {
- e_table_model_pre_change(etc);
- gal_view_set_title(gal_view_collection_get_view(views->collection, row), val);
- e_table_model_cell_changed(etc, col, row);
- }
-}
-
-/* This function returns whether a particular cell is editable. */
-static gboolean
-gdvm_is_cell_editable (ETableModel *etc, int col, int row)
-{
- return GAL_DEFINE_VIEWS_MODEL(etc)->editable;
-}
-
-static void
-gdvm_append_row (ETableModel *etm, ETableModel *source, gint row)
-{
-}
-
-/* This function duplicates the value passed to it. */
-static void *
-gdvm_duplicate_value (ETableModel *etc, int col, const void *value)
-{
- return g_strdup(value);
-}
-
-/* This function frees the value passed to it. */
-static void
-gdvm_free_value (ETableModel *etc, int col, void *value)
-{
- g_free(value);
-}
-
-static void *
-gdvm_initialize_value (ETableModel *etc, int col)
-{
- return g_strdup("");
-}
-
-static gboolean
-gdvm_value_is_empty (ETableModel *etc, int col, const void *value)
-{
- return !(value && *(char *)value);
-}
-
-static char *
-gdvm_value_to_string (ETableModel *etc, int col, const void *value)
-{
- return g_strdup(value);
-}
-
-/**
- * gal_define_views_model_append
- * @model: The model to add to.
- * @view: The view to add.
- *
- * Adds the given view to the gal define views model.
- */
-void
-gal_define_views_model_append (GalDefineViewsModel *model,
- GalView *view)
-{
- ETableModel *etm = E_TABLE_MODEL(model);
-
- e_table_model_pre_change(etm);
- gal_view_collection_append(model->collection, view);
- e_table_model_row_inserted(etm, gal_view_collection_get_count(model->collection) - 1);
-}
-
-static void
-gal_define_views_model_class_init (GObjectClass *object_class)
-{
- ETableModelClass *model_class = (ETableModelClass *) object_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = gdvm_dispose;
- object_class->set_property = gal_define_views_model_set_property;
- object_class->get_property = gal_define_views_model_get_property;
-
- g_object_class_install_property (object_class, PROP_EDITABLE,
- g_param_spec_boolean ("editable",
- _("Editable"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_COLLECTION,
- g_param_spec_object ("collection",
- _("Collection"),
- /*_( */"XXX blurb" /*)*/,
- GAL_VIEW_COLLECTION_TYPE,
- G_PARAM_READWRITE));
-
- model_class->column_count = gdvm_col_count;
- model_class->row_count = gdvm_row_count;
- model_class->value_at = gdvm_value_at;
- model_class->set_value_at = gdvm_set_value_at;
- model_class->is_cell_editable = gdvm_is_cell_editable;
- model_class->append_row = gdvm_append_row;
- model_class->duplicate_value = gdvm_duplicate_value;
- model_class->free_value = gdvm_free_value;
- model_class->initialize_value = gdvm_initialize_value;
- model_class->value_is_empty = gdvm_value_is_empty;
- model_class->value_to_string = gdvm_value_to_string;
-}
-
-static void
-gal_define_views_model_init (GObject *object)
-{
- GalDefineViewsModel *model = GAL_DEFINE_VIEWS_MODEL(object);
-
- model->collection = NULL;
-}
-
-static void
-gal_define_views_model_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GalDefineViewsModel *model;
-
- model = GAL_DEFINE_VIEWS_MODEL (object);
-
- switch (prop_id){
- case PROP_EDITABLE:
- model->editable = g_value_get_boolean (value);
- break;
-
- case PROP_COLLECTION:
- e_table_model_pre_change(E_TABLE_MODEL(object));
- if (g_value_get_object (value))
- model->collection = GAL_VIEW_COLLECTION(g_value_get_object (value));
- else
- model->collection = NULL;
- e_table_model_changed(E_TABLE_MODEL(object));
- break;
- }
-}
-
-static void
-gal_define_views_model_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GalDefineViewsModel *model;
-
- model = GAL_DEFINE_VIEWS_MODEL (object);
-
- switch (prop_id) {
- case PROP_EDITABLE:
- g_value_set_boolean (value, model->editable);
- break;
-
- case PROP_COLLECTION:
- g_value_set_object (value, model->collection);
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-E_MAKE_TYPE(gal_define_views_model, "GalDefineViewsModel", GalDefineViewsModel, gal_define_views_model_class_init, gal_define_views_model_init, PARENT_TYPE)
-
-/**
- * gal_define_views_model_new
- *
- * Returns a new define views model. This is a list of views as an
- * ETable for use in the GalDefineViewsDialog.
- *
- * Returns: The new GalDefineViewsModel.
- */
-ETableModel *
-gal_define_views_model_new (void)
-{
- GalDefineViewsModel *et;
-
- et = g_object_new (GAL_DEFINE_VIEWS_MODEL_TYPE, NULL);
-
- return E_TABLE_MODEL(et);
-}
-
-/**
- * gal_define_views_model_get_view:
- * @model: The GalDefineViewsModel.
- * @n: Which view to get.
- *
- * Gets the nth view.
- *
- * Returns: The view.
- */
-GalView *
-gal_define_views_model_get_view (GalDefineViewsModel *model,
- int n)
-{
- return gal_view_collection_get_view(model->collection, n);
-}
-
-/**
- * gal_define_views_model_delete_view:
- * @model: The GalDefineViewsModel.
- * @n: Which view to delete.
- *
- * Deletes the nth view.
- */
-void
-gal_define_views_model_delete_view (GalDefineViewsModel *model,
- int n)
-{
- e_table_model_pre_change(E_TABLE_MODEL(model));
- gal_view_collection_delete_view(model->collection, n);
- e_table_model_row_deleted(E_TABLE_MODEL(model), n);
-}
-
-/**
- * gal_define_views_model_copy_view:
- * @model: The GalDefineViewsModel.
- * @n: Which view to copy.
- *
- * Copys the nth view.
- */
-void
-gal_define_views_model_copy_view (GalDefineViewsModel *model,
- int n)
-{
- ETableModel *etm = E_TABLE_MODEL(model);
- e_table_model_pre_change(etm);
- gal_view_collection_copy_view(model->collection, n);
- e_table_model_row_inserted(etm, gal_view_collection_get_count(model->collection) - 1);
-}
diff --git a/widgets/menus/gal-define-views-model.h b/widgets/menus/gal-define-views-model.h
deleted file mode 100644
index 6ea2b28cbc..0000000000
--- a/widgets/menus/gal-define-views-model.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-define-views-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_DEFINE_VIEWS_MODEL_H_
-#define _GAL_DEFINE_VIEWS_MODEL_H_
-
-#include <gal/e-table/e-table-model.h>
-#include <gal/menus/gal-view.h>
-#include <gal/menus/gal-view-collection.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_DEFINE_VIEWS_MODEL_TYPE (gal_define_views_model_get_type ())
-#define GAL_DEFINE_VIEWS_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_DEFINE_VIEWS_MODEL_TYPE, GalDefineViewsModel))
-#define GAL_DEFINE_VIEWS_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_DEFINE_VIEWS_MODEL_TYPE, GalDefineViewsModelClass))
-#define GAL_IS_DEFINE_VIEWS_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_DEFINE_VIEWS_MODEL_TYPE))
-#define GAL_IS_DEFINE_VIEWS_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_DEFINE_VIEWS_MODEL_TYPE))
-
-typedef struct {
- ETableModel parent;
-
- /* item specific fields */
- GalViewCollection *collection;
-
- guint editable : 1;
-} GalDefineViewsModel;
-
-
-typedef struct {
- ETableModelClass parent_class;
-} GalDefineViewsModelClass;
-
-
-GType gal_define_views_model_get_type (void);
-ETableModel *gal_define_views_model_new (void);
-
-void gal_define_views_model_append (GalDefineViewsModel *model,
- GalView *view);
-GalView *gal_define_views_model_get_view (GalDefineViewsModel *model,
- int i);
-void gal_define_views_model_delete_view (GalDefineViewsModel *model,
- int i);
-void gal_define_views_model_copy_view (GalDefineViewsModel *model,
- int i);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _GAL_DEFINE_VIEWS_MODEL_H_ */
diff --git a/widgets/menus/gal-define-views.glade b/widgets/menus/gal-define-views.glade
deleted file mode 100644
index 11395ad8b7..0000000000
--- a/widgets/menus/gal-define-views.glade
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="dialog1">
- <property name="title" translatable="yes">Define Views for &quot;%s&quot;</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button7">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table-top">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">1</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="Custom" id="custom-table">
- <property name="visible">True</property>
- <property name="creation_function">gal_define_views_dialog_create_etable</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 10 Nov 2000 16:37:39 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button-new">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-new</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-modify">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Edit...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-delete">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-delete</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">6</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-views">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Define Views for %s</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">12</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/widgets/menus/gal-view-collection.c b/widgets/menus/gal-view-collection.c
deleted file mode 100644
index 5e97419270..0000000000
--- a/widgets/menus/gal-view-collection.c
+++ /dev/null
@@ -1,823 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-collection.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <util/e-i18n.h>
-#include <sys/stat.h>
-#include <ctype.h>
-#include <string.h>
-#include <errno.h>
-#include <libxml/parser.h>
-#include <libgnome/gnome-util.h>
-#include <gal/util/e-util.h>
-#include <gal/util/e-xml-utils.h>
-#include <gal/widgets/e-unicode.h>
-#include "gal-view-collection.h"
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-static GObjectClass *gal_view_collection_parent_class;
-
-#define d(x)
-
-enum {
- DISPLAY_VIEW,
- CHANGED,
- LAST_SIGNAL
-};
-
-static guint gal_view_collection_signals [LAST_SIGNAL] = { 0, };
-
-/**
- * gal_view_collection_display_view:
- * @collection: The GalViewCollection to send the signal on.
- * @view: The view to display.
- *
- */
-void
-gal_view_collection_display_view (GalViewCollection *collection,
- GalView *view)
-{
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (view != NULL);
- g_return_if_fail (GAL_IS_VIEW (view));
-
- g_signal_emit (collection,
- gal_view_collection_signals [DISPLAY_VIEW], 0,
- view);
-}
-
-static void
-gal_view_collection_changed (GalViewCollection *collection)
-{
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
-
- g_signal_emit (collection,
- gal_view_collection_signals [CHANGED], 0);
-}
-
-static void
-gal_view_collection_item_free (GalViewCollectionItem *item)
-{
- g_free(item->id);
- if (item->view) {
- if (item->view_changed_id)
- g_signal_handler_disconnect (item->view,
- item->view_changed_id);
- g_object_unref(item->view);
- }
- g_free(item);
-}
-
-static char *
-gal_view_generate_string (GalViewCollection *collection,
- GalView *view,
- int which)
-{
- char *ret_val;
- char *pointer;
-
- if (which == 1)
- ret_val = g_strdup(gal_view_get_title(view));
- else
- ret_val = g_strdup_printf("%s_%d", gal_view_get_title(view), which);
- for (pointer = ret_val; *pointer; pointer++) {
- if (!isalnum((guint) *pointer)) {
- *pointer = '_';
- }
- }
- return ret_val;
-}
-
-static gint
-gal_view_check_string (GalViewCollection *collection,
- char *string)
-{
- int i;
-
- if (!strcmp (string, "current_view"))
- return FALSE;
-
- for (i = 0; i < collection->view_count; i++) {
- if (!strcmp(string, collection->view_data[i]->id))
- return FALSE;
- }
- for (i = 0; i < collection->removed_view_count; i++) {
- if (!strcmp(string, collection->removed_view_data[i]->id))
- return FALSE;
- }
- return TRUE;
-}
-
-static char *
-gal_view_generate_id (GalViewCollection *collection,
- GalView *view)
-{
- int i;
- for (i = 1; TRUE; i++) {
- char *try;
-
- try = gal_view_generate_string(collection, view, i);
- if (gal_view_check_string(collection, try))
- return try;
- g_free(try);
- }
-}
-
-static void
-gal_view_collection_dispose (GObject *object)
-{
- GalViewCollection *collection = GAL_VIEW_COLLECTION(object);
- int i;
-
- for (i = 0; i < collection->view_count; i++) {
- gal_view_collection_item_free (collection->view_data[i]);
- }
- g_free (collection->view_data);
- collection->view_data = NULL;
- collection->view_count = 0;
-
- e_free_object_list (collection->factory_list);
- collection->factory_list = NULL;
-
- for (i = 0; i < collection->removed_view_count; i++) {
- gal_view_collection_item_free (collection->removed_view_data[i]);
- }
- g_free(collection->removed_view_data);
- collection->removed_view_data = NULL;
- collection->removed_view_count = 0;
-
- g_free(collection->system_dir);
- collection->system_dir = NULL;
-
- g_free(collection->local_dir);
- collection->system_dir = NULL;
- collection->local_dir = NULL;
-
- g_free (collection->default_view);
- collection->default_view = NULL;
-
- g_free (collection->title);
- collection->title = NULL;
-
- if (gal_view_collection_parent_class->dispose)
- (*gal_view_collection_parent_class->dispose)(object);
-}
-
-static void
-gal_view_collection_class_init (GObjectClass *object_class)
-{
- GalViewCollectionClass *klass = GAL_VIEW_COLLECTION_CLASS(object_class);
- gal_view_collection_parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = gal_view_collection_dispose;
-
- gal_view_collection_signals [DISPLAY_VIEW] =
- g_signal_new ("display_view",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalViewCollectionClass, display_view),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, GAL_VIEW_TYPE);
-
- gal_view_collection_signals [CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalViewCollectionClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- klass->display_view = NULL;
- klass->changed = NULL;
-}
-
-static void
-gal_view_collection_init (GalViewCollection *collection)
-{
- collection->view_data = NULL;
- collection->view_count = 0;
- collection->factory_list = NULL;
-
- collection->removed_view_data = NULL;
- collection->removed_view_count = 0;
-
- collection->system_dir = NULL;
- collection->local_dir = NULL;
-
- collection->loaded = FALSE;
- collection->default_view = NULL;
- collection->default_view_built_in = TRUE;
-
- collection->title = NULL;
-}
-
-E_MAKE_TYPE(gal_view_collection, "GalViewCollection", GalViewCollection, gal_view_collection_class_init, gal_view_collection_init, PARENT_TYPE)
-
-/**
- * gal_view_collection_new:
- *
- * A collection of views and view factories.
- */
-GalViewCollection *
-gal_view_collection_new (void)
-{
- return g_object_new (GAL_VIEW_COLLECTION_TYPE, NULL);
-}
-
-void
-gal_view_collection_set_title (GalViewCollection *collection,
- const char *title)
-{
- g_free (collection->title);
- collection->title = g_strdup (title);
-}
-
-/**
- * gal_view_collection_set_storage_directories
- * @collection: The view collection to initialize
- * @system_dir: The location of the system built in views
- * @local_dir: The location to store the users set up views
- *
- * Sets up the GalViewCollection.
- */
-void
-gal_view_collection_set_storage_directories (GalViewCollection *collection,
- const char *system_dir,
- const char *local_dir)
-{
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (system_dir != NULL);
- g_return_if_fail (local_dir != NULL);
-
- g_free(collection->system_dir);
- g_free(collection->local_dir);
-
- collection->system_dir = g_strdup(system_dir);
- collection->local_dir = g_strdup(local_dir);
-}
-
-/**
- * gal_view_collection_add_factory
- * @collection: The view collection to add a factory to
- * @factory: The factory to add. The @collection will add a reference
- * to the factory object, so you should unref it after calling this
- * function if you no longer need it.
- *
- * Adds the given factory to this collection. This list is used both
- * when loading views from their xml description as well as when the
- * user tries to create a new view.
- */
-void
-gal_view_collection_add_factory (GalViewCollection *collection,
- GalViewFactory *factory)
-{
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (factory != NULL);
- g_return_if_fail (GAL_IS_VIEW_FACTORY (factory));
-
- g_object_ref (factory);
- collection->factory_list = g_list_prepend (collection->factory_list, factory);
-}
-
-static void
-view_changed (GalView *view,
- GalViewCollectionItem *item)
-{
- item->changed = TRUE;
- item->ever_changed = TRUE;
-
- g_signal_handler_block(G_OBJECT(item->view), item->view_changed_id);
- gal_view_collection_changed(item->collection);
- g_signal_handler_unblock(G_OBJECT(item->view), item->view_changed_id);
-}
-
-/* Use factory list to load a GalView file. */
-static GalView *
-gal_view_collection_real_load_view_from_file (GalViewCollection *collection, const char *type, const char *title, const char *dir, const char *filename)
-{
- GalViewFactory *factory;
- GList *factories;
-
- factory = NULL;
- for (factories = collection->factory_list; factories; factories = factories->next) {
- if (type && !strcmp(gal_view_factory_get_type_code(factories->data), type)) {
- factory = factories->data;
- break;
- }
- }
- if (factory) {
- GalView *view;
-
- view = gal_view_factory_new_view (factory, title);
- gal_view_set_title (view, title);
- gal_view_load(view, filename);
- return view;
- }
- return NULL;
-}
-
-GalView *
-gal_view_collection_load_view_from_file (GalViewCollection *collection, const char *type, const char *filename)
-{
- return gal_view_collection_real_load_view_from_file (collection, type, "", collection->local_dir, filename);
-}
-
-static GalViewCollectionItem *
-load_single_file (GalViewCollection *collection,
- gchar *dir,
- gboolean local,
- xmlNode *node)
-{
- GalViewCollectionItem *item;
- item = g_new(GalViewCollectionItem, 1);
- item->ever_changed = local;
- item->changed = FALSE;
- item->built_in = !local;
- item->id = e_xml_get_string_prop_by_name(node, "id");
- item->filename = e_xml_get_string_prop_by_name(node, "filename");
- item->title = e_xml_get_translated_utf8_string_prop_by_name(node, "title");
- item->type = e_xml_get_string_prop_by_name(node, "type");
- item->collection = collection;
- item->view_changed_id = 0;
-
- if (item->filename) {
- char *fullpath;
- fullpath = g_concat_dir_and_file(dir, item->filename);
- item->view = gal_view_collection_real_load_view_from_file (collection, item->type, item->title, dir, fullpath);
- g_free(fullpath);
- if (item->view) {
- item->view_changed_id =
- g_signal_connect(item->view, "changed",
- G_CALLBACK(view_changed), item);
- }
- }
- return item;
-}
-
-static void
-load_single_dir (GalViewCollection *collection,
- char *dir,
- gboolean local)
-{
- xmlDoc *doc = NULL;
- xmlNode *root;
- xmlNode *child;
- char *filename = g_concat_dir_and_file(dir, "galview.xml");
- char *default_view;
- struct stat st;
-
- if (stat (filename, &st) != -1 && S_ISREG (st.st_mode))
- doc = xmlParseFile (filename);
-
- if (!doc) {
- g_free (filename);
- return;
- }
- root = xmlDocGetRootElement(doc);
- for (child = root->xmlChildrenNode; child; child = child->next) {
- gchar *id;
- gboolean found = FALSE;
- int i;
-
- if (!strcmp (child->name, "text"))
- continue;
-
- id = e_xml_get_string_prop_by_name(child, "id");
- for (i = 0; i < collection->view_count; i++) {
- if (!strcmp(id, collection->view_data[i]->id)) {
- if (!local)
- collection->view_data[i]->built_in = TRUE;
- found = TRUE;
- break;
- }
- }
- if (!found) {
- for (i = 0; i < collection->removed_view_count; i++) {
- if (!strcmp(id, collection->removed_view_data[i]->id)) {
- if (!local)
- collection->removed_view_data[i]->built_in = TRUE;
- found = TRUE;
- break;
- }
- }
- }
-
- if (!found) {
- GalViewCollectionItem *item = load_single_file (collection, dir, local, child);
- if (item->filename && *item->filename) {
- collection->view_data = g_renew(GalViewCollectionItem *, collection->view_data, collection->view_count + 1);
- collection->view_data[collection->view_count] = item;
- collection->view_count ++;
- } else {
- collection->removed_view_data = g_renew(GalViewCollectionItem *, collection->removed_view_data, collection->removed_view_count + 1);
- collection->removed_view_data[collection->removed_view_count] = item;
- collection->removed_view_count ++;
- }
- }
- g_free(id);
- }
-
- default_view = e_xml_get_string_prop_by_name (root, "default-view");
- if (default_view) {
- if (local)
- collection->default_view_built_in = FALSE;
- else
- collection->default_view_built_in = TRUE;
- g_free (collection->default_view);
- collection->default_view = default_view;
- }
-
- g_free(filename);
- xmlFreeDoc(doc);
-}
-
-/**
- * gal_view_collection_load
- * @collection: The view collection to load information for
- *
- * Loads the data from the system and user directories specified in
- * set storage directories. This is primarily for internal use by
- * other parts of gal_view.
- */
-void
-gal_view_collection_load (GalViewCollection *collection)
-{
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (collection->local_dir != NULL);
- g_return_if_fail (collection->system_dir != NULL);
- g_return_if_fail (!collection->loaded);
-
- if ((e_create_directory(collection->local_dir) == -1) && (errno != EEXIST))
- g_warning ("Unable to create dir %s: %s", collection->local_dir, g_strerror(errno));
-
- load_single_dir(collection, collection->local_dir, TRUE);
- load_single_dir(collection, collection->system_dir, FALSE);
- gal_view_collection_changed(collection);
-
- collection->loaded = TRUE;
-}
-
-/**
- * gal_view_collection_save
- * @collection: The view collection to save information for
- *
- * Saves the data to the user directory specified in set storage
- * directories. This is primarily for internal use by other parts of
- * gal_view.
- */
-void
-gal_view_collection_save (GalViewCollection *collection)
-{
- int i;
- xmlDoc *doc;
- xmlNode *root;
- char *filename;
-
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (collection->local_dir != NULL);
-
- doc = xmlNewDoc("1.0");
- root = xmlNewNode(NULL, "GalViewCollection");
- xmlDocSetRootElement(doc, root);
-
- if (collection->default_view && !collection->default_view_built_in) {
- e_xml_set_string_prop_by_name(root, "default-view", collection->default_view);
- }
-
- for (i = 0; i < collection->view_count; i++) {
- xmlNode *child;
- GalViewCollectionItem *item;
-
- item = collection->view_data[i];
- if (item->ever_changed) {
- child = xmlNewChild(root, NULL, "GalView", NULL);
- e_xml_set_string_prop_by_name(child, "id", item->id);
- e_xml_set_string_prop_by_name(child, "title", item->title);
- e_xml_set_string_prop_by_name(child, "filename", item->filename);
- e_xml_set_string_prop_by_name(child, "type", item->type);
-
- if (item->changed) {
- filename = g_concat_dir_and_file(collection->local_dir, item->filename);
- gal_view_save(item->view, filename);
- g_free(filename);
- }
- }
- }
- for (i = 0; i < collection->removed_view_count; i++) {
- xmlNode *child;
- GalViewCollectionItem *item;
-
- item = collection->removed_view_data[i];
-
- child = xmlNewChild(root, NULL, "GalView", NULL);
- e_xml_set_string_prop_by_name(child, "id", item->id);
- e_xml_set_string_prop_by_name(child, "title", item->title);
- e_xml_set_string_prop_by_name(child, "type", item->type);
- }
- filename = g_concat_dir_and_file(collection->local_dir, "galview.xml");
- if (e_xml_save_file (filename, doc) == -1)
- g_warning ("Unable to save view to %s - %s", filename, g_strerror(errno));
- xmlFreeDoc(doc);
- g_free(filename);
-}
-
-/**
- * gal_view_collection_get_count
- * @collection: The view collection to count
- *
- * Calculates the number of views in the given collection.
- *
- * Returns: The number of views in the collection.
- */
-gint
-gal_view_collection_get_count (GalViewCollection *collection)
-{
- g_return_val_if_fail (collection != NULL, -1);
- g_return_val_if_fail (GAL_IS_VIEW_COLLECTION (collection), -1);
-
- return collection->view_count;
-}
-
-/**
- * gal_view_collection_get_view
- * @collection: The view collection to query
- * @n: The view to get.
- *
- * Returns: The nth view in the collection
- */
-GalView *
-gal_view_collection_get_view (GalViewCollection *collection,
- int n)
-{
- g_return_val_if_fail (collection != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW_COLLECTION (collection), NULL);
- g_return_val_if_fail (n < collection->view_count, NULL);
- g_return_val_if_fail (n >= 0, NULL);
-
- return collection->view_data[n]->view;
-}
-
-/**
- * gal_view_collection_get_view_item
- * @collection: The view collection to query
- * @n: The view item to get.
- *
- * Returns: The nth view item in the collection
- */
-GalViewCollectionItem *
-gal_view_collection_get_view_item (GalViewCollection *collection,
- int n)
-{
- g_return_val_if_fail (collection != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW_COLLECTION (collection), NULL);
- g_return_val_if_fail(n < collection->view_count, NULL);
- g_return_val_if_fail(n >= 0, NULL);
-
- return collection->view_data[n];
-}
-
-int
-gal_view_collection_get_view_index_by_id (GalViewCollection *collection, const char *view_id)
-{
- int i;
- for (i = 0; i < collection->view_count; i++) {
- if (!strcmp (collection->view_data[i]->id, view_id))
- return i;
- }
- return -1;
-}
-
-char *
-gal_view_collection_get_view_id_by_index (GalViewCollection *collection, int n)
-{
- g_return_val_if_fail (collection != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW_COLLECTION (collection), NULL);
- g_return_val_if_fail(n < collection->view_count, NULL);
- g_return_val_if_fail(n >= 0, NULL);
-
- return g_strdup (collection->view_data[n]->id);
-}
-
-
-void
-gal_view_collection_append (GalViewCollection *collection,
- GalView *view)
-{
- GalViewCollectionItem *item;
-
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (view != NULL);
- g_return_if_fail (GAL_IS_VIEW (view));
-
- item = g_new(GalViewCollectionItem, 1);
- item->ever_changed = TRUE;
- item->changed = TRUE;
- item->built_in = FALSE;
- item->title = g_strdup(gal_view_get_title(view));
- item->type = g_strdup(gal_view_get_type_code(view));
- item->id = gal_view_generate_id(collection, view);
- item->filename = g_strdup_printf("%s.galview", item->id);
- item->view = view;
- item->collection = collection;
- g_object_ref(view);
-
- item->view_changed_id =
- g_signal_connect(item->view, "changed",
- G_CALLBACK (view_changed), item);
-
- collection->view_data = g_renew(GalViewCollectionItem *, collection->view_data, collection->view_count + 1);
- collection->view_data[collection->view_count] = item;
- collection->view_count ++;
-
- gal_view_collection_changed(collection);
-}
-
-void
-gal_view_collection_delete_view (GalViewCollection *collection,
- int i)
-{
- GalViewCollectionItem *item;
-
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (i >= 0 && i < collection->view_count);
-
- item = collection->view_data[i];
- memmove(collection->view_data + i, collection->view_data + i + 1, (collection->view_count - i - 1) * sizeof(GalViewCollectionItem *));
- collection->view_count --;
- if (item->built_in) {
- g_free(item->filename);
- item->filename = NULL;
-
- collection->removed_view_data = g_renew(GalViewCollectionItem *, collection->removed_view_data, collection->removed_view_count + 1);
- collection->removed_view_data[collection->removed_view_count] = item;
- collection->removed_view_count ++;
- } else {
- gal_view_collection_item_free (item);
- }
-
- gal_view_collection_changed(collection);
-}
-
-void
-gal_view_collection_copy_view (GalViewCollection *collection,
- int i)
-{
- GalViewCollectionItem *item;
- GalView *view;
-
- g_return_if_fail (collection != NULL);
- g_return_if_fail (GAL_IS_VIEW_COLLECTION (collection));
- g_return_if_fail (i >= 0 && i < collection->view_count);
-
- view = collection->view_data[i]->view;
-
- item = g_new(GalViewCollectionItem, 1);
- item->ever_changed = TRUE;
- item->changed = FALSE;
- item->built_in = FALSE;
- item->title = g_strdup(gal_view_get_title(view));
- item->type = g_strdup(gal_view_get_type_code(view));
- item->id = gal_view_generate_id(collection, view);
- item->filename = g_strdup_printf("%s.galview", item->id);
- item->view = gal_view_clone(view);
- item->collection = collection;
-
- item->view_changed_id =
- g_signal_connect(item->view, "changed",
- G_CALLBACK (view_changed), item);
-
- collection->view_data = g_renew(GalViewCollectionItem *, collection->view_data, collection->view_count + 1);
- collection->view_data[collection->view_count] = item;
- collection->view_count ++;
-
- gal_view_collection_changed(collection);
-}
-
-gboolean
-gal_view_collection_loaded (GalViewCollection *collection)
-{
- return collection->loaded;
-}
-
-const char *
-gal_view_collection_append_with_title (GalViewCollection *collection, const char *title, GalView *view)
-{
- GalViewCollectionItem *item;
-
- g_return_val_if_fail (collection != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW_COLLECTION (collection), NULL);
- g_return_val_if_fail (view != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW (view), NULL);
-
- gal_view_set_title (view, title);
-
- d(g_print("%s: %p\n", G_GNUC_FUNCTION, view));
-
- item = g_new(GalViewCollectionItem, 1);
- item->ever_changed = TRUE;
- item->changed = TRUE;
- item->built_in = FALSE;
- item->title = g_strdup(gal_view_get_title(view));
- item->type = g_strdup(gal_view_get_type_code(view));
- item->id = gal_view_generate_id(collection, view);
- item->filename = g_strdup_printf("%s.galview", item->id);
- item->view = view;
- item->collection = collection;
- g_object_ref(view);
-
- item->view_changed_id =
- g_signal_connect(item->view, "changed",
- G_CALLBACK (view_changed), item);
-
- collection->view_data = g_renew(GalViewCollectionItem *, collection->view_data, collection->view_count + 1);
- collection->view_data[collection->view_count] = item;
- collection->view_count ++;
-
- gal_view_collection_changed(collection);
- return item->id;
-}
-
-const char *
-gal_view_collection_set_nth_view (GalViewCollection *collection, int i, GalView *view)
-{
- GalViewCollectionItem *item;
-
- g_return_val_if_fail (collection != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW_COLLECTION (collection), NULL);
- g_return_val_if_fail (view != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW (view), NULL);
- g_return_val_if_fail (i >= 0, NULL);
- g_return_val_if_fail (i < collection->view_count, NULL);
-
- d(g_print("%s: %p\n", G_GNUC_FUNCTION, view));
-
- item = collection->view_data[i];
-
- gal_view_set_title (view, item->title);
- g_object_ref (view);
- if (item->view) {
- g_signal_handler_disconnect (item->view,
- item->view_changed_id);
- g_object_unref (item->view);
- }
- item->view = view;
-
- item->ever_changed = TRUE;
- item->changed = TRUE;
- item->type = g_strdup(gal_view_get_type_code(view));
-
- item->view_changed_id =
- g_signal_connect(item->view, "changed",
- G_CALLBACK (view_changed), item);
-
- gal_view_collection_changed (collection);
- return item->id;
-}
-
-const char *
-gal_view_collection_get_default_view (GalViewCollection *collection)
-{
- return collection->default_view;
-}
-
-void
-gal_view_collection_set_default_view (GalViewCollection *collection, const char *id)
-{
- g_free (collection->default_view);
- collection->default_view = g_strdup (id);
- gal_view_collection_changed (collection);
- collection->default_view_built_in = FALSE;
-}
-
diff --git a/widgets/menus/gal-view-collection.h b/widgets/menus/gal-view-collection.h
deleted file mode 100644
index 9ba5eab71f..0000000000
--- a/widgets/menus/gal-view-collection.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-collection.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_VIEW_SET_H_
-#define _GAL_VIEW_SET_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/menus/gal-view-factory.h>
-
-G_BEGIN_DECLS
-
-#define GAL_VIEW_COLLECTION_TYPE (gal_view_collection_get_type ())
-#define GAL_VIEW_COLLECTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_VIEW_COLLECTION_TYPE, GalViewCollection))
-#define GAL_VIEW_COLLECTION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_VIEW_COLLECTION_TYPE, GalViewCollectionClass))
-#define GAL_IS_VIEW_COLLECTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_VIEW_COLLECTION_TYPE))
-#define GAL_IS_VIEW_COLLECTION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_VIEW_COLLECTION_TYPE))
-#define GAL_VIEW_COLLECTION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GAL_VIEW_COLLECTION_TYPE, GalViewCollectionClass))
-
-typedef struct GalViewCollectionItem GalViewCollectionItem;
-
-typedef struct {
- GObject base;
-
- GalViewCollectionItem **view_data;
- int view_count;
-
- GList *factory_list;
-
- GalViewCollectionItem **removed_view_data;
- int removed_view_count;
-
- guint loaded : 1;
- guint default_view_built_in : 1;
-
- char *system_dir;
- char *local_dir;
-
- char *default_view;
-
- char *title;
-} GalViewCollection;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Signals
- */
- void (*display_view) (GalViewCollection *collection,
- GalView *view);
- void (*changed) (GalViewCollection *collection);
-} GalViewCollectionClass;
-
-struct GalViewCollectionItem {
- GalView *view;
- char *id;
- guint changed : 1;
- guint ever_changed : 1;
- guint built_in : 1;
- char *filename;
- char *title;
- char *type;
- GalViewCollection *collection;
- guint view_changed_id;
-};
-
-/* Standard functions */
-GType gal_view_collection_get_type (void);
-GalViewCollection *gal_view_collection_new (void);
-
-void gal_view_collection_set_title (GalViewCollection *collection,
- const char *title);
-/* Set up the view collection. Call these two functions before ever doing load or save and never call them again. */
-void gal_view_collection_set_storage_directories (GalViewCollection *collection,
- const char *system_dir,
- const char *local_dir);
-void gal_view_collection_add_factory (GalViewCollection *collection,
- GalViewFactory *factory);
-
-/* Send the display view signal. This function is deprecated. */
-void gal_view_collection_display_view (GalViewCollection *collection,
- GalView *view);
-
-
-/* Query the view collection. */
-gint gal_view_collection_get_count (GalViewCollection *collection);
-GalView *gal_view_collection_get_view (GalViewCollection *collection,
- int n);
-GalViewCollectionItem *gal_view_collection_get_view_item (GalViewCollection *collection,
- int n);
-int gal_view_collection_get_view_index_by_id (GalViewCollection *collection,
- const char *view_id);
-char *gal_view_collection_get_view_id_by_index (GalViewCollection *collection,
- int n);
-
-/* Manipulate the view collection */
-void gal_view_collection_append (GalViewCollection *collection,
- GalView *view);
-void gal_view_collection_delete_view (GalViewCollection *collection,
- int i);
-void gal_view_collection_copy_view (GalViewCollection *collection,
- int i);
-/* Call set_storage_directories and add factories for anything that
- * might be found there before doing either of these. */
-void gal_view_collection_load (GalViewCollection *collection);
-void gal_view_collection_save (GalViewCollection *collection);
-gboolean gal_view_collection_loaded (GalViewCollection *collection);
-
-/* Use factory list to load a GalView file. */
-GalView *gal_view_collection_load_view_from_file (GalViewCollection *collection,
- const char *type,
- const char *filename);
-
-/* Returns id of the new view. These functions are used for
- GalViewInstanceSaveAsDialog. */
-const char *gal_view_collection_append_with_title (GalViewCollection *collection,
- const char *title,
- GalView *view);
-const char *gal_view_collection_set_nth_view (GalViewCollection *collection,
- int i,
- GalView *view);
-
-const char *gal_view_collection_get_default_view (GalViewCollection *collection);
-void gal_view_collection_set_default_view (GalViewCollection *collection,
- const char *id);
-
-
-G_END_DECLS
-
-
-#endif /* _GAL_VIEW_COLLECTION_H_ */
diff --git a/widgets/menus/gal-view-etable.c b/widgets/menus/gal-view-etable.c
deleted file mode 100644
index a46368559e..0000000000
--- a/widgets/menus/gal-view-etable.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-etable.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "gal-view-etable.h"
-#include <gal/e-table/e-table-config.h>
-
-#define PARENT_TYPE GAL_VIEW_TYPE
-
-static GalViewClass *gal_view_etable_parent_class;
-
-static void
-detach_table (GalViewEtable *view)
-{
- if (view->table == NULL)
- return;
- if (view->table_state_changed_id) {
- g_signal_handler_disconnect (view->table,
- view->table_state_changed_id);
- view->table_state_changed_id = 0;
- }
- g_object_unref (view->table);
- view->table = NULL;
-}
-
-static void
-detach_tree (GalViewEtable *view)
-{
- if (view->tree == NULL)
- return;
- if (view->tree_state_changed_id) {
- g_signal_handler_disconnect (view->tree,
- view->tree_state_changed_id);
- view->tree_state_changed_id = 0;
- }
- g_object_unref (view->tree);
- view->tree = NULL;
-}
-
-static void
-config_changed (ETableConfig *config, GalViewEtable *view)
-{
- ETableState *state;
- if (view->state)
- g_object_unref(view->state);
- g_object_get (config,
- "state", &state,
- NULL);
- view->state = e_table_state_duplicate(state);
- g_object_unref (state);
-
- gal_view_changed(GAL_VIEW(view));
-}
-
-static void
-gal_view_etable_edit (GalView *view, GtkWindow *parent)
-{
- GalViewEtable *etable_view = GAL_VIEW_ETABLE(view);
- ETableConfig *config;
-
- config = e_table_config_new(etable_view->title,
- etable_view->spec,
- etable_view->state,
- parent);
-
- g_signal_connect(config, "changed",
- G_CALLBACK(config_changed), view);
-}
-
-static void
-gal_view_etable_load (GalView *view,
- const char *filename)
-{
- e_table_state_load_from_file(GAL_VIEW_ETABLE(view)->state, filename);
-}
-
-static void
-gal_view_etable_save (GalView *view,
- const char *filename)
-{
- e_table_state_save_to_file(GAL_VIEW_ETABLE(view)->state, filename);
-}
-
-static const char *
-gal_view_etable_get_title (GalView *view)
-{
- return GAL_VIEW_ETABLE(view)->title;
-}
-
-static void
-gal_view_etable_set_title (GalView *view,
- const char *title)
-{
- g_free(GAL_VIEW_ETABLE(view)->title);
- GAL_VIEW_ETABLE(view)->title = g_strdup(title);
-}
-
-static const char *
-gal_view_etable_get_type_code (GalView *view)
-{
- return "etable";
-}
-
-static GalView *
-gal_view_etable_clone (GalView *view)
-{
- GalViewEtable *gve, *new;
-
- gve = GAL_VIEW_ETABLE(view);
-
- new = g_object_new (GAL_VIEW_ETABLE_TYPE, NULL);
- new->spec = gve->spec;
- new->title = g_strdup (gve->title);
- new->state = e_table_state_duplicate(gve->state);
-
- g_object_ref(new->spec);
-
- return GAL_VIEW(new);
-}
-
-static void
-gal_view_etable_dispose (GObject *object)
-{
- GalViewEtable *view = GAL_VIEW_ETABLE(object);
-
- gal_view_etable_detach (view);
-
- g_free(view->title);
- view->title = NULL;
-
- if (view->spec)
- g_object_unref(view->spec);
- view->spec = NULL;
-
- if (view->state)
- g_object_unref(view->state);
- view->state = NULL;
-
- if (G_OBJECT_CLASS (gal_view_etable_parent_class)->dispose)
- (* G_OBJECT_CLASS (gal_view_etable_parent_class)->dispose) (object);
-}
-
-static void
-gal_view_etable_class_init (GObjectClass *object_class)
-{
- GalViewClass *gal_view_class = GAL_VIEW_CLASS(object_class);
- gal_view_etable_parent_class = g_type_class_ref (PARENT_TYPE);
-
- gal_view_class->edit = gal_view_etable_edit ;
- gal_view_class->load = gal_view_etable_load ;
- gal_view_class->save = gal_view_etable_save ;
- gal_view_class->get_title = gal_view_etable_get_title ;
- gal_view_class->set_title = gal_view_etable_set_title ;
- gal_view_class->get_type_code = gal_view_etable_get_type_code;
- gal_view_class->clone = gal_view_etable_clone ;
-
- object_class->dispose = gal_view_etable_dispose ;
-}
-
-static void
-gal_view_etable_init (GalViewEtable *gve)
-{
- gve->spec = NULL;
- gve->state = e_table_state_new();
- gve->title = NULL;
-}
-
-E_MAKE_TYPE(gal_view_etable, "GalViewEtable", GalViewEtable, gal_view_etable_class_init, gal_view_etable_init, PARENT_TYPE)
-
-/**
- * gal_view_etable_new
- * @spec: The ETableSpecification that this view will be based upon.
- * @title: The name of the new view.
- *
- * Returns a new GalViewEtable. This is primarily for use by
- * GalViewFactoryEtable.
- *
- * Returns: The new GalViewEtable.
- */
-GalView *
-gal_view_etable_new (ETableSpecification *spec,
- const gchar *title)
-{
- return gal_view_etable_construct (g_object_new (GAL_VIEW_ETABLE_TYPE, NULL), spec, title);
-}
-
-/**
- * gal_view_etable_construct
- * @view: The view to construct.
- * @spec: The ETableSpecification that this view will be based upon.
- * @title: The name of the new view.
- *
- * constructs the GalViewEtable. To be used by subclasses and
- * language bindings.
- *
- * Returns: The GalViewEtable.
- */
-GalView *
-gal_view_etable_construct (GalViewEtable *view,
- ETableSpecification *spec,
- const gchar *title)
-{
- if (spec)
- g_object_ref(spec);
- view->spec = spec;
-
- if (view->state)
- g_object_unref(view->state);
- view->state = e_table_state_duplicate(spec->state);
-
- view->title = g_strdup(title);
-
- return GAL_VIEW(view);
-}
-
-void
-gal_view_etable_set_state (GalViewEtable *view, ETableState *state)
-{
- if (view->state)
- g_object_unref(view->state);
- view->state = e_table_state_duplicate(state);
-
- gal_view_changed(GAL_VIEW(view));
-}
-
-static void
-table_state_changed (ETable *table, GalViewEtable *view)
-{
- ETableState *state;
-
- state = e_table_get_state_object (table);
- g_object_unref (view->state);
- view->state = state;
-
- gal_view_changed(GAL_VIEW(view));
-}
-
-static void
-tree_state_changed (ETree *tree, GalViewEtable *view)
-{
- ETableState *state;
-
- state = e_tree_get_state_object (tree);
- g_object_unref (view->state);
- view->state = state;
-
- gal_view_changed(GAL_VIEW(view));
-}
-
-void
-gal_view_etable_attach_table (GalViewEtable *view, ETable *table)
-{
- gal_view_etable_detach (view);
-
- view->table = table;
-
- e_table_set_state_object(view->table, view->state);
- g_object_ref (view->table);
- view->table_state_changed_id =
- g_signal_connect(view->table, "state_change",
- G_CALLBACK (table_state_changed), view);
-}
-
-void
-gal_view_etable_attach_tree (GalViewEtable *view, ETree *tree)
-{
- gal_view_etable_detach (view);
-
- view->tree = tree;
-
- e_tree_set_state_object(view->tree, view->state);
- g_object_ref (view->tree);
- view->tree_state_changed_id =
- g_signal_connect(view->tree, "state_change",
- G_CALLBACK (tree_state_changed), view);
-}
-
-void
-gal_view_etable_detach (GalViewEtable *view)
-{
- if (view->table != NULL)
- detach_table (view);
- if (view->tree != NULL)
- detach_tree (view);
-}
diff --git a/widgets/menus/gal-view-etable.h b/widgets/menus/gal-view-etable.h
deleted file mode 100644
index 65879663fa..0000000000
--- a/widgets/menus/gal-view-etable.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-etable.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_VIEW_ETABLE_H_
-#define _GAL_VIEW_ETABLE_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/menus/gal-view.h>
-#include <gal/e-table/e-table-state.h>
-#include <gal/e-table/e-table-specification.h>
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-tree.h>
-
-G_BEGIN_DECLS
-
-#define GAL_VIEW_ETABLE_TYPE (gal_view_etable_get_type ())
-#define GAL_VIEW_ETABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_VIEW_ETABLE_TYPE, GalViewEtable))
-#define GAL_VIEW_ETABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_VIEW_ETABLE_TYPE, GalViewEtableClass))
-#define GAL_IS_VIEW_ETABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_VIEW_ETABLE_TYPE))
-#define GAL_IS_VIEW_ETABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_VIEW_ETABLE_TYPE))
-
-typedef struct {
- GalView base;
-
- ETableSpecification *spec;
- ETableState *state;
- char *title;
-
- ETable *table;
- guint table_state_changed_id;
-
- ETree *tree;
- guint tree_state_changed_id;
-} GalViewEtable;
-
-typedef struct {
- GalViewClass parent_class;
-} GalViewEtableClass;
-
-/* Standard functions */
-GType gal_view_etable_get_type (void);
-GalView *gal_view_etable_new (ETableSpecification *spec,
- const gchar *title);
-GalView *gal_view_etable_construct (GalViewEtable *view,
- ETableSpecification *spec,
- const gchar *title);
-void gal_view_etable_set_state (GalViewEtable *view,
- ETableState *state);
-void gal_view_etable_attach_table (GalViewEtable *view,
- ETable *table);
-void gal_view_etable_attach_tree (GalViewEtable *view,
- ETree *tree);
-void gal_view_etable_detach (GalViewEtable *view);
-
-
-G_END_DECLS
-
-#endif /* _GAL_VIEW_ETABLE_H_ */
diff --git a/widgets/menus/gal-view-factory-etable.c b/widgets/menus/gal-view-factory-etable.c
deleted file mode 100644
index c0d68fe006..0000000000
--- a/widgets/menus/gal-view-factory-etable.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-factory-etable.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-#include "gal-view-factory-etable.h"
-#include "gal-view-etable.h"
-
-#define PARENT_TYPE GAL_VIEW_FACTORY_TYPE
-
-static GalViewFactoryClass *gal_view_factory_etable_parent_class;
-
-static const char *
-gal_view_factory_etable_get_title (GalViewFactory *factory)
-{
- return _("Table");
-}
-
-static GalView *
-gal_view_factory_etable_new_view (GalViewFactory *factory,
- const char *name)
-{
- return gal_view_etable_new(GAL_VIEW_FACTORY_ETABLE(factory)->spec, name);
-}
-
-static const char *
-gal_view_factory_etable_get_type_code (GalViewFactory *factory)
-{
- return "etable";
-}
-
-static void
-gal_view_factory_etable_dispose (GObject *object)
-{
- GalViewFactoryEtable *factory = GAL_VIEW_FACTORY_ETABLE(object);
-
- if (factory->spec)
- g_object_unref(factory->spec);
- factory->spec = NULL;
-
- if (G_OBJECT_CLASS (gal_view_factory_etable_parent_class)->dispose)
- (* G_OBJECT_CLASS (gal_view_factory_etable_parent_class)->dispose) (object);
-}
-
-static void
-gal_view_factory_etable_class_init (GObjectClass *object_class)
-{
- GalViewFactoryClass *view_factory_class = GAL_VIEW_FACTORY_CLASS(object_class);
- gal_view_factory_etable_parent_class = g_type_class_ref (PARENT_TYPE);
-
- view_factory_class->get_title = gal_view_factory_etable_get_title;
- view_factory_class->new_view = gal_view_factory_etable_new_view;
- view_factory_class->get_type_code = gal_view_factory_etable_get_type_code;
-
- object_class->dispose = gal_view_factory_etable_dispose;
-}
-
-static void
-gal_view_factory_etable_init (GalViewFactoryEtable *factory)
-{
- factory->spec = NULL;
-}
-
-/**
- * gal_view_etable_new
- * @spec: The spec to create GalViewEtables based upon.
- *
- * A new GalViewFactory for creating ETable views. Create one of
- * these and pass it to GalViewCollection for use.
- *
- * Returns: The new GalViewFactoryEtable.
- */
-GalViewFactory *
-gal_view_factory_etable_new (ETableSpecification *spec)
-{
- return gal_view_factory_etable_construct (g_object_new (GAL_VIEW_FACTORY_ETABLE_TYPE, NULL), spec);
-}
-
-/**
- * gal_view_etable_construct
- * @factory: The factory to construct
- * @spec: The spec to create GalViewEtables based upon.
- *
- * constructs the GalViewFactoryEtable. To be used by subclasses and
- * language bindings.
- *
- * Returns: The GalViewFactoryEtable.
- */
-GalViewFactory *
-gal_view_factory_etable_construct (GalViewFactoryEtable *factory,
- ETableSpecification *spec)
-{
- if (spec)
- g_object_ref(spec);
- factory->spec = spec;
- return GAL_VIEW_FACTORY(factory);
-}
-
-E_MAKE_TYPE(gal_view_factory_etable, "GalViewFactoryEtable", GalViewFactoryEtable, gal_view_factory_etable_class_init, gal_view_factory_etable_init, PARENT_TYPE)
diff --git a/widgets/menus/gal-view-factory-etable.h b/widgets/menus/gal-view-factory-etable.h
deleted file mode 100644
index 542aa255fc..0000000000
--- a/widgets/menus/gal-view-factory-etable.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-factory-etable.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_VIEW_FACTORY_ETABLE_H_
-#define _GAL_VIEW_FACTORY_ETABLE_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/menus/gal-view-factory.h>
-#include <gal/e-table/e-table-specification.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_VIEW_FACTORY_ETABLE_TYPE (gal_view_factory_etable_get_type ())
-#define GAL_VIEW_FACTORY_ETABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_VIEW_FACTORY_ETABLE_TYPE, GalViewFactoryEtable))
-#define GAL_VIEW_FACTORY_ETABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_VIEW_FACTORY_ETABLE_TYPE, GalViewFactoryEtableClass))
-#define GAL_IS_VIEW_FACTORY_ETABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_VIEW_FACTORY_ETABLE_TYPE))
-#define GAL_IS_VIEW_FACTORY_ETABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_VIEW_FACTORY_ETABLE_TYPE))
-#define GAL_VIEW_FACTORY_ETABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GAL_VIEW_FACTORY_ETABLE_TYPE, GalViewFactoryEtableClass))
-
-typedef struct {
- GalViewFactory base;
-
- ETableSpecification *spec;
-} GalViewFactoryEtable;
-
-typedef struct {
- GalViewFactoryClass parent_class;
-} GalViewFactoryEtableClass;
-
-/* Standard functions */
-GType gal_view_factory_etable_get_type (void);
-GalViewFactory *gal_view_factory_etable_new (ETableSpecification *spec);
-GalViewFactory *gal_view_factory_etable_construct (GalViewFactoryEtable *factory,
- ETableSpecification *spec);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _GAL_VIEW_FACTORY_ETABLE_H_ */
diff --git a/widgets/menus/gal-view-factory.c b/widgets/menus/gal-view-factory.c
deleted file mode 100644
index 5bc2c9f11d..0000000000
--- a/widgets/menus/gal-view-factory.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-factory.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "gal-view-factory.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-#define d(x)
-
-d(static gint depth = 0;)
-
-static GObjectClass *gal_view_factory_parent_class;
-
-/**
- * gal_view_factory_get_title:
- * @factory: The factory to query.
- *
- * Returns: The title of the factory.
- */
-const char *
-gal_view_factory_get_title (GalViewFactory *factory)
-{
- g_return_val_if_fail (factory != NULL, 0);
- g_return_val_if_fail (GAL_IS_VIEW_FACTORY (factory), 0);
-
- if (GAL_VIEW_FACTORY_GET_CLASS (factory)->get_title)
- return GAL_VIEW_FACTORY_GET_CLASS (factory)->get_title (factory);
- else
- return NULL;
-}
-
-/**
- * gal_view_factory_new_view:
- * @factory: The factory to use
- * @name: the name for the view.
- *
- * Returns: The new view
- */
-GalView *
-gal_view_factory_new_view (GalViewFactory *factory,
- const char *name)
-{
- g_return_val_if_fail (factory != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW_FACTORY (factory), NULL);
-
- if (GAL_VIEW_FACTORY_GET_CLASS (factory)->new_view)
- return GAL_VIEW_FACTORY_GET_CLASS (factory)->new_view (factory, name);
- else
- return NULL;
-}
-
-/**
- * gal_view_factory_get_type_code:
- * @factory: The factory to use
- *
- * Returns: The type code
- */
-const char *
-gal_view_factory_get_type_code (GalViewFactory *factory)
-{
- g_return_val_if_fail (factory != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW_FACTORY (factory), NULL);
-
- if (GAL_VIEW_FACTORY_GET_CLASS (factory)->get_type_code)
- return GAL_VIEW_FACTORY_GET_CLASS (factory)->get_type_code (factory);
- else
- return NULL;
-}
-
-static void
-gal_view_factory_class_init (GObjectClass *object_class)
-{
- GalViewFactoryClass *klass = GAL_VIEW_FACTORY_CLASS(object_class);
- gal_view_factory_parent_class = g_type_class_ref (PARENT_TYPE);
-
- klass->get_title = NULL;
- klass->new_view = NULL;
-}
-
-static void
-gal_view_factory_init (GalViewFactory *factory)
-{
-}
-
-E_MAKE_TYPE(gal_view_factory, "GalViewFactory", GalViewFactory, gal_view_factory_class_init, gal_view_factory_init, PARENT_TYPE)
diff --git a/widgets/menus/gal-view-factory.h b/widgets/menus/gal-view-factory.h
deleted file mode 100644
index 5fff83e048..0000000000
--- a/widgets/menus/gal-view-factory.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-factory.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_VIEW_FACTORY_H_
-#define _GAL_VIEW_FACTORY_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/menus/gal-view.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_VIEW_FACTORY_TYPE (gal_view_factory_get_type ())
-#define GAL_VIEW_FACTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_VIEW_FACTORY_TYPE, GalViewFactory))
-#define GAL_VIEW_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_VIEW_FACTORY_TYPE, GalViewFactoryClass))
-#define GAL_IS_VIEW_FACTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_VIEW_FACTORY_TYPE))
-#define GAL_IS_VIEW_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_VIEW_FACTORY_TYPE))
-#define GAL_VIEW_FACTORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GAL_VIEW_FACTORY_TYPE, GalViewFactoryClass))
-
-typedef struct {
- GObject base;
-} GalViewFactory;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Virtual methods
- */
- const char *(*get_title) (GalViewFactory *factory);
- const char *(*get_type_code) (GalViewFactory *factory);
- GalView *(*new_view) (GalViewFactory *factory,
- const char *name);
-} GalViewFactoryClass;
-
-/* Standard functions */
-GType gal_view_factory_get_type (void);
-
-/* Query functions */
-/* Returns already translated title. */
-const char *gal_view_factory_get_title (GalViewFactory *factory);
-
-/* Returns the code for use in identifying this type of object in the
- * view list. This identifier should identify this as being the
- * unique factory for xml files which were written out with this
- * identifier. Thus each factory should have a unique type code. */
-const char *gal_view_factory_get_type_code (GalViewFactory *factory);
-
-/* Create a new view */
-GalView *gal_view_factory_new_view (GalViewFactory *factory,
- const char *name);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _GAL_VIEW_FACTORY_H_ */
diff --git a/widgets/menus/gal-view-instance-save-as-dialog.c b/widgets/menus/gal-view-instance-save-as-dialog.c
deleted file mode 100644
index b65d4acba2..0000000000
--- a/widgets/menus/gal-view-instance-save-as-dialog.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-define-views-dialog.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "gal-view-instance-save-as-dialog.h"
-
-#include "gal-define-views-model.h"
-#include "gal-view-new-dialog.h"
-#include <gal/e-table/e-table-scrolled.h>
-#include <gal/util/e-i18n.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtktogglebutton.h>
-#include <gtk/gtkbox.h>
-#include <gtk/gtkstock.h>
-
-static GtkDialogClass *parent_class = NULL;
-#define PARENT_TYPE GTK_TYPE_DIALOG
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_INSTANCE,
-};
-
-typedef struct {
- char *title;
- ETableModel *model;
- GalViewInstanceSaveAsDialog *names;
-} GalViewInstanceSaveAsDialogChild;
-
-
-/* Static functions */
-static void
-gal_view_instance_save_as_dialog_set_instance(GalViewInstanceSaveAsDialog *dialog,
- GalViewInstance *instance)
-{
- dialog->instance = instance;
- if (dialog->model) {
- GtkWidget *table;
- g_object_set(dialog->model,
- "collection", instance ? instance->collection : NULL,
- NULL);
- table = glade_xml_get_widget(dialog->gui, "custom-replace");
- if (table) {
- ETable *etable;
- etable = e_table_scrolled_get_table (E_TABLE_SCROLLED (table));
- e_selection_model_select_single_row (e_table_get_selection_model (etable), 0);
- e_selection_model_change_cursor (e_table_get_selection_model (etable), 0, 0);
- }
- }
-}
-
-static void
-gvisad_setup_radio_buttons (GalViewInstanceSaveAsDialog *dialog)
-{
- GtkWidget *radio_replace = glade_xml_get_widget (dialog->gui, "radiobutton-replace");
- GtkWidget *radio_create = glade_xml_get_widget (dialog->gui, "radiobutton-create" );
- GtkWidget *widget;
-
- widget = glade_xml_get_widget (dialog->gui, "custom-replace");
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_replace))) {
- gtk_widget_set_sensitive (widget, TRUE);
- dialog->toggle = GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TOGGLE_REPLACE;
- } else {
- gtk_widget_set_sensitive (widget, FALSE);
- }
-
- widget = glade_xml_get_widget (dialog->gui, "entry-create");
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_create))) {
- gtk_widget_set_sensitive (widget, TRUE);
- dialog->toggle = GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TOGGLE_CREATE;
- } else {
- gtk_widget_set_sensitive (widget, FALSE);
- }
-}
-
-static void
-gvisad_radio_toggled (GtkWidget *widget, GalViewInstanceSaveAsDialog *dialog)
-{
- gvisad_setup_radio_buttons (dialog);
-}
-
-static void
-gvisad_connect_signal(GalViewInstanceSaveAsDialog *dialog, char *widget_name, char *signal, GCallback handler)
-{
- GtkWidget *widget;
-
- widget = glade_xml_get_widget(dialog->gui, widget_name);
-
- if (widget)
- g_signal_connect (G_OBJECT (widget), signal, handler, dialog);
-}
-
-/* Method override implementations */
-static void
-gal_view_instance_save_as_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GalViewInstanceSaveAsDialog *dialog;
-
- dialog = GAL_VIEW_INSTANCE_SAVE_AS_DIALOG (object);
-
- switch (prop_id){
- case PROP_INSTANCE:
- if (g_value_get_object (value))
- gal_view_instance_save_as_dialog_set_instance(dialog, GAL_VIEW_INSTANCE(g_value_get_object (value)));
- else
- gal_view_instance_save_as_dialog_set_instance(dialog, NULL);
- break;
-
- default:
- return;
- }
-}
-
-static void
-gal_view_instance_save_as_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GalViewInstanceSaveAsDialog *dialog;
-
- dialog = GAL_VIEW_INSTANCE_SAVE_AS_DIALOG (object);
-
- switch (prop_id) {
- case PROP_INSTANCE:
- g_value_set_object (value, dialog->instance);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gal_view_instance_save_as_dialog_dispose (GObject *object)
-{
- GalViewInstanceSaveAsDialog *gal_view_instance_save_as_dialog = GAL_VIEW_INSTANCE_SAVE_AS_DIALOG(object);
-
- if (gal_view_instance_save_as_dialog->gui)
- g_object_unref(gal_view_instance_save_as_dialog->gui);
- gal_view_instance_save_as_dialog->gui = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-/* Init functions */
-static void
-gal_view_instance_save_as_dialog_class_init (GalViewInstanceSaveAsDialogClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass*) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->set_property = gal_view_instance_save_as_dialog_set_property;
- object_class->get_property = gal_view_instance_save_as_dialog_get_property;
- object_class->dispose = gal_view_instance_save_as_dialog_dispose;
-
- g_object_class_install_property (object_class, PROP_INSTANCE,
- g_param_spec_object ("instance",
- _("Instance"),
- /*_( */"XXX blurb" /*)*/,
- GAL_VIEW_INSTANCE_TYPE,
- G_PARAM_READWRITE));
-}
-
-static void
-gal_view_instance_save_as_dialog_init (GalViewInstanceSaveAsDialog *dialog)
-{
- GladeXML *gui;
- GtkWidget *widget;
- GtkWidget *table;
-
- dialog->instance = NULL;
-
- gui = glade_xml_new_with_domain (GAL_GLADEDIR "/gal-view-instance-save-as-dialog.glade", NULL, E_I18N_DOMAIN);
- dialog->gui = gui;
-
- widget = glade_xml_get_widget(gui, "vbox-top");
- if (!widget) {
- return;
- }
- gtk_widget_ref(widget);
- gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), widget, TRUE, TRUE, 0);
- gtk_widget_unref(widget);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
-
- gvisad_connect_signal(dialog, "radiobutton-replace", "toggled", G_CALLBACK(gvisad_radio_toggled));
- gvisad_connect_signal(dialog, "radiobutton-create", "toggled", G_CALLBACK(gvisad_radio_toggled));
-
- dialog->model = NULL;
- table = glade_xml_get_widget(dialog->gui, "custom-replace");
- if (table) {
- dialog->model = g_object_get_data(G_OBJECT (table), "GalViewInstanceSaveAsDialog::model");
-
- gal_view_instance_save_as_dialog_set_instance (dialog, dialog->instance);
- gtk_widget_show_all (table);
- }
-
- gvisad_setup_radio_buttons (dialog);
- gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, TRUE, FALSE);
- gtk_window_set_title (GTK_WINDOW (dialog), _("Save Current View"));
-}
-
-
-/* For use from libglade. */
-/* ETable creation */
-#define SPEC "<ETableSpecification no-headers=\"true\" cursor-mode=\"line\" draw-grid=\"false\" selection-mode=\"single\" gettext-domain=\"" E_I18N_DOMAIN "\">" \
- "<ETableColumn model_col= \"0\" _title=\"Name\" expansion=\"1.0\" minimum_width=\"18\" resizable=\"true\" cell=\"string\" compare=\"string\"/>" \
- "<ETableState> <column source=\"0\"/> <grouping> </grouping> </ETableState>" \
- "</ETableSpecification>"
-
-GtkWidget *gal_view_instance_save_as_dialog_create_etable(char *name, char *string1, char *string2, int int1, int int2);
-
-GtkWidget *
-gal_view_instance_save_as_dialog_create_etable(char *name, char *string1, char *string2, int int1, int int2)
-{
- GtkWidget *table;
- ETableModel *model;
- model = gal_define_views_model_new ();
- table = e_table_scrolled_new(model, NULL, SPEC, NULL);
- g_object_set_data(G_OBJECT (table), "GalViewInstanceSaveAsDialog::model", model);
-
- return table;
-}
-
-/* External methods */
-/**
- * gal_view_instance_save_as_dialog_new
- *
- * Returns a new dialog for defining views.
- *
- * Returns: The GalViewInstanceSaveAsDialog.
- */
-GtkWidget*
-gal_view_instance_save_as_dialog_new (GalViewInstance *instance)
-{
- GtkWidget *widget = g_object_new (GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TYPE, NULL);
- gal_view_instance_save_as_dialog_set_instance(GAL_VIEW_INSTANCE_SAVE_AS_DIALOG (widget), instance);
- return widget;
-}
-
-E_MAKE_TYPE(gal_view_instance_save_as_dialog, "GalViewInstanceSaveAsDialog",
- GalViewInstanceSaveAsDialog,
- gal_view_instance_save_as_dialog_class_init,
- gal_view_instance_save_as_dialog_init, PARENT_TYPE)
-
-void
-gal_view_instance_save_as_dialog_save (GalViewInstanceSaveAsDialog *dialog)
-{
- GalView *view = gal_view_instance_get_current_view (dialog->instance);
- GtkWidget *widget;
- const char *title;
- int n;
- const char *id = NULL;
-
- view = gal_view_clone (view);
- switch (dialog->toggle) {
- case GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TOGGLE_REPLACE:
- widget = glade_xml_get_widget(dialog->gui, "custom-replace");
- if (widget && E_IS_TABLE_SCROLLED (widget)) {
- n = e_table_get_cursor_row (e_table_scrolled_get_table (E_TABLE_SCROLLED (widget)));
- id = gal_view_collection_set_nth_view (dialog->instance->collection, n, view);
- gal_view_collection_save (dialog->instance->collection);
- }
- break;
- case GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TOGGLE_CREATE:
- widget = glade_xml_get_widget(dialog->gui, "entry-create");
- if (widget && GTK_IS_ENTRY (widget)) {
- title = gtk_entry_get_text (GTK_ENTRY (widget));
- id = gal_view_collection_append_with_title (dialog->instance->collection, title, view);
- gal_view_collection_save (dialog->instance->collection);
- }
- break;
- }
-
- if (id) {
- gal_view_instance_set_current_view_id (dialog->instance, id);
- }
-}
diff --git a/widgets/menus/gal-view-instance-save-as-dialog.glade b/widgets/menus/gal-view-instance-save-as-dialog.glade
deleted file mode 100644
index 54776827a0..0000000000
--- a/widgets/menus/gal-view-instance-save-as-dialog.glade
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-<requires lib="gnome"/>
-
-<widget class="GtkDialog" id="dialog1">
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button3">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox-top">
- <property name="border_width">18</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-create">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Create new view</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Name:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">entry-create</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="entry-create">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char" translatable="yes">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-replace">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Replace existing view</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-create</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="Custom" id="custom-replace">
- <property name="visible">True</property>
- <property name="creation_function">gal_view_instance_save_as_dialog_create_etable</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 01 Feb 2002 20:18:32 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/widgets/menus/gal-view-instance-save-as-dialog.h b/widgets/menus/gal-view-instance-save-as-dialog.h
deleted file mode 100644
index 53d99d0789..0000000000
--- a/widgets/menus/gal-view-instance-save-as-dialog.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-define-views-dialog.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_H__
-#define __GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_H__
-
-#include <gtk/gtkdialog.h>
-#include <glade/glade.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/menus/gal-view-collection.h>
-#include <gal/menus/gal-view-instance.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* GalViewInstanceSaveAsDialog - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name type read/write description
- * --------------------------------------------------------------------------------
- */
-
-#define GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TYPE (gal_view_instance_save_as_dialog_get_type ())
-#define GAL_VIEW_INSTANCE_SAVE_AS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TYPE, GalViewInstanceSaveAsDialog))
-#define GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TYPE, GalViewInstanceSaveAsDialogClass))
-#define GAL_IS_VIEW_INSTANCE_SAVE_AS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TYPE))
-#define GAL_IS_VIEW_INSTANCE_SAVE_AS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TYPE))
-
-typedef struct _GalViewInstanceSaveAsDialog GalViewInstanceSaveAsDialog;
-typedef struct _GalViewInstanceSaveAsDialogClass GalViewInstanceSaveAsDialogClass;
-
-typedef enum {
- GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TOGGLE_REPLACE,
- GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_TOGGLE_CREATE
-} GalViewInstanceSaveAsDialogToggle;
-
-struct _GalViewInstanceSaveAsDialog
-{
- GtkDialog parent;
-
- /* item specific fields */
- GladeXML *gui;
- ETableModel *model;
-
- GalViewInstance *instance;
- GalViewCollection *collection;
-
- GalViewInstanceSaveAsDialogToggle toggle;
-};
-
-struct _GalViewInstanceSaveAsDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GtkWidget *gal_view_instance_save_as_dialog_new (GalViewInstance *instance);
-GType gal_view_instance_save_as_dialog_get_type (void);
-
-void gal_view_instance_save_as_dialog_save (GalViewInstanceSaveAsDialog *dialog);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GAL_VIEW_INSTANCE_SAVE_AS_DIALOG_H__ */
diff --git a/widgets/menus/gal-view-instance.c b/widgets/menus/gal-view-instance.c
deleted file mode 100644
index 6ce8a2ab86..0000000000
--- a/widgets/menus/gal-view-instance.c
+++ /dev/null
@@ -1,599 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-instance.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <util/e-i18n.h>
-#include <ctype.h>
-#include <string.h>
-#include <errno.h>
-#include <libxml/parser.h>
-#include <libgnome/gnome-util.h>
-#include <gal/util/e-util.h>
-#include <gal/util/e-xml-utils.h>
-#include <gal/widgets/e-unicode.h>
-#include "gal-view-instance.h"
-#include "gal-view-instance-save-as-dialog.h"
-#include "gal-define-views-dialog.h"
-#include <sys/stat.h>
-#include <unistd.h>
-#include <gtk/gtkcheckmenuitem.h>
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-static GObjectClass *gal_view_instance_parent_class;
-
-static const EPopupMenu separator = E_POPUP_SEPARATOR;
-static const EPopupMenu terminator = E_POPUP_TERMINATOR;
-
-
-#define d(x)
-
-enum {
- DISPLAY_VIEW,
- CHANGED,
- LAST_SIGNAL
-};
-
-static guint gal_view_instance_signals [LAST_SIGNAL] = { 0, };
-
-static void
-gal_view_instance_changed (GalViewInstance *instance)
-{
- g_return_if_fail (instance != NULL);
- g_return_if_fail (GAL_IS_VIEW_INSTANCE (instance));
-
- g_signal_emit (instance,
- gal_view_instance_signals [CHANGED], 0);
-}
-
-static void
-gal_view_instance_display_view (GalViewInstance *instance, GalView *view)
-{
- g_return_if_fail (instance != NULL);
- g_return_if_fail (GAL_IS_VIEW_INSTANCE (instance));
-
- g_signal_emit (instance,
- gal_view_instance_signals [DISPLAY_VIEW], 0,
- view);
-}
-
-static void
-save_current_view (GalViewInstance *instance)
-{
- xmlDoc *doc;
- xmlNode *root;
-
- doc = xmlNewDoc("1.0");
- root = xmlNewNode (NULL, "GalViewCurrentView");
- xmlDocSetRootElement(doc, root);
-
- if (instance->current_id)
- e_xml_set_string_prop_by_name (root, "current_view", instance->current_id);
- if (instance->current_type)
- e_xml_set_string_prop_by_name (root, "current_view_type", instance->current_type);
-
- if (e_xml_save_file (instance->current_view_filename, doc) == -1)
- g_warning ("Unable to save view to %s - %s", instance->current_view_filename, g_strerror(errno));
- xmlFreeDoc(doc);
-}
-
-static void
-view_changed (GalView *view, GalViewInstance *instance)
-{
- if (instance->current_id != NULL) {
- g_free (instance->current_id);
- instance->current_id = NULL;
- save_current_view (instance);
- gal_view_instance_changed(instance);
- }
-
- gal_view_save (view, instance->custom_filename);
-}
-
-static void
-disconnect_view (GalViewInstance *instance)
-{
- if (instance->current_view) {
- if (instance->view_changed_id) {
- g_signal_handler_disconnect (instance->current_view,
- instance->view_changed_id);
- }
-
- g_object_unref (instance->current_view);
- }
- g_free (instance->current_type);
- g_free (instance->current_title);
- instance->current_title = NULL;
- instance->current_type = NULL;
- instance->view_changed_id = 0;
- instance->current_view = NULL;
-}
-
-static void
-connect_view (GalViewInstance *instance, GalView *view)
-{
- if (instance->current_view)
- disconnect_view (instance);
- instance->current_view = view;
-
- instance->current_title = g_strdup (gal_view_get_title(view));
- instance->current_type = g_strdup (gal_view_get_type_code(view));
- instance->view_changed_id =
- g_signal_connect(instance->current_view, "changed",
- G_CALLBACK (view_changed), instance);
-
- gal_view_instance_display_view (instance, instance->current_view);
-}
-
-static void
-gal_view_instance_dispose (GObject *object)
-{
- GalViewInstance *instance = GAL_VIEW_INSTANCE(object);
-
- if (instance->collection) {
- if (instance->collection_changed_id) {
- g_signal_handler_disconnect (instance->collection,
- instance->collection_changed_id);
- }
- g_object_unref (instance->collection);
- }
-
- g_free (instance->instance_id);
- g_free (instance->custom_filename);
- g_free (instance->current_view_filename);
-
- g_free (instance->current_id);
- disconnect_view (instance);
-
- g_free (instance->default_view);
-
- if (gal_view_instance_parent_class->dispose)
- (*gal_view_instance_parent_class->dispose)(object);
-}
-
-static void
-gal_view_instance_class_init (GObjectClass *object_class)
-{
- GalViewInstanceClass *klass = GAL_VIEW_INSTANCE_CLASS(object_class);
- gal_view_instance_parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = gal_view_instance_dispose;
-
- gal_view_instance_signals [DISPLAY_VIEW] =
- g_signal_new ("display_view",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalViewInstanceClass, display_view),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, GAL_VIEW_TYPE);
-
- gal_view_instance_signals [CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalViewInstanceClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- klass->display_view = NULL;
- klass->changed = NULL;
-}
-
-static void
-gal_view_instance_init (GalViewInstance *instance)
-{
- instance->collection = NULL;
-
- instance->instance_id = NULL;
- instance->custom_filename = NULL;
- instance->current_view_filename = NULL;
-
- instance->current_title = NULL;
- instance->current_type = NULL;
- instance->current_id = NULL;
- instance->current_view = NULL;
-
- instance->view_changed_id = 0;
- instance->collection_changed_id = 0;
-
- instance->loaded = FALSE;
- instance->default_view = NULL;
-}
-
-E_MAKE_TYPE(gal_view_instance, "GalViewInstance", GalViewInstance, gal_view_instance_class_init, gal_view_instance_init, PARENT_TYPE)
-
-static void
-collection_changed (GalView *view, GalViewInstance *instance)
-{
- if (instance->current_id) {
- char *view_id = instance->current_id;
- instance->current_id = NULL;
- gal_view_instance_set_current_view_id (instance, view_id);
- g_free (view_id);
- }
-}
-
-static void
-load_current_view (GalViewInstance *instance)
-{
- xmlDoc *doc = NULL;
- xmlNode *root;
- GalView *view = NULL;
- struct stat st;
-
- if (stat (instance->current_view_filename, &st) != -1 && S_ISREG (st.st_mode))
- doc = xmlParseFile(instance->current_view_filename);
-
- if (doc == NULL) {
- instance->current_id = g_strdup (gal_view_instance_get_default_view (instance));
-
- if (instance->current_id) {
- int index = gal_view_collection_get_view_index_by_id (instance->collection,
- instance->current_id);
-
- if (index != -1) {
- view = gal_view_collection_get_view (instance->collection,
- index);
- view = gal_view_clone(view);
- connect_view (instance, view);
- }
- }
- return;
- }
-
- root = xmlDocGetRootElement(doc);
- instance->current_id = e_xml_get_string_prop_by_name_with_default (root, "current_view", NULL);
-
- if (instance->current_id != NULL) {
- int index = gal_view_collection_get_view_index_by_id (instance->collection,
- instance->current_id);
-
- if (index != -1) {
- view = gal_view_collection_get_view (instance->collection,
- index);
- view = gal_view_clone(view);
- }
- }
- if (view == NULL) {
- char *type;
- type = e_xml_get_string_prop_by_name_with_default (root, "current_view_type", NULL);
- view = gal_view_collection_load_view_from_file (instance->collection,
- type,
- instance->custom_filename);
- g_free (type);
- }
-
- connect_view (instance, view);
-
- xmlFreeDoc(doc);
-}
-
-/**
- * gal_view_instance_new:
- * @collection: This %GalViewCollection should be loaded before being passed to this function.
- * @instance_id: Which instance of this type of object is this (for most of evo, this is the folder id.)
- *
- * Create a new %GalViewInstance.
- *
- * Return value: The new %GalViewInstance.
- **/
-GalViewInstance *
-gal_view_instance_new (GalViewCollection *collection, const char *instance_id)
-{
- GalViewInstance *instance = g_object_new (GAL_VIEW_INSTANCE_TYPE, NULL);
- if (gal_view_instance_construct (instance, collection, instance_id))
- return instance;
- else {
- g_object_unref (instance);
- return NULL;
- }
-}
-
-GalViewInstance *
-gal_view_instance_construct (GalViewInstance *instance, GalViewCollection *collection, const char *instance_id)
-{
- char *filename;
- char *safe_id;
-
- g_return_val_if_fail (gal_view_collection_loaded (collection), NULL);
-
- instance->collection = collection;
- if (collection)
- g_object_ref (collection);
- instance->collection_changed_id =
- g_signal_connect (collection, "changed",
- G_CALLBACK (collection_changed), instance);
-
- if (instance_id)
- instance->instance_id = g_strdup (instance_id);
- else
- instance->instance_id = g_strdup ("");
-
- safe_id = g_strdup (instance->instance_id);
- e_filename_make_safe (safe_id);
-
- filename = g_strdup_printf ("custom_view-%s.xml", safe_id);
- instance->custom_filename = g_concat_dir_and_file (instance->collection->local_dir, filename);
- g_free (filename);
-
- filename = g_strdup_printf ("current_view-%s.xml", safe_id);
- instance->current_view_filename = g_concat_dir_and_file (instance->collection->local_dir, filename);
- g_free (filename);
-
- g_free (safe_id);
-
- return instance;
-}
-
-/* Manipulate the current view. */
-char *
-gal_view_instance_get_current_view_id (GalViewInstance *instance)
-{
- if (instance->current_id && gal_view_collection_get_view_index_by_id (instance->collection, instance->current_id) != -1)
- return g_strdup (instance->current_id);
- else
- return NULL;
-}
-
-void
-gal_view_instance_set_current_view_id (GalViewInstance *instance, const char *view_id)
-{
- GalView *view;
- int index;
-
- g_return_if_fail (instance != NULL);
- g_return_if_fail (GAL_IS_VIEW_INSTANCE (instance));
-
- d(g_print("%s: view_id set to %s\n", G_GNUC_FUNCTION, view_id));
-
- if (instance->current_id && !strcmp (instance->current_id, view_id))
- return;
-
- g_free (instance->current_id);
- instance->current_id = g_strdup (view_id);
-
- index = gal_view_collection_get_view_index_by_id (instance->collection, view_id);
- if (index != -1) {
- view = gal_view_collection_get_view (instance->collection, index);
- connect_view (instance, gal_view_clone (view));
- }
-
- save_current_view (instance);
- gal_view_instance_changed(instance);
-}
-
-GalView *
-gal_view_instance_get_current_view (GalViewInstance *instance)
-{
- return instance->current_view;
-}
-
-void
-gal_view_instance_set_custom_view (GalViewInstance *instance, GalView *view)
-{
- g_free (instance->current_id);
- instance->current_id = NULL;
-
- view = gal_view_clone (view);
- connect_view (instance, view);
- gal_view_save (view, instance->custom_filename);
- save_current_view (instance);
- gal_view_instance_changed(instance);
-}
-
-static void
-dialog_response(GtkWidget *dialog, int id, GalViewInstance *instance)
-{
- if (id == GTK_RESPONSE_OK) {
- gal_view_instance_save_as_dialog_save (GAL_VIEW_INSTANCE_SAVE_AS_DIALOG (dialog));
- }
- gtk_widget_destroy (dialog);
-}
-
-void
-gal_view_instance_save_as (GalViewInstance *instance)
-{
- GtkWidget *dialog = gal_view_instance_save_as_dialog_new(instance);
- g_signal_connect(dialog, "response",
- G_CALLBACK(dialog_response), instance);
- gtk_widget_show(dialog);
-}
-
-/* This is idempotent. Once it's been called once, the rest of the calls are ignored. */
-void
-gal_view_instance_load (GalViewInstance *instance)
-{
- if (!instance->loaded) {
- load_current_view (instance);
- instance->loaded = TRUE;
- }
-}
-
-/* These only mean anything before gal_view_instance_load is called the first time. */
-const char *
-gal_view_instance_get_default_view (GalViewInstance *instance)
-{
- if (instance->default_view)
- return instance->default_view;
- else
- return gal_view_collection_get_default_view (instance->collection);
-}
-
-void
-gal_view_instance_set_default_view (GalViewInstance *instance, const char *id)
-{
- g_free (instance->default_view);
- instance->default_view = g_strdup (id);
-}
-
-gboolean
-gal_view_instance_exists (GalViewInstance *instance)
-{
- struct stat st;
-
- if (instance->current_view_filename && stat (instance->current_view_filename, &st) == 0 && st.st_size > 0 && S_ISREG (st.st_mode))
- return TRUE;
- else
- return FALSE;
-
-}
-
-typedef struct {
- GalViewInstance *instance;
- char *id;
-} ListenerClosure;
-
-static void
-view_item_cb (GtkWidget *widget,
- gpointer user_data)
-{
- ListenerClosure *closure = user_data;
-
- if (GTK_CHECK_MENU_ITEM (widget)->active) {
- gal_view_instance_set_current_view_id (closure->instance, closure->id);
- }
-}
-
-static void
-add_popup_radio_item (EPopupMenu *menu_item,
- gchar *title,
- GtkSignalFunc fn,
- gpointer closure,
- gboolean value)
-{
- EPopupMenu menu_item_struct =
- E_POPUP_RADIO_ITEM_CC (title,
- fn,
- closure,
- 0,
- 0);
- menu_item_struct.is_active = value;
-
- e_popup_menu_copy_1 (menu_item, &menu_item_struct);
-}
-
-static void
-add_popup_menu_item (EPopupMenu *menu_item,
- gchar *title,
- GCallback fn,
- gpointer closure)
-{
- EPopupMenu menu_item_struct =
- E_POPUP_ITEM_CC (title,
- fn,
- closure,
- 0);
-
- e_popup_menu_copy_1 (menu_item, &menu_item_struct);
-}
-
-static void
-define_views_dialog_response(GtkWidget *dialog, int id, GalViewInstance *instance)
-{
- if (id == GTK_RESPONSE_OK) {
- gal_view_collection_save(instance->collection);
- }
- gtk_widget_destroy (dialog);
-}
-
-static void
-define_views_cb(GtkWidget *widget,
- GalViewInstance *instance)
-{
- GtkWidget *dialog = gal_define_views_dialog_new(instance->collection);
- g_signal_connect(dialog, "response",
- G_CALLBACK(define_views_dialog_response), instance);
- gtk_widget_show(dialog);
-}
-
-static void
-save_current_view_cb(GtkWidget *widget,
- GalViewInstance *instance)
-{
- gal_view_instance_save_as (instance);
-}
-
-EPopupMenu *
-gal_view_instance_get_popup_menu (GalViewInstance *instance)
-{
- EPopupMenu *ret_val;
- int length;
- int i;
- gboolean found = FALSE;
- char *id;
-
- length = gal_view_collection_get_count(instance->collection);
- id = gal_view_instance_get_current_view_id (instance);
-
- ret_val = g_new (EPopupMenu, length + 6);
-
- for (i = 0; i < length; i++) {
- gboolean value = FALSE;
- GalViewCollectionItem *item = gal_view_collection_get_view_item(instance->collection, i);
- ListenerClosure *closure;
-
- closure = g_new (ListenerClosure, 1);
- closure->instance = instance;
- closure->id = item->id;
- g_object_ref (closure->instance);
-
- if (!found && id && !strcmp (id, item->id)) {
- found = TRUE;
- value = TRUE;
- }
-
- add_popup_radio_item (ret_val + i, item->title, G_CALLBACK (view_item_cb), closure, value);
- }
-
- if (!found) {
- e_popup_menu_copy_1 (ret_val + i++, &separator);
-
- add_popup_radio_item (ret_val + i++, N_("Custom View"), NULL, NULL, TRUE);
- add_popup_menu_item (ret_val + i++, N_("Save Custom View"), G_CALLBACK (save_current_view_cb), instance);
- }
-
- e_popup_menu_copy_1 (ret_val + i++, &separator);
- add_popup_menu_item (ret_val + i++, N_("Define Views..."), G_CALLBACK (define_views_cb), instance);
- e_popup_menu_copy_1 (ret_val + i++, &terminator);
-
- if (id)
- g_free (id);
-
- return ret_val;
-}
-
-void
-gal_view_instance_free_popup_menu (GalViewInstance *instance, EPopupMenu *menu)
-{
- int i;
- /* This depends on the first non-custom closure to be a separator or a terminator. */
- for (i = 0; menu[i].name && *(menu[i].name); i++) {
- g_object_unref (((ListenerClosure *)(menu[i].closure))->instance);
- g_free (menu[i].closure);
- }
-
- e_popup_menu_free (menu);
-}
diff --git a/widgets/menus/gal-view-instance.h b/widgets/menus/gal-view-instance.h
deleted file mode 100644
index 05723a2ea6..0000000000
--- a/widgets/menus/gal-view-instance.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-instance.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_VIEW_INSTANCE_H_
-#define _GAL_VIEW_INSTANCE_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/menus/gal-view-collection.h>
-#include <gal/widgets/e-popup-menu.h>
-
-G_BEGIN_DECLS
-
-#define GAL_VIEW_INSTANCE_TYPE (gal_view_instance_get_type ())
-#define GAL_VIEW_INSTANCE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_VIEW_INSTANCE_TYPE, GalViewInstance))
-#define GAL_VIEW_INSTANCE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_VIEW_INSTANCE_TYPE, GalViewInstanceClass))
-#define GAL_IS_VIEW_INSTANCE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_VIEW_INSTANCE_TYPE))
-#define GAL_IS_VIEW_INSTANCE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_VIEW_INSTANCE_TYPE))
-
-typedef struct {
- GObject base;
-
- GalViewCollection *collection;
-
- char *instance_id;
- char *current_view_filename;
- char *custom_filename;
-
- char *current_title;
- char *current_type;
- char *current_id;
-
- GalView *current_view;
-
- guint view_changed_id;
- guint collection_changed_id;
-
- guint loaded : 1;
- char *default_view;
-} GalViewInstance;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Signals
- */
- void (*display_view) (GalViewInstance *instance,
- GalView *view);
- void (*changed) (GalViewInstance *instance);
-} GalViewInstanceClass;
-
-/* Standard functions */
-GType gal_view_instance_get_type (void);
-
-/* */
-/*collection should be loaded when you call this.
- instance_id: Which instance of this type of object is this (for most of evo, this is the folder id.) */
-GalViewInstance *gal_view_instance_new (GalViewCollection *collection,
- const char *instance_id);
-GalViewInstance *gal_view_instance_construct (GalViewInstance *instance,
- GalViewCollection *collection,
- const char *instance_id);
-
-/* Manipulate the current view. */
-char *gal_view_instance_get_current_view_id (GalViewInstance *instance);
-void gal_view_instance_set_current_view_id (GalViewInstance *instance,
- const char *view_id);
-GalView *gal_view_instance_get_current_view (GalViewInstance *instance);
-
-/* Sets the current view to the given custom view. */
-void gal_view_instance_set_custom_view (GalViewInstance *instance,
- GalView *view);
-
-
-/* Returns true if this instance has ever been used before. */
-gboolean gal_view_instance_exists (GalViewInstance *instance);
-
-/* Manipulate the view collection */
-/* void gal_view_instance_set_as_default (GalViewInstance *instance); */
-void gal_view_instance_save_as (GalViewInstance *instance);
-
-/* This is idempotent. Once it's been called once, the rest of the calls are ignored. */
-void gal_view_instance_load (GalViewInstance *instance);
-
-/* These only mean anything before gal_view_instance_load is called the first time. */
-const char *gal_view_instance_get_default_view (GalViewInstance *instance);
-void gal_view_instance_set_default_view (GalViewInstance *instance,
- const char *id);
-
-EPopupMenu *gal_view_instance_get_popup_menu (GalViewInstance *instance);
-void gal_view_instance_free_popup_menu (GalViewInstance *instance,
- EPopupMenu *menu);
-
-G_END_DECLS
-
-#endif /* _GAL_VIEW_INSTANCE_H_ */
diff --git a/widgets/menus/gal-view-new-dialog.c b/widgets/menus/gal-view-new-dialog.c
deleted file mode 100644
index 00ef874e40..0000000000
--- a/widgets/menus/gal-view-new-dialog.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-new-dialog.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtk.h>
-#include <gtk/gtktreeselection.h>
-#include "gal-view-new-dialog.h"
-#include "gal-define-views-model.h"
-#include <gal/widgets/e-unicode.h>
-#include <gal/e-table/e-table-scrolled.h>
-#include <gal/util/e-i18n.h>
-#include <gal/util/e-util.h>
-
-static void gal_view_new_dialog_init (GalViewNewDialog *card);
-static void gal_view_new_dialog_class_init (GalViewNewDialogClass *klass);
-static void gal_view_new_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void gal_view_new_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
-static void gal_view_new_dialog_dispose (GObject *object);
-
-static GtkDialogClass *parent_class = NULL;
-#define PARENT_TYPE GTK_TYPE_DIALOG
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_NAME,
- PROP_FACTORY
-};
-
-E_MAKE_TYPE(gal_view_new_dialog, "GalViewNewDialog",
- GalViewNewDialog,
- gal_view_new_dialog_class_init,
- gal_view_new_dialog_init, PARENT_TYPE)
-
-static void
-gal_view_new_dialog_class_init (GalViewNewDialogClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass*) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->set_property = gal_view_new_dialog_set_property;
- object_class->get_property = gal_view_new_dialog_get_property;
- object_class->dispose = gal_view_new_dialog_dispose;
-
- g_object_class_install_property (object_class, PROP_NAME,
- g_param_spec_string ("name",
- _("Name"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FACTORY,
- g_param_spec_object ("factory",
- _("Factory"),
- /*_( */"XXX blurb" /*)*/,
- GAL_VIEW_FACTORY_TYPE,
- G_PARAM_READWRITE));
-}
-
-static void
-gal_view_new_dialog_init (GalViewNewDialog *dialog)
-{
- GladeXML *gui;
- GtkWidget *widget;
-
- gui = glade_xml_new (GAL_GLADEDIR "/gal-view-new-dialog.glade", NULL, E_I18N_DOMAIN);
- dialog->gui = gui;
-
- widget = glade_xml_get_widget(gui, "table-top");
- if (!widget) {
- return;
- }
- gtk_widget_ref(widget);
- gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), widget, TRUE, TRUE, 0);
- gtk_widget_unref(widget);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
-
- gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, TRUE, FALSE);
- gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
- gtk_window_set_title (GTK_WINDOW(dialog), _("Define New View"));
-
- dialog->collection = NULL;
- dialog->selected_factory = NULL;
-}
-
-static void
-gal_view_new_dialog_dispose (GObject *object)
-{
- GalViewNewDialog *gal_view_new_dialog = GAL_VIEW_NEW_DIALOG(object);
-
- if (gal_view_new_dialog->gui)
- g_object_unref(gal_view_new_dialog->gui);
- gal_view_new_dialog->gui = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-GtkWidget*
-gal_view_new_dialog_new (GalViewCollection *collection)
-{
- GtkWidget *widget =
- gal_view_new_dialog_construct(g_object_new (GAL_VIEW_NEW_DIALOG_TYPE, NULL),
- collection);
- return widget;
-}
-
-static void
-sensitize_ok_response (GalViewNewDialog *dialog)
-{
- gboolean ok = TRUE;
- const char *text;
-
- text = gtk_entry_get_text (GTK_ENTRY (dialog->entry));
- if (!text || !text[0])
- ok = FALSE;
-
- if (!dialog->selected_factory)
- ok = FALSE;
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, ok);
-}
-
-static gboolean
-selection_func (GtkTreeSelection *selection,
- GtkTreeModel *model,
- GtkTreePath *path,
- gboolean path_currently_selected,
- gpointer data)
-{
- GtkTreeIter iter;
- GalViewNewDialog *dialog = data;
-
- if (path_currently_selected)
- return TRUE;
-
- gtk_tree_model_get_iter (GTK_TREE_MODEL (dialog->list_store),
- &iter,
- (GtkTreePath*)path);
-
- gtk_tree_model_get (GTK_TREE_MODEL (dialog->list_store),
- &iter,
- 1, &dialog->selected_factory,
- -1);
-
- printf ("%s factory selected\n", gal_view_factory_get_title(dialog->selected_factory));
-
- sensitize_ok_response (dialog);
-
- return TRUE;
-}
-
-static void
-entry_changed (GtkWidget *entry, gpointer data)
-{
- GalViewNewDialog *dialog = data;
-
- sensitize_ok_response (dialog);
-}
-
-GtkWidget*
-gal_view_new_dialog_construct (GalViewNewDialog *dialog,
- GalViewCollection *collection)
-{
- GList *iterator;
- GtkTreeSelection *selection;
- GtkTreeViewColumn *column;
- GtkCellRenderer *rend;
-
- dialog->collection = collection;
- dialog->list = glade_xml_get_widget(dialog->gui,"list-type-list");
- dialog->entry = glade_xml_get_widget(dialog->gui, "entry-name");
- dialog->list_store = gtk_list_store_new (2,
- G_TYPE_STRING,
- G_TYPE_POINTER);
-
- rend = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("factory title",
- rend,
- "text", 0,
- NULL);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->list), column);
-
- iterator = dialog->collection->factory_list;
- for ( ; iterator; iterator = g_list_next(iterator) ) {
- GalViewFactory *factory = iterator->data;
- GtkTreeIter iter;
-
- g_object_ref(factory);
- gtk_list_store_append (dialog->list_store,
- &iter);
- gtk_list_store_set (dialog->list_store,
- &iter,
- 0, gal_view_factory_get_title(factory),
- 1, factory,
- -1);
- }
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->list), GTK_TREE_MODEL (dialog->list_store));
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->list));
- gtk_tree_selection_set_select_function (selection, selection_func, dialog, NULL);
-
- g_signal_connect (dialog->entry, "changed",
- G_CALLBACK (entry_changed), dialog);
-
- sensitize_ok_response (dialog);
-
- return GTK_WIDGET(dialog);
-}
-
-static void
-gal_view_new_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GalViewNewDialog *dialog;
- GtkWidget *entry;
-
- dialog = GAL_VIEW_NEW_DIALOG (object);
-
- switch (prop_id){
- case PROP_NAME:
-
- if (entry && GTK_IS_ENTRY(entry)) {
- gtk_entry_set_text(GTK_ENTRY(entry), g_value_get_string (value));
- }
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- return;
- }
-}
-
-
-static void
-gal_view_new_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GalViewNewDialog *dialog;
- GtkWidget *entry;
-
- dialog = GAL_VIEW_NEW_DIALOG (object);
-
- switch (prop_id) {
- case PROP_NAME:
- entry = glade_xml_get_widget(dialog->gui, "entry-name");
- if (entry && GTK_IS_ENTRY(entry)) {
- g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (entry)));
- }
- break;
- case PROP_FACTORY:
- g_value_set_object (value, dialog->selected_factory);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
diff --git a/widgets/menus/gal-view-new-dialog.glade b/widgets/menus/gal-view-new-dialog.glade
deleted file mode 100644
index 70922f5dc5..0000000000
--- a/widgets/menus/gal-view-new-dialog.glade
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="dialog1">
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button3">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table-top">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">1</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Name of new view:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">entry-name</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="entry-name">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char" translatable="yes">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Type of view:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="visible">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="list-type-list">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/widgets/menus/gal-view-new-dialog.h b/widgets/menus/gal-view-new-dialog.h
deleted file mode 100644
index cd523a2476..0000000000
--- a/widgets/menus/gal-view-new-dialog.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view-new-dialog.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __GAL_VIEW_NEW_DIALOG_H__
-#define __GAL_VIEW_NEW_DIALOG_H__
-
-#include <gtk/gtkdialog.h>
-#include <gtk/gtkliststore.h>
-#include <glade/glade.h>
-#include <gal-view-collection.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* GalViewNewDialog - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name type read/write description
- * --------------------------------------------------------------------------------
- */
-
-#define GAL_VIEW_NEW_DIALOG_TYPE (gal_view_new_dialog_get_type ())
-#define GAL_VIEW_NEW_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_VIEW_NEW_DIALOG_TYPE, GalViewNewDialog))
-#define GAL_VIEW_NEW_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_VIEW_NEW_DIALOG_TYPE, GalViewNewDialogClass))
-#define GAL_IS_VIEW_NEW_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_VIEW_NEW_DIALOG_TYPE))
-#define GAL_IS_VIEW_NEW_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GAL_VIEW_NEW_DIALOG_TYPE))
-
-typedef struct _GalViewNewDialog GalViewNewDialog;
-typedef struct _GalViewNewDialogClass GalViewNewDialogClass;
-
-struct _GalViewNewDialog
-{
- GtkDialog parent;
-
- /* item specific fields */
- GladeXML *gui;
-
- GalViewCollection *collection;
- GalViewFactory *selected_factory;
-
- GtkListStore *list_store;
-
- GtkWidget *entry;
- GtkWidget *list;
-};
-
-struct _GalViewNewDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GtkWidget *gal_view_new_dialog_new (GalViewCollection *collection);
-GType gal_view_new_dialog_get_type (void);
-
-GtkWidget *gal_view_new_dialog_construct (GalViewNewDialog *dialog,
- GalViewCollection *collection);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GAL_VIEW_NEW_DIALOG_H__ */
diff --git a/widgets/menus/gal-view.c b/widgets/menus/gal-view.c
deleted file mode 100644
index fa1402fae4..0000000000
--- a/widgets/menus/gal-view.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "gal-view.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-#define d(x)
-
-d(static gint depth = 0;)
-
-
-static GObjectClass *gal_view_parent_class;
-
-enum {
- CHANGED,
- LAST_SIGNAL
-};
-
-static guint gal_view_signals [LAST_SIGNAL] = { 0, };
-
-/**
- * gal_view_edit
- * @view: The view to edit
- * @parent: the parent window.
- */
-void
-gal_view_edit (GalView *view,
- GtkWindow *parent)
-{
- g_return_if_fail (view != NULL);
- g_return_if_fail (GAL_IS_VIEW (view));
- g_return_if_fail (GTK_IS_WINDOW (parent));
-
- if (GAL_VIEW_GET_CLASS (view)->edit)
- GAL_VIEW_GET_CLASS (view)->edit (view, parent);
-}
-
-/**
- * gal_view_load
- * @view: The view to load to
- * @filename: The file to load from
- */
-void
-gal_view_load (GalView *view,
- const char *filename)
-{
- g_return_if_fail (view != NULL);
- g_return_if_fail (GAL_IS_VIEW (view));
-
- if (GAL_VIEW_GET_CLASS (view)->load)
- GAL_VIEW_GET_CLASS (view)->load (view, filename);
-}
-
-/**
- * gal_view_save
- * @view: The view to save
- * @filename: The file to save to
- */
-void
-gal_view_save (GalView *view,
- const char *filename)
-{
- g_return_if_fail (view != NULL);
- g_return_if_fail (GAL_IS_VIEW (view));
-
- if (GAL_VIEW_GET_CLASS (view)->save)
- GAL_VIEW_GET_CLASS (view)->save (view, filename);
-}
-
-/**
- * gal_view_get_title
- * @view: The view to query.
- *
- * Returns: The title of the view.
- */
-const char *
-gal_view_get_title (GalView *view)
-{
- g_return_val_if_fail (view != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW (view), NULL);
-
- if (GAL_VIEW_GET_CLASS (view)->get_title)
- return GAL_VIEW_GET_CLASS (view)->get_title (view);
- else
- return NULL;
-}
-
-/**
- * gal_view_set_title
- * @view: The view to set.
- * @title: The new title value.
- */
-void
-gal_view_set_title (GalView *view,
- const char *title)
-{
- g_return_if_fail (view != NULL);
- g_return_if_fail (GAL_IS_VIEW (view));
-
- if (GAL_VIEW_GET_CLASS (view)->set_title)
- GAL_VIEW_GET_CLASS (view)->set_title (view, title);
-}
-
-/**
- * gal_view_get_type_code
- * @view: The view to get.
- *
- * Returns: The type of the view.
- */
-const char *
-gal_view_get_type_code (GalView *view)
-{
- g_return_val_if_fail (view != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW (view), NULL);
-
- if (GAL_VIEW_GET_CLASS (view)->get_type_code)
- return GAL_VIEW_GET_CLASS (view)->get_type_code (view);
- else
- return NULL;
-}
-
-/**
- * gal_view_clone
- * @view: The view to clone.
- *
- * Returns: The clone.
- */
-GalView *
-gal_view_clone (GalView *view)
-{
- g_return_val_if_fail (view != NULL, NULL);
- g_return_val_if_fail (GAL_IS_VIEW (view), NULL);
-
- if (GAL_VIEW_GET_CLASS (view)->clone)
- return GAL_VIEW_GET_CLASS (view)->clone (view);
- else
- return NULL;
-}
-
-/**
- * gal_view_changed
- * @view: The view that changed.
- */
-void
-gal_view_changed (GalView *view)
-{
- g_return_if_fail (view != NULL);
- g_return_if_fail (GAL_IS_VIEW (view));
-
- g_signal_emit(view,
- gal_view_signals [CHANGED], 0);
-}
-
-static void
-gal_view_class_init (GObjectClass *object_class)
-{
- GalViewClass *klass = GAL_VIEW_CLASS(object_class);
- gal_view_parent_class = g_type_class_ref (PARENT_TYPE);
-
- klass->edit = NULL;
- klass->load = NULL;
- klass->save = NULL;
- klass->get_title = NULL;
- klass->clone = NULL;
-
- klass->changed = NULL;
-
- gal_view_signals [CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalViewClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-}
-
-static void
-gal_view_init (GalView *view)
-{
-}
-
-E_MAKE_TYPE(gal_view, "GalView", GalView, gal_view_class_init, gal_view_init, PARENT_TYPE)
diff --git a/widgets/menus/gal-view.h b/widgets/menus/gal-view.h
deleted file mode 100644
index 77056243c5..0000000000
--- a/widgets/menus/gal-view.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-view.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_VIEW_H_
-#define _GAL_VIEW_H_
-
-#include <gtk/gtkwindow.h>
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_VIEW_TYPE (gal_view_get_type ())
-#define GAL_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_VIEW_TYPE, GalView))
-#define GAL_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_VIEW_TYPE, GalViewClass))
-#define GAL_IS_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_VIEW_TYPE))
-#define GAL_IS_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_VIEW_TYPE))
-#define GAL_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GAL_VIEW_TYPE, GalViewClass))
-
-typedef struct {
- GObject base;
-} GalView;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Virtual methods
- */
- void (*edit) (GalView *view, GtkWindow *parent_window);
- void (*load) (GalView *view,
- const char *filename);
- void (*save) (GalView *view,
- const char *filename);
- const char *(*get_title) (GalView *view);
- void (*set_title) (GalView *view,
- const char *title);
- const char *(*get_type_code) (GalView *view);
- GalView *(*clone) (GalView *view);
-
- /* Signals */
- void (*changed) (GalView *view);
-} GalViewClass;
-
-/* Standard functions */
-GType gal_view_get_type (void);
-
-/* Open an editor dialog for this view, modal/transient for the GtkWindow arg. */
-void gal_view_edit (GalView *view,
- GtkWindow *parent);
-
-/* xml load and save functions */
-void gal_view_load (GalView *view,
- const char *filename);
-void gal_view_save (GalView *view,
- const char *filename);
-
-/* Title functions */
-const char *gal_view_get_title (GalView *view);
-void gal_view_set_title (GalView *view,
- const char *title);
-
-/* View type. */
-const char *gal_view_get_type_code (GalView *view);
-
-/* Cloning the view */
-GalView *gal_view_clone (GalView *view);
-
-/* Changed signal */
-void gal_view_changed (GalView *view);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _GAL_VIEW_H_ */
diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog
index ac6b0f6165..05525bc926 100644
--- a/widgets/misc/ChangeLog
+++ b/widgets/misc/ChangeLog
@@ -1,24 +1,9 @@
-2004-10-08 Harry Lu <harry.lu@sun.com>
+2004-09-28 JP Rosevear <jpr@novell.com>
- * e-source-selector.c: (e_source_selector_popup_menu),
- (class_init): implement popup_menu so that popup menu can
- be shown with Shift+F10.
-
-2004-10-06 JP Rosevear <jpr@novell.com>
-
- Fixes #66164
-
- * e-cell-date-edit.c (e_cell_date_edit_get_popup_pos): replicate
- fix to e-cell-combo.c by NotZed
+ Fixes #66164
-2004-10-01 Not Zed <NotZed@Ximian.com>
-
- * e-util-marshal.list: added boolean object boxed.
-
- * e-source-selector.c (class_init): add new 'popup event' signal,
- to replace fill_popup_menu.
- (selector_button_press_event): emit a POPUP_EVENT rather than a
- FILL_POPUP_MENU.
+ * e-cell-date-edit.c (e_cell_date_edit_get_popup_pos): replicate
+ fix to e-cell-combo.c by NotZed
2004-09-13 Rodney Dawes <dobey@novell.com>
diff --git a/widgets/misc/e-canvas-background.c b/widgets/misc/e-canvas-background.c
deleted file mode 100644
index 0e57feff4e..0000000000
--- a/widgets/misc/e-canvas-background.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas-background.c - background color for canvas.
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-canvas-background.h"
-
-#include <math.h>
-#include <stdio.h>
-#include <gtk/gtksignal.h>
-#include <gdk/gdkkeysyms.h>
-#include "gal/widgets/e-hsv-utils.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-canvas-utils.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include <string.h>
-
-#define PARENT_OBJECT_TYPE gnome_canvas_item_get_type ()
-
-#define d(x)
-
-struct _ECanvasBackgroundPrivate {
- guint rgba; /* Fill color, RGBA */
- GdkColor color; /* Fill color */
- GdkBitmap *stipple; /* Stipple for fill */
- GdkGC *gc; /* GC for filling */
- double x1;
- double x2;
- double y1;
- double y2;
-
- guint needs_redraw : 1;
-};
-
-static GnomeCanvasItemClass *parent_class;
-
-enum {
- PROP_0,
- PROP_FILL_COLOR,
- PROP_FILL_COLOR_GDK,
- PROP_FILL_COLOR_RGBA,
- PROP_FILL_STIPPLE,
- PROP_X1,
- PROP_X2,
- PROP_Y1,
- PROP_Y2,
-};
-
-static void
-get_color(ECanvasBackground *ecb)
-{
- GnomeCanvasItem *item = GNOME_CANVAS_ITEM (ecb);
- ecb->priv->color.pixel = gnome_canvas_get_color_pixel (item->canvas,
- GNOME_CANVAS_COLOR (ecb->priv->color.red >> 8,
- ecb->priv->color.green>> 8,
- ecb->priv->color.blue>> 8));
-}
-
-static void
-ecb_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2)
-{
- double i2c [6];
- ArtPoint c1, c2, i1, i2;
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (item);
-
- /* Wrong BBox's are the source of redraw nightmares */
-
- gnome_canvas_item_i2c_affine (GNOME_CANVAS_ITEM (ecb), i2c);
-
- i1.x = ecb->priv->x1;
- i1.y = ecb->priv->y1;
- i2.x = ecb->priv->x2;
- i2.y = ecb->priv->y2;
- art_affine_point (&c1, &i1, i2c);
- art_affine_point (&c2, &i2, i2c);
-
- if (ecb->priv->x1 < 0)
- c1.x = -(double)UINT_MAX;
-
- if (ecb->priv->y1 < 0)
- c1.y = -(double)UINT_MAX;
-
- if (ecb->priv->x2 < 0)
- c2.x = (double)UINT_MAX;
-
- if (ecb->priv->y2 < 0)
- c2.y = (double)UINT_MAX;
-
- *x1 = c1.x;
- *y1 = c1.y;
- *x2 = c2.x + 1;
- *y2 = c2.y + 1;
-}
-
-/*
- * GnomeCanvasItem::update method
- */
-static void
-ecb_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
-{
- ArtPoint o1, o2;
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (item);
-
- if (GNOME_CANVAS_ITEM_CLASS (parent_class)->update)
- GNOME_CANVAS_ITEM_CLASS (parent_class)->update (item, affine, clip_path, flags);
-
- o1.x = item->x1;
- o1.y = item->y1;
- o2.x = item->x2;
- o2.y = item->y2;
-
- ecb_bounds (item, &item->x1, &item->y1, &item->x2, &item->y2);
- if (item->x1 != o1.x ||
- item->y1 != o1.y ||
- item->x2 != o2.x ||
- item->y2 != o2.y) {
- gnome_canvas_request_redraw (item->canvas, o1.x, o1.y, o2.x, o2.y);
- ecb->priv->needs_redraw = 1;
- }
-
- if (ecb->priv->needs_redraw) {
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1,
- item->x2, item->y2);
- ecb->priv->needs_redraw = 0;
- }
-}
-
-/* Sets the stipple pattern for the text */
-static void
-set_stipple (ECanvasBackground *ecb, GdkBitmap *stipple, int use_value)
-{
- if (use_value) {
- if (ecb->priv->stipple)
- gdk_bitmap_unref (ecb->priv->stipple);
-
- ecb->priv->stipple = stipple;
- if (stipple)
- gdk_bitmap_ref (stipple);
- }
-
- if (ecb->priv->gc) {
- if (stipple) {
- gdk_gc_set_stipple (ecb->priv->gc, stipple);
- gdk_gc_set_fill (ecb->priv->gc, GDK_STIPPLED);
- } else
- gdk_gc_set_fill (ecb->priv->gc, GDK_SOLID);
- }
-}
-
-static void
-ecb_dispose (GObject *object)
-{
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (object);
-
- if (ecb->priv) {
- if (ecb->priv->stipple)
- gdk_bitmap_unref (ecb->priv->stipple);
- ecb->priv->stipple = NULL;
-
- g_free (ecb->priv);
- ecb->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-ecb_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ECanvasBackground *ecb;
-
- GdkColor color = { 0, 0, 0, 0, };
- GdkColor *pcolor;
- gboolean color_changed = FALSE;
-
- item = GNOME_CANVAS_ITEM (object);
- ecb = E_CANVAS_BACKGROUND (object);
-
- switch (prop_id){
- case PROP_FILL_COLOR:
- if (g_value_get_string (value))
- gdk_color_parse (g_value_get_string (value), &color);
-
- ecb->priv->rgba = ((color.red & 0xff00) << 16 |
- (color.green & 0xff00) << 8 |
- (color.blue & 0xff00) |
- 0xff);
- color_changed = TRUE;
- break;
-
- case PROP_FILL_COLOR_GDK:
- pcolor = g_value_get_boxed (value);
- if (pcolor) {
- color = *pcolor;
- }
-
- ecb->priv->rgba = ((color.red & 0xff00) << 16 |
- (color.green & 0xff00) << 8 |
- (color.blue & 0xff00) |
- 0xff);
- color_changed = TRUE;
- break;
-
- case PROP_FILL_COLOR_RGBA:
- ecb->priv->rgba = g_value_get_uint (value);
- color.red = ((ecb->priv->rgba >> 24) & 0xff) * 0x101;
- color.green = ((ecb->priv->rgba >> 16) & 0xff) * 0x101;
- color.blue = ((ecb->priv->rgba >> 8) & 0xff) * 0x101;
- color_changed = TRUE;
- break;
-
- case PROP_FILL_STIPPLE:
- set_stipple (ecb, g_value_get_object (value), TRUE);
- break;
-
- case PROP_X1:
- ecb->priv->x1 = g_value_get_double (value);
- break;
- case PROP_X2:
- ecb->priv->x2 = g_value_get_double (value);
- break;
- case PROP_Y1:
- ecb->priv->y1 = g_value_get_double (value);
- break;
- case PROP_Y2:
- ecb->priv->y2 = g_value_get_double (value);
- break;
- }
-
- if (color_changed) {
- ecb->priv->color = color;
-
- if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(item)) {
- get_color (ecb);
- if (!item->canvas->aa) {
- gdk_gc_set_foreground (ecb->priv->gc, &ecb->priv->color);
- }
- }
- }
-
- ecb->priv->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(ecb));
-}
-
-static void
-ecb_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ECanvasBackground *ecb;
-
- item = GNOME_CANVAS_ITEM (object);
- ecb = E_CANVAS_BACKGROUND (object);
-
- switch (prop_id){
- case PROP_FILL_COLOR_GDK:
- g_value_set_boxed (value, gdk_color_copy (&ecb->priv->color));
- break;
- case PROP_FILL_COLOR_RGBA:
- g_value_set_uint (value, ecb->priv->rgba);
- break;
- case PROP_FILL_STIPPLE:
- g_value_set_object (value, ecb->priv->stipple);
- break;
- case PROP_X1:
- g_value_set_double (value, ecb->priv->x1);
- break;
- case PROP_X2:
- g_value_set_double (value, ecb->priv->x2);
- break;
- case PROP_Y1:
- g_value_set_double (value, ecb->priv->y1);
- break;
- case PROP_Y2:
- g_value_set_double (value, ecb->priv->y2);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-ecb_init (GnomeCanvasItem *item)
-{
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (item);
-
- ecb->priv = g_new (ECanvasBackgroundPrivate, 1);
-
- ecb->priv->color.pixel = 0;
- ecb->priv->color.red = 0;
- ecb->priv->color.green = 0;
- ecb->priv->color.blue = 0;
- ecb->priv->stipple = NULL;
- ecb->priv->gc = NULL;
- ecb->priv->x1 = -1.0;
- ecb->priv->x2 = -1.0;
- ecb->priv->y1 = -1.0;
- ecb->priv->y2 = -1.0;
-}
-
-static void
-ecb_realize (GnomeCanvasItem *item)
-{
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (item);
-
- if (GNOME_CANVAS_ITEM_CLASS (parent_class)->realize)
- GNOME_CANVAS_ITEM_CLASS (parent_class)->realize (item);
-
- ecb->priv->gc = gdk_gc_new (item->canvas->layout.bin_window);
- get_color (ecb);
- if (!item->canvas->aa)
- gdk_gc_set_foreground (ecb->priv->gc, &ecb->priv->color);
-
- set_stipple (ecb, NULL, FALSE);
-
- ecb->priv->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (ecb));
-}
-
-static void
-ecb_unrealize (GnomeCanvasItem *item)
-{
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (item);
-
- gdk_gc_unref (ecb->priv->gc);
- ecb->priv->gc = NULL;
-
- if (GNOME_CANVAS_ITEM_CLASS (parent_class)->unrealize)
- GNOME_CANVAS_ITEM_CLASS (parent_class)->unrealize (item);
-}
-
-static void
-ecb_draw (GnomeCanvasItem *item, GdkDrawable *drawable, int x, int y, int width, int height)
-{
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (item);
- int x1, x2, y1, y2;
- double i2c [6];
- ArtPoint upper_left, lower_right, ecb_base_point;
-
- /*
- * Find out our real position after grouping
- */
- gnome_canvas_item_i2c_affine (item, i2c);
- ecb_base_point.x = ecb->priv->x1;
- ecb_base_point.y = ecb->priv->y1;
- art_affine_point (&upper_left, &ecb_base_point, i2c);
-
- ecb_base_point.x = ecb->priv->x2;
- ecb_base_point.y = ecb->priv->y2;
- art_affine_point (&lower_right, &ecb_base_point, i2c);
-
- x1 = 0;
- y1 = 0;
- x2 = width;
- y2 = height;
- if (ecb->priv->x1 >= 0 && upper_left.x > x1)
- x1 = upper_left.x;
- if (ecb->priv->y1 >= 0 && upper_left.y > y1)
- y1 = upper_left.y;
- if (ecb->priv->x2 >= 0 && lower_right.x < x2)
- x2 = lower_right.x;
- if (ecb->priv->y2 >= 0 && lower_right.y < y2)
- y2 = lower_right.y;
-
- gdk_draw_rectangle (drawable, ecb->priv->gc, TRUE,
- x1, y1, x2 - x1, y2 - y1);
-}
-
-static double
-ecb_point (GnomeCanvasItem *item, double x, double y, int cx, int cy,
- GnomeCanvasItem **actual_item)
-{
- ECanvasBackground *ecb = E_CANVAS_BACKGROUND (item);
-
- if (ecb->priv->x1 >= 0 && ecb->priv->x1 > x)
- return 1.0;
- if (ecb->priv->x2 >= 0 && ecb->priv->x2 < x)
- return 1.0;
- if (ecb->priv->y1 >= 0 && ecb->priv->y1 > y)
- return 1.0;
- if (ecb->priv->y2 >= 0 && ecb->priv->y2 < y)
- return 1.0;
- *actual_item = item;
-
- return 0.0;
-}
-
-static void
-ecb_class_init (GObjectClass *object_class)
-{
- GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
-
- parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-
- object_class->dispose = ecb_dispose;
- object_class->set_property = ecb_set_property;
- object_class->get_property = ecb_get_property;
-
- item_class->update = ecb_update;
- item_class->realize = ecb_realize;
- item_class->unrealize = ecb_unrealize;
- item_class->draw = ecb_draw;
- item_class->point = ecb_point;
-
- g_object_class_install_property (object_class, PROP_FILL_COLOR,
- g_param_spec_string ("fill_color",
- _( "Fill color" ),
- _( "Fill color" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FILL_COLOR_GDK,
- g_param_spec_boxed ("fill_color_gdk",
- _( "GDK fill color" ),
- _( "GDK fill color" ),
- GDK_TYPE_COLOR,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FILL_COLOR_RGBA,
- g_param_spec_uint ("fill_color_rgba",
- _( "GDK fill color" ),
- _( "GDK fill color" ),
- 0, G_MAXUINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FILL_STIPPLE,
- g_param_spec_object ("fill_stipple",
- _( "Fill stipple" ),
- _( "FIll stipple" ),
- GDK_TYPE_WINDOW,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_X1,
- g_param_spec_double ("x1",
- _( "X1" ),
- _( "X1" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_X2,
- g_param_spec_double ("x2",
- _( "X2" ),
- _( "X2" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_Y1,
- g_param_spec_double ("y1",
- _( "Y1" ),
- _( "Y1" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_Y2,
- g_param_spec_double ("y2",
- _( "Y2" ),
- _( "Y2" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-}
-
-E_MAKE_TYPE (e_canvas_background,
- "ECanvasBackground",
- ECanvasBackground,
- ecb_class_init,
- ecb_init,
- PARENT_OBJECT_TYPE)
diff --git a/widgets/misc/e-canvas-background.h b/widgets/misc/e-canvas-background.h
deleted file mode 100644
index 4a8e3294fb..0000000000
--- a/widgets/misc/e-canvas-background.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas-background.h - background color for canvas.
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_CANVAS_BACKGROUND_H
-#define E_CANVAS_BACKGROUND_H
-
-#include <libgnomecanvas/gnome-canvas.h>
-
-G_BEGIN_DECLS
-
-/*
- * name type read/write description
- * ------------------------------------------------------------------------------------------
- * fill_color string W X color specification for fill color,
- * or NULL pointer for no color (transparent)
- * fill_color_gdk GdkColor* RW Allocated GdkColor for fill
- * fill_stipple GdkBitmap* RW Stipple pattern for fill
- * x1 double RW Coordinates for edges of background rectangle
- * x2 double RW Default is all of them = -1.
- * y1 double RW Which means that the entire space is shown.
- * y2 double RW If you need the rectangle to have negative coordinates, use an affine.
- */
-
-
-#define E_CANVAS_BACKGROUND_TYPE (e_canvas_background_get_type ())
-#define E_CANVAS_BACKGROUND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_CANVAS_BACKGROUND_TYPE, ECanvasBackground))
-#define E_CANVAS_BACKGROUND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_CANVAS_BACKGROUND_TYPE, ECanvasBackgroundClass))
-#define E_IS_CANVAS_BACKGROUND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_CANVAS_BACKGROUND_TYPE))
-#define E_IS_CANVAS_BACKGROUND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_CANVAS_BACKGROUND_TYPE))
-
-typedef struct _ECanvasBackground ECanvasBackground;
-typedef struct _ECanvasBackgroundClass ECanvasBackgroundClass;
-typedef struct _ECanvasBackgroundPrivate ECanvasBackgroundPrivate;
-
-struct _ECanvasBackground {
- GnomeCanvasItem item;
-
- ECanvasBackgroundPrivate *priv;
-};
-
-struct _ECanvasBackgroundClass {
- GnomeCanvasItemClass parent_class;
-};
-
-
-/* Standard Gtk function */
-GtkType e_canvas_background_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/widgets/misc/e-canvas-utils.c b/widgets/misc/e-canvas-utils.c
deleted file mode 100644
index 629804a2d7..0000000000
--- a/widgets/misc/e-canvas-utils.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas-utils.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 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);
-}
-
-static double
-compute_offset(int top, int bottom, int page_top, int page_bottom)
-{
- int size = bottom - top;
- int offset = 0;
-
- if (top <= page_top && bottom >= page_bottom)
- return 0;
-
- if (bottom > page_bottom)
- offset = (bottom - page_bottom);
- if (top < page_top + offset)
- offset = (top - page_top);
-
- if (top <= page_top + offset && bottom >= page_bottom + offset)
- return offset;
-
- if (top < page_top + size * 3 / 2 + offset)
- offset = top - (page_top + size * 3 / 2);
- if (bottom > page_bottom - size * 3 / 2 + offset)
- offset = bottom - (page_bottom - size * 3 / 2);
- if (top < page_top + size * 3 / 2 + offset)
- offset = top - ((page_top + page_bottom - (bottom - top)) / 2);
-
- return offset;
-}
-
-
-static void
-e_canvas_show_area (GnomeCanvas *canvas, double x1, double y1, double x2, double y2)
-{
- GtkAdjustment *h, *v;
- int dx = 0, dy = 0;
-
- g_return_if_fail (canvas != NULL);
- g_return_if_fail (GNOME_IS_CANVAS (canvas));
-
- h = gtk_layout_get_hadjustment(GTK_LAYOUT(canvas));
- dx = compute_offset(x1, x2, h->value, h->value + h->page_size);
- if (dx)
- gtk_adjustment_set_value(h, CLAMP(h->value + dx, h->lower, h->upper - h->page_size));
-
- v = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas));
- dy = compute_offset(y1, y2, v->value, v->value + v->page_size);
- if (dy)
- gtk_adjustment_set_value(v, CLAMP(v->value + dy, v->lower, v->upper - v->page_size));
-}
-
-void
-e_canvas_item_show_area (GnomeCanvasItem *item, double x1, double y1, double x2, double y2)
-{
- 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);
-
- e_canvas_show_area(item->canvas, x1, y1, x2, y2);
-}
-
-
-static gboolean
-e_canvas_area_shown (GnomeCanvas *canvas, double x1, double y1, double x2, double y2)
-{
- GtkAdjustment *h, *v;
- int dx = 0, dy = 0;
-
- g_return_val_if_fail (canvas != NULL, FALSE);
- g_return_val_if_fail (GNOME_IS_CANVAS (canvas), FALSE);
-
- h = gtk_layout_get_hadjustment(GTK_LAYOUT(canvas));
- dx = compute_offset(x1, x2, h->value, h->value + h->page_size);
- if (CLAMP(h->value + dx, h->lower, h->upper - h->page_size) - h->value != 0)
- return FALSE;
-
- v = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas));
- dy = compute_offset(y1, y2, v->value, v->value + v->page_size);
- if (CLAMP(v->value + dy, v->lower, v->upper - v->page_size) - v->value != 0)
- return FALSE;
- return TRUE;
-}
-
-gboolean
-e_canvas_item_area_shown (GnomeCanvasItem *item, double x1, double y1, double x2, double y2)
-{
- g_return_val_if_fail (item != NULL, FALSE);
- g_return_val_if_fail (GNOME_IS_CANVAS_ITEM (item), FALSE);
-
- gnome_canvas_item_i2w(item, &x1, &y1);
- gnome_canvas_item_i2w(item, &x2, &y2);
-
- return e_canvas_area_shown(item->canvas, x1, y1, x2, y2);
-}
-
-typedef struct {
- double x1;
- double y1;
- double x2;
- double y2;
- GnomeCanvas *canvas;
-} DoubsAndCanvas;
-
-static gboolean
-show_area_timeout (gpointer data)
-{
- DoubsAndCanvas *dac = data;
-
- e_canvas_show_area(dac->canvas, dac->x1, dac->y1, dac->x2, dac->y2);
- g_object_unref (dac->canvas);
- g_free(dac);
- return FALSE;
-}
-
-void
-e_canvas_item_show_area_delayed (GnomeCanvasItem *item, double x1, double y1, double x2, double y2, gint delay)
-{
- DoubsAndCanvas *dac;
-
- 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);
-
- dac = g_new(DoubsAndCanvas, 1);
- dac->x1 = x1;
- dac->y1 = y1;
- dac->x2 = x2;
- dac->y2 = y2;
- dac->canvas = item->canvas;
- g_object_ref (item->canvas);
- g_timeout_add(delay, show_area_timeout, dac);
-}
diff --git a/widgets/misc/e-canvas-utils.h b/widgets/misc/e-canvas-utils.h
deleted file mode 100644
index 5b1a329140..0000000000
--- a/widgets/misc/e-canvas-utils.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_CANVAS_UTILS__
-#define __E_CANVAS_UTILS__
-
-#include <libgnomecanvas/gnome-canvas.h>
-
-G_BEGIN_DECLS
-
-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);
-void e_canvas_item_show_area_delayed (GnomeCanvasItem *item,
- double x1,
- double y1,
- double x2,
- double y2,
- gint delay);
-/* Returns TRUE if the area is already shown on the screen (including
- spacing.) This is equivelent to returning FALSE iff show_area
- would do anything. */
-gboolean e_canvas_item_area_shown (GnomeCanvasItem *item,
- double x1,
- double y1,
- double x2,
- double y2);
-
-G_END_DECLS
-
-#endif /* __E_CANVAS_UTILS__ */
diff --git a/widgets/misc/e-canvas-vbox.c b/widgets/misc/e-canvas-vbox.c
deleted file mode 100644
index 354da5d872..0000000000
--- a/widgets/misc/e-canvas-vbox.c
+++ /dev/null
@@ -1,381 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas-vbox.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <math.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtksignal.h>
-#include "e-canvas-vbox.h"
-#include "e-canvas-utils.h"
-#include "e-canvas.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-
-static void e_canvas_vbox_init (ECanvasVbox *CanvasVbox);
-static void e_canvas_vbox_class_init (ECanvasVboxClass *klass);
-static void e_canvas_vbox_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void e_canvas_vbox_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
-static void e_canvas_vbox_dispose (GObject *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_real_add_item_start(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item);
-static void e_canvas_vbox_resize_children (GnomeCanvasItem *item);
-
-#define PARENT_TYPE GNOME_TYPE_CANVAS_GROUP
-static GnomeCanvasGroupClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_WIDTH,
- PROP_MINIMUM_WIDTH,
- PROP_HEIGHT,
- PROP_SPACING
-};
-
-E_MAKE_TYPE (e_canvas_vbox,
- "ECanvasVbox",
- ECanvasVbox,
- e_canvas_vbox_class_init,
- e_canvas_vbox_init,
- PARENT_TYPE)
-
-static void
-e_canvas_vbox_class_init (ECanvasVboxClass *klass)
-{
- GObjectClass *object_class;
- GnomeCanvasItemClass *item_class;
-
- object_class = (GObjectClass*) klass;
- item_class = (GnomeCanvasItemClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- klass->add_item = e_canvas_vbox_real_add_item;
- klass->add_item_start = e_canvas_vbox_real_add_item_start;
-
- object_class->set_property = e_canvas_vbox_set_property;
- object_class->get_property = e_canvas_vbox_get_property;
- object_class->dispose = e_canvas_vbox_dispose;
-
- /* GnomeCanvasItem method overrides */
- item_class->event = e_canvas_vbox_event;
- item_class->realize = e_canvas_vbox_realize;
-
- g_object_class_install_property (object_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _( "Width" ),
- _( "Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class, PROP_MINIMUM_WIDTH,
- g_param_spec_double ("minimum_width",
- _( "Minimum width" ),
- _( "Minimum Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _( "Height" ),
- _( "Height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READABLE));
- g_object_class_install_property (object_class, PROP_SPACING,
- g_param_spec_double ("spacing",
- _( "Spacing" ),
- _( "Spacing" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-}
-
-static void
-e_canvas_vbox_init (ECanvasVbox *vbox)
-{
- vbox->items = NULL;
-
- vbox->width = 10;
- vbox->minimum_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_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ECanvasVbox *e_canvas_vbox;
-
- item = GNOME_CANVAS_ITEM (object);
- e_canvas_vbox = E_CANVAS_VBOX (object);
-
- switch (prop_id){
- case PROP_WIDTH:
- case PROP_MINIMUM_WIDTH:
- e_canvas_vbox->minimum_width = g_value_get_double (value);
- e_canvas_vbox_resize_children(item);
- e_canvas_item_request_reflow(item);
- break;
- case PROP_SPACING:
- e_canvas_vbox->spacing = g_value_get_double (value);
- e_canvas_item_request_reflow(item);
- break;
- }
-}
-
-static void
-e_canvas_vbox_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ECanvasVbox *e_canvas_vbox;
-
- e_canvas_vbox = E_CANVAS_VBOX (object);
-
- switch (prop_id) {
- case PROP_WIDTH:
- g_value_set_double (value, e_canvas_vbox->width);
- break;
- case PROP_MINIMUM_WIDTH:
- g_value_set_double (value, e_canvas_vbox->minimum_width);
- break;
- case PROP_HEIGHT:
- g_value_set_double (value, e_canvas_vbox->height);
- break;
- case PROP_SPACING:
- g_value_set_double (value, e_canvas_vbox->spacing);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-/* Used from g_list_foreach(); disconnects from an item's signals */
-static void
-disconnect_item_cb (gpointer data, gpointer user_data)
-{
- ECanvasVbox *vbox;
- GnomeCanvasItem *item;
-
- vbox = E_CANVAS_VBOX (user_data);
-
- item = GNOME_CANVAS_ITEM (data);
- g_signal_handlers_disconnect_matched (item,
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL,
- vbox);
-}
-
-static void
-e_canvas_vbox_dispose (GObject *object)
-{
- ECanvasVbox *vbox = E_CANVAS_VBOX(object);
-
- if (vbox->items) {
- g_list_foreach(vbox->items, disconnect_item_cb, vbox);
- g_list_free(vbox->items);
- vbox->items = NULL;
- }
-
- G_OBJECT_CLASS(parent_class)->dispose (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_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 (gpointer data, GObject *where_object_was)
-{
- ECanvasVbox *vbox = data;
- vbox->items = g_list_remove(vbox->items, where_object_was);
-}
-
-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);
- g_object_weak_ref (G_OBJECT (item),
- 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->minimum_width,
- NULL);
- e_canvas_item_request_reflow(item);
- }
-}
-
-
-static void
-e_canvas_vbox_real_add_item_start(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item)
-{
- e_canvas_vbox->items = g_list_prepend(e_canvas_vbox->items, item);
- g_object_weak_ref (G_OBJECT (item),
- 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->minimum_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->minimum_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;
- gdouble old_width;
- gdouble max_width;
-
- old_width = e_canvas_vbox->width;
- max_width = e_canvas_vbox->minimum_width;
-
- old_height = e_canvas_vbox->height;
- running_height = 0;
-
- if (e_canvas_vbox->items == NULL) {
- } else {
- GList *list;
- gdouble item_height;
- gdouble item_width;
-
- list = e_canvas_vbox->items;
- g_object_get (list->data,
- "height", &item_height,
- "width", &item_width,
- NULL);
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(list->data),
- (double) 0,
- (double) running_height);
- running_height += item_height;
- if (max_width < item_width)
- max_width = item_width;
- list = g_list_next(list);
-
- for( ; list; list = g_list_next(list)) {
- running_height += e_canvas_vbox->spacing;
-
- g_object_get (list->data,
- "height", &item_height,
- "width", &item_width,
- NULL);
-
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(list->data),
- (double) 0,
- (double) running_height);
-
- running_height += item_height;
- if (max_width < item_width)
- max_width = item_width;
- }
-
- }
- e_canvas_vbox->height = running_height;
- e_canvas_vbox->width = max_width;
- if (old_height != e_canvas_vbox->height ||
- old_width != e_canvas_vbox->width)
- 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_GET_CLASS(e_canvas_vbox))->add_item)
- (E_CANVAS_VBOX_CLASS(GTK_OBJECT_GET_CLASS(e_canvas_vbox))->add_item) (e_canvas_vbox, item);
-}
-
-void
-e_canvas_vbox_add_item_start(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item)
-{
- if (E_CANVAS_VBOX_CLASS(GTK_OBJECT_GET_CLASS(e_canvas_vbox))->add_item_start)
- (E_CANVAS_VBOX_CLASS(GTK_OBJECT_GET_CLASS(e_canvas_vbox))->add_item_start) (e_canvas_vbox, item);
-}
-
diff --git a/widgets/misc/e-canvas-vbox.h b/widgets/misc/e-canvas-vbox.h
deleted file mode 100644
index 7d80e7c056..0000000000
--- a/widgets/misc/e-canvas-vbox.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas-vbox.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_CANVAS_VBOX_H__
-#define __E_CANVAS_VBOX_H__
-
-#include <gtk/gtktypeutils.h>
-#include <libgnomecanvas/gnome-canvas.h>
-
-#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) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_CANVAS_VBOX_TYPE, ECanvasVbox))
-#define E_CANVAS_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_CANVAS_VBOX_TYPE, ECanvasVboxClass))
-#define E_IS_CANVAS_VBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_CANVAS_VBOX_TYPE))
-#define E_IS_CANVAS_VBOX_CLASS(klass) (G_TYPE_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 minimum_width;
- double height;
- double spacing;
-};
-
-struct _ECanvasVboxClass
-{
- GnomeCanvasGroupClass parent_class;
-
- /* Virtual methods. */
- void (* add_item) (ECanvasVbox *CanvasVbox, GnomeCanvasItem *item);
- void (* add_item_start) (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);
-void e_canvas_vbox_add_item_start(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/widgets/misc/e-canvas.c b/widgets/misc/e-canvas.c
deleted file mode 100644
index 8be100fb4a..0000000000
--- a/widgets/misc/e-canvas.c
+++ /dev/null
@@ -1,1096 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <gtk/gtksignal.h>
-#include "e-canvas.h"
-#include "gal/util/e-util.h"
-#include <X11/Xlib.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkimmulticontext.h>
-
-static void e_canvas_init (ECanvas *card);
-static void e_canvas_dispose (GObject *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_button (GtkWidget *widget,
- GdkEventButton *event);
-
-static gint e_canvas_visibility (GtkWidget *widget,
- GdkEventVisibility *event,
- ECanvas *canvas);
-
-static gint e_canvas_focus_in (GtkWidget *widget,
- GdkEventFocus *event);
-static gint e_canvas_focus_out (GtkWidget *widget,
- GdkEventFocus *event);
-
-static void e_canvas_style_set (GtkWidget *widget,
- GtkStyle *previous_style);
-
-static int emit_event (GnomeCanvas *canvas, GdkEvent *event);
-
-#define PARENT_TYPE GNOME_TYPE_CANVAS
-static GnomeCanvasClass *parent_class = NULL;
-
-#define d(x)
-
-enum {
- REFLOW,
- LAST_SIGNAL
-};
-
-static guint e_canvas_signals [LAST_SIGNAL] = { 0, };
-
-E_MAKE_TYPE (e_canvas,
- "ECanvas",
- ECanvas,
- e_canvas_class_init,
- e_canvas_init,
- PARENT_TYPE)
-
-static void
-e_canvas_class_init (ECanvasClass *klass)
-{
- GObjectClass *object_class;
- GnomeCanvasClass *canvas_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GObjectClass*) klass;
- canvas_class = (GnomeCanvasClass *) klass;
- widget_class = (GtkWidgetClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = e_canvas_dispose;
-
- widget_class->key_press_event = e_canvas_key;
- widget_class->key_release_event = e_canvas_key;
- widget_class->button_press_event = e_canvas_button;
- widget_class->button_release_event = e_canvas_button;
- widget_class->focus_in_event = e_canvas_focus_in;
- widget_class->focus_out_event = e_canvas_focus_out;
- widget_class->style_set = e_canvas_style_set;
- widget_class->realize = e_canvas_realize;
- widget_class->unrealize = e_canvas_unrealize;
-
- klass->reflow = NULL;
-
- e_canvas_signals [REFLOW] =
- g_signal_new ("reflow",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECanvasClass, reflow),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-e_canvas_init (ECanvas *canvas)
-{
- canvas->selection = NULL;
- canvas->cursor = NULL;
- canvas->im_context = gtk_im_multicontext_new ();
- canvas->tooltip_window = NULL;
-}
-
-static void
-e_canvas_dispose (GObject *object)
-{
- ECanvas *canvas = E_CANVAS(object);
-
- if (canvas->idle_id)
- g_source_remove(canvas->idle_id);
- canvas->idle_id = 0;
-
- if (canvas->grab_cancelled_check_id)
- g_source_remove (canvas->grab_cancelled_check_id);
- canvas->grab_cancelled_check_id = 0;
-
- if (canvas->toplevel) {
- if (canvas->visibility_notify_id)
- g_signal_handler_disconnect (canvas->toplevel,
- canvas->visibility_notify_id);
- canvas->visibility_notify_id = 0;
-
- g_object_unref (canvas->toplevel);
- canvas->toplevel = NULL;
- }
-
- if (canvas->im_context) {
- g_object_unref (canvas->im_context);
- canvas->im_context = NULL;
- }
-
- e_canvas_hide_tooltip(canvas);
-
- if ((G_OBJECT_CLASS (parent_class))->dispose)
- (*(G_OBJECT_CLASS (parent_class))->dispose) (object);
-}
-
-GtkWidget *
-e_canvas_new ()
-{
- return GTK_WIDGET (g_object_new (E_CANVAS_TYPE, NULL));
-}
-
-
-/* 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;
-
- /* 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;
-
- if (canvas->grabbed_item)
- item = canvas->grabbed_item;
-
- /* Perform checks for grabbed items */
-
- 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 = gdk_event_copy (event);
-
- switch (ev->type) {
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- gnome_canvas_window_to_world (canvas,
- ev->crossing.x, ev->crossing.y,
- &ev->crossing.x, &ev->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,
- ev->motion.x, ev->motion.y,
- &ev->motion.x, &ev->motion.y);
- break;
-
- default:
- break;
- }
-
- /* 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) {
- g_object_ref (item);
-
- g_signal_emit_by_name (item, "event", ev, &finished);
-
- parent = item->parent;
- g_object_unref (item);
-
- item = parent;
- }
-
- gdk_event_free (ev);
-
- return finished;
-}
-
-/* Key event handler for the canvas */
-static gint
-e_canvas_key (GtkWidget *widget, GdkEventKey *event)
-{
- GnomeCanvas *canvas;
- GdkEvent full_event;
-
- 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);
-
- full_event.key = *event;
-
- return emit_event (canvas, &full_event);
-}
-
-
-/* This routine invokes the point method of the item. The argument x, y should
- * be in the parent's item-relative coordinate system. This routine applies the
- * inverse of the item's transform, maintaining the affine invariant.
- */
-#define HACKISH_AFFINE
-
-static double
-gnome_canvas_item_invoke_point (GnomeCanvasItem *item, double x, double y, int cx, int cy,
- GnomeCanvasItem **actual_item)
-{
-#ifdef HACKISH_AFFINE
- double i2w[6], w2c[6], i2c[6], c2i[6];
- ArtPoint c, i;
-#endif
-
-#ifdef HACKISH_AFFINE
- gnome_canvas_item_i2w_affine (item, i2w);
- gnome_canvas_w2c_affine (item->canvas, w2c);
- art_affine_multiply (i2c, i2w, w2c);
- art_affine_invert (c2i, i2c);
- c.x = cx;
- c.y = cy;
- art_affine_point (&i, &c, c2i);
- x = i.x;
- y = i.y;
-#endif
-
- return (* GNOME_CANVAS_ITEM_CLASS (GTK_OBJECT_GET_CLASS (item))->point) (
- item, x, y, cx, cy, actual_item);
-}
-
-/* Re-picks the current item in the canvas, based on the event's coordinates.
- * Also emits enter/leave events for items as appropriate.
- */
-#define DISPLAY_X1(canvas) (GNOME_CANVAS (canvas)->layout.xoffset)
-#define DISPLAY_Y1(canvas) (GNOME_CANVAS (canvas)->layout.yoffset)
-static int
-pick_current_item (GnomeCanvas *canvas, GdkEvent *event)
-{
- int button_down;
- double x, y;
- int cx, cy;
- int retval;
-
- retval = FALSE;
-
- /* If a button is down, we'll perform enter and leave events on the
- * current item, but not enter on any other item. This is more or less
- * like X pointer grabbing for canvas items.
- */
- button_down = canvas->state & (GDK_BUTTON1_MASK
- | GDK_BUTTON2_MASK
- | GDK_BUTTON3_MASK
- | GDK_BUTTON4_MASK
- | GDK_BUTTON5_MASK);
- d(g_print ("%s:%d: button_down = %s\n", __FUNCTION__, __LINE__, button_down ? "TRUE" : "FALSE"));
- if (!button_down)
- canvas->left_grabbed_item = FALSE;
-
- /* Save the event in the canvas. This is used to synthesize enter and
- * leave events in case the current item changes. It is also used to
- * re-pick the current item if the current one gets deleted. Also,
- * synthesize an enter event.
- */
- if (event != &canvas->pick_event) {
- if ((event->type == GDK_MOTION_NOTIFY) || (event->type == GDK_BUTTON_RELEASE)) {
- /* these fields have the same offsets in both types of events */
-
- canvas->pick_event.crossing.type = GDK_ENTER_NOTIFY;
- canvas->pick_event.crossing.window = event->motion.window;
- canvas->pick_event.crossing.send_event = event->motion.send_event;
- canvas->pick_event.crossing.subwindow = NULL;
- canvas->pick_event.crossing.x = event->motion.x;
- canvas->pick_event.crossing.y = event->motion.y;
- canvas->pick_event.crossing.mode = GDK_CROSSING_NORMAL;
- canvas->pick_event.crossing.detail = GDK_NOTIFY_NONLINEAR;
- canvas->pick_event.crossing.focus = FALSE;
- canvas->pick_event.crossing.state = event->motion.state;
-
- /* these fields don't have the same offsets in both types of events */
-
- if (event->type == GDK_MOTION_NOTIFY) {
- canvas->pick_event.crossing.x_root = event->motion.x_root;
- canvas->pick_event.crossing.y_root = event->motion.y_root;
- } else {
- canvas->pick_event.crossing.x_root = event->button.x_root;
- canvas->pick_event.crossing.y_root = event->button.y_root;
- }
- } else
- canvas->pick_event = *event;
- }
-
- /* Don't do anything else if this is a recursive call */
-
- if (canvas->in_repick)
- return retval;
-
- /* LeaveNotify means that there is no current item, so we don't look for one */
-
- if (canvas->pick_event.type != GDK_LEAVE_NOTIFY) {
- /* these fields don't have the same offsets in both types of events */
-
- if (canvas->pick_event.type == GDK_ENTER_NOTIFY) {
- x = canvas->pick_event.crossing.x + canvas->scroll_x1 - canvas->zoom_xofs;
- y = canvas->pick_event.crossing.y + canvas->scroll_y1 - canvas->zoom_yofs;
- } else {
- x = canvas->pick_event.motion.x + canvas->scroll_x1 - canvas->zoom_xofs;
- y = canvas->pick_event.motion.y + canvas->scroll_y1 - canvas->zoom_yofs;
- }
-
- /* canvas pixel coords */
-
- cx = (int) (x + 0.5);
- cy = (int) (y + 0.5);
-
- /* world coords */
-
- x = canvas->scroll_x1 + x / canvas->pixels_per_unit;
- y = canvas->scroll_y1 + y / canvas->pixels_per_unit;
-
- /* find the closest item */
-
- if (canvas->root->object.flags & GNOME_CANVAS_ITEM_VISIBLE)
- gnome_canvas_item_invoke_point (canvas->root, x, y, cx, cy,
- &canvas->new_current_item);
- else
- canvas->new_current_item = NULL;
- } else
- canvas->new_current_item = NULL;
-
- if ((canvas->new_current_item == canvas->current_item) && !canvas->left_grabbed_item)
- return retval; /* current item did not change */
-
- /* Synthesize events for old and new current items */
-
- if ((canvas->new_current_item != canvas->current_item)
- && (canvas->current_item != NULL)
- && !canvas->left_grabbed_item) {
- GdkEvent new_event;
- GnomeCanvasItem *item;
-
- item = canvas->current_item;
-
- new_event = canvas->pick_event;
- new_event.type = GDK_LEAVE_NOTIFY;
-
- new_event.crossing.detail = GDK_NOTIFY_ANCESTOR;
- new_event.crossing.subwindow = NULL;
- canvas->in_repick = TRUE;
- retval = emit_event (canvas, &new_event);
- canvas->in_repick = FALSE;
- }
-
- /* new_current_item may have been set to NULL during the call to emit_event() above */
-
- if ((canvas->new_current_item != canvas->current_item) && button_down) {
- canvas->left_grabbed_item = TRUE;
- return retval;
- }
-
- /* Handle the rest of cases */
-
- canvas->left_grabbed_item = FALSE;
- canvas->current_item = canvas->new_current_item;
-
- if (canvas->current_item != NULL) {
- GdkEvent new_event;
-
- new_event = canvas->pick_event;
- new_event.type = GDK_ENTER_NOTIFY;
- new_event.crossing.detail = GDK_NOTIFY_ANCESTOR;
- new_event.crossing.subwindow = NULL;
- retval = emit_event (canvas, &new_event);
- }
-
- return retval;
-}
-
-/* Button event handler for the canvas */
-static gint
-e_canvas_button (GtkWidget *widget, GdkEventButton *event)
-{
- GnomeCanvas *canvas;
- int mask;
- int retval;
-
- 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);
-
- retval = FALSE;
-
- canvas = GNOME_CANVAS (widget);
-
- d(g_print ("button %d, event type %d, grabbed=%p, current=%p\n",
- event->button,
- event->type,
- canvas->grabbed_item,
- canvas->current_item));
-
- /* dispatch normally regardless of the event's window if an item has
- has a pointer grab in effect */
- if (!canvas->grabbed_item && event->window != canvas->layout.bin_window)
- return retval;
-
- switch (event->button) {
- case 1:
- mask = GDK_BUTTON1_MASK;
- break;
- case 2:
- mask = GDK_BUTTON2_MASK;
- break;
- case 3:
- mask = GDK_BUTTON3_MASK;
- break;
- case 4:
- mask = GDK_BUTTON4_MASK;
- break;
- case 5:
- mask = GDK_BUTTON5_MASK;
- break;
- default:
- mask = 0;
- }
-
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- case GDK_2BUTTON_PRESS:
- case GDK_3BUTTON_PRESS:
- /* Pick the current item as if the button were not pressed, and
- * then process the event.
- */
- canvas->state = event->state;
- pick_current_item (canvas, (GdkEvent *) event);
- canvas->state ^= mask;
- retval = emit_event (canvas, (GdkEvent *) event);
- break;
-
- case GDK_BUTTON_RELEASE:
- /* Process the event as if the button were pressed, then repick
- * after the button has been released
- */
- canvas->state = event->state;
- retval = emit_event (canvas, (GdkEvent *) event);
- event->state ^= mask;
- canvas->state = event->state;
- pick_current_item (canvas, (GdkEvent *) event);
- event->state ^= mask;
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- return retval;
-}
-
-/* Key event handler for the canvas */
-static gint
-e_canvas_visibility (GtkWidget *widget, GdkEventVisibility *event, ECanvas *canvas)
-{
- if (! canvas->visibility_first) {
- e_canvas_hide_tooltip(canvas);
- }
- canvas->visibility_first = FALSE;
-
- return FALSE;
-}
-
-
-/**
- * e_canvas_item_grab_focus:
- * @item: A canvas item.
- * @widget_too: Whether or not to grab the widget-level focus too
- *
- * 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 and @widget_too is %TRUE, it grabs that focus as well.
- **/
-void
-e_canvas_item_grab_focus (GnomeCanvasItem *item, gboolean widget_too)
-{
- 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 (widget_too && !GTK_WIDGET_HAS_FOCUS (GTK_WIDGET(item->canvas))) {
- gtk_widget_grab_focus (GTK_WIDGET (item->canvas));
- }
-
- if (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;
- GdkEvent full_event;
-
- canvas = GNOME_CANVAS (widget);
- ecanvas = E_CANVAS (widget);
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
-
- gtk_im_context_focus_in (ecanvas->im_context);
-
- if (canvas->focused_item) {
- full_event.focus_change = *event;
- return emit_event (canvas, &full_event);
- } else {
- return FALSE;
- }
-}
-
-/* Focus out handler for the canvas */
-static gint
-e_canvas_focus_out (GtkWidget *widget, GdkEventFocus *event)
-{
- GnomeCanvas *canvas;
- ECanvas *ecanvas;
- GdkEvent full_event;
-
- canvas = GNOME_CANVAS (widget);
- ecanvas = E_CANVAS (widget);
-
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
-
- gtk_im_context_focus_out (ecanvas->im_context);
-
- if (canvas->focused_item) {
- full_event.focus_change = *event;
- return emit_event (canvas, &full_event);
- } else {
- return FALSE;
- }
-}
-
-static void
-ec_style_set_recursive (GnomeCanvasItem *item, GtkStyle *previous_style)
-{
- guint signal_id = g_signal_lookup ("style_set", G_OBJECT_TYPE (item));
- if (signal_id >= 1) {
- GSignalQuery query;
- g_signal_query (signal_id, &query);
- if (query.return_type == GTK_TYPE_NONE && query.n_params == 1 && query.param_types[0] == GTK_TYPE_STYLE) {
- g_signal_emit (item, signal_id, 0, previous_style);
- }
- }
-
- if (GNOME_IS_CANVAS_GROUP (item) ) {
- GList *items = GNOME_CANVAS_GROUP (item)->item_list;
- for (; items; items = items->next)
- ec_style_set_recursive (items->data, previous_style);
- }
-}
-
-static void
-e_canvas_style_set (GtkWidget *widget, GtkStyle *previous_style)
-{
- ec_style_set_recursive (GNOME_CANVAS_ITEM (gnome_canvas_root (GNOME_CANVAS (widget))), previous_style);
-}
-
-
-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);
-
- gtk_im_context_set_client_window (ecanvas->im_context, widget->window);
-}
-
-static void
-e_canvas_unrealize (GtkWidget *widget)
-{
- ECanvas * ecanvas = E_CANVAS (widget);
-
- if (ecanvas->idle_id) {
- g_source_remove(ecanvas->idle_id);
- ecanvas->idle_id = 0;
- }
-
- gtk_im_context_set_client_window (ecanvas->im_context, widget->window);
-
- 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 = (ECanvasItemReflowFunc)
- g_object_get_data (G_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;
-
- g_signal_emit (canvas,
- e_canvas_signals [REFLOW], 0);
-
- 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)
-{
- g_object_set_data(G_OBJECT(item), "ECanvasItem::reflow_callback", (gpointer) func);
-}
-
-
-void
-e_canvas_item_set_selection_callback (GnomeCanvasItem *item, ECanvasItemSelectionFunc func)
-{
- g_object_set_data(G_OBJECT(item), "ECanvasItem::selection_callback", (gpointer) func);
-}
-
-void
-e_canvas_item_set_selection_compare_callback (GnomeCanvasItem *item, ECanvasItemSelectionCompareFunc func)
-{
- g_object_set_data(G_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 = (ECanvasItemSelectionFunc)g_object_get_data(G_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);
- g_object_unref (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;
- g_object_ref (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 = (ECanvasItemSelectionFunc)g_object_get_data(G_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 = (ECanvasItemSelectionFunc)g_object_get_data(G_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 = (ECanvasItemSelectionCompareFunc)g_object_get_data(G_OBJECT(search->item),
- "ECanvasItem::selection_compare_callback");
-
- if (compare_func(search->item, search->id, id, 0) == 0) {
- canvas->cursor = search;
- func = (ECanvasItemSelectionFunc)g_object_get_data(G_OBJECT(item),
- "ECanvasItem::selection_callback");
- if (func)
- func(item, flags, search->id);
- return;
- }
- }
- }
-
- info = g_new(ECanvasSelectionInfo, 1);
- info->item = item;
- g_object_ref (info->item);
- info->id = id;
- g_message ("ECANVAS: new info (2): item %p, id %p", item, id);
-
- func = (ECanvasItemSelectionFunc)g_object_get_data(G_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 = (ECanvasItemSelectionCompareFunc)g_object_get_data(G_OBJECT(info->item),
- "ECanvasItem::selection_compare_callback");
-
- if (compare_func(info->item, info->id, id, 0) == 0) {
- ECanvasItemSelectionFunc func;
- func = (ECanvasItemSelectionFunc) g_object_get_data(G_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);
- g_object_unref (info->item);
- g_free(info);
- g_list_free_1(list);
- break;
- }
- }
- }
-}
-
-void e_canvas_popup_tooltip (ECanvas *canvas, GtkWidget *widget, int x, int y)
-{
- if (canvas->tooltip_window && canvas->tooltip_window != widget) {
- e_canvas_hide_tooltip(canvas);
- }
- canvas->tooltip_window = widget;
- canvas->visibility_first = TRUE;
- if (canvas->toplevel == NULL) {
- canvas->toplevel = gtk_widget_get_toplevel (GTK_WIDGET(canvas));
- if (canvas->toplevel) {
- gtk_widget_add_events(canvas->toplevel, GDK_VISIBILITY_NOTIFY_MASK);
- g_object_ref (canvas->toplevel);
- canvas->visibility_notify_id =
- g_signal_connect (canvas->toplevel, "visibility_notify_event",
- G_CALLBACK (e_canvas_visibility), canvas);
- }
- }
- gtk_widget_set_uposition (widget, x, y);
- gtk_widget_show (widget);
-}
-
-void e_canvas_hide_tooltip (ECanvas *canvas)
-{
- if (canvas->tooltip_window) {
- gtk_widget_destroy (canvas->tooltip_window);
- canvas->tooltip_window = NULL;
- }
-}
-
-
-static gboolean
-grab_cancelled_check (gpointer data)
-{
- ECanvas *canvas = data;
-
- if (GNOME_CANVAS (canvas)->grabbed_item == NULL) {
- canvas->grab_cancelled_cb = NULL;
- canvas->grab_cancelled_check_id = 0;
- canvas->grab_cancelled_time = 0;
- canvas->grab_cancelled_data = NULL;
- return FALSE;
- }
-
- if (gtk_grab_get_current ()) {
- gnome_canvas_item_ungrab(GNOME_CANVAS (canvas)->grabbed_item, canvas->grab_cancelled_time);
- if (canvas->grab_cancelled_cb) {
- canvas->grab_cancelled_cb (canvas,
- GNOME_CANVAS (canvas)->grabbed_item,
- canvas->grab_cancelled_data);
- }
- canvas->grab_cancelled_cb = NULL;
- canvas->grab_cancelled_check_id = 0;
- canvas->grab_cancelled_time = 0;
- canvas->grab_cancelled_data = NULL;
- return FALSE;
- }
- return TRUE;
-}
-
-int
-e_canvas_item_grab (ECanvas *canvas,
- GnomeCanvasItem *item,
- guint event_mask,
- GdkCursor *cursor,
- guint32 etime,
- ECanvasItemGrabCancelled cancelled_cb,
- gpointer cancelled_data)
-{
- if (gtk_grab_get_current ()) {
- return AlreadyGrabbed;
- } else {
- int ret_val = gnome_canvas_item_grab (item, event_mask, cursor, etime);
- if (ret_val == GrabSuccess) {
- canvas->grab_cancelled_cb = cancelled_cb;
- canvas->grab_cancelled_check_id =
- g_timeout_add_full (G_PRIORITY_LOW,
- 100,
- grab_cancelled_check,
- canvas,
- NULL);
- canvas->grab_cancelled_time = etime;
- canvas->grab_cancelled_data = cancelled_data;
- }
-
- return ret_val;
- }
-}
-
-void
-e_canvas_item_ungrab (ECanvas *canvas,
- GnomeCanvasItem *item,
- guint32 etime)
-{
- if (canvas->grab_cancelled_check_id) {
- g_source_remove (canvas->grab_cancelled_check_id);
- canvas->grab_cancelled_cb = NULL;
- canvas->grab_cancelled_check_id = 0;
- canvas->grab_cancelled_time = 0;
- canvas->grab_cancelled_data = NULL;
- gnome_canvas_item_ungrab (item, etime);
- }
-}
diff --git a/widgets/misc/e-canvas.h b/widgets/misc/e-canvas.h
deleted file mode 100644
index 092833430b..0000000000
--- a/widgets/misc/e-canvas.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_CANVAS_H__
-#define __E_CANVAS_H__
-
-#include <gtk/gtkimcontext.h>
-#include <libgnomecanvas/gnome-canvas.h>
-
-#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) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_CANVAS_TYPE, ECanvas))
-#define E_CANVAS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_CANVAS_TYPE, ECanvasClass))
-#define E_IS_CANVAS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_CANVAS_TYPE))
-#define E_IS_CANVAS_CLASS(klass) (G_TYPE_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;
-
-typedef void (*ECanvasItemGrabCancelled) (ECanvas *canvas, GnomeCanvasItem *item, gpointer data);
-
-struct _ECanvas
-{
- GnomeCanvas parent;
- int idle_id;
- GList *selection;
- ECanvasSelectionInfo *cursor;
-
- GtkWidget *tooltip_window;
- int visibility_notify_id;
- GtkWidget *toplevel;
-
- guint visibility_first : 1;
-
- /* Input context for dead key support */
- GtkIMContext *im_context;
-
- ECanvasItemGrabCancelled grab_cancelled_cb;
- guint grab_cancelled_check_id;
- guint32 grab_cancelled_time;
- gpointer grab_cancelled_data;
-};
-
-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,
- gboolean widget_too);
-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);
-
-int e_canvas_item_grab (ECanvas *canvas,
- GnomeCanvasItem *item,
- guint event_mask,
- GdkCursor *cursor,
- guint32 etime,
- ECanvasItemGrabCancelled cancelled,
- gpointer cancelled_data);
-void e_canvas_item_ungrab (ECanvas *canvas,
- GnomeCanvasItem *item,
- guint32 etime);
-
-/* Not implemented yet. */
-void e_canvas_item_set_cursor_end (GnomeCanvasItem *item,
- gpointer id);
-void e_canvas_popup_tooltip (ECanvas *canvas,
- GtkWidget *widget,
- int x,
- int y);
-void e_canvas_hide_tooltip (ECanvas *canvas);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_CANVAS_H__ */
diff --git a/widgets/misc/e-colors.c b/widgets/misc/e-colors.c
deleted file mode 100644
index 3f16437bee..0000000000
--- a/widgets/misc/e-colors.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-colors.c - General color allocation utilities
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@kernel.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/* We keep our own color context, as the color allocation might take
- * place before things are realized.
- */
-
-#include <config.h>
-#include <gtk/gtkwidget.h>
-#include "e-colors.h"
-
-GdkColor e_white, e_dark_gray, e_black;
-
-gulong
-e_color_alloc (gushort red, gushort green, gushort blue)
-{
- e_color_init ();
-
- red >>= 8;
- green >>= 8;
- blue >>= 8;
- return gdk_rgb_xpixel_from_rgb (
- ((red & 0xff) << 16) | ((green & 0xff) << 8) |
- (blue & 0xff));
-}
-
-void
-e_color_alloc_gdk (GtkWidget *widget, GdkColor *c)
-{
- GdkColormap *map;
-
- e_color_init ();
-
- if (widget)
- map = gtk_widget_get_colormap (widget);
- else /* FIXME: multi depth broken ? */
- map = gtk_widget_get_default_colormap ();
-
- gdk_rgb_find_color (map, c);
-}
-
-void
-e_color_alloc_name (GtkWidget *widget, const char *name, GdkColor *c)
-{
- GdkColormap *map;
-
- e_color_init ();
-
- gdk_color_parse (name, c);
-
- if (widget)
- map = gtk_widget_get_colormap (widget);
- else /* FIXME: multi depth broken ? */
- map = gtk_widget_get_default_colormap ();
-
- gdk_rgb_find_color (map, c);
-}
-
-void
-e_color_init (void)
-{
- static gboolean e_color_inited = FALSE;
-
- /* It's surprisingly easy to end up calling this twice. Survive. */
- if (e_color_inited)
- return;
-
- e_color_inited = TRUE;
-
- /* Allocate the default colors */
- e_white.red = 65535;
- e_white.green = 65535;
- e_white.blue = 65535;
- e_color_alloc_gdk (NULL, &e_white);
-
- e_black.red = 0;
- e_black.green = 0;
- e_black.blue = 0;
- e_color_alloc_gdk (NULL, &e_black);
-
- e_color_alloc_name (NULL, "gray20", &e_dark_gray);
-}
-
diff --git a/widgets/misc/e-colors.h b/widgets/misc/e-colors.h
deleted file mode 100644
index 596fd2b0a5..0000000000
--- a/widgets/misc/e-colors.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-colors.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@kernel.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef GNOME_APP_LIBS_COLOR_H
-#define GNOME_APP_LIBS_COLOR_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-#include <gtk/gtkwidget.h>
-
-G_BEGIN_DECLS
-
-void e_color_init (void);
-
-/* Return the pixel value for the given red, green and blue */
-gulong e_color_alloc (gushort red, gushort green, gushort blue);
-void e_color_alloc_name (GtkWidget *widget, const char *name, GdkColor *color);
-void e_color_alloc_gdk (GtkWidget *widget, GdkColor *color);
-
-extern GdkColor e_white, e_dark_gray, e_black;
-
-G_END_DECLS
-
-#endif /* GNOME_APP_LIBS_COLOR_H */
diff --git a/widgets/misc/e-cursors.c b/widgets/misc/e-cursors.c
deleted file mode 100644
index 3b44ab809e..0000000000
--- a/widgets/misc/e-cursors.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cursors.c - cursor handling for gnumeric
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-cursors.h"
-
-#include "e-colors.h"
-#include "pixmaps/cursor_cross.xpm"
-#include "pixmaps/cursor_zoom_in.xpm"
-#include "pixmaps/cursor_zoom_out.xpm"
-#include "pixmaps/cursor_hand_open.xpm"
-#include "pixmaps/cursor_hand_closed.xpm"
-#include <stdio.h>
-
-#define GDK_INTERNAL_CURSOR -1
-
-typedef struct {
- GdkCursor *cursor;
- int hot_x, hot_y;
- char **xpm;
-} CursorDef;
-
-static CursorDef cursors [] = {
- { NULL, 17, 17, cursor_cross_xpm },
- { NULL, GDK_INTERNAL_CURSOR, GDK_CROSSHAIR, NULL },
- { NULL, GDK_INTERNAL_CURSOR, GDK_ARROW, NULL },
- { NULL, GDK_INTERNAL_CURSOR, GDK_FLEUR, NULL },
- { NULL, 24, 24, cursor_zoom_in_xpm },
- { NULL, 24, 24, cursor_zoom_out_xpm },
- { NULL, GDK_INTERNAL_CURSOR, GDK_SB_H_DOUBLE_ARROW, NULL },
- { NULL, GDK_INTERNAL_CURSOR, GDK_SB_V_DOUBLE_ARROW, NULL },
- { NULL, GDK_INTERNAL_CURSOR, GDK_SIZING, NULL },
- { NULL, GDK_INTERNAL_CURSOR, GDK_SIZING, NULL },
- { NULL, GDK_INTERNAL_CURSOR, GDK_HAND2, NULL },
- { NULL, 10, 10, cursor_hand_open_xpm },
- { NULL, 10, 10, cursor_hand_closed_xpm },
- { NULL, GDK_INTERNAL_CURSOR, GDK_XTERM, NULL },
- { NULL, 0, 0, NULL }
-};
-
-
-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)
-{
- int i;
-
- e_color_init ();
-
- 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,
- &e_black, &e_white,
- cursors [i].hot_x,
- cursors [i].hot_y);
- }
- }
-
- g_assert (i == E_CURSOR_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_CURSOR_NUM_CURSORS, NULL);
-
- return cursors [type].cursor;
-}
diff --git a/widgets/misc/e-cursors.h b/widgets/misc/e-cursors.h
deleted file mode 100644
index 8e751b659d..0000000000
--- a/widgets/misc/e-cursors.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cursors.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef GNOME_APP_LIB_CURSORS_H
-#define GNOME_APP_LIB_CURSORS_H
-
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS
-
-typedef enum {
- E_CURSOR_FAT_CROSS,
- E_CURSOR_THIN_CROSS,
- E_CURSOR_ARROW,
- E_CURSOR_MOVE,
- E_CURSOR_ZOOM_IN,
- E_CURSOR_ZOOM_OUT,
- E_CURSOR_SIZE_X,
- E_CURSOR_SIZE_Y,
- E_CURSOR_SIZE_TL,
- E_CURSOR_SIZE_TR,
- E_CURSOR_PRESS,
- E_CURSOR_HAND_OPEN,
- E_CURSOR_HAND_CLOSED,
- E_CURSOR_XTERM,
- E_CURSOR_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);
-
-G_END_DECLS
-
-#endif /* GNOME_APP_LIB_CURSORS_H */
diff --git a/widgets/misc/e-gui-utils.c b/widgets/misc/e-gui-utils.c
deleted file mode 100644
index 886fb3d7ca..0000000000
--- a/widgets/misc/e-gui-utils.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-gui-utils.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-gui-utils.h"
-
-#include <gtk/gtkentry.h>
-#include <gtk/gtksignal.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <libgnomecanvas/gnome-canvas-pixbuf.h>
-
-void
-e_auto_kill_popup_menu_on_selection_done (GtkMenu *menu)
-{
- g_return_if_fail (GTK_IS_MENU (menu));
-
- g_signal_connect (menu, "selection_done", G_CALLBACK (gtk_widget_destroy), menu);
-}
-
-void
-e_popup_menu (GtkMenu *menu, GdkEvent *event)
-{
- g_return_if_fail (GTK_IS_MENU (menu));
-
- e_auto_kill_popup_menu_on_selection_done (menu);
-
- if (event) {
- if (event->type == GDK_KEY_PRESS)
- gtk_menu_popup (menu, NULL, NULL, 0, NULL, 0,
- event->key.time);
- else if ((event->type == GDK_BUTTON_PRESS) ||
- (event->type == GDK_BUTTON_RELEASE) ||
- (event->type == GDK_2BUTTON_PRESS) ||
- (event->type == GDK_3BUTTON_PRESS)){
- gtk_menu_popup (menu, NULL, NULL, 0, NULL,
- event->button.button,
- event->button.time);
- }
- } else
- gtk_menu_popup (menu, NULL, NULL, 0, NULL, 0,
- GDK_CURRENT_TIME);
-}
-
-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) g_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 (focus_child == NULL)
- return FALSE;
-
- 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_widget_child_focus (GTK_WIDGET (child), direction)) {
- g_signal_stop_emission_by_name (container, "focus");
- return TRUE;
- }
- }
- }
- else if (GTK_WIDGET_DRAWABLE (child)) {
- if (GTK_IS_CONTAINER (child)) {
- if (gtk_widget_child_focus (GTK_WIDGET (child), direction)) {
- g_signal_stop_emission_by_name (container, "focus");
- return TRUE;
- }
- }
- else if (GTK_WIDGET_CAN_FOCUS (child)) {
- gtk_widget_grab_focus (child);
- g_signal_stop_emission_by_name (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) g_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);
-}
-
-struct widgetandint {
- GtkWidget *widget;
- int count;
-};
-
-static void
-nth_entry_callback(GtkWidget *widget, struct widgetandint *data)
-{
- if (GTK_IS_ENTRY(widget)) {
- if (data->count > 1) {
- data->count --;
- data->widget = widget;
- } else if (data->count == 1) {
- data->count --;
- data->widget = NULL;
- gtk_widget_grab_focus(widget);
- }
- }
-}
-
-void
-e_container_focus_nth_entry(GtkContainer *container, int n)
-{
- struct widgetandint data;
- data.widget = NULL;
- data.count = n;
- e_container_foreach_leaf(container, (GtkCallback) nth_entry_callback, &data);
- if (data.widget)
- gtk_widget_grab_focus(data.widget);
-}
-
-gboolean
-e_glade_xml_connect_widget (GladeXML *gui, char *name, char *signal, GCallback cb, gpointer closure)
-{
- GtkWidget *widget;
-
- widget = glade_xml_get_widget (gui, name);
-
- if (widget) {
- g_signal_connect (widget, signal,
- cb, closure);
- return TRUE;
- }
-
- return FALSE;
-}
-
-gboolean
-e_glade_xml_set_sensitive (GladeXML *gui, char *name, gboolean sensitive)
-{
- GtkWidget *widget;
-
- widget = glade_xml_get_widget (gui, name);
-
- if (widget) {
- gtk_widget_set_sensitive (widget, sensitive);
- return TRUE;
- }
-
- return FALSE;
-}
diff --git a/widgets/misc/e-gui-utils.h b/widgets/misc/e-gui-utils.h
deleted file mode 100644
index c52e233714..0000000000
--- a/widgets/misc/e-gui-utils.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-gui-utils.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef GAL_GUI_UTILS_H
-#define GAL_GUI_UTILS_H
-
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkwindow.h>
-
-#include <glade/glade-xml.h>
-
-G_BEGIN_DECLS
-
-void e_popup_menu (GtkMenu *menu,
- GdkEvent *event);
-void e_auto_kill_popup_menu_on_selection_done (GtkMenu *menu);
-
-void e_container_foreach_leaf (GtkContainer *container,
- GtkCallback callback,
- gpointer closure);
-void e_container_focus_nth_entry (GtkContainer *container,
- int n);
-gint e_container_change_tab_order (GtkContainer *container,
- GList *widgets);
-
-/* Returns TRUE on success. */
-gboolean e_glade_xml_connect_widget (GladeXML *gui,
- char *name,
- char *signal,
- GtkSignalFunc cb,
- gpointer closure);
-gboolean e_glade_xml_set_sensitive (GladeXML *gui,
- char *name,
- gboolean sensitive);
-
-G_END_DECLS
-
-#endif /* GAL_GUI_UTILS_H */
diff --git a/widgets/misc/e-hsv-utils.c b/widgets/misc/e-hsv-utils.c
deleted file mode 100644
index a5007b9b83..0000000000
--- a/widgets/misc/e-hsv-utils.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-hsv-utils.c - utilites for manipulating colours in HSV space
- * Copyright (C) 1995-2001 Seth Nickell, Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * Authors:
- * Seth Nickell <seth@eazel.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-hsv-utils.h"
-
-/* tweak_hsv is a really tweaky function. it modifies its first argument, which
- should be the colour you want tweaked. delta_h, delta_s and delta_v specify
- how much you want their respective channels modified (and in what direction).
- if it can't do the specified modification, it does it in the oppositon direction */
-void
-e_hsv_tweak (GdkColor *colour, gdouble delta_h, gdouble delta_s, gdouble delta_v)
-{
- gdouble h, s, v, r, g, b;
-
- r = colour->red / 65535.0f;
- g = colour->green / 65535.0f;
- b = colour->blue / 65535.0f;
-
- e_rgb_to_hsv (r, g, b, &h, &s, &v);
-
- if (h + delta_h < 0) {
- h -= delta_h;
- } else {
- h += delta_h;
- }
-
- if (s + delta_s < 0) {
- s -= delta_s;
- } else {
- s += delta_s;
- }
-
- if (v + delta_v < 0) {
- v -= delta_v;
- } else {
- v += delta_v;
- }
-
- e_hsv_to_rgb (h, s, v, &r, &g, &b);
-
- colour->red = r * 65535.0f;
- colour->green = g * 65535.0f;
- colour->blue = b * 65535.0f;
-}
-
-/* Copy n' Paste code from the GTK+ colour selector (gtkcolorsel.c) */
-/* Originally lifted, I suspect, from "Foley, van Dam" */
-void
-e_hsv_to_rgb (gdouble h, gdouble s, gdouble v,
- gdouble *r, gdouble *g, gdouble *b)
-{
- gint i;
- gdouble f, w, q, t;
-
- if (s == 0.0)
- s = 0.000001;
-
- if (h == -1.0)
- {
- *r = v;
- *g = v;
- *b = v;
- }
- else
- {
- if (h == 360.0)
- h = 0.0;
- h = h / 60.0;
- i = (gint) h;
- f = h - i;
- w = v * (1.0 - s);
- q = v * (1.0 - (s * f));
- t = v * (1.0 - (s * (1.0 - f)));
-
- switch (i)
- {
- case 0:
- *r = v;
- *g = t;
- *b = w;
- break;
- case 1:
- *r = q;
- *g = v;
- *b = w;
- break;
- case 2:
- *r = w;
- *g = v;
- *b = t;
- break;
- case 3:
- *r = w;
- *g = q;
- *b = v;
- break;
- case 4:
- *r = t;
- *g = w;
- *b = v;
- break;
- case 5:
- *r = v;
- *g = w;
- *b = q;
- break;
- }
- }
-}
-
-void
-e_rgb_to_hsv (gdouble r, gdouble g, gdouble b,
- gdouble *h, gdouble *s, gdouble *v)
-{
- double max, min, delta;
-
- max = r;
- if (g > max)
- max = g;
- if (b > max)
- max = b;
-
- min = r;
- if (g < min)
- min = g;
- if (b < min)
- min = b;
-
- *v = max;
-
- if (max != 0.0)
- *s = (max - min) / max;
- else
- *s = 0.0;
-
- if (*s == 0.0)
- *h = -1.0;
- else
- {
- delta = max - min;
-
- if (r == max)
- *h = (g - b) / delta;
- else if (g == max)
- *h = 2.0 + (b - r) / delta;
- else if (b == max)
- *h = 4.0 + (r - g) / delta;
-
- *h = *h * 60.0;
-
- if (*h < 0.0)
- *h = *h + 360;
- }
-}
-
-
diff --git a/widgets/misc/e-hsv-utils.h b/widgets/misc/e-hsv-utils.h
deleted file mode 100644
index bbde282697..0000000000
--- a/widgets/misc/e-hsv-utils.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-hsv-utils.h - utilites for manipulating colours in HSV space
- * Copyright (C) 1995-2001 Seth Nickell, Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * Authors:
- * Seth Nickell <seth@eazel.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_HSV_UTILS_H_
-#define _E_HSV_UTILS_H_
-
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS
-
-void e_hsv_to_rgb (gdouble h,
- gdouble s,
- gdouble v,
- gdouble *r,
- gdouble *g,
- gdouble *b);
-
-void e_rgb_to_hsv (gdouble r,
- gdouble g,
- gdouble b,
- gdouble *h,
- gdouble *s,
- gdouble *v);
-
-void e_hsv_tweak (GdkColor *colour,
- gdouble delta_h,
- gdouble delta_s,
- gdouble delta_v);
-
-G_END_DECLS
-
-#endif /* _E_HSV_UTILS_H_ */
diff --git a/widgets/misc/e-popup-menu.c b/widgets/misc/e-popup-menu.c
deleted file mode 100644
index 8607cd1b01..0000000000
--- a/widgets/misc/e-popup-menu.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-popup-menu.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Jody Goldberg (jgoldberg@home.com)
- * Jeffrey Stedfast <fejj@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include <gtk/gtkimage.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkaccellabel.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkcheckmenuitem.h>
-#include <gtk/gtkradiomenuitem.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkimagemenuitem.h>
-
-#include "e-popup-menu.h"
-#include "e-gui-utils.h"
-
-#include <gal/util/e-i18n.h>
-
-/*
- * Creates an item with an optional icon
- */
-static void
-make_item (GtkMenu *menu, GtkMenuItem *item, const char *name, GtkWidget *pixmap)
-{
- GtkWidget *label;
-
- if (*name == '\0')
- return;
-
- /*
- * Ugh. This needs to go into Gtk+
- */
- label = gtk_label_new_with_mnemonic (name);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
-
- gtk_container_add (GTK_CONTAINER (item), label);
-
- if (pixmap && GTK_IS_IMAGE_MENU_ITEM (item)){
- gtk_widget_show (pixmap);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), pixmap);
- }
-}
-
-GtkMenu *
-e_popup_menu_create (EPopupMenu *menu_list,
- guint32 disable_mask,
- guint32 hide_mask,
- void *default_closure)
-{
- return e_popup_menu_create_with_domain (menu_list,
- disable_mask,
- hide_mask,
- default_closure,
- NULL);
-}
-
-
-GtkMenu *
-e_popup_menu_create_with_domain (EPopupMenu *menu_list,
- guint32 disable_mask,
- guint32 hide_mask,
- void *default_closure,
- const char *domain)
-{
- GtkMenu *menu = GTK_MENU (gtk_menu_new ());
- GSList *group = NULL;
- gboolean last_item_separator = TRUE;
- int last_non_separator = -1;
- int i;
-
- for (i = 0; menu_list[i].name; i++) {
- if (strcmp ("", menu_list[i].name) && !(menu_list [i].disable_mask & hide_mask)) {
- last_non_separator = i;
- }
- }
-
- for (i = 0; i <= last_non_separator; i++) {
- gboolean separator;
-
- separator = !strcmp ("", menu_list[i].name);
-
- if ((!(separator && last_item_separator)) && !(menu_list [i].disable_mask & hide_mask)) {
- GtkWidget *item = NULL;
-
- if (!separator) {
- if (menu_list[i].is_toggle)
- item = gtk_check_menu_item_new ();
- else if (menu_list[i].is_radio)
- item = gtk_radio_menu_item_new (group);
- else
- item = menu_list[i].pixmap_widget ? gtk_image_menu_item_new () : gtk_menu_item_new ();
- if (menu_list[i].is_toggle || menu_list[i].is_radio)
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), menu_list[i].is_active);
- if (menu_list[i].is_radio)
- group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item));
-
- make_item (menu, GTK_MENU_ITEM (item), dgettext(domain, menu_list[i].name), menu_list[i].pixmap_widget);
- } else {
- item = gtk_menu_item_new ();
- }
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- if (!menu_list[i].submenu) {
- if (menu_list[i].fn)
- g_signal_connect (item, "activate",
- G_CALLBACK (menu_list[i].fn),
- menu_list[i].use_custom_closure ? menu_list[i].closure : default_closure);
- } else {
- /* submenu */
- GtkMenu *submenu;
-
- submenu = e_popup_menu_create (menu_list[i].submenu, disable_mask, hide_mask,
- default_closure);
-
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), GTK_WIDGET (submenu));
- }
-
- if (menu_list[i].disable_mask & disable_mask)
- gtk_widget_set_sensitive (item, FALSE);
-
- gtk_widget_show (item);
-
- last_item_separator = separator;
- }
- }
-
- return menu;
-}
-
-void
-e_popup_menu_run (EPopupMenu *menu_list, GdkEvent *event, guint32 disable_mask, guint32 hide_mask, void *default_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, default_closure);
-
- e_popup_menu (menu, event);
-}
-
-void
-e_popup_menu_copy_1 (EPopupMenu *destination,
- const EPopupMenu *source)
-{
- destination->name = g_strdup (source->name);
- destination->pixname = g_strdup (source->pixname);
- destination->fn = source->fn;
- destination->submenu = e_popup_menu_copy (source->submenu);
- destination->disable_mask = source->disable_mask;
-
- destination->pixmap_widget = source->pixmap_widget;
- if (destination->pixmap_widget)
- g_object_ref (destination->pixmap_widget);
- destination->closure = source->closure;
-
- destination->is_toggle = source->is_toggle;
- destination->is_radio = source->is_radio;
- destination->is_active = source->is_active;
-
- destination->use_custom_closure = source->use_custom_closure;
-}
-
-void
-e_popup_menu_free_1 (EPopupMenu *menu_item)
-{
- g_free (menu_item->name);
- g_free (menu_item->pixname);
- e_popup_menu_free (menu_item->submenu);
-
- if (menu_item->pixmap_widget)
- g_object_unref (menu_item->pixmap_widget);
-}
-
-EPopupMenu *
-e_popup_menu_copy (const EPopupMenu *menu_list)
-{
- int i;
- EPopupMenu *ret_val;
-
- if (menu_list == NULL)
- return NULL;
-
- for (i = 0; menu_list[i].name; i++) {
- /* Intentionally empty */
- }
-
- ret_val = g_new (EPopupMenu, i + 1);
-
- for (i = 0; menu_list[i].name; i++) {
- e_popup_menu_copy_1 (ret_val + i, menu_list + i);
- }
-
- /* Copy the terminator */
- e_popup_menu_copy_1 (ret_val + i, menu_list + i);
-
- return ret_val;
-}
-
-void
-e_popup_menu_free (EPopupMenu *menu_list)
-{
- int i;
-
- if (menu_list == NULL)
- return;
-
- for (i = 0; menu_list[i].name; i++) {
- e_popup_menu_free_1 (menu_list + i);
- }
- g_free (menu_list);
-}
-
diff --git a/widgets/misc/e-popup-menu.h b/widgets/misc/e-popup-menu.h
deleted file mode 100644
index 7289ab5c86..0000000000
--- a/widgets/misc/e-popup-menu.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-popup-menu.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Jody Goldberg (jgoldberg@home.com)
- * Jeffrey Stedfast <fejj@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_POPUP_MENU_H
-#define E_POPUP_MENU_H
-
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkwidget.h>
-
-G_BEGIN_DECLS
-
-#define E_POPUP_SEPARATOR { "", NULL, (NULL), NULL, 0 }
-#define E_POPUP_TERMINATOR { NULL, NULL, (NULL), NULL, 0 }
-
-
-/* In the following, CC = custom closure */
-
-#define E_POPUP_ITEM(name,fn,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-#define E_POPUP_ITEM_CC(name,fn,closure,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), NULL, (closure), 0, 0, 0, 1 }
-#define E_POPUP_SUBMENU(name,submenu,disable_mask) { (name), NULL, NULL, (submenu), (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-
-#define E_POPUP_PIXMAP_ITEM(name,pixmap,fn,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-#define E_POPUP_PIXMAP_ITEM_CC(name,pixmap,fn,closure,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, (closure), 0, 0, 0, 1 }
-#define E_POPUP_PIXMAP_SUBMENU(name,pixmap,submenu,disable_mask) { (name), (pixmap), NULL, (submenu), (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-
-#define E_POPUP_PIXMAP_WIDGET_ITEM(name,pixmap_widget,fn,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), NULL, 0, 0, 0, 0 }
-#define E_POPUP_PIXMAP_WIDGET_ITEM_CC(name,pixmap_widget,fn,closure,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), (closure), 0, 0, 0, 1 }
-#define E_POPUP_PIXMAP_WIDGET_SUBMENU(name,pixmap_widget,submenu,disable_mask) { (name), NULL, NULL, (submenu), (disable_mask), (pixmap_widget), NULL, 0, 0, 0, 0 }
-
-
-#define E_POPUP_TOGGLE_ITEM(name,fn,disable_mask,value) { (name), NULL, (fn), NULL, (disable_mask), NULL, NULL, 1, 0, value, 0 }
-#define E_POPUP_TOGGLE_ITEM_CC(name,fn,closure,disable_mask,value) { (name), NULL, (fn), NULL, (disable_mask), NULL, (closure), 1, 0, value, 1 }
-
-#define E_POPUP_SEPARATOR { "", NULL, (NULL), NULL, 0 }
-#define E_POPUP_TERMINATOR { NULL, NULL, (NULL), NULL, 0 }
-
-
-/* In the following, CC = custom closure */
-
-#define E_POPUP_ITEM(name,fn,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-#define E_POPUP_ITEM_CC(name,fn,closure,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), NULL, (closure), 0, 0, 0, 1 }
-#define E_POPUP_SUBMENU(name,submenu,disable_mask) { (name), NULL, NULL, (submenu), (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-
-#define E_POPUP_PIXMAP_ITEM(name,pixmap,fn,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-#define E_POPUP_PIXMAP_ITEM_CC(name,pixmap,fn,closure,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, (closure), 0, 0, 0, 1 }
-#define E_POPUP_PIXMAP_SUBMENU(name,pixmap,submenu,disable_mask) { (name), (pixmap), NULL, (submenu), (disable_mask), NULL, NULL, 0, 0, 0, 0 }
-
-#define E_POPUP_PIXMAP_WIDGET_ITEM(name,pixmap_widget,fn,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), NULL, 0, 0, 0, 0 }
-#define E_POPUP_PIXMAP_WIDGET_ITEM_CC(name,pixmap_widget,fn,closure,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), (closure), 0, 0, 0, 1 }
-#define E_POPUP_PIXMAP_WIDGET_SUBMENU(name,pixmap_widget,submenu,disable_mask) { (name), NULL, NULL, (submenu), (disable_mask), (pixmap_widget), NULL, 0, 0, 0, 0 }
-
-
-#define E_POPUP_TOGGLE_ITEM(name,fn,disable_mask,value) { (name), NULL, (fn), NULL, (disable_mask), NULL, NULL, 1, 0, value, 0 }
-#define E_POPUP_TOGGLE_ITEM_CC(name,fn,closure,disable_mask,value) { (name), NULL, (fn), NULL, (disable_mask), NULL, (closure), 1, 0, value, 1 }
-
-#define E_POPUP_TOGGLE_PIXMAP_ITEM(name,pixmap,fn,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, NULL, 1, 0, value, 0 }
-#define E_POPUP_TOGGLE_PIXMAP_ITEM_CC(name,pixmap,fn,closure,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, (closure), 1, 0, value, 1 }
-
-#define E_POPUP_TOGGLE_PIXMAP_WIDGET_ITEM(name,pixmap_widget,fn,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), NULL, 1, 0, value, 0 }
-#define E_POPUP_TOGGLE_PIXMAP_WIDGET_ITEM_CC(name,pixmap_widget,fn,closure,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), (closure), 1, 0, value, 1 }
-
-
-#define E_POPUP_RADIO_ITEM(name,fn,disable_mask,value) { (name), NULL, (fn), NULL, (disable_mask), NULL, NULL, 0, 1, value, 0 }
-#define E_POPUP_RADIO_ITEM_CC(name,fn,closure,disable_mask,value) { (name), NULL, (fn), NULL, (disable_mask), NULL, (closure), 0, 1, value, 1 }
-
-#define E_POPUP_RADIO_PIXMAP_ITEM(name,pixmap,fn,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, NULL, 0, 1, value, 0 }
-#define E_POPUP_RADIO_PIXMAP_ITEM_CC(name,pixmap,fn,closure,disable_mask) { (name), (pixmap), (fn), NULL, (disable_mask), NULL, (closure), 0, 1, value, 1 }
-
-#define E_POPUP_RADIO_PIXMAP_WIDGET_ITEM(name,pixmap_widget,fn,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), NULL, 0, 1, value, 0 }
-#define E_POPUP_RADIO_PIXMAP_WIDGET_ITEM_CC(name,pixmap_widget,fn,closure,disable_mask) { (name), NULL, (fn), NULL, (disable_mask), (pixmap_widget), (closure), 0, 1, value, 1 }
-
-
-typedef struct _EPopupMenu EPopupMenu;
-
-struct _EPopupMenu {
- char *name;
- char *pixname;
- GtkSignalFunc fn;
-
- EPopupMenu *submenu;
- guint32 disable_mask;
-
- /* Added post 0.19 */
- GtkWidget *pixmap_widget;
- void *closure;
-
- guint is_toggle : 1;
- guint is_radio : 1;
- guint is_active : 1;
-
- guint use_custom_closure : 1;
-};
-
-GtkMenu *e_popup_menu_create (EPopupMenu *menu_list,
- guint32 disable_mask,
- guint32 hide_mask,
- void *default_closure);
-GtkMenu *e_popup_menu_create_with_domain (EPopupMenu *menu_list,
- guint32 disable_mask,
- guint32 hide_mask,
- void *default_closure,
- const char *domain);
-void e_popup_menu_run (EPopupMenu *menu_list,
- GdkEvent *event,
- guint32 disable_mask,
- guint32 hide_mask,
- void *default_closure);
-
-/* Doesn't copy or free the memory. Just the contents. */
-void e_popup_menu_copy_1 (EPopupMenu *destination,
- const EPopupMenu *menu_item);
-void e_popup_menu_free_1 (EPopupMenu *menu_item);
-
-/* Copies or frees the entire structure. */
-EPopupMenu *e_popup_menu_copy (const EPopupMenu *menu_item);
-void e_popup_menu_free (EPopupMenu *menu_item);
-
-G_END_DECLS
-
-#endif /* E_POPUP_MENU_H */
diff --git a/widgets/misc/e-printable.c b/widgets/misc/e-printable.c
deleted file mode 100644
index 534f153823..0000000000
--- a/widgets/misc/e-printable.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-printable.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtksignal.h>
-#include "gal/util/e-util.h"
-#include "e-printable.h"
-
-#define EP_CLASS(e) ((EPrintableClass *)((GtkObject *)e)->klass)
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-
-
-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 = g_type_class_ref (PARENT_TYPE);
-
- e_printable_signals [PRINT_PAGE] =
- g_signal_new ("print_page",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EPrintableClass, print_page),
- NULL, NULL,
- e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOLEAN,
- G_TYPE_NONE, 4, G_TYPE_OBJECT, G_TYPE_DOUBLE,
- G_TYPE_DOUBLE, G_TYPE_BOOLEAN);
-
- e_printable_signals [DATA_LEFT] =
- g_signal_new ("data_left",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EPrintableClass, data_left),
- NULL, NULL,
- e_marshal_BOOLEAN__NONE,
- G_TYPE_BOOLEAN, 0, G_TYPE_NONE);
-
- e_printable_signals [RESET] =
- g_signal_new ("reset",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EPrintableClass, reset),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0, G_TYPE_NONE);
-
- e_printable_signals [HEIGHT] =
- g_signal_new ("height",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EPrintableClass, height),
- NULL, NULL,
- e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOLEAN,
- G_TYPE_DOUBLE, 4, G_TYPE_OBJECT, G_TYPE_DOUBLE,
- G_TYPE_DOUBLE, G_TYPE_BOOLEAN);
-
- e_printable_signals [WILL_FIT] =
- g_signal_new ("will_fit",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EPrintableClass, will_fit),
- NULL, NULL,
- e_marshal_BOOLEAN__OBJECT_DOUBLE_DOUBLE_BOOLEAN,
- G_TYPE_BOOLEAN, 4, G_TYPE_OBJECT, G_TYPE_DOUBLE,
- G_TYPE_DOUBLE, G_TYPE_BOOLEAN);
-
- klass->print_page = NULL;
- klass->data_left = NULL;
- klass->reset = NULL;
- klass->height = NULL;
- klass->will_fit = NULL;
-}
-
-
-E_MAKE_TYPE (e_printable,
- "EPrintable",
- EPrintable,
- e_printable_class_init,
- NULL,
- PARENT_TYPE)
-
-EPrintable *
-e_printable_new(void)
-{
- return E_PRINTABLE(g_object_new(E_PRINTABLE_TYPE, NULL));
-}
-
-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));
-
- g_signal_emit (e_printable,
- e_printable_signals [PRINT_PAGE], 0,
- 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);
-
- g_signal_emit (e_printable,
- e_printable_signals [DATA_LEFT], 0,
- &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));
-
- g_signal_emit (e_printable,
- e_printable_signals [RESET], 0);
-}
-
-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);
-
- g_signal_emit (e_printable,
- e_printable_signals [HEIGHT], 0,
- 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);
-
- g_signal_emit (e_printable,
- e_printable_signals [WILL_FIT], 0,
- context,
- width,
- max_height,
- quantized,
- &ret_val);
-
- return ret_val;
-}
diff --git a/widgets/misc/e-printable.h b/widgets/misc/e-printable.h
deleted file mode 100644
index 0c665f89c2..0000000000
--- a/widgets/misc/e-printable.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-printable.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_PRINTABLE_H_
-#define _E_PRINTABLE_H_
-
-#include <gtk/gtkobject.h>
-#include <libgnomeprint/gnome-print.h>
-
-G_BEGIN_DECLS
-
-#define E_PRINTABLE_TYPE (e_printable_get_type ())
-#define E_PRINTABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_PRINTABLE_TYPE, EPrintable))
-#define E_PRINTABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_PRINTABLE_TYPE, EPrintableClass))
-#define E_IS_PRINTABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_PRINTABLE_TYPE))
-#define E_IS_PRINTABLE_CLASS(k) (G_TYPE_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);
-
-G_END_DECLS
-
-#endif /* _E_PRINTABLE_H_ */
diff --git a/widgets/misc/e-reflow-model.c b/widgets/misc/e-reflow-model.c
deleted file mode 100644
index 33a5498df5..0000000000
--- a/widgets/misc/e-reflow-model.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-reflow-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-reflow-model.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-#define d(x)
-
-d(static gint depth = 0;)
-
-
-static GObjectClass *e_reflow_model_parent_class;
-
-enum {
- MODEL_CHANGED,
- COMPARISON_CHANGED,
- MODEL_ITEMS_INSERTED,
- MODEL_ITEM_CHANGED,
- MODEL_ITEM_REMOVED,
- LAST_SIGNAL
-};
-
-static guint e_reflow_model_signals [LAST_SIGNAL] = { 0, };
-
-/**
- * e_reflow_model_set_width:
- * @e_reflow_model: The e-reflow-model to operate on
- * @width: The new value for the width of each item.
- */
-void
-e_reflow_model_set_width (EReflowModel *e_reflow_model, int width)
-{
- g_return_if_fail (e_reflow_model != NULL);
- g_return_if_fail (E_IS_REFLOW_MODEL (e_reflow_model));
-
- E_REFLOW_MODEL_GET_CLASS (e_reflow_model)->set_width (e_reflow_model, width);
-}
-
-/**
- * e_reflow_model_count:
- * @e_reflow_model: The e-reflow-model to operate on
- *
- * Returns: the number of items in the reflow model.
- */
-int
-e_reflow_model_count (EReflowModel *e_reflow_model)
-{
- g_return_val_if_fail (e_reflow_model != NULL, 0);
- g_return_val_if_fail (E_IS_REFLOW_MODEL (e_reflow_model), 0);
-
- return E_REFLOW_MODEL_GET_CLASS (e_reflow_model)->count (e_reflow_model);
-}
-
-/**
- * e_reflow_model_height:
- * @e_reflow_model: The e-reflow-model to operate on
- * @n: The item number to get the height of.
- * @parent: The parent GnomeCanvasItem.
- *
- * Returns: the height of the nth item.
- */
-int
-e_reflow_model_height (EReflowModel *e_reflow_model, int n, GnomeCanvasGroup *parent)
-{
- g_return_val_if_fail (e_reflow_model != NULL, 0);
- g_return_val_if_fail (E_IS_REFLOW_MODEL (e_reflow_model), 0);
-
- return E_REFLOW_MODEL_GET_CLASS (e_reflow_model)->height (e_reflow_model, n, parent);
-}
-
-/**
- * e_reflow_model_incarnate:
- * @e_reflow_model: The e-reflow-model to operate on
- * @n: The item to create.
- * @parent: The parent GnomeCanvasItem to create a child of.
- *
- * Create a GnomeCanvasItem to represent the nth piece of data.
- *
- * Returns: the new GnomeCanvasItem.
- */
-GnomeCanvasItem *
-e_reflow_model_incarnate (EReflowModel *e_reflow_model, int n, GnomeCanvasGroup *parent)
-{
- g_return_val_if_fail (e_reflow_model != NULL, NULL);
- g_return_val_if_fail (E_IS_REFLOW_MODEL (e_reflow_model), NULL);
-
- return E_REFLOW_MODEL_GET_CLASS (e_reflow_model)->incarnate (e_reflow_model, n, parent);
-}
-
-/**
- * e_reflow_model_compare:
- * @e_reflow_model: The e-reflow-model to operate on
- * @n1: The first item to compare
- * @n2: The second item to compare
- *
- * Compares item n1 and item n2 to see which should come first.
- *
- * Returns: strcmp like semantics for the comparison value.
- */
-int
-e_reflow_model_compare (EReflowModel *e_reflow_model, int n1, int n2)
-{
-#if 0
- g_return_val_if_fail (e_reflow_model != NULL, 0);
- g_return_val_if_fail (E_IS_REFLOW_MODEL (e_reflow_model), 0);
-#endif
-
- return E_REFLOW_MODEL_GET_CLASS (e_reflow_model)->compare (e_reflow_model, n1, n2);
-}
-
-/**
- * e_reflow_model_reincarnate:
- * @e_reflow_model: The e-reflow-model to operate on
- * @n: The item to create.
- * @item: The item to reuse.
- *
- * Update item to represent the nth piece of data.
- */
-void
-e_reflow_model_reincarnate (EReflowModel *e_reflow_model, int n, GnomeCanvasItem *item)
-{
- g_return_if_fail (e_reflow_model != NULL);
- g_return_if_fail (E_IS_REFLOW_MODEL (e_reflow_model));
-
- E_REFLOW_MODEL_GET_CLASS (e_reflow_model)->reincarnate (e_reflow_model, n, item);
-}
-
-static void
-e_reflow_model_class_init (GObjectClass *object_class)
-{
- EReflowModelClass *klass = E_REFLOW_MODEL_CLASS(object_class);
- e_reflow_model_parent_class = g_type_class_ref (PARENT_TYPE);
-
- e_reflow_model_signals [MODEL_CHANGED] =
- g_signal_new ("model_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EReflowModelClass, model_changed),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_reflow_model_signals [COMPARISON_CHANGED] =
- g_signal_new ("comparison_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EReflowModelClass, comparison_changed),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_reflow_model_signals [MODEL_ITEMS_INSERTED] =
- g_signal_new ("model_items_inserted",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EReflowModelClass, model_items_inserted),
- NULL, NULL,
- e_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- e_reflow_model_signals [MODEL_ITEM_CHANGED] =
- g_signal_new ("model_item_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EReflowModelClass, model_item_changed),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- e_reflow_model_signals [MODEL_ITEM_REMOVED] =
- g_signal_new ("model_item_removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EReflowModelClass, model_item_removed),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- klass->set_width = NULL;
- klass->count = NULL;
- klass->height = NULL;
- klass->incarnate = NULL;
- klass->reincarnate = NULL;
-
- klass->model_changed = NULL;
- klass->comparison_changed = NULL;
- klass->model_items_inserted = NULL;
- klass->model_item_removed = NULL;
- klass->model_item_changed = NULL;
-}
-
-static void
-e_reflow_model_init (GObject *object)
-{
-}
-
-E_MAKE_TYPE(e_reflow_model, "EReflowModel", EReflowModel,
- e_reflow_model_class_init, e_reflow_model_init, PARENT_TYPE)
-
-#if d(!)0
-static void
-print_tabs (void)
-{
- int i;
- for (i = 0; i < depth; i++)
- g_print("\t");
-}
-#endif
-
-/**
- * e_reflow_model_changed:
- * @e_reflow_model: the reflow model to notify of the change
- *
- * Use this function to notify any views of this reflow model that
- * the contents of the reflow model have changed. This will emit
- * the signal "model_changed" on the @e_reflow_model object.
- *
- * It is preferable to use the e_reflow_model_item_changed() signal to
- * notify of smaller changes than to invalidate the entire model, as
- * the views might have ways of caching the information they render
- * from the model.
- */
-void
-e_reflow_model_changed (EReflowModel *e_reflow_model)
-{
- g_return_if_fail (e_reflow_model != NULL);
- g_return_if_fail (E_IS_REFLOW_MODEL (e_reflow_model));
-
- d(print_tabs());
- d(g_print("Emitting model_changed on model 0x%p.\n", e_reflow_model));
- d(depth++);
- g_signal_emit (e_reflow_model,
- e_reflow_model_signals [MODEL_CHANGED], 0);
- d(depth--);
-}
-
-/**
- * e_reflow_model_comparison_changed:
- * @e_reflow_model: the reflow model to notify of the change
- *
- * Use this function to notify any views of this reflow model that the
- * sorting has changed. The actual contents of the items hasn't, so
- * there's no need to re-query the model for the heights of the
- * individual items.
- */
-void
-e_reflow_model_comparison_changed (EReflowModel *e_reflow_model)
-{
- g_return_if_fail (e_reflow_model != NULL);
- g_return_if_fail (E_IS_REFLOW_MODEL (e_reflow_model));
-
- d(print_tabs());
- d(g_print("Emitting comparison_changed on model 0x%p.\n", e_reflow_model));
- d(depth++);
- g_signal_emit (e_reflow_model,
- e_reflow_model_signals [COMPARISON_CHANGED], 0);
- d(depth--);
-}
-
-/**
- * e_reflow_model_items_inserted:
- * @e_reflow_model: The model changed.
- * @position: The position the items were insert in.
- * @count: The number of items inserted.
- *
- * Use this function to notify any views of the reflow model that a number of items have been inserted.
- **/
-void
-e_reflow_model_items_inserted (EReflowModel *e_reflow_model, int position, int count)
-{
- g_return_if_fail (e_reflow_model != NULL);
- g_return_if_fail (E_IS_REFLOW_MODEL (e_reflow_model));
-
- d(print_tabs());
- d(g_print("Emitting items_inserted on model 0x%p, position=%d, count=%d.\n", e_reflow_model, position, count));
- d(depth++);
- g_signal_emit (e_reflow_model,
- e_reflow_model_signals [MODEL_ITEMS_INSERTED], 0,
- position, count);
- d(depth--);
-}
-
-/**
- * e_reflow_model_item_removed:
- * @e_reflow_model: The model changed.
- * @n: The position from which the items were removed.
- *
- * Use this function to notify any views of the reflow model that an
- * item has been removed.
- **/
-void
-e_reflow_model_item_removed (EReflowModel *e_reflow_model,
- int n)
-{
- g_return_if_fail (e_reflow_model != NULL);
- g_return_if_fail (E_IS_REFLOW_MODEL (e_reflow_model));
-
- d(print_tabs());
- d(g_print("Emitting item_removed on model 0x%p, n=%d.\n", e_reflow_model, n));
- d(depth++);
- g_signal_emit (e_reflow_model,
- e_reflow_model_signals [MODEL_ITEM_REMOVED], 0,
- n);
- d(depth--);
-}
-
-
-/**
- * e_reflow_model_item_changed:
- * @e_reflow_model: the reflow model to notify of the change
- * @item: the item that was changed in the model.
- *
- * Use this function to notify any views of the reflow model that the
- * contents of item @item have changed in model such that the height
- * has changed or the item needs to be reincarnated. This function
- * will emit the "model_item_changed" signal on the @e_reflow_model
- * object
- */
-void
-e_reflow_model_item_changed (EReflowModel *e_reflow_model, int n)
-{
- g_return_if_fail (e_reflow_model != NULL);
- g_return_if_fail (E_IS_REFLOW_MODEL (e_reflow_model));
-
- d(print_tabs());
- d(g_print("Emitting item_changed on model 0x%p, n=%d.\n", e_reflow_model, n));
- d(depth++);
- g_signal_emit (e_reflow_model,
- e_reflow_model_signals [MODEL_ITEM_CHANGED], 0,
- n);
- d(depth--);
-}
diff --git a/widgets/misc/e-reflow-model.h b/widgets/misc/e-reflow-model.h
deleted file mode 100644
index 25731b2af5..0000000000
--- a/widgets/misc/e-reflow-model.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-reflow-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_REFLOW_MODEL_H_
-#define _E_REFLOW_MODEL_H_
-
-#include <glib-object.h>
-#include <libgnomecanvas/gnome-canvas.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_REFLOW_MODEL_TYPE (e_reflow_model_get_type ())
-#define E_REFLOW_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_REFLOW_MODEL_TYPE, EReflowModel))
-#define E_REFLOW_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_REFLOW_MODEL_TYPE, EReflowModelClass))
-#define E_IS_REFLOW_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_REFLOW_MODEL_TYPE))
-#define E_IS_REFLOW_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_REFLOW_MODEL_TYPE))
-#define E_REFLOW_MODEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_REFLOW_MODEL_TYPE, EReflowModelClass))
-
-typedef struct {
- GObject base;
-} EReflowModel;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Virtual methods
- */
- void (*set_width) (EReflowModel *etm, int width);
-
- int (*count) (EReflowModel *etm);
- int (*height) (EReflowModel *etm, int n, GnomeCanvasGroup *parent);
- GnomeCanvasItem *(*incarnate) (EReflowModel *etm, int n, GnomeCanvasGroup *parent);
- int (*compare) (EReflowModel *etm, int n1, int n2);
- void (*reincarnate) (EReflowModel *etm, int n, GnomeCanvasItem *item);
-
- /*
- * Signals
- */
-
- /*
- * These all come after the change has been made.
- * Major structural changes: model_changed
- * Changes to the sorting of elements: comparison_changed
- * Changes only in an item: item_changed
- */
- void (*model_changed) (EReflowModel *etm);
- void (*comparison_changed) (EReflowModel *etm);
- void (*model_items_inserted) (EReflowModel *etm, int position, int count);
- void (*model_item_removed) (EReflowModel *etm, int position);
- void (*model_item_changed) (EReflowModel *etm, int n);
-} EReflowModelClass;
-
-GType e_reflow_model_get_type (void);
-
-/**/
-void e_reflow_model_set_width (EReflowModel *e_reflow_model,
- int width);
-int e_reflow_model_count (EReflowModel *e_reflow_model);
-int e_reflow_model_height (EReflowModel *e_reflow_model,
- int n,
- GnomeCanvasGroup *parent);
-GnomeCanvasItem *e_reflow_model_incarnate (EReflowModel *e_reflow_model,
- int n,
- GnomeCanvasGroup *parent);
-int e_reflow_model_compare (EReflowModel *e_reflow_model,
- int n1,
- int n2);
-void e_reflow_model_reincarnate (EReflowModel *e_reflow_model,
- int n,
- GnomeCanvasItem *item);
-
-/*
- * Routines for emitting signals on the e_reflow
- */
-void e_reflow_model_changed (EReflowModel *e_reflow_model);
-void e_reflow_model_comparison_changed (EReflowModel *e_reflow_model);
-void e_reflow_model_items_inserted (EReflowModel *e_reflow_model,
- int position,
- int count);
-void e_reflow_model_item_removed (EReflowModel *e_reflow_model,
- int n);
-void e_reflow_model_item_changed (EReflowModel *e_reflow_model,
- int n);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_REFLOW_MODEL_H_ */
diff --git a/widgets/misc/e-reflow.c b/widgets/misc/e-reflow.c
deleted file mode 100644
index 69c4bd8266..0000000000
--- a/widgets/misc/e-reflow.c
+++ /dev/null
@@ -1,1507 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-reflow.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-reflow.h"
-
-#include <math.h>
-#include <gdk/gdkkeysyms.h>
-#include "e-canvas-utils.h"
-#include "e-canvas.h"
-#include "gal/e-text/e-text.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include "gal/widgets/e-unicode.h"
-#include <gtk/gtksignal.h>
-#include "e-selection-model-simple.h"
-
-#include <string.h>
-
-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 set_empty(EReflow *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)
-
-#define PARENT_TYPE GNOME_TYPE_CANVAS_GROUP
-static GnomeCanvasGroupClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_MINIMUM_WIDTH,
- PROP_WIDTH,
- PROP_HEIGHT,
- PROP_EMPTY_MESSAGE,
- PROP_MODEL,
- PROP_COLUMN_WIDTH
-};
-
-enum {
- SELECTION_EVENT,
- COLUMN_WIDTH_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = {0, };
-
-static gint
-er_compare (int i1, int i2, gpointer user_data)
-{
- EReflow *reflow = user_data;
- return e_reflow_model_compare (reflow->model, i1, i2);
-}
-
-static gint
-e_reflow_pick_line (EReflow *reflow, double x)
-{
- x += E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH;
- x /= reflow->column_width + E_REFLOW_FULL_GUTTER;
- return x;
-}
-
-static int
-er_find_item (EReflow *reflow, GnomeCanvasItem *item)
-{
- int i;
- for (i = 0; i < reflow->count; i++) {
- if (reflow->items[i] == item)
- return i;
- }
- return -1;
-}
-
-static void
-e_reflow_resize_children (GnomeCanvasItem *item)
-{
- EReflow *reflow;
- int i;
- int count;
-
- reflow = E_REFLOW (item);
-
- count = reflow->count;
- for (i = 0; i < count; i++) {
- if (reflow->items[i])
- gnome_canvas_item_set(reflow->items[i],
- "width", (double) reflow->column_width,
- NULL);
- }
-}
-
-static inline void
-e_reflow_update_selection_row (EReflow *reflow, int row)
-{
- if (reflow->items[row]) {
- g_object_set(reflow->items[row],
- "selected", e_selection_model_is_row_selected(E_SELECTION_MODEL(reflow->selection), row),
- NULL);
- } else if (e_selection_model_is_row_selected (E_SELECTION_MODEL (reflow->selection), row)) {
- reflow->items[row] = e_reflow_model_incarnate (reflow->model, row, GNOME_CANVAS_GROUP (reflow));
- g_object_set (reflow->items[row],
- "selected", e_selection_model_is_row_selected(E_SELECTION_MODEL(reflow->selection), row),
- "width", (double) reflow->column_width,
- NULL);
- }
-}
-
-static void
-e_reflow_update_selection (EReflow *reflow)
-{
- int i;
- int count;
-
- count = reflow->count;
- for (i = 0; i < count; i++) {
- e_reflow_update_selection_row (reflow, i);
- }
-}
-
-static void
-selection_changed (ESelectionModel *selection, EReflow *reflow)
-{
- e_reflow_update_selection (reflow);
-}
-
-static void
-selection_row_changed (ESelectionModel *selection, int row, EReflow *reflow)
-{
- e_reflow_update_selection_row (reflow, row);
-}
-
-static void
-cursor_changed (ESelectionModel *selection, int row, int col, EReflow *reflow)
-{
- int count = reflow->count;
- int old_cursor = reflow->cursor_row;
-
- if (old_cursor < count && old_cursor >= 0) {
- if (reflow->items[old_cursor]) {
- g_object_set (reflow->items[old_cursor],
- "has_cursor", FALSE,
- NULL);
- }
- }
-
- reflow->cursor_row = row;
-
- if (row < count && row >= 0) {
- if (reflow->items[row]) {
- g_object_set (reflow->items[row],
- "has_cursor", TRUE,
- NULL);
- } else {
- reflow->items[row] = e_reflow_model_incarnate (reflow->model, row, GNOME_CANVAS_GROUP (reflow));
- g_object_set (reflow->items[row],
- "has_cursor", TRUE,
- "width", (double) reflow->column_width,
- NULL);
- }
- }
-}
-
-static void
-incarnate (EReflow *reflow)
-{
- int column_width;
- int first_column;
- int last_column;
- int first_cell;
- int last_cell;
- int i;
- GtkAdjustment *adjustment = gtk_layout_get_hadjustment (GTK_LAYOUT (GNOME_CANVAS_ITEM (reflow)->canvas));
-
- column_width = reflow->column_width;
-
- first_column = adjustment->value - 1 + E_REFLOW_BORDER_WIDTH;
- first_column /= column_width + E_REFLOW_FULL_GUTTER;
-
- last_column = adjustment->value + adjustment->page_size + 1 - E_REFLOW_BORDER_WIDTH - E_REFLOW_DIVIDER_WIDTH;
- last_column /= column_width + E_REFLOW_FULL_GUTTER;
- last_column ++;
-
- if (first_column >= 0 && first_column < reflow->column_count)
- first_cell = reflow->columns[first_column];
- else
- first_cell = 0;
-
- if (last_column >= 0 && last_column < reflow->column_count)
- last_cell = reflow->columns[last_column];
- else
- last_cell = reflow->count;
-
- for (i = first_cell; i < last_cell; i++) {
- int unsorted = e_sorter_sorted_to_model (E_SORTER (reflow->sorter), i);
- if (reflow->items[unsorted] == NULL) {
- if (reflow->model) {
- reflow->items[unsorted] = e_reflow_model_incarnate (reflow->model, unsorted, GNOME_CANVAS_GROUP (reflow));
- g_object_set (reflow->items[unsorted],
- "selected", e_selection_model_is_row_selected(E_SELECTION_MODEL(reflow->selection), unsorted),
- "width", (double) reflow->column_width,
- NULL);
- }
- }
- }
- reflow->incarnate_idle_id = 0;
-}
-
-static gboolean
-invoke_incarnate (gpointer user_data)
-{
- EReflow *reflow = user_data;
- incarnate (reflow);
- return FALSE;
-}
-
-static void
-queue_incarnate (EReflow *reflow)
-{
- if (reflow->incarnate_idle_id == 0)
- reflow->incarnate_idle_id =
- g_idle_add_full (25, invoke_incarnate, reflow, NULL);
-}
-
-static void
-reflow_columns (EReflow *reflow)
-{
- GSList *list;
- int count;
- int start;
- int i;
- int column_count, column_start;
- double running_height;
-
- if (reflow->reflow_from_column <= 1) {
- start = 0;
- column_count = 1;
- column_start = 0;
- }
- else {
- /* we start one column before the earliest new entry,
- so we can handle the case where the new entry is
- inserted at the start of the column */
- column_start = reflow->reflow_from_column - 1;
- start = reflow->columns[column_start];
- column_count = column_start + 1;
- }
-
- list = NULL;
-
- running_height = E_REFLOW_BORDER_WIDTH;
-
- count = reflow->count - start;
- for (i = start; i < count; i++) {
- int unsorted = e_sorter_sorted_to_model (E_SORTER (reflow->sorter), i);
- if (i != 0 && running_height + reflow->heights[unsorted] + E_REFLOW_BORDER_WIDTH > reflow->height) {
- list = g_slist_prepend (list, GINT_TO_POINTER(i));
- column_count ++;
- running_height = E_REFLOW_BORDER_WIDTH * 2 + reflow->heights[unsorted];
- } else
- running_height += reflow->heights[unsorted] + E_REFLOW_BORDER_WIDTH;
- }
-
- reflow->column_count = column_count;
- reflow->columns = g_renew (int, reflow->columns, column_count);
- column_count --;
-
- for (; column_count > column_start; column_count--) {
- GSList *to_free;
- reflow->columns[column_count] = GPOINTER_TO_INT(list->data);
- to_free = list;
- list = list->next;
- g_slist_free_1 (to_free);
- }
- reflow->columns[column_start] = start;
-
- queue_incarnate (reflow);
-
- reflow->need_reflow_columns = FALSE;
- reflow->reflow_from_column = -1;
-}
-
-static void
-item_changed (EReflowModel *model, int i, EReflow *reflow)
-{
- if (i < 0 || i >= reflow->count)
- return;
-
- reflow->heights[i] = e_reflow_model_height (reflow->model, i, GNOME_CANVAS_GROUP (reflow));
- if (reflow->items[i] != NULL)
- e_reflow_model_reincarnate (model, i, reflow->items[i]);
- e_sorter_array_clean (reflow->sorter);
- reflow->reflow_from_column = -1;
- reflow->need_reflow_columns = TRUE;
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM (reflow));
-}
-
-static void
-item_removed (EReflowModel *model, int i, EReflow *reflow)
-{
- int c;
- int sorted;
-
- if (i < 0 || i >= reflow->count)
- return;
-
- sorted = e_sorter_model_to_sorted (E_SORTER (reflow->sorter), i);
- for (c = reflow->column_count - 1; c >= 0; c--) {
- int start_of_column = reflow->columns[c];
-
- if (start_of_column <= sorted) {
- if (reflow->reflow_from_column == -1
- || reflow->reflow_from_column > c) {
- reflow->reflow_from_column = c;
- }
- break;
- }
- }
-
- if (reflow->items[i])
- gtk_object_destroy (GTK_OBJECT (reflow->items[i]));
-
- memmove (reflow->heights + i, reflow->heights + i + 1, (reflow->count - i - 1) * sizeof (int));
- memmove (reflow->items + i, reflow->items + i + 1, (reflow->count - i - 1) * sizeof (GnomeCanvasItem *));
-
- reflow->count --;
-
- reflow->heights [reflow->count] = 0;
- reflow->items [reflow->count] = NULL;
-
- reflow->need_reflow_columns = TRUE;
- set_empty (reflow);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM (reflow));
-
- e_sorter_array_set_count (reflow->sorter, reflow->count);
-
- e_selection_model_simple_delete_rows (E_SELECTION_MODEL_SIMPLE (reflow->selection), i, 1);
-}
-
-static void
-items_inserted (EReflowModel *model, int position, int count, EReflow *reflow)
-{
- int i, oldcount;
-
- if (position < 0 || position > reflow->count)
- return;
-
- oldcount = reflow->count;
-
- reflow->count += count;
-
- if (reflow->count > reflow->allocated_count) {
- while (reflow->count > reflow->allocated_count)
- reflow->allocated_count += 256;
- reflow->heights = g_renew (int, reflow->heights, reflow->allocated_count);
- reflow->items = g_renew (GnomeCanvasItem *, reflow->items, reflow->allocated_count);
- }
- memmove (reflow->heights + position + count, reflow->heights + position, (reflow->count - position - count) * sizeof (int));
- memmove (reflow->items + position + count, reflow->items + position, (reflow->count - position - count) * sizeof (GnomeCanvasItem *));
- for (i = position; i < position + count; i++) {
- reflow->items[i] = 0;
- reflow->heights[i] = e_reflow_model_height (reflow->model, i, GNOME_CANVAS_GROUP (reflow));
- }
-
- e_selection_model_simple_set_row_count (E_SELECTION_MODEL_SIMPLE (reflow->selection), reflow->count);
- if (position == oldcount)
- e_sorter_array_append (reflow->sorter, count);
- else
- e_sorter_array_set_count (reflow->sorter, reflow->count);
-
- for (i = position; i < position + count; i ++) {
- int sorted = e_sorter_model_to_sorted (E_SORTER (reflow->sorter), i);
- int c;
-
- for (c = reflow->column_count - 1; c >= 0; c--) {
- int start_of_column = reflow->columns[c];
-
- if (start_of_column <= sorted) {
- if (reflow->reflow_from_column == -1
- || reflow->reflow_from_column > c) {
- reflow->reflow_from_column = c;
- }
- break;
- }
- }
- }
-
- reflow->need_reflow_columns = TRUE;
- set_empty (reflow);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM (reflow));
-}
-
-static void
-model_changed (EReflowModel *model, EReflow *reflow)
-{
- int i;
- int count;
- int oldcount;
-
- count = reflow->count;
- oldcount = count;
-
- for (i = 0; i < count; i++) {
- if (reflow->items[i])
- gtk_object_destroy (GTK_OBJECT (reflow->items[i]));
- }
- g_free (reflow->items);
- g_free (reflow->heights);
- reflow->count = e_reflow_model_count (model);
- reflow->allocated_count = reflow->count;
- reflow->items = g_new (GnomeCanvasItem *, reflow->count);
- reflow->heights = g_new (int, reflow->count);
-
- count = reflow->count;
- for (i = 0; i < count; i++) {
- reflow->items[i] = 0;
- reflow->heights[i] = e_reflow_model_height (reflow->model, i, GNOME_CANVAS_GROUP (reflow));
- }
-
- e_selection_model_simple_set_row_count (E_SELECTION_MODEL_SIMPLE (reflow->selection), count);
- e_sorter_array_set_count (reflow->sorter, reflow->count);
-
- reflow->need_reflow_columns = TRUE;
- if (oldcount > reflow->count)
- reflow_columns (reflow);
- set_empty (reflow);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM (reflow));
-}
-
-static void
-comparison_changed (EReflowModel *model, EReflow *reflow)
-{
- e_sorter_array_clean (reflow->sorter);
- reflow->reflow_from_column = -1;
- reflow->need_reflow_columns = TRUE;
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM (reflow));
-}
-
-static void
-set_empty(EReflow *reflow)
-{
- if (reflow->count == 0) {
- if (reflow->empty_text) {
- if (reflow->empty_message) {
- gnome_canvas_item_set(reflow->empty_text,
- "width", reflow->minimum_width,
- "text", reflow->empty_message,
- NULL);
- e_canvas_item_move_absolute(reflow->empty_text,
- reflow->minimum_width / 2,
- 0);
- } else {
- gtk_object_destroy(GTK_OBJECT(reflow->empty_text));
- reflow->empty_text = NULL;
- }
- } else {
- if (reflow->empty_message) {
- reflow->empty_text =
- gnome_canvas_item_new(GNOME_CANVAS_GROUP(reflow),
- e_text_get_type(),
- "anchor", GTK_ANCHOR_N,
- "width", reflow->minimum_width,
- "clip", TRUE,
- "use_ellipsis", TRUE,
- "fill_color", "black",
- "justification", GTK_JUSTIFY_CENTER,
- "text", reflow->empty_message,
- "draw_background", FALSE,
- NULL);
- e_canvas_item_move_absolute(reflow->empty_text,
- reflow->minimum_width / 2,
- 0);
- }
- }
- } else {
- if (reflow->empty_text) {
- gtk_object_destroy(GTK_OBJECT(reflow->empty_text));
- reflow->empty_text = NULL;
- }
- }
-}
-
-static void
-disconnect_model (EReflow *reflow)
-{
- if (reflow->model == NULL)
- return;
-
- g_signal_handler_disconnect (reflow->model,
- reflow->model_changed_id);
- g_signal_handler_disconnect (reflow->model,
- reflow->comparison_changed_id);
- g_signal_handler_disconnect (reflow->model,
- reflow->model_items_inserted_id);
- g_signal_handler_disconnect (reflow->model,
- reflow->model_item_removed_id);
- g_signal_handler_disconnect (reflow->model,
- reflow->model_item_changed_id);
- g_object_unref (reflow->model);
-
- reflow->model_changed_id = 0;
- reflow->comparison_changed_id = 0;
- reflow->model_items_inserted_id = 0;
- reflow->model_item_removed_id = 0;
- reflow->model_item_changed_id = 0;
- reflow->model = NULL;
-}
-
-static void
-disconnect_selection (EReflow *reflow)
-{
- if (reflow->selection == NULL)
- return;
-
- g_signal_handler_disconnect (reflow->selection,
- reflow->selection_changed_id);
- g_signal_handler_disconnect (reflow->selection,
- reflow->selection_row_changed_id);
- g_signal_handler_disconnect (reflow->selection,
- reflow->cursor_changed_id);
- g_object_unref (reflow->selection);
-
- reflow->selection_changed_id = 0;
- reflow->selection_row_changed_id = 0;
- reflow->cursor_changed_id = 0;
- reflow->selection = NULL;
-}
-
-static void
-connect_model (EReflow *reflow, EReflowModel *model)
-{
- if (reflow->model != NULL)
- disconnect_model (reflow);
-
- if (model == NULL)
- return;
-
- reflow->model = model;
- g_object_ref (reflow->model);
- reflow->model_changed_id =
- g_signal_connect (reflow->model, "model_changed",
- G_CALLBACK (model_changed), reflow);
- reflow->comparison_changed_id =
- g_signal_connect (reflow->model, "comparison_changed",
- G_CALLBACK (comparison_changed), reflow);
- reflow->model_items_inserted_id =
- g_signal_connect (reflow->model, "model_items_inserted",
- G_CALLBACK (items_inserted), reflow);
- reflow->model_item_removed_id =
- g_signal_connect (reflow->model, "model_item_removed",
- G_CALLBACK (item_removed), reflow);
- reflow->model_item_changed_id =
- g_signal_connect (reflow->model, "model_item_changed",
- G_CALLBACK (item_changed), reflow);
- model_changed (model, reflow);
-}
-
-static void
-adjustment_changed (GtkAdjustment *adjustment, EReflow *reflow)
-{
- queue_incarnate (reflow);
-}
-
-static void
-disconnect_adjustment (EReflow *reflow)
-{
- if (reflow->adjustment == NULL)
- return;
-
- g_signal_handler_disconnect (reflow->adjustment,
- reflow->adjustment_changed_id);
- g_signal_handler_disconnect (reflow->adjustment,
- reflow->adjustment_value_changed_id);
-
- g_object_unref (reflow->adjustment);
-
- reflow->adjustment_changed_id = 0;
- reflow->adjustment_value_changed_id = 0;
- reflow->adjustment = NULL;
-}
-
-static void
-connect_adjustment (EReflow *reflow, GtkAdjustment *adjustment)
-{
- if (reflow->adjustment != NULL)
- disconnect_adjustment (reflow);
-
- if (adjustment == NULL)
- return;
-
- reflow->adjustment = adjustment;
- reflow->adjustment_changed_id =
- g_signal_connect (adjustment, "changed",
- G_CALLBACK (adjustment_changed), reflow);
- reflow->adjustment_value_changed_id =
- g_signal_connect (adjustment, "value_changed",
- G_CALLBACK (adjustment_changed), reflow);
- g_object_ref (adjustment);
-}
-
-#if 0
-static void
-set_scroll_adjustments (GtkLayout *layout, GtkAdjustment *hadj, GtkAdjustment *vadj, EReflow *reflow)
-{
- connect_adjustment (reflow, hadj);
-}
-
-static void
-connect_set_adjustment (EReflow *reflow)
-{
- reflow->set_scroll_adjustments_id =
- g_signal_connect (GNOME_CANVAS_ITEM (reflow)->canvas,
- "set_scroll_adjustments",
- G_CALLBACK (set_scroll_adjustments), reflow);
-}
-#endif
-
-static void
-disconnect_set_adjustment (EReflow *reflow)
-{
- if (reflow->set_scroll_adjustments_id != 0) {
- g_signal_handler_disconnect (GNOME_CANVAS_ITEM (reflow)->canvas,
- reflow->set_scroll_adjustments_id);
- reflow->set_scroll_adjustments_id = 0;
- }
-}
-
-static void
-column_width_changed (EReflow *reflow)
-{
- g_signal_emit (reflow, signals[COLUMN_WIDTH_CHANGED], 0, reflow->column_width);
-}
-
-
-
-
-/* Virtual functions */
-static void
-e_reflow_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- EReflow *reflow;
-
- item = GNOME_CANVAS_ITEM (object);
- reflow = E_REFLOW (object);
-
- switch (prop_id){
- case PROP_HEIGHT:
- reflow->height = g_value_get_double (value);
- reflow->need_reflow_columns = TRUE;
- e_canvas_item_request_reflow(item);
- break;
- case PROP_MINIMUM_WIDTH:
- reflow->minimum_width = g_value_get_double (value);
- if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(object))
- set_empty(reflow);
- e_canvas_item_request_reflow(item);
- break;
- case PROP_EMPTY_MESSAGE:
- g_free(reflow->empty_message);
- reflow->empty_message = g_strdup(g_value_get_string (value));
- if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(object))
- set_empty(reflow);
- break;
- case PROP_MODEL:
- connect_model (reflow, (EReflowModel *) g_value_get_object (value));
- break;
- case PROP_COLUMN_WIDTH:
- if (reflow->column_width != g_value_get_double (value)) {
- GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
- double old_width = reflow->column_width;
-
- reflow->column_width = g_value_get_double (value);
- adjustment->step_increment = (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);
-
- reflow->need_column_resize = TRUE;
- gnome_canvas_item_request_update(item);
-
- if (old_width != reflow->column_width)
- column_width_changed (reflow);
- }
- break;
- }
-}
-
-static void
-e_reflow_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- EReflow *reflow;
-
- reflow = E_REFLOW (object);
-
- switch (prop_id) {
- case PROP_MINIMUM_WIDTH:
- g_value_set_double (value, reflow->minimum_width);
- break;
- case PROP_WIDTH:
- g_value_set_double (value, reflow->width);
- break;
- case PROP_HEIGHT:
- g_value_set_double (value, reflow->height);
- break;
- case PROP_EMPTY_MESSAGE:
- g_value_set_string (value, g_strdup(reflow->empty_message));
- break;
- case PROP_MODEL:
- g_value_set_object (value, reflow->model);
- break;
- case PROP_COLUMN_WIDTH:
- g_value_set_double (value, reflow->column_width);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-e_reflow_dispose (GObject *object)
-{
- EReflow *reflow = E_REFLOW(object);
-
- g_free (reflow->items);
- g_free (reflow->heights);
- g_free (reflow->columns);
-
- reflow->items = NULL;
- reflow->heights = NULL;
- reflow->columns = NULL;
- reflow->count = 0;
- reflow->allocated_count = 0;
-
- if (reflow->incarnate_idle_id)
- g_source_remove (reflow->incarnate_idle_id);
- reflow->incarnate_idle_id = 0;
-
- disconnect_model (reflow);
- disconnect_selection (reflow);
-
- g_free(reflow->empty_message);
- reflow->empty_message = NULL;
-
- if (reflow->sorter) {
- g_object_unref (reflow->sorter);
- reflow->sorter = NULL;
- }
-
- G_OBJECT_CLASS(parent_class)->dispose (object);
-}
-
-static void
-e_reflow_realize (GnomeCanvasItem *item)
-{
- EReflow *reflow;
- GnomeCanvasGroup *group;
- GtkAdjustment *adjustment;
- int count;
- int i;
-
- 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);
-
- reflow->arrow_cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW);
- reflow->default_cursor = gdk_cursor_new (GDK_LEFT_PTR);
-
- count = reflow->count;
- for(i = 0; i < count; i++) {
- if (reflow->items[i])
- gnome_canvas_item_set(reflow->items[i],
- "width", reflow->column_width,
- NULL);
- }
-
- set_empty(reflow);
-
- reflow->need_reflow_columns = TRUE;
- e_canvas_item_request_reflow(item);
-
- adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
-
-#if 0
- connect_set_adjustment (reflow);
-#endif
- connect_adjustment (reflow, adjustment);
-
- adjustment->step_increment = (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 *reflow;
-
- reflow = E_REFLOW (item);
-
- if (!item->canvas->aa) {
- }
-
- gdk_cursor_destroy (reflow->arrow_cursor);
- gdk_cursor_destroy (reflow->default_cursor);
- reflow->arrow_cursor = NULL;
- reflow->default_cursor = NULL;
-
- g_free (reflow->columns);
- reflow->columns = NULL;
-
- disconnect_set_adjustment (reflow);
- disconnect_adjustment (reflow);
-
- if (GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize)
- (* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item);
-}
-
-static gboolean
-e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
-{
- EReflow *reflow;
- int return_val = FALSE;
-
- reflow = E_REFLOW (item);
-
- switch( event->type )
- {
- case GDK_KEY_PRESS:
- return_val = e_selection_model_key_press(reflow->selection, (GdkEventKey *) event);
- break;
-#if 0
- if (event->key.keyval == GDK_Tab ||
- event->key.keyval == GDK_KP_Tab ||
- event->key.keyval == GDK_ISO_Left_Tab) {
- int i;
- int count;
- count = reflow->count;
- for (i = 0; i < count; i++) {
- int unsorted = e_sorter_sorted_to_model (E_SORTER (reflow->sorter), i);
- GnomeCanvasItem *item = reflow->items[unsorted];
- EFocus has_focus;
- if (item) {
- g_object_get(item,
- "has_focus", &has_focus,
- NULL);
- if (has_focus) {
- if (event->key.state & GDK_SHIFT_MASK) {
- if (i == 0)
- return 0;
- i--;
- } else {
- if (i == count - 1)
- return 0;
- i++;
- }
-
- unsorted = e_sorter_sorted_to_model (E_SORTER (reflow->sorter), i);
- if (reflow->items[unsorted] == NULL) {
- reflow->items[unsorted] = e_reflow_model_incarnate (reflow->model, unsorted, GNOME_CANVAS_GROUP (reflow));
- }
-
- item = reflow->items[unsorted];
- gnome_canvas_item_set(item,
- "has_focus", (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START,
- NULL);
- return 1;
- }
- }
- }
- }
-#endif
- 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,(reflow->column_width + E_REFLOW_FULL_GUTTER));
-
- max_x = E_REFLOW_BORDER_WIDTH;
- max_x += (reflow->column_width + E_REFLOW_FULL_GUTTER) * reflow->column_count;
- if ( button->y >= E_REFLOW_BORDER_WIDTH && button->y <= reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER && max_x > button->x ) {
- reflow->which_column_dragged = e_reflow_pick_line(reflow, button->x);
- reflow->start_x = reflow->which_column_dragged * (reflow->column_width + E_REFLOW_FULL_GUTTER) - E_REFLOW_DIVIDER_WIDTH / 2;
- reflow->temp_column_width = reflow->column_width;
- reflow->column_drag = TRUE;
-
- gnome_canvas_item_grab (item,
- GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK,
- reflow->arrow_cursor,
- button->time);
-
- reflow->previous_temp_column_width = -1;
- 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 (reflow->column_drag) {
- gdouble old_width = reflow->column_width;
- GdkEventButton *button = (GdkEventButton *) event;
- GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
- reflow->temp_column_width = reflow->column_width +
- (button->x - reflow->start_x)/(reflow->which_column_dragged - e_reflow_pick_line(reflow, adjustment->value));
- if ( reflow->temp_column_width < 50 )
- reflow->temp_column_width = 50;
- reflow->column_drag = FALSE;
- if ( old_width != reflow->temp_column_width ) {
- gtk_adjustment_set_value(adjustment, adjustment->value + e_reflow_pick_line(reflow, adjustment->value) * (reflow->temp_column_width - reflow->column_width));
- reflow->column_width = reflow->temp_column_width;
- adjustment->step_increment = (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);
- gnome_canvas_request_redraw(item->canvas, 0, 0, reflow->width, reflow->height);
- column_width_changed (reflow);
- }
- 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 (reflow->column_drag) {
- double old_width = reflow->temp_column_width;
- GdkEventMotion *motion = (GdkEventMotion *) event;
- GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
- reflow->temp_column_width = reflow->column_width +
- (motion->x - reflow->start_x)/(reflow->which_column_dragged - e_reflow_pick_line(reflow, adjustment->value));
- if (reflow->temp_column_width < 50)
- reflow->temp_column_width = 50;
- if (old_width != reflow->temp_column_width) {
- 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,(reflow->column_width + E_REFLOW_FULL_GUTTER));
-
- max_x = E_REFLOW_BORDER_WIDTH;
- max_x += (reflow->column_width + E_REFLOW_FULL_GUTTER) * reflow->column_count;
-
- if ( motion->y >= E_REFLOW_BORDER_WIDTH && motion->y <= reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER && max_x > motion->x) {
- if ( reflow->default_cursor_shown ) {
- gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, reflow->arrow_cursor);
- reflow->default_cursor_shown = FALSE;
- }
- } else
- if ( ! reflow->default_cursor_shown ) {
- gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, reflow->default_cursor);
- reflow->default_cursor_shown = TRUE;
- }
-
- }
- break;
- case GDK_ENTER_NOTIFY:
- if (!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,(reflow->column_width + E_REFLOW_FULL_GUTTER));
-
- max_x = E_REFLOW_BORDER_WIDTH;
- max_x += (reflow->column_width + E_REFLOW_FULL_GUTTER) * reflow->column_count;
- if ( crossing->y >= E_REFLOW_BORDER_WIDTH && crossing->y <= reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER && max_x > crossing->x) {
- if ( reflow->default_cursor_shown ) {
- gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, reflow->arrow_cursor);
- reflow->default_cursor_shown = FALSE;
- }
- }
- }
- break;
- case GDK_LEAVE_NOTIFY:
- if (!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,(reflow->column_width + E_REFLOW_FULL_GUTTER));
- if ( !( crossing->y >= E_REFLOW_BORDER_WIDTH && crossing->y <= reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER ) ) {
- if ( ! reflow->default_cursor_shown ) {
- gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, reflow->default_cursor);
- reflow->default_cursor_shown = TRUE;
- }
- }
- }
- break;
- default:
- break;
- }
- if (return_val)
- return return_val;
- else if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event)
- return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event);
- else
- return FALSE;
-}
-
-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 *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 = 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 = 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 < 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 (reflow->column_drag) {
- int start_line = e_reflow_pick_line(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 = 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 = 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 < 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 *reflow;
- double x0, x1, y0, y1;
-
- 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 + reflow->width )
- x1 = x0 + reflow->width;
- if ( y1 < y0 + reflow->height )
- y1 = y0 + reflow->height;
- item->x2 = x1;
- item->y2 = y1;
-
- if (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);
- reflow->need_height_update = FALSE;
- } else if (reflow->need_column_resize) {
- int x_rect, y_rect, width_rect, height_rect;
- int start_line = e_reflow_pick_line(reflow,
- gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value);
- gdouble running_width;
- int i;
- double column_width;
-
- if ( reflow->previous_temp_column_width != -1 ) {
- running_width = start_line * (reflow->column_width + E_REFLOW_FULL_GUTTER);
- column_width = 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 = reflow->height - (E_REFLOW_BORDER_WIDTH * 2);
-
- for ( i = 0; i < 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 ( reflow->temp_column_width != -1 ) {
- running_width = start_line * (reflow->column_width + E_REFLOW_FULL_GUTTER);
- column_width = 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 = reflow->height - (E_REFLOW_BORDER_WIDTH * 2);
-
- for ( i = 0; i < 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;
- }
- }
-
- reflow->previous_temp_column_width = reflow->temp_column_width;
- reflow->need_column_resize = FALSE;
- }
-}
-
-static double
-e_reflow_point (GnomeCanvasItem *item,
- double x, double y, int cx, int cy,
- GnomeCanvasItem **actual_item)
-{
- double distance = 1;
-
- *actual_item = NULL;
-
- if (GNOME_CANVAS_ITEM_CLASS(parent_class)->point)
- distance = GNOME_CANVAS_ITEM_CLASS(parent_class)->point (item, x, y, cx, cy, actual_item);
- if ((int) (distance * item->canvas->pixels_per_unit + 0.5) <= item->canvas->close_enough && *actual_item)
- return distance;
-
- *actual_item = item;
- return 0;
-#if 0
- if (y >= E_REFLOW_BORDER_WIDTH && y <= 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, (reflow->column_width + E_REFLOW_FULL_GUTTER));
- if (n_x < E_REFLOW_FULL_GUTTER) {
- *actual_item = item;
- return 0;
- }
- }
- return distance;
-#endif
-}
-
-static void
-e_reflow_reflow( GnomeCanvasItem *item, int flags )
-{
- EReflow *reflow = E_REFLOW(item);
- gdouble old_width;
- gdouble running_width;
- gdouble running_height;
- int next_column;
- int i;
-
- if (! (GTK_OBJECT_FLAGS (reflow) & GNOME_CANVAS_ITEM_REALIZED))
- return;
-
- if (reflow->need_reflow_columns) {
- reflow_columns (reflow);
- }
-
- old_width = reflow->width;
-
- running_width = E_REFLOW_BORDER_WIDTH;
- running_height = E_REFLOW_BORDER_WIDTH;
-
- next_column = 1;
-
- for (i = 0; i < reflow->count; i++) {
- int unsorted = e_sorter_sorted_to_model (E_SORTER (reflow->sorter), i);
- if (next_column < reflow->column_count && i == reflow->columns[next_column]) {
- running_height = E_REFLOW_BORDER_WIDTH;
- running_width += reflow->column_width + E_REFLOW_FULL_GUTTER;
- next_column ++;
- }
-
- if (unsorted >= 0 && reflow->items[unsorted]) {
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(reflow->items[unsorted]),
- (double) running_width,
- (double) running_height);
- running_height += reflow->heights[unsorted] + E_REFLOW_BORDER_WIDTH;
- }
- }
- reflow->width = running_width + reflow->column_width + E_REFLOW_BORDER_WIDTH;
- if ( reflow->width < reflow->minimum_width )
- reflow->width = reflow->minimum_width;
- if (old_width != reflow->width)
- e_canvas_item_request_parent_reflow(item);
-}
-
-static int
-e_reflow_selection_event_real (EReflow *reflow, GnomeCanvasItem *item, GdkEvent *event)
-{
- int row;
- int return_val = TRUE;
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- switch (event->button.button) {
- case 1: /* Fall through. */
- case 2:
- row = er_find_item (reflow, item);
- if (event->button.button == 1) {
- reflow->maybe_did_something =
- e_selection_model_maybe_do_something(reflow->selection, row, 0, event->button.state);
- reflow->maybe_in_drag = TRUE;
- } else {
- e_selection_model_do_something(reflow->selection, row, 0, event->button.state);
- }
- break;
- case 3:
- row = er_find_item (reflow, item);
- e_selection_model_right_click_down(reflow->selection, row, 0, 0);
- break;
- default:
- return_val = FALSE;
- break;
- }
- break;
- case GDK_BUTTON_RELEASE:
- if (event->button.button == 1) {
- if (reflow->maybe_in_drag) {
- reflow->maybe_in_drag = FALSE;
- if (!reflow->maybe_did_something) {
- row = er_find_item (reflow, item);
- e_selection_model_do_something(reflow->selection, row, 0, event->button.state);
- }
- }
- }
- break;
- case GDK_KEY_PRESS:
- return_val = e_selection_model_key_press(reflow->selection, (GdkEventKey *) event);
- break;
- default:
- return_val = FALSE;
- break;
- }
-
- return return_val;
-}
-
-static void
-e_reflow_class_init (EReflowClass *klass)
-{
- GObjectClass *object_class;
- GnomeCanvasItemClass *item_class;
-
- object_class = (GObjectClass*) klass;
- item_class = (GnomeCanvasItemClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->set_property = e_reflow_set_property;
- object_class->get_property = e_reflow_get_property;
- object_class->dispose = e_reflow_dispose;
-
- /* 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;
-
- klass->selection_event = e_reflow_selection_event_real;
- klass->column_width_changed = NULL;
-
- g_object_class_install_property (object_class, PROP_MINIMUM_WIDTH,
- g_param_spec_double ("minimum_width",
- _( "Minimum width" ),
- _( "Minimum Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _( "Width" ),
- _( "Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READABLE));
-
-
- g_object_class_install_property (object_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _( "Height" ),
- _( "Height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_EMPTY_MESSAGE,
- g_param_spec_string ("empty_message",
- _( "Empty message" ),
- _( "Empty message" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MODEL,
- g_param_spec_object ("model",
- _( "Reflow model" ),
- _( "Reflow model" ),
- E_REFLOW_MODEL_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_COLUMN_WIDTH,
- g_param_spec_double ("column_width",
- _( "Column width" ),
- _( "Column width" ),
- 0.0, G_MAXDOUBLE, 150.0,
- G_PARAM_READWRITE));
-
- signals [SELECTION_EVENT] =
- g_signal_new ("selection_event",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EReflowClass, selection_event),
- NULL, NULL,
- e_marshal_INT__OBJECT_BOXED,
- G_TYPE_INT, 2, G_TYPE_OBJECT,
- GDK_TYPE_EVENT);
-
- signals [COLUMN_WIDTH_CHANGED] =
- g_signal_new ("column_width_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EReflowClass, column_width_changed),
- NULL, NULL,
- e_marshal_NONE__DOUBLE,
- G_TYPE_NONE, 1, G_TYPE_DOUBLE);
-}
-
-static void
-e_reflow_init (EReflow *reflow)
-{
- reflow->model = NULL;
- reflow->items = NULL;
- reflow->heights = NULL;
- reflow->count = 0;
-
- reflow->columns = NULL;
- reflow->column_count = 0;
-
- reflow->empty_text = NULL;
- reflow->empty_message = NULL;
-
- reflow->minimum_width = 10;
- reflow->width = 10;
- reflow->height = 10;
-
- reflow->column_width = 150;
-
- reflow->column_drag = FALSE;
-
- reflow->need_height_update = FALSE;
- reflow->need_column_resize = FALSE;
- reflow->need_reflow_columns = FALSE;
-
- reflow->maybe_did_something = FALSE;
- reflow->maybe_in_drag = FALSE;
-
- reflow->default_cursor_shown = TRUE;
- reflow->arrow_cursor = NULL;
- reflow->default_cursor = NULL;
-
- reflow->cursor_row = -1;
-
- reflow->incarnate_idle_id = 0;
- reflow->set_scroll_adjustments_id = 0;
-
- reflow->selection = E_SELECTION_MODEL (e_selection_model_simple_new());
- reflow->sorter = e_sorter_array_new (er_compare, reflow);
-
- g_object_set (reflow->selection,
- "sorter", reflow->sorter,
- NULL);
-
- reflow->selection_changed_id =
- g_signal_connect(reflow->selection, "selection_changed",
- G_CALLBACK (selection_changed), reflow);
- reflow->selection_row_changed_id =
- g_signal_connect(reflow->selection, "selection_row_changed",
- G_CALLBACK (selection_row_changed), reflow);
- reflow->cursor_changed_id =
- g_signal_connect(reflow->selection, "cursor_changed",
- G_CALLBACK (cursor_changed), reflow);
-
- e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(reflow), e_reflow_reflow);
-}
-
-E_MAKE_TYPE (e_reflow,
- "EReflow",
- EReflow,
- e_reflow_class_init,
- e_reflow_init,
- PARENT_TYPE)
diff --git a/widgets/misc/e-reflow.h b/widgets/misc/e-reflow.h
deleted file mode 100644
index b92643a935..0000000000
--- a/widgets/misc/e-reflow.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-reflow.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_REFLOW_H__
-#define __E_REFLOW_H__
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/widgets/e-reflow-model.h>
-#include <gal/widgets/e-selection-model.h>
-#include <gal/util/e-sorter-array.h>
-
-#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) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_REFLOW_TYPE, EReflow))
-#define E_REFLOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_REFLOW_TYPE, EReflowClass))
-#define E_IS_REFLOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_REFLOW_TYPE))
-#define E_IS_REFLOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_REFLOW_TYPE))
-
-
-typedef struct EReflowPriv EReflowPriv;
-
-typedef struct _EReflow EReflow;
-typedef struct _EReflowClass EReflowClass;
-
-struct _EReflow
-{
- GnomeCanvasGroup parent;
-
- /* item specific fields */
- EReflowModel *model;
- guint model_changed_id;
- guint comparison_changed_id;
- guint model_items_inserted_id;
- guint model_item_removed_id;
- guint model_item_changed_id;
-
- ESelectionModel *selection;
- guint selection_changed_id;
- guint selection_row_changed_id;
- guint cursor_changed_id;
- ESorterArray *sorter;
-
- GtkAdjustment *adjustment;
- guint adjustment_changed_id;
- guint adjustment_value_changed_id;
- guint set_scroll_adjustments_id;
-
- int *heights;
- GnomeCanvasItem **items;
- int count;
- int allocated_count;
-
- int *columns;
- gint column_count; /* Number of columnns */
-
- GnomeCanvasItem *empty_text;
- gchar *empty_message;
-
- double minimum_width;
- double width;
- double height;
-
- double column_width;
-
- int incarnate_idle_id;
-
- /* These are all for when the column is being dragged. */
- gdouble start_x;
- gint which_column_dragged;
- double temp_column_width;
- double previous_temp_column_width;
-
- int cursor_row;
-
- int reflow_from_column;
-
- guint column_drag : 1;
-
- guint need_height_update : 1;
- guint need_column_resize : 1;
- guint need_reflow_columns : 1;
-
- guint default_cursor_shown : 1;
-
- guint maybe_did_something : 1;
- guint maybe_in_drag : 1;
- GdkCursor *arrow_cursor;
- GdkCursor *default_cursor;
-};
-
-struct _EReflowClass
-{
- GnomeCanvasGroupClass parent_class;
-
- int (*selection_event) (EReflow *reflow, GnomeCanvasItem *item, GdkEvent *event);
- void (*column_width_changed) (EReflow *reflow, double width);
-};
-
-/*
- * 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.
- */
-GtkType e_reflow_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_REFLOW_H__ */
diff --git a/widgets/misc/e-selection-model-array.c b/widgets/misc/e-selection-model-array.c
deleted file mode 100644
index e6e96702a3..0000000000
--- a/widgets/misc/e-selection-model-array.c
+++ /dev/null
@@ -1,557 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-selection-model-array.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtksignal.h>
-#include "e-selection-model-array.h"
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE e_selection_model_get_type ()
-
-static ESelectionModelClass *parent_class;
-
-enum {
- PROP_0,
- PROP_CURSOR_ROW,
- PROP_CURSOR_COL
-};
-
-void
-e_selection_model_array_confirm_row_count(ESelectionModelArray *esma)
-{
- if (esma->eba == NULL) {
- int row_count = e_selection_model_array_get_row_count(esma);
- esma->eba = e_bit_array_new(row_count);
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- }
-}
-
-/* FIXME: Should this deal with moving the selection if it's in single mode? */
-void
-e_selection_model_array_delete_rows(ESelectionModelArray *esma, int row, int count)
-{
- if (esma->eba) {
- if (E_SELECTION_MODEL(esma)->mode == GTK_SELECTION_SINGLE)
- e_bit_array_delete_single_mode(esma->eba, row, count);
- else
- e_bit_array_delete(esma->eba, row, count);
-
- if (esma->cursor_row > row + count)
- esma->cursor_row -= count;
- else if (esma->cursor_row > row)
- esma->cursor_row = row;
-
- if (esma->cursor_row >= e_bit_array_bit_count (esma->eba)) {
- esma->cursor_row = e_bit_array_bit_count (esma->eba) - 1;
- } else if (esma->cursor_row < 0) {
- esma->cursor_row = -1;
- }
- if (esma->cursor_row >= 0)
- e_bit_array_change_one_row(esma->eba, esma->cursor_row, TRUE);
-
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- e_selection_model_selection_changed(E_SELECTION_MODEL(esma));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), esma->cursor_row, esma->cursor_col);
- }
-}
-
-void
-e_selection_model_array_insert_rows(ESelectionModelArray *esma, int row, int count)
-{
- if (esma->eba) {
- e_bit_array_insert(esma->eba, row, count);
-
- if (esma->cursor_row >= row)
- esma->cursor_row += count;
-
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- e_selection_model_selection_changed(E_SELECTION_MODEL(esma));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), esma->cursor_row, esma->cursor_col);
- }
-}
-
-void
-e_selection_model_array_move_row(ESelectionModelArray *esma, int old_row, int new_row)
-{
- ESelectionModel *esm = E_SELECTION_MODEL(esma);
-
- if (esma->eba) {
- gboolean selected = e_bit_array_value_at(esma->eba, old_row);
- gboolean cursor = (esma->cursor_row == old_row);
-
- if (old_row < esma->cursor_row && esma->cursor_row < new_row)
- esma->cursor_row --;
- else if (new_row < esma->cursor_row && esma->cursor_row < old_row)
- esma->cursor_row ++;
-
- e_bit_array_move_row(esma->eba, old_row, new_row);
-
- if (selected) {
- if (esm->mode == GTK_SELECTION_SINGLE)
- e_bit_array_select_single_row (esma->eba, new_row);
- else
- e_bit_array_change_one_row(esma->eba, new_row, TRUE);
- }
- if (cursor) {
- esma->cursor_row = new_row;
- }
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- e_selection_model_selection_changed(esm);
- e_selection_model_cursor_changed(esm, esma->cursor_row, esma->cursor_col);
- }
-}
-
-static void
-esma_dispose (GObject *object)
-{
- ESelectionModelArray *esma;
-
- esma = E_SELECTION_MODEL_ARRAY (object);
-
- if (esma->eba) {
- g_object_unref (esma->eba);
- esma->eba = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-esma_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY (object);
-
- switch (prop_id){
- case PROP_CURSOR_ROW:
- g_value_set_int (value, esma->cursor_row);
- break;
-
- case PROP_CURSOR_COL:
- g_value_set_int (value, esma->cursor_col);
- break;
- }
-}
-
-static void
-esma_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ESelectionModel *esm = E_SELECTION_MODEL (object);
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY (object);
-
- switch (prop_id){
- case PROP_CURSOR_ROW:
- e_selection_model_do_something(esm, g_value_get_int (value), esma->cursor_col, 0);
- break;
-
- case PROP_CURSOR_COL:
- e_selection_model_do_something(esm, esma->cursor_row, g_value_get_int(value), 0);
- break;
- }
-}
-
-/**
- * e_selection_model_is_row_selected
- * @selection: #ESelectionModel to check
- * @n: The row to check
- *
- * This routine calculates whether the given row is selected.
- *
- * Returns: %TRUE if the given row is selected
- */
-static gboolean
-esma_is_row_selected (ESelectionModel *selection,
- gint n)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- if (esma->eba)
- return e_bit_array_value_at(esma->eba, n);
- else
- return FALSE;
-}
-
-/**
- * e_selection_model_foreach
- * @selection: #ESelectionModel to traverse
- * @callback: The callback function to call back.
- * @closure: The closure
- *
- * This routine calls the given callback function once for each
- * selected row, passing closure as the closure.
- */
-static void
-esma_foreach (ESelectionModel *selection,
- EForeachFunc callback,
- gpointer closure)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- if (esma->eba)
- e_bit_array_foreach(esma->eba, callback, closure);
-}
-
-/**
- * e_selection_model_clear
- * @selection: #ESelectionModel to clear
- *
- * This routine clears the selection to no rows selected.
- */
-static void
-esma_clear(ESelectionModel *selection)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- if (esma->eba) {
- g_object_unref(esma->eba);
- esma->eba = NULL;
- }
- esma->cursor_row = -1;
- esma->cursor_col = -1;
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- e_selection_model_selection_changed(E_SELECTION_MODEL(esma));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), -1, -1);
-}
-
-#define PART(x,n) (((x) & (0x01010101 << n)) >> n)
-#define SECTION(x, n) (((x) >> (n * 8)) & 0xff)
-
-/**
- * e_selection_model_selected_count
- * @selection: #ESelectionModel to count
- *
- * This routine calculates the number of rows selected.
- *
- * Returns: The number of rows selected in the given model.
- */
-static gint
-esma_selected_count (ESelectionModel *selection)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- if (esma->eba)
- return e_bit_array_selected_count(esma->eba);
- else
- return 0;
-}
-
-/**
- * e_selection_model_select_all
- * @selection: #ESelectionModel to select all
- *
- * This routine selects all the rows in the given
- * #ESelectionModel.
- */
-static void
-esma_select_all (ESelectionModel *selection)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
-
- e_selection_model_array_confirm_row_count(esma);
-
- e_bit_array_select_all(esma->eba);
-
- esma->cursor_col = 0;
- esma->cursor_row = 0;
- esma->selection_start_row = 0;
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- e_selection_model_selection_changed(E_SELECTION_MODEL(esma));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), 0, 0);
-}
-
-/**
- * e_selection_model_invert_selection
- * @selection: #ESelectionModel to invert
- *
- * This routine inverts all the rows in the given
- * #ESelectionModel.
- */
-static void
-esma_invert_selection (ESelectionModel *selection)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
-
- e_selection_model_array_confirm_row_count(esma);
-
- e_bit_array_invert_selection(esma->eba);
-
- esma->cursor_col = -1;
- esma->cursor_row = -1;
- esma->selection_start_row = 0;
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- e_selection_model_selection_changed(E_SELECTION_MODEL(esma));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), -1, -1);
-}
-
-static int
-esma_row_count (ESelectionModel *selection)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- e_selection_model_array_confirm_row_count(esma);
- return e_bit_array_bit_count(esma->eba);
-}
-
-static void
-esma_change_one_row(ESelectionModel *selection, int row, gboolean grow)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- e_selection_model_array_confirm_row_count(esma);
- e_bit_array_change_one_row(esma->eba, row, grow);
-}
-
-static void
-esma_change_cursor (ESelectionModel *selection, int row, int col)
-{
- ESelectionModelArray *esma;
-
- g_return_if_fail(selection != NULL);
- g_return_if_fail(E_IS_SELECTION_MODEL(selection));
-
- esma = E_SELECTION_MODEL_ARRAY(selection);
-
- esma->cursor_row = row;
- esma->cursor_col = col;
-}
-
-static void
-esma_change_range(ESelectionModel *selection, int start, int end, gboolean grow)
-{
- int i;
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- if (start != end) {
- if (selection->sorter && e_sorter_needs_sorting(selection->sorter)) {
- for ( i = start; i < end; i++) {
- e_bit_array_change_one_row(esma->eba, e_sorter_sorted_to_model(selection->sorter, i), grow);
- }
- } else {
- e_selection_model_array_confirm_row_count(esma);
- e_bit_array_change_range(esma->eba, start, end, grow);
- }
- }
-}
-
-static int
-esma_cursor_row (ESelectionModel *selection)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- return esma->cursor_row;
-}
-
-static int
-esma_cursor_col (ESelectionModel *selection)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- return esma->cursor_col;
-}
-
-static void
-esma_real_select_single_row (ESelectionModel *selection, int row)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
-
- e_selection_model_array_confirm_row_count(esma);
-
- e_bit_array_select_single_row(esma->eba, row);
-
- esma->selection_start_row = row;
- esma->selected_row = row;
- esma->selected_range_end = row;
-}
-
-static void
-esma_select_single_row (ESelectionModel *selection, int row)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- int selected_row = esma->selected_row;
- esma_real_select_single_row (selection, row);
-
- if (selected_row != -1 && esma->eba && selected_row < e_bit_array_bit_count (esma->eba)) {
- if (selected_row != row) {
- e_selection_model_selection_row_changed(selection, selected_row);
- e_selection_model_selection_row_changed(selection, row);
- }
- } else {
- e_selection_model_selection_changed(selection);
- }
-}
-
-static void
-esma_toggle_single_row (ESelectionModel *selection, int row)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
-
- e_selection_model_array_confirm_row_count(esma);
- e_bit_array_toggle_single_row(esma->eba, row);
-
- esma->selection_start_row = row;
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- e_selection_model_selection_row_changed(E_SELECTION_MODEL(esma), row);
-}
-
-static void
-esma_real_move_selection_end (ESelectionModel *selection, int row)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- int old_start;
- int old_end;
- int new_start;
- int new_end;
- if (selection->sorter && e_sorter_needs_sorting(selection->sorter)) {
- old_start = MIN (e_sorter_model_to_sorted(selection->sorter, esma->selection_start_row),
- e_sorter_model_to_sorted(selection->sorter, esma->cursor_row));
- old_end = MAX (e_sorter_model_to_sorted(selection->sorter, esma->selection_start_row),
- e_sorter_model_to_sorted(selection->sorter, esma->cursor_row)) + 1;
- new_start = MIN (e_sorter_model_to_sorted(selection->sorter, esma->selection_start_row),
- e_sorter_model_to_sorted(selection->sorter, row));
- new_end = MAX (e_sorter_model_to_sorted(selection->sorter, esma->selection_start_row),
- e_sorter_model_to_sorted(selection->sorter, row)) + 1;
- } else {
- old_start = MIN (esma->selection_start_row, esma->cursor_row);
- old_end = MAX (esma->selection_start_row, esma->cursor_row) + 1;
- new_start = MIN (esma->selection_start_row, row);
- new_end = MAX (esma->selection_start_row, row) + 1;
- }
- /* This wouldn't work nearly so smoothly if one end of the selection weren't held in place. */
- if (old_start < new_start)
- esma_change_range(selection, old_start, new_start, FALSE);
- if (new_start < old_start)
- esma_change_range(selection, new_start, old_start, TRUE);
- if (old_end < new_end)
- esma_change_range(selection, old_end, new_end, TRUE);
- if (new_end < old_end)
- esma_change_range(selection, new_end, old_end, FALSE);
- esma->selected_row = -1;
- esma->selected_range_end = -1;
-}
-
-static void
-esma_move_selection_end (ESelectionModel *selection, int row)
-{
- esma_real_move_selection_end (selection, row);
- e_selection_model_selection_changed(selection);
-}
-
-static void
-esma_set_selection_end (ESelectionModel *selection, int row)
-{
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection);
- int selected_range_end = esma->selected_range_end;
- int view_row = e_sorter_model_to_sorted(selection->sorter, row);
-
- esma_real_select_single_row(selection, esma->selection_start_row);
- esma->cursor_row = esma->selection_start_row;
- esma_real_move_selection_end(selection, row);
-
- esma->selected_range_end = view_row;
- if (selected_range_end != -1 && view_row != -1) {
- if (selected_range_end == view_row - 1 ||
- selected_range_end == view_row + 1) {
- e_selection_model_selection_row_changed(selection, selected_range_end);
- e_selection_model_selection_row_changed(selection, view_row);
- }
- }
- e_selection_model_selection_changed(selection);
-}
-
-int
-e_selection_model_array_get_row_count (ESelectionModelArray *esma)
-{
- g_return_val_if_fail(esma != NULL, 0);
- g_return_val_if_fail(E_IS_SELECTION_MODEL_ARRAY(esma), 0);
-
- if (E_SELECTION_MODEL_ARRAY_GET_CLASS(esma)->get_row_count)
- return E_SELECTION_MODEL_ARRAY_GET_CLASS(esma)->get_row_count (esma);
- else
- return 0;
-}
-
-
-static void
-e_selection_model_array_init (ESelectionModelArray *esma)
-{
- esma->eba = NULL;
- esma->selection_start_row = 0;
- esma->cursor_row = -1;
- esma->cursor_col = -1;
-
- esma->selected_row = -1;
- esma->selected_range_end = -1;
-}
-
-static void
-e_selection_model_array_class_init (ESelectionModelArrayClass *klass)
-{
- GObjectClass *object_class;
- ESelectionModelClass *esm_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS(klass);
- esm_class = E_SELECTION_MODEL_CLASS(klass);
-
- object_class->dispose = esma_dispose;
- object_class->get_property = esma_get_property;
- object_class->set_property = esma_set_property;
-
- esm_class->is_row_selected = esma_is_row_selected ;
- esm_class->foreach = esma_foreach ;
- esm_class->clear = esma_clear ;
- esm_class->selected_count = esma_selected_count ;
- esm_class->select_all = esma_select_all ;
- esm_class->invert_selection = esma_invert_selection ;
- esm_class->row_count = esma_row_count ;
-
- esm_class->change_one_row = esma_change_one_row ;
- esm_class->change_cursor = esma_change_cursor ;
- esm_class->cursor_row = esma_cursor_row ;
- esm_class->cursor_col = esma_cursor_col ;
-
- esm_class->select_single_row = esma_select_single_row ;
- esm_class->toggle_single_row = esma_toggle_single_row ;
- esm_class->move_selection_end = esma_move_selection_end ;
- esm_class->set_selection_end = esma_set_selection_end ;
-
- klass->get_row_count = NULL ;
-
- g_object_class_install_property (object_class, PROP_CURSOR_ROW,
- g_param_spec_int ("cursor_row",
- _("Cursor Row"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_COL,
- g_param_spec_int ("cursor_col",
- _("Cursor Column"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-}
-
-E_MAKE_TYPE(e_selection_model_array, "ESelectionModelArray", ESelectionModelArray,
- e_selection_model_array_class_init, e_selection_model_array_init, PARENT_TYPE)
diff --git a/widgets/misc/e-selection-model-array.h b/widgets/misc/e-selection-model-array.h
deleted file mode 100644
index a533030f92..0000000000
--- a/widgets/misc/e-selection-model-array.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-selection-model-array.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_SELECTION_MODEL_ARRAY_H_
-#define _E_SELECTION_MODEL_ARRAY_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/widgets/e-selection-model.h>
-#include <gal/util/e-bit-array.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_SELECTION_MODEL_ARRAY_TYPE (e_selection_model_array_get_type ())
-#define E_SELECTION_MODEL_ARRAY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_SELECTION_MODEL_ARRAY_TYPE, ESelectionModelArray))
-#define E_SELECTION_MODEL_ARRAY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_SELECTION_MODEL_ARRAY_TYPE, ESelectionModelArrayClass))
-#define E_IS_SELECTION_MODEL_ARRAY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_SELECTION_MODEL_ARRAY_TYPE))
-#define E_IS_SELECTION_MODEL_ARRAY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_SELECTION_MODEL_ARRAY_TYPE))
-#define E_SELECTION_MODEL_ARRAY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_SELECTION_MODEL_ARRAY_TYPE, ESelectionModelArrayClass))
-
-typedef struct {
- ESelectionModel base;
-
- EBitArray *eba;
-
- gint cursor_row;
- gint cursor_col;
- gint selection_start_row;
-
- guint model_changed_id;
- guint model_row_inserted_id, model_row_deleted_id;
-
- /* Anything other than -1 means that the selection is a single
- * row. This being -1 does not impart any information. */
- gint selected_row;
- /* Anything other than -1 means that the selection is a all
- * rows between selection_start_path and cursor_path where
- * selected_range_end is the rwo number of cursor_path. This
- * being -1 does not impart any information. */
- gint selected_range_end;
-
- guint frozen : 1;
- guint selection_model_changed : 1;
- guint group_info_changed : 1;
-} ESelectionModelArray;
-
-typedef struct {
- ESelectionModelClass parent_class;
-
- gint (*get_row_count) (ESelectionModelArray *selection);
-} ESelectionModelArrayClass;
-
-GType e_selection_model_array_get_type (void);
-
-/* Protected Functions */
-void e_selection_model_array_insert_rows (ESelectionModelArray *esm,
- int row,
- int count);
-void e_selection_model_array_delete_rows (ESelectionModelArray *esm,
- int row,
- int count);
-void e_selection_model_array_move_row (ESelectionModelArray *esm,
- int old_row,
- int new_row);
-void e_selection_model_array_confirm_row_count (ESelectionModelArray *esm);
-
-/* Protected Virtual Function */
-gint e_selection_model_array_get_row_count (ESelectionModelArray *esm);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _E_SELECTION_MODEL_ARRAY_H_ */
diff --git a/widgets/misc/e-selection-model-simple.c b/widgets/misc/e-selection-model-simple.c
deleted file mode 100644
index 51a0d86623..0000000000
--- a/widgets/misc/e-selection-model-simple.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-selection-model-simple.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gal/util/e-util.h>
-#include "e-selection-model-array.h"
-#include "e-selection-model-simple.h"
-
-#define PARENT_TYPE e_selection_model_array_get_type ()
-
-static ESelectionModelArray *parent_class;
-
-static gint esms_get_row_count (ESelectionModelArray *esma);
-
-static void
-e_selection_model_simple_init (ESelectionModelSimple *selection)
-{
- selection->row_count = 0;
-}
-
-static void
-e_selection_model_simple_class_init (ESelectionModelSimpleClass *klass)
-{
- ESelectionModelArrayClass *esma_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- esma_class = E_SELECTION_MODEL_ARRAY_CLASS(klass);
-
- esma_class->get_row_count = esms_get_row_count;
-}
-
-E_MAKE_TYPE(e_selection_model_simple, "ESelectionModelSimple", ESelectionModelSimple,
- e_selection_model_simple_class_init, e_selection_model_simple_init, PARENT_TYPE)
-
-/**
- * e_selection_model_simple_new
- *
- * This routine creates a new #ESelectionModelSimple.
- *
- * Returns: The new #ESelectionModelSimple.
- */
-ESelectionModelSimple *
-e_selection_model_simple_new (void)
-{
- return g_object_new (E_SELECTION_MODEL_SIMPLE_TYPE, NULL);
-}
-
-void
-e_selection_model_simple_set_row_count (ESelectionModelSimple *esms,
- int row_count)
-{
- if (esms->row_count != row_count) {
- ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(esms);
- if (esma->eba)
- g_object_unref(esma->eba);
- esma->eba = NULL;
- esma->selected_row = -1;
- esma->selected_range_end = -1;
- }
- esms->row_count = row_count;
-}
-
-static gint
-esms_get_row_count (ESelectionModelArray *esma)
-{
- ESelectionModelSimple *esms = E_SELECTION_MODEL_SIMPLE(esma);
-
- return esms->row_count;
-}
-
-void e_selection_model_simple_insert_rows (ESelectionModelSimple *esms,
- int row,
- int count)
-{
- esms->row_count += count;
- e_selection_model_array_insert_rows (E_SELECTION_MODEL_ARRAY(esms), row, count);
-}
-
-void
-e_selection_model_simple_delete_rows (ESelectionModelSimple *esms,
- int row,
- int count)
-{
- esms->row_count -= count;
- e_selection_model_array_delete_rows (E_SELECTION_MODEL_ARRAY(esms), row, count);
-}
-
-void
-e_selection_model_simple_move_row (ESelectionModelSimple *esms,
- int old_row,
- int new_row)
-{
- e_selection_model_array_move_row (E_SELECTION_MODEL_ARRAY(esms), old_row, new_row);
-}
diff --git a/widgets/misc/e-selection-model-simple.h b/widgets/misc/e-selection-model-simple.h
deleted file mode 100644
index 6b4f84b4f9..0000000000
--- a/widgets/misc/e-selection-model-simple.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-selection-model-simple.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_SELECTION_MODEL_SIMPLE_H_
-#define _E_SELECTION_MODEL_SIMPLE_H_
-
-#include <gal/widgets/e-selection-model-array.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_SELECTION_MODEL_SIMPLE_TYPE (e_selection_model_simple_get_type ())
-#define E_SELECTION_MODEL_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_SELECTION_MODEL_SIMPLE_TYPE, ESelectionModelSimple))
-#define E_SELECTION_MODEL_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_SELECTION_MODEL_SIMPLE_TYPE, ESelectionModelSimpleClass))
-#define E_IS_SELECTION_MODEL_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_SELECTION_MODEL_SIMPLE_TYPE))
-#define E_IS_SELECTION_MODEL_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_SELECTION_MODEL_SIMPLE_TYPE))
-
-typedef struct {
- ESelectionModelArray parent;
-
- int row_count;
-} ESelectionModelSimple;
-
-typedef struct {
- ESelectionModelArrayClass parent_class;
-} ESelectionModelSimpleClass;
-
-GType e_selection_model_simple_get_type (void);
-ESelectionModelSimple *e_selection_model_simple_new (void);
-
-void e_selection_model_simple_insert_rows (ESelectionModelSimple *esms,
- int row,
- int count);
-void e_selection_model_simple_delete_rows (ESelectionModelSimple *esms,
- int row,
- int count);
-void e_selection_model_simple_move_row (ESelectionModelSimple *esms,
- int old_row,
- int new_row);
-
-void e_selection_model_simple_set_row_count (ESelectionModelSimple *selection,
- int row_count);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SELECTION_MODEL_SIMPLE_H_ */
-
diff --git a/widgets/misc/e-selection-model.c b/widgets/misc/e-selection-model.c
deleted file mode 100644
index 991fc78490..0000000000
--- a/widgets/misc/e-selection-model.c
+++ /dev/null
@@ -1,689 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-selection-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gdk/gdkkeysyms.h>
-#include "e-selection-model.h"
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE G_TYPE_OBJECT
-
-static GObjectClass *e_selection_model_parent_class;
-
-enum {
- CURSOR_CHANGED,
- CURSOR_ACTIVATED,
- SELECTION_CHANGED,
- SELECTION_ROW_CHANGED,
- LAST_SIGNAL
-};
-
-static guint e_selection_model_signals [LAST_SIGNAL] = { 0, };
-
-enum {
- PROP_0,
- PROP_SORTER,
- PROP_SELECTION_MODE,
- PROP_CURSOR_MODE
-};
-
-inline static void
-add_sorter(ESelectionModel *esm, ESorter *sorter)
-{
- esm->sorter = sorter;
- if (sorter) {
- g_object_ref (sorter);
- }
-}
-
-inline static void
-drop_sorter(ESelectionModel *esm)
-{
- if (esm->sorter) {
- g_object_unref (esm->sorter);
- }
- esm->sorter = NULL;
-}
-
-static void
-esm_dispose (GObject *object)
-{
- ESelectionModel *esm;
-
- esm = E_SELECTION_MODEL (object);
-
- drop_sorter(esm);
-
- if (e_selection_model_parent_class->dispose)
- (* e_selection_model_parent_class->dispose) (object);
-}
-
-static void
-esm_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ESelectionModel *esm = E_SELECTION_MODEL (object);
-
- switch (prop_id){
- case PROP_SORTER:
- g_value_set_object (value, esm->sorter);
- break;
-
- case PROP_SELECTION_MODE:
- g_value_set_int (value, esm->mode);
- break;
-
- case PROP_CURSOR_MODE:
- g_value_set_int (value, esm->cursor_mode);
- break;
- }
-}
-
-static void
-esm_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ESelectionModel *esm = E_SELECTION_MODEL (object);
-
- switch (prop_id){
- case PROP_SORTER:
- drop_sorter(esm);
- add_sorter(esm, g_value_get_object (value) ? E_SORTER(g_value_get_object(value)) : NULL);
- break;
-
- case PROP_SELECTION_MODE:
- esm->mode = g_value_get_int (value);
- if (esm->mode == GTK_SELECTION_SINGLE) {
- int cursor_row = e_selection_model_cursor_row(esm);
- int cursor_col = e_selection_model_cursor_col(esm);
- e_selection_model_do_something(esm, cursor_row, cursor_col, 0);
- }
- break;
-
- case PROP_CURSOR_MODE:
- esm->cursor_mode = g_value_get_int (value);
- break;
- }
-}
-
-static void
-e_selection_model_init (ESelectionModel *selection)
-{
- selection->mode = GTK_SELECTION_MULTIPLE;
- selection->cursor_mode = E_CURSOR_SIMPLE;
- selection->old_selection = -1;
-}
-
-static void
-e_selection_model_class_init (ESelectionModelClass *klass)
-{
- GObjectClass *object_class;
-
- e_selection_model_parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS(klass);
-
- object_class->dispose = esm_dispose;
- object_class->get_property = esm_get_property;
- object_class->set_property = esm_set_property;
-
- e_selection_model_signals [CURSOR_CHANGED] =
- g_signal_new ("cursor_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ESelectionModelClass, cursor_changed),
- NULL, NULL,
- e_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- e_selection_model_signals [CURSOR_ACTIVATED] =
- g_signal_new ("cursor_activated",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ESelectionModelClass, cursor_activated),
- NULL, NULL,
- e_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- e_selection_model_signals [SELECTION_CHANGED] =
- g_signal_new ("selection_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ESelectionModelClass, selection_changed),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_selection_model_signals [SELECTION_ROW_CHANGED] =
- g_signal_new ("selection_row_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ESelectionModelClass, selection_row_changed),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- klass->cursor_changed = NULL;
- klass->cursor_activated = NULL;
- klass->selection_changed = NULL;
- klass->selection_row_changed = NULL;
-
- klass->is_row_selected = NULL;
- klass->foreach = NULL;
- klass->clear = NULL;
- klass->selected_count = NULL;
- klass->select_all = NULL;
- klass->invert_selection = NULL;
- klass->row_count = NULL;
-
- klass->change_one_row = NULL;
- klass->change_cursor = NULL;
- klass->cursor_row = NULL;
- klass->cursor_col = NULL;
-
- klass->select_single_row = NULL;
- klass->toggle_single_row = NULL;
- klass->move_selection_end = NULL;
- klass->set_selection_end = NULL;
-
- g_object_class_install_property (object_class, PROP_SORTER,
- g_param_spec_object ("sorter",
- _("Sorter"),
- /*_( */"XXX blurb" /*)*/,
- E_SORTER_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_SELECTION_MODE,
- g_param_spec_int ("selection_mode",
- _("Selection Mode"),
- /*_( */"XXX blurb" /*)*/,
- GTK_SELECTION_NONE, GTK_SELECTION_MULTIPLE,
- GTK_SELECTION_SINGLE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_MODE,
- g_param_spec_int ("cursor_mode",
- _("Cursor Mode"),
- /*_( */"XXX blurb" /*)*/,
- E_CURSOR_LINE, E_CURSOR_SPREADSHEET,
- E_CURSOR_LINE,
- G_PARAM_READWRITE));
-}
-
-E_MAKE_TYPE(e_selection_model, "ESelectionModel", ESelectionModel,
- e_selection_model_class_init, e_selection_model_init, PARENT_TYPE)
-
-/**
- * e_selection_model_is_row_selected
- * @selection: #ESelectionModel to check
- * @n: The row to check
- *
- * This routine calculates whether the given row is selected.
- *
- * Returns: %TRUE if the given row is selected
- */
-gboolean
-e_selection_model_is_row_selected (ESelectionModel *selection,
- gint n)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->is_row_selected)
- return E_SELECTION_MODEL_GET_CLASS(selection)->is_row_selected (selection, n);
- else
- return FALSE;
-}
-
-/**
- * e_selection_model_foreach
- * @selection: #ESelectionModel to traverse
- * @callback: The callback function to call back.
- * @closure: The closure
- *
- * This routine calls the given callback function once for each
- * selected row, passing closure as the closure.
- */
-void
-e_selection_model_foreach (ESelectionModel *selection,
- EForeachFunc callback,
- gpointer closure)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->foreach)
- E_SELECTION_MODEL_GET_CLASS(selection)->foreach (selection, callback, closure);
-}
-
-/**
- * e_selection_model_clear
- * @selection: #ESelectionModel to clear
- *
- * This routine clears the selection to no rows selected.
- */
-void
-e_selection_model_clear(ESelectionModel *selection)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->clear)
- E_SELECTION_MODEL_GET_CLASS(selection)->clear (selection);
-}
-
-/**
- * e_selection_model_selected_count
- * @selection: #ESelectionModel to count
- *
- * This routine calculates the number of rows selected.
- *
- * Returns: The number of rows selected in the given model.
- */
-gint
-e_selection_model_selected_count (ESelectionModel *selection)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->selected_count)
- return E_SELECTION_MODEL_GET_CLASS(selection)->selected_count (selection);
- else
- return 0;
-}
-
-/**
- * e_selection_model_select_all
- * @selection: #ESelectionModel to select all
- *
- * This routine selects all the rows in the given
- * #ESelectionModel.
- */
-void
-e_selection_model_select_all (ESelectionModel *selection)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->select_all)
- E_SELECTION_MODEL_GET_CLASS(selection)->select_all (selection);
-}
-
-/**
- * e_selection_model_invert_selection
- * @selection: #ESelectionModel to invert
- *
- * This routine inverts all the rows in the given
- * #ESelectionModel.
- */
-void
-e_selection_model_invert_selection (ESelectionModel *selection)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->invert_selection)
- E_SELECTION_MODEL_GET_CLASS(selection)->invert_selection (selection);
-}
-
-int
-e_selection_model_row_count (ESelectionModel *selection)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->row_count)
- return E_SELECTION_MODEL_GET_CLASS(selection)->row_count (selection);
- else
- return 0;
-}
-
-void
-e_selection_model_change_one_row(ESelectionModel *selection, int row, gboolean grow)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->change_one_row)
- E_SELECTION_MODEL_GET_CLASS(selection)->change_one_row (selection, row, grow);
-}
-
-void
-e_selection_model_change_cursor (ESelectionModel *selection, int row, int col)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->change_cursor)
- E_SELECTION_MODEL_GET_CLASS(selection)->change_cursor (selection, row, col);
-}
-
-int
-e_selection_model_cursor_row (ESelectionModel *selection)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->cursor_row)
- return E_SELECTION_MODEL_GET_CLASS(selection)->cursor_row (selection);
- else
- return -1;
-}
-
-int
-e_selection_model_cursor_col (ESelectionModel *selection)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->cursor_col)
- return E_SELECTION_MODEL_GET_CLASS(selection)->cursor_col (selection);
- else
- return -1;
-}
-
-void
-e_selection_model_select_single_row (ESelectionModel *selection, int row)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->select_single_row)
- E_SELECTION_MODEL_GET_CLASS(selection)->select_single_row (selection, row);
-}
-
-void
-e_selection_model_toggle_single_row (ESelectionModel *selection, int row)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->toggle_single_row)
- E_SELECTION_MODEL_GET_CLASS(selection)->toggle_single_row (selection, row);
-}
-
-void
-e_selection_model_move_selection_end (ESelectionModel *selection, int row)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->move_selection_end)
- E_SELECTION_MODEL_GET_CLASS(selection)->move_selection_end (selection, row);
-}
-
-void
-e_selection_model_set_selection_end (ESelectionModel *selection, int row)
-{
- if (E_SELECTION_MODEL_GET_CLASS(selection)->set_selection_end)
- E_SELECTION_MODEL_GET_CLASS(selection)->set_selection_end (selection, row);
-}
-
-/**
- * e_selection_model_do_something
- * @selection: #ESelectionModel to do something to.
- * @row: The row to do something in.
- * @col: The col to do something in.
- * @state: The state in which to do something.
- *
- * This routine does whatever is appropriate as if the user clicked
- * the mouse in the given row and column.
- */
-void
-e_selection_model_do_something (ESelectionModel *selection,
- guint row,
- guint col,
- GdkModifierType state)
-{
- gint shift_p = state & GDK_SHIFT_MASK;
- gint ctrl_p = state & GDK_CONTROL_MASK;
- int row_count;
-
- selection->old_selection = -1;
-
- if (row == -1 && col != -1)
- row = 0;
- if (col == -1 && row != -1)
- col = 0;
-
- row_count = e_selection_model_row_count(selection);
- if (row_count >= 0 && row < row_count) {
- switch (selection->mode) {
- case GTK_SELECTION_SINGLE:
- e_selection_model_select_single_row (selection, row);
- break;
- case GTK_SELECTION_BROWSE:
- case GTK_SELECTION_MULTIPLE:
- if (shift_p) {
- e_selection_model_set_selection_end (selection, row);
- } else {
- if (ctrl_p) {
- e_selection_model_toggle_single_row (selection, row);
- } else {
- e_selection_model_select_single_row (selection, row);
- }
- }
- break;
- default:
- g_assert_not_reached ();
- break;
- }
- e_selection_model_change_cursor(selection, row, col);
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_CHANGED], 0,
- row, col);
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_ACTIVATED], 0,
- row, col);
- }
-}
-
-/**
- * e_selection_model_maybe_do_something
- * @selection: #ESelectionModel to do something to.
- * @row: The row to do something in.
- * @col: The col to do something in.
- * @state: The state in which to do something.
- *
- * If this row is selected, this routine just moves the cursor row and
- * column. Otherwise, it does the same thing as
- * e_selection_model_do_something(). This is for being used on
- * right clicks and other events where if the user hit the selection,
- * they don't want it to change.
- */
-gboolean
-e_selection_model_maybe_do_something (ESelectionModel *selection,
- guint row,
- guint col,
- GdkModifierType state)
-{
- selection->old_selection = -1;
-
- if (e_selection_model_is_row_selected(selection, row)) {
- e_selection_model_change_cursor(selection, row, col);
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_CHANGED], 0,
- row, col);
- return FALSE;
- } else {
- e_selection_model_do_something(selection, row, col, state);
- return TRUE;
- }
-}
-
-void
-e_selection_model_right_click_down (ESelectionModel *selection,
- guint row,
- guint col,
- GdkModifierType state)
-{
- if (selection->mode == GTK_SELECTION_SINGLE) {
- selection->old_selection = e_selection_model_cursor_row (selection);
- e_selection_model_select_single_row (selection, row);
- } else {
- e_selection_model_maybe_do_something (selection, row, col, state);
- }
-}
-
-void
-e_selection_model_right_click_up (ESelectionModel *selection)
-{
- if (selection->mode == GTK_SELECTION_SINGLE && selection->old_selection != -1) {
- e_selection_model_select_single_row (selection, selection->old_selection);
- }
-}
-
-void
-e_selection_model_select_as_key_press (ESelectionModel *selection,
- guint row,
- guint col,
- GdkModifierType state)
-{
- int cursor_activated = TRUE;
-
- gint shift_p = state & GDK_SHIFT_MASK;
- gint ctrl_p = state & GDK_CONTROL_MASK;
-
- selection->old_selection = -1;
-
- switch (selection->mode) {
- case GTK_SELECTION_BROWSE:
- case GTK_SELECTION_MULTIPLE:
- if (shift_p) {
- e_selection_model_set_selection_end (selection, row);
- } else if (!ctrl_p) {
- e_selection_model_select_single_row (selection, row);
- } else
- cursor_activated = FALSE;
- break;
- case GTK_SELECTION_SINGLE:
- e_selection_model_select_single_row (selection, row);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
- if (row != -1) {
- e_selection_model_change_cursor(selection, row, col);
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_CHANGED], 0,
- row, col);
- if (cursor_activated)
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_ACTIVATED], 0,
- row, col);
- }
-}
-
-static gint
-move_selection (ESelectionModel *selection,
- gboolean up,
- GdkModifierType state)
-{
- int row = e_selection_model_cursor_row(selection);
- int col = e_selection_model_cursor_col(selection);
- int row_count;
-
- row = e_sorter_model_to_sorted(selection->sorter, row);
- if (up)
- row--;
- else
- row++;
- if (row < 0)
- row = 0;
- row_count = e_selection_model_row_count(selection);
- if (row >= row_count)
- row = row_count - 1;
- row = e_sorter_sorted_to_model(selection->sorter, row);
-
- e_selection_model_select_as_key_press (selection, row, col, state);
- return TRUE;
-}
-
-/**
- * e_selection_model_key_press
- * @selection: #ESelectionModel to affect.
- * @key: The event.
- *
- * This routine does whatever is appropriate as if the user pressed
- * the given key.
- *
- * Returns: %TRUE if the #ESelectionModel used the key.
- */
-gint
-e_selection_model_key_press (ESelectionModel *selection,
- GdkEventKey *key)
-{
- selection->old_selection = -1;
-
- switch (key->keyval) {
- case GDK_Up:
- case GDK_KP_Up:
- return move_selection(selection, TRUE, key->state);
- break;
- case GDK_Down:
- case GDK_KP_Down:
- return move_selection(selection, FALSE, key->state);
- break;
- case GDK_space:
- case GDK_KP_Space:
- if (selection->mode != GTK_SELECTION_SINGLE) {
- int row = e_selection_model_cursor_row(selection);
- int col = e_selection_model_cursor_col(selection);
- e_selection_model_toggle_single_row (selection, row);
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_ACTIVATED], 0,
- row, col);
- return TRUE;
- }
- break;
- case GDK_Return:
- case GDK_KP_Enter:
- if (selection->mode != GTK_SELECTION_SINGLE) {
- int row = e_selection_model_cursor_row(selection);
- int col = e_selection_model_cursor_col(selection);
- e_selection_model_select_single_row (selection, row);
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_ACTIVATED], 0,
- row, col);
- return TRUE;
- }
- break;
- case GDK_Home:
- case GDK_KP_Home:
- if (selection->cursor_mode == E_CURSOR_LINE) {
- int row = 0;
- int cursor_col = e_selection_model_cursor_col(selection);
-
- row = e_sorter_sorted_to_model(selection->sorter, row);
- e_selection_model_select_as_key_press (selection, row, cursor_col, key->state);
- return TRUE;
- }
- break;
- case GDK_End:
- case GDK_KP_End:
- if (selection->cursor_mode == E_CURSOR_LINE) {
- int row = e_selection_model_row_count(selection) - 1;
- int cursor_col = e_selection_model_cursor_col(selection);
-
- row = e_sorter_sorted_to_model(selection->sorter, row);
- e_selection_model_select_as_key_press (selection, row, cursor_col, key->state);
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-void
-e_selection_model_cursor_changed (ESelectionModel *selection,
- int row,
- int col)
-{
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_CHANGED], 0,
- row, col);
-}
-
-void
-e_selection_model_cursor_activated (ESelectionModel *selection,
- int row,
- int col)
-{
- g_signal_emit(selection,
- e_selection_model_signals[CURSOR_ACTIVATED], 0,
- row, col);
-}
-
-void
-e_selection_model_selection_changed (ESelectionModel *selection)
-{
- g_signal_emit(selection,
- e_selection_model_signals[SELECTION_CHANGED], 0);
-}
-
-void
-e_selection_model_selection_row_changed (ESelectionModel *selection,
- int row)
-{
- g_signal_emit(selection,
- e_selection_model_signals[SELECTION_ROW_CHANGED], 0,
- row);
-}
diff --git a/widgets/misc/e-selection-model.h b/widgets/misc/e-selection-model.h
deleted file mode 100644
index a78bdfd9c3..0000000000
--- a/widgets/misc/e-selection-model.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-selection-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_SELECTION_MODEL_H_
-#define _E_SELECTION_MODEL_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/util/e-sorter.h>
-#include <gdk/gdkevents.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_SELECTION_MODEL_TYPE (e_selection_model_get_type ())
-#define E_SELECTION_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_SELECTION_MODEL_TYPE, ESelectionModel))
-#define E_SELECTION_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_SELECTION_MODEL_TYPE, ESelectionModelClass))
-#define E_IS_SELECTION_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_SELECTION_MODEL_TYPE))
-#define E_IS_SELECTION_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_SELECTION_MODEL_TYPE))
-#define E_SELECTION_MODEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_SELECTION_MODEL_TYPE, ESelectionModelClass))
-
-#ifndef _E_FOREACH_FUNC_H_
-#define _E_FOREACH_FUNC_H_
-typedef void (*EForeachFunc) (int model_row,
- gpointer closure);
-#endif
-
-/* list selection modes */
-typedef enum {
- E_CURSOR_LINE,
- E_CURSOR_SIMPLE,
- E_CURSOR_SPREADSHEET
-} ECursorMode;
-
-typedef struct {
- GObject base;
-
- ESorter *sorter;
-
- GtkSelectionMode mode;
- ECursorMode cursor_mode;
-
- int old_selection;
-} ESelectionModel;
-
-typedef struct {
- GObjectClass parent_class;
-
- /* Virtual methods */
- gboolean (*is_row_selected) (ESelectionModel *esm, int row);
- void (*foreach) (ESelectionModel *esm, EForeachFunc callback, gpointer closure);
- void (*clear) (ESelectionModel *esm);
- gint (*selected_count) (ESelectionModel *esm);
- void (*select_all) (ESelectionModel *esm);
- void (*invert_selection) (ESelectionModel *esm);
- int (*row_count) (ESelectionModel *esm);
-
- /* Protected virtual methods. */
- void (*change_one_row) (ESelectionModel *esm, int row, gboolean on);
- void (*change_cursor) (ESelectionModel *esm, int row, int col);
- int (*cursor_row) (ESelectionModel *esm);
- int (*cursor_col) (ESelectionModel *esm);
-
- void (*select_single_row) (ESelectionModel *selection, int row);
- void (*toggle_single_row) (ESelectionModel *selection, int row);
- void (*move_selection_end) (ESelectionModel *selection, int row);
- void (*set_selection_end) (ESelectionModel *selection, int row);
-
- /*
- * Signals
- */
-
- void (*cursor_changed) (ESelectionModel *esm, int row, int col);
- void (*cursor_activated) (ESelectionModel *esm, int row, int col);
- void (*selection_row_changed) (ESelectionModel *esm, int row);
- void (*selection_changed) (ESelectionModel *esm);
-
-} ESelectionModelClass;
-
-
-GType e_selection_model_get_type (void);
-void e_selection_model_do_something (ESelectionModel *esm,
- guint row,
- guint col,
- GdkModifierType state);
-gboolean e_selection_model_maybe_do_something (ESelectionModel *esm,
- guint row,
- guint col,
- GdkModifierType state);
-void e_selection_model_right_click_down (ESelectionModel *selection,
- guint row,
- guint col,
- GdkModifierType state);
-void e_selection_model_right_click_up (ESelectionModel *selection);
-gint e_selection_model_key_press (ESelectionModel *esm,
- GdkEventKey *key);
-void e_selection_model_select_as_key_press (ESelectionModel *esm,
- guint row,
- guint col,
- GdkModifierType state);
-
-/* Virtual functions */
-gboolean e_selection_model_is_row_selected (ESelectionModel *esm,
- gint n);
-void e_selection_model_foreach (ESelectionModel *esm,
- EForeachFunc callback,
- gpointer closure);
-void e_selection_model_clear (ESelectionModel *esm);
-gint e_selection_model_selected_count (ESelectionModel *esm);
-void e_selection_model_select_all (ESelectionModel *esm);
-void e_selection_model_invert_selection (ESelectionModel *esm);
-int e_selection_model_row_count (ESelectionModel *esm);
-
-
-/* Private virtual Functions */
-void e_selection_model_change_one_row (ESelectionModel *esm,
- int row,
- gboolean on);
-void e_selection_model_change_cursor (ESelectionModel *esm,
- int row,
- int col);
-int e_selection_model_cursor_row (ESelectionModel *esm);
-int e_selection_model_cursor_col (ESelectionModel *esm);
-void e_selection_model_select_single_row (ESelectionModel *selection,
- int row);
-void e_selection_model_toggle_single_row (ESelectionModel *selection,
- int row);
-void e_selection_model_move_selection_end (ESelectionModel *selection,
- int row);
-void e_selection_model_set_selection_end (ESelectionModel *selection,
- int row);
-
-/* Signals */
-void e_selection_model_cursor_changed (ESelectionModel *selection,
- int row,
- int col);
-void e_selection_model_cursor_activated (ESelectionModel *selection,
- int row,
- int col);
-void e_selection_model_selection_row_changed (ESelectionModel *selection,
- int row);
-void e_selection_model_selection_changed (ESelectionModel *selection);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _E_SELECTION_MODEL_H_ */
-
diff --git a/widgets/misc/e-unicode.c b/widgets/misc/e-unicode.c
deleted file mode 100644
index d7bd33caa7..0000000000
--- a/widgets/misc/e-unicode.c
+++ /dev/null
@@ -1,2055 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-unicode.c - utf-8 support functions for gal
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Lauris Kaplinski <lauris@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/*
- * TODO: Break simple ligatures in e_utf8_strstrcasedecomp
- */
-
-#include <config.h>
-
-#include "e-unicode.h"
-
-#include "gal/util/e-i18n.h"
-#include <ctype.h>
-#include <string.h>
-#include <stdio.h>
-#include <iconv.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkmenuitem.h>
-#include <libxml/xmlmemory.h>
-#include <stdlib.h>
-#include "gal/util/e-iconv.h"
-
-#ifdef HAVE_ALLOCA_H
-#include <alloca.h>
-#endif
-
-#define d(x) x
-
-#define FONT_TESTING
-#define MAX_DECOMP 8
-
-static gint e_canonical_decomposition (gunichar ch, gunichar * buf);
-static gunichar e_stripped_char (gunichar ch);
-
-#ifndef NO_WARNINGS
-#warning FIXME: this has not been ported fully yet - non ASCII people beware.
-#endif
-
-/*
- * This my favourite
- *
- * strstr doing case insensitive, decomposing search
- *
- * Lauris
- */
-
-const gchar *
-e_utf8_strstrcasedecomp (const gchar *haystack, const gchar *needle)
-{
- gunichar *nuni;
- gunichar unival;
- gint nlen;
- const guchar *o, *p;
-
- if (haystack == NULL) return NULL;
- if (needle == NULL) return NULL;
- if (strlen (needle) == 0) return haystack;
- if (strlen (haystack) == 0) return NULL;
-
- nuni = alloca (sizeof (gunichar) * strlen (needle));
-
- nlen = 0;
- for (p = e_unicode_get_utf8 (needle, &unival); p && unival; p = e_unicode_get_utf8 (p, &unival)) {
- gint sc;
- sc = e_stripped_char (unival);
- if (sc) {
- nuni[nlen++] = sc;
- }
- }
- /* NULL means there was illegal utf-8 sequence */
- if (!p) return NULL;
- /* If everything is correct, we have decomposed, lowercase, stripped needle */
- if (nlen < 1) return haystack;
-
- o = haystack;
- for (p = e_unicode_get_utf8 (o, &unival); p && unival; p = e_unicode_get_utf8 (p, &unival)) {
- gint sc;
- sc = e_stripped_char (unival);
- if (sc) {
- /* We have valid stripped char */
- if (sc == nuni[0]) {
- const gchar *q = p;
- gint npos = 1;
- while (npos < nlen) {
- q = e_unicode_get_utf8 (q, &unival);
- if (!q || !unival) return NULL;
- sc = e_stripped_char (unival);
- if ((!sc) || (sc != nuni[npos])) break;
- npos++;
- }
- if (npos == nlen) {
- return o;
- }
- }
- }
- o = p;
- }
-
- return NULL;
-}
-
-const gchar *
-e_utf8_strstrcase (const gchar *haystack, const gchar *needle)
-{
- gunichar *nuni;
- gunichar unival;
- gint nlen;
- const guchar *o, *p;
-
- if (haystack == NULL) return NULL;
- if (needle == NULL) return NULL;
- if (strlen (needle) == 0) return haystack;
- if (strlen (haystack) == 0) return NULL;
-
- nuni = alloca (sizeof (gunichar) * strlen (needle));
-
- nlen = 0;
- for (p = e_unicode_get_utf8 (needle, &unival); p && unival; p = e_unicode_get_utf8 (p, &unival)) {
- nuni[nlen++] = g_unichar_tolower (unival);
- }
- /* NULL means there was illegal utf-8 sequence */
- if (!p) return NULL;
-
- o = haystack;
- for (p = e_unicode_get_utf8 (o, &unival); p && unival; p = e_unicode_get_utf8 (p, &unival)) {
- gint sc;
- sc = g_unichar_tolower (unival);
- /* We have valid stripped char */
- if (sc == nuni[0]) {
- const gchar *q = p;
- gint npos = 1;
- while (npos < nlen) {
- q = e_unicode_get_utf8 (q, &unival);
- if (!q || !unival) return NULL;
- sc = g_unichar_tolower (unival);
- if (sc != nuni[npos]) break;
- npos++;
- }
- if (npos == nlen) {
- return o;
- }
- }
- o = p;
- }
-
- return NULL;
-}
-
-#if 0
-const gchar *
-e_utf8_strstrcase (const gchar *haystack, const gchar *needle)
-{
- gchar *p;
- gunichar *huni, *nuni;
- gunichar unival;
- gint hlen, nlen, hp, np;
-
- if (haystack == NULL) return NULL;
- if (needle == NULL) return NULL;
- if (strlen (needle) == 0) return haystack;
-
- huni = alloca (sizeof (gunichar) * strlen (haystack));
-
- for (hlen = 0, p = e_unicode_get_utf8 (haystack, &unival); p && unival; hlen++, p = e_unicode_get_utf8 (p, &unival)) {
- huni[hlen] = g_unichar_tolower (unival);
- }
-
- if (!p) return NULL;
- if (hlen == 0) return NULL;
-
- nuni = alloca (sizeof (gunichar) * strlen (needle));
-
- for (nlen = 0, p = e_unicode_get_utf8 (needle, &unival); p && unival; nlen++, p = e_unicode_get_utf8 (p, &unival)) {
- nuni[nlen] = g_unichar_tolower (unival);
- }
-
- if (!p) return NULL;
- if (nlen == 0) return NULL;
-
- if (hlen < nlen) return NULL;
-
- for (hp = 0; hp <= hlen - nlen; hp++) {
- for (np = 0; np < nlen; np++) {
- if (huni[hp + np] != nuni[np]) break;
- }
- if (np == nlen) return haystack + unicode_offset_to_index (haystack, hp);
- }
-
- return NULL;
-}
-#endif
-
-gchar *
-e_utf8_from_gtk_event_key (GtkWidget *widget, guint keyval, const gchar *string)
-{
- gint unival;
- gchar *utf;
- gint unilen;
-
- if (keyval == GDK_VoidSymbol) {
- utf = e_utf8_from_locale_string (string);
- } else {
- unival = gdk_keyval_to_unicode (keyval);
-
- if (unival < ' ') return NULL;
-
- utf = g_new (gchar, 7);
-
- unilen = e_unichar_to_utf8 (unival, utf);
-
- utf[unilen] = '\0';
- }
-
- return utf;
-}
-
-gchar *
-e_utf8_from_iconv_string_sized (iconv_t ic, const gchar *string, gint bytes)
-{
- char *new, *ob;
- const char *ib;
- size_t ibl, obl;
-
- if (!string) return NULL;
-
- if (ic == (iconv_t) -1) {
- gint i;
- /* iso-8859-1 */
- ib = (char *) string;
- new = ob = g_new (unsigned char, bytes * 2 + 1);
- for (i = 0; i < (bytes); i ++) {
- ob += e_unichar_to_utf8 (ib[i], ob);
- }
- *ob = '\0';
- return new;
- }
-
- ib = string;
- ibl = bytes;
- new = ob = g_new (gchar, ibl * 6 + 1);
- obl = ibl * 6;
-
- while (ibl > 0) {
- e_iconv (ic, &ib, &ibl, &ob, &obl);
- if (ibl > 0) {
- gint len;
- if ((*ib & 0x80) == 0x00) len = 1;
- else if ((*ib &0xe0) == 0xc0) len = 2;
- else if ((*ib &0xf0) == 0xe0) len = 3;
- else if ((*ib &0xf8) == 0xf0) len = 4;
- else {
- g_warning ("Invalid UTF-8 sequence");
- break;
- }
- ib += len;
- ibl = bytes - (ib - string);
- if (ibl > bytes) ibl = 0;
- *ob++ = '_';
- obl--;
- }
- }
-
- *ob = '\0';
-
- return new;
-}
-
-gchar *
-e_utf8_from_iconv_string (iconv_t ic, const gchar *string)
-{
- if (!string) return NULL;
- return e_utf8_from_iconv_string_sized (ic, string, strlen (string));
-}
-
-gchar *
-e_utf8_to_iconv_string_sized (iconv_t ic, const gchar *string, gint bytes)
-{
- char *new, *ob;
- const char *ib;
- size_t ibl, obl;
-
- if (!string) return NULL;
-
- if (ic == (iconv_t) -1) {
- gint len;
- const gchar *u;
- gunichar uc;
-
- new = g_new (unsigned char, bytes * 4 + 1);
- u = string;
- len = 0;
-
- while ((u) && (u - string < bytes)) {
- u = e_unicode_get_utf8 (u, &uc);
- new[len++] = uc & 0xff;
- }
- new[len] = '\0';
- return new;
- }
-
- ib = string;
- ibl = bytes;
- new = ob = g_new (char, ibl * 4 + 4);
- obl = ibl * 4;
-
- while (ibl > 0) {
- e_iconv (ic, &ib, &ibl, &ob, &obl);
- if (ibl > 0) {
- gint len;
- if ((*ib & 0x80) == 0x00) len = 1;
- else if ((*ib &0xe0) == 0xc0) len = 2;
- else if ((*ib &0xf0) == 0xe0) len = 3;
- else if ((*ib &0xf8) == 0xf0) len = 4;
- else {
- g_warning ("Invalid UTF-8 sequence");
- break;
- }
- ib += len;
- ibl = bytes - (ib - string);
- if (ibl > bytes) ibl = 0;
-
- /* FIXME: this is wrong... what if the destination charset is 16 or 32 bit? */
- *ob++ = '_';
- obl--;
- }
- }
-
- /* Make sure to terminate with plenty of padding */
- memset (ob, 0, 4);
-
- return new;
-}
-
-gchar *
-e_utf8_to_iconv_string (iconv_t ic, const gchar *string)
-{
- if (!string) return NULL;
- return e_utf8_to_iconv_string_sized (ic, string, strlen (string));
-}
-
-gchar *
-e_utf8_from_charset_string_sized (const gchar *charset, const gchar *string, gint bytes)
-{
- iconv_t ic;
- char *ret;
-
- if (!string) return NULL;
-
- ic = e_iconv_open("utf-8", charset);
- ret = e_utf8_from_iconv_string_sized (ic, string, bytes);
- e_iconv_close(ic);
-
- return ret;
-}
-
-gchar *
-e_utf8_from_charset_string (const gchar *charset, const gchar *string)
-{
- if (!string) return NULL;
- return e_utf8_from_charset_string_sized (charset, string, strlen (string));
-}
-
-gchar *
-e_utf8_to_charset_string_sized (const gchar *charset, const gchar *string, gint bytes)
-{
- iconv_t ic;
- char *ret;
-
- if (!string) return NULL;
-
- ic = e_iconv_open(charset, "utf-8");
- ret = e_utf8_to_iconv_string_sized (ic, string, bytes);
- e_iconv_close(ic);
-
- return ret;
-}
-
-gchar *
-e_utf8_to_charset_string (const gchar *charset, const gchar *string)
-{
- if (!string) return NULL;
- return e_utf8_to_charset_string_sized (charset, string, strlen (string));
-}
-
-gchar *
-e_utf8_from_locale_string_sized (const gchar *string, gint bytes)
-{
- iconv_t ic;
- char *ret;
-
- if (!string) return NULL;
-
- ic = e_iconv_open("utf-8", e_iconv_locale_charset());
- ret = e_utf8_from_iconv_string_sized (ic, string, bytes);
- e_iconv_close(ic);
-
- return ret;
-}
-
-gchar *
-e_utf8_from_locale_string (const gchar *string)
-{
- if (!string) return NULL;
- return e_utf8_from_locale_string_sized (string, strlen (string));
-}
-
-gchar *
-e_utf8_to_locale_string_sized (const gchar *string, gint bytes)
-{
- iconv_t ic;
- char *ret;
-
- if (!string) return NULL;
-
- ic = e_iconv_open(e_iconv_locale_charset(), "utf-8");
- ret = e_utf8_to_iconv_string_sized (ic, string, bytes);
- e_iconv_close(ic);
-
- return ret;
-}
-
-gchar *
-e_utf8_to_locale_string (const gchar *string)
-{
- if (!string) return NULL;
- return e_utf8_to_locale_string_sized (string, strlen (string));
-}
-
-gboolean
-e_utf8_is_ascii (const gchar *string)
-{
- char c;
-
- g_return_val_if_fail (string != NULL, FALSE);
-
- for (; (c = *string); string++) {
- if (c & 0x80)
- return FALSE;
- }
-
- return TRUE;
-}
-
-gchar *
-e_utf8_gtk_entry_get_text (GtkEntry *entry)
-{
- return g_strdup (gtk_entry_get_text (entry));
-}
-
-gchar *
-e_utf8_gtk_editable_get_text (GtkEditable *editable)
-{
- return gtk_editable_get_chars (editable, 0, -1);
-}
-
-gchar *
-e_utf8_gtk_editable_get_chars (GtkEditable *editable, gint start, gint end)
-{
- return gtk_editable_get_chars (editable, start, end);
-}
-
-void
-e_utf8_gtk_editable_insert_text (GtkEditable *editable, const gchar *text, gint length, gint *position)
-{
- gtk_editable_insert_text (editable, text, length, position);
-}
-
-void
-e_utf8_gtk_editable_set_text (GtkEditable *editable, const gchar *text)
-{
- int position;
-
- gtk_editable_delete_text(editable, 0, -1);
- gtk_editable_insert_text (editable, text, strlen (text), &position);
-}
-
-void
-e_utf8_gtk_entry_set_text (GtkEntry *entry, const gchar *text)
-{
- if (!text)
- gtk_entry_set_text(entry, "");
- else
- gtk_entry_set_text (entry, text);
-}
-
-/*
- * Translate \U+XXXX\ sequences to utf8 chars
- */
-
-gchar *
-e_utf8_xml1_decode (const gchar *text)
-{
- const guchar *c;
- guchar *u, *d;
- int len, s;
-
- g_return_val_if_fail (text != NULL, NULL);
-
- len = strlen (text)+1;
- /* len * 2 is absolute maximum */
- u = d = g_malloc (len * 2);
-
- c = text;
- s = 0;
- while (s < len) {
- if ((s <= (len - 8)) &&
- (c[s ] == '\\') &&
- (c[s + 1] == 'U' ) &&
- (c[s + 2] == '+' ) &&
- isxdigit (c[s + 3]) &&
- isxdigit (c[s + 4]) &&
- isxdigit (c[s + 5]) &&
- isxdigit (c[s + 6]) &&
- (c[s + 7] == '\\')) {
- /* Valid \U+XXXX\ sequence */
- unsigned int unival;
- unival = strtol (c + s + 3, NULL, 16);
- d += e_unichar_to_utf8 (unival, d);
- s += 8;
- } else if (c[s] > 127) {
- /* fixme: We assume iso-8859-1 currently */
- d += e_unichar_to_utf8 (c[s], d);
- s += 1;
- } else {
- *d++ = c[s++];
- }
- }
- *d++ = '\0';
- u = g_realloc (u, (d - u));
-
- return u;
-}
-
-gchar *
-e_utf8_xml1_encode (const gchar *text)
-{
- guchar *u, *d, *c;
- int unival;
- int len;
-
- g_return_val_if_fail (text != NULL, NULL);
-
- len = 0;
- for (u = e_unicode_get_utf8 (text, &unival); u && unival; u = e_unicode_get_utf8 (u, &unival)) {
- if ((unival >= 0x80) || (unival == '\\')) {
- len += 8;
- } else {
- len += 1;
- }
- }
- d = c = g_new (guchar, len + 1);
-
- for (u = e_unicode_get_utf8 (text, &unival); u && unival; u = e_unicode_get_utf8 (u, &unival)) {
- if ((unival >= 0x80) || (unival == '\\')) {
- *c++ = '\\';
- *c++ = 'U';
- *c++ = '+';
- c += sprintf (c, "%04x", unival);
- *c++ = '\\';
- } else {
- *c++ = unival;
- }
- }
- *c = '\0';
-
- return d;
-}
-
-/**
- * e_unichar_to_utf8:
- * @c: a ISO10646 character code
- * @outbuf: output buffer, must have at least 6 bytes of space.
- * If %NULL, the length will be computed and returned
- * and nothing will be written to @out.
- *
- * Convert a single character to utf8
- *
- * Return value: number of bytes written
- **/
-
-gint
-e_unichar_to_utf8 (gint c, gchar *outbuf)
-{
- size_t len = 0;
- int first;
- int i;
-
- if (c < 0x80)
- {
- first = 0;
- len = 1;
- }
- else if (c < 0x800)
- {
- first = 0xc0;
- len = 2;
- }
- else if (c < 0x10000)
- {
- first = 0xe0;
- len = 3;
- }
- else if (c < 0x200000)
- {
- first = 0xf0;
- len = 4;
- }
- else if (c < 0x4000000)
- {
- first = 0xf8;
- len = 5;
- }
- else
- {
- first = 0xfc;
- len = 6;
- }
-
- if (outbuf)
- {
- for (i = len - 1; i > 0; --i)
- {
- outbuf[i] = (c & 0x3f) | 0x80;
- c >>= 6;
- }
- outbuf[0] = c | first;
- }
-
- return len;
-}
-
-gchar *
-e_unicode_get_utf8 (const gchar *text, gunichar *out)
-{
- *out = g_utf8_get_char (text);
- return (*out == (gunichar)-1) ? NULL : g_utf8_next_char (text);
-}
-
-/*
- * Canonical decomposition
- *
- * It is copied here from libunicode, because we do not want malloc
- *
- */
-
-typedef struct
-{
- unsigned short ch;
- unsigned char *expansion;
-} e_decomposition;
-
-static e_decomposition e_decomp_table[] =
-{
- { 0x00c0, "\x00\x41\x03\x00\0" },
- { 0x00c1, "\x00\x41\x03\x01\0" },
- { 0x00c2, "\x00\x41\x03\x02\0" },
- { 0x00c3, "\x00\x41\x03\x03\0" },
- { 0x00c4, "\x00\x41\x03\x08\0" },
- { 0x00c5, "\x00\x41\x03\x0a\0" },
- { 0x00c7, "\x00\x43\x03\x27\0" },
- { 0x00c8, "\x00\x45\x03\x00\0" },
- { 0x00c9, "\x00\x45\x03\x01\0" },
- { 0x00ca, "\x00\x45\x03\x02\0" },
- { 0x00cb, "\x00\x45\x03\x08\0" },
- { 0x00cc, "\x00\x49\x03\x00\0" },
- { 0x00cd, "\x00\x49\x03\x01\0" },
- { 0x00ce, "\x00\x49\x03\x02\0" },
- { 0x00cf, "\x00\x49\x03\x08\0" },
- { 0x00d1, "\x00\x4e\x03\x03\0" },
- { 0x00d2, "\x00\x4f\x03\x00\0" },
- { 0x00d3, "\x00\x4f\x03\x01\0" },
- { 0x00d4, "\x00\x4f\x03\x02\0" },
- { 0x00d5, "\x00\x4f\x03\x03\0" },
- { 0x00d6, "\x00\x4f\x03\x08\0" },
- { 0x00d9, "\x00\x55\x03\x00\0" },
- { 0x00da, "\x00\x55\x03\x01\0" },
- { 0x00db, "\x00\x55\x03\x02\0" },
- { 0x00dc, "\x00\x55\x03\x08\0" },
- { 0x00dd, "\x00\x59\x03\x01\0" },
- { 0x00e0, "\x00\x61\x03\x00\0" },
- { 0x00e1, "\x00\x61\x03\x01\0" },
- { 0x00e2, "\x00\x61\x03\x02\0" },
- { 0x00e3, "\x00\x61\x03\x03\0" },
- { 0x00e4, "\x00\x61\x03\x08\0" },
- { 0x00e5, "\x00\x61\x03\x0a\0" },
- { 0x00e7, "\x00\x63\x03\x27\0" },
- { 0x00e8, "\x00\x65\x03\x00\0" },
- { 0x00e9, "\x00\x65\x03\x01\0" },
- { 0x00ea, "\x00\x65\x03\x02\0" },
- { 0x00eb, "\x00\x65\x03\x08\0" },
- { 0x00ec, "\x00\x69\x03\x00\0" },
- { 0x00ed, "\x00\x69\x03\x01\0" },
- { 0x00ee, "\x00\x69\x03\x02\0" },
- { 0x00ef, "\x00\x69\x03\x08\0" },
- { 0x00f1, "\x00\x6e\x03\x03\0" },
- { 0x00f2, "\x00\x6f\x03\x00\0" },
- { 0x00f3, "\x00\x6f\x03\x01\0" },
- { 0x00f4, "\x00\x6f\x03\x02\0" },
- { 0x00f5, "\x00\x6f\x03\x03\0" },
- { 0x00f6, "\x00\x6f\x03\x08\0" },
- { 0x00f9, "\x00\x75\x03\x00\0" },
- { 0x00fa, "\x00\x75\x03\x01\0" },
- { 0x00fb, "\x00\x75\x03\x02\0" },
- { 0x00fc, "\x00\x75\x03\x08\0" },
- { 0x00fd, "\x00\x79\x03\x01\0" },
- { 0x00ff, "\x00\x79\x03\x08\0" },
- { 0x0100, "\x00\x41\x03\x04\0" },
- { 0x0101, "\x00\x61\x03\x04\0" },
- { 0x0102, "\x00\x41\x03\x06\0" },
- { 0x0103, "\x00\x61\x03\x06\0" },
- { 0x0104, "\x00\x41\x03\x28\0" },
- { 0x0105, "\x00\x61\x03\x28\0" },
- { 0x0106, "\x00\x43\x03\x01\0" },
- { 0x0107, "\x00\x63\x03\x01\0" },
- { 0x0108, "\x00\x43\x03\x02\0" },
- { 0x0109, "\x00\x63\x03\x02\0" },
- { 0x010a, "\x00\x43\x03\x07\0" },
- { 0x010b, "\x00\x63\x03\x07\0" },
- { 0x010c, "\x00\x43\x03\x0c\0" },
- { 0x010d, "\x00\x63\x03\x0c\0" },
- { 0x010e, "\x00\x44\x03\x0c\0" },
- { 0x010f, "\x00\x64\x03\x0c\0" },
- { 0x0112, "\x00\x45\x03\x04\0" },
- { 0x0113, "\x00\x65\x03\x04\0" },
- { 0x0114, "\x00\x45\x03\x06\0" },
- { 0x0115, "\x00\x65\x03\x06\0" },
- { 0x0116, "\x00\x45\x03\x07\0" },
- { 0x0117, "\x00\x65\x03\x07\0" },
- { 0x0118, "\x00\x45\x03\x28\0" },
- { 0x0119, "\x00\x65\x03\x28\0" },
- { 0x011a, "\x00\x45\x03\x0c\0" },
- { 0x011b, "\x00\x65\x03\x0c\0" },
- { 0x011c, "\x00\x47\x03\x02\0" },
- { 0x011d, "\x00\x67\x03\x02\0" },
- { 0x011e, "\x00\x47\x03\x06\0" },
- { 0x011f, "\x00\x67\x03\x06\0" },
- { 0x0120, "\x00\x47\x03\x07\0" },
- { 0x0121, "\x00\x67\x03\x07\0" },
- { 0x0122, "\x00\x47\x03\x27\0" },
- { 0x0123, "\x00\x67\x03\x27\0" },
- { 0x0124, "\x00\x48\x03\x02\0" },
- { 0x0125, "\x00\x68\x03\x02\0" },
- { 0x0128, "\x00\x49\x03\x03\0" },
- { 0x0129, "\x00\x69\x03\x03\0" },
- { 0x012a, "\x00\x49\x03\x04\0" },
- { 0x012b, "\x00\x69\x03\x04\0" },
- { 0x012c, "\x00\x49\x03\x06\0" },
- { 0x012d, "\x00\x69\x03\x06\0" },
- { 0x012e, "\x00\x49\x03\x28\0" },
- { 0x012f, "\x00\x69\x03\x28\0" },
- { 0x0130, "\x00\x49\x03\x07\0" },
- { 0x0134, "\x00\x4a\x03\x02\0" },
- { 0x0135, "\x00\x6a\x03\x02\0" },
- { 0x0136, "\x00\x4b\x03\x27\0" },
- { 0x0137, "\x00\x6b\x03\x27\0" },
- { 0x0139, "\x00\x4c\x03\x01\0" },
- { 0x013a, "\x00\x6c\x03\x01\0" },
- { 0x013b, "\x00\x4c\x03\x27\0" },
- { 0x013c, "\x00\x6c\x03\x27\0" },
- { 0x013d, "\x00\x4c\x03\x0c\0" },
- { 0x013e, "\x00\x6c\x03\x0c\0" },
- { 0x0143, "\x00\x4e\x03\x01\0" },
- { 0x0144, "\x00\x6e\x03\x01\0" },
- { 0x0145, "\x00\x4e\x03\x27\0" },
- { 0x0146, "\x00\x6e\x03\x27\0" },
- { 0x0147, "\x00\x4e\x03\x0c\0" },
- { 0x0148, "\x00\x6e\x03\x0c\0" },
- { 0x014c, "\x00\x4f\x03\x04\0" },
- { 0x014d, "\x00\x6f\x03\x04\0" },
- { 0x014e, "\x00\x4f\x03\x06\0" },
- { 0x014f, "\x00\x6f\x03\x06\0" },
- { 0x0150, "\x00\x4f\x03\x0b\0" },
- { 0x0151, "\x00\x6f\x03\x0b\0" },
- { 0x0154, "\x00\x52\x03\x01\0" },
- { 0x0155, "\x00\x72\x03\x01\0" },
- { 0x0156, "\x00\x52\x03\x27\0" },
- { 0x0157, "\x00\x72\x03\x27\0" },
- { 0x0158, "\x00\x52\x03\x0c\0" },
- { 0x0159, "\x00\x72\x03\x0c\0" },
- { 0x015a, "\x00\x53\x03\x01\0" },
- { 0x015b, "\x00\x73\x03\x01\0" },
- { 0x015c, "\x00\x53\x03\x02\0" },
- { 0x015d, "\x00\x73\x03\x02\0" },
- { 0x015e, "\x00\x53\x03\x27\0" },
- { 0x015f, "\x00\x73\x03\x27\0" },
- { 0x0160, "\x00\x53\x03\x0c\0" },
- { 0x0161, "\x00\x73\x03\x0c\0" },
- { 0x0162, "\x00\x54\x03\x27\0" },
- { 0x0163, "\x00\x74\x03\x27\0" },
- { 0x0164, "\x00\x54\x03\x0c\0" },
- { 0x0165, "\x00\x74\x03\x0c\0" },
- { 0x0168, "\x00\x55\x03\x03\0" },
- { 0x0169, "\x00\x75\x03\x03\0" },
- { 0x016a, "\x00\x55\x03\x04\0" },
- { 0x016b, "\x00\x75\x03\x04\0" },
- { 0x016c, "\x00\x55\x03\x06\0" },
- { 0x016d, "\x00\x75\x03\x06\0" },
- { 0x016e, "\x00\x55\x03\x0a\0" },
- { 0x016f, "\x00\x75\x03\x0a\0" },
- { 0x0170, "\x00\x55\x03\x0b\0" },
- { 0x0171, "\x00\x75\x03\x0b\0" },
- { 0x0172, "\x00\x55\x03\x28\0" },
- { 0x0173, "\x00\x75\x03\x28\0" },
- { 0x0174, "\x00\x57\x03\x02\0" },
- { 0x0175, "\x00\x77\x03\x02\0" },
- { 0x0176, "\x00\x59\x03\x02\0" },
- { 0x0177, "\x00\x79\x03\x02\0" },
- { 0x0178, "\x00\x59\x03\x08\0" },
- { 0x0179, "\x00\x5a\x03\x01\0" },
- { 0x017a, "\x00\x7a\x03\x01\0" },
- { 0x017b, "\x00\x5a\x03\x07\0" },
- { 0x017c, "\x00\x7a\x03\x07\0" },
- { 0x017d, "\x00\x5a\x03\x0c\0" },
- { 0x017e, "\x00\x7a\x03\x0c\0" },
- { 0x01a0, "\x00\x4f\x03\x1b\0" },
- { 0x01a1, "\x00\x6f\x03\x1b\0" },
- { 0x01af, "\x00\x55\x03\x1b\0" },
- { 0x01b0, "\x00\x75\x03\x1b\0" },
- { 0x01cd, "\x00\x41\x03\x0c\0" },
- { 0x01ce, "\x00\x61\x03\x0c\0" },
- { 0x01cf, "\x00\x49\x03\x0c\0" },
- { 0x01d0, "\x00\x69\x03\x0c\0" },
- { 0x01d1, "\x00\x4f\x03\x0c\0" },
- { 0x01d2, "\x00\x6f\x03\x0c\0" },
- { 0x01d3, "\x00\x55\x03\x0c\0" },
- { 0x01d4, "\x00\x75\x03\x0c\0" },
- { 0x01d5, "\x00\x55\x03\x08\x03\x04\0" },
- { 0x01d6, "\x00\x75\x03\x08\x03\x04\0" },
- { 0x01d7, "\x00\x55\x03\x08\x03\x01\0" },
- { 0x01d8, "\x00\x75\x03\x08\x03\x01\0" },
- { 0x01d9, "\x00\x55\x03\x08\x03\x0c\0" },
- { 0x01da, "\x00\x75\x03\x08\x03\x0c\0" },
- { 0x01db, "\x00\x55\x03\x08\x03\x00\0" },
- { 0x01dc, "\x00\x75\x03\x08\x03\x00\0" },
- { 0x01de, "\x00\x41\x03\x08\x03\x04\0" },
- { 0x01df, "\x00\x61\x03\x08\x03\x04\0" },
- { 0x01e0, "\x00\x41\x03\x07\x03\x04\0" },
- { 0x01e1, "\x00\x61\x03\x07\x03\x04\0" },
- { 0x01e2, "\x00\xc6\x03\x04\0" },
- { 0x01e3, "\x00\xe6\x03\x04\0" },
- { 0x01e6, "\x00\x47\x03\x0c\0" },
- { 0x01e7, "\x00\x67\x03\x0c\0" },
- { 0x01e8, "\x00\x4b\x03\x0c\0" },
- { 0x01e9, "\x00\x6b\x03\x0c\0" },
- { 0x01ea, "\x00\x4f\x03\x28\0" },
- { 0x01eb, "\x00\x6f\x03\x28\0" },
- { 0x01ec, "\x00\x4f\x03\x28\x03\x04\0" },
- { 0x01ed, "\x00\x6f\x03\x28\x03\x04\0" },
- { 0x01ee, "\x01\xb7\x03\x0c\0" },
- { 0x01ef, "\x02\x92\x03\x0c\0" },
- { 0x01f0, "\x00\x6a\x03\x0c\0" },
- { 0x01f4, "\x00\x47\x03\x01\0" },
- { 0x01f5, "\x00\x67\x03\x01\0" },
- { 0x01fa, "\x00\x41\x03\x0a\x03\x01\0" },
- { 0x01fb, "\x00\x61\x03\x0a\x03\x01\0" },
- { 0x01fc, "\x00\xc6\x03\x01\0" },
- { 0x01fd, "\x00\xe6\x03\x01\0" },
- { 0x01fe, "\x00\xd8\x03\x01\0" },
- { 0x01ff, "\x00\xf8\x03\x01\0" },
- { 0x0200, "\x00\x41\x03\x0f\0" },
- { 0x0201, "\x00\x61\x03\x0f\0" },
- { 0x0202, "\x00\x41\x03\x11\0" },
- { 0x0203, "\x00\x61\x03\x11\0" },
- { 0x0204, "\x00\x45\x03\x0f\0" },
- { 0x0205, "\x00\x65\x03\x0f\0" },
- { 0x0206, "\x00\x45\x03\x11\0" },
- { 0x0207, "\x00\x65\x03\x11\0" },
- { 0x0208, "\x00\x49\x03\x0f\0" },
- { 0x0209, "\x00\x69\x03\x0f\0" },
- { 0x020a, "\x00\x49\x03\x11\0" },
- { 0x020b, "\x00\x69\x03\x11\0" },
- { 0x020c, "\x00\x4f\x03\x0f\0" },
- { 0x020d, "\x00\x6f\x03\x0f\0" },
- { 0x020e, "\x00\x4f\x03\x11\0" },
- { 0x020f, "\x00\x6f\x03\x11\0" },
- { 0x0210, "\x00\x52\x03\x0f\0" },
- { 0x0211, "\x00\x72\x03\x0f\0" },
- { 0x0212, "\x00\x52\x03\x11\0" },
- { 0x0213, "\x00\x72\x03\x11\0" },
- { 0x0214, "\x00\x55\x03\x0f\0" },
- { 0x0215, "\x00\x75\x03\x0f\0" },
- { 0x0216, "\x00\x55\x03\x11\0" },
- { 0x0217, "\x00\x75\x03\x11\0" },
- { 0x0340, "\x03\x00\0" },
- { 0x0341, "\x03\x01\0" },
- { 0x0343, "\x03\x13\0" },
- { 0x0344, "\x03\x08\x03\x01\0" },
- { 0x0374, "\x02\xb9\0" },
- { 0x037e, "\x00\x3b\0" },
- { 0x0385, "\x00\xa8\x03\x01\0" },
- { 0x0386, "\x03\x91\x03\x01\0" },
- { 0x0387, "\x00\xb7\0" },
- { 0x0388, "\x03\x95\x03\x01\0" },
- { 0x0389, "\x03\x97\x03\x01\0" },
- { 0x038a, "\x03\x99\x03\x01\0" },
- { 0x038c, "\x03\x9f\x03\x01\0" },
- { 0x038e, "\x03\xa5\x03\x01\0" },
- { 0x038f, "\x03\xa9\x03\x01\0" },
- { 0x0390, "\x03\xb9\x03\x08\x03\x01\0" },
- { 0x03aa, "\x03\x99\x03\x08\0" },
- { 0x03ab, "\x03\xa5\x03\x08\0" },
- { 0x03ac, "\x03\xb1\x03\x01\0" },
- { 0x03ad, "\x03\xb5\x03\x01\0" },
- { 0x03ae, "\x03\xb7\x03\x01\0" },
- { 0x03af, "\x03\xb9\x03\x01\0" },
- { 0x03b0, "\x03\xc5\x03\x08\x03\x01\0" },
- { 0x03ca, "\x03\xb9\x03\x08\0" },
- { 0x03cb, "\x03\xc5\x03\x08\0" },
- { 0x03cc, "\x03\xbf\x03\x01\0" },
- { 0x03cd, "\x03\xc5\x03\x01\0" },
- { 0x03ce, "\x03\xc9\x03\x01\0" },
- { 0x03d3, "\x03\xd2\x03\x01\0" },
- { 0x03d4, "\x03\xd2\x03\x08\0" },
- { 0x0401, "\x04\x15\x03\x08\0" },
- { 0x0403, "\x04\x13\x03\x01\0" },
- { 0x0407, "\x04\x06\x03\x08\0" },
- { 0x040c, "\x04\x1a\x03\x01\0" },
- { 0x040e, "\x04\x23\x03\x06\0" },
- { 0x0419, "\x04\x18\x03\x06\0" },
- { 0x0439, "\x04\x38\x03\x06\0" },
- { 0x0451, "\x04\x35\x03\x08\0" },
- { 0x0453, "\x04\x33\x03\x01\0" },
- { 0x0457, "\x04\x56\x03\x08\0" },
- { 0x045c, "\x04\x3a\x03\x01\0" },
- { 0x045e, "\x04\x43\x03\x06\0" },
- { 0x0476, "\x04\x74\x03\x0f\0" },
- { 0x0477, "\x04\x75\x03\x0f\0" },
- { 0x04c1, "\x04\x16\x03\x06\0" },
- { 0x04c2, "\x04\x36\x03\x06\0" },
- { 0x04d0, "\x04\x10\x03\x06\0" },
- { 0x04d1, "\x04\x30\x03\x06\0" },
- { 0x04d2, "\x04\x10\x03\x08\0" },
- { 0x04d3, "\x04\x30\x03\x08\0" },
- { 0x04d6, "\x04\x15\x03\x06\0" },
- { 0x04d7, "\x04\x35\x03\x06\0" },
- { 0x04da, "\x04\xd8\x03\x08\0" },
- { 0x04db, "\x04\xd9\x03\x08\0" },
- { 0x04dc, "\x04\x16\x03\x08\0" },
- { 0x04dd, "\x04\x36\x03\x08\0" },
- { 0x04de, "\x04\x17\x03\x08\0" },
- { 0x04df, "\x04\x37\x03\x08\0" },
- { 0x04e2, "\x04\x18\x03\x04\0" },
- { 0x04e3, "\x04\x38\x03\x04\0" },
- { 0x04e4, "\x04\x18\x03\x08\0" },
- { 0x04e5, "\x04\x38\x03\x08\0" },
- { 0x04e6, "\x04\x1e\x03\x08\0" },
- { 0x04e7, "\x04\x3e\x03\x08\0" },
- { 0x04ea, "\x04\xe8\x03\x08\0" },
- { 0x04eb, "\x04\xe9\x03\x08\0" },
- { 0x04ee, "\x04\x23\x03\x04\0" },
- { 0x04ef, "\x04\x43\x03\x04\0" },
- { 0x04f0, "\x04\x23\x03\x08\0" },
- { 0x04f1, "\x04\x43\x03\x08\0" },
- { 0x04f2, "\x04\x23\x03\x0b\0" },
- { 0x04f3, "\x04\x43\x03\x0b\0" },
- { 0x04f4, "\x04\x27\x03\x08\0" },
- { 0x04f5, "\x04\x47\x03\x08\0" },
- { 0x04f8, "\x04\x2b\x03\x08\0" },
- { 0x04f9, "\x04\x4b\x03\x08\0" },
- { 0x0929, "\x09\x28\x09\x3c\0" },
- { 0x0931, "\x09\x30\x09\x3c\0" },
- { 0x0934, "\x09\x33\x09\x3c\0" },
- { 0x0958, "\x09\x15\x09\x3c\0" },
- { 0x0959, "\x09\x16\x09\x3c\0" },
- { 0x095a, "\x09\x17\x09\x3c\0" },
- { 0x095b, "\x09\x1c\x09\x3c\0" },
- { 0x095c, "\x09\x21\x09\x3c\0" },
- { 0x095d, "\x09\x22\x09\x3c\0" },
- { 0x095e, "\x09\x2b\x09\x3c\0" },
- { 0x095f, "\x09\x2f\x09\x3c\0" },
- { 0x09b0, "\x09\xac\x09\xbc\0" },
- { 0x09cb, "\x09\xc7\x09\xbe\0" },
- { 0x09cc, "\x09\xc7\x09\xd7\0" },
- { 0x09dc, "\x09\xa1\x09\xbc\0" },
- { 0x09dd, "\x09\xa2\x09\xbc\0" },
- { 0x09df, "\x09\xaf\x09\xbc\0" },
- { 0x0a59, "\x0a\x16\x0a\x3c\0" },
- { 0x0a5a, "\x0a\x17\x0a\x3c\0" },
- { 0x0a5b, "\x0a\x1c\x0a\x3c\0" },
- { 0x0a5c, "\x0a\x21\x0a\x3c\0" },
- { 0x0a5e, "\x0a\x2b\x0a\x3c\0" },
- { 0x0b48, "\x0b\x47\x0b\x56\0" },
- { 0x0b4b, "\x0b\x47\x0b\x3e\0" },
- { 0x0b4c, "\x0b\x47\x0b\x57\0" },
- { 0x0b5c, "\x0b\x21\x0b\x3c\0" },
- { 0x0b5d, "\x0b\x22\x0b\x3c\0" },
- { 0x0b5f, "\x0b\x2f\x0b\x3c\0" },
- { 0x0b94, "\x0b\x92\x0b\xd7\0" },
- { 0x0bca, "\x0b\xc6\x0b\xbe\0" },
- { 0x0bcb, "\x0b\xc7\x0b\xbe\0" },
- { 0x0bcc, "\x0b\xc6\x0b\xd7\0" },
- { 0x0c48, "\x0c\x46\x0c\x56\0" },
- { 0x0cc0, "\x0c\xbf\x0c\xd5\0" },
- { 0x0cc7, "\x0c\xc6\x0c\xd5\0" },
- { 0x0cc8, "\x0c\xc6\x0c\xd6\0" },
- { 0x0cca, "\x0c\xc6\x0c\xc2\0" },
- { 0x0ccb, "\x0c\xc6\x0c\xc2\x0c\xd5\0" },
- { 0x0d4a, "\x0d\x46\x0d\x3e\0" },
- { 0x0d4b, "\x0d\x47\x0d\x3e\0" },
- { 0x0d4c, "\x0d\x46\x0d\x57\0" },
- { 0x0e33, "\x0e\x4d\x0e\x32\0" },
- { 0x0eb3, "\x0e\xcd\x0e\xb2\0" },
- { 0x0f43, "\x0f\x42\x0f\xb7\0" },
- { 0x0f4d, "\x0f\x4c\x0f\xb7\0" },
- { 0x0f52, "\x0f\x51\x0f\xb7\0" },
- { 0x0f57, "\x0f\x56\x0f\xb7\0" },
- { 0x0f5c, "\x0f\x5b\x0f\xb7\0" },
- { 0x0f69, "\x0f\x40\x0f\xb5\0" },
- { 0x0f73, "\x0f\x71\x0f\x72\0" },
- { 0x0f75, "\x0f\x71\x0f\x74\0" },
- { 0x0f76, "\x0f\xb2\x0f\x80\0" },
- { 0x0f78, "\x0f\xb3\x0f\x80\0" },
- { 0x0f81, "\x0f\x71\x0f\x80\0" },
- { 0x0f93, "\x0f\x92\x0f\xb7\0" },
- { 0x0f9d, "\x0f\x9c\x0f\xb7\0" },
- { 0x0fa2, "\x0f\xa1\x0f\xb7\0" },
- { 0x0fa7, "\x0f\xa6\x0f\xb7\0" },
- { 0x0fac, "\x0f\xab\x0f\xb7\0" },
- { 0x0fb9, "\x0f\x90\x0f\xb5\0" },
- { 0x1e00, "\x00\x41\x03\x25\0" },
- { 0x1e01, "\x00\x61\x03\x25\0" },
- { 0x1e02, "\x00\x42\x03\x07\0" },
- { 0x1e03, "\x00\x62\x03\x07\0" },
- { 0x1e04, "\x00\x42\x03\x23\0" },
- { 0x1e05, "\x00\x62\x03\x23\0" },
- { 0x1e06, "\x00\x42\x03\x31\0" },
- { 0x1e07, "\x00\x62\x03\x31\0" },
- { 0x1e08, "\x00\x43\x03\x27\x03\x01\0" },
- { 0x1e09, "\x00\x63\x03\x27\x03\x01\0" },
- { 0x1e0a, "\x00\x44\x03\x07\0" },
- { 0x1e0b, "\x00\x64\x03\x07\0" },
- { 0x1e0c, "\x00\x44\x03\x23\0" },
- { 0x1e0d, "\x00\x64\x03\x23\0" },
- { 0x1e0e, "\x00\x44\x03\x31\0" },
- { 0x1e0f, "\x00\x64\x03\x31\0" },
- { 0x1e10, "\x00\x44\x03\x27\0" },
- { 0x1e11, "\x00\x64\x03\x27\0" },
- { 0x1e12, "\x00\x44\x03\x2d\0" },
- { 0x1e13, "\x00\x64\x03\x2d\0" },
- { 0x1e14, "\x00\x45\x03\x04\x03\x00\0" },
- { 0x1e15, "\x00\x65\x03\x04\x03\x00\0" },
- { 0x1e16, "\x00\x45\x03\x04\x03\x01\0" },
- { 0x1e17, "\x00\x65\x03\x04\x03\x01\0" },
- { 0x1e18, "\x00\x45\x03\x2d\0" },
- { 0x1e19, "\x00\x65\x03\x2d\0" },
- { 0x1e1a, "\x00\x45\x03\x30\0" },
- { 0x1e1b, "\x00\x65\x03\x30\0" },
- { 0x1e1c, "\x00\x45\x03\x27\x03\x06\0" },
- { 0x1e1d, "\x00\x65\x03\x27\x03\x06\0" },
- { 0x1e1e, "\x00\x46\x03\x07\0" },
- { 0x1e1f, "\x00\x66\x03\x07\0" },
- { 0x1e20, "\x00\x47\x03\x04\0" },
- { 0x1e21, "\x00\x67\x03\x04\0" },
- { 0x1e22, "\x00\x48\x03\x07\0" },
- { 0x1e23, "\x00\x68\x03\x07\0" },
- { 0x1e24, "\x00\x48\x03\x23\0" },
- { 0x1e25, "\x00\x68\x03\x23\0" },
- { 0x1e26, "\x00\x48\x03\x08\0" },
- { 0x1e27, "\x00\x68\x03\x08\0" },
- { 0x1e28, "\x00\x48\x03\x27\0" },
- { 0x1e29, "\x00\x68\x03\x27\0" },
- { 0x1e2a, "\x00\x48\x03\x2e\0" },
- { 0x1e2b, "\x00\x68\x03\x2e\0" },
- { 0x1e2c, "\x00\x49\x03\x30\0" },
- { 0x1e2d, "\x00\x69\x03\x30\0" },
- { 0x1e2e, "\x00\x49\x03\x08\x03\x01\0" },
- { 0x1e2f, "\x00\x69\x03\x08\x03\x01\0" },
- { 0x1e30, "\x00\x4b\x03\x01\0" },
- { 0x1e31, "\x00\x6b\x03\x01\0" },
- { 0x1e32, "\x00\x4b\x03\x23\0" },
- { 0x1e33, "\x00\x6b\x03\x23\0" },
- { 0x1e34, "\x00\x4b\x03\x31\0" },
- { 0x1e35, "\x00\x6b\x03\x31\0" },
- { 0x1e36, "\x00\x4c\x03\x23\0" },
- { 0x1e37, "\x00\x6c\x03\x23\0" },
- { 0x1e38, "\x00\x4c\x03\x23\x03\x04\0" },
- { 0x1e39, "\x00\x6c\x03\x23\x03\x04\0" },
- { 0x1e3a, "\x00\x4c\x03\x31\0" },
- { 0x1e3b, "\x00\x6c\x03\x31\0" },
- { 0x1e3c, "\x00\x4c\x03\x2d\0" },
- { 0x1e3d, "\x00\x6c\x03\x2d\0" },
- { 0x1e3e, "\x00\x4d\x03\x01\0" },
- { 0x1e3f, "\x00\x6d\x03\x01\0" },
- { 0x1e40, "\x00\x4d\x03\x07\0" },
- { 0x1e41, "\x00\x6d\x03\x07\0" },
- { 0x1e42, "\x00\x4d\x03\x23\0" },
- { 0x1e43, "\x00\x6d\x03\x23\0" },
- { 0x1e44, "\x00\x4e\x03\x07\0" },
- { 0x1e45, "\x00\x6e\x03\x07\0" },
- { 0x1e46, "\x00\x4e\x03\x23\0" },
- { 0x1e47, "\x00\x6e\x03\x23\0" },
- { 0x1e48, "\x00\x4e\x03\x31\0" },
- { 0x1e49, "\x00\x6e\x03\x31\0" },
- { 0x1e4a, "\x00\x4e\x03\x2d\0" },
- { 0x1e4b, "\x00\x6e\x03\x2d\0" },
- { 0x1e4c, "\x00\x4f\x03\x03\x03\x01\0" },
- { 0x1e4d, "\x00\x6f\x03\x03\x03\x01\0" },
- { 0x1e4e, "\x00\x4f\x03\x03\x03\x08\0" },
- { 0x1e4f, "\x00\x6f\x03\x03\x03\x08\0" },
- { 0x1e50, "\x00\x4f\x03\x04\x03\x00\0" },
- { 0x1e51, "\x00\x6f\x03\x04\x03\x00\0" },
- { 0x1e52, "\x00\x4f\x03\x04\x03\x01\0" },
- { 0x1e53, "\x00\x6f\x03\x04\x03\x01\0" },
- { 0x1e54, "\x00\x50\x03\x01\0" },
- { 0x1e55, "\x00\x70\x03\x01\0" },
- { 0x1e56, "\x00\x50\x03\x07\0" },
- { 0x1e57, "\x00\x70\x03\x07\0" },
- { 0x1e58, "\x00\x52\x03\x07\0" },
- { 0x1e59, "\x00\x72\x03\x07\0" },
- { 0x1e5a, "\x00\x52\x03\x23\0" },
- { 0x1e5b, "\x00\x72\x03\x23\0" },
- { 0x1e5c, "\x00\x52\x03\x23\x03\x04\0" },
- { 0x1e5d, "\x00\x72\x03\x23\x03\x04\0" },
- { 0x1e5e, "\x00\x52\x03\x31\0" },
- { 0x1e5f, "\x00\x72\x03\x31\0" },
- { 0x1e60, "\x00\x53\x03\x07\0" },
- { 0x1e61, "\x00\x73\x03\x07\0" },
- { 0x1e62, "\x00\x53\x03\x23\0" },
- { 0x1e63, "\x00\x73\x03\x23\0" },
- { 0x1e64, "\x00\x53\x03\x01\x03\x07\0" },
- { 0x1e65, "\x00\x73\x03\x01\x03\x07\0" },
- { 0x1e66, "\x00\x53\x03\x0c\x03\x07\0" },
- { 0x1e67, "\x00\x73\x03\x0c\x03\x07\0" },
- { 0x1e68, "\x00\x53\x03\x23\x03\x07\0" },
- { 0x1e69, "\x00\x73\x03\x23\x03\x07\0" },
- { 0x1e6a, "\x00\x54\x03\x07\0" },
- { 0x1e6b, "\x00\x74\x03\x07\0" },
- { 0x1e6c, "\x00\x54\x03\x23\0" },
- { 0x1e6d, "\x00\x74\x03\x23\0" },
- { 0x1e6e, "\x00\x54\x03\x31\0" },
- { 0x1e6f, "\x00\x74\x03\x31\0" },
- { 0x1e70, "\x00\x54\x03\x2d\0" },
- { 0x1e71, "\x00\x74\x03\x2d\0" },
- { 0x1e72, "\x00\x55\x03\x24\0" },
- { 0x1e73, "\x00\x75\x03\x24\0" },
- { 0x1e74, "\x00\x55\x03\x30\0" },
- { 0x1e75, "\x00\x75\x03\x30\0" },
- { 0x1e76, "\x00\x55\x03\x2d\0" },
- { 0x1e77, "\x00\x75\x03\x2d\0" },
- { 0x1e78, "\x00\x55\x03\x03\x03\x01\0" },
- { 0x1e79, "\x00\x75\x03\x03\x03\x01\0" },
- { 0x1e7a, "\x00\x55\x03\x04\x03\x08\0" },
- { 0x1e7b, "\x00\x75\x03\x04\x03\x08\0" },
- { 0x1e7c, "\x00\x56\x03\x03\0" },
- { 0x1e7d, "\x00\x76\x03\x03\0" },
- { 0x1e7e, "\x00\x56\x03\x23\0" },
- { 0x1e7f, "\x00\x76\x03\x23\0" },
- { 0x1e80, "\x00\x57\x03\x00\0" },
- { 0x1e81, "\x00\x77\x03\x00\0" },
- { 0x1e82, "\x00\x57\x03\x01\0" },
- { 0x1e83, "\x00\x77\x03\x01\0" },
- { 0x1e84, "\x00\x57\x03\x08\0" },
- { 0x1e85, "\x00\x77\x03\x08\0" },
- { 0x1e86, "\x00\x57\x03\x07\0" },
- { 0x1e87, "\x00\x77\x03\x07\0" },
- { 0x1e88, "\x00\x57\x03\x23\0" },
- { 0x1e89, "\x00\x77\x03\x23\0" },
- { 0x1e8a, "\x00\x58\x03\x07\0" },
- { 0x1e8b, "\x00\x78\x03\x07\0" },
- { 0x1e8c, "\x00\x58\x03\x08\0" },
- { 0x1e8d, "\x00\x78\x03\x08\0" },
- { 0x1e8e, "\x00\x59\x03\x07\0" },
- { 0x1e8f, "\x00\x79\x03\x07\0" },
- { 0x1e90, "\x00\x5a\x03\x02\0" },
- { 0x1e91, "\x00\x7a\x03\x02\0" },
- { 0x1e92, "\x00\x5a\x03\x23\0" },
- { 0x1e93, "\x00\x7a\x03\x23\0" },
- { 0x1e94, "\x00\x5a\x03\x31\0" },
- { 0x1e95, "\x00\x7a\x03\x31\0" },
- { 0x1e96, "\x00\x68\x03\x31\0" },
- { 0x1e97, "\x00\x74\x03\x08\0" },
- { 0x1e98, "\x00\x77\x03\x0a\0" },
- { 0x1e99, "\x00\x79\x03\x0a\0" },
- { 0x1e9b, "\x01\x7f\x03\x07\0" },
- { 0x1ea0, "\x00\x41\x03\x23\0" },
- { 0x1ea1, "\x00\x61\x03\x23\0" },
- { 0x1ea2, "\x00\x41\x03\x09\0" },
- { 0x1ea3, "\x00\x61\x03\x09\0" },
- { 0x1ea4, "\x00\x41\x03\x02\x03\x01\0" },
- { 0x1ea5, "\x00\x61\x03\x02\x03\x01\0" },
- { 0x1ea6, "\x00\x41\x03\x02\x03\x00\0" },
- { 0x1ea7, "\x00\x61\x03\x02\x03\x00\0" },
- { 0x1ea8, "\x00\x41\x03\x02\x03\x09\0" },
- { 0x1ea9, "\x00\x61\x03\x02\x03\x09\0" },
- { 0x1eaa, "\x00\x41\x03\x02\x03\x03\0" },
- { 0x1eab, "\x00\x61\x03\x02\x03\x03\0" },
- { 0x1eac, "\x00\x41\x03\x23\x03\x02\0" },
- { 0x1ead, "\x00\x61\x03\x23\x03\x02\0" },
- { 0x1eae, "\x00\x41\x03\x06\x03\x01\0" },
- { 0x1eaf, "\x00\x61\x03\x06\x03\x01\0" },
- { 0x1eb0, "\x00\x41\x03\x06\x03\x00\0" },
- { 0x1eb1, "\x00\x61\x03\x06\x03\x00\0" },
- { 0x1eb2, "\x00\x41\x03\x06\x03\x09\0" },
- { 0x1eb3, "\x00\x61\x03\x06\x03\x09\0" },
- { 0x1eb4, "\x00\x41\x03\x06\x03\x03\0" },
- { 0x1eb5, "\x00\x61\x03\x06\x03\x03\0" },
- { 0x1eb6, "\x00\x41\x03\x23\x03\x06\0" },
- { 0x1eb7, "\x00\x61\x03\x23\x03\x06\0" },
- { 0x1eb8, "\x00\x45\x03\x23\0" },
- { 0x1eb9, "\x00\x65\x03\x23\0" },
- { 0x1eba, "\x00\x45\x03\x09\0" },
- { 0x1ebb, "\x00\x65\x03\x09\0" },
- { 0x1ebc, "\x00\x45\x03\x03\0" },
- { 0x1ebd, "\x00\x65\x03\x03\0" },
- { 0x1ebe, "\x00\x45\x03\x02\x03\x01\0" },
- { 0x1ebf, "\x00\x65\x03\x02\x03\x01\0" },
- { 0x1ec0, "\x00\x45\x03\x02\x03\x00\0" },
- { 0x1ec1, "\x00\x65\x03\x02\x03\x00\0" },
- { 0x1ec2, "\x00\x45\x03\x02\x03\x09\0" },
- { 0x1ec3, "\x00\x65\x03\x02\x03\x09\0" },
- { 0x1ec4, "\x00\x45\x03\x02\x03\x03\0" },
- { 0x1ec5, "\x00\x65\x03\x02\x03\x03\0" },
- { 0x1ec6, "\x00\x45\x03\x23\x03\x02\0" },
- { 0x1ec7, "\x00\x65\x03\x23\x03\x02\0" },
- { 0x1ec8, "\x00\x49\x03\x09\0" },
- { 0x1ec9, "\x00\x69\x03\x09\0" },
- { 0x1eca, "\x00\x49\x03\x23\0" },
- { 0x1ecb, "\x00\x69\x03\x23\0" },
- { 0x1ecc, "\x00\x4f\x03\x23\0" },
- { 0x1ecd, "\x00\x6f\x03\x23\0" },
- { 0x1ece, "\x00\x4f\x03\x09\0" },
- { 0x1ecf, "\x00\x6f\x03\x09\0" },
- { 0x1ed0, "\x00\x4f\x03\x02\x03\x01\0" },
- { 0x1ed1, "\x00\x6f\x03\x02\x03\x01\0" },
- { 0x1ed2, "\x00\x4f\x03\x02\x03\x00\0" },
- { 0x1ed3, "\x00\x6f\x03\x02\x03\x00\0" },
- { 0x1ed4, "\x00\x4f\x03\x02\x03\x09\0" },
- { 0x1ed5, "\x00\x6f\x03\x02\x03\x09\0" },
- { 0x1ed6, "\x00\x4f\x03\x02\x03\x03\0" },
- { 0x1ed7, "\x00\x6f\x03\x02\x03\x03\0" },
- { 0x1ed8, "\x00\x4f\x03\x23\x03\x02\0" },
- { 0x1ed9, "\x00\x6f\x03\x23\x03\x02\0" },
- { 0x1eda, "\x00\x4f\x03\x1b\x03\x01\0" },
- { 0x1edb, "\x00\x6f\x03\x1b\x03\x01\0" },
- { 0x1edc, "\x00\x4f\x03\x1b\x03\x00\0" },
- { 0x1edd, "\x00\x6f\x03\x1b\x03\x00\0" },
- { 0x1ede, "\x00\x4f\x03\x1b\x03\x09\0" },
- { 0x1edf, "\x00\x6f\x03\x1b\x03\x09\0" },
- { 0x1ee0, "\x00\x4f\x03\x1b\x03\x03\0" },
- { 0x1ee1, "\x00\x6f\x03\x1b\x03\x03\0" },
- { 0x1ee2, "\x00\x4f\x03\x1b\x03\x23\0" },
- { 0x1ee3, "\x00\x6f\x03\x1b\x03\x23\0" },
- { 0x1ee4, "\x00\x55\x03\x23\0" },
- { 0x1ee5, "\x00\x75\x03\x23\0" },
- { 0x1ee6, "\x00\x55\x03\x09\0" },
- { 0x1ee7, "\x00\x75\x03\x09\0" },
- { 0x1ee8, "\x00\x55\x03\x1b\x03\x01\0" },
- { 0x1ee9, "\x00\x75\x03\x1b\x03\x01\0" },
- { 0x1eea, "\x00\x55\x03\x1b\x03\x00\0" },
- { 0x1eeb, "\x00\x75\x03\x1b\x03\x00\0" },
- { 0x1eec, "\x00\x55\x03\x1b\x03\x09\0" },
- { 0x1eed, "\x00\x75\x03\x1b\x03\x09\0" },
- { 0x1eee, "\x00\x55\x03\x1b\x03\x03\0" },
- { 0x1eef, "\x00\x75\x03\x1b\x03\x03\0" },
- { 0x1ef0, "\x00\x55\x03\x1b\x03\x23\0" },
- { 0x1ef1, "\x00\x75\x03\x1b\x03\x23\0" },
- { 0x1ef2, "\x00\x59\x03\x00\0" },
- { 0x1ef3, "\x00\x79\x03\x00\0" },
- { 0x1ef4, "\x00\x59\x03\x23\0" },
- { 0x1ef5, "\x00\x79\x03\x23\0" },
- { 0x1ef6, "\x00\x59\x03\x09\0" },
- { 0x1ef7, "\x00\x79\x03\x09\0" },
- { 0x1ef8, "\x00\x59\x03\x03\0" },
- { 0x1ef9, "\x00\x79\x03\x03\0" },
- { 0x1f00, "\x03\xb1\x03\x13\0" },
- { 0x1f01, "\x03\xb1\x03\x14\0" },
- { 0x1f02, "\x03\xb1\x03\x13\x03\x00\0" },
- { 0x1f03, "\x03\xb1\x03\x14\x03\x00\0" },
- { 0x1f04, "\x03\xb1\x03\x13\x03\x01\0" },
- { 0x1f05, "\x03\xb1\x03\x14\x03\x01\0" },
- { 0x1f06, "\x03\xb1\x03\x13\x03\x42\0" },
- { 0x1f07, "\x03\xb1\x03\x14\x03\x42\0" },
- { 0x1f08, "\x03\x91\x03\x13\0" },
- { 0x1f09, "\x03\x91\x03\x14\0" },
- { 0x1f0a, "\x03\x91\x03\x13\x03\x00\0" },
- { 0x1f0b, "\x03\x91\x03\x14\x03\x00\0" },
- { 0x1f0c, "\x03\x91\x03\x13\x03\x01\0" },
- { 0x1f0d, "\x03\x91\x03\x14\x03\x01\0" },
- { 0x1f0e, "\x03\x91\x03\x13\x03\x42\0" },
- { 0x1f0f, "\x03\x91\x03\x14\x03\x42\0" },
- { 0x1f10, "\x03\xb5\x03\x13\0" },
- { 0x1f11, "\x03\xb5\x03\x14\0" },
- { 0x1f12, "\x03\xb5\x03\x13\x03\x00\0" },
- { 0x1f13, "\x03\xb5\x03\x14\x03\x00\0" },
- { 0x1f14, "\x03\xb5\x03\x13\x03\x01\0" },
- { 0x1f15, "\x03\xb5\x03\x14\x03\x01\0" },
- { 0x1f18, "\x03\x95\x03\x13\0" },
- { 0x1f19, "\x03\x95\x03\x14\0" },
- { 0x1f1a, "\x03\x95\x03\x13\x03\x00\0" },
- { 0x1f1b, "\x03\x95\x03\x14\x03\x00\0" },
- { 0x1f1c, "\x03\x95\x03\x13\x03\x01\0" },
- { 0x1f1d, "\x03\x95\x03\x14\x03\x01\0" },
- { 0x1f20, "\x03\xb7\x03\x13\0" },
- { 0x1f21, "\x03\xb7\x03\x14\0" },
- { 0x1f22, "\x03\xb7\x03\x13\x03\x00\0" },
- { 0x1f23, "\x03\xb7\x03\x14\x03\x00\0" },
- { 0x1f24, "\x03\xb7\x03\x13\x03\x01\0" },
- { 0x1f25, "\x03\xb7\x03\x14\x03\x01\0" },
- { 0x1f26, "\x03\xb7\x03\x13\x03\x42\0" },
- { 0x1f27, "\x03\xb7\x03\x14\x03\x42\0" },
- { 0x1f28, "\x03\x97\x03\x13\0" },
- { 0x1f29, "\x03\x97\x03\x14\0" },
- { 0x1f2a, "\x03\x97\x03\x13\x03\x00\0" },
- { 0x1f2b, "\x03\x97\x03\x14\x03\x00\0" },
- { 0x1f2c, "\x03\x97\x03\x13\x03\x01\0" },
- { 0x1f2d, "\x03\x97\x03\x14\x03\x01\0" },
- { 0x1f2e, "\x03\x97\x03\x13\x03\x42\0" },
- { 0x1f2f, "\x03\x97\x03\x14\x03\x42\0" },
- { 0x1f30, "\x03\xb9\x03\x13\0" },
- { 0x1f31, "\x03\xb9\x03\x14\0" },
- { 0x1f32, "\x03\xb9\x03\x13\x03\x00\0" },
- { 0x1f33, "\x03\xb9\x03\x14\x03\x00\0" },
- { 0x1f34, "\x03\xb9\x03\x13\x03\x01\0" },
- { 0x1f35, "\x03\xb9\x03\x14\x03\x01\0" },
- { 0x1f36, "\x03\xb9\x03\x13\x03\x42\0" },
- { 0x1f37, "\x03\xb9\x03\x14\x03\x42\0" },
- { 0x1f38, "\x03\x99\x03\x13\0" },
- { 0x1f39, "\x03\x99\x03\x14\0" },
- { 0x1f3a, "\x03\x99\x03\x13\x03\x00\0" },
- { 0x1f3b, "\x03\x99\x03\x14\x03\x00\0" },
- { 0x1f3c, "\x03\x99\x03\x13\x03\x01\0" },
- { 0x1f3d, "\x03\x99\x03\x14\x03\x01\0" },
- { 0x1f3e, "\x03\x99\x03\x13\x03\x42\0" },
- { 0x1f3f, "\x03\x99\x03\x14\x03\x42\0" },
- { 0x1f40, "\x03\xbf\x03\x13\0" },
- { 0x1f41, "\x03\xbf\x03\x14\0" },
- { 0x1f42, "\x03\xbf\x03\x13\x03\x00\0" },
- { 0x1f43, "\x03\xbf\x03\x14\x03\x00\0" },
- { 0x1f44, "\x03\xbf\x03\x13\x03\x01\0" },
- { 0x1f45, "\x03\xbf\x03\x14\x03\x01\0" },
- { 0x1f48, "\x03\x9f\x03\x13\0" },
- { 0x1f49, "\x03\x9f\x03\x14\0" },
- { 0x1f4a, "\x03\x9f\x03\x13\x03\x00\0" },
- { 0x1f4b, "\x03\x9f\x03\x14\x03\x00\0" },
- { 0x1f4c, "\x03\x9f\x03\x13\x03\x01\0" },
- { 0x1f4d, "\x03\x9f\x03\x14\x03\x01\0" },
- { 0x1f50, "\x03\xc5\x03\x13\0" },
- { 0x1f51, "\x03\xc5\x03\x14\0" },
- { 0x1f52, "\x03\xc5\x03\x13\x03\x00\0" },
- { 0x1f53, "\x03\xc5\x03\x14\x03\x00\0" },
- { 0x1f54, "\x03\xc5\x03\x13\x03\x01\0" },
- { 0x1f55, "\x03\xc5\x03\x14\x03\x01\0" },
- { 0x1f56, "\x03\xc5\x03\x13\x03\x42\0" },
- { 0x1f57, "\x03\xc5\x03\x14\x03\x42\0" },
- { 0x1f59, "\x03\xa5\x03\x14\0" },
- { 0x1f5b, "\x03\xa5\x03\x14\x03\x00\0" },
- { 0x1f5d, "\x03\xa5\x03\x14\x03\x01\0" },
- { 0x1f5f, "\x03\xa5\x03\x14\x03\x42\0" },
- { 0x1f60, "\x03\xc9\x03\x13\0" },
- { 0x1f61, "\x03\xc9\x03\x14\0" },
- { 0x1f62, "\x03\xc9\x03\x13\x03\x00\0" },
- { 0x1f63, "\x03\xc9\x03\x14\x03\x00\0" },
- { 0x1f64, "\x03\xc9\x03\x13\x03\x01\0" },
- { 0x1f65, "\x03\xc9\x03\x14\x03\x01\0" },
- { 0x1f66, "\x03\xc9\x03\x13\x03\x42\0" },
- { 0x1f67, "\x03\xc9\x03\x14\x03\x42\0" },
- { 0x1f68, "\x03\xa9\x03\x13\0" },
- { 0x1f69, "\x03\xa9\x03\x14\0" },
- { 0x1f6a, "\x03\xa9\x03\x13\x03\x00\0" },
- { 0x1f6b, "\x03\xa9\x03\x14\x03\x00\0" },
- { 0x1f6c, "\x03\xa9\x03\x13\x03\x01\0" },
- { 0x1f6d, "\x03\xa9\x03\x14\x03\x01\0" },
- { 0x1f6e, "\x03\xa9\x03\x13\x03\x42\0" },
- { 0x1f6f, "\x03\xa9\x03\x14\x03\x42\0" },
- { 0x1f70, "\x03\xb1\x03\x00\0" },
- { 0x1f71, "\x03\xb1\x03\x01\0" },
- { 0x1f72, "\x03\xb5\x03\x00\0" },
- { 0x1f73, "\x03\xb5\x03\x01\0" },
- { 0x1f74, "\x03\xb7\x03\x00\0" },
- { 0x1f75, "\x03\xb7\x03\x01\0" },
- { 0x1f76, "\x03\xb9\x03\x00\0" },
- { 0x1f77, "\x03\xb9\x03\x01\0" },
- { 0x1f78, "\x03\xbf\x03\x00\0" },
- { 0x1f79, "\x03\xbf\x03\x01\0" },
- { 0x1f7a, "\x03\xc5\x03\x00\0" },
- { 0x1f7b, "\x03\xc5\x03\x01\0" },
- { 0x1f7c, "\x03\xc9\x03\x00\0" },
- { 0x1f7d, "\x03\xc9\x03\x01\0" },
- { 0x1f80, "\x03\xb1\x03\x13\x03\x45\0" },
- { 0x1f81, "\x03\xb1\x03\x14\x03\x45\0" },
- { 0x1f82, "\x03\xb1\x03\x13\x03\x00\x03\x45\0" },
- { 0x1f83, "\x03\xb1\x03\x14\x03\x00\x03\x45\0" },
- { 0x1f84, "\x03\xb1\x03\x13\x03\x01\x03\x45\0" },
- { 0x1f85, "\x03\xb1\x03\x14\x03\x01\x03\x45\0" },
- { 0x1f86, "\x03\xb1\x03\x13\x03\x42\x03\x45\0" },
- { 0x1f87, "\x03\xb1\x03\x14\x03\x42\x03\x45\0" },
- { 0x1f88, "\x03\x91\x03\x13\x03\x45\0" },
- { 0x1f89, "\x03\x91\x03\x14\x03\x45\0" },
- { 0x1f8a, "\x03\x91\x03\x13\x03\x00\x03\x45\0" },
- { 0x1f8b, "\x03\x91\x03\x14\x03\x00\x03\x45\0" },
- { 0x1f8c, "\x03\x91\x03\x13\x03\x01\x03\x45\0" },
- { 0x1f8d, "\x03\x91\x03\x14\x03\x01\x03\x45\0" },
- { 0x1f8e, "\x03\x91\x03\x13\x03\x42\x03\x45\0" },
- { 0x1f8f, "\x03\x91\x03\x14\x03\x42\x03\x45\0" },
- { 0x1f90, "\x03\xb7\x03\x13\x03\x45\0" },
- { 0x1f91, "\x03\xb7\x03\x14\x03\x45\0" },
- { 0x1f92, "\x03\xb7\x03\x13\x03\x00\x03\x45\0" },
- { 0x1f93, "\x03\xb7\x03\x14\x03\x00\x03\x45\0" },
- { 0x1f94, "\x03\xb7\x03\x13\x03\x01\x03\x45\0" },
- { 0x1f95, "\x03\xb7\x03\x14\x03\x01\x03\x45\0" },
- { 0x1f96, "\x03\xb7\x03\x13\x03\x42\x03\x45\0" },
- { 0x1f97, "\x03\xb7\x03\x14\x03\x42\x03\x45\0" },
- { 0x1f98, "\x03\x97\x03\x13\x03\x45\0" },
- { 0x1f99, "\x03\x97\x03\x14\x03\x45\0" },
- { 0x1f9a, "\x03\x97\x03\x13\x03\x00\x03\x45\0" },
- { 0x1f9b, "\x03\x97\x03\x14\x03\x00\x03\x45\0" },
- { 0x1f9c, "\x03\x97\x03\x13\x03\x01\x03\x45\0" },
- { 0x1f9d, "\x03\x97\x03\x14\x03\x01\x03\x45\0" },
- { 0x1f9e, "\x03\x97\x03\x13\x03\x42\x03\x45\0" },
- { 0x1f9f, "\x03\x97\x03\x14\x03\x42\x03\x45\0" },
- { 0x1fa0, "\x03\xc9\x03\x13\x03\x45\0" },
- { 0x1fa1, "\x03\xc9\x03\x14\x03\x45\0" },
- { 0x1fa2, "\x03\xc9\x03\x13\x03\x00\x03\x45\0" },
- { 0x1fa3, "\x03\xc9\x03\x14\x03\x00\x03\x45\0" },
- { 0x1fa4, "\x03\xc9\x03\x13\x03\x01\x03\x45\0" },
- { 0x1fa5, "\x03\xc9\x03\x14\x03\x01\x03\x45\0" },
- { 0x1fa6, "\x03\xc9\x03\x13\x03\x42\x03\x45\0" },
- { 0x1fa7, "\x03\xc9\x03\x14\x03\x42\x03\x45\0" },
- { 0x1fa8, "\x03\xa9\x03\x13\x03\x45\0" },
- { 0x1fa9, "\x03\xa9\x03\x14\x03\x45\0" },
- { 0x1faa, "\x03\xa9\x03\x13\x03\x00\x03\x45\0" },
- { 0x1fab, "\x03\xa9\x03\x14\x03\x00\x03\x45\0" },
- { 0x1fac, "\x03\xa9\x03\x13\x03\x01\x03\x45\0" },
- { 0x1fad, "\x03\xa9\x03\x14\x03\x01\x03\x45\0" },
- { 0x1fae, "\x03\xa9\x03\x13\x03\x42\x03\x45\0" },
- { 0x1faf, "\x03\xa9\x03\x14\x03\x42\x03\x45\0" },
- { 0x1fb0, "\x03\xb1\x03\x06\0" },
- { 0x1fb1, "\x03\xb1\x03\x04\0" },
- { 0x1fb2, "\x03\xb1\x03\x00\x03\x45\0" },
- { 0x1fb3, "\x03\xb1\x03\x45\0" },
- { 0x1fb4, "\x03\xb1\x03\x01\x03\x45\0" },
- { 0x1fb6, "\x03\xb1\x03\x42\0" },
- { 0x1fb7, "\x03\xb1\x03\x42\x03\x45\0" },
- { 0x1fb8, "\x03\x91\x03\x06\0" },
- { 0x1fb9, "\x03\x91\x03\x04\0" },
- { 0x1fba, "\x03\x91\x03\x00\0" },
- { 0x1fbb, "\x03\x91\x03\x01\0" },
- { 0x1fbc, "\x03\x91\x03\x45\0" },
- { 0x1fbe, "\x03\xb9\0" },
- { 0x1fc1, "\x00\xa8\x03\x42\0" },
- { 0x1fc2, "\x03\xb7\x03\x00\x03\x45\0" },
- { 0x1fc3, "\x03\xb7\x03\x45\0" },
- { 0x1fc4, "\x03\xb7\x03\x01\x03\x45\0" },
- { 0x1fc6, "\x03\xb7\x03\x42\0" },
- { 0x1fc7, "\x03\xb7\x03\x42\x03\x45\0" },
- { 0x1fc8, "\x03\x95\x03\x00\0" },
- { 0x1fc9, "\x03\x95\x03\x01\0" },
- { 0x1fca, "\x03\x97\x03\x00\0" },
- { 0x1fcb, "\x03\x97\x03\x01\0" },
- { 0x1fcc, "\x03\x97\x03\x45\0" },
- { 0x1fcd, "\x1f\xbf\x03\x00\0" },
- { 0x1fce, "\x1f\xbf\x03\x01\0" },
- { 0x1fcf, "\x1f\xbf\x03\x42\0" },
- { 0x1fd0, "\x03\xb9\x03\x06\0" },
- { 0x1fd1, "\x03\xb9\x03\x04\0" },
- { 0x1fd2, "\x03\xb9\x03\x08\x03\x00\0" },
- { 0x1fd3, "\x03\xb9\x03\x08\x03\x01\0" },
- { 0x1fd6, "\x03\xb9\x03\x42\0" },
- { 0x1fd7, "\x03\xb9\x03\x08\x03\x42\0" },
- { 0x1fd8, "\x03\x99\x03\x06\0" },
- { 0x1fd9, "\x03\x99\x03\x04\0" },
- { 0x1fda, "\x03\x99\x03\x00\0" },
- { 0x1fdb, "\x03\x99\x03\x01\0" },
- { 0x1fdd, "\x1f\xfe\x03\x00\0" },
- { 0x1fde, "\x1f\xfe\x03\x01\0" },
- { 0x1fdf, "\x1f\xfe\x03\x42\0" },
- { 0x1fe0, "\x03\xc5\x03\x06\0" },
- { 0x1fe1, "\x03\xc5\x03\x04\0" },
- { 0x1fe2, "\x03\xc5\x03\x08\x03\x00\0" },
- { 0x1fe3, "\x03\xc5\x03\x08\x03\x01\0" },
- { 0x1fe4, "\x03\xc1\x03\x13\0" },
- { 0x1fe5, "\x03\xc1\x03\x14\0" },
- { 0x1fe6, "\x03\xc5\x03\x42\0" },
- { 0x1fe7, "\x03\xc5\x03\x08\x03\x42\0" },
- { 0x1fe8, "\x03\xa5\x03\x06\0" },
- { 0x1fe9, "\x03\xa5\x03\x04\0" },
- { 0x1fea, "\x03\xa5\x03\x00\0" },
- { 0x1feb, "\x03\xa5\x03\x01\0" },
- { 0x1fec, "\x03\xa1\x03\x14\0" },
- { 0x1fed, "\x00\xa8\x03\x00\0" },
- { 0x1fee, "\x00\xa8\x03\x01\0" },
- { 0x1fef, "\x00\x60\0" },
- { 0x1ff2, "\x03\xc9\x03\x00\x03\x45\0" },
- { 0x1ff3, "\x03\xc9\x03\x45\0" },
- { 0x1ff4, "\x03\xc9\x03\x01\x03\x45\0" },
- { 0x1ff6, "\x03\xc9\x03\x42\0" },
- { 0x1ff7, "\x03\xc9\x03\x42\x03\x45\0" },
- { 0x1ff8, "\x03\x9f\x03\x00\0" },
- { 0x1ff9, "\x03\x9f\x03\x01\0" },
- { 0x1ffa, "\x03\xa9\x03\x00\0" },
- { 0x1ffb, "\x03\xa9\x03\x01\0" },
- { 0x1ffc, "\x03\xa9\x03\x45\0" },
- { 0x1ffd, "\x00\xb4\0" },
- { 0x2000, "\x20\x02\0" },
- { 0x2001, "\x20\x03\0" },
- { 0x2126, "\x03\xa9\0" },
- { 0x212a, "\x00\x4b\0" },
- { 0x212b, "\x00\x41\x03\x0a\0" },
- { 0x2204, "\x22\x03\x03\x38\0" },
- { 0x2209, "\x22\x08\x03\x38\0" },
- { 0x220c, "\x22\x0b\x03\x38\0" },
- { 0x2224, "\x22\x23\x03\x38\0" },
- { 0x2226, "\x22\x25\x03\x38\0" },
- { 0x2241, "\x00\x7e\x03\x38\0" },
- { 0x2244, "\x22\x43\x03\x38\0" },
- { 0x2247, "\x22\x45\x03\x38\0" },
- { 0x2249, "\x22\x48\x03\x38\0" },
- { 0x2260, "\x00\x3d\x03\x38\0" },
- { 0x2262, "\x22\x61\x03\x38\0" },
- { 0x226d, "\x22\x4d\x03\x38\0" },
- { 0x226e, "\x00\x3c\x03\x38\0" },
- { 0x226f, "\x00\x3e\x03\x38\0" },
- { 0x2270, "\x22\x64\x03\x38\0" },
- { 0x2271, "\x22\x65\x03\x38\0" },
- { 0x2274, "\x22\x72\x03\x38\0" },
- { 0x2275, "\x22\x73\x03\x38\0" },
- { 0x2278, "\x22\x76\x03\x38\0" },
- { 0x2279, "\x22\x77\x03\x38\0" },
- { 0x2280, "\x22\x7a\x03\x38\0" },
- { 0x2281, "\x22\x7b\x03\x38\0" },
- { 0x2284, "\x22\x82\x03\x38\0" },
- { 0x2285, "\x22\x83\x03\x38\0" },
- { 0x2288, "\x22\x86\x03\x38\0" },
- { 0x2289, "\x22\x87\x03\x38\0" },
- { 0x22ac, "\x22\xa2\x03\x38\0" },
- { 0x22ad, "\x22\xa8\x03\x38\0" },
- { 0x22ae, "\x22\xa9\x03\x38\0" },
- { 0x22af, "\x22\xab\x03\x38\0" },
- { 0x22e0, "\x22\x7c\x03\x38\0" },
- { 0x22e1, "\x22\x7d\x03\x38\0" },
- { 0x22e2, "\x22\x91\x03\x38\0" },
- { 0x22e3, "\x22\x92\x03\x38\0" },
- { 0x22ea, "\x22\xb2\x03\x38\0" },
- { 0x22eb, "\x22\xb3\x03\x38\0" },
- { 0x22ec, "\x22\xb4\x03\x38\0" },
- { 0x22ed, "\x22\xb5\x03\x38\0" },
- { 0x2329, "\x30\x08\0" },
- { 0x232a, "\x30\x09\0" },
- { 0x304c, "\x30\x4b\x30\x99\0" },
- { 0x304e, "\x30\x4d\x30\x99\0" },
- { 0x3050, "\x30\x4f\x30\x99\0" },
- { 0x3052, "\x30\x51\x30\x99\0" },
- { 0x3054, "\x30\x53\x30\x99\0" },
- { 0x3056, "\x30\x55\x30\x99\0" },
- { 0x3058, "\x30\x57\x30\x99\0" },
- { 0x305a, "\x30\x59\x30\x99\0" },
- { 0x305c, "\x30\x5b\x30\x99\0" },
- { 0x305e, "\x30\x5d\x30\x99\0" },
- { 0x3060, "\x30\x5f\x30\x99\0" },
- { 0x3062, "\x30\x61\x30\x99\0" },
- { 0x3065, "\x30\x64\x30\x99\0" },
- { 0x3067, "\x30\x66\x30\x99\0" },
- { 0x3069, "\x30\x68\x30\x99\0" },
- { 0x3070, "\x30\x6f\x30\x99\0" },
- { 0x3071, "\x30\x6f\x30\x9a\0" },
- { 0x3073, "\x30\x72\x30\x99\0" },
- { 0x3074, "\x30\x72\x30\x9a\0" },
- { 0x3076, "\x30\x75\x30\x99\0" },
- { 0x3077, "\x30\x75\x30\x9a\0" },
- { 0x3079, "\x30\x78\x30\x99\0" },
- { 0x307a, "\x30\x78\x30\x9a\0" },
- { 0x307c, "\x30\x7b\x30\x99\0" },
- { 0x307d, "\x30\x7b\x30\x9a\0" },
- { 0x3094, "\x30\x46\x30\x99\0" },
- { 0x309e, "\x30\x9d\x30\x99\0" },
- { 0x30ac, "\x30\xab\x30\x99\0" },
- { 0x30ae, "\x30\xad\x30\x99\0" },
- { 0x30b0, "\x30\xaf\x30\x99\0" },
- { 0x30b2, "\x30\xb1\x30\x99\0" },
- { 0x30b4, "\x30\xb3\x30\x99\0" },
- { 0x30b6, "\x30\xb5\x30\x99\0" },
- { 0x30b8, "\x30\xb7\x30\x99\0" },
- { 0x30ba, "\x30\xb9\x30\x99\0" },
- { 0x30bc, "\x30\xbb\x30\x99\0" },
- { 0x30be, "\x30\xbd\x30\x99\0" },
- { 0x30c0, "\x30\xbf\x30\x99\0" },
- { 0x30c2, "\x30\xc1\x30\x99\0" },
- { 0x30c5, "\x30\xc4\x30\x99\0" },
- { 0x30c7, "\x30\xc6\x30\x99\0" },
- { 0x30c9, "\x30\xc8\x30\x99\0" },
- { 0x30d0, "\x30\xcf\x30\x99\0" },
- { 0x30d1, "\x30\xcf\x30\x9a\0" },
- { 0x30d3, "\x30\xd2\x30\x99\0" },
- { 0x30d4, "\x30\xd2\x30\x9a\0" },
- { 0x30d6, "\x30\xd5\x30\x99\0" },
- { 0x30d7, "\x30\xd5\x30\x9a\0" },
- { 0x30d9, "\x30\xd8\x30\x99\0" },
- { 0x30da, "\x30\xd8\x30\x9a\0" },
- { 0x30dc, "\x30\xdb\x30\x99\0" },
- { 0x30dd, "\x30\xdb\x30\x9a\0" },
- { 0x30f4, "\x30\xa6\x30\x99\0" },
- { 0x30f7, "\x30\xef\x30\x99\0" },
- { 0x30f8, "\x30\xf0\x30\x99\0" },
- { 0x30f9, "\x30\xf1\x30\x99\0" },
- { 0x30fa, "\x30\xf2\x30\x99\0" },
- { 0x30fe, "\x30\xfd\x30\x99\0" },
- { 0xf900, "\x8c\x48\0" },
- { 0xf901, "\x66\xf4\0" },
- { 0xf902, "\x8e\xca\0" },
- { 0xf903, "\x8c\xc8\0" },
- { 0xf904, "\x6e\xd1\0" },
- { 0xf905, "\x4e\x32\0" },
- { 0xf906, "\x53\xe5\0" },
- { 0xf907, "\x9f\x9c\0" },
- { 0xf908, "\x9f\x9c\0" },
- { 0xf909, "\x59\x51\0" },
- { 0xf90a, "\x91\xd1\0" },
- { 0xf90b, "\x55\x87\0" },
- { 0xf90c, "\x59\x48\0" },
- { 0xf90d, "\x61\xf6\0" },
- { 0xf90e, "\x76\x69\0" },
- { 0xf90f, "\x7f\x85\0" },
- { 0xf910, "\x86\x3f\0" },
- { 0xf911, "\x87\xba\0" },
- { 0xf912, "\x88\xf8\0" },
- { 0xf913, "\x90\x8f\0" },
- { 0xf914, "\x6a\x02\0" },
- { 0xf915, "\x6d\x1b\0" },
- { 0xf916, "\x70\xd9\0" },
- { 0xf917, "\x73\xde\0" },
- { 0xf918, "\x84\x3d\0" },
- { 0xf919, "\x91\x6a\0" },
- { 0xf91a, "\x99\xf1\0" },
- { 0xf91b, "\x4e\x82\0" },
- { 0xf91c, "\x53\x75\0" },
- { 0xf91d, "\x6b\x04\0" },
- { 0xf91e, "\x72\x1b\0" },
- { 0xf91f, "\x86\x2d\0" },
- { 0xf920, "\x9e\x1e\0" },
- { 0xf921, "\x5d\x50\0" },
- { 0xf922, "\x6f\xeb\0" },
- { 0xf923, "\x85\xcd\0" },
- { 0xf924, "\x89\x64\0" },
- { 0xf925, "\x62\xc9\0" },
- { 0xf926, "\x81\xd8\0" },
- { 0xf927, "\x88\x1f\0" },
- { 0xf928, "\x5e\xca\0" },
- { 0xf929, "\x67\x17\0" },
- { 0xf92a, "\x6d\x6a\0" },
- { 0xf92b, "\x72\xfc\0" },
- { 0xf92c, "\x90\xce\0" },
- { 0xf92d, "\x4f\x86\0" },
- { 0xf92e, "\x51\xb7\0" },
- { 0xf92f, "\x52\xde\0" },
- { 0xf930, "\x64\xc4\0" },
- { 0xf931, "\x6a\xd3\0" },
- { 0xf932, "\x72\x10\0" },
- { 0xf933, "\x76\xe7\0" },
- { 0xf934, "\x80\x01\0" },
- { 0xf935, "\x86\x06\0" },
- { 0xf936, "\x86\x5c\0" },
- { 0xf937, "\x8d\xef\0" },
- { 0xf938, "\x97\x32\0" },
- { 0xf939, "\x9b\x6f\0" },
- { 0xf93a, "\x9d\xfa\0" },
- { 0xf93b, "\x78\x8c\0" },
- { 0xf93c, "\x79\x7f\0" },
- { 0xf93d, "\x7d\xa0\0" },
- { 0xf93e, "\x83\xc9\0" },
- { 0xf93f, "\x93\x04\0" },
- { 0xf940, "\x9e\x7f\0" },
- { 0xf941, "\x8a\xd6\0" },
- { 0xf942, "\x58\xdf\0" },
- { 0xf943, "\x5f\x04\0" },
- { 0xf944, "\x7c\x60\0" },
- { 0xf945, "\x80\x7e\0" },
- { 0xf946, "\x72\x62\0" },
- { 0xf947, "\x78\xca\0" },
- { 0xf948, "\x8c\xc2\0" },
- { 0xf949, "\x96\xf7\0" },
- { 0xf94a, "\x58\xd8\0" },
- { 0xf94b, "\x5c\x62\0" },
- { 0xf94c, "\x6a\x13\0" },
- { 0xf94d, "\x6d\xda\0" },
- { 0xf94e, "\x6f\x0f\0" },
- { 0xf94f, "\x7d\x2f\0" },
- { 0xf950, "\x7e\x37\0" },
- { 0xf951, "\x96\xfb\0" },
- { 0xf952, "\x52\xd2\0" },
- { 0xf953, "\x80\x8b\0" },
- { 0xf954, "\x51\xdc\0" },
- { 0xf955, "\x51\xcc\0" },
- { 0xf956, "\x7a\x1c\0" },
- { 0xf957, "\x7d\xbe\0" },
- { 0xf958, "\x83\xf1\0" },
- { 0xf959, "\x96\x75\0" },
- { 0xf95a, "\x8b\x80\0" },
- { 0xf95b, "\x62\xcf\0" },
- { 0xf95c, "\x6a\x02\0" },
- { 0xf95d, "\x8a\xfe\0" },
- { 0xf95e, "\x4e\x39\0" },
- { 0xf95f, "\x5b\xe7\0" },
- { 0xf960, "\x60\x12\0" },
- { 0xf961, "\x73\x87\0" },
- { 0xf962, "\x75\x70\0" },
- { 0xf963, "\x53\x17\0" },
- { 0xf964, "\x78\xfb\0" },
- { 0xf965, "\x4f\xbf\0" },
- { 0xf966, "\x5f\xa9\0" },
- { 0xf967, "\x4e\x0d\0" },
- { 0xf968, "\x6c\xcc\0" },
- { 0xf969, "\x65\x78\0" },
- { 0xf96a, "\x7d\x22\0" },
- { 0xf96b, "\x53\xc3\0" },
- { 0xf96c, "\x58\x5e\0" },
- { 0xf96d, "\x77\x01\0" },
- { 0xf96e, "\x84\x49\0" },
- { 0xf96f, "\x8a\xaa\0" },
- { 0xf970, "\x6b\xba\0" },
- { 0xf971, "\x8f\xb0\0" },
- { 0xf972, "\x6c\x88\0" },
- { 0xf973, "\x62\xfe\0" },
- { 0xf974, "\x82\xe5\0" },
- { 0xf975, "\x63\xa0\0" },
- { 0xf976, "\x75\x65\0" },
- { 0xf977, "\x4e\xae\0" },
- { 0xf978, "\x51\x69\0" },
- { 0xf979, "\x51\xc9\0" },
- { 0xf97a, "\x68\x81\0" },
- { 0xf97b, "\x7c\xe7\0" },
- { 0xf97c, "\x82\x6f\0" },
- { 0xf97d, "\x8a\xd2\0" },
- { 0xf97e, "\x91\xcf\0" },
- { 0xf97f, "\x52\xf5\0" },
- { 0xf980, "\x54\x42\0" },
- { 0xf981, "\x59\x73\0" },
- { 0xf982, "\x5e\xec\0" },
- { 0xf983, "\x65\xc5\0" },
- { 0xf984, "\x6f\xfe\0" },
- { 0xf985, "\x79\x2a\0" },
- { 0xf986, "\x95\xad\0" },
- { 0xf987, "\x9a\x6a\0" },
- { 0xf988, "\x9e\x97\0" },
- { 0xf989, "\x9e\xce\0" },
- { 0xf98a, "\x52\x9b\0" },
- { 0xf98b, "\x66\xc6\0" },
- { 0xf98c, "\x6b\x77\0" },
- { 0xf98d, "\x8f\x62\0" },
- { 0xf98e, "\x5e\x74\0" },
- { 0xf98f, "\x61\x90\0" },
- { 0xf990, "\x62\x00\0" },
- { 0xf991, "\x64\x9a\0" },
- { 0xf992, "\x6f\x23\0" },
- { 0xf993, "\x71\x49\0" },
- { 0xf994, "\x74\x89\0" },
- { 0xf995, "\x79\xca\0" },
- { 0xf996, "\x7d\xf4\0" },
- { 0xf997, "\x80\x6f\0" },
- { 0xf998, "\x8f\x26\0" },
- { 0xf999, "\x84\xee\0" },
- { 0xf99a, "\x90\x23\0" },
- { 0xf99b, "\x93\x4a\0" },
- { 0xf99c, "\x52\x17\0" },
- { 0xf99d, "\x52\xa3\0" },
- { 0xf99e, "\x54\xbd\0" },
- { 0xf99f, "\x70\xc8\0" },
- { 0xf9a0, "\x88\xc2\0" },
- { 0xf9a1, "\x8a\xaa\0" },
- { 0xf9a2, "\x5e\xc9\0" },
- { 0xf9a3, "\x5f\xf5\0" },
- { 0xf9a4, "\x63\x7b\0" },
- { 0xf9a5, "\x6b\xae\0" },
- { 0xf9a6, "\x7c\x3e\0" },
- { 0xf9a7, "\x73\x75\0" },
- { 0xf9a8, "\x4e\xe4\0" },
- { 0xf9a9, "\x56\xf9\0" },
- { 0xf9aa, "\x5b\xe7\0" },
- { 0xf9ab, "\x5d\xba\0" },
- { 0xf9ac, "\x60\x1c\0" },
- { 0xf9ad, "\x73\xb2\0" },
- { 0xf9ae, "\x74\x69\0" },
- { 0xf9af, "\x7f\x9a\0" },
- { 0xf9b0, "\x80\x46\0" },
- { 0xf9b1, "\x92\x34\0" },
- { 0xf9b2, "\x96\xf6\0" },
- { 0xf9b3, "\x97\x48\0" },
- { 0xf9b4, "\x98\x18\0" },
- { 0xf9b5, "\x4f\x8b\0" },
- { 0xf9b6, "\x79\xae\0" },
- { 0xf9b7, "\x91\xb4\0" },
- { 0xf9b8, "\x96\xb8\0" },
- { 0xf9b9, "\x60\xe1\0" },
- { 0xf9ba, "\x4e\x86\0" },
- { 0xf9bb, "\x50\xda\0" },
- { 0xf9bc, "\x5b\xee\0" },
- { 0xf9bd, "\x5c\x3f\0" },
- { 0xf9be, "\x65\x99\0" },
- { 0xf9bf, "\x6a\x02\0" },
- { 0xf9c0, "\x71\xce\0" },
- { 0xf9c1, "\x76\x42\0" },
- { 0xf9c2, "\x84\xfc\0" },
- { 0xf9c3, "\x90\x7c\0" },
- { 0xf9c4, "\x9f\x8d\0" },
- { 0xf9c5, "\x66\x88\0" },
- { 0xf9c6, "\x96\x2e\0" },
- { 0xf9c7, "\x52\x89\0" },
- { 0xf9c8, "\x67\x7b\0" },
- { 0xf9c9, "\x67\xf3\0" },
- { 0xf9ca, "\x6d\x41\0" },
- { 0xf9cb, "\x6e\x9c\0" },
- { 0xf9cc, "\x74\x09\0" },
- { 0xf9cd, "\x75\x59\0" },
- { 0xf9ce, "\x78\x6b\0" },
- { 0xf9cf, "\x7d\x10\0" },
- { 0xf9d0, "\x98\x5e\0" },
- { 0xf9d1, "\x51\x6d\0" },
- { 0xf9d2, "\x62\x2e\0" },
- { 0xf9d3, "\x96\x78\0" },
- { 0xf9d4, "\x50\x2b\0" },
- { 0xf9d5, "\x5d\x19\0" },
- { 0xf9d6, "\x6d\xea\0" },
- { 0xf9d7, "\x8f\x2a\0" },
- { 0xf9d8, "\x5f\x8b\0" },
- { 0xf9d9, "\x61\x44\0" },
- { 0xf9da, "\x68\x17\0" },
- { 0xf9db, "\x73\x87\0" },
- { 0xf9dc, "\x96\x86\0" },
- { 0xf9dd, "\x52\x29\0" },
- { 0xf9de, "\x54\x0f\0" },
- { 0xf9df, "\x5c\x65\0" },
- { 0xf9e0, "\x66\x13\0" },
- { 0xf9e1, "\x67\x4e\0" },
- { 0xf9e2, "\x68\xa8\0" },
- { 0xf9e3, "\x6c\xe5\0" },
- { 0xf9e4, "\x74\x06\0" },
- { 0xf9e5, "\x75\xe2\0" },
- { 0xf9e6, "\x7f\x79\0" },
- { 0xf9e7, "\x88\xcf\0" },
- { 0xf9e8, "\x88\xe1\0" },
- { 0xf9e9, "\x91\xcc\0" },
- { 0xf9ea, "\x96\xe2\0" },
- { 0xf9eb, "\x53\x3f\0" },
- { 0xf9ec, "\x6e\xba\0" },
- { 0xf9ed, "\x54\x1d\0" },
- { 0xf9ee, "\x71\xd0\0" },
- { 0xf9ef, "\x74\x98\0" },
- { 0xf9f0, "\x85\xfa\0" },
- { 0xf9f1, "\x96\xa3\0" },
- { 0xf9f2, "\x9c\x57\0" },
- { 0xf9f3, "\x9e\x9f\0" },
- { 0xf9f4, "\x67\x97\0" },
- { 0xf9f5, "\x6d\xcb\0" },
- { 0xf9f6, "\x81\xe8\0" },
- { 0xf9f7, "\x7a\xcb\0" },
- { 0xf9f8, "\x7b\x20\0" },
- { 0xf9f9, "\x7c\x92\0" },
- { 0xf9fa, "\x72\xc0\0" },
- { 0xf9fb, "\x70\x99\0" },
- { 0xf9fc, "\x8b\x58\0" },
- { 0xf9fd, "\x4e\xc0\0" },
- { 0xf9fe, "\x83\x36\0" },
- { 0xf9ff, "\x52\x3a\0" },
- { 0xfa00, "\x52\x07\0" },
- { 0xfa01, "\x5e\xa6\0" },
- { 0xfa02, "\x62\xd3\0" },
- { 0xfa03, "\x7c\xd6\0" },
- { 0xfa04, "\x5b\x85\0" },
- { 0xfa05, "\x6d\x1e\0" },
- { 0xfa06, "\x66\xb4\0" },
- { 0xfa07, "\x8f\x3b\0" },
- { 0xfa08, "\x88\x4c\0" },
- { 0xfa09, "\x96\x4d\0" },
- { 0xfa0a, "\x89\x8b\0" },
- { 0xfa0b, "\x5e\xd3\0" },
- { 0xfa0c, "\x51\x40\0" },
- { 0xfa0d, "\x55\xc0\0" },
- { 0xfa10, "\x58\x5a\0" },
- { 0xfa12, "\x66\x74\0" },
- { 0xfa15, "\x51\xde\0" },
- { 0xfa16, "\x73\x2a\0" },
- { 0xfa17, "\x76\xca\0" },
- { 0xfa18, "\x79\x3c\0" },
- { 0xfa19, "\x79\x5e\0" },
- { 0xfa1a, "\x79\x65\0" },
- { 0xfa1b, "\x79\x8f\0" },
- { 0xfa1c, "\x97\x56\0" },
- { 0xfa1d, "\x7c\xbe\0" },
- { 0xfa1e, "\x7f\xbd\0" },
- { 0xfa20, "\x86\x12\0" },
- { 0xfa22, "\x8a\xf8\0" },
- { 0xfa25, "\x90\x38\0" },
- { 0xfa26, "\x90\xfd\0" },
- { 0xfa2a, "\x98\xef\0" },
- { 0xfa2b, "\x98\xfc\0" },
- { 0xfa2c, "\x99\x28\0" },
- { 0xfa2d, "\x9d\xb4\0" },
- { 0xfb1f, "\x05\xf2\x05\xb7\0" },
- { 0xfb2a, "\x05\xe9\x05\xc1\0" },
- { 0xfb2b, "\x05\xe9\x05\xc2\0" },
- { 0xfb2c, "\x05\xe9\x05\xbc\x05\xc1\0" },
- { 0xfb2d, "\x05\xe9\x05\xbc\x05\xc2\0" },
- { 0xfb2e, "\x05\xd0\x05\xb7\0" },
- { 0xfb2f, "\x05\xd0\x05\xb8\0" },
- { 0xfb30, "\x05\xd0\x05\xbc\0" },
- { 0xfb31, "\x05\xd1\x05\xbc\0" },
- { 0xfb32, "\x05\xd2\x05\xbc\0" },
- { 0xfb33, "\x05\xd3\x05\xbc\0" },
- { 0xfb34, "\x05\xd4\x05\xbc\0" },
- { 0xfb35, "\x05\xd5\x05\xbc\0" },
- { 0xfb36, "\x05\xd6\x05\xbc\0" },
- { 0xfb38, "\x05\xd8\x05\xbc\0" },
- { 0xfb39, "\x05\xd9\x05\xbc\0" },
- { 0xfb3a, "\x05\xda\x05\xbc\0" },
- { 0xfb3b, "\x05\xdb\x05\xbc\0" },
- { 0xfb3c, "\x05\xdc\x05\xbc\0" },
- { 0xfb3e, "\x05\xde\x05\xbc\0" },
- { 0xfb40, "\x05\xe0\x05\xbc\0" },
- { 0xfb41, "\x05\xe1\x05\xbc\0" },
- { 0xfb43, "\x05\xe3\x05\xbc\0" },
- { 0xfb44, "\x05\xe4\x05\xbc\0" },
- { 0xfb46, "\x05\xe6\x05\xbc\0" },
- { 0xfb47, "\x05\xe7\x05\xbc\0" },
- { 0xfb48, "\x05\xe8\x05\xbc\0" },
- { 0xfb49, "\x05\xe9\x05\xbc\0" },
- { 0xfb4a, "\x05\xea\x05\xbc\0" },
- { 0xfb4b, "\x05\xd5\x05\xb9\0" },
- { 0xfb4c, "\x05\xd1\x05\xbf\0" },
- { 0xfb4d, "\x05\xdb\x05\xbf\0" },
- { 0xfb4e, "\x05\xe4\x05\xbf\0" }
-};
-
-/*
- * WARNING!
- *
- * NO BUFFER CHECKING AHEAD!
- *
- */
-
-static gint
-e_canonical_decomposition (gunichar ch, gunichar * buf)
-{
- gint len = 0;
-
- if (ch <= 0xffff)
- {
- int start = 0;
- int end = sizeof (e_decomp_table) / sizeof (e_decomp_table[0]);
- while (start != end)
- {
- int half = (start + end) / 2;
- if (ch == e_decomp_table[half].ch) {
- /* Found it. */
- int i;
- /* We store as a double-nul terminated string. */
- for (len = 0; (e_decomp_table[half].expansion[len] || e_decomp_table[half].expansion[len + 1]); len += 2) ;
-
- /* We've counted twice as many bytes as there are
- characters. */
- len /= 2;
-
- for (i = 0; i < len; i ++) {
- buf[i] = (e_decomp_table[half].expansion[2 * i] << 8) | e_decomp_table[half].expansion[2 * i + 1];
- }
- break;
- } else if (ch > e_decomp_table[half].ch) {
- if (start == half) break;
- start = half;
- } else {
- if (end == half) break;
- end = half;
- }
- }
- }
-
- if (len == 0)
- {
- /* Not in our table. */
- *buf = ch;
- len = 1;
- }
-
- /* Supposedly following the Unicode 2.1.9 table means that the
- decompositions come out in canonical order. I haven't tested
- this, but we rely on it here. */
- return len;
-}
-
-static gunichar
-e_stripped_char (gunichar ch)
-{
- gunichar decomp[MAX_DECOMP];
- GUnicodeType utype;
- gint dlen;
-
- utype = g_unichar_type (ch);
-
- switch (utype) {
- case G_UNICODE_CONTROL:
- case G_UNICODE_FORMAT:
- case G_UNICODE_UNASSIGNED:
- case G_UNICODE_COMBINING_MARK:
- /* Ignore those */
- return 0;
- break;
- default:
- /* Convert to lowercase, fall through */
- ch = g_unichar_tolower (ch);
- case G_UNICODE_LOWERCASE_LETTER:
- dlen = e_canonical_decomposition (ch, decomp);
- if (dlen > 0) return *decomp;
- break;
- }
-
- return 0;
-}
-
-gchar *
-e_xml_get_translated_utf8_string_prop_by_name (const xmlNode *parent, const xmlChar *prop_name)
-{
- xmlChar *prop;
- gchar *ret_val = NULL;
- gchar *combined_name;
-
- g_return_val_if_fail (parent != NULL, 0);
- g_return_val_if_fail (prop_name != NULL, 0);
-
- prop = xmlGetProp ((xmlNode *) parent, prop_name);
- if (prop != NULL) {
- ret_val = g_strdup (prop);
- xmlFree (prop);
- return ret_val;
- }
-
- combined_name = g_strdup_printf("_%s", prop_name);
- prop = xmlGetProp ((xmlNode *) parent, combined_name);
- if (prop != NULL) {
- ret_val = g_strdup (gettext (prop));
- xmlFree (prop);
- }
- g_free(combined_name);
-
- return ret_val;
-}
diff --git a/widgets/misc/e-unicode.h b/widgets/misc/e-unicode.h
deleted file mode 100644
index 12c9ef3aa2..0000000000
--- a/widgets/misc/e-unicode.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-unicode.h - utf-8 support functions for gal
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Lauris Kaplinski <lauris@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_UNICODE_H_
-#define _E_UNICODE_H_
-
-#include <sys/types.h>
-#include <glib.h>
-#include <gtk/gtkclist.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkwidget.h>
-#include <libxml/tree.h>
-#include <iconv.h>
-
-G_BEGIN_DECLS
-
-#define G_UTF8_IN_GAL
-
-/*
- * UTF-8 searching implementations
- *
- * e_utf8_strstrcase - case insensitive search
- * e_utf8_strstrcasedecomp - case insensitive and decompositing search (i.e. accented
- * letters are treated equal to their base letters, explicit accent marks (unicode
- * not ascii/iso ones) are ignored).
- */
-
-const gchar *e_utf8_strstrcase (const gchar *haystack,
- const gchar *needle);
-const gchar *e_utf8_strstrcasedecomp (const gchar *haystack,
- const gchar *needle);
-gchar *e_utf8_from_gtk_event_key (GtkWidget *widget,
- guint keyval,
- const gchar *string);
-gchar *e_utf8_from_iconv_string (iconv_t ic,
- const gchar *string);
-gchar *e_utf8_from_iconv_string_sized (iconv_t ic,
- const gchar *string,
- gint bytes);
-gchar *e_utf8_to_iconv_string (iconv_t ic,
- const gchar *string);
-gchar *e_utf8_to_iconv_string_sized (iconv_t ic,
- const gchar *string,
- gint bytes);
-gchar *e_utf8_from_charset_string (const gchar *charset,
- const gchar *string);
-gchar *e_utf8_from_charset_string_sized (const gchar *charset,
- const gchar *string,
- gint bytes);
-gchar *e_utf8_to_charset_string (const gchar *charset,
- const gchar *string);
-gchar *e_utf8_to_charset_string_sized (const gchar *charset,
- const gchar *string,
- gint bytes);
-gchar *e_utf8_from_locale_string (const gchar *string);
-gchar *e_utf8_from_locale_string_sized (const gchar *string,
- gint bytes);
-gchar *e_utf8_to_locale_string (const gchar *string);
-gchar *e_utf8_to_locale_string_sized (const gchar *string,
- gint bytes);
-gboolean e_utf8_is_ascii (const gchar *string);
-/*
- * These are simple wrappers that save us some typing
- */
-
-/* NB! This return newly allocated string, not const as gtk+ one */
-gchar *e_utf8_gtk_entry_get_text (GtkEntry *entry);
-void e_utf8_gtk_entry_set_text (GtkEntry *entry,
- const gchar *text);
-gchar *e_utf8_gtk_editable_get_text (GtkEditable *editable);
-void e_utf8_gtk_editable_set_text (GtkEditable *editable,
- const gchar *text);
-gchar *e_utf8_gtk_editable_get_chars (GtkEditable *editable,
- gint start,
- gint end);
-void e_utf8_gtk_editable_insert_text (GtkEditable *editable,
- const gchar *text,
- gint length,
- gint *position);
-gchar *e_utf8_xml1_decode (const gchar *text);
-gchar *e_utf8_xml1_encode (const gchar *text);
-gint e_unichar_to_utf8 (gint c,
- gchar *outbuf);
-gchar *e_unicode_get_utf8 (const gchar *text,
- gunichar *out);
-guint32 gdk_keyval_to_unicode (guint keysym);
-gchar *e_xml_get_translated_utf8_string_prop_by_name (const xmlNode *parent,
- const xmlChar *prop_name);
-
-G_END_DECLS
-
-#endif
-
-
diff --git a/widgets/misc/gal-categories.glade b/widgets/misc/gal-categories.glade
deleted file mode 100644
index 40f034999b..0000000000
--- a/widgets/misc/gal-categories.glade
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="categories">
- <property name="title" translatable="yes">categories</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">False</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button3">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button4">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table-categories">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="n_rows">5</property>
- <property name="n_columns">1</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkEntry" id="entry-categories">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char" translatable="yes">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-header">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Item(s) belong to these _categories:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">entry-categories</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Available Categories:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-ecmld">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Edit Master Category List...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/widgets/misc/gal-combo-box.c b/widgets/misc/gal-combo-box.c
deleted file mode 100644
index ad941a7133..0000000000
--- a/widgets/misc/gal-combo-box.c
+++ /dev/null
@@ -1,834 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gtk-combo-box.c - a customizable combobox
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- * Adrian E Feiguin (feiguin@ifir.edu.ar)
- * Paolo Molnaro (lupus@debian.org).
- * Jon K Hellan (hellan@acm.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtktogglebutton.h>
-#include <gtk/gtkarrow.h>
-#include <gtk/gtkeventbox.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtktearoffmenuitem.h>
-#include <gdk/gdkkeysyms.h>
-#include "gal-combo-box.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE GTK_TYPE_HBOX
-static GObjectClass *gal_combo_box_parent_class;
-
-static int gtk_combo_toggle_pressed (GtkToggleButton *tbutton,
- GalComboBox *combo_box);
-static void gtk_combo_popup_tear_off (GalComboBox *combo,
- gboolean set_position);
-static void gtk_combo_set_tearoff_state (GalComboBox *combo,
- gboolean torn_off);
-static void gtk_combo_popup_reparent (GtkWidget *popup, GtkWidget *new_parent,
- gboolean unrealize);
-static gboolean cb_popup_delete (GtkWidget *w, GdkEventAny *event,
- GalComboBox *combo);
-static void gtk_combo_tearoff_bg_copy (GalComboBox *combo);
-
-enum {
- POP_DOWN_WIDGET,
- POP_DOWN_DONE,
- PRE_POP_DOWN,
- POST_POP_HIDE,
- LAST_SIGNAL
-};
-
-static guint gal_combo_box_signals [LAST_SIGNAL] = { 0, };
-
-struct _GalComboBoxPrivate {
- GtkWidget *pop_down_widget;
- GtkWidget *display_widget;
-
- /*
- * Internal widgets used to implement the ComboBox
- */
- GtkWidget *frame;
- GtkWidget *arrow_button;
-
- GtkWidget *toplevel; /* Popup's toplevel when not torn off */
- GtkWidget *tearoff_window; /* Popup's toplevel when torn off */
- guint torn_off;
-
- GtkWidget *tearable; /* The tearoff "button" */
- GtkWidget *popup; /* Popup */
-
- /*
- * Closure for invoking the callbacks above
- */
- void *closure;
-};
-
-static void
-gal_combo_box_finalize (GObject *object)
-{
- GalComboBox *combo_box = GAL_COMBO_BOX (object);
-
- g_free (combo_box->priv);
-
- gal_combo_box_parent_class->finalize (object);
-}
-
-static void
-gal_combo_box_destroy (GtkObject *object)
-{
- GtkObjectClass *klass = (GtkObjectClass *)gal_combo_box_parent_class;
- GalComboBox *combo_box = GAL_COMBO_BOX (object);
-
- if (combo_box->priv->toplevel) {
- gtk_object_destroy (GTK_OBJECT (combo_box->priv->toplevel));
- combo_box->priv->toplevel = NULL;
- }
-
- if (combo_box->priv->tearoff_window) {
- gtk_object_destroy (GTK_OBJECT (combo_box->priv->tearoff_window));
- combo_box->priv->tearoff_window = NULL;
- }
-
- if (klass->destroy)
- klass->destroy (object);
-}
-
-static gboolean
-gal_combo_box_mnemonic_activate (GtkWidget *w, gboolean group_cycling)
-{
- GalComboBox *combo_box = GAL_COMBO_BOX (w);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (combo_box->priv->arrow_button), TRUE);
- return TRUE;
-}
-
-static void
-gal_combo_box_class_init (GObjectClass *object_class)
-{
- GtkWidgetClass *widget_class = (GtkWidgetClass *)object_class;
- gal_combo_box_parent_class = g_type_class_peek_parent (object_class);
-
- object_class->finalize = gal_combo_box_finalize;
- widget_class->mnemonic_activate = gal_combo_box_mnemonic_activate;
- ((GtkObjectClass *)object_class)->destroy = gal_combo_box_destroy;
-
- gal_combo_box_signals [POP_DOWN_WIDGET] = g_signal_new (
- "pop_down_widget",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalComboBoxClass, pop_down_widget),
- NULL, NULL,
- e_marshal_POINTER__NONE,
- G_TYPE_POINTER, 0, G_TYPE_NONE);
-
- gal_combo_box_signals [POP_DOWN_DONE] = g_signal_new (
- "pop_down_done",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalComboBoxClass, pop_down_done),
- NULL, NULL,
- e_marshal_BOOLEAN__OBJECT,
- G_TYPE_BOOLEAN, 1, G_TYPE_OBJECT);
-
- gal_combo_box_signals [PRE_POP_DOWN] = g_signal_new (
- "pre_pop_down",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalComboBoxClass, pre_pop_down),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- gal_combo_box_signals [POST_POP_HIDE] = g_signal_new (
- "post_pop_hide",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GalComboBoxClass, post_pop_hide),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-deactivate_arrow (GalComboBox *combo_box)
-{
- GtkToggleButton *arrow;
-
- arrow = GTK_TOGGLE_BUTTON (combo_box->priv->arrow_button);
- g_signal_handlers_block_matched (arrow,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- gtk_combo_toggle_pressed, combo_box);
-
- gtk_toggle_button_set_active (arrow, FALSE);
-
- g_signal_handlers_unblock_matched (arrow,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- gtk_combo_toggle_pressed, combo_box);
-}
-
-/**
- * gal_combo_box_popup_hide_unconditional
- * @combo_box: Combo box
- *
- * Hide popup, whether or not it is torn off.
- */
-static void
-gal_combo_box_popup_hide_unconditional (GalComboBox *combo_box)
-{
- gboolean popup_info_destroyed = FALSE;
-
- g_return_if_fail (combo_box != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (combo_box));
-
- gtk_widget_hide (combo_box->priv->toplevel);
- gtk_widget_hide (combo_box->priv->popup);
- if (combo_box->priv->torn_off) {
- GTK_TEAROFF_MENU_ITEM (combo_box->priv->tearable)->torn_off
- = FALSE;
- gtk_combo_set_tearoff_state (combo_box, FALSE);
- }
-
- gtk_grab_remove (combo_box->priv->toplevel);
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
-
- g_object_ref (combo_box->priv->pop_down_widget);
- g_signal_emit (combo_box,
- gal_combo_box_signals [POP_DOWN_DONE], 0,
- combo_box->priv->pop_down_widget, &popup_info_destroyed);
-
- if (popup_info_destroyed){
- gtk_container_remove (
- GTK_CONTAINER (combo_box->priv->frame),
- combo_box->priv->pop_down_widget);
- combo_box->priv->pop_down_widget = NULL;
- }
- g_object_unref (combo_box->priv->pop_down_widget);
- deactivate_arrow (combo_box);
-
- g_signal_emit (combo_box, gal_combo_box_signals [POST_POP_HIDE], 0);
-}
-
-/**
- * gal_combo_box_popup_hide:
- * @combo_box: Combo box
- *
- * Hide popup, but not when it is torn off.
- * This is the external interface - for subclasses and apps which expect a
- * regular combo which doesn't do tearoffs.
- */
-void
-gal_combo_box_popup_hide (GalComboBox *combo_box)
-{
- if (!combo_box->priv->torn_off)
- gal_combo_box_popup_hide_unconditional (combo_box);
- else if (GTK_WIDGET_VISIBLE (combo_box->priv->toplevel)) {
- /* Both popup and tearoff window present. Get rid of just
- the popup shell. */
- gtk_combo_popup_tear_off (combo_box, FALSE);
- deactivate_arrow (combo_box);
- }
-}
-
-/*
- * Find best location for displaying
- */
-void
-gal_combo_box_get_pos (GalComboBox *combo_box, int *x, int *y)
-{
- GtkWidget *wcombo = GTK_WIDGET (combo_box);
- int ph, pw;
-
- gdk_window_get_origin (wcombo->window, x, y);
- *y += wcombo->allocation.height + wcombo->allocation.y;
- *x += wcombo->allocation.x;
-
- ph = combo_box->priv->popup->allocation.height;
- pw = combo_box->priv->popup->allocation.width;
-
- if ((*y + ph) > gdk_screen_height ())
- *y = gdk_screen_height () - ph;
-
- if ((*x + pw) > gdk_screen_width ())
- *x = gdk_screen_width () - pw;
-}
-
-static void
-gal_combo_box_popup_display (GalComboBox *combo_box)
-{
- int x, y;
-
- g_return_if_fail (combo_box != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (combo_box));
-
- /*
- * If we have no widget to display on the popdown,
- * create it
- */
- if (!combo_box->priv->pop_down_widget){
- GtkWidget *pw = NULL;
-
- g_signal_emit (combo_box,
- gal_combo_box_signals [POP_DOWN_WIDGET], 0, &pw);
- g_assert (pw != NULL);
- combo_box->priv->pop_down_widget = pw;
- gtk_container_add (GTK_CONTAINER (combo_box->priv->frame), pw);
- }
-
- g_signal_emit (combo_box, gal_combo_box_signals [PRE_POP_DOWN], 0);
-
- if (combo_box->priv->torn_off) {
- /* To give the illusion that tearoff still displays the
- * popup, we copy the image in the popup window to the
- * background. Thus, it won't be blank after reparenting */
- gtk_combo_tearoff_bg_copy (combo_box);
-
- /* We force an unrealize here so that we don't trigger
- * redrawing/ clearing code - we just want to reveal our
- * backing pixmap.
- */
- gtk_combo_popup_reparent (combo_box->priv->popup,
- combo_box->priv->toplevel, TRUE);
- }
-
- gal_combo_box_get_pos (combo_box, &x, &y);
-
- gtk_widget_set_uposition (combo_box->priv->toplevel, x, y);
- gtk_widget_realize (combo_box->priv->popup);
- gtk_widget_show (combo_box->priv->popup);
- gtk_widget_realize (combo_box->priv->toplevel);
- gtk_widget_show (combo_box->priv->toplevel);
-
- gtk_grab_add (combo_box->priv->toplevel);
- gdk_pointer_grab (combo_box->priv->toplevel->window, TRUE,
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_MASK,
- NULL, NULL, GDK_CURRENT_TIME);
-}
-
-static int
-gtk_combo_toggle_pressed (GtkToggleButton *tbutton, GalComboBox *combo_box)
-{
- if (tbutton->active)
- gal_combo_box_popup_display (combo_box);
- else
- gal_combo_box_popup_hide_unconditional (combo_box);
-
- return TRUE;
-}
-
-static gint
-gal_combo_box_button_press (GtkWidget *widget, GdkEventButton *event, GalComboBox *combo_box)
-{
- GtkWidget *child;
-
- child = gtk_get_event_widget ((GdkEvent *) event);
- if (child != widget){
- while (child){
- if (child == widget)
- return FALSE;
- child = child->parent;
- }
- }
-
- gal_combo_box_popup_hide (combo_box);
- return TRUE;
-}
-
-/**
- * gal_combo_box_key_press
- * @widget: Widget
- * @event: Event
- * @combo_box: Combo box
- *
- * Key press handler which dismisses popup on escape.
- * Popup is dismissed whether or not popup is torn off.
- */
-static gint
-gal_combo_box_key_press (GtkWidget *widget, GdkEventKey *event,
- GalComboBox *combo_box)
-{
- if (event->keyval == GDK_Escape) {
- gal_combo_box_popup_hide_unconditional (combo_box);
- return TRUE;
- } else
- return FALSE;
-}
-
-static void
-cb_state_change (GtkWidget *widget, GtkStateType old_state, GalComboBox *combo_box)
-{
- GtkStateType const new_state = GTK_WIDGET_STATE(widget);
- gtk_widget_set_state (combo_box->priv->display_widget, new_state);
-}
-
-static void
-gal_combo_box_init (GalComboBox *combo_box)
-{
- GtkWidget *arrow;
- GdkCursor *cursor;
-
- combo_box->priv = g_new0 (GalComboBoxPrivate, 1);
-
- /*
- * Create the arrow
- */
- combo_box->priv->arrow_button = gtk_toggle_button_new ();
- gtk_button_set_relief (GTK_BUTTON (combo_box->priv->arrow_button), GTK_RELIEF_NONE);
- GTK_WIDGET_UNSET_FLAGS (combo_box->priv->arrow_button, GTK_CAN_FOCUS);
-
- arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
- gtk_container_add (GTK_CONTAINER (combo_box->priv->arrow_button), arrow);
- gtk_box_pack_end (GTK_BOX (combo_box), combo_box->priv->arrow_button, FALSE, FALSE, 0);
- g_signal_connect (combo_box->priv->arrow_button, "toggled",
- G_CALLBACK (gtk_combo_toggle_pressed), combo_box);
- gtk_widget_show_all (combo_box->priv->arrow_button);
-
- /*
- * prelight the display widget when mousing over the arrow.
- */
- g_signal_connect (combo_box->priv->arrow_button, "state-changed",
- G_CALLBACK (cb_state_change), combo_box);
-
- /*
- * The pop-down container
- */
-
- combo_box->priv->toplevel = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_widget_ref (combo_box->priv->toplevel);
- gtk_object_sink (GTK_OBJECT (combo_box->priv->toplevel));
- gtk_window_set_policy (GTK_WINDOW (combo_box->priv->toplevel),
- FALSE, TRUE, FALSE);
-
- combo_box->priv->popup = gtk_event_box_new ();
- gtk_container_add (GTK_CONTAINER (combo_box->priv->toplevel),
- combo_box->priv->popup);
- gtk_widget_show (combo_box->priv->popup);
-
- gtk_widget_realize (combo_box->priv->popup);
- cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
- gdk_window_set_cursor (combo_box->priv->popup->window, cursor);
- gdk_cursor_destroy (cursor);
-
- combo_box->priv->torn_off = FALSE;
- combo_box->priv->tearoff_window = NULL;
-
- combo_box->priv->frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (combo_box->priv->popup),
- combo_box->priv->frame);
- gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->frame), GTK_SHADOW_OUT);
-
- g_signal_connect (combo_box->priv->toplevel, "button_press_event",
- G_CALLBACK (gal_combo_box_button_press), combo_box);
- g_signal_connect (combo_box->priv->toplevel, "key_press_event",
- G_CALLBACK (gal_combo_box_key_press), combo_box);
-}
-
-E_MAKE_TYPE (gal_combo_box,
- "MyGalComboBox",
- GalComboBox,
- gal_combo_box_class_init,
- gal_combo_box_init,
- PARENT_TYPE)
-
-/**
- * gal_combo_box_set_display:
- * @combo_box: the Combo Box to modify
- * @display_widget: The widget to be displayed
-
- * Sets the displayed widget for the @combo_box to be @display_widget
- */
-void
-gal_combo_box_set_display (GalComboBox *combo_box, GtkWidget *display_widget)
-{
- g_return_if_fail (combo_box != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (combo_box));
- g_return_if_fail (display_widget != NULL);
- g_return_if_fail (GTK_IS_WIDGET (display_widget));
-
- if (combo_box->priv->display_widget &&
- combo_box->priv->display_widget != display_widget)
- gtk_container_remove (GTK_CONTAINER (combo_box),
- combo_box->priv->display_widget);
-
- combo_box->priv->display_widget = display_widget;
-
- gtk_box_pack_start (GTK_BOX (combo_box), display_widget, TRUE, TRUE, 0);
-}
-
-static gboolean
-cb_tearable_enter_leave (GtkWidget *w, GdkEventCrossing *event, gpointer data)
-{
- gboolean const flag = GPOINTER_TO_INT(data);
- gtk_widget_set_state (w, flag ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL);
- return FALSE;
-}
-
-/**
- * gtk_combo_popup_tear_off
- * @combo: Combo box
- * @set_position: Set to position of popup shell if true
- *
- * Tear off the popup
- *
- * FIXME:
- * Gtk popup menus are toplevel windows, not dialogs. I think this is wrong,
- * and make the popups dialogs. But may be there should be a way to make
- * them toplevel. We can do this after creating:
- * GTK_WINDOW (tearoff)->type = GTK_WINDOW_TOPLEVEL;
- */
-static void
-gtk_combo_popup_tear_off (GalComboBox *combo, gboolean set_position)
-{
- int x, y;
-
- if (!combo->priv->tearoff_window) {
- GtkWidget *tearoff;
- gchar *title;
-
- /* FIXME: made this a toplevel, not a dialog ! */
- tearoff = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_ref (tearoff);
- gtk_object_sink (GTK_OBJECT (tearoff));
- combo->priv->tearoff_window = tearoff;
- gtk_widget_set_app_paintable (tearoff, TRUE);
- g_signal_connect (tearoff, "key_press_event",
- G_CALLBACK (gal_combo_box_key_press),
- combo);
- gtk_widget_realize (tearoff);
- title = g_object_get_data (G_OBJECT (combo),
- "gtk-combo-title");
- if (title)
- gdk_window_set_title (tearoff->window, title);
- gtk_window_set_policy (GTK_WINDOW (tearoff),
- FALSE, TRUE, FALSE);
- gtk_window_set_transient_for
- (GTK_WINDOW (tearoff),
- GTK_WINDOW (gtk_widget_get_toplevel
- GTK_WIDGET (combo)));
- }
-
- if (GTK_WIDGET_VISIBLE (combo->priv->popup)) {
- gtk_widget_hide (combo->priv->toplevel);
-
- gtk_grab_remove (combo->priv->toplevel);
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- }
-
- gtk_combo_popup_reparent (combo->priv->popup,
- combo->priv->tearoff_window, FALSE);
-
- /* It may have got confused about size */
- gtk_widget_queue_resize (GTK_WIDGET (combo->priv->popup));
-
- if (set_position) {
- gal_combo_box_get_pos (combo, &x, &y);
- gtk_widget_set_uposition (combo->priv->tearoff_window, x, y);
- }
- gtk_widget_show (GTK_WIDGET (combo->priv->popup));
- gtk_widget_show (combo->priv->tearoff_window);
-
-}
-
-/**
- * gtk_combo_set_tearoff_state
- * @combo_box: Combo box
- * @torn_off: TRUE: Tear off. FALSE: Pop down and reattach
- *
- * Set the tearoff state of the popup
- *
- * Compare with gtk_menu_set_tearoff_state in gtk/gtkmenu.c
- */
-static void
-gtk_combo_set_tearoff_state (GalComboBox *combo,
- gboolean torn_off)
-{
- g_return_if_fail (combo != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (combo));
-
- if (combo->priv->torn_off != torn_off) {
- combo->priv->torn_off = torn_off;
-
- if (combo->priv->torn_off) {
- gtk_combo_popup_tear_off (combo, TRUE);
- deactivate_arrow (combo);
- } else {
- gtk_widget_hide (combo->priv->tearoff_window);
- gtk_combo_popup_reparent (combo->priv->popup,
- combo->priv->toplevel,
- FALSE);
- }
- }
-}
-
-/**
- * gtk_combo_tearoff_bg_copy
- * @combo_box: Combo box
- *
- * Copy popup window image to the tearoff window.
- */
-static void
-gtk_combo_tearoff_bg_copy (GalComboBox *combo)
-{
- GdkPixmap *pixmap;
- GdkGC *gc;
- GdkGCValues gc_values;
-
- GtkWidget *widget = combo->priv->popup;
-
- if (combo->priv->torn_off) {
- gc_values.subwindow_mode = GDK_INCLUDE_INFERIORS;
- gc = gdk_gc_new_with_values (widget->window,
- &gc_values, GDK_GC_SUBWINDOW);
-
- pixmap = gdk_pixmap_new (widget->window,
- widget->allocation.width,
- widget->allocation.height,
- -1);
-
- gdk_draw_pixmap (pixmap, gc,
- widget->window,
- 0, 0, 0, 0, -1, -1);
- gdk_gc_unref (gc);
-
- gtk_widget_set_usize (combo->priv->tearoff_window,
- widget->allocation.width,
- widget->allocation.height);
-
- gdk_window_set_back_pixmap
- (combo->priv->tearoff_window->window, pixmap, FALSE);
- gdk_pixmap_unref (pixmap);
- }
-}
-
-/**
- * gtk_combo_popup_reparent
- * @popup: Popup
- * @new_parent: New parent
- * @unrealize: Unrealize popup if TRUE.
- *
- * Reparent the popup, taking care of the refcounting
- *
- * Compare with gtk_menu_reparent in gtk/gtkmenu.c
- */
-static void
-gtk_combo_popup_reparent (GtkWidget *popup,
- GtkWidget *new_parent,
- gboolean unrealize)
-{
- GtkObject *object = GTK_OBJECT (popup);
- gboolean was_floating = GTK_OBJECT_FLOATING (object);
-
- g_object_ref (object);
- gtk_object_sink (object);
-
- if (unrealize) {
- g_object_ref (object);
- gtk_container_remove (GTK_CONTAINER (popup->parent), popup);
- gtk_container_add (GTK_CONTAINER (new_parent), popup);
- g_object_unref (object);
- }
- else
- gtk_widget_reparent (GTK_WIDGET (popup), new_parent);
- gtk_widget_set_usize (new_parent, -1, -1);
-
- if (was_floating)
- GTK_OBJECT_SET_FLAGS (object, GTK_FLOATING);
- else
- g_object_unref (object);
-}
-
-/**
- * cb_tearable_button_release
- * @w: Widget
- * @event: Event
- * @combo: Combo box
- *
- * Toggle tearoff state.
- */
-static gboolean
-cb_tearable_button_release (GtkWidget *w, GdkEventButton *event,
- GalComboBox *combo)
-{
- GtkTearoffMenuItem *tearable;
-
- g_return_val_if_fail (w != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_TEAROFF_MENU_ITEM (w), FALSE);
-
- tearable = GTK_TEAROFF_MENU_ITEM (w);
- tearable->torn_off = !tearable->torn_off;
-
- if (!combo->priv->torn_off) {
- gboolean need_connect;
-
- need_connect = (!combo->priv->tearoff_window);
- gtk_combo_set_tearoff_state (combo, TRUE);
- if (need_connect)
- g_signal_connect (combo->priv->tearoff_window,
- "delete_event",
- G_CALLBACK (cb_popup_delete),
- combo);
- } else
- gal_combo_box_popup_hide_unconditional (combo);
-
- return TRUE;
-}
-
-static gboolean
-cb_popup_delete (GtkWidget *w, GdkEventAny *event, GalComboBox *combo)
-{
- gal_combo_box_popup_hide_unconditional (combo);
- return TRUE;
-}
-
-void
-gal_combo_box_construct (GalComboBox *combo_box, GtkWidget *display_widget, GtkWidget *pop_down_widget)
-{
- GtkWidget *tearable;
- GtkWidget *vbox;
-
- g_return_if_fail (combo_box != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (combo_box));
- g_return_if_fail (display_widget != NULL);
- g_return_if_fail (GTK_IS_WIDGET (display_widget));
-
- GTK_BOX (combo_box)->spacing = 0;
- GTK_BOX (combo_box)->homogeneous = FALSE;
-
- combo_box->priv->pop_down_widget = pop_down_widget;
- combo_box->priv->display_widget = NULL;
-
- vbox = gtk_vbox_new (FALSE, 5);
- tearable = gtk_tearoff_menu_item_new ();
- g_signal_connect (tearable, "enter-notify-event",
- G_CALLBACK (cb_tearable_enter_leave),
- GINT_TO_POINTER (TRUE));
- g_signal_connect (tearable, "leave-notify-event",
- G_CALLBACK (cb_tearable_enter_leave),
- GINT_TO_POINTER (FALSE));
- g_signal_connect (tearable, "button-release-event",
- G_CALLBACK (cb_tearable_button_release),
- (gpointer) combo_box);
- gtk_box_pack_start (GTK_BOX (vbox), tearable, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), pop_down_widget, TRUE, TRUE, 0);
- combo_box->priv->tearable = tearable;
-
- /*
- * Finish setup
- */
- gal_combo_box_set_display (combo_box, display_widget);
-
- gtk_container_add (GTK_CONTAINER (combo_box->priv->frame), vbox);
- gtk_widget_show_all (combo_box->priv->frame);
-}
-
-GtkWidget *
-gal_combo_box_new (GtkWidget *display_widget, GtkWidget *optional_popdown)
-{
- GalComboBox *combo_box;
-
- g_return_val_if_fail (display_widget != NULL, NULL);
- g_return_val_if_fail (GTK_IS_WIDGET (display_widget), NULL);
-
- combo_box = g_object_new (GAL_COMBO_BOX_TYPE, NULL);
- gal_combo_box_construct (combo_box, display_widget, optional_popdown);
- return GTK_WIDGET (combo_box);
-}
-
-void
-gal_combo_box_set_arrow_relief (GalComboBox *cc, GtkReliefStyle relief)
-{
- g_return_if_fail (cc != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (cc));
-
- gtk_button_set_relief (GTK_BUTTON (cc->priv->arrow_button), relief);
-}
-
-/**
- * gal_combo_box_set_title
- * @combo: Combo box
- * @title: Title
- *
- * Set a title to display over the tearoff window.
- *
- * FIXME:
- *
- * This should really change the title even when the popup is already torn off.
- * I guess the tearoff window could attach a listener to title change or
- * something. But I don't think we need the functionality, so I didn't bother
- * to investigate.
- */
-void
-gal_combo_box_set_title (GalComboBox *combo,
- const gchar *title)
-{
- g_return_if_fail (combo != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (combo));
-
- g_object_set_data_full (G_OBJECT (combo), "gtk-combo-title",
- g_strdup (title), (GDestroyNotify) g_free);
-}
-
-/**
- * gal_combo_box_set_arrow_sensitive
- * @combo: Combo box
- * @sensitive: Sensitivity value
- *
- * Toggle the sensitivity of the arrow button
- */
-
-void
-gal_combo_box_set_arrow_sensitive (GalComboBox *combo,
- gboolean sensitive)
-{
- g_return_if_fail (combo != NULL);
-
- gtk_widget_set_sensitive (combo->priv->arrow_button, sensitive);
-}
-
-/**
- * gal_combo_box_set_tearable:
- * @combo: Combo box
- * @tearable: whether to allow the @combo to be tearable
- *
- * controls whether the combo box's pop up widget can be torn off.
- */
-void
-gal_combo_box_set_tearable (GalComboBox *combo, gboolean tearable)
-{
- g_return_if_fail (combo != NULL);
- g_return_if_fail (GAL_IS_COMBO_BOX (combo));
-
- if (tearable){
- gtk_widget_show (combo->priv->tearable);
- } else {
- gtk_combo_set_tearoff_state (combo, FALSE);
- gtk_widget_hide (combo->priv->tearable);
- }
-}
diff --git a/widgets/misc/gal-combo-box.h b/widgets/misc/gal-combo-box.h
deleted file mode 100644
index 0a05c52d84..0000000000
--- a/widgets/misc/gal-combo-box.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gtk-combo-box.h - a customizable combobox
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_COMBO_BOX_H_
-#define _GAL_COMBO_BOX_H_
-
-#include <gtk/gtkhbox.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_COMBO_BOX_TYPE (gal_combo_box_get_type())
-#define GAL_COMBO_BOX(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, gal_combo_box_get_type (), GalComboBox)
-#define GAL_COMBO_BOX_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, gal_combo_box_get_type (), GalComboBoxClass)
-#define GAL_IS_COMBO_BOX(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, gal_combo_box_get_type ())
-
-typedef struct _GalComboBox GalComboBox;
-typedef struct _GalComboBoxPrivate GalComboBoxPrivate;
-typedef struct _GalComboBoxClass GalComboBoxClass;
-
-struct _GalComboBox {
- GtkHBox hbox;
- GalComboBoxPrivate *priv;
-};
-
-struct _GalComboBoxClass {
- GtkHBoxClass parent_class;
-
- GtkWidget *(*pop_down_widget) (GalComboBox *cbox);
-
- /*
- * invoked when the popup has been hidden, if the signal
- * returns TRUE, it means it should be killed from the
- */
- gboolean *(*pop_down_done) (GalComboBox *cbox, GtkWidget *);
-
- /*
- * Notification signals.
- */
- void (*pre_pop_down) (GalComboBox *cbox);
- void (*post_pop_hide) (GalComboBox *cbox);
-};
-
-GtkType gal_combo_box_get_type (void);
-void gal_combo_box_construct (GalComboBox *combo_box,
- GtkWidget *display_widget,
- GtkWidget *optional_pop_down_widget);
-void gal_combo_box_get_pos (GalComboBox *combo_box, int *x, int *y);
-
-GtkWidget *gal_combo_box_new (GtkWidget *display_widget,
- GtkWidget *optional_pop_down_widget);
-void gal_combo_box_popup_hide (GalComboBox *combo_box);
-
-void gal_combo_box_set_display (GalComboBox *combo_box,
- GtkWidget *display_widget);
-
-void gal_combo_box_set_title (GalComboBox *combo,
- const gchar *title);
-
-void gal_combo_box_set_tearable (GalComboBox *combo,
- gboolean tearable);
-void gal_combo_box_set_arrow_sensitive (GalComboBox *combo,
- gboolean sensitive);
-void gal_combo_box_set_arrow_relief (GalComboBox *cc,
- GtkReliefStyle relief);
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif /* _GAL_COMBO_BOX_H_ */
diff --git a/widgets/misc/gal-combo-text.c b/widgets/misc/gal-combo-text.c
deleted file mode 100644
index ba3b4ad7c5..0000000000
--- a/widgets/misc/gal-combo-text.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gtk-combo-text.c - A combo box for selecting from a list.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <ctype.h>
-#include <gal/util/e-util.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtklist.h>
-#include <gtk/gtkscrolledwindow.h>
-#include "gal-combo-text.h"
-
-#define PARENT_TYPE GAL_COMBO_BOX_TYPE
-static GtkObjectClass *gal_combo_text_parent_class;
-
-static gboolean cb_pop_down (GtkWidget *w, GtkWidget *pop_down,
- gpointer dummy);
-
-static void list_unselect_cb (GtkWidget *list, GtkWidget *child,
- gpointer data);
-
-static void update_list_selection (GalComboText *ct, const gchar *text);
-
-static void
-gal_combo_text_destroy (GtkObject *object)
-{
- GalComboText *ct = GAL_COMBO_TEXT (object);
-
- if (ct->elements != NULL) {
- g_hash_table_destroy (ct->elements);
- ct->elements = NULL;
- }
- if (ct->list != NULL) {
- g_signal_handlers_disconnect_matched (ct,
- G_SIGNAL_MATCH_FUNC,
- 0, 0, NULL,
- cb_pop_down, NULL);
-
- g_signal_handlers_disconnect_matched (ct->list,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- list_unselect_cb, ct);
- ct->list = NULL;
- }
-
- (*gal_combo_text_parent_class->destroy) (object);
-}
-
-static void
-gal_combo_text_class_init (GtkObjectClass *object_class)
-{
- object_class->destroy = &gal_combo_text_destroy;
- gal_combo_text_parent_class = g_type_class_ref (PARENT_TYPE);
-}
-
-static void
-gal_combo_text_init (GalComboText *object)
-{
-}
-
-E_MAKE_TYPE (gal_combo_text,
- "GalComboText",
- GalComboText,
- gal_combo_text_class_init,
- gal_combo_text_init,
- PARENT_TYPE)
-
-static gint
-strcase_equal (gconstpointer v, gconstpointer v2)
-{
- return g_strcasecmp ((const gchar*) v, (const gchar*)v2) == 0;
-}
-
-
-/*
- * a char* hash function from ASU
- *
- * This is cut/paste from gutils.c
- * We've got to do this, because this widget will soon move out of the
- * Gnumeric source and into a separate library.
- */
-static guint
-strcase_hash (gconstpointer v)
-{
- const unsigned char *s = (const unsigned char *)v;
- const unsigned char *p;
- guint h = 0, g;
-
- for(p = s; *p != '\0'; p += 1) {
- h = ( h << 4 ) + tolower (*p);
- if ( ( g = h & 0xf0000000 ) ) {
- h = h ^ (g >> 24);
- h = h ^ g;
- }
- }
-
- return h /* % M */;
-}
-
-/**
- * gal_combo_text_set_case_sensitive
- * @combo_text: ComboText widget
- * @val: make case sensitive if TRUE
- *
- * Specifies whether the text entered into the GtkEntry field and the text
- * in the list items is case sensitive. Because the values are stored in a
- * hash, it is not legal to change case sensitivity when the list contains
- * elements.
- *
- * Returns: The function returns -1 if request could not be honored. On
- * success, it returns 0.
- */
-gint
-gal_combo_text_set_case_sensitive (GalComboText *combo, gboolean val)
-{
- if (combo->elements
- && g_hash_table_size (combo->elements) > 0
- && val != combo->case_sensitive)
- return -1;
- else {
- combo->case_sensitive = val;
- if (val != combo->case_sensitive) {
- GHashFunc hashfunc;
- GCompareFunc comparefunc;
-
- g_hash_table_destroy (combo->elements);
- if (combo->case_sensitive) {
- hashfunc = g_str_hash;
- comparefunc = g_str_equal;
- } else {
- hashfunc = strcase_hash;
- comparefunc = strcase_equal;
- }
- combo->elements = g_hash_table_new (hashfunc,
- comparefunc);
- }
- return 0;
- }
-}
-
-static void
-entry_activate_cb (GtkWidget *entry, gpointer data)
-{
- GalComboText *combo = GAL_COMBO_TEXT (data);
-
- update_list_selection (combo,
- gtk_entry_get_text (GTK_ENTRY (combo->entry)));
-}
-
-
-static void
-list_select_cb (GtkWidget *list, GtkWidget *child, gpointer data)
-{
- GalComboText *combo = GAL_COMBO_TEXT (data);
- GtkEntry *entry = GTK_ENTRY (combo->entry);
- gchar *value = (gchar*) g_object_get_data (G_OBJECT (child), "value");
-
- g_return_if_fail (entry && value);
-
- if (combo->cached_entry == child)
- combo->cached_entry = NULL;
-
- gtk_entry_set_text (entry, value);
- gtk_signal_handler_block_by_func (GTK_OBJECT (entry),
- GTK_SIGNAL_FUNC (entry_activate_cb),
- (gpointer) combo);
- g_signal_emit_by_name (entry, "activate");
- gtk_signal_handler_unblock_by_func (GTK_OBJECT (entry),
- GTK_SIGNAL_FUNC (entry_activate_cb),
- (gpointer) combo);
-
- gal_combo_box_popup_hide (GAL_COMBO_BOX (data));
-}
-
-static void
-list_unselect_cb (GtkWidget *list, GtkWidget *child, gpointer data)
-{
- if (GTK_WIDGET_VISIBLE (list)) /* Undo interactive unselect */
- gtk_list_select_child (GTK_LIST (list), child);
-}
-
-static void
-cb_toggle (GtkWidget *child, gpointer data)
-{
- GalComboText *ct = GAL_COMBO_TEXT (data);
-
- gtk_list_select_child (GTK_LIST (ct->list), child);
-}
-
-void
-gal_combo_text_select_item (GalComboText *ct, int elem)
-{
- gtk_list_select_item (GTK_LIST(ct->list), elem);
-}
-
-static void
-update_list_selection (GalComboText *ct, const gchar *text)
-{
- gpointer candidate;
- GtkWidget *child;
-
- gtk_signal_handler_block_by_func (GTK_OBJECT (ct->list),
- GTK_SIGNAL_FUNC (list_select_cb),
- (gpointer) ct);
- gtk_signal_handler_block_by_func (GTK_OBJECT (ct->list),
- GTK_SIGNAL_FUNC (list_unselect_cb),
- (gpointer) ct);
-
- gtk_list_unselect_all (GTK_LIST (ct->list));
- candidate = g_hash_table_lookup (ct->elements, (gconstpointer) text);
- if (candidate && GTK_IS_WIDGET (candidate)) {
- child = GTK_WIDGET (candidate);
- gtk_list_select_child (GTK_LIST (ct->list), child);
- gtk_widget_grab_focus (child);
- }
- gtk_signal_handler_unblock_by_func (GTK_OBJECT (ct->list),
- GTK_SIGNAL_FUNC (list_select_cb),
- (gpointer) ct);
- gtk_signal_handler_unblock_by_func (GTK_OBJECT (ct->list),
- GTK_SIGNAL_FUNC (list_unselect_cb),
- (gpointer) ct);
-}
-
-void
-gal_combo_text_set_text (GalComboText *ct, const gchar *text)
-{
- gtk_entry_set_text (GTK_ENTRY (ct->entry), text);
- update_list_selection (ct, text);
-}
-
-/*
- * We can't just cache the old widget state on entry: If the pointer is
- * dragged, we receive two enter-notify-events, and the original cached
- * value would be overwritten with the GTK_STATE_ACTIVE we just set.
- *
- * However, we know that the gtklist only uses GTK_STATE_SELECTED and
- * GTK_STATE_NORMAL. We're OK if we only cache those two.
- */
-static gboolean
-cb_enter (GtkWidget *w, GdkEventCrossing *event,
- gpointer user)
-{
- GalComboText *ct = user;
- GtkStateType state = GTK_WIDGET_STATE (w);
-
- if (state == GTK_STATE_NORMAL || state == GTK_STATE_SELECTED) {
- ct->cached_entry = w;
- ct->cache_mouse_state = state;
- }
- if (state != GTK_STATE_SELECTED)
- gtk_widget_set_state (w, GTK_STATE_ACTIVE);
-
- return TRUE;
-}
-static gboolean
-cb_exit (GtkWidget *w, GdkEventCrossing *event,
- gpointer user)
-{
- GalComboText *ct = user;
-
- if (ct->cached_entry == w)
- gtk_widget_set_state (w, ct->cache_mouse_state);
-
- return TRUE;
-}
-
-static gboolean
-cb_pop_down (GtkWidget *w, GtkWidget *pop_down, gpointer dummy)
-{
- GalComboText *ct = GAL_COMBO_TEXT (w);
-
- if (ct->cached_entry)
- gtk_widget_set_state (ct->cached_entry, ct->cache_mouse_state);
- ct->cached_entry = NULL;
-
- return FALSE;
-}
-
-typedef struct {
- GalComboText *ct;
- gchar *value;
-} WeakRefClosure;
-
-static void
-cb_remove_from_hash (gpointer data, GObject *where_object_was)
-{
- WeakRefClosure *closure = data;
-
- if (closure->ct->elements)
- g_hash_table_remove (closure->ct->elements, closure->value);
-
- g_free (closure->value);
- g_free (closure);
-}
-
-void
-gal_combo_text_add_item (GalComboText *ct,
- const gchar *item,
- const gchar *value)
-{
- WeakRefClosure *weak_ref_closure;
- GtkWidget *listitem;
- gchar *value_copy;
-
- g_return_if_fail (item);
-
- if (!value)
- value = item;
-
- value_copy = g_strdup (value);
-
- listitem = gtk_list_item_new_with_label (item);
- gtk_widget_show (listitem);
-
- g_object_set_data_full (G_OBJECT (listitem), "value",
- value_copy, g_free);
- g_signal_connect (listitem, "enter-notify-event",
- G_CALLBACK (cb_enter),
- (gpointer) ct);
- g_signal_connect (listitem, "leave-notify-event",
- G_CALLBACK (cb_exit),
- (gpointer) ct);
- g_signal_connect (listitem, "toggle",
- G_CALLBACK (cb_toggle),
- (gpointer) ct);
-
- gtk_container_add (GTK_CONTAINER (ct->list),
- listitem);
-
- g_hash_table_insert (ct->elements, (gpointer)value_copy,
- (gpointer) listitem);
-
- weak_ref_closure = g_new (WeakRefClosure, 1);
- weak_ref_closure->ct = ct;
- weak_ref_closure->value = g_strdup (value_copy);
-
- g_object_weak_ref (G_OBJECT (listitem),
- cb_remove_from_hash,
- weak_ref_closure);
-}
-
-static void
-cb_list_mapped (GtkWidget *widget, gpointer user_data)
-{
- GtkList *list = GTK_LIST (widget);
-
- if (g_list_length (list->selection) > 0)
- gtk_widget_grab_focus (GTK_WIDGET ((list->selection->data)));
-}
-
-void
-gal_combo_text_construct (GalComboText *ct, gboolean const is_scrolled)
-{
- GtkWidget *entry, *list, *scroll, *display_widget;
-
- ct->case_sensitive = FALSE;
- ct->elements = g_hash_table_new (&strcase_hash,
- &strcase_equal);
-
- /* Probably irrelevant, but lets be careful */
- ct->cache_mouse_state = GTK_STATE_NORMAL;
- ct->cached_entry = NULL;
-
- entry = ct->entry = gtk_entry_new ();
- list = ct->list = gtk_list_new ();
- if (is_scrolled) {
- display_widget = scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scroll),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
-
- gtk_scrolled_window_add_with_viewport (
- GTK_SCROLLED_WINDOW(scroll), list);
- gtk_container_set_focus_hadjustment (
- GTK_CONTAINER (list),
- gtk_scrolled_window_get_hadjustment (
- GTK_SCROLLED_WINDOW (scroll)));
- gtk_container_set_focus_vadjustment (
- GTK_CONTAINER (list),
- gtk_scrolled_window_get_vadjustment (
- GTK_SCROLLED_WINDOW (scroll)));
- gtk_widget_set_usize (scroll, 0, 200); /* MAGIC NUMBER */
- } else
- display_widget = list;
-
- g_signal_connect (entry, "activate",
- G_CALLBACK (entry_activate_cb),
- ct);
- g_signal_connect (list, "select-child",
- G_CALLBACK (list_select_cb),
- ct);
- g_signal_connect (list, "unselect-child",
- G_CALLBACK (list_unselect_cb),
- ct);
- g_signal_connect (list, "map",
- G_CALLBACK (cb_list_mapped), NULL);
-
- gtk_widget_show (display_widget);
- gtk_widget_show (entry);
- gal_combo_box_construct (GAL_COMBO_BOX (ct), entry, display_widget);
- g_signal_connect (ct, "pop_down_done",
- G_CALLBACK (cb_pop_down), NULL);
-}
-
-GtkWidget*
-gal_combo_text_new (gboolean const is_scrolled)
-{
- GalComboText *ct;
-
- ct = g_object_new (GAL_COMBO_TEXT_TYPE, NULL);
- gal_combo_text_construct (ct, is_scrolled);
- return GTK_WIDGET (ct);
-}
-
diff --git a/widgets/misc/gal-combo-text.h b/widgets/misc/gal-combo-text.h
deleted file mode 100644
index c507651dd1..0000000000
--- a/widgets/misc/gal-combo-text.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gal-combo-text.h - A combo box for selecting from a list.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _GAL_COMBO_TEXT_H
-#define _GAL_COMBO_TEXT_H
-
-#include <gal/widgets/gal-combo-box.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_COMBO_TEXT_TYPE (gal_combo_text_get_type ())
-#define GAL_COMBO_TEXT(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, gal_combo_text_get_type (), GalComboText)
-#define GAL_COMBO_TEXT_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, gal_combo_text_get_type (), GalComboTextClass)
-#define GAL_IS_COMBO_TEXT(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, gal_combo_text_get_type ())
-
-typedef struct _GalComboText GalComboText;
-/* typedef struct _GalComboTextPrivate GalComboTextPrivate;*/
-typedef struct _GalComboTextClass GalComboTextClass;
-
-struct _GalComboText {
- GalComboBox parent;
-
- GtkWidget *entry;
- GtkWidget *list;
- GtkWidget *scrolled_window;
- GtkStateType cache_mouse_state;
- GtkWidget *cached_entry;
- gboolean case_sensitive;
- GHashTable*elements;
-};
-
-struct _GalComboTextClass {
- GalComboBoxClass parent_class;
-};
-
-
-GtkType gal_combo_text_get_type (void);
-GtkWidget *gal_combo_text_new (gboolean const is_scrolled);
-void gal_combo_text_construct (GalComboText *ct, gboolean const is_scrolled);
-
-gint gal_combo_text_set_case_sensitive (GalComboText *combo_text,
- gboolean val);
-void gal_combo_text_select_item (GalComboText *combo_text,
- int elem);
-void gal_combo_text_set_text (GalComboText *combo_text,
- const gchar *text);
-void gal_combo_text_add_item (GalComboText *combo_text,
- const gchar *item,
- const gchar *value);
-
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif
diff --git a/widgets/misc/pixmaps/.cvsignore b/widgets/misc/pixmaps/.cvsignore
deleted file mode 100644
index 3dda72986f..0000000000
--- a/widgets/misc/pixmaps/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
diff --git a/widgets/misc/pixmaps/cursor_cross.xpm b/widgets/misc/pixmaps/cursor_cross.xpm
deleted file mode 100644
index cf9d0aca33..0000000000
--- a/widgets/misc/pixmaps/cursor_cross.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * cursor_cross_xpm[] = {
-"32 32 3 1",
-" c None",
-". c #000000",
-"+ c #FFFFFF",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ....... ",
-" .+++++.. ",
-" .+++++.. ",
-" .+++++.. ",
-" .+++++.. ",
-" ......+++++...... ",
-" .+++++++++++++++.. ",
-" .+++++++++++++++.. ",
-" .+++++++++++++++.. ",
-" .+++++++++++++++.. ",
-" .+++++++++++++++.. ",
-" ......+++++....... ",
-" .....+++++....... ",
-" .+++++.. ",
-" .+++++.. ",
-" .+++++.. ",
-" ........ ",
-" ....... ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/widgets/misc/pixmaps/cursor_hand_closed.xpm b/widgets/misc/pixmaps/cursor_hand_closed.xpm
deleted file mode 100644
index 61a6de4b88..0000000000
--- a/widgets/misc/pixmaps/cursor_hand_closed.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * cursor_hand_closed_xpm[] = {
-"32 32 3 1",
-" c None",
-". c #000000",
-"+ c #FFFFFF",
-" ",
-" ",
-" ",
-" ",
-" ",
-" .. ",
-" ..++... ",
-" .+++++++.. ",
-" .+++++++++. ",
-" ...+++++++++. ",
-" .++.+++++++++. ",
-" .++++++++++++. ",
-" .+++++++++++. ",
-" .++++++++++. ",
-" .+++++++++. ",
-" .+++++++. ",
-" .++++++. ",
-" .++++++. ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/widgets/misc/pixmaps/cursor_hand_open.xpm b/widgets/misc/pixmaps/cursor_hand_open.xpm
deleted file mode 100644
index 048acc8054..0000000000
--- a/widgets/misc/pixmaps/cursor_hand_open.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * cursor_hand_open_xpm[] = {
-"32 32 3 1",
-" c None",
-". c #000000",
-"+ c #FFFFFF",
-" ",
-" ",
-" .. ",
-" .. .++... ",
-" .++..++.++. ",
-" .++..++.++. . ",
-" .++.++.++..+. ",
-" .++.++.++.++. ",
-" .. .+++++++.++. ",
-" .++..++++++++++. ",
-" .+++.+++++++++. ",
-" .++++++++++++. ",
-" .+++++++++++. ",
-" .++++++++++. ",
-" .+++++++++. ",
-" .+++++++. ",
-" .++++++. ",
-" .++++++. ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/widgets/misc/pixmaps/cursor_zoom_in.xpm b/widgets/misc/pixmaps/cursor_zoom_in.xpm
deleted file mode 100644
index 1caf9e3e2a..0000000000
--- a/widgets/misc/pixmaps/cursor_zoom_in.xpm
+++ /dev/null
@@ -1,37 +0,0 @@
-/* XPM */
-static char * cursor_zoom_in_xpm[] = {
-"32 32 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ...... ",
-" .. .. ",
-" .. .. ",
-" . . ",
-" . ... . ",
-" . ... . ",
-" . ....... . ",
-" . ....... . ",
-" . ... . ",
-" . ... .. ",
-" .. . . ",
-" .. . . . ",
-" ........ . . ",
-" ..... . . . ",
-" . . . ",
-" . . . ",
-" . . . ",
-" . . . ",
-" . . ",
-" . . ",
-" .. ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/widgets/misc/pixmaps/cursor_zoom_out.xpm b/widgets/misc/pixmaps/cursor_zoom_out.xpm
deleted file mode 100644
index af1b698521..0000000000
--- a/widgets/misc/pixmaps/cursor_zoom_out.xpm
+++ /dev/null
@@ -1,37 +0,0 @@
-/* XPM */
-static char * cursor_zoom_out_xpm[] = {
-"32 32 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ...... ",
-" .. .. ",
-" .. .. ",
-" . . ",
-" . . ",
-" . . ",
-" . ....... . ",
-" . ....... . ",
-" . . ",
-" . .. ",
-" .. . . ",
-" .. . . . ",
-" ........ . . ",
-" ..... . . . ",
-" . . . ",
-" . . . ",
-" . . . ",
-" . . . ",
-" . . ",
-" . . ",
-" .. ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/widgets/misc/test-color.c b/widgets/misc/test-color.c
deleted file mode 100644
index 364e0644de..0000000000
--- a/widgets/misc/test-color.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * test-color.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gal/util/e-i18n.h>
-#include <gnome.h>
-#include "widget-color-combo.h"
-#include "color-palette.h"
-#include "e-colors.h"
-#include "pixmaps/cursor_hand_open.xpm"
-
-/* To compile (from src/widgets):
-
-gcc -I.. -I../.. -L. -Wall -o tester tester.c ../color.c `gnome-config --cflags --libs gnome gnomeui` -lwidgets
-
-*/
-
-gint
-main ( gint argc, gchar* argv[] )
-{
- GtkWidget * dialog;
- GtkWidget * T;
- ColorGroup *cg;
-
- gnome_program_init ("tester", "1.0",
- LIBGNOMEUI_MODULE,
- argc, argv, NULL);
-
- dialog = gnome_dialog_new ("TESTER", GNOME_STOCK_BUTTON_OK,
- GNOME_STOCK_BUTTON_CANCEL, NULL);
-
- cg = color_group_fetch ("fore_color_group", dialog);
- T = color_palette_new ("Color Palette", NULL, cg);
-
- gtk_box_pack_start(GTK_BOX (GNOME_DIALOG (dialog)-> vbox ),
- T, TRUE, TRUE, 5);
- gtk_widget_show_all (T);
-
- cg = color_group_fetch ("fore_color_group", dialog);
- T = color_combo_new (
- gdk_pixbuf_new_from_xpm_data ((char const **)cursor_hand_open_xpm),
- _("Automatic"), &e_black, cg);
- gtk_box_pack_start(GTK_BOX (GNOME_DIALOG (dialog)-> vbox ),
- T, TRUE, TRUE, 5);
- gtk_widget_show_all (T);
-
- cg = color_group_fetch ("back_color_group", dialog);
- T = color_combo_new (
- gdk_pixbuf_new_from_xpm_data ((char const **)cursor_hand_open_xpm),
- _("Automatic"), &e_black, cg);
- gtk_box_pack_start(GTK_BOX (GNOME_DIALOG (dialog)-> vbox ),
- T, TRUE, TRUE, 5);
- gtk_widget_show_all (T);
-
- gnome_dialog_run_and_close ( GNOME_DIALOG (dialog) );
- return 0;
-}
diff --git a/widgets/table/.cvsignore b/widgets/table/.cvsignore
deleted file mode 100644
index b1004fee2c..0000000000
--- a/widgets/table/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-.deps
-.libs
-.pure
-Makefile
-Makefile.in
-*.lo
-*.la
-table-test
-table-example-1
-table-example-2
-table-size-test
-tree-example-1
-tree-example-2
diff --git a/widgets/table/add-col.xpm b/widgets/table/add-col.xpm
deleted file mode 100644
index 9c5f314c8e..0000000000
--- a/widgets/table/add-col.xpm
+++ /dev/null
@@ -1,22 +0,0 @@
-/* XPM */
-static char * add_col_xpm[] = {
-"16 16 3 1",
-" c None",
-". c #000000",
-"+ c #FFFFFF",
-" ",
-" ",
-" ",
-" ",
-" .............. ",
-" .++++++++++++. ",
-" .++++++++++++. ",
-" ....+++....... ",
-" .+. ",
-" . ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/widgets/table/arrow-down.xpm b/widgets/table/arrow-down.xpm
deleted file mode 100644
index f1e6cb4b3c..0000000000
--- a/widgets/table/arrow-down.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static const char * arrow_down_xpm[] = {
-"13 16 2 1",
-" c None",
-". c #FF0000",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-".............",
-" ........... ",
-" ......... ",
-" ....... ",
-" ..... ",
-" ... ",
-" . "};
diff --git a/widgets/table/arrow-up.xpm b/widgets/table/arrow-up.xpm
deleted file mode 100644
index 0cc5b9a00c..0000000000
--- a/widgets/table/arrow-up.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static const char * arrow_up_xpm[] = {
-"13 16 2 1",
-" c None",
-". c #FF0000",
-" . ",
-" ... ",
-" ..... ",
-" ....... ",
-" ......... ",
-" ........... ",
-".............",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... ",
-" ... "};
diff --git a/widgets/table/check-empty.xpm b/widgets/table/check-empty.xpm
deleted file mode 100644
index 746b20234e..0000000000
--- a/widgets/table/check-empty.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static const char * check_empty_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ............ ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" ............ ",
-" ",
-" "};
diff --git a/widgets/table/check-filled.xpm b/widgets/table/check-filled.xpm
deleted file mode 100644
index c0468fc25b..0000000000
--- a/widgets/table/check-filled.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static const char * check_filled_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ............ ",
-" . . ",
-" . . . ",
-" . .. . ",
-" . ... . ",
-" . . ... . ",
-" . .. ... . ",
-" . ..... . ",
-" . ... . ",
-" . . . ",
-" . . ",
-" ............ ",
-" ",
-" "};
diff --git a/widgets/table/clip.png b/widgets/table/clip.png
deleted file mode 100644
index 27aa5f072f..0000000000
--- a/widgets/table/clip.png
+++ /dev/null
Binary files differ
diff --git a/widgets/table/e-cell-checkbox.c b/widgets/table/e-cell-checkbox.c
deleted file mode 100644
index 5ef4b23a96..0000000000
--- a/widgets/table/e-cell-checkbox.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-checkbox.c: Checkbox cell renderer
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-#include <config.h>
-#include <gtk/gtkenums.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtksignal.h>
-#include <gdk/gdkkeysyms.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include "e-cell-checkbox.h"
-#include "gal/util/e-util.h"
-#include "e-table-item.h"
-
-#include "check-empty.xpm"
-#include "check-filled.xpm"
-
-#define PARENT_TYPE e_cell_toggle_get_type ()
-
-static GdkPixbuf *checks [2];
-
-static void
-e_cell_checkbox_class_init (GtkObjectClass *object_class)
-{
- checks [0] = gdk_pixbuf_new_from_xpm_data (check_empty_xpm);
- checks [1] = gdk_pixbuf_new_from_xpm_data (check_filled_xpm);
-}
-
-E_MAKE_TYPE(e_cell_checkbox, "ECellCheckbox", ECellCheckbox, e_cell_checkbox_class_init, NULL, PARENT_TYPE)
-
-/**
- * e_cell_checkbox_new:
- *
- * Creates a new ECell renderer that can be used to render check
- * boxes. the data provided from the model is cast to an integer.
- * zero is used for the off display, and non-zero for checked status.
- *
- * Returns: an ECell object that can be used to render checkboxes.
- */
-ECell *
-e_cell_checkbox_new (void)
-{
- ECellCheckbox *eccb = g_object_new (E_CELL_CHECKBOX_TYPE, NULL);
-
- e_cell_toggle_construct (E_CELL_TOGGLE (eccb), 2, 2, checks);
-
- return (ECell *) eccb;
-}
diff --git a/widgets/table/e-cell-checkbox.h b/widgets/table/e-cell-checkbox.h
deleted file mode 100644
index ab56af27ab..0000000000
--- a/widgets/table/e-cell-checkbox.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-checkbox.h: Checkbox cell renderer
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-#ifndef _E_CELL_CHECKBOX_H_
-#define _E_CELL_CHECKBOX_H_
-
-#include <gal/e-table/e-cell-toggle.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_CHECKBOX_TYPE (e_cell_checkbox_get_type ())
-#define E_CELL_CHECKBOX(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_CHECKBOX_TYPE, ECellCheckbox))
-#define E_CELL_CHECKBOX_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_CHECKBOX_TYPE, ECellCheckboxClass))
-#define E_IS_CELL_CHECKBOX(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_CHECKBOX_TYPE))
-#define E_IS_CELL_CHECKBOX_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_CHECKBOX_TYPE))
-
-typedef struct {
- ECellToggle parent;
-} ECellCheckbox;
-
-typedef struct {
- ECellToggleClass parent_class;
-} ECellCheckboxClass;
-
-GType e_cell_checkbox_get_type (void);
-ECell *e_cell_checkbox_new (void);
-
-G_END_DECLS
-
-#endif /* _E_CELL_CHECKBOX_H_ */
-
diff --git a/widgets/table/e-cell-combo.c b/widgets/table/e-cell-combo.c
deleted file mode 100644
index 1d7061e7dc..0000000000
--- a/widgets/table/e-cell-combo.c
+++ /dev/null
@@ -1,699 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-combo.c: Combo cell renderer
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Damon Chaplin <damon@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/*
- * ECellCombo - a subclass of ECellPopup used to support popup lists like a
- * GtkCombo widget. It only supports a basic popup list of strings at present,
- * with no auto-completion.
- */
-
-/*
- * Notes: (handling pointer grabs and GTK+ grabs is a nightmare!)
- *
- * o We must grab the pointer when we show the popup, so that if any buttons
- * are pressed outside the application we hide the popup.
- *
- * o We have to be careful when popping up any widgets which also grab the
- * pointer at some point, since we will lose our own pointer grab.
- * When we pop up a list it will grab the pointer itself when an item is
- * selected, and release the grab when the button is released.
- * Fortunately we hide the popup at this point, so it isn't a problem.
- * But for other types of widgets in the popup it could cause trouble.
- * - I think GTK+ should provide help for this (nested pointer grabs?).
- *
- * o We must set the 'owner_events' flag of the pointer grab to TRUE so that
- * pointer events get reported to all the application windows as normal.
- * If we don't do this then the widgets in the popup may not work properly.
- *
- * o We must do a gtk_grab_add() so that we only allow events to go to the
- * widgets within the popup (though some special events still get reported
- * to the widget owning the window). Doing th gtk_grab_add() on the toplevel
- * popup window should be fine. We can then check for any events that should
- * close the popup, like the Escape key, or a button press outside the popup.
- */
-
-#include <config.h>
-#include <string.h> /* strcmp() */
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-#include "gal/util/e-util.h"
-#include "gal/widgets/e-unicode.h"
-#include "e-table-item.h"
-#include "e-cell-combo.h"
-#include "e-cell-text.h"
-
-#define d(x)
-
-
-/* The height to make the popup list if there aren't any items in it. */
-#define E_CELL_COMBO_LIST_EMPTY_HEIGHT 15
-
-/* The object data key used to store the UTF-8 text of the popup list items. */
-#define E_CELL_COMBO_UTF8_KEY "UTF-8-TEXT"
-
-
-static void e_cell_combo_class_init (GObjectClass *object_class);
-static void e_cell_combo_init (ECellCombo *ecc);
-static void e_cell_combo_dispose (GObject *object);
-
-static gint e_cell_combo_do_popup (ECellPopup *ecp,
- GdkEvent *event,
- int row,
- int view_col);
-static void e_cell_combo_select_matching_item (ECellCombo *ecc);
-static void e_cell_combo_show_popup (ECellCombo *ecc,
- int row,
- int view_col);
-static void e_cell_combo_get_popup_pos (ECellCombo *ecc,
- int row,
- int view_col,
- gint *x,
- gint *y,
- gint *height,
- gint *width);
-
-static void e_cell_combo_selection_changed (GtkWidget *popup_list, ECellCombo *ecc);
-
-static gint e_cell_combo_list_button_press (GtkWidget *popup_list, GdkEvent *event, ECellCombo *ecc);
-
-static gint e_cell_combo_button_press (GtkWidget *popup_window,
- GdkEvent *event,
- ECellCombo *ecc);
-static gint e_cell_combo_button_release (GtkWidget *popup_window,
- GdkEventButton *event,
- ECellCombo *ecc);
-static int e_cell_combo_key_press (GtkWidget *popup_window,
- GdkEventKey *event,
- ECellCombo *ecc);
-
-static void e_cell_combo_update_cell (ECellCombo *ecc);
-static void e_cell_combo_restart_edit (ECellCombo *ecc);
-
-
-static ECellPopupClass *parent_class;
-
-
-E_MAKE_TYPE (e_cell_combo, "ECellCombo", ECellCombo,
- e_cell_combo_class_init, e_cell_combo_init,
- e_cell_popup_get_type())
-
-
-static void
-e_cell_combo_class_init (GObjectClass *object_class)
-{
- ECellPopupClass *ecpc = (ECellPopupClass *) object_class;
-
- object_class->dispose = e_cell_combo_dispose;
-
- ecpc->popup = e_cell_combo_do_popup;
-
- parent_class = g_type_class_ref (E_CELL_POPUP_TYPE);
-}
-
-
-static void
-e_cell_combo_init (ECellCombo *ecc)
-{
- GtkWidget *frame;
-
- /* We create one popup window for the ECell, since there will only
- ever be one popup in use at a time. */
- ecc->popup_window = gtk_window_new (GTK_WINDOW_POPUP);
-
- gtk_window_set_policy (GTK_WINDOW (ecc->popup_window),
- TRUE, TRUE, FALSE);
-
- frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (ecc->popup_window), frame);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
- gtk_widget_show (frame);
-
- ecc->popup_scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window)->hscrollbar, GTK_CAN_FOCUS);
- GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window)->vscrollbar, GTK_CAN_FOCUS);
- gtk_container_add (GTK_CONTAINER (frame), ecc->popup_scrolled_window);
- gtk_widget_show (ecc->popup_scrolled_window);
-
- ecc->popup_list = gtk_list_new ();
- gtk_list_set_selection_mode (GTK_LIST (ecc->popup_list),
- GTK_SELECTION_BROWSE);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window), ecc->popup_list);
- gtk_container_set_focus_vadjustment (GTK_CONTAINER (ecc->popup_list),
- gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window)));
- gtk_container_set_focus_hadjustment (GTK_CONTAINER (ecc->popup_list),
- gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window)));
- gtk_widget_show (ecc->popup_list);
-
- g_signal_connect (ecc->popup_list,
- "selection_changed",
- G_CALLBACK (e_cell_combo_selection_changed),
- ecc);
- g_signal_connect (ecc->popup_list,
- "button_press_event",
- G_CALLBACK (e_cell_combo_list_button_press),
- ecc);
- g_signal_connect (ecc->popup_window,
- "button_press_event",
- G_CALLBACK (e_cell_combo_button_press),
- ecc);
- /* We use connect_after here so the list updates the selection before
- we hide the popup and update the cell. */
- g_signal_connect (ecc->popup_window,
- "button_release_event",
- G_CALLBACK (e_cell_combo_button_release),
- ecc);
- g_signal_connect (ecc->popup_window,
- "key_press_event",
- G_CALLBACK (e_cell_combo_key_press), ecc);
-}
-
-
-/**
- * e_cell_combo_new:
- *
- * Creates a new ECellCombo renderer.
- *
- * Returns: an ECellCombo object.
- */
-ECell *
-e_cell_combo_new (void)
-{
- ECellCombo *ecc = g_object_new (E_CELL_COMBO_TYPE, NULL);
-
- return (ECell*) ecc;
-}
-
-
-/*
- * GObject::dispose method
- */
-static void
-e_cell_combo_dispose (GObject *object)
-{
- ECellCombo *ecc = E_CELL_COMBO (object);
-
- if (ecc->popup_window)
- gtk_widget_destroy (ecc->popup_window);
- ecc->popup_window = NULL;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-
-
-void
-e_cell_combo_set_popdown_strings (ECellCombo *ecc,
- GList *strings)
-{
- GList *elem;
- GtkWidget *listitem;
-
- g_return_if_fail (E_IS_CELL_COMBO (ecc));
- g_return_if_fail (strings != NULL);
-
- gtk_list_clear_items (GTK_LIST (ecc->popup_list), 0, -1);
- elem = strings;
- while (elem) {
- char *utf8_text = elem->data;
-
- /* We store a copy of the UTF-8 text as data inside the
- listitem, but convert it to the current locale to go in
- the listitem widget. */
- char *locale_text = e_utf8_to_locale_string (utf8_text);
-
- listitem = gtk_list_item_new_with_label (locale_text);
- g_free (locale_text);
-
- gtk_widget_show (listitem);
- gtk_container_add (GTK_CONTAINER (ecc->popup_list), listitem);
-
- g_object_set_data_full (G_OBJECT (listitem),
- E_CELL_COMBO_UTF8_KEY,
- g_strdup (utf8_text), g_free);
-
- elem = elem->next;
- }
-}
-
-
-static gint
-e_cell_combo_do_popup (ECellPopup *ecp,
- GdkEvent *event,
- int row,
- int view_col)
-{
- ECellCombo *ecc = E_CELL_COMBO (ecp);
- guint32 time;
- gint error_code;
-
- g_signal_handlers_block_by_func(ecc->popup_list, e_cell_combo_selection_changed, ecc);
- e_cell_combo_show_popup (ecc, row, view_col);
- e_cell_combo_select_matching_item (ecc);
- g_signal_handlers_unblock_by_func(ecc->popup_list, e_cell_combo_selection_changed, ecc);
-
- if (event->type == GDK_BUTTON_PRESS) {
- GTK_LIST (ecc->popup_list)->drag_selection = TRUE;
- time = event->button.time;
- } else {
- time = event->key.time;
- }
-
- error_code = gdk_pointer_grab (ecc->popup_list->window, TRUE,
- GDK_ENTER_NOTIFY_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_HINT_MASK |
- GDK_BUTTON1_MOTION_MASK,
- NULL, NULL, time);
- if (error_code != 0)
- g_warning ("Failed to get pointer grab (%i)", error_code);
- gtk_grab_add (ecc->popup_window);
-
- return TRUE;
-}
-
-
-static void
-e_cell_combo_select_matching_item (ECellCombo *ecc)
-{
- ECellPopup *ecp = E_CELL_POPUP (ecc);
- ECellView *ecv = (ECellView*) ecp->popup_cell_view;
- ECellText *ecell_text = E_CELL_TEXT (ecp->child);
- ETableItem *eti = E_TABLE_ITEM (ecp->popup_cell_view->cell_view.e_table_item_view);
- ETableCol *ecol;
- GtkList *list;
- GtkWidget *listitem;
- GList *elem;
- gboolean found = FALSE;
- char *cell_text, *list_item_text;
-
- ecol = e_table_header_get_column (eti->header, ecp->popup_view_col);
- cell_text = e_cell_text_get_text (ecell_text, ecv->e_table_model,
- ecol->col_idx, ecp->popup_row);
-
- list = GTK_LIST (ecc->popup_list);
- elem = list->children;
- while (elem) {
- listitem = GTK_WIDGET (elem->data);
-
- /* We need to compare against the UTF-8 text. */
- list_item_text = g_object_get_data (G_OBJECT (listitem),
- E_CELL_COMBO_UTF8_KEY);
-
- if (list_item_text && !strcmp (list_item_text, cell_text)) {
- found = TRUE;
- gtk_list_select_child (list, listitem);
- gtk_widget_grab_focus (listitem);
- break;
- }
-
- elem = elem->next;
- }
-
- if (!found) {
- gtk_list_unselect_all (list);
- if (list->children)
- gtk_widget_grab_focus (GTK_WIDGET (list->children->data));
- }
-
- e_cell_text_free_text (ecell_text, cell_text);
-}
-
-
-static void
-e_cell_combo_show_popup (ECellCombo *ecc, int row, int view_col)
-{
- gint x, y, width, height, old_width, old_height;
-
- /* This code is practically copied from GtkCombo. */
- old_width = ecc->popup_window->allocation.width;
- old_height = ecc->popup_window->allocation.height;
-
- e_cell_combo_get_popup_pos (ecc, row, view_col, &x, &y, &height, &width);
-
- /* workaround for gtk_scrolled_window_size_allocate bug */
- if (old_width != width || old_height != height) {
- gtk_widget_hide (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window)->hscrollbar);
- gtk_widget_hide (GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window)->vscrollbar);
- }
-
- gtk_widget_set_uposition (ecc->popup_window, x, y);
- gtk_widget_set_usize (ecc->popup_window, width, height);
- gtk_widget_realize (ecc->popup_window);
- gdk_window_resize (ecc->popup_window->window, width, height);
- gtk_widget_show (ecc->popup_window);
-
- e_cell_popup_set_shown (E_CELL_POPUP (ecc), TRUE);
- d(g_print("%s: popup_shown = TRUE\n", __FUNCTION__));
-}
-
-
-/* Calculates the size and position of the popup window (like GtkCombo). */
-static void
-e_cell_combo_get_popup_pos (ECellCombo *ecc,
- int row,
- int view_col,
- gint *x,
- gint *y,
- gint *height,
- gint *width)
-{
- ECellPopup *ecp = E_CELL_POPUP (ecc);
- ETableItem *eti = E_TABLE_ITEM (ecp->popup_cell_view->cell_view.e_table_item_view);
- GtkWidget *canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (eti)->canvas);
- GtkBin *popwin;
- GtkScrolledWindow *popup;
- GtkRequisition list_requisition;
- gboolean show_vscroll = FALSE, show_hscroll = FALSE;
- gint avail_height, avail_width, min_height, work_height, screen_width;
- gint column_width, row_height, scrollbar_width;
- double x1, y1;
- double wx, wy;
-
- /* This code is practically copied from GtkCombo. */
- popup = GTK_SCROLLED_WINDOW (ecc->popup_scrolled_window);
- popwin = GTK_BIN (ecc->popup_window);
-
- gdk_window_get_origin (canvas->window, x, y);
-
- x1 = e_table_header_col_diff (eti->header, 0, view_col + 1);
- y1 = e_table_item_row_diff (eti, 0, row + 1);
- column_width = e_table_header_col_diff (eti->header, view_col,
- view_col + 1);
- row_height = e_table_item_row_diff (eti, row,
- row + 1);
- gnome_canvas_item_i2w (GNOME_CANVAS_ITEM (eti), &x1, &y1);
-
- gnome_canvas_world_to_window (GNOME_CANVAS (canvas),
- x1,
- y1,
- &wx,
- &wy);
-
- x1 = wx;
- y1 = wy;
-
- *x += x1;
- /* The ETable positions don't include the grid lines, I think, so we add 1. */
- *y += y1 + 1
- - (int)((GnomeCanvas *)canvas)->layout.vadjustment->value
- + ((GnomeCanvas *)canvas)->zoom_yofs;
-
- scrollbar_width = popup->vscrollbar->requisition.width
- + GTK_SCROLLED_WINDOW_CLASS (GTK_OBJECT_GET_CLASS (popup))->scrollbar_spacing;
-
- avail_height = gdk_screen_height () - *y;
-
- /* We'll use the entire screen width if needed, but we save space for
- the vertical scrollbar in case we need to show that. */
- screen_width = gdk_screen_width ();
- avail_width = screen_width - scrollbar_width;
-
- gtk_widget_size_request (ecc->popup_list, &list_requisition);
- min_height = MIN (list_requisition.height,
- popup->vscrollbar->requisition.height);
- if (!GTK_LIST (ecc->popup_list)->children)
- list_requisition.height += E_CELL_COMBO_LIST_EMPTY_HEIGHT;
-
- /* Calculate the desired width. */
- *width = list_requisition.width
- + 2 * popwin->child->style->xthickness
- + 2 * GTK_CONTAINER (popwin->child)->border_width
- + 2 * GTK_CONTAINER (popup)->border_width
- + 2 * GTK_CONTAINER (GTK_BIN (popup)->child)->border_width
- + 2 * GTK_BIN (popup)->child->style->xthickness;
-
- /* Use at least the same width as the column. */
- if (*width < column_width)
- *width = column_width;
-
- /* If it is larger than the available width, use that instead and show
- the horizontal scrollbar. */
- if (*width > avail_width) {
- *width = avail_width;
- show_hscroll = TRUE;
- }
-
- /* Calculate all the borders etc. that we need to add to the height. */
- work_height = (2 * popwin->child->style->ythickness
- + 2 * GTK_CONTAINER (popwin->child)->border_width
- + 2 * GTK_CONTAINER (popup)->border_width
- + 2 * GTK_CONTAINER (GTK_BIN (popup)->child)->border_width
- + 2 * GTK_BIN (popup)->child->style->xthickness);
-
- /* Add on the height of the horizontal scrollbar if we need it. */
- if (show_hscroll)
- work_height += popup->hscrollbar->requisition.height +
- GTK_SCROLLED_WINDOW_CLASS (GTK_OBJECT_GET_CLASS (popup))->scrollbar_spacing;
-
- /* Check if it fits in the available height. */
- if (work_height + list_requisition.height > avail_height) {
- /* It doesn't fit, so we see if we have the minimum space
- needed. */
- if (work_height + min_height > avail_height
- && *y - row_height > avail_height) {
- /* We don't, so we show the popup above the cell
- instead of below it. */
- avail_height = *y - row_height;
- *y -= (work_height + list_requisition.height
- + row_height);
- if (*y < 0)
- *y = 0;
- }
- }
-
- /* Check if we still need the vertical scrollbar. */
- if (work_height + list_requisition.height > avail_height) {
- *width += scrollbar_width;
- show_vscroll = TRUE;
- }
-
- /* We try to line it up with the right edge of the column, but we don't
- want it to go off the edges of the screen. */
- if (*x > screen_width)
- *x = screen_width;
- *x -= *width;
- if (*x < 0)
- *x = 0;
-
- if (show_vscroll)
- *height = avail_height;
- else
- *height = work_height + list_requisition.height;
-}
-
-static void
-e_cell_combo_selection_changed(GtkWidget *popup_list, ECellCombo *ecc)
-{
- if (!GTK_LIST(popup_list)->selection || !GTK_WIDGET_REALIZED(ecc->popup_window))
- return;
-
- e_cell_combo_restart_edit (ecc);
-}
-
-static gint
-e_cell_combo_list_button_press(GtkWidget *popup_list, GdkEvent *event, ECellCombo *ecc)
-{
- g_return_val_if_fail (GTK_IS_LIST(popup_list), FALSE);
-
- e_cell_combo_update_cell (ecc);
- gtk_grab_remove (ecc->popup_window);
- gdk_pointer_ungrab (event->button.time);
- gtk_widget_hide (ecc->popup_window);
-
- e_cell_popup_set_shown (E_CELL_POPUP (ecc), FALSE);
- d(g_print("%s: popup_shown = FALSE\n", __FUNCTION__));
-
- e_cell_combo_restart_edit (ecc);
-
- return TRUE;
-
-}
-
-/* This handles button press events in the popup window.
- Note that since we have a pointer grab on this window, we also get button
- press events for windows outside the application here, so we hide the popup
- window if that happens. We also get propagated events from child widgets
- which we ignore. */
-static gint
-e_cell_combo_button_press (GtkWidget *popup_window,
- GdkEvent *event,
- ECellCombo *ecc)
-{
- GtkWidget *event_widget;
-
- event_widget = gtk_get_event_widget (event);
-
- /* If the button press was for a widget inside the popup list, but
- not the popup window itself, then we ignore the event and return
- FALSE. Otherwise we will hide the popup.
- Note that since we have a pointer grab on the popup list, button
- presses outside the application will be reported to this window,
- which is why we hide the popup in this case. */
- while (event_widget) {
- event_widget = event_widget->parent;
- if (event_widget == ecc->popup_list)
- return FALSE;
- }
-
- gtk_grab_remove (ecc->popup_window);
- gdk_pointer_ungrab (event->button.time);
- gtk_widget_hide (ecc->popup_window);
-
- e_cell_popup_set_shown (E_CELL_POPUP (ecc), FALSE);
- d(g_print("%s: popup_shown = FALSE\n", __FUNCTION__));
-
- /* We don't want to update the cell here. Since the list is in browse
- mode there will always be one item selected, so when we popup the
- list one item is selected even if it doesn't match the current text
- in the cell. So if you click outside the popup (which is what has
- happened here) it is better to not update the cell. */
- /*e_cell_combo_update_cell (ecc);*/
- e_cell_combo_restart_edit (ecc);
-
- return TRUE;
-}
-
-
-/* This handles button release events in the popup window. If the button is
- released inside the list, we want to hide the popup window and update the
- cell with the new selection. */
-static gint
-e_cell_combo_button_release (GtkWidget *popup_window,
- GdkEventButton *event,
- ECellCombo *ecc)
-{
- GtkWidget *event_widget;
-
- event_widget = gtk_get_event_widget ((GdkEvent*) event);
-
- /* See if the button was released in the list (or its children). */
- while (event_widget && event_widget != ecc->popup_list)
- event_widget = event_widget->parent;
-
- /* If it wasn't, then we just ignore the event. */
- if (event_widget != ecc->popup_list)
- return FALSE;
-
- /* The button was released inside the list, so we hide the popup and
- update the cell to reflect the new selection. */
- gtk_grab_remove (ecc->popup_window);
- gdk_pointer_ungrab (event->time);
- gtk_widget_hide (ecc->popup_window);
-
- e_cell_popup_set_shown (E_CELL_POPUP (ecc), FALSE);
- d(g_print("%s: popup_shown = FALSE\n", __FUNCTION__));
-
- e_cell_combo_update_cell (ecc);
- e_cell_combo_restart_edit (ecc);
-
- return TRUE;
-}
-
-
-/* This handles key press events in the popup window. If the Escape key is
- pressed we hide the popup, and do not change the cell contents. */
-static int
-e_cell_combo_key_press (GtkWidget *popup_window,
- GdkEventKey *event,
- ECellCombo *ecc)
-{
- /* If the Escape key is pressed we hide the popup. */
- if (event->keyval != GDK_Escape
- && event->keyval != GDK_Return
- && event->keyval != GDK_KP_Enter
- && event->keyval != GDK_ISO_Enter
- && event->keyval != GDK_3270_Enter)
- return FALSE;
-
- gtk_grab_remove (ecc->popup_window);
- gdk_pointer_ungrab (event->time);
- gtk_widget_hide (ecc->popup_window);
-
- e_cell_popup_set_shown (E_CELL_POPUP (ecc), FALSE);
- d(g_print("%s: popup_shown = FALSE\n", __FUNCTION__));
-
- if (event->keyval != GDK_Escape)
- e_cell_combo_update_cell (ecc);
-
- e_cell_combo_restart_edit (ecc);
-
- return TRUE;
-}
-
-
-static void
-e_cell_combo_update_cell (ECellCombo *ecc)
-{
- ECellPopup *ecp = E_CELL_POPUP (ecc);
- ECellView *ecv = (ECellView*) ecp->popup_cell_view;
- ECellText *ecell_text = E_CELL_TEXT (ecp->child);
- ETableItem *eti = E_TABLE_ITEM (ecv->e_table_item_view);
- ETableCol *ecol;
- GtkList *list = GTK_LIST (ecc->popup_list);
- GtkListItem *listitem;
- gchar *text, *old_text;
-
- /* Return if no item is selected. */
- if (list->selection == NULL)
- return;
-
- /* Get the text of the selected item. */
- listitem = list->selection->data;
- text = g_object_get_data (G_OBJECT (listitem),
- E_CELL_COMBO_UTF8_KEY);
- g_return_if_fail (text != NULL);
-
- /* Compare it with the existing cell contents. */
- ecol = e_table_header_get_column (eti->header, ecp->popup_view_col);
-
- old_text = e_cell_text_get_text (ecell_text, ecv->e_table_model,
- ecol->col_idx, ecp->popup_row);
-
- /* If they are different, update the cell contents. */
- if (old_text && strcmp (old_text, text)) {
- e_cell_text_set_value (ecell_text, ecv->e_table_model,
- ecol->col_idx, ecp->popup_row, text);
- }
-
- e_cell_text_free_text (ecell_text, old_text);
-}
-
-
-static void
-e_cell_combo_restart_edit (ECellCombo *ecc)
-{
- /* This doesn't work. ETable stops the edit straight-away again. */
-#if 0
- ECellView *ecv = (ECellView*) ecc->popup_cell_view;
- ETableItem *eti = E_TABLE_ITEM (ecv->e_table_item_view);
-
- e_table_item_enter_edit (eti, ecc->popup_view_col, ecc->popup_row);
-#endif
-}
-
-
-
diff --git a/widgets/table/e-cell-combo.h b/widgets/table/e-cell-combo.h
deleted file mode 100644
index 23d5ac26a4..0000000000
--- a/widgets/table/e-cell-combo.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-combo.h: Combo cell renderer
- * Copyright 2001, Ximian, Inc.
- *
- * Author :
- * Damon Chaplin <damon@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/*
- * ECellCombo - a subclass of ECellPopup used to support popup lists like a
- * GtkCombo widget. It only supports a basic popup list of strings at present,
- * with no auto-completion. The child ECell of the ECellPopup must be an
- * ECellText or subclass.
- */
-
-#ifndef _E_CELL_COMBO_H_
-#define _E_CELL_COMBO_H_
-
-#include <gal/e-table/e-cell-popup.h>
-
-#define E_CELL_COMBO_TYPE (e_cell_combo_get_type ())
-#define E_CELL_COMBO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_COMBO_TYPE, ECellCombo))
-#define E_CELL_COMBO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_COMBO_TYPE, ECellComboClass))
-#define E_IS_CELL_COMBO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_COMBO_TYPE))
-#define E_IS_CELL_COMBO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_COMBO_TYPE))
-
-
-typedef struct {
- ECellPopup parent;
-
- GtkWidget *popup_window;
- GtkWidget *popup_scrolled_window;
- GtkWidget *popup_list;
-} ECellCombo;
-
-typedef struct {
- ECellPopupClass parent_class;
-} ECellComboClass;
-
-
-GType e_cell_combo_get_type (void);
-ECell *e_cell_combo_new (void);
-
-/* These must be UTF-8. */
-void e_cell_combo_set_popdown_strings (ECellCombo *ecc,
- GList *strings);
-
-#endif /* _E_CELL_COMBO_H_ */
diff --git a/widgets/table/e-cell-date.c b/widgets/table/e-cell-date.c
deleted file mode 100644
index 64d9b8132b..0000000000
--- a/widgets/table/e-cell-date.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * e-cell-date.c - Date item for e-table.
- * Copyright 2001, Ximian, Inc.
- *
- * Author:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-cell-date.h"
-
-#include <sys/time.h>
-#include <time.h>
-#include <unistd.h>
-#include <string.h>
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-unicode.h>
-#include <gal/util/e-i18n.h>
-
-#define PARENT_TYPE e_cell_text_get_type ()
-
-static ECellTextClass *parent_class;
-
-static char *
-ecd_get_text(ECellText *cell, ETableModel *model, int col, int row)
-{
- time_t date = GPOINTER_TO_INT (e_table_model_value_at(model, col, row));
- time_t nowdate = time(NULL);
- time_t yesdate;
- struct tm then, now, yesterday;
- char buf[100];
- char *temp;
- gboolean done = FALSE;
-
- if (date == 0) {
- return g_strdup (_("?"));
- }
-
- localtime_r (&date, &then);
- localtime_r (&nowdate, &now);
-
- if (nowdate - date < 60 * 60 * 8 && nowdate > date) {
- e_utf8_strftime_fix_am_pm (buf, 100, _("%l:%M %p"), &then);
- done = TRUE;
- }
-
- if (!done) {
- if (then.tm_mday == now.tm_mday &&
- then.tm_mon == now.tm_mon &&
- then.tm_year == now.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 100, _("Today %l:%M %p"), &then);
- done = TRUE;
- }
- }
- if (!done) {
- yesdate = nowdate - 60 * 60 * 24;
- localtime_r (&yesdate, &yesterday);
- if (then.tm_mday == yesterday.tm_mday &&
- then.tm_mon == yesterday.tm_mon &&
- then.tm_year == yesterday.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 100, _("Yesterday %l:%M %p"), &then);
- done = TRUE;
- }
- }
- if (!done) {
- int i;
- for (i = 2; i < 7; i++) {
- yesdate = nowdate - 60 * 60 * 24 * i;
- localtime_r (&yesdate, &yesterday);
- if (then.tm_mday == yesterday.tm_mday &&
- then.tm_mon == yesterday.tm_mon &&
- then.tm_year == yesterday.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 100, _("%a %l:%M %p"), &then);
- done = TRUE;
- break;
- }
- }
- }
- if (!done) {
- if (then.tm_year == now.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 100, _("%b %d %l:%M %p"), &then);
- } else {
- e_utf8_strftime_fix_am_pm (buf, 100, _("%b %d %Y"), &then);
- }
- }
- temp = buf;
- while ((temp = strstr (temp, " "))) {
- memmove (temp, temp + 1, strlen (temp));
- }
- temp = e_strdup_strip (buf);
- return temp;
-}
-
-static void
-ecd_free_text(ECellText *cell, char *text)
-{
- g_free(text);
-}
-
-static void
-e_cell_date_class_init (GtkObjectClass *object_class)
-{
- ECellTextClass *ectc = (ECellTextClass *) object_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- ectc->get_text = ecd_get_text;
- ectc->free_text = ecd_free_text;
-}
-
-static void
-e_cell_date_init (GtkObject *object)
-{
-}
-
-/**
- * e_cell_date_new:
- * @fontname: font to be used to render on the screen
- * @justify: Justification of the string in the cell.
- *
- * Creates a new ECell renderer that can be used to render dates that
- * that come from the model. The value returned from the model is
- * interpreted as being a time_t.
- *
- * The ECellDate object support a large set of properties that can be
- * configured through the Gtk argument system and allows the user to have
- * a finer control of the way the string is displayed. The arguments supported
- * allow the control of strikeout, bold, color and a date filter.
- *
- * The arguments "strikeout_column", "underline_column", "bold_column"
- * and "color_column" set and return an integer that points to a
- * column in the model that controls these settings. So controlling
- * the way things are rendered is achieved by having special columns
- * in the model that will be used to flag whether the date should be
- * rendered with strikeout, underline, or bolded. In the case of the
- * "color_column" argument, the column in the model is expected to
- * have a string that can be parsed by gdk_color_parse().
- *
- * Returns: an ECell object that can be used to render dates.
- */
-ECell *
-e_cell_date_new (const char *fontname, GtkJustification justify)
-{
- ECellDate *ecd = g_object_new (E_CELL_DATE_TYPE, NULL);
-
- e_cell_text_construct(E_CELL_TEXT(ecd), fontname, justify);
-
- return (ECell *) ecd;
-}
-
-E_MAKE_TYPE(e_cell_date, "ECellDate", ECellDate, e_cell_date_class_init, e_cell_date_init, PARENT_TYPE)
diff --git a/widgets/table/e-cell-date.h b/widgets/table/e-cell-date.h
deleted file mode 100644
index 96d5faa5c3..0000000000
--- a/widgets/table/e-cell-date.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * e-cell-date.h - Date item for e-table.
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_DATE_H_
-#define _E_CELL_DATE_H_
-
-#include <gal/e-table/e-cell-text.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_DATE_TYPE (e_cell_date_get_type ())
-#define E_CELL_DATE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_DATE_TYPE, ECellDate))
-#define E_CELL_DATE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_DATE_TYPE, ECellDateClass))
-#define E_IS_CELL_DATE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_DATE_TYPE))
-#define E_IS_CELL_DATE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_DATE_TYPE))
-
-typedef struct {
- ECellText base;
-} ECellDate;
-
-typedef struct {
- ECellTextClass parent_class;
-} ECellDateClass;
-
-GType e_cell_date_get_type (void);
-ECell *e_cell_date_new (const char *fontname, GtkJustification justify);
-
-G_END_DECLS
-
-#endif /* _E_CELL_DATE_H_ */
diff --git a/widgets/table/e-cell-float.c b/widgets/table/e-cell-float.c
deleted file mode 100644
index 133be063b3..0000000000
--- a/widgets/table/e-cell-float.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * e-cell-float.c - Float item for e-table.
- * Copyright 2001, CodeFactory AB
- * Copyright 2001, Mikael Hallendal <micke@codefactory.se>
- *
- * Derived from e-cell-number by Chris Lahey <clahey@ximian.com>
- * ECellFloat - Float item for e-table.
- *
- * Author:
- * Mikael Hallendal <micke@codefactory.se>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <gal/util/e-util.h>
-#include <gal/util/e-i18n.h>
-#include "e-cell-float.h"
-
-#define PARENT_TYPE e_cell_text_get_type ()
-
-static ECellTextClass *parent_class;
-
-static char *
-ecf_get_text(ECellText *cell, ETableModel *model, int col, int row)
-{
- gfloat *fvalue;
-
- fvalue = e_table_model_value_at (model, col, row);
-
- return e_format_number_float (*fvalue);
-}
-
-static void
-ecf_free_text(ECellText *cell, char *text)
-{
- g_free(text);
-}
-
-static void
-e_cell_float_class_init (GtkObjectClass *object_class)
-{
- ECellTextClass *ectc = (ECellTextClass *) object_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- ectc->get_text = ecf_get_text;
- ectc->free_text = ecf_free_text;
-}
-
-static void
-e_cell_float_init (GtkObject *object)
-{
-}
-
-/**
- * e_cell_float_new:
- * @fontname: font to be used to render on the screen
- * @justify: Justification of the string in the cell.
- *
- * Creates a new ECell renderer that can be used to render floats that
- * that come from the model. The value returned from the model is
- * interpreted as being an int.
- *
- * See ECellText for other features.
- *
- * Returns: an ECell object that can be used to render floats.
- */
-ECell *
-e_cell_float_new (const char *fontname, GtkJustification justify)
-{
- ECellFloat *ecn = g_object_new (E_CELL_FLOAT_TYPE, NULL);
-
- e_cell_text_construct(E_CELL_TEXT(ecn), fontname, justify);
-
- return (ECell *) ecn;
-}
-
-E_MAKE_TYPE(e_cell_float, "ECellFloat", ECellFloat, e_cell_float_class_init, e_cell_float_init, PARENT_TYPE)
diff --git a/widgets/table/e-cell-float.h b/widgets/table/e-cell-float.h
deleted file mode 100644
index 36874406b2..0000000000
--- a/widgets/table/e-cell-float.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * e-cell-float.h - Float item for e-table.
- * Copyright 2001, CodeFactory AB
- * Copyright 2001, Mikael Hallendal <micke@codefactory.se>
- *
- * Derived from e-cell-number by Chris Lahey <clahey@ximian.com>
- * ECellFloat - Float item for e-table.
- *
- * Author:
- * Mikael Hallendal <micke@codefactory.se>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_FLOAT_H_
-#define _E_CELL_FLOAT_H_
-
-#include <gal/e-table/e-cell-text.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_FLOAT_TYPE (e_cell_float_get_type ())
-#define E_CELL_FLOAT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_FLOAT_TYPE, ECellFloat))
-#define E_CELL_FLOAT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_FLOAT_TYPE, ECellFloatClass))
-#define E_IS_CELL_FLOAT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_FLOAT_TYPE))
-#define E_IS_CELL_FLOAT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_FLOAT_TYPE))
-
-typedef struct {
- ECellText base;
-} ECellFloat;
-
-typedef struct {
- ECellTextClass parent_class;
-} ECellFloatClass;
-
-GType e_cell_float_get_type (void);
-ECell *e_cell_float_new (const char *fontname, GtkJustification justify);
-
-G_END_DECLS
-
-#endif /* _E_CELL_FLOAT_H_ */
diff --git a/widgets/table/e-cell-number.c b/widgets/table/e-cell-number.c
deleted file mode 100644
index 8c8887df5a..0000000000
--- a/widgets/table/e-cell-number.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * e-cell-number.c - Number item for e-table.
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <gal/util/e-util.h>
-#include <gal/util/e-i18n.h>
-#include "e-cell-number.h"
-
-#define PARENT_TYPE e_cell_text_get_type ()
-
-static ECellTextClass *parent_class;
-
-static char *
-ecn_get_text(ECellText *cell, ETableModel *model, int col, int row)
-{
- return e_format_number(GPOINTER_TO_INT (e_table_model_value_at(model, col, row)));
-}
-
-static void
-ecn_free_text(ECellText *cell, char *text)
-{
- g_free(text);
-}
-
-static void
-e_cell_number_class_init (GtkObjectClass *object_class)
-{
- ECellTextClass *ectc = (ECellTextClass *) object_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- ectc->get_text = ecn_get_text;
- ectc->free_text = ecn_free_text;
-}
-
-static void
-e_cell_number_init (GtkObject *object)
-{
-}
-
-/**
- * e_cell_number_new:
- * @fontname: font to be used to render on the screen
- * @justify: Justification of the string in the cell.
- *
- * Creates a new ECell renderer that can be used to render numbers that
- * that come from the model. The value returned from the model is
- * interpreted as being an int.
- *
- * See ECellText for other features.
- *
- * Returns: an ECell object that can be used to render numbers.
- */
-ECell *
-e_cell_number_new (const char *fontname, GtkJustification justify)
-{
- ECellNumber *ecn = g_object_new (E_CELL_NUMBER_TYPE, NULL);
-
- e_cell_text_construct(E_CELL_TEXT(ecn), fontname, justify);
-
- return (ECell *) ecn;
-}
-
-E_MAKE_TYPE(e_cell_number, "ECellNumber", ECellNumber, e_cell_number_class_init, e_cell_number_init, PARENT_TYPE)
diff --git a/widgets/table/e-cell-number.h b/widgets/table/e-cell-number.h
deleted file mode 100644
index 3cce1ec412..0000000000
--- a/widgets/table/e-cell-number.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * e-cell-number.h - Number item for e-table.
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_NUMBER_H_
-#define _E_CELL_NUMBER_H_
-
-#include <gal/e-table/e-cell-text.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_NUMBER_TYPE (e_cell_number_get_type ())
-#define E_CELL_NUMBER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_NUMBER_TYPE, ECellNumber))
-#define E_CELL_NUMBER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_NUMBER_TYPE, ECellNumberClass))
-#define E_IS_CELL_NUMBER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_NUMBER_TYPE))
-#define E_IS_CELL_NUMBER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_NUMBER_TYPE))
-
-typedef struct {
- ECellText base;
-} ECellNumber;
-
-typedef struct {
- ECellTextClass parent_class;
-} ECellNumberClass;
-
-GType e_cell_number_get_type (void);
-ECell *e_cell_number_new (const char *fontname, GtkJustification justify);
-
-G_END_DECLS
-
-#endif /* _E_CELL_NUMBER_H_ */
diff --git a/widgets/table/e-cell-pixbuf.c b/widgets/table/e-cell-pixbuf.c
deleted file mode 100644
index 50c3b2cc7a..0000000000
--- a/widgets/table/e-cell-pixbuf.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-pixbuf.c - An ECell that displays a GdkPixbuf
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Vladimir Vukicevic <vladimir@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <stdio.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include "e-cell-pixbuf.h"
-#include <gal/util/e-i18n.h>
-
-#define PARENT_TYPE E_CELL_TYPE
-static ECellClass *parent_class;
-
-typedef struct _ECellPixbufView ECellPixbufView;
-
-struct _ECellPixbufView {
- ECellView cell_view;
- GnomeCanvas *canvas;
-};
-
-/* Object argument IDs */
-enum {
- PROP_0,
-
- PROP_SELECTED_COLUMN,
- PROP_FOCUSED_COLUMN,
- PROP_UNSELECTED_COLUMN
-};
-
-static int
-gnome_print_pixbuf (GnomePrintContext *pc, GdkPixbuf *pixbuf)
-{
- if (gdk_pixbuf_get_has_alpha (pixbuf))
- return gnome_print_rgbaimage (pc,
- gdk_pixbuf_get_pixels (pixbuf),
- gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf),
- gdk_pixbuf_get_rowstride (pixbuf));
- else
- return gnome_print_rgbimage (pc,
- gdk_pixbuf_get_pixels (pixbuf),
- gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf),
- gdk_pixbuf_get_rowstride (pixbuf));
-}
-
-/*
- * ECellPixbuf functions
- */
-
-ECell *
-e_cell_pixbuf_new (void)
-{
- ECellPixbuf *ecp;
-
- ecp = g_object_new (E_CELL_PIXBUF_TYPE, NULL);
- e_cell_pixbuf_construct (ecp);
-
- return (ECell *) ecp;
-}
-
-void
-e_cell_pixbuf_construct (ECellPixbuf *ecp)
-{
- /* noop */
- return;
-}
-
-/*
- * ECell methods
- */
-
-static ECellView *
-pixbuf_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- ECellPixbufView *pixbuf_view = g_new0 (ECellPixbufView, 1);
- ETableItem *eti = E_TABLE_ITEM (e_table_item_view);
- GnomeCanvas *canvas = GNOME_CANVAS_ITEM (eti)->canvas;
-
- pixbuf_view->cell_view.ecell = ecell;
- pixbuf_view->cell_view.e_table_model = table_model;
- pixbuf_view->cell_view.e_table_item_view = e_table_item_view;
- pixbuf_view->canvas = canvas;
-
- return (ECellView *) pixbuf_view;
-}
-
-static void
-pixbuf_kill_view (ECellView *ecell_view)
-{
- ECellPixbufView *pixbuf_view = (ECellPixbufView *) ecell_view;
-
- g_free (pixbuf_view);
-}
-
-static void
-pixbuf_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- GdkPixbuf *cell_pixbuf;
- int real_x, real_y, real_w, real_h;
- int pix_w, pix_h;
- ECellPixbuf *ecp;
-
- cell_pixbuf = NULL;
-
- ecp = E_CELL_PIXBUF (ecell_view->ecell);
-
- if (flags & E_CELL_SELECTED) {
- if (GTK_WIDGET_HAS_FOCUS (GNOME_CANVAS_ITEM (ecell_view->e_table_item_view)->canvas)) {
- if (ecp->focused_column != -1)
- cell_pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model,
- ecp->focused_column, row);
- } else {
- if (ecp->selected_column != -1)
- cell_pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model,
- ecp->selected_column, row);
- }
- } else {
- if (ecp->unselected_column != -1)
- cell_pixbuf = e_table_model_value_at (ecell_view->e_table_model,
- ecp->unselected_column, row);
- }
-
- if (cell_pixbuf == NULL)
- cell_pixbuf = e_table_model_value_at (ecell_view->e_table_model,
- model_col, row);
- /* we can't make sure we really got a pixbuf since, well, it's a Gdk thing */
-
- if (x2 - x1 == 0)
- return;
-
- if (!cell_pixbuf)
- return;
-
- pix_w = gdk_pixbuf_get_width (cell_pixbuf);
- pix_h = gdk_pixbuf_get_height (cell_pixbuf);
-
- /* We center the pixbuf within our allocated space */
- if (x2 - x1 > pix_w) {
- int diff = (x2 - x1) - pix_w;
- real_x = x1 + diff/2;
- real_w = pix_w;
- } else {
- real_x = x1;
- real_w = x2 - x1;
- }
-
- if (y2 - y1 > pix_h) {
- int diff = (y2 - y1) - pix_h;
- real_y = y1 + diff/2;
- real_h = pix_h;
- } else {
- real_y = y1;
- real_h = y2 - y1;
- }
-
-
- gdk_pixbuf_render_to_drawable_alpha (cell_pixbuf,
- drawable,
- 0, 0,
- real_x, real_y,
- real_w, real_h,
- GDK_PIXBUF_ALPHA_FULL,
- 127,
- GDK_RGB_DITHER_NORMAL,
- 0, 0);
-}
-
-static gint
-pixbuf_event (ECellView *ecell_view, GdkEvent *event,
- int model_col, int view_col, int row,
- ECellFlags flags, ECellActions *actions)
-{
- /* noop */
-
- return FALSE;
-}
-
-static gint
-pixbuf_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- GdkPixbuf *pixbuf;
- if (row == -1) {
- if (e_table_model_row_count (ecell_view->e_table_model) > 0) {
- row = 0;
- } else {
- return 6;
- }
- }
-
- pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model, model_col, row);
- if (!pixbuf)
- return 0;
-
- /* We give ourselves 3 pixels of padding on either side */
- return gdk_pixbuf_get_height (pixbuf) + 6;
-}
-
-/*
- * ECell::print method
- */
-static void
-pixbuf_print (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width, double height)
-{
- GdkPixbuf *pixbuf;
- int scale;
-
- pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model, model_col, row);
- if (pixbuf == NULL)
- return;
- scale = gdk_pixbuf_get_height (pixbuf);
-
- gnome_print_gsave(context);
-
- gnome_print_translate (context, 0, (height - scale) / 2);
- gnome_print_scale (context, scale, scale);
- gnome_print_pixbuf (context, pixbuf);
-
- gnome_print_grestore(context);
-}
-
-static gdouble
-pixbuf_print_height (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width)
-{
- GdkPixbuf *pixbuf;
-
- if (row == -1) {
- if (e_table_model_row_count (ecell_view->e_table_model) > 0) {
- row = 0;
- } else {
- return 6;
- }
- }
-
- pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model, model_col, row);
- if (!pixbuf)
- return 0;
-
- /* We give ourselves 3 pixels of padding on either side */
- return gdk_pixbuf_get_height (pixbuf);
-}
-
-static gint
-pixbuf_max_width (ECellView *ecell_view, int model_col, int view_col)
-{
- int pw;
- gint num_rows, i;
- gint max_width = -1;
-
- if (model_col == 0) {
- num_rows = e_table_model_row_count (ecell_view->e_table_model);
-
- for (i = 0; i <= num_rows; i++) {
- GdkPixbuf *pixbuf = (GdkPixbuf *) e_table_model_value_at
- (ecell_view->e_table_model,
- model_col,
- i);
- if (!pixbuf)
- continue;
- pw = gdk_pixbuf_get_width (pixbuf);
- if (max_width < pw)
- max_width = pw;
- }
- } else {
- return -1;
- }
-
- return max_width;
-}
-
-static void
-pixbuf_dispose (GObject *object)
-{
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-pixbuf_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- ECellPixbuf *pixbuf;
-
- pixbuf = E_CELL_PIXBUF (object);
-
- switch (prop_id) {
- case PROP_SELECTED_COLUMN:
- pixbuf->selected_column = g_value_get_int (value);
- break;
-
- case PROP_FOCUSED_COLUMN:
- pixbuf->focused_column = g_value_get_int (value);
- break;
-
- case PROP_UNSELECTED_COLUMN:
- pixbuf->unselected_column = g_value_get_int (value);
- break;
-
- default:
- return;
- }
-}
-
-/* Get_arg handler for the pixbuf item */
-static void
-pixbuf_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ECellPixbuf *pixbuf;
-
- pixbuf = E_CELL_PIXBUF (object);
-
- switch (prop_id) {
- case PROP_SELECTED_COLUMN:
- g_value_set_int (value, pixbuf->selected_column);
- break;
-
- case PROP_FOCUSED_COLUMN:
- g_value_set_int (value, pixbuf->focused_column);
- break;
-
- case PROP_UNSELECTED_COLUMN:
- g_value_set_int (value, pixbuf->unselected_column);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-e_cell_pixbuf_init (GtkObject *object)
-{
- ECellPixbuf *ecp = E_CELL_PIXBUF (object);
-
- ecp->selected_column = -1;
- ecp->focused_column = -1;
- ecp->unselected_column = -1;
-}
-
-static void
-e_cell_pixbuf_class_init (GObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
-
- object_class->dispose = pixbuf_dispose;
- object_class->set_property = pixbuf_set_property;
- object_class->get_property = pixbuf_get_property;
-
- ecc->new_view = pixbuf_new_view;
- ecc->kill_view = pixbuf_kill_view;
- ecc->draw = pixbuf_draw;
- ecc->event = pixbuf_event;
- ecc->height = pixbuf_height;
- ecc->print = pixbuf_print;
- ecc->print_height = pixbuf_print_height;
- ecc->max_width = pixbuf_max_width;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- g_object_class_install_property (object_class, PROP_SELECTED_COLUMN,
- g_param_spec_int ("selected_column",
- _("Selected Column"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FOCUSED_COLUMN,
- g_param_spec_int ("focused_column",
- _("Focused Column"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_UNSELECTED_COLUMN,
- g_param_spec_int ("unselected_column",
- _("Unselected Column"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-}
-
-E_MAKE_TYPE (e_cell_pixbuf,
- "ECellPixbuf",
- ECellPixbuf,
- e_cell_pixbuf_class_init,
- e_cell_pixbuf_init,
- PARENT_TYPE)
diff --git a/widgets/table/e-cell-pixbuf.h b/widgets/table/e-cell-pixbuf.h
deleted file mode 100644
index 2f12521d58..0000000000
--- a/widgets/table/e-cell-pixbuf.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * e-cell-pixbuf.h - An ECell that displays a GdkPixbuf
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Vladimir Vukicevic <vladimir@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_PIXBUF_H_
-#define _E_CELL_PIXBUF_H_
-
-#include <gal/e-table/e-table.h>
-
-#define E_CELL_PIXBUF_TYPE (e_cell_pixbuf_get_type ())
-#define E_CELL_PIXBUF(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_PIXBUF_TYPE, ECellPixbuf))
-#define E_CELL_PIXBUF_CLASS(k) (G_TYPE_CHECK_INSTANCE_CAST_CLASS ((k), E_CELL_PIXBUF_TYPE, ECellPixbufClass))
-#define E_IS_CELL_PIXBUF(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_PIXBUF_TYPE))
-#define E_IS_CELL_PIXBUF_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_PIXBUF_TYPE))
-
-typedef struct _ECellPixbuf ECellPixbuf;
-typedef struct _ECellPixbufClass ECellPixbufClass;
-
-struct _ECellPixbuf {
- ECell parent;
-
- int selected_column;
- int focused_column;
- int unselected_column;
-};
-
-struct _ECellPixbufClass {
- ECellClass parent_class;
-};
-
-GType e_cell_pixbuf_get_type (void);
-ECell *e_cell_pixbuf_new (void);
-void e_cell_pixbuf_construct (ECellPixbuf *ecp);
-
-#endif
diff --git a/widgets/table/e-cell-popup.c b/widgets/table/e-cell-popup.c
deleted file mode 100644
index 50943d6004..0000000000
--- a/widgets/table/e-cell-popup.c
+++ /dev/null
@@ -1,519 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-popup.c: Popup cell renderer
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Damon Chaplin <damon@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA. */
-
-/*
- * ECellPopup - an abstract ECell class used to support popup selections like
- * a GtkCombo widget. It contains a child ECell, e.g. an ECellText, but when
- * selected it displays an arrow on the right edge which the user can click to
- * show a popup. Subclasses implement the popup class function to show the
- * popup.
- */
-
-#include <config.h>
-#include <gdk/gdkkeysyms.h>
-#include "gal/util/e-util.h"
-#include "e-table-item.h"
-#include "e-cell-popup.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-popup.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-registry.h"
-
-#define E_CELL_POPUP_ARROW_WIDTH 16
-#define E_CELL_POPUP_ARROW_XPAD 3
-#define E_CELL_POPUP_ARROW_YPAD 3
-
-
-static void e_cell_popup_class_init (GtkObjectClass *object_class);
-static void e_cell_popup_init (ECellPopup *ecp);
-static void e_cell_popup_dispose (GObject *object);
-
-
-static ECellView* ecp_new_view (ECell *ecell,
- ETableModel *table_model,
- void *e_table_item_view);
-static void ecp_kill_view (ECellView *ecv);
-static void ecp_realize (ECellView *ecv);
-static void ecp_unrealize (ECellView *ecv);
-static void ecp_draw (ECellView *ecv,
- GdkDrawable *drawable,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- int x1,
- int y1,
- int x2,
- int y2);
-static gint ecp_event (ECellView *ecv,
- GdkEvent *event,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- ECellActions *actions);
-static int ecp_height (ECellView *ecv,
- int model_col,
- int view_col,
- int row);
-static void* ecp_enter_edit (ECellView *ecv,
- int model_col,
- int view_col,
- int row);
-static void ecp_leave_edit (ECellView *ecv,
- int model_col,
- int view_col,
- int row,
- void *edit_context);
-static void ecp_print (ECellView *ecv,
- GnomePrintContext *context,
- int model_col,
- int view_col,
- int row,
- double width,
- double height);
-static gdouble ecp_print_height (ECellView *ecv,
- GnomePrintContext *context,
- int model_col,
- int view_col,
- int row,
- double width);
-static int ecp_max_width (ECellView *ecv,
- int model_col,
- int view_col);
-static void ecp_show_tooltip (ECellView *ecv,
- int model_col,
- int view_col,
- int row,
- int col_width,
- ETableTooltip *tooltip);
-static char *ecp_get_bg_color (ECellView *ecell_view, int row);
-
-static gint e_cell_popup_do_popup (ECellPopupView *ecp_view,
- GdkEvent *event,
- int row,
- int model_col);
-
-static ECellClass *parent_class;
-
-
-E_MAKE_TYPE (e_cell_popup, "ECellPopup", ECellPopup, e_cell_popup_class_init,
- e_cell_popup_init, e_cell_get_type())
-
-
-static void
-e_cell_popup_class_init (GtkObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
-
- G_OBJECT_CLASS (object_class)->dispose = e_cell_popup_dispose;
-
- ecc->new_view = ecp_new_view;
- ecc->kill_view = ecp_kill_view;
- ecc->realize = ecp_realize;
- ecc->unrealize = ecp_unrealize;
- ecc->draw = ecp_draw;
- ecc->event = ecp_event;
- ecc->height = ecp_height;
- ecc->enter_edit = ecp_enter_edit;
- ecc->leave_edit = ecp_leave_edit;
- ecc->print = ecp_print;
- ecc->print_height = ecp_print_height;
- ecc->max_width = ecp_max_width;
- ecc->show_tooltip = ecp_show_tooltip;
- ecc->get_bg_color = ecp_get_bg_color;
-
- parent_class = g_type_class_ref (E_CELL_TYPE);
- gal_a11y_e_cell_registry_add_cell_type (NULL,
- E_CELL_POPUP_TYPE,
- gal_a11y_e_cell_popup_new);
-}
-
-
-static void
-e_cell_popup_init (ECellPopup *ecp)
-{
- ecp->popup_shown = FALSE;
- ecp->popup_model = NULL;
-}
-
-
-/**
- * e_cell_popup_new:
- *
- * Creates a new ECellPopup renderer.
- *
- * Returns: an ECellPopup object.
- */
-ECell *
-e_cell_popup_new (void)
-{
- ECellPopup *ecp = g_object_new (E_CELL_POPUP_TYPE, NULL);
-
- return (ECell*) ecp;
-}
-
-
-/*
- * GtkObject::destroy method
- */
-static void
-e_cell_popup_dispose (GObject *object)
-{
- ECellPopup *ecp = E_CELL_POPUP (object);
-
- if (ecp->child)
- g_object_unref (ecp->child);
- ecp->child = NULL;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-
-
-/*
- * ECell::new_view method
- */
-static ECellView *
-ecp_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- ECellPopup *ecp = E_CELL_POPUP (ecell);
- ECellPopupView *ecp_view;
-
- /* We must have a child ECell before we create any views. */
- g_return_val_if_fail (ecp->child != NULL, NULL);
-
- ecp_view = g_new0 (ECellPopupView, 1);
-
- ecp_view->cell_view.ecell = ecell;
- ecp_view->cell_view.e_table_model = table_model;
- ecp_view->cell_view.e_table_item_view = e_table_item_view;
-
- ecp_view->child_view = e_cell_new_view (ecp->child, table_model,
- e_table_item_view);
-
- return (ECellView*) ecp_view;
-}
-
-
-/*
- * ECell::kill_view method
- */
-static void
-ecp_kill_view (ECellView *ecv)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- if (ecp_view->child_view)
- e_cell_kill_view (ecp_view->child_view);
- g_free (ecp_view);
-}
-
-
-/*
- * ECell::realize method
- */
-static void
-ecp_realize (ECellView *ecv)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- e_cell_realize (ecp_view->child_view);
-
- if (parent_class->realize)
- (* parent_class->realize) (ecv);
-}
-
-
-/*
- * ECell::unrealize method
- */
-static void
-ecp_unrealize (ECellView *ecv)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- e_cell_unrealize (ecp_view->child_view);
-
- if (parent_class->unrealize)
- (* parent_class->unrealize) (ecv);
-}
-
-
-/*
- * ECell::draw method
- */
-static void
-ecp_draw (ECellView *ecv, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- ECellPopup *ecp = E_CELL_POPUP (ecv->ecell);
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
- GtkWidget *canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (ecv->e_table_item_view)->canvas);
- GtkShadowType shadow;
- GdkRectangle rect;
- gboolean show_popup_arrow;
-
- /* Display the popup arrow if we are the cursor cell, or the popup
- is shown for this cell. */
- show_popup_arrow = e_table_model_is_cell_editable (ecv->e_table_model, model_col, row) &&
- (flags & E_CELL_CURSOR ||
- (ecp->popup_shown && ecp->popup_view_col == view_col
- && ecp->popup_row == row
- && ecp->popup_model == ((ECellView *) ecp_view)->e_table_model));
-
- if (flags & E_CELL_CURSOR)
- ecp->popup_arrow_shown = show_popup_arrow;
-
- if (show_popup_arrow) {
- e_cell_draw (ecp_view->child_view, drawable, model_col,
- view_col, row, flags,
- x1, y1, x2 - E_CELL_POPUP_ARROW_WIDTH, y2);
-
- rect.x = x2 - E_CELL_POPUP_ARROW_WIDTH;
- rect.y = y1 + 1;
- rect.width = E_CELL_POPUP_ARROW_WIDTH;
- rect.height = y2 - y1 - 2;
-
- if (ecp->popup_shown)
- shadow = GTK_SHADOW_IN;
- else
- shadow = GTK_SHADOW_OUT;
-
- gtk_paint_box (canvas->style, drawable,
- GTK_STATE_NORMAL, shadow,
- &rect, canvas, "ecellpopup",
- rect.x, rect.y, rect.width, rect.height);
- gtk_paint_arrow (canvas->style, drawable,
- GTK_STATE_NORMAL, GTK_SHADOW_NONE,
- &rect, canvas, NULL,
- GTK_ARROW_DOWN, TRUE,
- rect.x + E_CELL_POPUP_ARROW_XPAD,
- rect.y + E_CELL_POPUP_ARROW_YPAD,
- rect.width - E_CELL_POPUP_ARROW_XPAD * 2,
- rect.height - E_CELL_POPUP_ARROW_YPAD * 2);
- } else {
- e_cell_draw (ecp_view->child_view, drawable, model_col,
- view_col, row, flags, x1, y1, x2, y2);
- }
-}
-
-
-/*
- * ECell::event method
- */
-static gint
-ecp_event (ECellView *ecv, GdkEvent *event, int model_col, int view_col,
- int row, ECellFlags flags, ECellActions *actions)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
- ECellPopup *ecp = E_CELL_POPUP (ecp_view->cell_view.ecell);
- ETableItem *eti = E_TABLE_ITEM (ecv->e_table_item_view);
- int width;
-
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- if (e_table_model_is_cell_editable (ecv->e_table_model, model_col, row) &&
- flags & E_CELL_CURSOR
- && ecp->popup_arrow_shown) {
- width = e_table_header_col_diff (eti->header, view_col,
- view_col + 1);
-
- /* FIXME: The event coords seem to be relative to the
- text within the cell, so we have to add 4. */
- if (event->button.x + 4 >= width - E_CELL_POPUP_ARROW_WIDTH) {
- return e_cell_popup_do_popup (ecp_view, event, row, view_col);
- }
- }
- break;
- case GDK_KEY_PRESS:
- if (e_table_model_is_cell_editable (ecv->e_table_model, model_col, row) &&
- event->key.state & GDK_MOD1_MASK
- && event->key.keyval == GDK_Down) {
- return e_cell_popup_do_popup (ecp_view, event, row, view_col);
- }
- break;
- default:
- break;
- }
-
- return e_cell_event (ecp_view->child_view, event, model_col, view_col,
- row, flags, actions);
-}
-
-
-/*
- * ECell::height method
- */
-static int
-ecp_height (ECellView *ecv, int model_col, int view_col, int row)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- return e_cell_height (ecp_view->child_view, model_col, view_col, row);
-}
-
-
-/*
- * ECellView::enter_edit method
- */
-static void *
-ecp_enter_edit (ECellView *ecv, int model_col, int view_col, int row)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- return e_cell_enter_edit (ecp_view->child_view, model_col, view_col, row);
-}
-
-
-/*
- * ECellView::leave_edit method
- */
-static void
-ecp_leave_edit (ECellView *ecv, int model_col, int view_col, int row,
- void *edit_context)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- e_cell_leave_edit (ecp_view->child_view, model_col, view_col, row,
- edit_context);
-}
-
-
-static void
-ecp_print (ECellView *ecv, GnomePrintContext *context,
- int model_col, int view_col, int row, double width, double height)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- e_cell_print (ecp_view->child_view, context, model_col, view_col, row,
- width, height);
-}
-
-
-static gdouble
-ecp_print_height (ECellView *ecv, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- return e_cell_print_height (ecp_view->child_view, context, model_col,
- view_col, row, width);
-}
-
-
-static int
-ecp_max_width (ECellView *ecv,
- int model_col,
- int view_col)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- return e_cell_max_width (ecp_view->child_view, model_col, view_col);
-}
-
-
-static void
-ecp_show_tooltip (ECellView *ecv,
- int model_col,
- int view_col,
- int row,
- int col_width,
- ETableTooltip *tooltip)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecv;
-
- e_cell_show_tooltip (ecp_view->child_view, model_col, view_col, row,
- col_width, tooltip);
-}
-
-static char *
-ecp_get_bg_color (ECellView *ecell_view, int row)
-{
- ECellPopupView *ecp_view = (ECellPopupView *) ecell_view;
-
- return e_cell_get_bg_color (ecp_view->child_view, row);
-}
-
-
-
-ECell*
-e_cell_popup_get_child (ECellPopup *ecp)
-{
- g_return_val_if_fail (E_IS_CELL_POPUP (ecp), NULL);
-
- return ecp->child;
-}
-
-
-void
-e_cell_popup_set_child (ECellPopup *ecp,
- ECell *child)
-{
- g_return_if_fail (E_IS_CELL_POPUP (ecp));
-
- if (ecp->child)
- g_object_unref (ecp->child);
-
- ecp->child = child;
- g_object_ref (child);
-}
-
-
-static gint
-e_cell_popup_do_popup (ECellPopupView *ecp_view,
- GdkEvent *event,
- int row,
- int view_col)
-{
- ECellPopup *ecp = E_CELL_POPUP (ecp_view->cell_view.ecell);
- gint (*popup_func) (ECellPopup *ecp, GdkEvent *event, int row, int view_col);
-
- ecp->popup_cell_view = ecp_view;
-
- popup_func = E_CELL_POPUP_CLASS (GTK_OBJECT_GET_CLASS (ecp))->popup;
-
- ecp->popup_view_col = view_col;
- ecp->popup_row = row;
- ecp->popup_model = ((ECellView *) ecp_view)->e_table_model;
-
- return popup_func ? popup_func (ecp, event, row, view_col) : FALSE;
-}
-
-/* This redraws the popup cell. Only use this if you know popup_view_col and
- popup_row are valid. */
-void
-e_cell_popup_queue_cell_redraw (ECellPopup *ecp)
-{
- ETableItem *eti = E_TABLE_ITEM (ecp->popup_cell_view->cell_view.e_table_item_view);
-
- e_table_item_redraw_range (eti, ecp->popup_view_col, ecp->popup_row,
- ecp->popup_view_col, ecp->popup_row);
-}
-
-void
-e_cell_popup_set_shown (ECellPopup *ecp,
- gboolean shown)
-{
- ecp->popup_shown = shown;
- e_cell_popup_queue_cell_redraw (ecp);
-}
diff --git a/widgets/table/e-cell-popup.h b/widgets/table/e-cell-popup.h
deleted file mode 100644
index 26a7429127..0000000000
--- a/widgets/table/e-cell-popup.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-popup.h: Popup cell renderer
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Damon Chaplin <damon@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/*
- * ECellPopup - an ECell used to support popup selections like a GtkCombo
- * widget. It contains a child ECell, e.g. an ECellText, but when selected it
- * displays an arrow on the right edge which the user can click to show a
- * popup. It will support subclassing or signals so that different types of
- * popup can be provided.
- */
-
-#ifndef _E_CELL_POPUP_H_
-#define _E_CELL_POPUP_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-cell.h>
-
-#define E_CELL_POPUP_TYPE (e_cell_popup_get_type ())
-#define E_CELL_POPUP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_POPUP_TYPE, ECellPopup))
-#define E_CELL_POPUP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_POPUP_TYPE, ECellPopupClass))
-#define E_IS_CELL_POPUP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_POPUP_TYPE))
-#define E_IS_CELL_POPUP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_POPUP_TYPE))
-
-typedef struct _ECellPopupView ECellPopupView;
-
-typedef struct {
- ECell parent;
-
- ECell *child;
-
- /* This is TRUE if the popup window is shown for the cell being
- edited. While shown we display the arrow indented. */
- gboolean popup_shown;
-
- /* This is TRUE if the popup arrow is shown for the cell being edited.
- This is needed to stop the first click on the cell from popping up
- the popup window. We only popup the window after we have drawn the
- arrow. */
- gboolean popup_arrow_shown;
-
- /* The view in which the popup is shown. */
- ECellPopupView *popup_cell_view;
-
- gint popup_view_col;
- gint popup_row;
- ETableModel *popup_model;
-} ECellPopup;
-
-
-typedef struct {
- ECellClass parent_class;
-
- /* Virtual function for subclasses to override. */
- gint (*popup) (ECellPopup *ecp, GdkEvent *event, int row, int view_col);
-} ECellPopupClass;
-
-
-struct _ECellPopupView {
- ECellView cell_view;
-
- ECellView *child_view;
-};
-
-
-GType e_cell_popup_get_type (void);
-ECell *e_cell_popup_new (void);
-
-/* Get and set the child ECell. */
-ECell *e_cell_popup_get_child (ECellPopup *ecp);
-void e_cell_popup_set_child (ECellPopup *ecp,
- ECell *child);
-
-void e_cell_popup_set_shown (ECellPopup *ecp,
- gboolean shown);
-void e_cell_popup_queue_cell_redraw (ECellPopup *ecp);
-
-void e_cell_popup_set_shown (ECellPopup *ecp,
- gboolean shown);
-void e_cell_popup_queue_cell_redraw (ECellPopup *ecp);
-
-#endif /* _E_CELL_POPUP_H_ */
diff --git a/widgets/table/e-cell-progress.c b/widgets/table/e-cell-progress.c
deleted file mode 100644
index bf7fdd9951..0000000000
--- a/widgets/table/e-cell-progress.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-progress.c - Progress display cell object.
- * Copyright 1999-2002, Ximian, Inc.
- * Copyright 2001, 2002, Krisztian Pifko <monsta@users.sourceforge.net>
- *
- * Authors:
- * Krisztian Pifko <monsta@users.sourceforge.net>
- *
- * A cell type for displaying progress bars.
- *
- * Derived from ECellToggle of Miguel de Icaza <miguel@ximian.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <gtk/gtkenums.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtksignal.h>
-#include <gdk/gdkkeysyms.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include "e-cell-progress.h"
-#include "gal/util/e-util.h"
-#include "e-table-item.h"
-
-#define PARENT_TYPE e_cell_get_type ()
-
-typedef struct {
- ECellView cell_view;
- GdkGC *gc;
- GnomeCanvas *canvas;
-} ECellProgressView;
-
-static ECellClass *parent_class;
-
-static void
-eprog_queue_redraw (ECellProgressView *text_view, int view_col, int view_row)
-{
- e_table_item_redraw_range (
- text_view->cell_view.e_table_item_view,
- view_col, view_row, view_col, view_row);
-}
-
-/*
- * ECell::realize method
- */
-static ECellView *
-eprog_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- ECellProgressView *progress_view = g_new0 (ECellProgressView, 1);
- ETableItem *eti = E_TABLE_ITEM (e_table_item_view);
- GnomeCanvas *canvas = GNOME_CANVAS_ITEM (eti)->canvas;
-
- progress_view->cell_view.ecell = ecell;
- progress_view->cell_view.e_table_model = table_model;
- progress_view->cell_view.e_table_item_view = e_table_item_view;
- progress_view->canvas = canvas;
-
- return (ECellView *) progress_view;
-}
-
-static void
-eprog_kill_view (ECellView *ecell_view)
-{
- g_free (ecell_view);
-}
-
-static void
-eprog_realize (ECellView *ecell_view)
-{
- ECellProgressView *progress_view = (ECellProgressView *) ecell_view;
-
- progress_view->gc = gdk_gc_new (GTK_WIDGET (progress_view->canvas)->window);
-}
-
-/*
- * ECell::unrealize method
- */
-static void
-eprog_unrealize (ECellView *ecv)
-{
- ECellProgressView *progress_view = (ECellProgressView *) ecv;
-
- gdk_gc_unref (progress_view->gc);
- progress_view->gc = NULL;
-}
-
-static void
-eprog_clear (ECellProgress *progress)
-{
- memset(progress->buffer,0x00,progress->width*progress->height*4);
-}
-
-static void
-eprog_draw_border (ECellProgress *progress, guchar red, guchar green, guchar blue)
-{
- gint i, j, w4, p4, pw4, wpb4, hp1;
-
-/*
- * some speedup
- */
- w4=progress->width*4;
- p4=progress->padding*4;
- pw4=w4*progress->padding;
- wpb4=(progress->width-progress->padding-progress->border)*4;
- hp1=(progress->height-progress->padding-1);
-
- for (i=progress->padding*4;i<(progress->width-progress->padding)*4;i+=4){
- for (j=0;j<progress->border;j++){
- progress->buffer[pw4+j*w4+i]=red;
- progress->buffer[pw4+j*w4+i+1]=green;
- progress->buffer[pw4+j*w4+i+2]=blue;
- progress->buffer[pw4+j*w4+i+3]=255;
- progress->buffer[(progress->height-1-progress->padding)*w4-j*w4+i]=red;
- progress->buffer[(progress->height-1-progress->padding)*w4-j*w4+i+1]=green;
- progress->buffer[(progress->height-1-progress->padding)*w4-j*w4+i+2]=blue;
- progress->buffer[(progress->height-1-progress->padding)*w4-j*w4+i+3]=255;
- }
- }
- for (i=progress->padding+progress->border;i<progress->height-progress->padding-progress->border;i++){
- for (j=0;j<4*progress->border;j+=4){
- progress->buffer[p4+i*w4+j]=red;
- progress->buffer[p4+i*w4+j+1]=green;
- progress->buffer[p4+i*w4+j+2]=blue;
- progress->buffer[p4+i*w4+j+3]=255;
- progress->buffer[i*w4+wpb4+j]=red;
- progress->buffer[i*w4+wpb4+j+1]=green;
- progress->buffer[i*w4+wpb4+j+2]=blue;
- progress->buffer[i*w4+wpb4+j+3]=255;
- }
- }
-}
-
-static void
-eprog_draw_bar (ECellProgress *progress, guchar red, guchar green, guchar blue, gint value)
-{
- gint i, j, w;
-
- w=value*(progress->width-2*(progress->padding+progress->border+1))/progress->max;
- for (i=(progress->padding+progress->border+1)*4;i<(progress->padding+progress->border+1+w)*4;i+=4){
- for (j=0;j<progress->height-2*(progress->padding+progress->border+1);j++){
- progress->buffer[(progress->width*(progress->padding+progress->border+1)*4)+j*progress->width*4+i]=red;
- progress->buffer[(progress->width*(progress->padding+progress->border+1)*4)+j*progress->width*4+i+1]=green;
- progress->buffer[(progress->width*(progress->padding+progress->border+1)*4)+j*progress->width*4+i+2]=blue;
- progress->buffer[(progress->width*(progress->padding+progress->border+1)*4)+j*progress->width*4+i+3]=255;
- }
- }
-}
-
-/*
- * ECell::draw method
- */
-static void
-eprog_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- ECellProgress *progress = E_CELL_PROGRESS (ecell_view->ecell);
- gboolean selected;
- GdkPixbuf *image;
- int x, y, width, height;
-
- const int value = GPOINTER_TO_INT (
- e_table_model_value_at (ecell_view->e_table_model, model_col, row));
-
- selected = flags & E_CELL_SELECTED;
-
- if ((value > progress->max)||(value < progress->min)){
- g_warning ("Value from the table model is %d, the states we support are [%d..%d]\n",
- value, progress->min, progress->max);
- return;
- }
-
- image = progress->image;
-
- if ((x2 - x1) < progress->width){
- x = x1;
- width = x2 - x1;
- } else {
- x = x1 + ((x2 - x1) - progress->width) / 2;
- width = progress->width;
- }
-
- if ((y2 - y1) < progress->height){
- y = y1;
- height = y2 - y1;
- } else {
- y = y1 + ((y2 - y1) - progress->height) / 2;
- height = progress->height;
- }
-
- eprog_clear(progress);
-
- eprog_draw_border(progress, progress->red, progress->green, progress->blue);
-
- eprog_draw_bar(progress, progress->red, progress->green, progress->blue, value);
-
- gdk_pixbuf_render_to_drawable_alpha (progress->image, drawable,
- 0, 0,
- x, y,
- progress->width, progress->height,
- GDK_PIXBUF_ALPHA_BILEVEL,
- 128,
- GDK_RGB_DITHER_NORMAL,
- x, y);
-}
-
-static void
-eprog_set_value (ECellProgressView *progress_view, int model_col, int view_col, int row, int value)
-{
- ECell *ecell = progress_view->cell_view.ecell;
- ECellProgress *progress = E_CELL_PROGRESS (ecell);
-
- if (value > progress->max){
- value = progress->max;
- }else if (value < progress->min){
- value = progress->min;
- }
- e_table_model_set_value_at (progress_view->cell_view.e_table_model,
- model_col, row, GINT_TO_POINTER (value));
- eprog_queue_redraw (progress_view, view_col, row);
-}
-
-/*
- * ECell::event method
- */
-static gint
-eprog_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions)
-{
- ECellProgressView *progress_view = (ECellProgressView *) ecell_view;
- void *_value = e_table_model_value_at (ecell_view->e_table_model, model_col, row);
- const int value = GPOINTER_TO_INT (_value);
-
-#if 0
- if (!(flags & E_CELL_EDITING))
- return FALSE;
-#endif
-
- switch (event->type){
- case GDK_KEY_PRESS:
- if (event->key.keyval != GDK_space)
- return FALSE;
- /* Fall through */
- case GDK_BUTTON_PRESS:
- if (!e_table_model_is_cell_editable(ecell_view->e_table_model, model_col, row))
- return FALSE;
-
- eprog_set_value (progress_view, model_col, view_col, row, value + 1);
- return TRUE;
-
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-/*
- * ECell::height method
- */
-static int
-eprog_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- ECellProgress *progress = E_CELL_PROGRESS (ecell_view->ecell);
-
- return progress->height;
-}
-
-/*
- * ECell::max_width method
- */
-static int
-eprog_max_width (ECellView *ecell_view, int model_col, int view_col)
-{
- ECellProgress *progress = E_CELL_PROGRESS (ecell_view->ecell);
-
- return progress->width;
-}
-
-static void
-eprog_dispose (GObject *object)
-{
- ECellProgress *eprog = E_CELL_PROGRESS (object);
-
- gdk_pixbuf_unref (eprog->image);
- g_free (eprog->image);
- g_free (eprog->buffer);
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-e_cell_progress_class_init (GObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
-
- object_class->dispose = eprog_dispose;
-
- ecc->new_view = eprog_new_view;
- ecc->kill_view = eprog_kill_view;
- ecc->realize = eprog_realize;
- ecc->unrealize = eprog_unrealize;
- ecc->draw = eprog_draw;
- ecc->event = eprog_event;
- ecc->height = eprog_height;
- ecc->max_width = eprog_max_width;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-}
-
-E_MAKE_TYPE(e_cell_progress, "ECellProgress", ECellProgress, e_cell_progress_class_init, NULL, PARENT_TYPE);
-
-/**
- * e_cell_progress_construct:
- * @eprog: a fresh ECellProgress object
- * @padding: number of pixels used as a padding
- * @border: number of pixels used as a border
- * @min: the minimum value
- * @max: the maximum value
- * @width: the width of the progress bar in pixels
- * @height: the height of the progress bar in pixels
- * @red: the red component of the progress bars rgb color
- * @green: the green component of the progress bars rgb color
- * @blue: the blue component of the progress bars rgb color
- *
- * Constructs the @eprog object with the arguments
- */
-void
-e_cell_progress_construct (ECellProgress *eprog, int padding, int border, int min, int max, int width, int height, guchar red, guchar green, guchar blue)
-{
- eprog->padding = padding;
- eprog->border = border;
- eprog->min = min;
- eprog->max = max;
- eprog->red = red;
- eprog->green = green;
- eprog->blue = blue;
-
- eprog->width = (width<((padding+border)*2+5)) ? ((padding+border)*2+5) : width;
- eprog->height = (height<((padding+border)*2+5)) ? ((padding+border)*2+5) : height;
-
- eprog->buffer=g_new(guchar, eprog->width*eprog->height*4);
-
- eprog_clear(eprog);
- eprog_draw_border(eprog, red, green, blue);
-
- eprog->image = gdk_pixbuf_new_from_data (eprog->buffer,GDK_COLORSPACE_RGB, TRUE, 8, eprog->width, eprog->height, eprog->width*4, NULL, NULL);
-}
-
-/**
- * e_cell_progress_new:
- * @min: the minimum value
- * @max: the maximum value
- * @width: the width of the progress bar in pixels
- * @height: the height of the progress bar in pixels
- *
- * Creates a new ECell renderer that can be used to render progress
- * bars displaying the percentage of the current value between min
- * and max.
- *
- * Returns: an ECell object that can be used to render progress cells.
- */
-ECell *
-e_cell_progress_new (int min, int max, int width, int height)
-{
- ECellProgress *eprog = g_object_new (E_CELL_PROGRESS_TYPE, NULL);
-
- e_cell_progress_construct (eprog, 1, 1, min, max, (width<9) ? 9 : width, (height<9) ? 9 : height, 0x00, 0x00, 0x00);
-
- return (ECell *) eprog;
-}
-
-/**
- * e_cell_progress_set_padding:
- * @eprog: an ECellProgress object
- * @padding: number of pixels used as a padding
- *
- * Sets the padding around the progress bar in the cell.
- */
-void
-e_cell_progress_set_padding (ECellProgress *eprog, int padding)
-{
- eprog->padding = padding;
-
- eprog->width = (eprog->width<((padding+eprog->border)*2+5)) ? ((padding+eprog->border)*2+5) : eprog->width;
- eprog->height = (eprog->height<((padding+eprog->border)*2+5)) ? ((padding+eprog->border)*2+5) : eprog->height;
-
- g_free (eprog->buffer);
- eprog->buffer=g_new (guchar, eprog->width*eprog->height*4);
-
- eprog_clear (eprog);
- eprog_draw_border (eprog, eprog->red, eprog->green, eprog->blue);
-
- eprog->image = gdk_pixbuf_new_from_data (eprog->buffer,GDK_COLORSPACE_RGB, TRUE, 8, eprog->width, eprog->height, eprog->width*4, NULL, NULL);
-}
-
-/**
- * e_cell_progress_set_border:
- * @eprog: an ECellProgress object
- * @border: number of pixels used as a border
- *
- * Sets the border around the progress bar in the cell.
- */
-void
-e_cell_progress_set_border (ECellProgress *eprog, int border)
-{
- eprog->border = border;
-
- eprog->width = (eprog->width<((eprog->padding+border)*2+5)) ? ((eprog->padding+border)*2+5) : eprog->width;
- eprog->height = (eprog->height<((eprog->padding+border)*2+5)) ? ((eprog->padding+border)*2+5) : eprog->height;
-
- g_free (eprog->buffer);
- eprog->buffer=g_new (guchar, eprog->width*eprog->height*4);
-
- eprog_clear (eprog);
- eprog_draw_border (eprog, eprog->red, eprog->green, eprog->blue);
-
- eprog->image = gdk_pixbuf_new_from_data (eprog->buffer,GDK_COLORSPACE_RGB, TRUE, 8, eprog->width, eprog->height, eprog->width*4, NULL, NULL);
-}
-
-/**
- * e_cell_progress_set_color:
- * @eprog: a fresh ECellProgress object
- * @red: the red component of the progress bars rgb color
- * @green: the green component of the progress bars rgb color
- * @blue: the blue component of the progress bars rgb color
- */
-void
-e_cell_progress_set_color (ECellProgress *eprog, guchar red, guchar green, guchar blue)
-{
- eprog->red = red;
- eprog->green = green;
- eprog->blue = blue;
-
- eprog_clear (eprog);
- eprog_draw_border (eprog, red, green, blue);
-}
diff --git a/widgets/table/e-cell-progress.h b/widgets/table/e-cell-progress.h
deleted file mode 100644
index 01a0d0b504..0000000000
--- a/widgets/table/e-cell-progress.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-progress.h - Progress display cell object.
- * Copyright 1999-2002, Ximian, Inc.
- * Copyright 2001, 2002, Krisztian Pifko <monsta@users.sourceforge.net>
- *
- * Authors:
- * Krisztian Pifko <monsta@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_PROGRESS_H_
-#define _E_CELL_PROGRESS_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gal/e-table/e-cell.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_PROGRESS_TYPE (e_cell_progress_get_type ())
-#define E_CELL_PROGRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_PROGRESS_TYPE, ECellProgress))
-#define E_CELL_PROGRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_PROGRESS_TYPE, ECellProgressClass))
-#define E_IS_CELL_PROGRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_PROGRESS_TYPE))
-#define E_IS_CELL_PROGRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_PROGRESS_TYPE))
-
-typedef struct {
- ECell parent;
-
- int padding;
- int border;
- int min;
- int max;
- guchar red;
- guchar green;
- guchar blue;
-
- guchar *buffer;
- GdkPixbuf *image;
-
- int width;
- int height;
-} ECellProgress;
-
-typedef struct {
- ECellClass parent_class;
-} ECellProgressClass;
-
-GType e_cell_progress_get_type (void);
-ECell *e_cell_progress_new (int min, int max, int width, int height);
-void e_cell_progress_construct (ECellProgress *eprog, int padding, int border,
- int min, int max, int width, int height, guchar red, guchar green, guchar blue);
-void e_cell_progress_set_padding (ECellProgress *eprog, int padding);
-void e_cell_progress_set_border (ECellProgress *eprog, int border);
-void e_cell_progress_set_color (ECellProgress *eprog, guchar red, guchar green, guchar blue);
-
-G_END_DECLS
-
-#endif /* _E_CELL_PROGRESS_H_ */
-
-
diff --git a/widgets/table/e-cell-size.c b/widgets/table/e-cell-size.c
deleted file mode 100644
index 1ba8f6d2e6..0000000000
--- a/widgets/table/e-cell-size.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-size.c: Size item for e-table.
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <gal/util/e-util.h>
-#include "e-cell-size.h"
-
-#define PARENT_TYPE e_cell_text_get_type ()
-
-static ECellTextClass *parent_class;
-
-static char *
-ecd_get_text(ECellText *cell, ETableModel *model, int col, int row)
-{
- gint size = GPOINTER_TO_INT(e_table_model_value_at(model, col, row));
- gfloat fsize;
-
- if (size < 1024) {
- return g_strdup_printf ("%d bytes", size);
- } else {
- fsize = ((gfloat) size) / 1024.0;
- if (fsize < 1024.0) {
- return g_strdup_printf ("%d K", (int)fsize);
- } else {
- fsize /= 1024.0;
- return g_strdup_printf ("%.1f MB", fsize);
- }
- }
-}
-
-static void
-ecd_free_text(ECellText *cell, char *text)
-{
- g_free(text);
-}
-
-static void
-e_cell_size_class_init (GtkObjectClass *object_class)
-{
- ECellTextClass *ectc = (ECellTextClass *) object_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- ectc->get_text = ecd_get_text;
- ectc->free_text = ecd_free_text;
-}
-
-static void
-e_cell_size_init (GtkObject *object)
-{
-}
-
-/**
- * e_cell_size_new:
- * @fontname: font to be used to render on the screen
- * @justify: Justification of the string in the cell.
- *
- * Creates a new ECell renderer that can be used to render file sizes
- * that that come from the model. The value returned from the model
- * is interpreted as being a time_t.
- *
- * The ECellSize object support a large set of properties that can be
- * configured through the Gtk argument system and allows the user to
- * have a finer control of the way the string is displayed. The
- * arguments supported allow the control of strikeout, underline,
- * bold, color and a size filter.
- *
- * The arguments "strikeout_column", "underline_column", "bold_column"
- * and "color_column" set and return an integer that points to a
- * column in the model that controls these settings. So controlling
- * the way things are rendered is achieved by having special columns
- * in the model that will be used to flag whether the size should be
- * rendered with strikeout, underline, or bolded. In the case of the
- * "color_column" argument, the column in the model is expected to
- * have a string that can be parsed by gdk_color_parse().
- *
- * Returns: an ECell object that can be used to render file sizes. */
-ECell *
-e_cell_size_new (const char *fontname, GtkJustification justify)
-{
- ECellSize *ecd = g_object_new (E_CELL_SIZE_TYPE, NULL);
-
- e_cell_text_construct(E_CELL_TEXT(ecd), fontname, justify);
-
- return (ECell *) ecd;
-}
-
-E_MAKE_TYPE(e_cell_size, "ECellSize", ECellSize, e_cell_size_class_init, e_cell_size_init, PARENT_TYPE)
diff --git a/widgets/table/e-cell-size.h b/widgets/table/e-cell-size.h
deleted file mode 100644
index 744cc00a98..0000000000
--- a/widgets/table/e-cell-size.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-size.h: Size item for e-table.
- * Copyright 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-#ifndef _E_CELL_SIZE_H_
-#define _E_CELL_SIZE_H_
-
-#include <gal/e-table/e-cell-text.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_SIZE_TYPE (e_cell_size_get_type ())
-#define E_CELL_SIZE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_SIZE_TYPE, ECellSize))
-#define E_CELL_SIZE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_SIZE_TYPE, ECellSizeClass))
-#define E_IS_CELL_SIZE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_SIZE_TYPE))
-#define E_IS_CELL_SIZE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_SIZE_TYPE))
-
-typedef struct {
- ECellText base;
-} ECellSize;
-
-typedef struct {
- ECellTextClass parent_class;
-} ECellSizeClass;
-
-GType e_cell_size_get_type (void);
-ECell *e_cell_size_new (const char *fontname, GtkJustification justify);
-
-G_END_DECLS
-
-#endif /* _E_CELL_SIZE_H_ */
diff --git a/widgets/table/e-cell-spin-button.c b/widgets/table/e-cell-spin-button.c
deleted file mode 100644
index b2af02c44d..0000000000
--- a/widgets/table/e-cell-spin-button.c
+++ /dev/null
@@ -1,670 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-spin-button.c: Spin button item for e-table.
- * Copyright 2001, CodeFactory AB
- * Copyright 2001, Mikael Hallendal <micke@codefactory.se>
- *
- * Authors:
- * Mikael Hallendal <micke@codefactory.se>
- *
- * Celltype for drawing a spinbutton in a cell.
- *
- * Used ECellPopup by Damon Chaplin <damon@ximian.com> as base for
- * buttondrawings.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtksignal.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-cell-float.h>
-#include <gal/e-table/e-cell-number.h>
-#include <gal/util/e-util.h>
-#include "e-cell-spin-button.h"
-
-#define E_CELL_SPIN_BUTTON_ARROW_WIDTH 16
-#define PARENT_TYPE e_cell_get_type ()
-
-static void e_cell_spin_button_class_init (GObjectClass *klass);
-static void e_cell_spin_button_init (GtkObject *object);
-
-static void ecsb_dispose (GObject *object);
-
-/* ECell Functions */
-static ECellView * ecsb_new_view (ECell *ecell,
- ETableModel *etm,
- void *eti_view);
-static void ecsb_realize (ECellView *ecv);
-static void ecsb_kill_view (ECellView *ecv);
-static void ecsb_unrealize (ECellView *ecv);
-static void ecsb_draw (ECellView *ecv,
- GdkDrawable *drawable,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- int x1,
- int y1,
- int x2,
- int y2);
-
-static gint ecsb_event (ECellView *ecv,
- GdkEvent *event,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- ECellActions *actions);
-
-static gint ecsb_height (ECellView *ecv,
- int model_col,
- int view_col,
- int row);
-
-static void * ecsb_enter_edit (ECellView *ecv,
- int model_col,
- int view_col,
- int row);
-
-static void ecsb_leave_edit (ECellView *ecv,
- int model_col,
- int view_col,
- int row,
- void *context);
-static void ecsb_focus (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- int x1,
- int y1,
- int x2,
- int y2);
-static void ecsb_unfocus (ECellView *ecell_view);
-
-static void ecsb_show_tooltip (ECellView *ecv,
- int model_col,
- int view_col,
- int row,
- int col_width,
- ETableTooltip *tooltip);
-
-typedef struct {
- ECellView cell_view;
-
- ECellView *child_view;
-} ECellSpinButtonView;
-
-enum {
- STEP,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-static ECell *parent_class;
-
-static void
-e_cell_spin_button_class_init (GObjectClass *klass)
-{
- ECellClass *ecc = (ECellClass *) klass;
- ECellSpinButtonClass *ecsbc = (ECellSpinButtonClass *) klass;
-
- klass->dispose = ecsb_dispose;
-
- ecc->realize = ecsb_realize;
- ecc->unrealize = ecsb_unrealize;
- ecc->new_view = ecsb_new_view;
- ecc->kill_view = ecsb_kill_view;
- ecc->draw = ecsb_draw;
- ecc->event = ecsb_event;
- ecc->height = ecsb_height;
- ecc->enter_edit = ecsb_enter_edit;
- ecc->leave_edit = ecsb_leave_edit;
- ecc->focus = ecsb_focus;
- ecc->unfocus = ecsb_unfocus; ecc->print = NULL;
- ecc->print_height = NULL;
- ecc->max_width = NULL;
- ecc->show_tooltip = ecsb_show_tooltip;
-
- ecsbc->step = NULL;
-
- parent_class = g_type_class_ref (E_CELL_TYPE);
-
- signals[STEP] =
- g_signal_new ("step",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECellSpinButtonClass, step),
- NULL, NULL,
- e_marshal_NONE__POINTER_INT_INT_INT,
- G_TYPE_NONE,
- 4, G_TYPE_POINTER, G_TYPE_INT,
- G_TYPE_INT, G_TYPE_INT);
-}
-
-static void
-e_cell_spin_button_init (GtkObject *object)
-{
- ECellSpinButton *ecsb;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (M_IS_CELL_SPIN_BUTTON (object));
-
- ecsb = E_CELL_SPIN_BUTTON (object);
-
- ecsb->up_pressed = FALSE;
- ecsb->down_pressed = FALSE;
-}
-
-static ECellView *
-ecsb_new_view (ECell *ecell,
- ETableModel *etm,
- void *eti_view)
-{
- ECellSpinButton *ecsb = E_CELL_SPIN_BUTTON (ecell);
- ECellSpinButtonView *ecsb_view;
-
- g_return_val_if_fail (ecsb->child != NULL, NULL);
-
- ecsb_view = g_new0 (ECellSpinButtonView, 1);
-
- ecsb_view->cell_view.ecell = ecell;
- ecsb_view->cell_view.e_table_model = etm;
- ecsb_view->cell_view.e_table_item_view = eti_view;
-
- ecsb_view->child_view = e_cell_new_view (ecsb->child, etm, eti_view);
-
- return (ECellView *) ecsb_view;
-}
-
-static void
-ecsb_realize (ECellView *ecv)
-{
- ECellSpinButtonView *ecsb_view;
-
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
-
- e_cell_realize (ecsb_view->child_view);
-}
-
-static void
-ecsb_kill_view (ECellView *ecv)
-{
- ECellSpinButtonView *ecsb_view;
-
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
-
- if (ecsb_view->child_view) {
- e_cell_kill_view (ecsb_view->child_view);
- }
-
- g_free (ecsb_view);
-}
-
-static void
-ecsb_unrealize (ECellView *ecv)
-{
- ECellSpinButtonView *ecsb_view;
-
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
-
- e_cell_unrealize (ecsb_view->child_view);
-}
-
-static void
-ecsb_draw (ECellView *ecv,
- GdkDrawable *drawable,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- int x1,
- int y1,
- int x2,
- int y2)
-{
- ECellSpinButton *ecsb;
- ECellSpinButtonView *ecsb_view;
- ETableItem *eti;
- GtkWidget *canvas;
- GtkShadowType shadow = GTK_SHADOW_OUT;
- GdkRectangle rect;
-
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
- ecsb = E_CELL_SPIN_BUTTON (ecsb_view->cell_view.ecell);
-
- eti = E_TABLE_ITEM (ecsb_view->cell_view.e_table_item_view);
- canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (eti)->canvas);
-
- if (eti->editing_col == view_col &&
- eti->editing_row == row) {
-
- /* Draw child (Whats shown under the buttons) */
- e_cell_draw (ecsb_view->child_view,
- drawable, model_col, view_col,
- row, flags,
- x1, y1,
- x2 - E_CELL_SPIN_BUTTON_ARROW_WIDTH, y2);
-
- /* Draw down-arrow */
- rect.x = x2 - E_CELL_SPIN_BUTTON_ARROW_WIDTH;
- rect.y = y1 + (y2 - y1) / 2;
- rect.width = E_CELL_SPIN_BUTTON_ARROW_WIDTH;
- rect.height = (y2 - y1) / 2;
-
- if (ecsb->down_pressed) {
- shadow = GTK_SHADOW_IN;
- } else {
- shadow = GTK_SHADOW_OUT;
- }
-
- gtk_paint_box (canvas->style, drawable,
- GTK_STATE_NORMAL, shadow,
- &rect, canvas, "ecellspinbutton_down",
- rect.x, rect.y, rect.width, rect.height);
-
- gtk_paint_arrow (canvas->style, drawable,
- GTK_STATE_NORMAL, GTK_SHADOW_NONE,
- &rect, canvas, NULL,
- GTK_ARROW_DOWN, TRUE,
- rect.x,
- rect.y,
- rect.width,
- rect.height);
-
- /* Draw up-arrow */
- rect.y = y1;
-
- if (ecsb->up_pressed) {
- shadow = GTK_SHADOW_IN;
- } else {
- shadow = GTK_SHADOW_OUT;
- }
-
- gtk_paint_box (canvas->style, drawable,
- GTK_STATE_NORMAL, shadow,
- &rect, canvas, "ecellspinbutton_up",
- rect.x, rect.y, rect.width, rect.height);
-
- gtk_paint_arrow (canvas->style, drawable,
- GTK_STATE_NORMAL, GTK_SHADOW_NONE,
- &rect, canvas, NULL,
- GTK_ARROW_UP, TRUE,
- rect.x,
- rect.y,
- rect.width,
- rect.height);
- } else {
- /* Draw child */
- e_cell_draw (ecsb_view->child_view,
- drawable, model_col, view_col,
- row, flags,
- x1, y1,
- x2, y2);
- }
-}
-
-static gint
-ecsb_event (ECellView *ecv,
- GdkEvent *event,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- ECellActions *actions)
-{
- ECellSpinButton *ecsb;
- ECellSpinButtonClass *ecsb_class;
- ECellSpinButtonView *ecsb_view;
- ETableItem *eti;
- gint height, width;
-
- g_return_val_if_fail (ecv != NULL, FALSE);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
- ecsb = E_CELL_SPIN_BUTTON (ecsb_view->cell_view.ecell);
- ecsb_class = E_CELL_SPIN_BUTTON_CLASS (GTK_OBJECT_GET_CLASS (ecsb));
- eti = E_TABLE_ITEM (ecsb_view->cell_view.e_table_item_view);
-
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- if (eti->editing_col == view_col &&
- eti->editing_row == row) {
- width = e_table_header_col_diff (eti->header,
- view_col,
- view_col + 1);
- height = e_table_item_row_diff (eti, row, row + 1);
-
- /* Check if inside a button */
- if (event->button.x >= width - E_CELL_SPIN_BUTTON_ARROW_WIDTH) {
- /* Yep, which one? */
- if (event->button.y <= height / 2) {
- ecsb->up_pressed = TRUE;
- g_signal_emit (ecsb,
- signals[STEP], 0,
- ecv,
- STEP_UP,
- view_col,
- row);
- } else {
- ecsb->down_pressed = TRUE;
- g_signal_emit (ecsb,
- signals[STEP], 0,
- ecv,
- STEP_DOWN,
- view_col,
- row);
- }
-
- e_table_item_redraw_range (eti,
- view_col,
- row,
- view_col,
- row);
-
- }
- }
-
- break;
- case GDK_BUTTON_RELEASE:
- ecsb->up_pressed = FALSE;
- ecsb->down_pressed = FALSE;
- e_table_item_redraw_range (eti,
- view_col,
- row,
- view_col,
- row);
- break;
- case GDK_KEY_PRESS:
- break;
- default:
- break;
- }
-
- return e_cell_event (ecsb_view->child_view, event, model_col,
- view_col, row, flags, actions);
-}
-
-static gint
-ecsb_height (ECellView *ecv,
- int model_col,
- int view_col,
- int row)
-{
- ECellSpinButtonView *ecsb_view;
-
- g_return_val_if_fail (ecv != NULL, -1);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
-
- return e_cell_height (ecsb_view->child_view, model_col, view_col, row);
-}
-
-static void *
-ecsb_enter_edit (ECellView *ecv,
- int model_col,
- int view_col,
- int row)
-{
- ECellSpinButtonView *ecsb_view;
-
- g_return_val_if_fail (ecv != NULL, NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
-
- return e_cell_enter_edit (ecsb_view->child_view, model_col,
- view_col, row);
-}
-
-
-static void
-ecsb_leave_edit (ECellView *ecv,
- int model_col,
- int view_col,
- int row,
- void *context)
-{
- ECellSpinButtonView *ecsb_view;
-
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
-
- e_cell_leave_edit (ecsb_view->child_view, model_col, view_col,
- row, context);
-}
-
-static void
-ecsb_focus (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- int x1,
- int y1,
- int x2,
- int y2)
-{
- ECellClass *klass;
- ECellSpinButtonView *ecsb_view;
-
- ecsb_view = (ECellSpinButtonView *) ecell_view;
-
- klass = E_CELL_GET_CLASS (ecell_view->ecell);
-
- if (klass->focus)
- klass->focus (ecell_view, model_col, view_col, row,
- x1, y1, x2, y2);
-}
-
-static void
-ecsb_unfocus (ECellView *ecell_view)
-{
- ECellClass *klass;
- ECellSpinButtonView *ecsb_view;
-
- ecsb_view = (ECellSpinButtonView *) ecell_view;
- klass = E_CELL_GET_CLASS (ecell_view->ecell);
-
- if (klass->unfocus)
- klass->unfocus (ecell_view);
-}
-
-static void
-ecsb_show_tooltip (ECellView *ecv,
- int model_col,
- int view_col,
- int row,
- int col_width,
- ETableTooltip *tooltip)
-{
- ECellSpinButtonView *ecsb_view;
-
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
-
- e_cell_show_tooltip (ecsb_view->child_view, model_col, view_col,
- row, col_width, tooltip);
-}
-
-static void
-ecsb_dispose (GObject *object)
-{
- ECellSpinButton *mcsp;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (M_IS_CELL_SPIN_BUTTON (object));
-
- mcsp = E_CELL_SPIN_BUTTON (object);
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-ECell *
-e_cell_spin_button_new (gint min,
- gint max,
- gint step,
- ECell *child_cell)
-{
- ECellSpinButton *ecsb;
-
- ecsb = g_object_new (E_CELL_SPIN_BUTTON_TYPE, NULL);
-
- if (!child_cell) {
- child_cell = e_cell_number_new (NULL,
- GTK_JUSTIFY_LEFT);
-
- g_signal_connect (ecsb, "step",
- G_CALLBACK (e_cell_spin_button_step),
- NULL);
- }
-
- ecsb->child = child_cell;
- ecsb->min.i = min;
- ecsb->max.i = max;
- ecsb->step.i = step;
-
- return E_CELL (ecsb);
-}
-
-ECell *
-e_cell_spin_button_new_float (gfloat min,
- gfloat max,
- gfloat step,
- ECell *child_cell)
-{
- ECellSpinButton *ecsb;
-
- ecsb = g_object_new (E_CELL_SPIN_BUTTON_TYPE, NULL);
-
- if (!child_cell) {
- child_cell = e_cell_float_new (NULL, GTK_JUSTIFY_LEFT);
- g_signal_connect (ecsb, "step",
- G_CALLBACK (e_cell_spin_button_step_float),
- NULL);
- }
-
- ecsb->child = child_cell;
- ecsb->min.f = min;
- ecsb->max.f = max;
- ecsb->step.f = step;
-
- return E_CELL (ecsb);
-}
-
-void
-e_cell_spin_button_step (ECellSpinButton *ecsb,
- ECellView *ecv,
- ECellSpinButtonStep direction,
- gint col,
- gint row)
-{
- ECellSpinButtonView *ecsb_view;
-
- ETableModel *etm;
- gint value;
- gint new_value;
- gchar *str_value;
-
- g_return_if_fail (ecsb != NULL);
- g_return_if_fail (M_IS_CELL_SPIN_BUTTON (ecsb));
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
- etm = ecsb_view->cell_view.e_table_model;
-
- value = GPOINTER_TO_INT (e_table_model_value_at (etm, col, row));
- new_value = value;
-
- switch (direction) {
- case STEP_UP:
- new_value = CLAMP (value + ecsb->step.i,
- ecsb->min.i, ecsb->max.i);
- break;
- case STEP_DOWN:
- new_value = CLAMP (value - ecsb->step.i,
- ecsb->min.i, ecsb->max.i);
- break;
- default:
- break;
- };
-
- str_value = g_strdup_printf ("%d", new_value);
-
- e_table_model_set_value_at (etm, col, row, str_value);
-
- g_free (str_value);
-}
-
-void
-e_cell_spin_button_step_float (ECellSpinButton *ecsb,
- ECellView *ecv,
- ECellSpinButtonStep direction,
- gint col,
- gint row)
-{
- ECellSpinButtonView *ecsb_view;
-
- ETableModel *etm;
- gfloat value;
- gfloat new_value;
- gchar *str_value;
-
- g_return_if_fail (ecsb != NULL);
- g_return_if_fail (M_IS_CELL_SPIN_BUTTON (ecsb));
- g_return_if_fail (ecv != NULL);
-
- ecsb_view = (ECellSpinButtonView *) ecv;
- etm = ecsb_view->cell_view.e_table_model;
-
- value = *(gfloat *) e_table_model_value_at (etm, col, row);
-
- switch (direction) {
- case STEP_UP:
- new_value = CLAMP (value + ecsb->step.f,
- ecsb->min.f, ecsb->max.f);
- break;
- case STEP_DOWN:
- new_value = CLAMP (value - ecsb->step.f,
- ecsb->min.f, ecsb->max.f);
- break;
- default:
- new_value = value;
- break;
- };
-
- str_value = g_strdup_printf ("%f", new_value);
-
- e_table_model_set_value_at (etm, col, row, str_value);
-
- g_free (str_value);
-}
-
-E_MAKE_TYPE (e_cell_spin_button, "ECellSpinButton", ECellSpinButton,
- e_cell_spin_button_class_init, e_cell_spin_button_init,
- PARENT_TYPE)
-
diff --git a/widgets/table/e-cell-spin-button.h b/widgets/table/e-cell-spin-button.h
deleted file mode 100644
index 4326c0429c..0000000000
--- a/widgets/table/e-cell-spin-button.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-spin-button.h: Spin button item for e-table.
- * Copyright 2001, CodeFactory AB
- * Copyright 2001, Mikael Hallendal <micke@codefactory.se>
- *
- * Authors:
- * Mikael Hallendal <micke@codefactory.se>
- *
- * Celltype for drawing a spinbutton in a cell.
- *
- * Used ECellPopup by Damon Chaplin <damon@ximian.com> as base for
- * buttondrawings.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_CELL_SPIN_BUTTON_H__
-#define __E_CELL_SPIN_BUTTON_H__
-
-#include <glib.h>
-#include <gtk/gtktypeutils.h>
-#include <gal/e-table/e-cell.h>
-
-#define E_CELL_SPIN_BUTTON_TYPE (e_cell_spin_button_get_type ())
-#define E_CELL_SPIN_BUTTON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_SPIN_BUTTON_TYPE, ECellSpinButton))
-#define E_CELL_SPIN_BUTTON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_SPIN_BUTTON_TYPE, ECellSpinButtonClass))
-#define M_IS_CELL_SPIN_BUTTON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_SPIN_BUTTON_TYPE))
-#define M_IS_CELL_SPIN_BUTTON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_SPIN_BUTTON_TYPE))
-
-typedef union {
- gint i;
- gfloat f;
-} ECellSpinButtonData;
-
-typedef enum {
- STEP_UP,
- STEP_DOWN
-} ECellSpinButtonStep;
-
-typedef struct {
- ECell parent;
-
- ECell *child;
-
- ECellSpinButtonData min;
- ECellSpinButtonData max;
- ECellSpinButtonData step;
-
- gboolean up_pressed;
- gboolean down_pressed;
-
-} ECellSpinButton;
-
-typedef struct {
- ECellClass parent_class;
-
- /* Functions */
- void (*step) (ECellSpinButton *mcsb,
- ECellView *ecv,
- ECellSpinButtonStep direction,
- gint col,
- gint row);
-} ECellSpinButtonClass;
-
-GType e_cell_spin_button_get_type (void);
-ECell * e_cell_spin_button_new (gint min,
- gint max,
- gint step,
- ECell *child_cell);
-
-ECell * e_cell_spin_button_new_float (gfloat min,
- gfloat max,
- gfloat step,
- ECell *child_cell);
-
-
-void e_cell_spin_button_step (ECellSpinButton *mcsb,
- ECellView *ecv,
- ECellSpinButtonStep direction,
- gint col,
- gint row);
-
-void e_cell_spin_button_step_float (ECellSpinButton *mcsb,
- ECellView *ecv,
- ECellSpinButtonStep direction,
- gint col,
- gint row);
-
-#endif /* __E_CELL_SPIN_BUTTON__ */
-
diff --git a/widgets/table/e-cell-text.c b/widgets/table/e-cell-text.c
deleted file mode 100644
index ecb9117e1c..0000000000
--- a/widgets/table/e-cell-text.c
+++ /dev/null
@@ -1,2780 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-text.c: Text cell renderer.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Chris Lahey <clahey@ximian.com>
- *
- * A lot of code taken from:
- *
- * Text item type for GnomeCanvas widget
- *
- * GnomeCanvas is basically a port of the Tk toolkit's most excellent
- * canvas widget. Tk is copyrighted by the Regents of the University
- * of California, Sun Microsystems, and other parties.
- *
- * Copyright (C) 1998 The Free Software Foundation
- *
- * Author: Federico Mena <federico@nuclecu.unam.mx>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <math.h>
-#include <string.h>
-#include <gdk/gdkx.h> /* for BlackPixel */
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include "e-cell-text.h"
-#include "gal/util/e-util.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-unicode.h"
-#include "e-table-item.h"
-#include "gal/util/e-text-event-processor.h"
-#include "gal/e-text/e-text.h"
-#include "gal/util/e-text-event-processor-emacs-like.h"
-#include "gal/util/e-i18n.h"
-#include "e-table-tooltip.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-registry.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-text.h"
-
-#define d(x)
-#define DO_SELECTION 1
-
-#if d(!)0
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)), g_print ("%s: e_table_item_leave_edit\n", __FUNCTION__))
-#else
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)))
-#endif
-
-#define ECT_CLASS(c) (E_CELL_TEXT_CLASS(GTK_OBJECT_GET_CLASS ((c))))
-
-/* This defines a line of text */
-struct line {
- char *text; /* Line's text UTF-8, it is a pointer into the text->text string */
- int length; /* Line's length in BYTES */
- int width; /* Line's width in pixels */
- int ellipsis_length; /* Length before adding ellipsis in BYTES */
-};
-
-/* Object argument IDs */
-enum {
- PROP_0,
-
- PROP_STRIKEOUT_COLUMN,
- PROP_UNDERLINE_COLUMN,
- PROP_BOLD_COLUMN,
- PROP_COLOR_COLUMN,
- PROP_EDITABLE,
- PROP_BG_COLOR_COLUMN
-};
-
-
-enum {
- E_SELECTION_PRIMARY,
- E_SELECTION_CLIPBOARD
-};
-
-static GdkAtom clipboard_atom = GDK_NONE;
-
-#define PARENT_TYPE e_cell_get_type ()
-
-#define UTF8_ATOM gdk_atom_intern ("UTF8_STRING", FALSE)
-
-#define TEXT_PAD 4
-
-typedef struct {
- gpointer lines; /* Text split into lines (private field) */
- int num_lines; /* Number of lines of text */
- int max_width;
- int ref_count;
-} ECellTextLineBreaks;
-
-
-typedef struct _CellEdit CellEdit;
-
-typedef struct {
- ECellView cell_view;
- GdkGC *gc;
- GdkCursor *i_cursor;
- GdkBitmap *stipple; /* Stipple for text */
-
- GnomeCanvas *canvas;
-
- /*
- * During editing.
- */
- CellEdit *edit;
-
-
- int xofs, yofs; /* This gets added to the x
- and y for the cell text. */
- double ellipsis_width[2]; /* The width of the ellipsis. */
-
-} ECellTextView;
-
-struct _CellEdit {
-
- ECellTextView *text_view;
-
- int model_col, view_col, row;
- int cell_width;
-
- PangoLayout *layout;
-
- char *text;
-
- char *old_text;
-
- /*
- * Where the editing is taking place
- */
-
- int xofs_edit, yofs_edit; /* Offset because of editing.
- This is negative compared
- to the other offsets. */
-
- /* This needs to be reworked a bit once we get line wrapping. */
- int selection_start; /* Start of selection - IN BYTES */
- int selection_end; /* End of selection - IN BYTES */
- gboolean select_by_word; /* Current selection is by word */
-
- /* This section is for drag scrolling and blinking cursor. */
- /* Cursor handling. */
- gint timeout_id; /* Current timeout id for scrolling */
- GTimer *timer; /* Timer for blinking cursor and scrolling */
-
- gint lastx, lasty; /* Last x and y motion events */
- gint last_state; /* Last state */
- gulong scroll_start; /* Starting time for scroll (microseconds) */
-
- gint show_cursor; /* Is cursor currently shown */
- gboolean button_down; /* Is mouse button 1 down */
-
- ETextEventProcessor *tep; /* Text Event Processor */
-
- GtkWidget *invisible; /* For selection handling */
- gboolean has_selection; /* TRUE if we have the selection */
- gchar *primary_selection; /* Primary selection text */
- gint primary_length; /* Primary selection text length in BYTES */
- gchar *clipboard_selection; /* Clipboard selection text */
- gint clipboard_length; /* Clipboard selection text length in BYTES */
-
- guint pointer_in : 1;
- guint default_cursor_shown : 1;
- GtkIMContext *im_context;
- gboolean need_im_reset;
- gboolean im_context_signals_registered;
-
- guint16 preedit_length; /* length of preedit string, in bytes */
-
- ECellActions actions;
-};
-
-static void e_cell_text_view_command (ETextEventProcessor *tep, ETextEventProcessorCommand *command, gpointer data);
-
-static void e_cell_text_view_get_selection (CellEdit *edit, GdkAtom selection, guint32 time);
-static void e_cell_text_view_supply_selection (CellEdit *edit, guint time, GdkAtom selection, char *data, gint length);
-
-static void _get_tep (CellEdit *edit);
-
-static gint get_position_from_xy (CellEdit *edit, gint x, gint y);
-static gboolean _blink_scroll_timeout (gpointer data);
-
-static void ect_free_color (gchar *color_spec, GdkColor *color, GdkColormap *colormap);
-static GdkColor* e_cell_text_get_color (ECellTextView *cell_view, gchar *color_spec);
-static void e_cell_text_preedit_changed_cb (GtkIMContext *context, ECellTextView *text_view);
-static void e_cell_text_commit_cb (GtkIMContext *context, const gchar *str, ECellTextView *text_view);
-static gboolean e_cell_text_retrieve_surrounding_cb (GtkIMContext *context, ECellTextView *text_view);
-static gboolean e_cell_text_delete_surrounding_cb (GtkIMContext *context, gint offset, gint n_chars, ECellTextView *text_view);
-static void _insert (ECellTextView *text_view, char *string, int value);
-static void _delete_selection (ECellTextView *text_view);
-static PangoAttrList* build_attr_list (ECellTextView *text_view, int row, int text_length);
-
-static ECellClass *parent_class;
-
-char *
-e_cell_text_get_text (ECellText *cell, ETableModel *model, int col, int row)
-{
- if (ECT_CLASS(cell)->get_text)
- return ECT_CLASS(cell)->get_text (cell, model, col, row);
- else
- return NULL;
-}
-
-void
-e_cell_text_free_text (ECellText *cell, char *text)
-{
- if (ECT_CLASS(cell)->free_text)
- ECT_CLASS(cell)->free_text (cell, text);
-}
-
-void
-e_cell_text_set_value (ECellText *cell, ETableModel *model, int col, int row,
- const char *text)
-{
- if (ECT_CLASS(cell)->set_value)
- ECT_CLASS(cell)->set_value (cell, model, col, row, text);
-}
-
-static char *
-ect_real_get_text (ECellText *cell, ETableModel *model, int col, int row)
-{
- return e_table_model_value_at(model, col, row);
-}
-
-static void
-ect_real_free_text (ECellText *cell, char *text)
-{
-}
-
-/* This is the default method for setting the ETableModel value based on
- the text in the ECellText. This simply uses the text as it is - it assumes
- the value in the model is a char*. Subclasses may parse the text into
- data structures to pass to the model. */
-static void
-ect_real_set_value (ECellText *cell, ETableModel *model, int col, int row,
- const char *text)
-{
- e_table_model_set_value_at (model, col, row, text);
-}
-
-static void
-ect_queue_redraw (ECellTextView *text_view, int view_col, int view_row)
-{
- e_table_item_redraw_range (
- text_view->cell_view.e_table_item_view,
- view_col, view_row, view_col, view_row);
-}
-
-/*
- * Shuts down the editing process
- */
-static void
-ect_stop_editing (ECellTextView *text_view, gboolean commit)
-{
- CellEdit *edit = text_view->edit;
- int row, view_col, model_col;
- char *old_text, *text;
-
- if (!edit)
- return;
-
- row = edit->row;
- view_col = edit->view_col;
- model_col = edit->model_col;
-
- old_text = edit->old_text;
- text = edit->text;
- if (edit->invisible)
- gtk_widget_destroy (edit->invisible);
- if (edit->tep)
- g_object_unref (edit->tep);
- if (edit->primary_selection)
- g_free (edit->primary_selection);
- if (edit->clipboard_selection)
- g_free (edit->clipboard_selection);
- if (! edit->default_cursor_shown){
- gdk_window_set_cursor (GTK_WIDGET(text_view->canvas)->window, NULL);
- edit->default_cursor_shown = TRUE;
- }
- if (edit->timeout_id) {
- g_source_remove (edit->timeout_id);
- edit->timeout_id = 0;
- }
- if (edit->timer) {
- g_timer_stop (edit->timer);
- g_timer_destroy (edit->timer);
- edit->timer = NULL;
- }
-
- g_signal_handlers_disconnect_matched (
- edit->im_context,
- G_SIGNAL_MATCH_DATA, 0, 0,
- NULL, NULL, text_view);
-
- if (edit->layout)
- g_object_unref (edit->layout);
-
- g_free (edit);
-
- text_view->edit = NULL;
- if (commit) {
- /*
- * Accept the currently edited text. if it's the same as what's in the cell, do nothing.
- */
- ECellView *ecell_view = (ECellView *) text_view;
- ECellText *ect = (ECellText *) ecell_view->ecell;
-
- if (strcmp (old_text, text)) {
- e_cell_text_set_value (ect, ecell_view->e_table_model,
- model_col, row, text);
- }
- }
- g_free (text);
- g_free (old_text);
-
- ect_queue_redraw (text_view, view_col, row);
-}
-
-/*
- * Cancels the edits
- */
-static void
-ect_cancel_edit (ECellTextView *text_view)
-{
- ect_stop_editing (text_view, FALSE);
- e_table_item_leave_edit_ (text_view->cell_view.e_table_item_view);
-}
-
-/*
- * ECell::new_view method
- */
-static ECellView *
-ect_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- ECellTextView *text_view = g_new0 (ECellTextView, 1);
- GnomeCanvas *canvas = GNOME_CANVAS_ITEM (e_table_item_view)->canvas;
-
- text_view->cell_view.ecell = ecell;
- text_view->cell_view.e_table_model = table_model;
- text_view->cell_view.e_table_item_view = e_table_item_view;
-
- text_view->canvas = canvas;
-
- text_view->xofs = 0.0;
- text_view->yofs = 0.0;
-
- return (ECellView *)text_view;
-}
-
-/*
- * ECell::kill_view method
- */
-static void
-ect_kill_view (ECellView *ecv)
-{
- ECellTextView *text_view = (ECellTextView *) ecv;
-
- g_free (text_view);
-}
-
-/*
- * ECell::realize method
- */
-static void
-ect_realize (ECellView *ecell_view)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
-
- text_view->gc = gdk_gc_new (GTK_WIDGET (text_view->canvas)->window);
-
- text_view->i_cursor = gdk_cursor_new (GDK_XTERM);
-
- if (parent_class->realize)
- (* parent_class->realize) (ecell_view);
-}
-
-/*
- * ECell::unrealize method
- */
-static void
-ect_unrealize (ECellView *ecv)
-{
- ECellTextView *text_view = (ECellTextView *) ecv;
- ECellText *ect = (ECellText*) ecv->ecell;
- GdkColormap *colormap;
-
- gdk_gc_unref (text_view->gc);
- text_view->gc = NULL;
-
- if (text_view->edit){
- ect_cancel_edit (text_view);
- }
-
- if (text_view->stipple)
- gdk_bitmap_unref (text_view->stipple);
-
- gdk_cursor_destroy (text_view->i_cursor);
-
- if (ect->colors) {
- colormap = gtk_widget_get_colormap (GTK_WIDGET (text_view->canvas));
- g_hash_table_foreach (ect->colors, (GHFunc) ect_free_color,
- colormap);
- g_hash_table_destroy (ect->colors);
- ect->colors = NULL;
- }
-
- if (parent_class->unrealize)
- (* parent_class->unrealize) (ecv);
-}
-
-static void
-ect_free_color (gchar *color_spec, GdkColor *color, GdkColormap *colormap)
-{
- g_free (color_spec);
-
- /* This frees the color. Note we don't free it if it is the special
- value. */
- if (color != (GdkColor*) 1) {
- gulong pix = color->pixel;
-
- gdk_colors_free (colormap, &pix, 1, 0);
-
- /* This frees the memory for the GdkColor. */
- gdk_color_free (color);
- }
-}
-
-
-static PangoAttrList*
-build_attr_list (ECellTextView *text_view, int row, int text_length)
-{
-
- ECellView *ecell_view = (ECellView *) text_view;
- ECellText *ect = E_CELL_TEXT (ecell_view->ecell);
- PangoAttrList *attrs = pango_attr_list_new ();
- gboolean bold, strikeout, underline;
-
- bold = ect->bold_column >= 0 &&
- row >= 0 &&
- e_table_model_value_at(ecell_view->e_table_model, ect->bold_column, row);
- strikeout = ect->strikeout_column >= 0 &&
- row >= 0 &&
- e_table_model_value_at(ecell_view->e_table_model, ect->strikeout_column, row);
- underline = ect->underline_column >= 0 &&
- row >= 0 &&
- e_table_model_value_at(ecell_view->e_table_model, ect->underline_column, row);
-
- if (bold || strikeout || underline) {
- if (bold) {
- PangoAttribute *attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
- attr->start_index = 0;
- attr->end_index = text_length;
-
- pango_attr_list_insert_before (attrs, attr);
- }
- if (strikeout) {
- PangoAttribute *attr = pango_attr_strikethrough_new (TRUE);
- attr->start_index = 0;
- attr->end_index = text_length;
-
- pango_attr_list_insert_before (attrs, attr);
- }
- if (underline) {
- PangoAttribute *attr = pango_attr_underline_new (TRUE);
- attr->start_index = 0;
- attr->end_index = text_length;
-
- pango_attr_list_insert_before (attrs, attr);
- }
- }
- return attrs;
-}
-
-static PangoLayout *
-layout_with_preedit (ECellTextView *text_view, int row, const char *text, gint width)
-{
- CellEdit *edit = text_view->edit;
- PangoAttrList *attrs ;
- PangoLayout *layout;
- GString *tmp_string = g_string_new (NULL);
- PangoAttrList *preedit_attrs = NULL;
- gchar *preedit_string = NULL;
- gint preedit_length = 0;
- gint text_length = strlen (text);
- gint mlen = MIN(edit->selection_start,text_length);
-
-
- gtk_im_context_get_preedit_string (edit->im_context,
- &preedit_string,&preedit_attrs,
- NULL);
- preedit_length = edit->preedit_length = strlen (preedit_string);;
-
- layout = edit->layout;
-
- g_string_prepend_len (tmp_string, text,text_length);
-
- if (preedit_length) {
-
- /* mlen is the text_length in bytes, not chars
- * check whether we are not inserting into
- * the middle of a utf8 character
- */
-
- if (mlen < text_length) {
- if (!g_utf8_validate (text+mlen, -1, NULL)) {
- gchar *tc;
- tc = g_utf8_find_next_char (text+mlen,NULL);
- if (tc) {
- mlen = (gint) (tc - text);
- }
- }
- }
-
- g_string_insert (tmp_string, mlen, preedit_string);
- }
-
- pango_layout_set_text (layout, tmp_string->str, tmp_string->len);
-
- attrs = (PangoAttrList *) build_attr_list (text_view, row, text_length);
-
- if (preedit_length)
- pango_attr_list_splice (attrs, preedit_attrs, mlen, preedit_length);
- pango_layout_set_attributes (layout, attrs);
- g_string_free (tmp_string, TRUE);
- if (preedit_string)
- g_free (preedit_string);
- if (preedit_attrs)
- pango_attr_list_unref (preedit_attrs);
- pango_attr_list_unref (attrs);
- return layout;
-}
-
-static PangoLayout *
-build_layout (ECellTextView *text_view, int row, const char *text, gint width)
-{
- ECellView *ecell_view = (ECellView *) text_view;
- ECellText *ect = E_CELL_TEXT (ecell_view->ecell);
- PangoAttrList *attrs ;
- PangoLayout *layout;
-
- layout = gtk_widget_create_pango_layout (GTK_WIDGET (((GnomeCanvasItem *)ecell_view->e_table_item_view)->canvas), text);
-
- attrs = (PangoAttrList *) build_attr_list (text_view, row, text ? strlen (text) : 0);
-
- pango_layout_set_attributes (layout, attrs);
- pango_attr_list_unref (attrs);
-
- if (text_view->edit || width <= 0)
- return layout;
-
- pango_layout_set_width (layout, width * PANGO_SCALE);
- pango_layout_set_wrap (layout, PANGO_WRAP_CHAR);
-
- if (pango_layout_get_line_count (layout) > 1) {
- PangoLayoutLine *line = pango_layout_get_line (layout, 0);
- gchar *line_text = g_strdup (pango_layout_get_text (layout));
- gchar *last_char = g_utf8_find_prev_char (line_text, line_text + line->length - 1);
- while (last_char && pango_layout_get_line_count (layout) > 1) {
- gchar *new_text;
- last_char = g_utf8_find_prev_char (line_text, last_char);
- if (last_char)
- *last_char = '\0';
- new_text = g_strconcat (line_text, "...", NULL);
- pango_layout_set_text (layout, new_text, -1);
- g_free (new_text);
- }
- g_free (line_text);
- }
-
- switch (ect->justify) {
- case GTK_JUSTIFY_RIGHT:
- pango_layout_set_alignment (layout, PANGO_ALIGN_RIGHT);
- break;
- case GTK_JUSTIFY_CENTER:
- pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);
- break;
- case GTK_JUSTIFY_LEFT:
- default:
- break;
- }
-
- return layout;
-}
-
-static PangoLayout *
-generate_layout (ECellTextView *text_view, int model_col, int view_col, int row, int width)
-{
- ECellView *ecell_view = (ECellView *) text_view;
- ECellText *ect = E_CELL_TEXT (ecell_view->ecell);
- PangoLayout *layout;
- CellEdit *edit = text_view->edit;
-
- if (edit && edit->layout && edit->model_col == model_col && edit->row == row) {
- g_object_ref (edit->layout);
- return edit->layout;
- }
-
- if (row >= 0) {
- char *temp = e_cell_text_get_text(ect, ecell_view->e_table_model, model_col, row);
- layout = build_layout (text_view, row, temp ? temp : "?", width);
- e_cell_text_free_text(ect, temp);
- } else
- layout = build_layout (text_view, row, "Mumbo Jumbo", width);
-
- return layout;
-}
-
-
-static void
-draw_pango_rectangle (GdkDrawable *drawable, GdkGC *gc, int x1, int y1, PangoRectangle rect)
-{
- int width = rect.width / PANGO_SCALE;
- int height = rect.height / PANGO_SCALE;
- if (width <= 0)
- width = 1;
- if (height <= 0)
- height = 1;
- gdk_draw_rectangle (drawable, gc, TRUE,
- x1 + rect.x / PANGO_SCALE, y1 + rect.y / PANGO_SCALE, width, height);
-}
-
-static gboolean
-show_pango_rectangle (CellEdit *edit, PangoRectangle rect)
-{
- int x1 = rect.x / PANGO_SCALE;
- int x2 = (rect.x + rect.width) / PANGO_SCALE;
-#if 0
- int y1 = rect.y / PANGO_SCALE;
- int y2 = (rect.y + rect.height) / PANGO_SCALE;
-#endif
-
- int new_xofs_edit = edit->xofs_edit;
- int new_yofs_edit = edit->yofs_edit;
-
- if (x1 < new_xofs_edit)
- new_xofs_edit = x1;
- if (2 + x2 - edit->cell_width > new_xofs_edit)
- new_xofs_edit = 2 + x2 - edit->cell_width;
- if (new_xofs_edit < 0)
- new_xofs_edit = 0;
-
-#if 0
- if (y1 < new_yofs_edit)
- new_yofs_edit = y1;
- if (2 + y2 - edit->cell_height > new_yofs_edit)
- new_yofs_edit = 2 + y2 - edit->cell_height;
- if (new_yofs_edit < 0)
- new_yofs_edit = 0;
-#endif
-
- if (new_xofs_edit != edit->xofs_edit ||
- new_yofs_edit != edit->yofs_edit) {
- edit->xofs_edit = new_xofs_edit;
- edit->yofs_edit = new_yofs_edit;
- return TRUE;
- }
-
- return FALSE;
-}
-
-/*
- * ECell::draw method
- */
-static void
-ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- PangoLayout *layout;
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- ECellText *ect = E_CELL_TEXT (ecell_view->ecell);
- CellEdit *edit = text_view->edit;
- gboolean selected;
- GdkColor *foreground, *cursor_color;
- GtkWidget *canvas = GTK_WIDGET (text_view->canvas);
- GdkRectangle clip_rect;
- int x_origin, y_origin;
-
- selected = flags & E_CELL_SELECTED;
-
- if (selected) {
- if (flags & E_CELL_FOCUSED)
- foreground = &canvas->style->fg [GTK_STATE_SELECTED];
- else
- foreground = &canvas->style->fg [GTK_STATE_ACTIVE];
- cursor_color = foreground;
- } else {
- foreground = &canvas->style->text [GTK_STATE_NORMAL];
- cursor_color = foreground;
-
- if (ect->color_column != -1) {
- char *color_spec;
- GdkColor *cell_foreground;
-
- color_spec = e_table_model_value_at (ecell_view->e_table_model,
- ect->color_column, row);
- cell_foreground = e_cell_text_get_color (text_view,
- color_spec);
- if (cell_foreground)
- foreground = cell_foreground;
- }
- }
-
- gdk_gc_set_foreground (text_view->gc, foreground);
-
- x1 += 4;
- y1 += 1;
- x2 -= 4;
- y2 -= 1;
-
- x_origin = x1 + ect->x + text_view->xofs - (edit ? edit->xofs_edit : 0);
- y_origin = y1 + ect->y + text_view->yofs - (edit ? edit->yofs_edit : 0);
-
- clip_rect.x = x1;
- clip_rect.y = y1;
- clip_rect.width = x2 - x1;
- clip_rect.height = y2 - y1;
-
- gdk_gc_set_clip_rectangle (text_view->gc, &clip_rect);
- /* clip_rect = &rect;*/
-
- layout = generate_layout (text_view, model_col, view_col, row, x2 - x1);
-
- if (edit && edit->view_col == view_col && edit->row == row) {
- layout = layout_with_preedit (text_view, row, edit->text ? edit->text : "?", x2 - x1);
- }
-
- gdk_draw_layout (drawable, text_view->gc,
- x_origin, y_origin,
- layout);
-
- if (edit && edit->view_col == view_col && edit->row == row) {
- if (edit->selection_start != edit->selection_end) {
- int start_index, end_index;
- PangoLayoutLine *line;
- gint *ranges;
- gint n_ranges, i;
- PangoRectangle logical_rect;
- GdkRegion *clip_region = gdk_region_new ();
- GdkRegion *rect_region;
- GdkGC *selection_gc;
- GdkGC *text_gc;
-
- start_index = MIN (edit->selection_start, edit->selection_end);
- end_index = edit->selection_start ^ edit->selection_end ^ start_index;
-
- if (edit->has_selection) {
- selection_gc = canvas->style->base_gc [GTK_STATE_SELECTED];
- text_gc = canvas->style->text_gc[GTK_STATE_SELECTED];
- } else {
- selection_gc = canvas->style->base_gc [GTK_STATE_ACTIVE];
- text_gc = canvas->style->text_gc[GTK_STATE_ACTIVE];
- }
-
- gdk_gc_set_clip_rectangle (selection_gc, &clip_rect);
-
- line = pango_layout_get_lines (layout)->data;
-
- pango_layout_line_get_x_ranges (line, start_index, end_index, &ranges, &n_ranges);
-
- pango_layout_get_extents (layout, NULL, &logical_rect);
-
- for (i=0; i < n_ranges; i++) {
- GdkRectangle sel_rect;
-
- sel_rect.x = x_origin + ranges[2*i] / PANGO_SCALE;
- sel_rect.y = y_origin;
- sel_rect.width = (ranges[2*i + 1] - ranges[2*i]) / PANGO_SCALE;
- sel_rect.height = logical_rect.height / PANGO_SCALE;
-
- gdk_draw_rectangle (drawable, selection_gc, TRUE,
- sel_rect.x, sel_rect.y, sel_rect.width, sel_rect.height);
-
- gdk_region_union_with_rect (clip_region, &sel_rect);
- }
-
- rect_region = gdk_region_rectangle (&clip_rect);
- gdk_region_intersect (clip_region, rect_region);
- gdk_region_destroy (rect_region);
-
- gdk_gc_set_clip_region (text_gc, clip_region);
- gdk_draw_layout (drawable, text_gc,
- x_origin, y_origin,
- layout);
- gdk_gc_set_clip_region (text_gc, NULL);
- gdk_gc_set_clip_region (selection_gc, NULL);
-
- gdk_region_destroy (clip_region);
- g_free (ranges);
- } else {
- if (edit->show_cursor) {
- PangoRectangle strong_pos, weak_pos;
- pango_layout_get_cursor_pos (layout, edit->selection_start + edit->preedit_length, &strong_pos, &weak_pos);
-
- draw_pango_rectangle (drawable, text_view->gc, x_origin, y_origin, strong_pos);
- if (strong_pos.x != weak_pos.x ||
- strong_pos.y != weak_pos.y ||
- strong_pos.width != weak_pos.width ||
- strong_pos.height != weak_pos.height)
- draw_pango_rectangle (drawable, text_view->gc, x_origin, y_origin, weak_pos);
- }
- }
- }
-
- g_object_unref (layout);
-}
-
-/*
- * Get the background color
- */
-static gchar *
-ect_get_bg_color(ECellView *ecell_view, int row)
-{
- ECellText *ect = E_CELL_TEXT (ecell_view->ecell);
- gchar *color_spec;
-
- if (ect->bg_color_column == -1)
- return NULL;
-
- color_spec = e_table_model_value_at (ecell_view->e_table_model,
- ect->bg_color_column, row);
-
- return color_spec;
-}
-
-
-/*
- * Selects the entire string
- */
-
-static void
-ect_edit_select_all (ECellTextView *text_view)
-{
- g_assert (text_view->edit);
-
- text_view->edit->selection_start = 0;
- text_view->edit->selection_end = strlen (text_view->edit->text);
-}
-
-static gboolean
-key_begins_editing (GdkEventKey *event)
-{
- if (event->length == 0)
- return FALSE;
-
- return TRUE;
-}
-
-/*
- * ECell::event method
- */
-static gint
-ect_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- ETextEventProcessorEvent e_tep_event;
- gboolean edit_display = FALSE;
- gint preedit_len;
- CellEdit *edit = text_view->edit;
- GtkWidget *canvas = GTK_WIDGET (text_view->canvas);
- gint return_val = 0;
- d(gboolean press = FALSE);
-
- if (!(flags & E_CELL_EDITING))
- return 0;
-
- if ( edit && !edit->preedit_length && flags & E_CELL_PREEDIT)
- return TRUE;
-
- if (edit && edit->view_col == view_col && edit->row == row) {
- edit_display = TRUE;
- }
-
- e_tep_event.type = event->type;
- switch (event->type) {
- case GDK_FOCUS_CHANGE:
- break;
- case GDK_KEY_PRESS: /* Fall Through */
- if (edit_display) {
- if (edit->im_context &&
- !edit->im_context_signals_registered) {
-
- g_signal_connect (edit->im_context,
- "preedit_changed",
- G_CALLBACK (\
- e_cell_text_preedit_changed_cb),
- text_view);
-
- g_signal_connect (edit->im_context,
- "commit",
- G_CALLBACK (\
- e_cell_text_commit_cb),
- text_view);
-
- g_signal_connect (edit->im_context,
- "retrieve_surrounding",
- G_CALLBACK (\
- e_cell_text_retrieve_surrounding_cb),
- text_view);
-
- g_signal_connect (edit->im_context,
- "delete_surrounding",
- G_CALLBACK (\
- e_cell_text_delete_surrounding_cb),
- text_view);
-
- edit->im_context_signals_registered = TRUE;
- }
-
- edit->show_cursor = FALSE;
-
- } else {
- if (edit->im_context) {
- g_signal_handlers_disconnect_matched (
- edit->im_context,
- G_SIGNAL_MATCH_DATA, 0, 0,
- NULL, NULL, edit);
- edit->im_context_signals_registered = FALSE;
- }
-
- ect_stop_editing (text_view, TRUE);
- if (edit->timeout_id) {
- g_source_remove(edit->timeout_id);
- edit->timeout_id = 0;
- }
- }
- return_val = TRUE;
- /* Fallthrough */
- case GDK_KEY_RELEASE:
- preedit_len = edit->preedit_length;
- if (edit_display && edit->im_context &&
- gtk_im_context_filter_keypress (\
- edit->im_context,
- (GdkEventKey*)event)) {
-
- edit->need_im_reset = TRUE;
- if (preedit_len && flags & E_CELL_PREEDIT)
- return FALSE;
- else
- return TRUE;
- }
-
- if (event->key.keyval == GDK_Escape){
- ect_cancel_edit (text_view);
- return_val = TRUE;
- break;
- }
-
- if ((!edit_display) &&
- e_table_model_is_cell_editable (ecell_view->e_table_model, model_col, row) &&
- key_begins_editing (&event->key)) {
- e_table_item_enter_edit (text_view->cell_view.e_table_item_view, view_col, row);
- ect_edit_select_all (text_view);
- edit = text_view->edit;
- edit_display = TRUE;
- }
- if (edit_display) {
- GdkEventKey key = event->key;
- if (key.keyval == GDK_KP_Enter || key.keyval == GDK_Return){
- e_table_item_leave_edit_ (text_view->cell_view.e_table_item_view);
- } else {
- e_tep_event.key.time = key.time;
- e_tep_event.key.state = key.state;
- e_tep_event.key.keyval = key.keyval;
-
- /* This is probably ugly hack, but we have to handle UTF-8 input somehow */
-#if 0
- e_tep_event.key.length = key.length;
- e_tep_event.key.string = key.string;
-#else
- e_tep_event.key.string = e_utf8_from_gtk_event_key (canvas, key.keyval, key.string);
- if (e_tep_event.key.string != NULL) {
- e_tep_event.key.length = strlen (e_tep_event.key.string);
- } else {
- e_tep_event.key.length = 0;
- }
-#endif
- _get_tep (edit);
- return_val = e_text_event_processor_handle_event (edit->tep, &e_tep_event);
- if (e_tep_event.key.string)
- g_free (e_tep_event.key.string);
- break;
- }
- }
-
- break;
- case GDK_BUTTON_PRESS: /* Fall Through */
- d(press = TRUE);
- case GDK_BUTTON_RELEASE:
- d(g_print ("%s: %s\n", __FUNCTION__, press ? "GDK_BUTTON_PRESS" : "GDK_BUTTON_RELEASE"));
- event->button.x -= 4;
- event->button.y -= 1;
- if ((!edit_display)
- && e_table_model_is_cell_editable (ecell_view->e_table_model, model_col, row)
- && event->type == GDK_BUTTON_RELEASE
- && event->button.button == 1) {
- GdkEventButton button = event->button;
-
- e_table_item_enter_edit (text_view->cell_view.e_table_item_view, view_col, row);
- edit = text_view->edit;
- edit_display = TRUE;
-
- e_tep_event.button.type = GDK_BUTTON_PRESS;
- e_tep_event.button.time = button.time;
- e_tep_event.button.state = button.state;
- e_tep_event.button.button = button.button;
- e_tep_event.button.position = get_position_from_xy (edit, event->button.x, event->button.y);
- _get_tep (edit);
- edit->actions = 0;
- return_val = e_text_event_processor_handle_event (edit->tep,
- &e_tep_event);
- *actions = edit->actions;
- if (event->button.button == 1) {
- if (event->type == GDK_BUTTON_PRESS)
- edit->button_down = TRUE;
- else
- edit->button_down = FALSE;
- }
- edit->lastx = button.x;
- edit->lasty = button.y;
- edit->last_state = button.state;
-
- e_tep_event.button.type = GDK_BUTTON_RELEASE;
- }
- if (edit_display) {
- GdkEventButton button = event->button;
- e_tep_event.button.time = button.time;
- e_tep_event.button.state = button.state;
- e_tep_event.button.button = button.button;
- e_tep_event.button.position = get_position_from_xy (edit, event->button.x, event->button.y);
- _get_tep (edit);
- edit->actions = 0;
- return_val = e_text_event_processor_handle_event (edit->tep,
- &e_tep_event);
- *actions = edit->actions;
- if (event->button.button == 1) {
- if (event->type == GDK_BUTTON_PRESS)
- edit->button_down = TRUE;
- else
- edit->button_down = FALSE;
- }
- edit->lastx = button.x;
- edit->lasty = button.y;
- edit->last_state = button.state;
- }
- break;
- case GDK_MOTION_NOTIFY:
- event->motion.x -= 4;
- event->motion.y -= 1;
- if (edit_display) {
- GdkEventMotion motion = event->motion;
- e_tep_event.motion.time = motion.time;
- e_tep_event.motion.state = motion.state;
- e_tep_event.motion.position = get_position_from_xy (edit, event->motion.x, event->motion.y);
- _get_tep (edit);
- edit->actions = 0;
- return_val = e_text_event_processor_handle_event (edit->tep,
- &e_tep_event);
- *actions = edit->actions;
- edit->lastx = motion.x;
- edit->lasty = motion.y;
- edit->last_state = motion.state;
- }
- break;
- case GDK_ENTER_NOTIFY:
-#if 0
- edit->pointer_in = TRUE;
-#endif
- if (edit_display) {
- if (edit->default_cursor_shown){
- gdk_window_set_cursor (canvas->window, text_view->i_cursor);
- edit->default_cursor_shown = FALSE;
- }
- }
- break;
- case GDK_LEAVE_NOTIFY:
-#if 0
- text_view->pointer_in = FALSE;
-#endif
- if (edit_display) {
- if (! edit->default_cursor_shown){
- gdk_window_set_cursor (canvas->window, NULL);
- edit->default_cursor_shown = TRUE;
- }
- }
- break;
- default:
- break;
- }
-
- return return_val;
-}
-
-/*
- * ECell::height method
- */
-static int
-ect_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- gint height;
- PangoLayout *layout;
-
- layout = generate_layout (text_view, model_col, view_col, row, 0);
- pango_layout_get_pixel_size (layout, NULL, &height);
- g_object_unref (layout);
- return height + 2;
-}
-
-/*
- * ECellView::enter_edit method
- */
-static void *
-ect_enter_edit (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- CellEdit *edit;
- ECellText *ect = E_CELL_TEXT(ecell_view->ecell);
- char *temp;
-
- edit = g_new0 (CellEdit, 1);
- text_view->edit = edit;
-
- edit->im_context = E_CANVAS (text_view->canvas)->im_context;
- edit->need_im_reset = FALSE;
- edit->im_context_signals_registered = FALSE;
- edit->view_col = -1;
- edit->model_col = -1;
- edit->row = -1;
-
- edit->text_view = text_view;
- edit->model_col = model_col;
- edit->view_col = view_col;
- edit->row = row;
- edit->cell_width = e_table_header_get_column (
- ((ETableItem *)ecell_view->e_table_item_view)->header,
- view_col)->width - 8;
-
- edit->layout = generate_layout (text_view, model_col, view_col, row, edit->cell_width);
-
- edit->xofs_edit = 0.0;
- edit->yofs_edit = 0.0;
-
- edit->selection_start = 0;
- edit->selection_end = 0;
- edit->select_by_word = FALSE;
-
- edit->timeout_id = g_timeout_add (10, _blink_scroll_timeout, text_view);
- edit->timer = g_timer_new ();
- g_timer_elapsed (edit->timer, &(edit->scroll_start));
- g_timer_start (edit->timer);
-
- edit->lastx = 0;
- edit->lasty = 0;
- edit->last_state = 0;
-
- edit->scroll_start = 0;
- edit->show_cursor = TRUE;
- edit->button_down = FALSE;
-
- edit->tep = NULL;
-
- edit->has_selection = FALSE;
-
- edit->invisible = NULL;
- edit->primary_selection = NULL;
- edit->primary_length = 0;
- edit->clipboard_selection = NULL;
- edit->clipboard_length = 0;
-
- edit->pointer_in = FALSE;
- edit->default_cursor_shown = TRUE;
-
- temp = e_cell_text_get_text(ect, ecell_view->e_table_model, model_col, row);
- edit->old_text = g_strdup (temp);
- e_cell_text_free_text(ect, temp);
- edit->text = g_strdup (edit->old_text);
-
-#if 0
- if (edit->pointer_in){
- if (edit->default_cursor_shown){
- gdk_window_set_cursor (GTK_WIDGET(item->canvas)->window, text_view->i_cursor);
- edit->default_cursor_shown = FALSE;
- }
- }
-#endif
- ect_queue_redraw (text_view, view_col, row);
-
- return NULL;
-}
-
-/*
- * ECellView::leave_edit method
- */
-static void
-ect_leave_edit (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- CellEdit *edit = text_view->edit;
-
- if (edit){
- ect_stop_editing (text_view, TRUE);
- } else {
- /*
- * We did invoke this leave edit internally
- */
- }
-}
-
-/*
- * ECellView::save_state method
- */
-static void *
-ect_save_state (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- CellEdit *edit = text_view->edit;
-
- int *save_state = g_new (int, 2);
-
- save_state[0] = edit->selection_start;
- save_state[1] = edit->selection_end;
- return save_state;
-}
-
-/*
- * ECellView::load_state method
- */
-static void
-ect_load_state (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context, void *save_state)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- CellEdit *edit = text_view->edit;
- int length;
- int *selection = save_state;
-
- length = strlen (edit->text);
-
- edit->selection_start = MIN (selection[0], length);
- edit->selection_end = MIN (selection[1], length);
-
- ect_queue_redraw (text_view, view_col, row);
-}
-
-/*
- * ECellView::free_state method
- */
-static void
-ect_free_state (ECellView *ecell_view, int model_col, int view_col, int row, void *save_state)
-{
- g_free (save_state);
-}
-
-#define FONT_NAME "Sans Regular"
-
-static GnomeFont *
-get_font_for_size (double h)
-{
- GnomeFontFace *face;
- GnomeFont *font;
- double asc, desc, size;
-
- face = gnome_font_face_find (FONT_NAME);
-
- asc = gnome_font_face_get_ascender (face);
- desc = abs (gnome_font_face_get_descender (face));
- size = h * 1000 / (asc + desc);
-
- font = gnome_font_find_closest (FONT_NAME, size);
-
- g_object_unref (face);
- return font;
-}
-
-static void
-ect_print (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width, double height)
-{
- GnomeFont *font = get_font_for_size (16);
- char *string;
- ECellText *ect = E_CELL_TEXT(ecell_view->ecell);
- double ty, ly, text_width;
- gboolean strikeout, underline;
-
- string = e_cell_text_get_text(ect, ecell_view->e_table_model, model_col, row);
- gnome_print_gsave(context);
- if (gnome_print_moveto(context, 2, 2) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width - 2, 2) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width - 2, height - 2) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 2, height - 2) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 2, 2) == -1)
- /* FIXME */;
- if (gnome_print_clip(context) == -1)
- /* FIXME */;
-
- ty = (height - gnome_font_get_ascender(font) - gnome_font_get_descender(font)) / 2;
- text_width = gnome_font_get_width_utf8 (font, string);
-
- strikeout = ect->strikeout_column >= 0 && row >= 0 &&
- e_table_model_value_at (ecell_view->e_table_model, ect->strikeout_column, row);
- underline = ect->underline_column >= 0 && row >= 0 &&
- e_table_model_value_at(ecell_view->e_table_model, ect->underline_column, row);
-
- if (underline) {
- ly = ty + gnome_font_get_underline_position (font);
- gnome_print_newpath (context);
- gnome_print_moveto (context, 2, ly);
- gnome_print_lineto (context, MIN (2 + text_width, width - 2), ly);
- gnome_print_setlinewidth (context, gnome_font_get_underline_thickness (font));
- gnome_print_stroke (context);
- }
-
- if (strikeout) {
- ly = ty + (gnome_font_get_ascender (font) - gnome_font_get_underline_thickness (font))/ 2.0;
- gnome_print_newpath (context);
- gnome_print_moveto (context, 2, ly);
- gnome_print_lineto (context, MIN (2 + text_width, width - 2), ly);
- gnome_print_setlinewidth (context, gnome_font_get_underline_thickness (font));
- gnome_print_stroke (context);
- }
-
- gnome_print_moveto(context, 2, ty);
- gnome_print_setfont(context, font);
- gnome_print_show(context, string);
- gnome_print_grestore(context);
- e_cell_text_free_text(ect, string);
- g_object_unref (font);
-}
-
-static gdouble
-ect_print_height (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width)
-{
- return 16;
-}
-
-static int
-ect_max_width (ECellView *ecell_view,
- int model_col,
- int view_col)
-{
- /* New ECellText */
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- int row;
- int number_of_rows;
- int max_width = 0;
-
- number_of_rows = e_table_model_row_count (ecell_view->e_table_model);
-
- for (row = 0; row < number_of_rows; row++) {
- PangoLayout *layout = generate_layout (text_view, model_col, view_col, row, 0);
- int width;
-
- pango_layout_get_pixel_size (layout, &width, NULL);
-
- max_width = MAX (max_width, width);
- g_object_unref (layout);
- }
-
- return max_width + 8;
-}
-
-static int
-ect_max_width_by_row (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row)
-{
- /* New ECellText */
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- int width;
- PangoLayout *layout;
-
- if (row >= e_table_model_row_count (ecell_view->e_table_model))
- return 0;
-
- layout = generate_layout (text_view, model_col, view_col, row, 0);
- pango_layout_get_pixel_size (layout, &width, NULL);
- g_object_unref (layout);
-
- return width + 8;
-}
-
-static gint
-tooltip_event (GtkWidget *window,
- GdkEvent *event,
- ETableTooltip *tooltip)
-{
- gint ret_val = FALSE;
-
- switch (event->type) {
- case GDK_LEAVE_NOTIFY:
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(tooltip->eti)->canvas));
- break;
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- if (event->type == GDK_BUTTON_RELEASE) {
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(tooltip->eti)->canvas));
- }
-
- event->button.x = tooltip->cx;
- event->button.y = tooltip->cy;
- g_signal_emit_by_name (tooltip->eti, "event",
- event, &ret_val);
- if (!ret_val)
- gtk_propagate_event (GTK_WIDGET(GNOME_CANVAS_ITEM(tooltip->eti)->canvas), event);
- ret_val = TRUE;
- break;
- case GDK_KEY_PRESS:
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(tooltip->eti)->canvas));
- g_signal_emit_by_name (tooltip->eti, "event",
- event, &ret_val);
- if (!ret_val)
- gtk_propagate_event (GTK_WIDGET(GNOME_CANVAS_ITEM(tooltip->eti)->canvas), event);
- ret_val = TRUE;
- break;
- default:
- break;
- }
-
- return ret_val;
-}
-
-static void
-ect_show_tooltip (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- int col_width,
- ETableTooltip *tooltip)
-{
- ECellTextView *text_view = (ECellTextView *) ecell_view;
- GtkWidget *canvas;
- double i2c[6];
- ArtPoint origin = {0, 0};
- ArtPoint pixel_origin;
- int canvas_x, canvas_y;
- GnomeCanvasItem *tooltip_text;
- double tooltip_width;
- double tooltip_height;
- double tooltip_x;
- double tooltip_y;
- GnomeCanvasItem *rect;
- ECellText *ect = E_CELL_TEXT(ecell_view->ecell);
- GtkWidget *window;
- PangoLayout *layout;
- int width, height;
-
- tooltip->timer = 0;
-
- layout = generate_layout (text_view, model_col, view_col, row, col_width);
-
- pango_layout_get_pixel_size (layout, &width, &height);
- if (width < col_width - 8) {
- return;
- }
-
- gnome_canvas_item_i2c_affine (GNOME_CANVAS_ITEM (tooltip->eti), i2c);
- art_affine_point (&pixel_origin, &origin, i2c);
-
- gdk_window_get_origin (GTK_WIDGET (text_view->canvas)->window,
- &canvas_x, &canvas_y);
- pixel_origin.x += canvas_x;
- pixel_origin.y += canvas_y;
- pixel_origin.x -= (int) gtk_layout_get_hadjustment (GTK_LAYOUT (text_view->canvas))->value;
- pixel_origin.y -= (int) gtk_layout_get_vadjustment (GTK_LAYOUT (text_view->canvas))->value;
-
- window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_container_set_border_width (GTK_CONTAINER (window), 1);
-
- canvas = e_canvas_new ();
- gtk_container_add (GTK_CONTAINER (window), canvas);
- GTK_WIDGET_UNSET_FLAGS (canvas, GTK_CAN_FOCUS);
- GTK_WIDGET_UNSET_FLAGS (window, GTK_CAN_FOCUS);
-
- rect = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
- gnome_canvas_rect_get_type (),
- "x1", (double) 0.0,
- "y1", (double) 0.0,
- "x2", (double) width + 4,
- "y2", (double) height,
- "fill_color_gdk", tooltip->background,
- NULL);
-
- tooltip_text = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_text_get_type (),
- "anchor", GTK_ANCHOR_NW,
- "bold", (gboolean) ect->bold_column >= 0 && e_table_model_value_at(ecell_view->e_table_model, ect->bold_column, row),
- "strikeout", (gboolean) ect->strikeout_column >= 0 && e_table_model_value_at(ecell_view->e_table_model, ect->strikeout_column, row),
- "underline", (gboolean) ect->underline_column >= 0 && e_table_model_value_at(ecell_view->e_table_model, ect->underline_column, row),
- "fill_color_gdk", tooltip->foreground,
- "text", pango_layout_get_text (layout),
- "editable", FALSE,
- "clip_width", (double) width,
- "clip_height", (double) height,
- "clip", TRUE,
- "line_wrap", FALSE,
- "justification", E_CELL_TEXT (text_view->cell_view.ecell)->justify,
- "draw_background", FALSE,
- NULL);
-
- tooltip_width = width;
- tooltip_height = height;
- tooltip_y = tooltip->y;
-
- switch (E_CELL_TEXT (text_view->cell_view.ecell)->justify) {
- case GTK_JUSTIFY_CENTER:
- tooltip_x = - tooltip_width / 2;
- break;
- case GTK_JUSTIFY_RIGHT:
- tooltip_x = tooltip_width / 2;
- break;
- case GTK_JUSTIFY_FILL:
- case GTK_JUSTIFY_LEFT:
- tooltip_x = tooltip->x;
- break;
- }
-
- gnome_canvas_item_move (tooltip_text, 3.0, 1.0);
- gnome_canvas_item_set (rect,
- "x2", (double) tooltip_width + 6,
- "y2", (double) tooltip->row_height + 1,
- NULL);
- gtk_widget_set_usize (window, tooltip_width + 6,
- tooltip->row_height + 1);
- gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0.0, 0.0,
- (double) tooltip_width + 6,
- (double) tooltip_height);
- gtk_widget_show (canvas);
- gtk_widget_realize (window);
- g_signal_connect (window, "event",
- G_CALLBACK (tooltip_event), tooltip);
-
- e_canvas_popup_tooltip (E_CANVAS(text_view->canvas), window, pixel_origin.x + tooltip->x,
- pixel_origin.y + tooltip->y - 1);
-
- return;
-}
-
-/*
- * GtkObject::destroy method
- */
-static void
-ect_finalize (GObject *object)
-{
- ECellText *ect = E_CELL_TEXT (object);
-
- g_free (ect->font_name);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-/* Set_arg handler for the text item */
-static void
-ect_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- ECellText *text;
-
- text = E_CELL_TEXT (object);
-
- switch (prop_id) {
- case PROP_STRIKEOUT_COLUMN:
- text->strikeout_column = g_value_get_int (value);
- break;
-
- case PROP_UNDERLINE_COLUMN:
- text->underline_column = g_value_get_int (value);
- break;
-
- case PROP_BOLD_COLUMN:
- text->bold_column = g_value_get_int (value);
- break;
-
- case PROP_COLOR_COLUMN:
- text->color_column = g_value_get_int (value);
- break;
-
- case PROP_EDITABLE:
- text->editable = g_value_get_boolean (value);
- break;
-
- case PROP_BG_COLOR_COLUMN:
- text->bg_color_column = g_value_get_int (value);
- break;
-
- default:
- return;
- }
-}
-
-/* Get_arg handler for the text item */
-static void
-ect_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ECellText *text;
-
- text = E_CELL_TEXT (object);
-
- switch (prop_id) {
- case PROP_STRIKEOUT_COLUMN:
- g_value_set_int (value, text->strikeout_column);
- break;
-
- case PROP_UNDERLINE_COLUMN:
- g_value_set_int (value, text->underline_column);
- break;
-
- case PROP_BOLD_COLUMN:
- g_value_set_int (value, text->bold_column);
- break;
-
- case PROP_COLOR_COLUMN:
- g_value_set_int (value, text->color_column);
- break;
-
- case PROP_EDITABLE:
- g_value_set_boolean (value, text->editable);
- break;
-
- case PROP_BG_COLOR_COLUMN:
- g_value_set_int (value, text->bg_color_column);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static char *ellipsis_default = NULL;
-static gboolean use_ellipsis_default = TRUE;
-
-static void
-e_cell_text_class_init (GObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
- ECellTextClass *ectc = (ECellTextClass *) object_class;
- const char *ellipsis_env;
-
- G_OBJECT_CLASS (object_class)->finalize = ect_finalize;
-
- ecc->new_view = ect_new_view;
- ecc->kill_view = ect_kill_view;
- ecc->realize = ect_realize;
- ecc->unrealize = ect_unrealize;
- ecc->draw = ect_draw;
- ecc->event = ect_event;
- ecc->height = ect_height;
- ecc->enter_edit = ect_enter_edit;
- ecc->leave_edit = ect_leave_edit;
- ecc->save_state = ect_save_state;
- ecc->load_state = ect_load_state;
- ecc->free_state = ect_free_state;
- ecc->print = ect_print;
- ecc->print_height = ect_print_height;
- ecc->max_width = ect_max_width;
- ecc->max_width_by_row = ect_max_width_by_row;
- ecc->show_tooltip = ect_show_tooltip;
- ecc->get_bg_color = ect_get_bg_color;
-
- ectc->get_text = ect_real_get_text;
- ectc->free_text = ect_real_free_text;
- ectc->set_value = ect_real_set_value;
-
- object_class->get_property = ect_get_property;
- object_class->set_property = ect_set_property;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- g_object_class_install_property (object_class, PROP_STRIKEOUT_COLUMN,
- g_param_spec_int ("strikeout_column",
- _("Strikeout Column"),
- /*_( */"XXX blurb" /*)*/,
- -1, G_MAXINT, -1,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_UNDERLINE_COLUMN,
- g_param_spec_int ("underline_column",
- _("Underline Column"),
- /*_( */"XXX blurb" /*)*/,
- -1, G_MAXINT, -1,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_BOLD_COLUMN,
- g_param_spec_int ("bold_column",
- _("Bold Column"),
- /*_( */"XXX blurb" /*)*/,
- -1, G_MAXINT, -1,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_COLOR_COLUMN,
- g_param_spec_int ("color_column",
- _("Color Column"),
- /*_( */"XXX blurb" /*)*/,
- -1, G_MAXINT, -1,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_EDITABLE,
- g_param_spec_boolean ("editable",
- _("Editable"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_BG_COLOR_COLUMN,
- g_param_spec_int ("bg_color_column",
- _("BG Color Column"),
- /*_( */"XXX blurb" /*)*/,
- -1, G_MAXINT, -1,
- G_PARAM_READWRITE));
-
- if (!clipboard_atom)
- clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE);
-
- ellipsis_env = g_getenv ("GAL_ELLIPSIS");
- if (ellipsis_env) {
- if (*ellipsis_env) {
- ellipsis_default = g_strdup (ellipsis_env);
- } else {
- use_ellipsis_default = FALSE;
- }
- }
-
- gal_a11y_e_cell_registry_add_cell_type (NULL, E_CELL_TEXT_TYPE, gal_a11y_e_cell_text_new);
-}
-
-
-/* IM Context Callbacks */
-
-static void
-e_cell_text_preedit_changed_cb (GtkIMContext *context,
- ECellTextView *tv)
-{
- gchar *preedit_string;
- gint cursor_pos;
- CellEdit *edit=tv->edit;
- gtk_im_context_get_preedit_string (edit->im_context, &preedit_string,
- NULL, &cursor_pos);
-
- edit->preedit_length = strlen (preedit_string);
- cursor_pos = CLAMP (cursor_pos, 0, g_utf8_strlen (preedit_string, -1));
- g_free (preedit_string);
- ect_queue_redraw (tv, edit->view_col, edit->row);
-}
-
-static void
-e_cell_text_commit_cb (GtkIMContext *context,
- const gchar *str,
- ECellTextView *tv)
-{
- CellEdit *edit = tv->edit;
- ETextEventProcessorCommand command;
-
- if (g_utf8_validate (str, strlen (str), NULL)) {
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.string = (gchar *)str;
- command.value = strlen(str);
- e_cell_text_view_command (edit->tep, &command, edit);
- }
-
-}
-
-static gboolean
-e_cell_text_retrieve_surrounding_cb (GtkIMContext *context,
- ECellTextView *tv)
-{
- int cur_pos = 0;
- CellEdit *edit = tv->edit;
-
- cur_pos = g_utf8_pointer_to_offset (edit->text, edit->text + edit->selection_start);
-
- gtk_im_context_set_surrounding (context,
- edit->text,
- strlen (edit->text),
- cur_pos
- );
-
- return TRUE;
-}
-
-static gboolean
-e_cell_text_delete_surrounding_cb (GtkIMContext *context,
- gint offset,
- gint n_chars,
- ECellTextView *tv)
-{
- CellEdit *edit = tv->edit;
-
- gtk_editable_delete_text (GTK_EDITABLE (edit),
- edit->selection_end + offset,
- edit->selection_end + offset + n_chars);
-
- return TRUE;
-}
-
-static void
-e_cell_text_init (ECellText *ect)
-{
- ect->ellipsis = g_strdup (ellipsis_default);
- ect->use_ellipsis = use_ellipsis_default;
- ect->strikeout_column = -1;
- ect->underline_column = -1;
- ect->bold_column = -1;
- ect->color_column = -1;
- ect->bg_color_column = -1;
- ect->editable = TRUE;
-}
-
-E_MAKE_TYPE(e_cell_text, "ECellText", ECellText, e_cell_text_class_init, e_cell_text_init, PARENT_TYPE)
-
-/**
- * e_cell_text_construct:
- * @cell: The cell to construct
- * @fontname: this param is no longer used, but left here for api stability
- * @justify: Justification of the string in the cell
- *
- * constructs the ECellText. To be used by subclasses and language
- * bindings.
- *
- * Returns: The ECellText.
- */
-ECell *
-e_cell_text_construct (ECellText *cell, const char *fontname, GtkJustification justify)
-{
- if(!cell)
- return E_CELL(NULL);
- if(fontname)
- cell->font_name = g_strdup (fontname);
- cell->justify = justify;
- return E_CELL(cell);
-}
-
-/**
- * e_cell_text_new:
- * @fontname: this param is no longer used, but left here for api stability
- * @justify: Justification of the string in the cell.
- *
- * Creates a new ECell renderer that can be used to render strings that
- * that come from the model. The value returned from the model is
- * interpreted as being a char *.
- *
- * The ECellText object support a large set of properties that can be
- * configured through the Gtk argument system and allows the user to have
- * a finer control of the way the string is displayed. The arguments supported
- * allow the control of strikeout, underline, bold, and color.
- *
- * The arguments "strikeout_column", "underline_column", "bold_column"
- * and "color_column" set and return an integer that points to a
- * column in the model that controls these settings. So controlling
- * the way things are rendered is achieved by having special columns
- * in the model that will be used to flag whether the text should be
- * rendered with strikeout, or bolded. In the case of the
- * "color_column" argument, the column in the model is expected to
- * have a string that can be parsed by gdk_color_parse().
- *
- * Returns: an ECell object that can be used to render strings.
- */
-ECell *
-e_cell_text_new (const char *fontname, GtkJustification justify)
-{
- ECellText *ect = g_object_new (E_CELL_TEXT_TYPE, NULL);
-
- e_cell_text_construct(ect, fontname, justify);
-
- return (ECell *) ect;
-}
-
-
-/* fixme: Handle Font attributes */
-/* position is in BYTES */
-
-static gint
-get_position_from_xy (CellEdit *edit, gint x, gint y)
-{
- int index;
- int trailing;
- const char *text;
-
- PangoLayout *layout = generate_layout (edit->text_view, edit->model_col, edit->view_col, edit->row, edit->cell_width);
- ECellTextView *text_view = edit->text_view;
- ECellText *ect = (ECellText *) ((ECellView *)text_view)->ecell;
-
- x -= (ect->x + text_view->xofs - edit->xofs_edit);
- y -= (ect->y + text_view->yofs - edit->yofs_edit);
-
- pango_layout_xy_to_index (layout, x * PANGO_SCALE, y * PANGO_SCALE, &index, &trailing);
-
- text = pango_layout_get_text (layout);
-
- return g_utf8_offset_to_pointer (text + index, trailing) - text;
-}
-
-#define SCROLL_WAIT_TIME 30000
-
-static gboolean
-_blink_scroll_timeout (gpointer data)
-{
- ECellTextView *text_view = (ECellTextView *) data;
- ECellText *ect = E_CELL_TEXT (((ECellView *)text_view)->ecell);
- CellEdit *edit = text_view->edit;
-
- gulong current_time;
- gboolean scroll = FALSE;
- gboolean redraw = FALSE;
- int width, height;
-
- g_timer_elapsed (edit->timer, &current_time);
-
- if (edit->scroll_start + SCROLL_WAIT_TIME > 1000000) {
- if (current_time > edit->scroll_start - (1000000 - SCROLL_WAIT_TIME) &&
- current_time < edit->scroll_start)
- scroll = TRUE;
- } else {
- if (current_time > edit->scroll_start + SCROLL_WAIT_TIME ||
- current_time < edit->scroll_start)
- scroll = TRUE;
- }
-
- pango_layout_get_pixel_size (edit->layout, &width, &height);
-
- if (scroll && edit->button_down) {
- /* FIXME: Copy this for y. */
- if (edit->lastx - ect->x > edit->cell_width) {
- if (edit->xofs_edit < width - edit->cell_width) {
- edit->xofs_edit += 4;
- if (edit->xofs_edit > width - edit->cell_width + 1)
- edit->xofs_edit = width - edit->cell_width + 1;
- redraw = TRUE;
- }
- }
- if (edit->lastx - ect->x < 0 &&
- edit->xofs_edit > 0) {
- edit->xofs_edit -= 4;
- if (edit->xofs_edit < 0)
- edit->xofs_edit = 0;
- redraw = TRUE;
- }
- if (redraw) {
- ETextEventProcessorEvent e_tep_event;
- e_tep_event.type = GDK_MOTION_NOTIFY;
- e_tep_event.motion.state = edit->last_state;
- e_tep_event.motion.time = 0;
- e_tep_event.motion.position = get_position_from_xy (edit, edit->lastx, edit->lasty);
- _get_tep (edit);
- e_text_event_processor_handle_event (edit->tep,
- &e_tep_event);
- edit->scroll_start = current_time;
- }
- }
-
- if (!((current_time / 500000) % 2)) {
- if (!edit->show_cursor)
- redraw = TRUE;
- edit->show_cursor = TRUE;
- } else {
- if (edit->show_cursor)
- redraw = TRUE;
- edit->show_cursor = FALSE;
- }
- if (redraw){
- ect_queue_redraw (text_view, edit->view_col, edit->row);
- }
- return TRUE;
-}
-
-static int
-next_word (CellEdit *edit, int start)
-{
- char *p;
- int length;
-
- length = strlen (edit->text);
- if (start >= length)
- return length;
-
- p = g_utf8_next_char (edit->text + start);
-
- while (*p && g_unichar_validate (g_utf8_get_char (p))) {
- gunichar unival = g_utf8_get_char (p);
- if (g_unichar_isspace (unival))
- return p - edit->text;
- p = g_utf8_next_char (p);
- }
-
- return p - edit->text;
-}
-
-static int
-_get_position (ECellTextView *text_view, ETextEventProcessorCommand *command)
-{
- int length;
- CellEdit *edit = text_view->edit;
- gchar *p;
- int unival;
- int index;
- int trailing;
-
- switch (command->position) {
-
- case E_TEP_VALUE:
- return command->value;
-
- case E_TEP_SELECTION:
- return edit->selection_end;
-
- case E_TEP_START_OF_BUFFER:
- return 0;
-
- /* fixme: this probably confuses TEP */
-
- case E_TEP_END_OF_BUFFER:
- return strlen (edit->text);
-
- case E_TEP_START_OF_LINE:
-
- if (edit->selection_end < 1) return 0;
-
- p = g_utf8_find_prev_char (edit->text, edit->text + edit->selection_end);
-
- if (p == edit->text) return 0;
-
- p = g_utf8_find_prev_char (edit->text, p);
-
- while (p && p > edit->text) {
- if (*p == '\n') return p - edit->text + 1;
- p = g_utf8_find_prev_char (edit->text, p);
- }
-
- return 0;
-
- case E_TEP_END_OF_LINE:
-
- length = strlen (edit->text);
- if (edit->selection_end >= length) return length;
-
- p = g_utf8_next_char (edit->text + edit->selection_end);
-
- while (*p && g_unichar_validate (g_utf8_get_char (p))) {
- if (*p == '\n') return p - edit->text;
- p = g_utf8_next_char (p);
- }
-
- return p - edit->text;
-
- case E_TEP_FORWARD_CHARACTER:
-
- length = strlen (edit->text);
- if (edit->selection_end >= length) return length;
-
- p = g_utf8_next_char (edit->text + edit->selection_end);
-
- return p - edit->text;
-
- case E_TEP_BACKWARD_CHARACTER:
-
- if (edit->selection_end < 1) return 0;
-
- p = g_utf8_find_prev_char (edit->text, edit->text + edit->selection_end);
-
- if (p == NULL) return 0;
-
- return p - edit->text;
-
- case E_TEP_FORWARD_WORD:
- return next_word (edit, edit->selection_end);
-
- case E_TEP_BACKWARD_WORD:
-
- if (edit->selection_end < 1) return 0;
-
- p = g_utf8_find_prev_char (edit->text, edit->text + edit->selection_end);
-
- if (p == edit->text) return 0;
-
- p = g_utf8_find_prev_char (edit->text, p);
-
- while (p && p > edit->text && g_unichar_validate (g_utf8_get_char (p))) {
- unival = g_utf8_get_char (p);
- if (g_unichar_isspace (unival)) {
- return (g_utf8_next_char (p) - edit->text);
- }
- p = g_utf8_find_prev_char (edit->text, p);
- }
-
- return 0;
-
- case E_TEP_FORWARD_LINE:
- pango_layout_move_cursor_visually (edit->layout,
- TRUE,
- edit->selection_end,
- 0,
- TRUE,
- &index,
- &trailing);
- index = g_utf8_offset_to_pointer (edit->text + index, trailing) - edit->text;
- if (index < 0)
- return 0;
- length = strlen (edit->text);
- if (index >= length)
- return length;
- return index;
- case E_TEP_BACKWARD_LINE:
- pango_layout_move_cursor_visually (edit->layout,
- TRUE,
- edit->selection_end,
- 0,
- TRUE,
- &index,
- &trailing);
-
- index = g_utf8_offset_to_pointer (edit->text + index, trailing) - edit->text;
- if (index < 0)
- return 0;
- length = strlen (edit->text);
- if (index >= length)
- return length;
- return index;
- case E_TEP_FORWARD_PARAGRAPH:
- case E_TEP_BACKWARD_PARAGRAPH:
-
- case E_TEP_FORWARD_PAGE:
- case E_TEP_BACKWARD_PAGE:
- return edit->selection_end;
- default:
- return edit->selection_end;
- }
- g_assert_not_reached ();
- return 0; /* Kill warning */
-}
-
-static void
-_delete_selection (ECellTextView *text_view)
-{
- CellEdit *edit = text_view->edit;
- gint length;
- gchar *sp, *ep;
-
- if (edit->selection_end == edit->selection_start) return;
-
- if (edit->selection_end < edit->selection_start) {
- edit->selection_end ^= edit->selection_start;
- edit->selection_start ^= edit->selection_end;
- edit->selection_end ^= edit->selection_start;
- }
-
- sp = edit->text + edit->selection_start;
- ep = edit->text + edit->selection_end;
- length = strlen (ep) + 1;
-
- memmove (sp, ep, length);
-
- edit->selection_end = edit->selection_start;
-}
-
-/* fixme: */
-/* NB! We expect value to be length IN BYTES */
-
-static void
-_insert (ECellTextView *text_view, char *string, int value)
-{
- CellEdit *edit = text_view->edit;
- char *temp;
-
- if (value <= 0) return;
-
- edit->selection_start = MIN (strlen(edit->text), edit->selection_start);
-
- temp = g_new (gchar, strlen (edit->text) + value + 1);
-
- strncpy (temp, edit->text, edit->selection_start);
- strncpy (temp + edit->selection_start, string, value);
- strcpy (temp + edit->selection_start + value, edit->text + edit->selection_end);
-
- g_free (edit->text);
-
- edit->text = temp;
-
- edit->selection_start += value;
- edit->selection_end = edit->selection_start;
-}
-
-static void
-capitalize (CellEdit *edit, int start, int end, ETextEventProcessorCaps type)
-{
- ECellTextView *text_view = edit->text_view;
-
- gboolean first = TRUE;
- int character_length = g_utf8_strlen (edit->text + start, start - end);
- const char *p = edit->text + start;
- const char *text_end = edit->text + end;
- char *new_text = g_new0 (char, character_length * 6 + 1);
- char *output = new_text;
-
- while (p && *p && p < text_end && g_unichar_validate (g_utf8_get_char (p))) {
- gunichar unival = g_utf8_get_char (p);
- gunichar newval = unival;
-
- switch (type) {
- case E_TEP_CAPS_UPPER:
- newval = g_unichar_toupper (unival);
- break;
- case E_TEP_CAPS_LOWER:
- newval = g_unichar_tolower (unival);
- break;
- case E_TEP_CAPS_TITLE:
- if (g_unichar_isalpha (unival)) {
- if (first)
- newval = g_unichar_totitle (unival);
- else
- newval = g_unichar_tolower (unival);
- first = FALSE;
- } else {
- first = TRUE;
- }
- break;
- }
- g_unichar_to_utf8 (newval, output);
- output = g_utf8_next_char (output);
-
- p = g_utf8_next_char (p);
- }
- *output = 0;
-
- edit->selection_end = end;
- edit->selection_start = start;
- _delete_selection (text_view);
-
- _insert (text_view, new_text, output - new_text);
-
- g_free (new_text);
-}
-
-static void
-e_cell_text_view_command (ETextEventProcessor *tep, ETextEventProcessorCommand *command, gpointer data)
-{
- CellEdit *edit = (CellEdit *) data;
- ECellTextView *text_view = edit->text_view;
- ECellText *ect = E_CELL_TEXT (text_view->cell_view.ecell);
-
- gboolean change = FALSE;
- gboolean redraw = FALSE;
-
- int sel_start, sel_end;
-
- /* If the EText isn't editable, then ignore any commands that would
- modify the text. */
- if (!ect->editable && (command->action == E_TEP_DELETE
- || command->action == E_TEP_INSERT
- || command->action == E_TEP_PASTE
- || command->action == E_TEP_GET_SELECTION))
- return;
-
- switch (command->action) {
- case E_TEP_MOVE:
- edit->selection_start = _get_position (text_view, command);
- edit->selection_end = edit->selection_start;
- if (edit->timer) {
- g_timer_reset (edit->timer);
- }
- redraw = TRUE;
- break;
- case E_TEP_SELECT:
- edit->selection_end = _get_position (text_view, command);
- sel_start = MIN(edit->selection_start, edit->selection_end);
- sel_end = MAX(edit->selection_start, edit->selection_end);
- if (sel_start != sel_end) {
- e_cell_text_view_supply_selection (edit, command->time, GDK_SELECTION_PRIMARY,
- edit->text + sel_start,
- sel_end - sel_start);
- } else if (edit->timer) {
- g_timer_reset (edit->timer);
- }
- redraw = TRUE;
- break;
- case E_TEP_DELETE:
- if (edit->selection_end == edit->selection_start) {
- edit->selection_end = _get_position (text_view, command);
- }
- _delete_selection (text_view);
- if (edit->timer) {
- g_timer_reset (edit->timer);
- }
- redraw = TRUE;
- change = TRUE;
- break;
-
- case E_TEP_INSERT:
- if (!edit->preedit_length && edit->selection_end != edit->selection_start) {
- _delete_selection (text_view);
- }
- _insert (text_view, command->string, command->value);
- if (edit->timer) {
- g_timer_reset (edit->timer);
- }
- redraw = TRUE;
- change = TRUE;
- break;
- case E_TEP_COPY:
- sel_start = MIN(edit->selection_start, edit->selection_end);
- sel_end = MAX(edit->selection_start, edit->selection_end);
- if (sel_start != sel_end) {
- e_cell_text_view_supply_selection (edit, command->time, clipboard_atom,
- edit->text + sel_start,
- sel_end - sel_start);
- }
- if (edit->timer) {
- g_timer_reset (edit->timer);
- }
- break;
- case E_TEP_PASTE:
- e_cell_text_view_get_selection (edit, clipboard_atom, command->time);
- if (edit->timer) {
- g_timer_reset (edit->timer);
- }
- redraw = TRUE;
- change = TRUE;
- break;
- case E_TEP_GET_SELECTION:
- e_cell_text_view_get_selection (edit, GDK_SELECTION_PRIMARY, command->time);
- break;
- case E_TEP_ACTIVATE:
- e_table_item_leave_edit_ (text_view->cell_view.e_table_item_view);
- break;
- case E_TEP_SET_SELECT_BY_WORD:
- edit->select_by_word = command->value;
- break;
- case E_TEP_GRAB:
- edit->actions = E_CELL_GRAB;
- break;
- case E_TEP_UNGRAB:
- edit->actions = E_CELL_UNGRAB;
- break;
- case E_TEP_CAPS:
- if (edit->selection_start == edit->selection_end) {
- capitalize (edit, edit->selection_start, next_word (edit, edit->selection_start), command->value);
- } else {
- int selection_start = MIN (edit->selection_start, edit->selection_end);
- int selection_end = edit->selection_start + edit->selection_end - selection_start; /* Slightly faster than MAX */
- capitalize (edit, selection_start, selection_end, command->value);
- }
- if (edit->timer) {
- g_timer_reset (edit->timer);
- }
- redraw = TRUE;
- change = TRUE;
- break;
- case E_TEP_NOP:
- break;
- }
-
- if (change) {
- if (edit->layout)
- g_object_unref (edit->layout);
- edit->layout = build_layout (text_view, edit->row, edit->text, edit->cell_width);
- }
-
- if (!edit->button_down) {
- PangoRectangle strong_pos, weak_pos;
- pango_layout_get_cursor_pos (edit->layout, edit->selection_end, &strong_pos, &weak_pos);
- if (strong_pos.x != weak_pos.x ||
- strong_pos.y != weak_pos.y ||
- strong_pos.width != weak_pos.width ||
- strong_pos.height != weak_pos.height) {
- if (show_pango_rectangle (edit, weak_pos))
- redraw = TRUE;
- }
- if (show_pango_rectangle (edit, strong_pos)) {
- redraw = TRUE;
- }
- }
-
- if (redraw){
- ect_queue_redraw (text_view, edit->view_col, edit->row);
- }
-}
-
-#ifdef DO_SELECTION
-static void
-_selection_clear_event (GtkInvisible *invisible,
- GdkEventSelection *event,
- CellEdit *edit)
-{
- if (event->selection == GDK_SELECTION_PRIMARY) {
- g_free (edit->primary_selection);
- edit->primary_selection = NULL;
- edit->primary_length = 0;
-
- edit->has_selection = FALSE;
-#if 0
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(text));
-#endif
-
- } else if (event->selection == clipboard_atom) {
- g_free (edit->clipboard_selection);
- edit->clipboard_selection = NULL;
- edit->clipboard_length = 0;
- }
-}
-
-static void
-_selection_get (GtkInvisible *invisible,
- GtkSelectionData *selection_data,
- guint info,
- guint time_stamp,
- CellEdit *edit)
-{
- switch (info) {
- case E_SELECTION_PRIMARY:
- gtk_selection_data_set (selection_data, UTF8_ATOM,
- 8, edit->primary_selection,
- edit->primary_length);
- break;
- case E_SELECTION_CLIPBOARD:
- gtk_selection_data_set (selection_data, UTF8_ATOM,
- 8, edit->clipboard_selection,
- edit->clipboard_length);
- break;
- }
-}
-
-/* fixme: What happens, if delivered string is not UTF-8? */
-
-static void
-_selection_received (GtkInvisible *invisible,
- GtkSelectionData *selection_data,
- guint time,
- CellEdit *edit)
-{
- if (selection_data->length < 0 ||
- !(selection_data->type == UTF8_ATOM ||
- selection_data->type == GDK_SELECTION_TYPE_STRING)) {
- return;
- } else {
- ETextEventProcessorCommand command;
- command.action = E_TEP_INSERT;
- command.position = E_TEP_SELECTION;
- command.string = selection_data->data;
- command.value = selection_data->length;
- command.time = time;
- e_cell_text_view_command (edit->tep, &command, edit);
- }
-}
-
-static GtkWidget *e_cell_text_view_get_invisible (CellEdit *edit)
-{
- if (edit->invisible == NULL) {
- GtkWidget *invisible = gtk_invisible_new ();
- edit->invisible = invisible;
-
- gtk_selection_add_target (invisible,
- GDK_SELECTION_PRIMARY,
- UTF8_ATOM,
- E_SELECTION_PRIMARY);
- gtk_selection_add_target (invisible,
- clipboard_atom,
- UTF8_ATOM,
- E_SELECTION_CLIPBOARD);
-
- g_signal_connect (invisible, "selection_get",
- G_CALLBACK (_selection_get),
- edit);
- g_signal_connect (invisible, "selection_clear_event",
- G_CALLBACK (_selection_clear_event),
- edit);
- g_signal_connect (invisible, "selection_received",
- G_CALLBACK (_selection_received),
- edit);
- }
- return edit->invisible;
-}
-#endif
-
-static void
-e_cell_text_view_supply_selection (CellEdit *edit, guint time, GdkAtom selection, char *data, gint length)
-{
-#if DO_SELECTION
- gboolean successful;
- GtkWidget *invisible;
-
- invisible = e_cell_text_view_get_invisible (edit);
-
- if (selection == GDK_SELECTION_PRIMARY){
- if (edit->primary_selection) {
- g_free (edit->primary_selection);
- }
- edit->primary_selection = g_strndup (data, length);
- edit->primary_length = length;
- } else if (selection == clipboard_atom) {
- if (edit->clipboard_selection) {
- g_free (edit->clipboard_selection);
- }
- edit->clipboard_selection = g_strndup (data, length);
- edit->clipboard_length = length;
- }
-
- successful = gtk_selection_owner_set (invisible,
- selection,
- time);
-
- if (selection == GDK_SELECTION_PRIMARY)
- edit->has_selection = successful;
-#endif
-}
-
-static void
-e_cell_text_view_get_selection (CellEdit *edit, GdkAtom selection, guint32 time)
-{
-#if DO_SELECTION
- GtkWidget *invisible;
- invisible = e_cell_text_view_get_invisible (edit);
- gtk_selection_convert (invisible,
- selection,
- UTF8_ATOM,
- time);
-#endif
-}
-
-static void
-_get_tep (CellEdit *edit)
-{
- if (!edit->tep) {
- edit->tep = e_text_event_processor_emacs_like_new ();
- g_signal_connect (edit->tep,
- "command",
- G_CALLBACK(e_cell_text_view_command),
- (gpointer) edit);
- }
-}
-
-static GdkColor*
-e_cell_text_get_color (ECellTextView *cell_view, gchar *color_spec)
-{
- ECellText *ect = E_CELL_TEXT (((ECellView*) cell_view)->ecell);
- GdkColormap *colormap;
- GdkColor *color, tmp_color;
-
- /* If the color spec is NULL we use the default color. */
- if (color_spec == NULL)
- return NULL;
-
- /* Create the hash table if we haven't already. */
- if (!ect->colors)
- ect->colors = g_hash_table_new (g_str_hash, g_str_equal);
-
- /* See if we've already allocated the color. Note that we use a
- special value of (GdkColor*) 1 in the hash to indicate that we've
- already tried and failed to allocate the color, so we don't keep
- trying to allocate it. */
- color = g_hash_table_lookup (ect->colors, color_spec);
- if (color == (GdkColor*) 1)
- return NULL;
- if (color)
- return color;
-
- /* Try to parse the color. */
- if (gdk_color_parse (color_spec, &tmp_color)) {
- colormap = gtk_widget_get_colormap (GTK_WIDGET (cell_view->canvas));
-
- /* Try to allocate the color. */
- if (gdk_color_alloc (colormap, &tmp_color))
- color = gdk_color_copy (&tmp_color);
- }
-
- g_hash_table_insert (ect->colors, g_strdup (color_spec),
- color ? color : (GdkColor*) 1);
- return color;
-}
-
-/**
- * e_cell_text_set_selection:
- * @cell_view: the given cell view
- * @col: column of the given cell in the view
- * @row: row of the given cell in the view
- * @start: start offset of the selection
- * @end: end offset of the selection
- *
- * Sets the selection of given text cell.
- * If the current editing cell is not the given cell, this function
- * will return FALSE;
- *
- * If success, the [start, end) part of the text will be selected.
- *
- * This API is most likely to be used by a11y implementations.
- *
- * Returns: whether the action is successful.
- */
-gboolean
-e_cell_text_set_selection (ECellView *cell_view,
- gint col,
- gint row,
- gint start,
- gint end)
-{
- ECellTextView *ectv;
- CellEdit *edit;
- ETextEventProcessorCommand command1, command2;
-
- ectv = (ECellTextView *)cell_view;
- edit = ectv->edit;
- if (!edit)
- return FALSE;
-
- if (edit->view_col != col || edit->row != row)
- return FALSE;
-
- command1.action = E_TEP_MOVE;
- command1.position = E_TEP_VALUE;
- command1.value = start;
- e_cell_text_view_command (edit->tep, &command1, edit);
-
- command2.action = E_TEP_SELECT;
- command2.position = E_TEP_VALUE;
- command2.value = end;
- e_cell_text_view_command (edit->tep, &command2, edit);
-
- return TRUE;
-}
-
-/**
- * e_cell_text_get_selection:
- * @cell_view: the given cell view
- * @col: column of the given cell in the view
- * @row: row of the given cell in the view
- * @start: a pointer to an int value indicates the start offset of the selection
- * @end: a pointer to an int value indicates the end offset of the selection
- *
- * Gets the selection of given text cell.
- * If the current editing cell is not the given cell, this function
- * will return FALSE;
- *
- * This API is most likely to be used by a11y implementations.
- *
- * Returns: whether the action is successful.
- */
-gboolean
-e_cell_text_get_selection (ECellView *cell_view,
- gint col,
- gint row,
- gint *start,
- gint *end)
-{
- ECellTextView *ectv;
- CellEdit *edit;
-
- ectv = (ECellTextView *)cell_view;
- edit = ectv->edit;
- if (!edit)
- return FALSE;
-
- if (edit->view_col != col || edit->row != row)
- return FALSE;
-
- if (start)
- *start = edit->selection_start;
- if (end)
- *end = edit->selection_end;
- return TRUE;
-}
-
-/**
- * e_cell_text_copy_clipboard:
- * @cell_view: the given cell view
- * @col: column of the given cell in the view
- * @row: row of the given cell in the view
- *
- * Copys the selected text to clipboard.
- *
- * This API is most likely to be used by a11y implementations.
- */
-void
-e_cell_text_copy_clipboard (ECellView *cell_view, gint col, gint row)
-{
- ECellTextView *ectv;
- CellEdit *edit;
- ETextEventProcessorCommand command;
-
- ectv = (ECellTextView *)cell_view;
- edit = ectv->edit;
- if (!edit)
- return;
-
- if (edit->view_col != col || edit->row != row)
- return;
-
- command.action = E_TEP_COPY;
- command.time = GDK_CURRENT_TIME;
- e_cell_text_view_command (edit->tep, &command, edit);
-}
-
-/**
- * e_cell_text_paste_clipboard:
- * @cell_view: the given cell view
- * @col: column of the given cell in the view
- * @row: row of the given cell in the view
- *
- * Pastes the text from the clipboardt.
- *
- * This API is most likely to be used by a11y implementations.
- */
-void
-e_cell_text_paste_clipboard (ECellView *cell_view, gint col, gint row)
-{
- ECellTextView *ectv;
- CellEdit *edit;
- ETextEventProcessorCommand command;
-
- ectv = (ECellTextView *)cell_view;
- edit = ectv->edit;
- if (!edit)
- return;
-
- if (edit->view_col != col || edit->row != row)
- return;
-
- command.action = E_TEP_PASTE;
- command.time = GDK_CURRENT_TIME;
- e_cell_text_view_command (edit->tep, &command, edit);
-}
-
-/**
- * e_cell_text_delete_selection:
- * @cell_view: the given cell view
- * @col: column of the given cell in the view
- * @row: row of the given cell in the view
- *
- * Deletes the selected text of the cell.
- *
- * This API is most likely to be used by a11y implementations.
- */
-void
-e_cell_text_delete_selection (ECellView *cell_view, gint col, gint row)
-{
- ECellTextView *ectv;
- CellEdit *edit;
- ETextEventProcessorCommand command;
-
- ectv = (ECellTextView *)cell_view;
- edit = ectv->edit;
- if (!edit)
- return;
-
- if (edit->view_col != col || edit->row != row)
- return;
-
- command.action = E_TEP_DELETE;
- command.position = E_TEP_SELECTION;
- e_cell_text_view_command (edit->tep, &command, edit);
-}
diff --git a/widgets/table/e-cell-text.h b/widgets/table/e-cell-text.h
deleted file mode 100644
index 5310ffc5f9..0000000000
--- a/widgets/table/e-cell-text.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-text.h: Text cell renderer.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Chris Lahey <clahey@ximian.com>
- *
- * A lot of code taken from:
- *
- * Text item type for GnomeCanvas widget
- *
- * GnomeCanvas is basically a port of the Tk toolkit's most excellent
- * canvas widget. Tk is copyrighted by the Regents of the University
- * of California, Sun Microsystems, and other parties.
- *
- * Copyright (C) 1998 The Free Software Foundation
- *
- * Author: Federico Mena <federico@nuclecu.unam.mx>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_TEXT_H_
-#define _E_CELL_TEXT_H_
-#include <gtk/gtkmenu.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-cell.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_TEXT_TYPE (e_cell_text_get_type ())
-#define E_CELL_TEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_TEXT_TYPE, ECellText))
-#define E_CELL_TEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_TEXT_TYPE, ECellTextClass))
-#define E_IS_CELL_TEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_TEXT_TYPE))
-#define E_IS_CELL_TEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_TEXT_TYPE))
-
-typedef struct {
- ECell parent;
-
- GtkJustification justify;
- char *font_name;
-
- double x, y; /* Position at anchor */
-
- gulong pixel; /* Fill color */
-
- /* Clip handling */
- char *ellipsis; /* The ellipsis characters. NULL = "...". */
-
- guint use_ellipsis : 1; /* Whether to use the ellipsis. */
- guint editable : 1; /* Whether the text can be edited. */
-
- int strikeout_column;
- int underline_column;
- int bold_column;
-
- /* This column in the ETable should return a string specifying a color,
- either a color name like "red" or a color spec like "rgb:F/0/0".
- See the XParseColor man page for the formats available. */
- int color_column;
- int bg_color_column;
-
- /* This stores the colors we have allocated. */
- GHashTable *colors;
-} ECellText;
-
-typedef struct {
- ECellClass parent_class;
-
- char *(*get_text) (ECellText *cell, ETableModel *model, int col, int row);
- void (*free_text) (ECellText *cell, char *text);
- void (*set_value) (ECellText *cell, ETableModel *model, int col, int row, const char *text);
-} ECellTextClass;
-
-GType e_cell_text_get_type (void);
-ECell *e_cell_text_new (const char *fontname, GtkJustification justify);
-ECell *e_cell_text_construct(ECellText *cell, const char *fontname, GtkJustification justify);
-
-/* Gets the value from the model and converts it into a string. In ECellText
- itself, the value is assumed to be a char* and so needs no conversion.
- In subclasses the ETableModel value may be a more complicated datatype. */
-char *e_cell_text_get_text (ECellText *cell, ETableModel *model, int col, int row);
-
-/* Frees the value returned by e_cell_text_get_text(). */
-void e_cell_text_free_text (ECellText *cell, char *text);
-
-/* Sets the ETableModel value, based on the given string. */
-void e_cell_text_set_value (ECellText *cell, ETableModel *model, int col, int row, const char *text);
-
-/* Sets the selection of given text cell */
-gboolean e_cell_text_set_selection (ECellView *cell_view, gint col, gint row, gint start, gint end);
-
-/* Gets the selection of given text cell */
-gboolean e_cell_text_get_selection (ECellView *cell_view, gint col, gint row, gint *start, gint *end);
-
-/* Copys the selected text to the clipboard */
-void e_cell_text_copy_clipboard (ECellView *cell_view, gint col, gint row);
-
-/* Pastes the text from the clipboard */
-void e_cell_text_paste_clipboard (ECellView *cell_view, gint col, gint row);
-
-/* Deletes selected text */
-void e_cell_text_delete_selection (ECellView *cell_view, gint col, gint row);
-
-G_END_DECLS
-
-#endif /* _E_CELL_TEXT_H_ */
-
-
diff --git a/widgets/table/e-cell-toggle.c b/widgets/table/e-cell-toggle.c
deleted file mode 100644
index f334c3f6ca..0000000000
--- a/widgets/table/e-cell-toggle.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-toggle.c - Multi-state image toggle cell object.
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtkenums.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtksignal.h>
-#include <gdk/gdkkeysyms.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include "e-cell-toggle.h"
-#include "gal/util/e-util.h"
-#include "gal/widgets/e-hsv-utils.h"
-#include "e-table-item.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-toggle.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-registry.h"
-
-#define PARENT_TYPE e_cell_get_type ()
-
-typedef struct {
- ECellView cell_view;
- GdkGC *gc;
- GnomeCanvas *canvas;
- GdkPixmap **pixmap_cache;
-} ECellToggleView;
-
-static ECellClass *parent_class;
-
-#define CACHE_SEQ_COUNT 6
-
-static int
-gnome_print_pixbuf (GnomePrintContext *pc, GdkPixbuf *pixbuf)
-{
- if (gdk_pixbuf_get_has_alpha (pixbuf))
- return gnome_print_rgbaimage (pc,
- gdk_pixbuf_get_pixels (pixbuf),
- gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf),
- gdk_pixbuf_get_rowstride (pixbuf));
- else
- return gnome_print_rgbimage (pc,
- gdk_pixbuf_get_pixels (pixbuf),
- gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf),
- gdk_pixbuf_get_rowstride (pixbuf));
-}
-
-/*
- * ECell::realize method
- */
-static ECellView *
-etog_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- ECellToggleView *toggle_view = g_new0 (ECellToggleView, 1);
- ETableItem *eti = E_TABLE_ITEM (e_table_item_view);
- GnomeCanvas *canvas = GNOME_CANVAS_ITEM (eti)->canvas;
- ECellToggle *etog = E_CELL_TOGGLE (ecell);
- int i;
-
- toggle_view->cell_view.ecell = ecell;
- toggle_view->cell_view.e_table_model = table_model;
- toggle_view->cell_view.e_table_item_view = e_table_item_view;
- toggle_view->canvas = canvas;
- toggle_view->pixmap_cache = g_new (GdkPixmap *, etog->n_states * CACHE_SEQ_COUNT);
- for (i = 0; i < etog->n_states * CACHE_SEQ_COUNT; i++)
- toggle_view->pixmap_cache[i] = NULL;
-
- return (ECellView *) toggle_view;
-}
-
-static void
-etog_kill_view (ECellView *ecell_view)
-{
- ECellToggle *etog = E_CELL_TOGGLE (ecell_view->ecell);
- ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
- int i;
-
- for (i = 0; i < etog->n_states * CACHE_SEQ_COUNT; i++)
- if (toggle_view->pixmap_cache[i])
- gdk_pixmap_unref (toggle_view->pixmap_cache[i]);
- g_free (toggle_view->pixmap_cache);
- g_free (ecell_view);
-}
-
-static void
-etog_realize (ECellView *ecell_view)
-{
- ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
-
- toggle_view->gc = gdk_gc_new (GTK_WIDGET (toggle_view->canvas)->window);
-}
-
-/*
- * ECell::unrealize method
- */
-static void
-etog_unrealize (ECellView *ecv)
-{
- ECellToggleView *toggle_view = (ECellToggleView *) ecv;
-
- gdk_gc_unref (toggle_view->gc);
- toggle_view->gc = NULL;
-}
-
-#define PIXMAP_CACHE(toggle_view, cache_seq, image_seq) ((toggle_view)->pixmap_cache[(cache_seq) * E_CELL_TOGGLE (((ECellView *) (toggle_view))->ecell)->n_states + (image_seq)])
-
-#define RGB_COLOR(color) (((color).red & 0xff00) << 8 | \
- ((color).green & 0xff00) | \
- ((color).blue & 0xff00) >> 8)
-
-static void
-check_cache (ECellToggleView *toggle_view, int image_seq, int cache_seq)
-{
- ECellView *ecell_view = (ECellView *) toggle_view;
- ECellToggle *etog = E_CELL_TOGGLE (ecell_view->ecell);
-
- if (PIXMAP_CACHE (toggle_view, cache_seq, image_seq) == NULL) {
- GdkPixbuf *image = etog->images[image_seq];
- GdkPixbuf *flat;
- GdkColor color;
- int width = gdk_pixbuf_get_width (image);
- int height = gdk_pixbuf_get_height (image);
-
- PIXMAP_CACHE (toggle_view, cache_seq, image_seq) =
- gdk_pixmap_new (toggle_view->canvas->layout.bin_window, width, height,
- gtk_widget_get_visual (GTK_WIDGET (toggle_view->canvas))->depth);
-
-
- switch (cache_seq % 3) {
- case 0:
- color = GTK_WIDGET (toggle_view->canvas)->style->bg [GTK_STATE_SELECTED];
- break;
- case 1:
- color = GTK_WIDGET (toggle_view->canvas)->style->bg [GTK_STATE_ACTIVE];
- break;
- case 2:
- color = GTK_WIDGET (toggle_view->canvas)->style->base [GTK_STATE_NORMAL];
- break;
- }
-
- if (cache_seq >= 3) {
- e_hsv_tweak (&color, 0.0f, 0.0f, -0.07f);
- }
-
- flat = gdk_pixbuf_composite_color_simple (image,
- width, height,
- GDK_INTERP_BILINEAR,
- 255,
- 1,
- RGB_COLOR (color), RGB_COLOR (color));
-
- gdk_pixbuf_render_to_drawable (flat, PIXMAP_CACHE (toggle_view, cache_seq, image_seq),
- toggle_view->gc,
- 0, 0,
- 0, 0,
- width, height,
- GDK_RGB_DITHER_NORMAL,
- 0, 0);
- gdk_pixbuf_unref (flat);
- }
-}
-
-/*
- * ECell::draw method
- */
-static void
-etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
- gboolean selected;
- ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
- GdkPixmap *pixmap;
- GdkPixbuf *image;
- int x, y, width, height;
- int cache_seq;
-
- const int value = GPOINTER_TO_INT (
- e_table_model_value_at (ecell_view->e_table_model, model_col, row));
-
- selected = flags & E_CELL_SELECTED;
-
- if (value >= toggle->n_states){
- g_warning ("Value from the table model is %d, the states we support are [0..%d)\n",
- value, toggle->n_states);
- return;
- }
-
- if (flags & E_CELL_SELECTED) {
- if (GTK_WIDGET_HAS_FOCUS (toggle_view->canvas))
- cache_seq = 0;
- else
- cache_seq = 1;
- } else
- cache_seq = 2;
-
- if (E_TABLE_ITEM (ecell_view->e_table_item_view)->alternating_row_colors && (row % 2) == 0)
- cache_seq += 3;
-
- check_cache (toggle_view, value, cache_seq);
-
- pixmap = PIXMAP_CACHE (toggle_view, cache_seq, value);
- image = toggle->images[value];
-
- if ((x2 - x1) < gdk_pixbuf_get_width (image)){
- x = x1;
- width = x2 - x1;
- } else {
- x = x1 + ((x2 - x1) - gdk_pixbuf_get_width (image)) / 2;
- width = gdk_pixbuf_get_width (image);
- }
-
- if ((y2 - y1) < gdk_pixbuf_get_height (image)){
- y = y1;
- height = y2 - y1;
- } else {
- y = y1 + ((y2 - y1) - gdk_pixbuf_get_height (image)) / 2;
- height = gdk_pixbuf_get_height (image);
- }
-
- gdk_draw_pixmap (drawable, toggle_view->gc,
- pixmap,
- 0, 0,
- x, y,
- width, height);
-}
-
-static void
-etog_set_value (ECellToggleView *toggle_view, int model_col, int view_col, int row, int value)
-{
- ECell *ecell = toggle_view->cell_view.ecell;
- ECellToggle *toggle = E_CELL_TOGGLE (ecell);
-
- if (value >= toggle->n_states)
- value = 0;
-
- e_table_model_set_value_at (toggle_view->cell_view.e_table_model,
- model_col, row, GINT_TO_POINTER (value));
-}
-
-/*
- * ECell::event method
- */
-static gint
-etog_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions)
-{
- ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
- void *_value = e_table_model_value_at (ecell_view->e_table_model, model_col, row);
- const int value = GPOINTER_TO_INT (_value);
-
-#if 0
- if (!(flags & E_CELL_EDITING))
- return FALSE;
-#endif
-
- switch (event->type){
- case GDK_KEY_PRESS:
- if (event->key.keyval != GDK_space)
- return FALSE;
- /* Fall through */
- case GDK_BUTTON_PRESS:
- if (!e_table_model_is_cell_editable(ecell_view->e_table_model, model_col, row))
- return FALSE;
-
- etog_set_value (toggle_view, model_col, view_col, row, value + 1);
- return TRUE;
-
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-/*
- * ECell::height method
- */
-static int
-etog_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
-
- return toggle->height;
-}
-
-/*
- * ECell::print method
- */
-static void
-etog_print (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width, double height)
-{
- ECellToggle *toggle = E_CELL_TOGGLE(ecell_view->ecell);
- GdkPixbuf *image;
- const int value = GPOINTER_TO_INT (
- e_table_model_value_at (ecell_view->e_table_model, model_col, row));
-
- if (value >= toggle->n_states){
- g_warning ("Value from the table model is %d, the states we support are [0..%d)\n",
- value, toggle->n_states);
- return;
- }
-
- gnome_print_gsave(context);
-
- image = toggle->images[value];
-
- gnome_print_translate (context, 0, (height - toggle->height) / 2);
- gnome_print_scale (context, toggle->height, toggle->height);
- gnome_print_pixbuf (context, image);
-
- gnome_print_grestore(context);
-}
-
-static gdouble
-etog_print_height (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width)
-{
- ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
-
- return toggle->height;
-}
-
-/*
- * ECell::max_width method
- */
-static int
-etog_max_width (ECellView *ecell_view, int model_col, int view_col)
-{
- ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
- int max_width = 0;
- int number_of_rows;
- int row;
-
- number_of_rows = e_table_model_row_count (ecell_view->e_table_model);
- for (row = 0; row < number_of_rows; row++) {
- void *value = e_table_model_value_at (ecell_view->e_table_model,
- model_col, row);
- max_width = MAX (max_width, gdk_pixbuf_get_width (toggle->images[GPOINTER_TO_INT (value)]));
- }
-
- return max_width;
-}
-
-static void
-etog_style_set (ECellView *ecell_view, GtkStyle *previous_style)
-{
- ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
- ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
- int i;
-
- for (i = 0; i < toggle->n_states * CACHE_SEQ_COUNT; i++) {
- if (toggle_view->pixmap_cache[i]) {
- gdk_pixmap_unref (toggle_view->pixmap_cache[i]);
- toggle_view->pixmap_cache[i] = NULL;
- }
- }
-}
-
-static void
-etog_finalize (GObject *object)
-{
- ECellToggle *etog = E_CELL_TOGGLE (object);
- int i;
-
- for (i = 0; i < etog->n_states; i++)
- gdk_pixbuf_unref (etog->images [i]);
-
- g_free (etog->images);
-
- etog->images = NULL;
- etog->n_states = 0;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-e_cell_toggle_class_init (GtkObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
-
- G_OBJECT_CLASS (object_class)->finalize = etog_finalize;
-
- ecc->new_view = etog_new_view;
- ecc->kill_view = etog_kill_view;
- ecc->realize = etog_realize;
- ecc->unrealize = etog_unrealize;
- ecc->draw = etog_draw;
- ecc->event = etog_event;
- ecc->height = etog_height;
- ecc->print = etog_print;
- ecc->print_height = etog_print_height;
- ecc->max_width = etog_max_width;
- ecc->style_set = etog_style_set;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
- gal_a11y_e_cell_registry_add_cell_type (NULL,
- E_CELL_TOGGLE_TYPE,
- gal_a11y_e_cell_toggle_new);
-}
-
-static void
-e_cell_toggle_init (GtkObject *object)
-{
- ECellToggle *etog = (ECellToggle *) object;
-
- etog->images = NULL;
- etog->n_states = 0;
-}
-
-E_MAKE_TYPE(e_cell_toggle, "ECellToggle", ECellToggle, e_cell_toggle_class_init, e_cell_toggle_init, PARENT_TYPE)
-
-/**
- * e_cell_toggle_construct:
- * @etog: a fresh ECellToggle object
- * @border: number of pixels used as a border
- * @n_states: number of states the toggle will have
- * @images: a collection of @n_states images, one for each state.
- *
- * Constructs the @etog object with the @border, @n_staes, and @images
- * arguments.
- */
-void
-e_cell_toggle_construct (ECellToggle *etog, int border, int n_states, GdkPixbuf **images)
-{
- int max_height = 0;
- int i;
-
- etog->border = border;
- etog->n_states = n_states;
-
- etog->images = g_new (GdkPixbuf *, n_states);
-
- for (i = 0; i < n_states; i++){
- etog->images [i] = images [i];
- gdk_pixbuf_ref (images [i]);
-
- if (gdk_pixbuf_get_height (images [i]) > max_height)
- max_height = gdk_pixbuf_get_height (images [i]);
- }
-
- etog->height = max_height;
-}
-
-/**
- * e_cell_checkbox_new:
- * @border: number of pixels used as a border
- * @n_states: number of states the toggle will have
- * @images: a collection of @n_states images, one for each state.
- *
- * Creates a new ECell renderer that can be used to render toggle
- * buttons with the images specified in @images. The value returned
- * by ETableModel::get_value is typecase into an integer and clamped
- * to the [0..n_states) range. That will select the image rendered.
- *
- * Returns: an ECell object that can be used to render multi-state
- * toggle cells.
- */
-ECell *
-e_cell_toggle_new (int border, int n_states, GdkPixbuf **images)
-{
- ECellToggle *etog = g_object_new (E_CELL_TOGGLE_TYPE, NULL);
-
- e_cell_toggle_construct (etog, border, n_states, images);
-
- return (ECell *) etog;
-}
diff --git a/widgets/table/e-cell-toggle.h b/widgets/table/e-cell-toggle.h
deleted file mode 100644
index 71d9de3883..0000000000
--- a/widgets/table/e-cell-toggle.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-toggle.h - Multi-state image toggle cell object.
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_TOGGLE_H_
-#define _E_CELL_TOGGLE_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gal/e-table/e-cell.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_TOGGLE_TYPE (e_cell_toggle_get_type ())
-#define E_CELL_TOGGLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_TOGGLE_TYPE, ECellToggle))
-#define E_CELL_TOGGLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_TOGGLE_TYPE, ECellToggleClass))
-#define E_IS_CELL_TOGGLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_TOGGLE_TYPE))
-#define E_IS_CELL_TOGGLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_TOGGLE_TYPE))
-
-typedef struct {
- ECell parent;
-
- int border;
- int n_states;
- GdkPixbuf **images;
-
- int height;
-} ECellToggle;
-
-typedef struct {
- ECellClass parent_class;
-} ECellToggleClass;
-
-GType e_cell_toggle_get_type (void);
-ECell *e_cell_toggle_new (int border, int n_states, GdkPixbuf **images);
-void e_cell_toggle_construct (ECellToggle *etog, int border,
- int n_states, GdkPixbuf **images);
-
-G_END_DECLS
-
-#endif /* _E_CELL_TOGGLE_H_ */
-
-
diff --git a/widgets/table/e-cell-tree.c b/widgets/table/e-cell-tree.c
deleted file mode 100644
index a0be81e889..0000000000
--- a/widgets/table/e-cell-tree.c
+++ /dev/null
@@ -1,911 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-tree.c - Tree cell object.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Toshok <toshok@ximian.com>
- *
- * A majority of code taken from:
- *
- * the ECellText renderer.
- * Copyright 1998, The Free Software Foundation
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-
-#include <gdk/gdkx.h> /* for BlackPixel */
-#include <gtk/gtkenums.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkinvisible.h>
-#include <gtk/gtksignal.h>
-#include <gdk/gdkkeysyms.h>
-#include <libgnomecanvas/gnome-canvas.h>
-
-#include "e-tree-table-adapter.h"
-#include "e-tree.h"
-#include "e-tree-model.h"
-#include "gal/util/e-util.h"
-#include "e-table-item.h"
-#include "e-cell-tree.h"
-
-#include "tree-expanded.xpm"
-#include "tree-unexpanded.xpm"
-
-#include "gal/a11y/e-table/gal-a11y-e-cell-registry.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-tree.h"
-
-#define PARENT_TYPE e_cell_get_type ()
-
-typedef struct {
- ECellView cell_view;
- ECellView *subcell_view;
- GdkGC *gc;
-
- GnomeCanvas *canvas;
- gboolean retro_look;
- gboolean prelit;
- gint animate_timeout;
-
-} ECellTreeView;
-
-static ECellClass *parent_class;
-
-#define INDENT_AMOUNT 16
-
-ECellView *
-e_cell_tree_view_get_subcell_view (ECellView *ect)
-{
- return ((ECellTreeView *)ect)->subcell_view;
-}
-
-static ETreePath
-e_cell_tree_get_node (ETableModel *table_model, int row)
-{
- return e_table_model_value_at (table_model, -1, row);
-}
-
-static ETreeModel*
-e_cell_tree_get_tree_model (ETableModel *table_model, int row)
-{
- return e_table_model_value_at (table_model, -2, row);
-}
-
-static ETreeTableAdapter *
-e_cell_tree_get_tree_table_adapter (ETableModel *table_model, int row)
-{
- return e_table_model_value_at (table_model, -3, row);
-}
-
-static int
-visible_depth_of_node (ETableModel *model, int row)
-{
- ETreeModel *tree_model = e_cell_tree_get_tree_model(model, row);
- ETreeTableAdapter *adapter = e_cell_tree_get_tree_table_adapter(model, row);
- ETreePath path = e_cell_tree_get_node(model, row);
- return (e_tree_model_node_depth (tree_model, path)
- - (e_tree_table_adapter_root_node_is_visible (adapter) ? 0 : 1));
-}
-
-/* If this is changed to not include the width of the expansion pixmap
- if the path is not expandable, then max_width needs to change as
- well. */
-static gint
-offset_of_node (ETableModel *table_model, int row)
-{
- ETreeModel *tree_model = e_cell_tree_get_tree_model(table_model, row);
- ETreePath path = e_cell_tree_get_node(table_model, row);
-
- if (visible_depth_of_node (table_model, row) > 0 ||
- e_tree_model_node_is_expandable(tree_model, path)) {
- return (visible_depth_of_node(table_model, row) + 1) * INDENT_AMOUNT;
- } else {
- return 0;
- }
-}
-
-/*
- * ECell::new_view method
- */
-static ECellView *
-ect_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- ECellTree *ect = E_CELL_TREE (ecell);
- ECellTreeView *tree_view = g_new0 (ECellTreeView, 1);
- GnomeCanvas *canvas = GNOME_CANVAS_ITEM (e_table_item_view)->canvas;
-
- tree_view->cell_view.ecell = ecell;
- tree_view->cell_view.e_table_model = table_model;
- tree_view->cell_view.e_table_item_view = e_table_item_view;
-
- /* create our subcell view */
- tree_view->subcell_view = e_cell_new_view (ect->subcell, table_model, e_table_item_view /* XXX */);
-
- tree_view->canvas = canvas;
-
- return (ECellView *)tree_view;
-}
-
-/*
- * ECell::kill_view method
- */
-static void
-ect_kill_view (ECellView *ecv)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecv;
-
- /* kill our subcell view */
- e_cell_kill_view (tree_view->subcell_view);
-
- g_free (tree_view);
-}
-
-/*
- * ECell::realize method
- */
-static void
-ect_realize (ECellView *ecell_view)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
-
- /* realize our subcell view */
- e_cell_realize (tree_view->subcell_view);
-
- tree_view->gc = gdk_gc_new (GTK_WIDGET (tree_view->canvas)->window);
-
- gdk_gc_set_line_attributes (tree_view->gc, 1,
- GDK_LINE_ON_OFF_DASH, None, None);
- gdk_gc_set_dashes (tree_view->gc, 0, "\1\1", 2);
-
- if (parent_class->realize)
- (* parent_class->realize) (ecell_view);
-}
-
-/*
- * ECell::unrealize method
- */
-static void
-ect_unrealize (ECellView *ecv)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecv;
-
- /* unrealize our subcell view. */
- e_cell_unrealize (tree_view->subcell_view);
-
- gdk_gc_unref (tree_view->gc);
- tree_view->gc = NULL;
-
- if (parent_class->unrealize)
- (* parent_class->unrealize) (ecv);
-}
-
-static void
-draw_retro_expander (ECellTreeView *ectv, GdkDrawable *drawable, gboolean expanded, GdkRectangle *rect)
-{
- GdkPixbuf *image;
- int image_width, image_height;
- ECellTree *ect = E_CELL_TREE(ectv->cell_view.ecell);
-
- image = expanded ? ect->open_pixbuf : ect->closed_pixbuf;
-
- image_width = gdk_pixbuf_get_width(image);
- image_height = gdk_pixbuf_get_height(image);
-
- gdk_pixbuf_render_to_drawable_alpha (image,
- drawable,
- rect->x, rect->y,
- rect->width - image_width / 2,
- rect->height - image_height / 2,
- image_width, image_height,
- GDK_PIXBUF_ALPHA_BILEVEL,
- 128,
- GDK_RGB_DITHER_NORMAL,
- image_width, 0);
-}
-
-static void
-draw_expander (ECellTreeView *ectv, GdkDrawable *drawable, GtkExpanderStyle expander_style, GtkStateType state, GdkRectangle *rect)
-{
- GtkWidget *tree = GTK_WIDGET (ectv->canvas)->parent;
- gint exp_size;
- gtk_widget_style_get (tree, "expander_size", &exp_size, NULL);
-
- gtk_paint_expander (tree->style, drawable, state, rect, tree, "treeview", rect->x + rect->width - exp_size / 2, rect->y + rect->height / 2, expander_style);
-}
-
-/*
- * ECell::draw method
- */
-static void
-ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- ECellTreeView *tree_view = (ECellTreeView *)ecell_view;
- ETreeModel *tree_model = e_cell_tree_get_tree_model(ecell_view->e_table_model, row);
- ETreeTableAdapter *tree_table_adapter = e_cell_tree_get_tree_table_adapter(ecell_view->e_table_model, row);
- ETreePath node;
- GdkRectangle rect, *clip_rect = NULL;
- GtkWidget *canvas = GTK_WIDGET (tree_view->canvas);
- GdkGC *fg_gc = canvas->style->fg_gc[GTK_STATE_ACTIVE];
- GdkColor *foreground;
- gboolean selected;
-
- int offset, subcell_offset;
-
- selected = flags & E_CELL_SELECTED;
-
- /* only draw the tree effects if we're the active sort */
- if (/* XXX */ TRUE) {
- GdkPixbuf *node_image;
- int node_image_width = 0, node_image_height = 0;
- ETreePath parent_node;
- ETree *tree = E_TREE (canvas->parent);
-
- gtk_widget_style_get (GTK_WIDGET (tree),
- "retro_look", &tree_view->retro_look,
- NULL);
- tree_view->prelit = FALSE;
-
- node = e_cell_tree_get_node (ecell_view->e_table_model, row);
-
- offset = offset_of_node (ecell_view->e_table_model, row);
- subcell_offset = offset;
-
- node_image = e_tree_model_icon_at (tree_model, node);
-
- if (node_image) {
- node_image_width = gdk_pixbuf_get_width (node_image);
- node_image_height = gdk_pixbuf_get_height (node_image);
- }
-
- /*
- * Be a nice citizen: clip to the region we are supposed to draw on
- */
- rect.x = x1;
- rect.y = y1;
- rect.width = subcell_offset + node_image_width;
- rect.height = y2 - y1;
-
- gdk_gc_set_clip_rectangle (tree_view->gc, &rect);
- gdk_gc_set_clip_rectangle (fg_gc, &rect);
- clip_rect = &rect;
-
- if (selected) {
- foreground = &canvas->style->text [GTK_STATE_SELECTED];
- } else {
- foreground = &canvas->style->text [GTK_STATE_NORMAL];
- }
-
- gdk_gc_set_foreground (tree_view->gc, foreground);
-
- /* draw our lines */
- if (tree_view->retro_look && E_CELL_TREE(tree_view->cell_view.ecell)->draw_lines) {
-
- int depth;
-
- if (visible_depth_of_node (ecell_view->e_table_model, row) > 0
- || e_tree_model_node_get_children (tree_model, node, NULL) > 0)
- gdk_draw_line (drawable, tree_view->gc,
- rect.x + offset - INDENT_AMOUNT / 2 + 1,
- rect.y + rect.height / 2,
- rect.x + offset,
- rect.y + rect.height / 2);
-
- if (visible_depth_of_node (ecell_view->e_table_model, row) != 0) {
- gdk_draw_line (drawable, tree_view->gc,
- rect.x + offset - INDENT_AMOUNT / 2,
- rect.y,
- rect.x + offset - INDENT_AMOUNT / 2,
- (e_tree_table_adapter_node_get_next (tree_table_adapter, node)
- ? rect.y + rect.height
- : rect.y + rect.height / 2));
- }
-
- /* now traverse back up to the root of the tree, checking at
- each level if the node has siblings, and drawing the
- correct vertical pipe for it's configuration. */
- parent_node = e_tree_model_node_get_parent (tree_model, node);
- offset -= INDENT_AMOUNT;
- depth = visible_depth_of_node (ecell_view->e_table_model, row) - 1;
- while (parent_node && depth != 0) {
- if (e_tree_table_adapter_node_get_next(tree_table_adapter, parent_node)) {
- gdk_draw_line (drawable, tree_view->gc,
- rect.x + offset - INDENT_AMOUNT / 2,
- rect.y,
- rect.x + offset - INDENT_AMOUNT / 2,
- rect.y + rect.height);
- }
- parent_node = e_tree_model_node_get_parent (tree_model, parent_node);
- depth --;
- offset -= INDENT_AMOUNT;
- }
- }
-
- /* now draw our icon if we're expandable */
- if (e_tree_model_node_is_expandable (tree_model, node)) {
- gboolean expanded = e_tree_table_adapter_node_is_expanded (tree_table_adapter, node);
- GdkRectangle r;
- if (tree_view->retro_look) {
- r.x = 0;
- r.y = 0;
- r.width = x1 + subcell_offset - INDENT_AMOUNT / 2,
- r.height = y1 + (y2 - y1) / 2,
- draw_retro_expander (tree_view, drawable, expanded, &r);
- } else {
- r = rect;
- r.width -= node_image_width + 2;
- draw_expander (tree_view, drawable, expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED, GTK_STATE_NORMAL, &r);
- }
- }
-
- if (node_image) {
- gdk_pixbuf_render_to_drawable_alpha (node_image,
- drawable,
- 0, 0,
- x1 + subcell_offset,
- y1 + (y2 - y1) / 2 - node_image_height / 2,
- node_image_width, node_image_height,
- GDK_PIXBUF_ALPHA_BILEVEL,
- 128,
- GDK_RGB_DITHER_NORMAL,
- node_image_width, 0);
- subcell_offset += node_image_width;
- }
- }
-
- /* Now cause our subcell to draw its contents, shifted by
- subcell_offset pixels */
- e_cell_draw (tree_view->subcell_view, drawable,
- model_col, view_col, row, flags,
- x1 + subcell_offset, y1, x2, y2);
-
- if (clip_rect) {
- gdk_gc_set_clip_rectangle (tree_view->gc, NULL);
- gdk_gc_set_clip_rectangle (fg_gc, NULL);
- }
-}
-
-static void
-adjust_event_position (GdkEvent *event, gint offset)
-{
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- case GDK_2BUTTON_PRESS:
- case GDK_3BUTTON_PRESS:
- event->button.x += offset;
- break;
- case GDK_MOTION_NOTIFY:
- event->motion.x += offset;
- break;
- default:
- break;
- }
-}
-
-static gboolean
-event_in_expander (GdkEvent *event, gint offset, gint height)
-{
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- return (event->button.x > (offset - INDENT_AMOUNT) && event->button.x < offset);
- case GDK_MOTION_NOTIFY:
- return (event->motion.x > (offset - INDENT_AMOUNT) && event->motion.x < offset &&
- event->motion.y > 2 && event->motion.y < (height - 2));
- default:
- break;
- }
-
- return FALSE;
-}
-
-/*
- * ECell::height method
- */
-static int
-ect_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
-
- return (((e_cell_height (tree_view->subcell_view, model_col, view_col, row)) + 1) / 2) * 2;
-}
-
-typedef struct {
- ECellTreeView *ectv;
- ETreeTableAdapter *etta;
- ETreePath node;
- gboolean expanded;
- gboolean finish;
- GdkRectangle area;
-} animate_closure_t;
-
-static gboolean
-animate_expander (gpointer data)
-{
- animate_closure_t *closure = (animate_closure_t *) data;
-
- if (closure->finish) {
- e_tree_table_adapter_node_set_expanded (closure->etta, closure->node, !closure->expanded);
- closure->ectv->animate_timeout = 0;
- g_free (data);
- return FALSE;
- }
-
- draw_expander (closure->ectv, GTK_LAYOUT (closure->ectv->canvas)->bin_window,
- closure->expanded ? GTK_EXPANDER_SEMI_COLLAPSED : GTK_EXPANDER_SEMI_EXPANDED,
- GTK_STATE_NORMAL, &closure->area);
- closure->finish = TRUE;
-
- return TRUE;
-}
-
-/*
- * ECell::event method
- */
-static gint
-ect_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
- ETreeModel *tree_model = e_cell_tree_get_tree_model (ecell_view->e_table_model, row);
- ETreeTableAdapter *etta = e_cell_tree_get_tree_table_adapter(ecell_view->e_table_model, row);
- ETreePath node = e_cell_tree_get_node (ecell_view->e_table_model, row);
- int offset = offset_of_node (ecell_view->e_table_model, row);
- gint result;
-
- switch (event->type) {
- case GDK_BUTTON_PRESS:
-
- if (event_in_expander (event, offset, 0)) {
- if (e_tree_model_node_is_expandable (tree_model, node)) {
- gboolean expanded = e_tree_table_adapter_node_is_expanded(etta, node);
- if (tree_view->retro_look)
- e_tree_table_adapter_node_set_expanded (etta, node, !expanded);
- else {
- gint tmp_row = row;
- GdkRectangle area;
- animate_closure_t *closure = g_new0 (animate_closure_t, 1);
- e_table_item_get_cell_geometry (tree_view->cell_view.e_table_item_view,
- &tmp_row, &view_col, &area.x, &area.y, NULL, &area.height);
- area.width = offset - 2;
- draw_expander (tree_view, GTK_LAYOUT (tree_view->canvas)->bin_window,
- expanded ? GTK_EXPANDER_SEMI_EXPANDED : GTK_EXPANDER_SEMI_COLLAPSED,
- GTK_STATE_NORMAL, &area);
- closure->ectv = tree_view;
- closure->etta = etta;
- closure->node = node;
- closure->expanded = expanded;
- closure->area = area;
- tree_view->animate_timeout = g_timeout_add (50, animate_expander, closure);
- }
- return TRUE;
- }
- }
- else if (event->button.x < (offset - INDENT_AMOUNT))
- return FALSE;
- break;
-
- case GDK_MOTION_NOTIFY:
-
- if (!tree_view->retro_look && e_tree_model_node_is_expandable (tree_model, node)) {
- gint height = ect_height (ecell_view, model_col, view_col, row);
- GdkRectangle area;
- gboolean in_expander = event_in_expander (event, offset, height);
-
- if (tree_view->prelit ^ in_expander) {
- gint tmp_row = row;
- e_table_item_get_cell_geometry (tree_view->cell_view.e_table_item_view,
- &tmp_row, &view_col, &area.x, &area.y, NULL, &area.height);
- area.width = offset - 2;
- draw_expander (tree_view, GTK_LAYOUT (tree_view->canvas)->bin_window,
- e_tree_table_adapter_node_is_expanded (etta, node) ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
- in_expander ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL, &area);
- tree_view->prelit = in_expander;
- return TRUE;
- }
-
- }
- break;
-
- case GDK_LEAVE_NOTIFY:
-
- if (tree_view->prelit) {
- gint tmp_row = row;
- GdkRectangle area;
- e_table_item_get_cell_geometry (tree_view->cell_view.e_table_item_view,
- &tmp_row, &view_col, &area.x, &area.y, NULL, &area.height);
- area.width = offset - 2;
- draw_expander (tree_view, GTK_LAYOUT (tree_view->canvas)->bin_window,
- e_tree_table_adapter_node_is_expanded (etta, node) ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
- GTK_STATE_NORMAL, &area);
- tree_view->prelit = FALSE;
- }
- return TRUE;
-
- default:
- break;
- }
-
- adjust_event_position (event, -offset);
- result = e_cell_event(tree_view->subcell_view, event, model_col, view_col, row, flags, actions);
- adjust_event_position (event, offset);
-
- return result;
-}
-
-/*
- * ECell::max_width method
- */
-static int
-ect_max_width (ECellView *ecell_view, int model_col, int view_col)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
- int row;
- int number_of_rows;
- int max_width = 0;
- int width = 0;
- int subcell_max_width = 0;
- gboolean per_row = e_cell_max_width_by_row_implemented (tree_view->subcell_view);
-
- number_of_rows = e_table_model_row_count (ecell_view->e_table_model);
-
- if (!per_row)
- subcell_max_width = e_cell_max_width (tree_view->subcell_view, model_col, view_col);
-
- for (row = 0; row < number_of_rows; row++) {
- ETreeModel *tree_model = e_cell_tree_get_tree_model(ecell_view->e_table_model, row);
- ETreePath node;
- GdkPixbuf *node_image;
- int node_image_width = 0, node_image_height = 0;
-
- int offset, subcell_offset;
-#if 0
- gboolean expanded, expandable;
- ETreeTableAdapter *tree_table_adapter = e_cell_tree_get_tree_table_adapter(ecell_view->e_table_model, row);
-#endif
-
- node = e_cell_tree_get_node (ecell_view->e_table_model, row);
-
- offset = offset_of_node (ecell_view->e_table_model, row);
- subcell_offset = offset;
-
- node_image = e_tree_model_icon_at (tree_model, node);
-
- if (node_image) {
- node_image_width = gdk_pixbuf_get_width (node_image);
- node_image_height = gdk_pixbuf_get_height (node_image);
- }
-
- width = subcell_offset + node_image_width;
-
- if (per_row)
- width += e_cell_max_width_by_row (tree_view->subcell_view, model_col, view_col, row);
- else
- width += subcell_max_width;
-
-#if 0
- expandable = e_tree_model_node_is_expandable (tree_model, node);
- expanded = e_tree_table_adapter_node_is_expanded (tree_table_adapter, node);
-
- /* This is unnecessary since this is already handled
- by the offset_of_node function. If that changes,
- this will have to change too. */
-
- if (expandable) {
- GdkPixbuf *image;
-
- image = (expanded
- ? E_CELL_TREE(tree_view->cell_view.ecell)->open_pixbuf
- : E_CELL_TREE(tree_view->cell_view.ecell)->closed_pixbuf);
-
- width += gdk_pixbuf_get_width(image);
- }
-#endif
-
- max_width = MAX (max_width, width);
- }
-
- return max_width;
-}
-
-/*
- * ECellView::show_tooltip method
- */
-static void
-ect_show_tooltip (ECellView *ecell_view, int model_col, int view_col, int row,
- int col_width, ETableTooltip *tooltip)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
- ETreeModel *tree_model = e_cell_tree_get_tree_model (ecell_view->e_table_model, row);
- ETreePath node = e_cell_tree_get_node (ecell_view->e_table_model, row);
- int offset = offset_of_node (ecell_view->e_table_model, row);
- GdkPixbuf *node_image;
-
- node_image = e_tree_model_icon_at (tree_model, node);
- if (node_image)
- offset += gdk_pixbuf_get_width (node_image);
-
- tooltip->x += offset;
- e_cell_show_tooltip (tree_view->subcell_view, model_col, view_col, row, col_width - offset, tooltip);
-}
-
-/*
- * ECellView::get_bg_color method
- */
-static char *
-ect_get_bg_color (ECellView *ecell_view, int row)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
-
- return e_cell_get_bg_color (tree_view->subcell_view, row);
-}
-
-/*
- * ECellView::enter_edit method
- */
-static void *
-ect_enter_edit (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- /* just defer to our subcell's view */
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
-
- return e_cell_enter_edit (tree_view->subcell_view, model_col, view_col, row);
-}
-
-/*
- * ECellView::leave_edit method
- */
-static void
-ect_leave_edit (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context)
-{
- /* just defer to our subcell's view */
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
-
- e_cell_leave_edit (tree_view->subcell_view, model_col, view_col, row, edit_context);
-}
-
-static void
-ect_print (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width, double height)
-{
- ECellTreeView *tree_view = (ECellTreeView *) ecell_view;
-
- if (/* XXX only if we're the active sort */ TRUE) {
- ETreeModel *tree_model = e_cell_tree_get_tree_model (ecell_view->e_table_model, row);
- ETreeTableAdapter *tree_table_adapter = e_cell_tree_get_tree_table_adapter(ecell_view->e_table_model, row);
- ETreePath node = e_cell_tree_get_node (ecell_view->e_table_model, row);
- int offset = offset_of_node (ecell_view->e_table_model, row);
- int subcell_offset = offset;
- gboolean expandable = e_tree_model_node_is_expandable (tree_model, node);
- gboolean expanded = e_tree_table_adapter_node_is_expanded (tree_table_adapter, node);
-
- /* draw our lines */
- if (E_CELL_TREE(tree_view->cell_view.ecell)->draw_lines) {
- int depth;
-
- if (!e_tree_model_node_is_root (tree_model, node)
- || e_tree_model_node_get_children (tree_model, node, NULL) > 0) {
- gnome_print_moveto (context,
- offset - INDENT_AMOUNT / 2,
- height / 2);
-
- gnome_print_lineto (context,
- offset,
- height / 2);
- }
-
- if (visible_depth_of_node (ecell_view->e_table_model, row) != 0) {
- gnome_print_moveto (context,
- offset - INDENT_AMOUNT / 2,
- height);
- gnome_print_lineto (context,
- offset - INDENT_AMOUNT / 2,
- (e_tree_table_adapter_node_get_next (tree_table_adapter, node)
- ? 0
- : height / 2));
- }
-
- /* now traverse back up to the root of the tree, checking at
- each level if the node has siblings, and drawing the
- correct vertical pipe for it's configuration. */
- node = e_tree_model_node_get_parent (tree_model, node);
- depth = visible_depth_of_node (ecell_view->e_table_model, row) - 1;
- offset -= INDENT_AMOUNT;
- while (node && depth != 0) {
- if (e_tree_table_adapter_node_get_next(tree_table_adapter, node)) {
- gnome_print_moveto (context,
- offset - INDENT_AMOUNT / 2,
- height);
- gnome_print_lineto (context,
- offset - INDENT_AMOUNT / 2,
- 0);
- }
- node = e_tree_model_node_get_parent (tree_model, node);
- depth --;
- offset -= INDENT_AMOUNT;
- }
- }
-
- /* now draw our icon if we're expandable */
- if (expandable) {
- double image_matrix [6] = {16, 0, 0, 16, 0, 0};
- GdkPixbuf *image = (expanded
- ? E_CELL_TREE(tree_view->cell_view.ecell)->open_pixbuf
- : E_CELL_TREE(tree_view->cell_view.ecell)->closed_pixbuf);
- int image_width, image_height, image_rowstride;
- guchar *image_pixels;
-
- image_width = gdk_pixbuf_get_width(image);
- image_height = gdk_pixbuf_get_height(image);
- image_pixels = gdk_pixbuf_get_pixels(image);
- image_rowstride = gdk_pixbuf_get_rowstride(image);
-
- image_matrix [4] = subcell_offset - INDENT_AMOUNT / 2 - image_width / 2;
- image_matrix [5] = height / 2 - image_height / 2;
-
- gnome_print_gsave (context);
- gnome_print_concat (context, image_matrix);
-
- gnome_print_rgbaimage (context, image_pixels, image_width, image_height, image_rowstride);
- gnome_print_grestore (context);
- }
-
- gnome_print_stroke (context);
-
- if (gnome_print_translate(context, subcell_offset, 0) == -1)
- /* FIXME */;
- width -= subcell_offset;
- }
-
-
- e_cell_print (tree_view->subcell_view, context, model_col, view_col, row, width, height);
-}
-
-static gdouble
-ect_print_height (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width)
-{
- return 12; /* XXX */
-}
-
-/*
- * GObject::dispose method
- */
-static void
-ect_dispose (GObject *object)
-{
- ECellTree *ect = E_CELL_TREE (object);
-
- /* destroy our subcell */
- if (ect->subcell)
- g_object_unref (ect->subcell);
- ect->subcell = NULL;
-
- if (ect->open_pixbuf)
- gdk_pixbuf_unref (ect->open_pixbuf);
- ect->open_pixbuf = NULL;
-
- if (ect->closed_pixbuf)
- gdk_pixbuf_unref (ect->closed_pixbuf);
- ect->closed_pixbuf = NULL;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-e_cell_tree_class_init (GObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
-
- object_class->dispose = ect_dispose;
-
- ecc->new_view = ect_new_view;
- ecc->kill_view = ect_kill_view;
- ecc->realize = ect_realize;
- ecc->unrealize = ect_unrealize;
- ecc->draw = ect_draw;
- ecc->event = ect_event;
- ecc->height = ect_height;
- ecc->enter_edit = ect_enter_edit;
- ecc->leave_edit = ect_leave_edit;
- ecc->print = ect_print;
- ecc->print_height = ect_print_height;
- ecc->max_width = ect_max_width;
- ecc->show_tooltip = ect_show_tooltip;
- ecc->get_bg_color = ect_get_bg_color;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- gal_a11y_e_cell_registry_add_cell_type (NULL, E_CELL_TREE_TYPE, gal_a11y_e_cell_tree_new);
-}
-
-E_MAKE_TYPE(e_cell_tree, "ECellTree", ECellTree, e_cell_tree_class_init, NULL, PARENT_TYPE)
-
-/**
- * e_cell_tree_construct:
- * @ect: the ECellTree we're constructing.
- * @open_pixbuf: pixbuf to be used instead of the '-' icon.
- * @closed_pixbuf: pixbuf to be used instead of the '+' icon.
- * @draw_lines: whether or not to draw the lines between parents/children/siblings.
- * @subcell: the ECell to render to the right of the tree effects.
- *
- * Constructs an ECellTree. used by subclasses that need to
- * initialize a nested ECellTree. See e_cell_tree_new() for more info.
- *
- **/
-void
-e_cell_tree_construct (ECellTree *ect,
- GdkPixbuf *open_pixbuf,
- GdkPixbuf *closed_pixbuf,
- gboolean draw_lines,
- ECell *subcell)
-{
- ect->subcell = subcell;
- if (subcell) {
- g_object_ref (subcell);
- gtk_object_sink (GTK_OBJECT (subcell));
- }
- if (open_pixbuf)
- ect->open_pixbuf = open_pixbuf;
- else
- ect->open_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)tree_expanded_xpm);
- if (closed_pixbuf)
- ect->closed_pixbuf = closed_pixbuf;
- else
- ect->closed_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)tree_unexpanded_xpm);
-
- ect->draw_lines = draw_lines;
-}
-
-
-/**
- * e_cell_tree_new:
- * @open_pixbuf: pixbuf to be used instead of the '-' icon.
- * @closed_pixbuf: pixbuf to be used instead of the '+' icon.
- * @draw_lines: whether or not to draw the lines between parents/children/siblings.
- * @subcell: the ECell to render to the right of the tree effects.
- *
- * Creates a new ECell renderer that can be used to render tree
- * effects that come from an ETreeModel. Various assumptions are made
- * as to the fact that the ETableModel the ETable this cell is
- * associated with is in fact an ETreeModel. The cell uses special
- * columns to get at structural information (needed to draw the
- * lines/icons.
- *
- * Return value: an ECell object that can be used to render trees.
- **/
-ECell *
-e_cell_tree_new (GdkPixbuf *open_pixbuf,
- GdkPixbuf *closed_pixbuf,
- gboolean draw_lines,
- ECell *subcell)
-{
- ECellTree *ect = g_object_new (E_CELL_TREE_TYPE, NULL);
-
- e_cell_tree_construct (ect, open_pixbuf, closed_pixbuf, draw_lines, subcell);
-
- return (ECell *) ect;
-}
-
diff --git a/widgets/table/e-cell-tree.h b/widgets/table/e-cell-tree.h
deleted file mode 100644
index dfdd6f0191..0000000000
--- a/widgets/table/e-cell-tree.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-tree.h - Tree cell object.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Toshok <toshok@ximian.com>
- *
- * A majority of code taken from:
- *
- * the ECellText renderer.
- * Copyright 1998, The Free Software Foundation
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_TREE_H_
-#define _E_CELL_TREE_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-cell.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_TREE_TYPE (e_cell_tree_get_type ())
-#define E_CELL_TREE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_TREE_TYPE, ECellTree))
-#define E_CELL_TREE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_TREE_TYPE, ECellTreeClass))
-#define E_IS_CELL_TREE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_TREE_TYPE))
-#define E_IS_CELL_TREE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_TREE_TYPE))
-
-
-typedef struct {
- ECell parent;
-
- gboolean draw_lines;
-
- GdkPixbuf *open_pixbuf;
- GdkPixbuf *closed_pixbuf;
-
- ECell *subcell;
-} ECellTree;
-
-typedef struct {
- ECellClass parent_class;
-} ECellTreeClass;
-
-GType e_cell_tree_get_type (void);
-ECell *e_cell_tree_new (GdkPixbuf *open_pixbuf,
- GdkPixbuf *closed_pixbuf,
- gboolean draw_lines,
- ECell *subcell);
-void e_cell_tree_construct (ECellTree *ect,
- GdkPixbuf *open_pixbuf,
- GdkPixbuf *closed_pixbuf,
- gboolean draw_lines,
- ECell *subcell);
-
-ECellView *e_cell_tree_view_get_subcell_view (ECellView *ect);
-
-G_END_DECLS
-
-#endif /* _E_CELL_TREE_H_ */
-
-
diff --git a/widgets/table/e-cell-vbox.c b/widgets/table/e-cell-vbox.c
deleted file mode 100644
index ab86e307c9..0000000000
--- a/widgets/table/e-cell-vbox.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-vbox.c - Vbox cell object.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Toshok <toshok@ximian.com>
- * Chris Lahey <clahey@ximian.com>
- *
- * A majority of code taken from:
- *
- * the ECellText renderer.
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-
-#include <gdk/gdkx.h> /* for BlackPixel */
-#include <gtk/gtkenums.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkinvisible.h>
-#include <gtk/gtksignal.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gal/util/e-util.h"
-#include "e-table-item.h"
-#include "e-cell-vbox.h"
-
-#define PARENT_TYPE e_cell_get_type ()
-
-typedef struct {
- ECellView cell_view;
- int subcell_view_count;
- ECellView **subcell_views;
- int *model_cols;
-} ECellVboxView;
-
-static ECellClass *parent_class;
-
-#define INDENT_AMOUNT 16
-
-/*
- * ECell::new_view method
- */
-static ECellView *
-ecv_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- ECellVbox *ecv = E_CELL_VBOX (ecell);
- ECellVboxView *vbox_view = g_new0 (ECellVboxView, 1);
- int i;
-
- vbox_view->cell_view.ecell = ecell;
- vbox_view->cell_view.e_table_model = table_model;
- vbox_view->cell_view.e_table_item_view = e_table_item_view;
-
- /* create our subcell view */
- vbox_view->subcell_view_count = ecv->subcell_count;
- vbox_view->subcell_views = g_new (ECellView *, vbox_view->subcell_view_count);
- vbox_view->model_cols = g_new (int, vbox_view->subcell_view_count);
-
- for (i = 0; i < vbox_view->subcell_view_count; i++) {
- vbox_view->subcell_views[i] = e_cell_new_view (ecv->subcells[i], table_model, e_table_item_view /* XXX */);
- vbox_view->model_cols[i] = ecv->model_cols[i];
- }
-
- return (ECellView *)vbox_view;
-}
-
-/*
- * ECell::kill_view method
- */
-static void
-ecv_kill_view (ECellView *ecv)
-{
- ECellVboxView *vbox_view = (ECellVboxView *) ecv;
- int i;
-
- /* kill our subcell view */
- for (i = 0; i < vbox_view->subcell_view_count; i++)
- e_cell_kill_view (vbox_view->subcell_views[i]);
-
- g_free (vbox_view->model_cols);
- g_free (vbox_view->subcell_views);
- g_free (vbox_view);
-}
-
-/*
- * ECell::realize method
- */
-static void
-ecv_realize (ECellView *ecell_view)
-{
- ECellVboxView *vbox_view = (ECellVboxView *) ecell_view;
- int i;
-
- /* realize our subcell view */
- for (i = 0; i < vbox_view->subcell_view_count; i++)
- e_cell_realize (vbox_view->subcell_views[i]);
-
- if (parent_class->realize)
- (* parent_class->realize) (ecell_view);
-}
-
-/*
- * ECell::unrealize method
- */
-static void
-ecv_unrealize (ECellView *ecv)
-{
- ECellVboxView *vbox_view = (ECellVboxView *) ecv;
- int i;
-
- /* unrealize our subcell view. */
- for (i = 0; i < vbox_view->subcell_view_count; i++)
- e_cell_unrealize (vbox_view->subcell_views[i]);
-
- if (parent_class->unrealize)
- (* parent_class->unrealize) (ecv);
-}
-
-/*
- * ECell::draw method
- */
-static void
-ecv_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- ECellVboxView *vbox_view = (ECellVboxView *)ecell_view;
-
- int subcell_offset = 0;
- int i;
-
- for (i = 0; i < vbox_view->subcell_view_count; i++) {
- /* Now cause our subcells to draw their contents,
- shifted by subcell_offset pixels */
- int height = e_cell_height (vbox_view->subcell_views[i], vbox_view->model_cols[i], view_col, row);
- e_cell_draw (vbox_view->subcell_views[i], drawable,
- vbox_view->model_cols[i], view_col, row, flags,
- x1, y1 + subcell_offset, x2, y1 + subcell_offset + height);
-
- subcell_offset += e_cell_height (vbox_view->subcell_views[i], vbox_view->model_cols[i], view_col, row);
- }
-}
-
-/*
- * ECell::event method
- */
-static gint
-ecv_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions)
-{
- ECellVboxView *vbox_view = (ECellVboxView *)ecell_view;
- int y = 0;
- int i;
- int subcell_offset = 0;
-
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- case GDK_2BUTTON_PRESS:
- case GDK_3BUTTON_PRESS:
- y = event->button.y;
- break;
- case GDK_MOTION_NOTIFY:
- y = event->motion.y;
- break;
- default:
- /* nada */
- break;
- }
-
-
- for (i = 0; i < vbox_view->subcell_view_count; i++) {
- int height = e_cell_height (vbox_view->subcell_views[i], vbox_view->model_cols[i], view_col, row);
- if (y < subcell_offset + height)
- return e_cell_event(vbox_view->subcell_views[i], event, vbox_view->model_cols[i], view_col, row, flags, actions);
- subcell_offset += height;
- }
- return 0;
-}
-
-/*
- * ECell::height method
- */
-static int
-ecv_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- ECellVboxView *vbox_view = (ECellVboxView *)ecell_view;
- int height = 0;
- int i;
-
- for (i = 0; i < vbox_view->subcell_view_count; i++) {
- height += e_cell_height (vbox_view->subcell_views[i], vbox_view->model_cols[i], view_col, row);
- }
- return height;
-}
-
-/*
- * ECell::max_width method
- */
-static int
-ecv_max_width (ECellView *ecell_view, int model_col, int view_col)
-{
- ECellVboxView *vbox_view = (ECellVboxView *)ecell_view;
- int max_width = 0;
- int i;
-
- for (i = 0; i < vbox_view->subcell_view_count; i++) {
- int width = e_cell_max_width (vbox_view->subcell_views[i], vbox_view->model_cols[i], view_col);
- max_width = MAX(width, max_width);
- }
-
- return max_width;
-}
-
-#if 0
-/*
- * ECellView::show_tooltip method
- */
-static void
-ecv_show_tooltip (ECellView *ecell_view, int model_col, int view_col, int row,
- int col_width, ETableTooltip *tooltip)
-{
- ECellVboxView *vbox_view = (ECellVboxView *) ecell_view;
- EVboxModel *vbox_model = e_cell_vbox_get_vbox_model (ecell_view->e_table_model, row);
- EVboxPath node = e_cell_vbox_get_node (ecell_view->e_table_model, row);
- int offset = offset_of_node (ecell_view->e_table_model, row);
- GdkPixbuf *node_image;
-
- node_image = e_vbox_model_icon_at (vbox_model, node);
- if (node_image)
- offset += gdk_pixbuf_get_width (node_image);
-
- tooltip->x += offset;
- e_cell_show_tooltip (vbox_view->subcell_view, model_col, view_col, row, col_width - offset, tooltip);
-}
-
-/*
- * ECellView::get_bg_color method
- */
-static char *
-ecv_get_bg_color (ECellView *ecell_view, int row)
-{
- ECellVboxView *vbox_view = (ECellVboxView *) ecell_view;
-
- return e_cell_get_bg_color (vbox_view->subcell_views[0], row);
-}
-
-/*
- * ECellView::enter_edit method
- */
-static void *
-ecv_enter_edit (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- /* just defer to our subcell's view */
- ECellVboxView *vbox_view = (ECellVboxView *) ecell_view;
-
- return e_cell_enter_edit (vbox_view->subcell_view, model_col, view_col, row);
-}
-
-/*
- * ECellView::leave_edit method
- */
-static void
-ecv_leave_edit (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context)
-{
- /* just defer to our subcell's view */
- ECellVboxView *vbox_view = (ECellVboxView *) ecell_view;
-
- e_cell_leave_edit (vbox_view->subcell_view, model_col, view_col, row, edit_context);
-}
-
-static void
-ecv_print (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width, double height)
-{
- ECellVboxView *vbox_view = (ECellVboxView *) ecell_view;
-
- if (/* XXX only if we're the active sort */ TRUE) {
- EVboxModel *vbox_model = e_cell_vbox_get_vbox_model (ecell_view->e_table_model, row);
- EVboxTableAdapter *vbox_table_adapter = e_cell_vbox_get_vbox_table_adapter(ecell_view->e_table_model, row);
- EVboxPath node = e_cell_vbox_get_node (ecell_view->e_table_model, row);
- int offset = offset_of_node (ecell_view->e_table_model, row);
- int subcell_offset = offset;
- gboolean expandable = e_vbox_model_node_is_expandable (vbox_model, node);
- gboolean expanded = e_vbox_table_adapter_node_is_expanded (vbox_table_adapter, node);
-
- /* draw our lines */
- if (E_CELL_VBOX(vbox_view->cell_view.ecell)->draw_lines) {
- int depth;
-
- if (!e_vbox_model_node_is_root (vbox_model, node)
- || e_vbox_model_node_get_children (vbox_model, node, NULL) > 0) {
- gnome_print_moveto (context,
- offset - INDENT_AMOUNT / 2,
- height / 2);
-
- gnome_print_lineto (context,
- offset,
- height / 2);
- }
-
- if (visible_depth_of_node (ecell_view->e_table_model, row) != 0) {
- gnome_print_moveto (context,
- offset - INDENT_AMOUNT / 2,
- height);
- gnome_print_lineto (context,
- offset - INDENT_AMOUNT / 2,
- (e_vbox_model_node_get_next (vbox_model, node)
- ? 0
- : height / 2));
- }
-
- /* now traverse back up to the root of the vbox, checking at
- each level if the node has siblings, and drawing the
- correct vertical pipe for it's configuration. */
- node = e_vbox_model_node_get_parent (vbox_model, node);
- depth = visible_depth_of_node (ecell_view->e_table_model, row) - 1;
- offset -= INDENT_AMOUNT;
- while (node && depth != 0) {
- if (e_vbox_model_node_get_next(vbox_model, node)) {
- gnome_print_moveto (context,
- offset - INDENT_AMOUNT / 2,
- height);
- gnome_print_lineto (context,
- offset - INDENT_AMOUNT / 2,
- 0);
- }
- node = e_vbox_model_node_get_parent (vbox_model, node);
- depth --;
- offset -= INDENT_AMOUNT;
- }
- }
-
- /* now draw our icon if we're expandable */
- if (expandable) {
- double image_matrix [6] = {16, 0, 0, 16, 0, 0};
- GdkPixbuf *image = (expanded
- ? E_CELL_VBOX(vbox_view->cell_view.ecell)->open_pixbuf
- : E_CELL_VBOX(vbox_view->cell_view.ecell)->closed_pixbuf);
- int image_width, image_height, image_rowstride;
- guchar *image_pixels;
-
- image_width = gdk_pixbuf_get_width(image);
- image_height = gdk_pixbuf_get_height(image);
- image_pixels = gdk_pixbuf_get_pixels(image);
- image_rowstride = gdk_pixbuf_get_rowstride(image);
-
- image_matrix [4] = subcell_offset - INDENT_AMOUNT / 2 - image_width / 2;
- image_matrix [5] = height / 2 - image_height / 2;
-
- gnome_print_gsave (context);
- gnome_print_concat (context, image_matrix);
-
- gnome_print_rgbaimage (context, image_pixels, image_width, image_height, image_rowstride);
- gnome_print_grestore (context);
- }
-
- gnome_print_stroke (context);
-
- if (gnome_print_translate(context, subcell_offset, 0) == -1)
- /* FIXME */;
- width -= subcell_offset;
- }
-
-
- e_cell_print (vbox_view->subcell_view, context, model_col, view_col, row, width, height);
-}
-
-static gdouble
-ecv_print_height (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width)
-{
- return 12; /* XXX */
-}
-#endif
-
-/*
- * GObject::dispose method
- */
-static void
-ecv_dispose (GObject *object)
-{
- ECellVbox *ecv = E_CELL_VBOX (object);
- int i;
-
- /* destroy our subcell */
- for (i = 0; i < ecv->subcell_count; i++)
- if (ecv->subcells[i])
- g_object_unref (ecv->subcells[i]);
- g_free (ecv->subcells);
- ecv->subcells = NULL;
- ecv->subcell_count = 0;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-e_cell_vbox_class_init (GObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
-
- object_class->dispose = ecv_dispose;
-
- ecc->new_view = ecv_new_view;
- ecc->kill_view = ecv_kill_view;
- ecc->realize = ecv_realize;
- ecc->unrealize = ecv_unrealize;
- ecc->draw = ecv_draw;
- ecc->event = ecv_event;
- ecc->height = ecv_height;
-#if 0
- ecc->enter_edit = ecv_enter_edit;
- ecc->leave_edit = ecv_leave_edit;
- ecc->print = ecv_print;
- ecc->print_height = ecv_print_height;
-#endif
- ecc->max_width = ecv_max_width;
-#if 0
- ecc->show_tooltip = ecv_show_tooltip;
- ecc->get_bg_color = ecv_get_bg_color;
-#endif
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-}
-
-static void
-e_cell_vbox_init (GtkObject *object)
-{
- ECellVbox *ecv = E_CELL_VBOX (object);
-
- ecv->subcells = NULL;
- ecv->subcell_count = 0;
-}
-
-E_MAKE_TYPE(e_cell_vbox, "ECellVbox", ECellVbox, e_cell_vbox_class_init, e_cell_vbox_init, PARENT_TYPE);
-
-/**
- * e_cell_vbox_new:
- *
- * Creates a new ECell renderer that can be used to render multiple
- * child cells.
- *
- * Return value: an ECell object that can be used to render multiple
- * child cells.
- **/
-ECell *
-e_cell_vbox_new (void)
-{
- ECellVbox *ecv = g_object_new (E_CELL_VBOX_TYPE, NULL);
-
- return (ECell *) ecv;
-}
-
-void
-e_cell_vbox_append (ECellVbox *vbox, ECell *subcell, int model_col)
-{
- vbox->subcell_count ++;
-
- vbox->subcells = g_renew (ECell *, vbox->subcells, vbox->subcell_count);
- vbox->model_cols = g_renew (int, vbox->model_cols, vbox->subcell_count);
-
- vbox->subcells[vbox->subcell_count - 1] = subcell;
- vbox->model_cols[vbox->subcell_count - 1] = model_col;
-
- if (subcell)
- g_object_ref (subcell);
-}
diff --git a/widgets/table/e-cell-vbox.h b/widgets/table/e-cell-vbox.h
deleted file mode 100644
index 93ddc6d25c..0000000000
--- a/widgets/table/e-cell-vbox.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell-vbox.h - Vbox cell object.
- * Copyright 1999 - 2002, Ximian, Inc.
- *
- * Authors:
- * Chris Toshok <toshok@ximian.com>
- * Chris Lahey <clahey@ximina.com
- *
- * A majority of code taken from:
- *
- * the ECellText renderer.
- * Copyright 1999, 2000, Ximian, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_VBOX_H_
-#define _E_CELL_VBOX_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-cell.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_VBOX_TYPE (e_cell_vbox_get_type ())
-#define E_CELL_VBOX(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_VBOX_TYPE, ECellVbox))
-#define E_CELL_VBOX_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_VBOX_TYPE, ECellVboxClass))
-#define E_IS_CELL_VBOX(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_VBOX_TYPE))
-#define E_IS_CELL_VBOX_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_VBOX_TYPE))
-
-typedef struct {
- ECell parent;
-
- int subcell_count;
- ECell **subcells;
- int *model_cols;
-} ECellVbox;
-
-typedef struct {
- ECellClass parent_class;
-} ECellVboxClass;
-
-GType e_cell_vbox_get_type (void);
-ECell *e_cell_vbox_new (void);
-void e_cell_vbox_append (ECellVbox *vbox,
- ECell *subcell,
- int model_col);
-
-
-G_END_DECLS
-
-#endif /* _E_CELL_VBOX_H_ */
diff --git a/widgets/table/e-cell.c b/widgets/table/e-cell.c
deleted file mode 100644
index 8deeaa654c..0000000000
--- a/widgets/table/e-cell.c
+++ /dev/null
@@ -1,499 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell.c - base class for cell renderers in e-table
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-cell.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-
-#define ECVIEW_EC_CLASS(v) (E_CELL_GET_CLASS (v->ecell))
-
-static ECellView *
-ec_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- return NULL;
-}
-
-static void
-ec_realize (ECellView *e_cell)
-{
-}
-
-static void
-ec_kill_view (ECellView *ecell_view)
-{
-}
-
-static void
-ec_unrealize (ECellView *e_cell)
-{
-}
-
-static void
-ec_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- g_error ("e-cell-draw invoked\n");
-}
-
-static gint
-ec_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions)
-{
- g_error ("e-cell-event invoked\n");
- return 0;
-}
-
-static gint
-ec_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- g_error ("e-cell-height invoked\n");
- return 0;
-}
-
-static void
-ec_focus (ECellView *ecell_view, int model_col, int view_col, int row, int x1, int y1, int x2, int y2)
-{
- ecell_view->focus_col = view_col;
- ecell_view->focus_row = row;
- ecell_view->focus_x1 = x1;
- ecell_view->focus_y1 = y1;
- ecell_view->focus_x2 = x2;
- ecell_view->focus_y2 = y2;
-}
-
-static void
-ec_unfocus (ECellView *ecell_view)
-{
- ecell_view->focus_col = -1;
- ecell_view->focus_row = -1;
- ecell_view->focus_x1 = -1;
- ecell_view->focus_y1 = -1;
- ecell_view->focus_x2 = -1;
- ecell_view->focus_y2 = -1;
-}
-
-static void *
-ec_enter_edit (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- return NULL;
-}
-
-static void
-ec_leave_edit (ECellView *ecell_view, int model_col, int view_col, int row, void *context)
-{
-}
-
-static void *
-ec_save_state (ECellView *ecell_view, int model_col, int view_col, int row, void *context)
-{
- return NULL;
-}
-
-static void
-ec_load_state (ECellView *ecell_view, int model_col, int view_col, int row, void *context, void *save_state)
-{
-}
-
-static void
-ec_free_state (ECellView *ecell_view, int model_col, int view_col, int row, void *save_state)
-{
-}
-
-static void
-ec_show_tooltip (ECellView *ecell_view, int model_col, int view_col, int row, int col_width, ETableTooltip *tooltip)
-{
- /* Do nothing */
-}
-
-static void
-e_cell_class_init (GtkObjectClass *object_class)
-{
- ECellClass *ecc = (ECellClass *) object_class;
-
- ecc->realize = ec_realize;
- ecc->unrealize = ec_unrealize;
- ecc->new_view = ec_new_view;
- ecc->kill_view = ec_kill_view;
- ecc->draw = ec_draw;
- ecc->event = ec_event;
- ecc->focus = ec_focus;
- ecc->unfocus = ec_unfocus;
- ecc->height = ec_height;
- ecc->enter_edit = ec_enter_edit;
- ecc->leave_edit = ec_leave_edit;
- ecc->save_state = ec_save_state;
- ecc->load_state = ec_load_state;
- ecc->free_state = ec_free_state;
- ecc->print = NULL;
- ecc->print_height = NULL;
- ecc->max_width = NULL;
- ecc->max_width_by_row = NULL;
- ecc->show_tooltip = ec_show_tooltip;
-}
-
-static void
-e_cell_init (GtkObject *object)
-{
-}
-
-E_MAKE_TYPE(e_cell, "ECell", ECell, e_cell_class_init, e_cell_init, PARENT_TYPE)
-
-/**
- * e_cell_event:
- * @ecell_view: The ECellView where the event will be dispatched
- * @event: The GdkEvent.
- * @model_col: the column in the model
- * @view_col: the column in the view
- * @row: the row
- * @flags: flags about the current state
- * @actions: A second return value in case the cell wants to take some action (specifically grabbing & ungrabbing)
- *
- * Dispatches the event @event to the @ecell_view for.
- *
- * Returns: processing state from the GdkEvent handling.
- */
-gint
-e_cell_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions)
-{
- return ECVIEW_EC_CLASS(ecell_view)->event (
- ecell_view, event, model_col, view_col, row, flags, actions);
-}
-
-/**
- * e_cell_new_view:
- * @ecell: the Ecell that will create the new view
- * @table_model: the table model the ecell is bound to
- * @e_table_item_view: An ETableItem object (the CanvasItem that reprensents the view of the table)
- *
- * ECell renderers new to be bound to a table_model and to the actual view
- * during their life time to actually render the data. This method is invoked
- * by the ETableItem canvas item to instatiate a new view of the ECell.
- *
- * This is invoked when the ETableModel is attached to the ETableItem (a CanvasItem
- * that can render ETableModels in the screen).
- *
- * Returns: a new ECellView for this @ecell on the @table_model displayed on the @e_table_item_view.
- */
-ECellView *
-e_cell_new_view (ECell *ecell, ETableModel *table_model, void *e_table_item_view)
-{
- return E_CELL_GET_CLASS (ecell)->new_view (
- ecell, table_model, e_table_item_view);
-}
-
-/**
- * e_cell_realize:
- * @ecell_view: The ECellView to be realized.
- *
- * This function is invoked to give a chance to the ECellView to allocate
- * any resources it needs from Gdk, equivalent to the GtkWidget::realize
- * signal.
- */
-void
-e_cell_realize (ECellView *ecell_view)
-{
- ECVIEW_EC_CLASS(ecell_view)->realize (ecell_view);
-}
-
-/**
- * e_cell_kill_view:
- * @ecell_view: view to be destroyed.
- *
- * This method it used to destroy a view of an ECell renderer
- */
-void
-e_cell_kill_view (ECellView *ecell_view)
-{
- ECVIEW_EC_CLASS(ecell_view)->kill_view (ecell_view);
-}
-
-/**
- * e_cell_unrealize:
- * @ecell_view: The ECellView to be unrealized.
- *
- * This function is invoked to give a chance to the ECellView to
- * release any resources it allocated during the realize method,
- * equivalent to the GtkWidget::unrealize signal.
- */
-void
-e_cell_unrealize (ECellView *ecell_view)
-{
- ECVIEW_EC_CLASS(ecell_view)->unrealize (ecell_view);
-}
-
-/**
- * e_cell_draw:
- * @ecell_view: the ECellView to redraw
- * @drawable: draw desination
- * @model_col: the column in the model being drawn.
- * @view_col: the column in the view being drawn (what the model maps to).
- * @row: the row being drawn
- * @flags: rendering flags.
- * @x1: boudary for the rendering
- * @y1: boudary for the rendering
- * @x2: boudary for the rendering
- * @y2: boudary for the rendering
- *
- * This instructs the ECellView to render itself into the drawable. The
- * region to be drawn in given by (x1,y1)-(x2,y2).
- *
- * The most important flags are %E_CELL_SELECTED and %E_CELL_FOCUSED, other
- * flags include alignments and justifications.
- */
-void
-e_cell_draw (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row, ECellFlags flags,
- int x1, int y1, int x2, int y2)
-{
- g_return_if_fail (ecell_view != NULL);
- g_return_if_fail (row >= 0);
- g_return_if_fail (row < e_table_model_row_count(ecell_view->e_table_model));
-
- ECVIEW_EC_CLASS(ecell_view)->draw (ecell_view, drawable, model_col, view_col, row, flags, x1, y1, x2, y2);
-}
-
-/**
- * e_cell_print:
- * @ecell_view: the ECellView to redraw
- * @context: The GnomePrintContext where we output our printed data.
- * @model_col: the column in the model being drawn.
- * @view_col: the column in the view being drawn (what the model maps to).
- * @row: the row being drawn
- * @width: width
- * @height: height
- *
- * FIXME:
- */
-void
-e_cell_print (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width, double height)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->print)
- ECVIEW_EC_CLASS(ecell_view)->print (ecell_view, context, model_col, view_col, row, width, height);
-}
-
-/**
- * e_cell_print:
- *
- * FIXME:
- */
-gdouble
-e_cell_print_height (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- double width)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->print_height)
- return ECVIEW_EC_CLASS(ecell_view)->print_height
- (ecell_view, context, model_col, view_col, row, width);
- else
- return 0.0;
-}
-
-/**
- * e_cell_height:
- * @ecell_view: the ECellView.
- * @model_col: the column in the model
- * @view_col: the column in the view.
- * @row: the row to me measured
- *
- * Returns: the height of the cell at @model_col, @row rendered at
- * @view_col, @row.
- */
-int
-e_cell_height (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- return ECVIEW_EC_CLASS(ecell_view)->height (ecell_view, model_col, view_col, row);
-}
-
-/**
- * e_cell_enter_edit:
- * @ecell_view: the ECellView that will enter editing
- * @model_col: the column in the model
- * @view_col: the column in the view
- * @row: the row
- *
- * Notifies the ECellView that it is about to enter editing mode for
- * @model_col, @row rendered at @view_col, @row.
- */
-void *
-e_cell_enter_edit (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- return ECVIEW_EC_CLASS(ecell_view)->enter_edit (ecell_view, model_col, view_col, row);
-}
-
-/**
- * e_cell_leave_edit:
- * @ecell_view: the ECellView that will leave editing
- * @model_col: the column in the model
- * @view_col: the column in the view
- * @row: the row
- * @edit_context: the editing context
- *
- * Notifies the ECellView that editing is finished at @model_col, @row
- * rendered at @view_col, @row.
- */
-void
-e_cell_leave_edit (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context)
-{
- ECVIEW_EC_CLASS(ecell_view)->leave_edit (ecell_view, model_col, view_col, row, edit_context);
-}
-
-/**
- * e_cell_save_state:
- * @ecell_view: the ECellView to save
- * @model_col: the column in the model
- * @view_col: the column in the view
- * @row: the row
- * @edit_context: the editing context
- *
- * Returns: The save state.
- *
- * Requests that the ECellView return a void * representing the state
- * of the ECell. This is primarily intended for things like selection
- * or scrolling.
- */
-void *
-e_cell_save_state (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->save_state)
- return ECVIEW_EC_CLASS(ecell_view)->save_state (ecell_view, model_col, view_col, row, edit_context);
- else
- return NULL;
-}
-
-/**
- * e_cell_load_state:
- * @ecell_view: the ECellView to load
- * @model_col: the column in the model
- * @view_col: the column in the view
- * @row: the row
- * @edit_context: the editing context
- * @save_state: the save state to load from
- *
- * Requests that the ECellView load from the given save state.
- */
-void
-e_cell_load_state (ECellView *ecell_view, int model_col, int view_col, int row, void *edit_context, void *save_state)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->load_state)
- ECVIEW_EC_CLASS(ecell_view)->load_state (ecell_view, model_col, view_col, row, edit_context, save_state);
-}
-
-/**
- * e_cell_load_state:
- * @ecell_view: the ECellView
- * @model_col: the column in the model
- * @view_col: the column in the view
- * @row: the row
- * @edit_context: the editing context
- * @save_state: the save state to free
- *
- * Requests that the ECellView free the given save state.
- */
-void
-e_cell_free_state (ECellView *ecell_view, int model_col, int view_col, int row, void *save_state)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->free_state)
- ECVIEW_EC_CLASS(ecell_view)->free_state (ecell_view, model_col, view_col, row, save_state);
-}
-
-/**
- * e_cell_max_width:
- * @ecell_view: the ECellView that will leave editing
- * @model_col: the column in the model
- * @view_col: the column in the view.
- *
- * Returns: the maximum width for the ECellview at @model_col which
- * is being rendered as @view_col
- */
-int
-e_cell_max_width (ECellView *ecell_view, int model_col, int view_col)
-{
- return ECVIEW_EC_CLASS(ecell_view)->max_width
- (ecell_view, model_col, view_col);
-}
-
-/**
- * e_cell_max_width_by_row:
- * @ecell_view: the ECellView that we are curious about
- * @model_col: the column in the model
- * @view_col: the column in the view.
- * @row: The row in the model.
- *
- * Returns: the maximum width for the ECellview at @model_col which
- * is being rendered as @view_col for the data in @row.
- */
-int
-e_cell_max_width_by_row (ECellView *ecell_view, int model_col, int view_col, int row)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->max_width_by_row)
- return ECVIEW_EC_CLASS(ecell_view)->max_width_by_row
- (ecell_view, model_col, view_col, row);
- else
- return e_cell_max_width (ecell_view, model_col, view_col);
-}
-
-/**
- * e_cell_max_width_by_row_implemented:
- * @ecell_view: the ECellView that we are curious about
- * @model_col: the column in the model
- * @view_col: the column in the view.
- * @row: The row in the model.
- *
- * Returns: the maximum width for the ECellview at @model_col which
- * is being rendered as @view_col for the data in @row.
- */
-gboolean
-e_cell_max_width_by_row_implemented (ECellView *ecell_view)
-{
- return (ECVIEW_EC_CLASS(ecell_view)->max_width_by_row != NULL);
-}
-
-void
-e_cell_show_tooltip (ECellView *ecell_view, int model_col, int view_col,
- int row, int col_width, ETableTooltip *tooltip)
-{
- ECVIEW_EC_CLASS(ecell_view)->show_tooltip
- (ecell_view, model_col, view_col, row, col_width, tooltip);
-}
-
-gchar *
-e_cell_get_bg_color(ECellView *ecell_view, int row)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->get_bg_color)
- return ECVIEW_EC_CLASS(ecell_view)->get_bg_color (ecell_view, row);
- else
- return NULL;
-}
-
-void
-e_cell_style_set(ECellView *ecell_view, GtkStyle *previous_style)
-{
- if (ECVIEW_EC_CLASS(ecell_view)->style_set)
- ECVIEW_EC_CLASS(ecell_view)->style_set (ecell_view, previous_style);
-}
-
diff --git a/widgets/table/e-cell.h b/widgets/table/e-cell.h
deleted file mode 100644
index 2ba74c01f5..0000000000
--- a/widgets/table/e-cell.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-cell.h
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_CELL_H_
-#define _E_CELL_H_
-
-#include <gdk/gdktypes.h>
-#include <libgnomeprint/gnome-print.h>
-#include <libgnomeprint/gnome-font.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-tooltip.h>
-
-G_BEGIN_DECLS
-
-#define E_CELL_TYPE (e_cell_get_type ())
-#define E_CELL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_CELL_TYPE, ECell))
-#define E_CELL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_CELL_TYPE, ECellClass))
-#define E_CELL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_CELL_TYPE, ECellClass))
-#define E_IS_CELL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_CELL_TYPE))
-#define E_IS_CELL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_CELL_TYPE))
-
-typedef gboolean (*ETableSearchFunc) (gconstpointer haystack,
- const char *needle);
-
-typedef enum {
- E_CELL_SELECTED = 1 << 0,
-
- E_CELL_JUSTIFICATION = 3 << 1,
- E_CELL_JUSTIFY_CENTER = 0 << 1,
- E_CELL_JUSTIFY_LEFT = 1 << 1,
- E_CELL_JUSTIFY_RIGHT = 2 << 1,
- E_CELL_JUSTIFY_FILL = 3 << 1,
-
- E_CELL_ALIGN_LEFT = 1 << 1,
- E_CELL_ALIGN_RIGHT = 1 << 2,
-
- E_CELL_FOCUSED = 1 << 3,
-
- E_CELL_EDITING = 1 << 4,
-
- E_CELL_CURSOR = 1 << 5,
-
- E_CELL_PREEDIT = 1 << 6
-} ECellFlags;
-
-typedef enum {
- E_CELL_GRAB = 1 << 0,
- E_CELL_UNGRAB = 1 << 1
-} ECellActions;
-
-typedef struct {
- GtkObject object;
-} ECell;
-
-typedef struct {
- ECell *ecell;
- ETableModel *e_table_model;
- void *e_table_item_view;
-
- gint focus_x1, focus_y1, focus_x2, focus_y2;
- gint focus_col, focus_row;
-} ECellView;
-
-#define E_CELL_IS_FOCUSED(ecell_view) (ecell_view->focus_x1 != -1)
-
-typedef struct {
- GtkObjectClass parent_class;
-
- ECellView *(*new_view) (ECell *ecell, ETableModel *table_model, void *e_table_item_view);
- void (*kill_view) (ECellView *ecell_view);
-
- void (*realize) (ECellView *ecell_view);
- void (*unrealize) (ECellView *ecell_view);
-
- void (*draw) (ECellView *ecell_view, GdkDrawable *drawable,
- int model_col, int view_col, int row,
- ECellFlags flags, int x1, int y1, int x2, int y2);
- gint (*event) (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions);
- void (*focus) (ECellView *ecell_view, int model_col, int view_col,
- int row, int x1, int y1, int x2, int y2);
- void (*unfocus) (ECellView *ecell_view);
- int (*height) (ECellView *ecell_view, int model_col, int view_col, int row);
-
- void *(*enter_edit) (ECellView *ecell_view, int model_col, int view_col, int row);
- void (*leave_edit) (ECellView *ecell_view, int model_col, int view_col, int row, void *context);
- void *(*save_state) (ECellView *ecell_view, int model_col, int view_col, int row, void *context);
- void (*load_state) (ECellView *ecell_view, int model_col, int view_col, int row, void *context, void *save_state);
- void (*free_state) (ECellView *ecell_view, int model_col, int view_col, int row, void *save_state);
- void (*print) (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row,
- gdouble width, gdouble height);
- gdouble (*print_height) (ECellView *ecell_view, GnomePrintContext *context,
- int model_col, int view_col, int row, gdouble width);
- int (*max_width) (ECellView *ecell_view, int model_col, int view_col);
- int (*max_width_by_row) (ECellView *ecell_view, int model_col, int view_col, int row);
- void (*show_tooltip) (ECellView *ecell_view, int model_col, int view_col, int row, int col_width, ETableTooltip *tooltip);
- gchar *(*get_bg_color) (ECellView *ecell_view, int row);
-
- void (*style_set) (ECellView *ecell_view, GtkStyle *previous_style);
-} ECellClass;
-
-GType e_cell_get_type (void);
-
-/* View creation methods. */
-ECellView *e_cell_new_view (ECell *ecell,
- ETableModel *table_model,
- void *e_table_item_view);
-void e_cell_kill_view (ECellView *ecell_view);
-
-/* Cell View methods. */
-gint e_cell_event (ECellView *ecell_view,
- GdkEvent *event,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- ECellActions *actions);
-void e_cell_realize (ECellView *ecell_view);
-void e_cell_unrealize (ECellView *ecell_view);
-void e_cell_draw (ECellView *ecell_view,
- GdkDrawable *drawable,
- int model_col,
- int view_col,
- int row,
- ECellFlags flags,
- int x1,
- int y1,
- int x2,
- int y2);
-void e_cell_print (ECellView *ecell_view,
- GnomePrintContext *context,
- int model_col,
- int view_col,
- int row,
- double width,
- double height);
-gdouble e_cell_print_height (ECellView *ecell_view,
- GnomePrintContext *context,
- int model_col,
- int view_col,
- int row,
- gdouble width);
-int e_cell_max_width (ECellView *ecell_view,
- int model_col,
- int view_col);
-int e_cell_max_width_by_row (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row);
-gboolean e_cell_max_width_by_row_implemented (ECellView *ecell_view);
-void e_cell_show_tooltip (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- int col_width,
- ETableTooltip *tooltip);
-gchar *e_cell_get_bg_color (ECellView *ecell_view,
- int row);
-void e_cell_style_set (ECellView *ecell_view,
- GtkStyle *previous_style);
-
-void e_cell_focus (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- int x1,
- int y1,
- int x2,
- int y2);
-void e_cell_unfocus (ECellView *ecell_view);
-int e_cell_height (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row);
-void *e_cell_enter_edit (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row);
-void e_cell_leave_edit (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- void *edit_context);
-void *e_cell_save_state (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- void *edit_context);
-void e_cell_load_state (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- void *edit_context,
- void *state);
-void e_cell_free_state (ECellView *ecell_view,
- int model_col,
- int view_col,
- int row,
- void *state);
-
-G_END_DECLS
-
-#endif /* _E_CELL_H_ */
diff --git a/widgets/table/e-table-click-to-add.c b/widgets/table/e-table-click-to-add.c
deleted file mode 100644
index c02e3b8869..0000000000
--- a/widgets/table/e-table-click-to-add.c
+++ /dev/null
@@ -1,573 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-click-to-add.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtksignal.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <libgnomecanvas/gnome-canvas-util.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <atk/atkregistry.h>
-
-#include "e-table-header.h"
-#include "e-table-click-to-add.h"
-#include "e-table-defines.h"
-#include "e-table-one.h"
-#include "gal/e-text/e-text.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-canvas-utils.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-marshal.h"
-#include "gal/a11y/e-table/gal-a11y-e-table-click-to-add-factory.h"
-
-enum {
- CURSOR_CHANGE,
- LAST_SIGNAL
-};
-
-static guint etcta_signals [LAST_SIGNAL] = { 0 };
-
-#define PARENT_OBJECT_TYPE gnome_canvas_group_get_type ()
-
-#define ELEMENTS(x) (sizeof (x) / sizeof (x[0]))
-
-static GnomeCanvasGroupClass *etcta_parent_class;
-
-enum {
- PROP_0,
- PROP_HEADER,
- PROP_MODEL,
- PROP_MESSAGE,
- PROP_WIDTH,
- PROP_HEIGHT
-};
-
-static void
-etcta_cursor_change (GtkObject *object, gint row, gint col, ETableClickToAdd *etcta)
-{
- g_signal_emit (etcta,
- etcta_signals [CURSOR_CHANGE], 0,
- row, col);
-}
-
-static void
-etcta_add_table_header (ETableClickToAdd *etcta, ETableHeader *header)
-{
- etcta->eth = header;
- if (etcta->eth)
- g_object_ref (etcta->eth);
- if (etcta->row)
- gnome_canvas_item_set(GNOME_CANVAS_ITEM(etcta->row),
- "ETableHeader", header,
- NULL);
-}
-
-static void
-etcta_drop_table_header (ETableClickToAdd *etcta)
-{
- if (!etcta->eth)
- return;
-
- g_object_unref (etcta->eth);
- etcta->eth = NULL;
-}
-
-static void
-etcta_add_one (ETableClickToAdd *etcta, ETableModel *one)
-{
- etcta->one = one;
- if (etcta->one)
- g_object_ref (etcta->one);
- if (etcta->row)
- gnome_canvas_item_set(GNOME_CANVAS_ITEM(etcta->row),
- "ETableModel", one,
- NULL);
- g_object_set(etcta->selection,
- "model", one,
- NULL);
-}
-
-static void
-etcta_drop_one (ETableClickToAdd *etcta)
-{
- if (!etcta->one)
- return;
- g_object_unref (etcta->one);
- etcta->one = NULL;
- g_object_set(etcta->selection,
- "model", NULL,
- NULL);
-}
-
-static void
-etcta_add_model (ETableClickToAdd *etcta, ETableModel *model)
-{
- etcta->model = model;
- if (etcta->model)
- g_object_ref (etcta->model);
-}
-
-static void
-etcta_drop_model (ETableClickToAdd *etcta)
-{
- etcta_drop_one (etcta);
- if (!etcta->model)
- return;
- g_object_unref (etcta->model);
- etcta->model = NULL;
-}
-
-static void
-etcta_add_message (ETableClickToAdd *etcta, char *message)
-{
- etcta->message = g_strdup(message);
-}
-
-static void
-etcta_drop_message (ETableClickToAdd *etcta)
-{
- g_free(etcta->message);
- etcta->message = NULL;
-}
-
-
-static void
-etcta_dispose (GObject *object)
-{
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (object);
-
- etcta_drop_table_header (etcta);
- etcta_drop_model (etcta);
- etcta_drop_message (etcta);
- if (etcta->selection)
- g_object_unref (etcta->selection);
- etcta->selection = NULL;
-
- if (G_OBJECT_CLASS (etcta_parent_class)->dispose)
- (*G_OBJECT_CLASS (etcta_parent_class)->dispose) (object);
-}
-
-static void
-etcta_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ETableClickToAdd *etcta;
-
- item = GNOME_CANVAS_ITEM (object);
- etcta = E_TABLE_CLICK_TO_ADD (object);
-
- switch (prop_id){
- case PROP_HEADER:
- etcta_drop_table_header (etcta);
- etcta_add_table_header (etcta, E_TABLE_HEADER(g_value_get_object (value)));
- break;
- case PROP_MODEL:
- etcta_drop_model (etcta);
- etcta_add_model (etcta, E_TABLE_MODEL(g_value_get_object (value)));
- break;
- case PROP_MESSAGE:
- etcta_drop_message (etcta);
- etcta_add_message (etcta, (char*)g_value_get_string (value));
- break;
- case PROP_WIDTH:
- etcta->width = g_value_get_double (value);
- if (etcta->row)
- gnome_canvas_item_set(etcta->row,
- "minimum_width", etcta->width,
- NULL);
- if (etcta->text)
- gnome_canvas_item_set(etcta->text,
- "width", etcta->width - 4,
- NULL);
- if (etcta->rect)
- gnome_canvas_item_set(etcta->rect,
- "x2", etcta->width - 1,
- NULL);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- return;
-
- }
- gnome_canvas_item_request_update(item);
-}
-
-static void
-etcta_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableClickToAdd *etcta;
-
- etcta = E_TABLE_CLICK_TO_ADD (object);
-
- switch (prop_id){
- case PROP_HEADER:
- g_value_set_object (value, etcta->eth);
- break;
- case PROP_MODEL:
- g_value_set_object (value, etcta->model);
- break;
- case PROP_MESSAGE:
- g_value_set_string (value, g_strdup(etcta->message));
- break;
- case PROP_WIDTH:
- g_value_set_double (value, etcta->width);
- break;
- case PROP_HEIGHT:
- g_value_set_double (value, etcta->height);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-etcta_realize (GnomeCanvasItem *item)
-{
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);
-
- etcta->rect = gnome_canvas_item_new(GNOME_CANVAS_GROUP(item),
- gnome_canvas_rect_get_type(),
- "x1", (double) 0,
- "y1", (double) 0,
- "x2", (double) etcta->width - 1,
- "y2", (double) etcta->height - 1,
- "outline_color", "black",
- "fill_color", "white",
- NULL);
-
- etcta->text = gnome_canvas_item_new(GNOME_CANVAS_GROUP(item),
- e_text_get_type(),
- "text", etcta->message ? etcta->message : "",
- "anchor", GTK_ANCHOR_NW,
- "width", etcta->width - 4,
- "draw_background", FALSE,
- NULL);
- e_canvas_item_move_absolute (etcta->text, 2, 2);
-
- if (GNOME_CANVAS_ITEM_CLASS (etcta_parent_class)->realize)
- (*GNOME_CANVAS_ITEM_CLASS (etcta_parent_class)->realize)(item);
-
- e_canvas_item_request_reflow (item);
-}
-
-static void
-etcta_unrealize (GnomeCanvasItem *item)
-{
- if (GNOME_CANVAS_ITEM_CLASS (etcta_parent_class)->unrealize)
- (*GNOME_CANVAS_ITEM_CLASS (etcta_parent_class)->unrealize)(item);
-}
-
-static void finish_editing (ETableClickToAdd *etcta);
-
-static int
-item_key_press (ETableItem *item, int row, int col, GdkEvent *event, ETableClickToAdd *etcta)
-{
- switch (event->key.keyval) {
- case GDK_Return:
- case GDK_KP_Enter:
- case GDK_ISO_Enter:
- case GDK_3270_Enter:
- finish_editing(etcta);
- return TRUE;
- }
- return FALSE;
-}
-
-static void
-set_initial_selection (ETableClickToAdd *etcta)
-{
- e_selection_model_do_something (E_SELECTION_MODEL(etcta->selection),
- 0, e_table_header_prioritized_column (etcta->eth),
- 0);
-}
-
-static void
-finish_editing (ETableClickToAdd *etcta)
-{
- if (etcta->row) {
- ETableModel *one;
-
- e_table_item_leave_edit (E_TABLE_ITEM (etcta->row));
- e_table_one_commit(E_TABLE_ONE(etcta->one));
- etcta_drop_one (etcta);
- gtk_object_destroy(GTK_OBJECT (etcta->row));
- etcta->row = NULL;
-
- one = e_table_one_new(etcta->model);
- etcta_add_one (etcta, one);
- g_object_unref (one);
-
- e_selection_model_clear(E_SELECTION_MODEL(etcta->selection));
-
- etcta->row = gnome_canvas_item_new(GNOME_CANVAS_GROUP(etcta),
- e_table_item_get_type(),
- "ETableHeader", etcta->eth,
- "ETableModel", etcta->one,
- "minimum_width", etcta->width,
- "horizontal_draw_grid", TRUE,
- "vertical_draw_grid", TRUE,
- "selection_model", etcta->selection,
- "cursor_mode", E_CURSOR_SPREADSHEET,
- NULL);
-
- g_signal_connect(etcta->row, "key_press",
- G_CALLBACK(item_key_press), etcta);
-
- set_initial_selection (etcta);
- }
-}
-
-/*
- * Handles the events on the ETableClickToAdd, particularly it creates the ETableItem and passes in some events.
- */
-static int
-etcta_event (GnomeCanvasItem *item, GdkEvent *e)
-{
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);
-
- switch (e->type){
- case GDK_FOCUS_CHANGE:
- if (!e->focus_change.in)
- return TRUE;
-
- case GDK_BUTTON_PRESS:
- if (etcta->text) {
- gtk_object_destroy(GTK_OBJECT (etcta->text));
- etcta->text = NULL;
- }
- if (etcta->rect) {
- gtk_object_destroy(GTK_OBJECT (etcta->rect));
- etcta->rect = NULL;
- }
- if (!etcta->row) {
- ETableModel *one;
-
- one = e_table_one_new(etcta->model);
- etcta_add_one (etcta, one);
- g_object_unref (one);
-
- e_selection_model_clear(E_SELECTION_MODEL(etcta->selection));
-
- etcta->row = gnome_canvas_item_new(GNOME_CANVAS_GROUP(item),
- e_table_item_get_type(),
- "ETableHeader", etcta->eth,
- "ETableModel", etcta->one,
- "minimum_width", etcta->width,
- "horizontal_draw_grid", TRUE,
- "vertical_draw_grid", TRUE,
- "selection_model", etcta->selection,
- "cursor_mode", E_CURSOR_SPREADSHEET,
- NULL);
-
- g_signal_connect(etcta->row, "key_press",
- G_CALLBACK (item_key_press), etcta);
-
- e_canvas_item_grab_focus (GNOME_CANVAS_ITEM(etcta->row), TRUE);
-
- set_initial_selection (etcta);
- }
- break;
-
- case GDK_KEY_PRESS:
- switch (e->key.keyval) {
- case GDK_Tab:
- case GDK_KP_Tab:
- case GDK_ISO_Left_Tab:
- finish_editing (etcta);
- break;
- default:
- return FALSE;
- break;
- }
- break;
-
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-static void
-etcta_reflow (GnomeCanvasItem *item, int flags)
-{
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);
-
- double old_height = etcta->height;
-
- if (etcta->text) {
- g_object_get(etcta->text,
- "height", &etcta->height,
- NULL);
- etcta->height += 6;
- }
- if (etcta->row) {
- g_object_get(etcta->row,
- "height", &etcta->height,
- NULL);
- }
-
- if (etcta->rect) {
- g_object_set(etcta->rect,
- "y2", etcta->height - 1,
- NULL);
- }
-
- if (old_height != etcta->height)
- e_canvas_item_request_parent_reflow(item);
-}
-
-static void
-etcta_class_init (ETableClickToAddClass *klass)
-{
- GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS(klass);
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
-
- etcta_parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-
- klass->cursor_change = NULL;
-
- object_class->dispose = etcta_dispose;
- object_class->set_property = etcta_set_property;
- object_class->get_property = etcta_get_property;
-
- item_class->realize = etcta_realize;
- item_class->unrealize = etcta_unrealize;
- item_class->event = etcta_event;
-
- g_object_class_install_property (object_class, PROP_HEADER,
- g_param_spec_object ("header",
- _("Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MODEL,
- g_param_spec_object ("model",
- _("Model"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_MODEL_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MESSAGE,
- g_param_spec_string ("message",
- _("Message"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _("Width"),
- /*_( */"XXX blurb" /*)*/,
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE | G_PARAM_LAX_VALIDATION));
-
- g_object_class_install_property (object_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _("Height"),
- /*_( */"XXX blurb" /*)*/,
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READABLE | G_PARAM_LAX_VALIDATION));
-
- etcta_signals [CURSOR_CHANGE] =
- g_signal_new ("cursor_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClickToAddClass, cursor_change),
- NULL, NULL,
- e_marshal_VOID__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TABLE_CLICK_TO_ADD_TYPE,
- gal_a11y_e_table_click_to_add_factory_get_type ());
-
-}
-
-static void
-etcta_init (GnomeCanvasItem *item)
-{
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);
-
- etcta->one = NULL;
- etcta->model = NULL;
- etcta->eth = NULL;
-
- etcta->message = NULL;
-
- etcta->row = NULL;
- etcta->text = NULL;
- etcta->rect = NULL;
-
- etcta->selection = e_table_selection_model_new();
- g_signal_connect(etcta->selection, "cursor_changed",
- G_CALLBACK (etcta_cursor_change), etcta);
-
- e_canvas_item_set_reflow_callback(item, etcta_reflow);
-}
-
-E_MAKE_TYPE(e_table_click_to_add, "ETableClickToAdd", ETableClickToAdd, etcta_class_init, etcta_init, PARENT_OBJECT_TYPE)
-
-
-/* The colors in this need to be themefied. */
-/**
- * e_table_click_to_add_commit:
- * @etcta: The %ETableClickToAdd to commit.
- *
- * This routine commits the current thing being edited and returns to
- * just displaying the click to add message.
- **/
-void
-e_table_click_to_add_commit (ETableClickToAdd *etcta)
-{
- if (etcta->row) {
- e_table_one_commit(E_TABLE_ONE(etcta->one));
- etcta_drop_one (etcta);
- gtk_object_destroy(GTK_OBJECT (etcta->row));
- etcta->row = NULL;
- }
- if (!etcta->rect) {
- etcta->rect = gnome_canvas_item_new(GNOME_CANVAS_GROUP(etcta),
- gnome_canvas_rect_get_type(),
- "x1", (double) 0,
- "y1", (double) 0,
- "x2", (double) etcta->width - 1,
- "y2", (double) etcta->height - 1,
- "outline_color", "black",
- "fill_color", "white",
- NULL);
- }
- if (!etcta->text) {
- etcta->text = gnome_canvas_item_new(GNOME_CANVAS_GROUP(etcta),
- e_text_get_type(),
- "text", etcta->message ? etcta->message : "",
- "anchor", GTK_ANCHOR_NW,
- "width", etcta->width - 4,
- "draw_background", FALSE,
- NULL);
- e_canvas_item_move_absolute (etcta->text, 3, 3);
- }
-}
diff --git a/widgets/table/e-table-click-to-add.h b/widgets/table/e-table-click-to-add.h
deleted file mode 100644
index f5417e23f9..0000000000
--- a/widgets/table/e-table-click-to-add.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-click-to-add.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_CLICK_TO_ADD_H_
-#define _E_TABLE_CLICK_TO_ADD_H_
-
-#include <libxml/tree.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-table-selection-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_CLICK_TO_ADD_TYPE (e_table_click_to_add_get_type ())
-#define E_TABLE_CLICK_TO_ADD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_CLICK_TO_ADD_TYPE, ETableClickToAdd))
-#define E_TABLE_CLICK_TO_ADD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_CLICK_TO_ADD_TYPE, ETableClickToAddClass))
-#define E_IS_TABLE_CLICK_TO_ADD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_CLICK_TO_ADD_TYPE))
-#define E_IS_TABLE_CLICK_TO_ADD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_CLICK_TO_ADD_TYPE))
-
-typedef struct {
- GnomeCanvasGroup parent;
-
- ETableModel *one; /* The ETableOne. */
-
- ETableModel *model; /* The backend model. */
- ETableHeader *eth; /* This is just to give to the ETableItem. */
-
- char *message;
-
- GnomeCanvasItem *row; /* If row is NULL, we're sitting with no data and a "Click here" message. */
- GnomeCanvasItem *text; /* If text is NULL, row shouldn't be. */
- GnomeCanvasItem *rect; /* What the heck. Why not. */
-
- gdouble width;
- gdouble height;
-
- ETableSelectionModel *selection;
-} ETableClickToAdd;
-
-typedef struct {
- GnomeCanvasGroupClass parent_class;
-
- /*
- * signals
- */
- void (*cursor_change) (ETableClickToAdd *etcta, gint row, gint col);
-} ETableClickToAddClass;
-
-GType e_table_click_to_add_get_type (void);
-
-void e_table_click_to_add_commit (ETableClickToAdd *etcta);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_CLICK_TO_ADD_H_ */
diff --git a/widgets/table/e-table-col-dnd.h b/widgets/table/e-table-col-dnd.h
deleted file mode 100644
index d31c94ed26..0000000000
--- a/widgets/table/e-table-col-dnd.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-col-dnd.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_COL_DND_H_
-#define _E_TABLE_COL_DND_H_
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-#define TARGET_ETABLE_COL_TYPE "application/x-etable-column-header"
-
-enum {
- TARGET_ETABLE_COL_HEADER
-};
-
-G_END_DECLS
-
-#endif /* _E_TABLE_COL_DND_H_ */
diff --git a/widgets/table/e-table-col.c b/widgets/table/e-table-col.c
deleted file mode 100644
index 9acc0ba4fd..0000000000
--- a/widgets/table/e-table-col.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-col.c
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-col.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-
-static GObjectClass *parent_class;
-
-enum {
- PROP_0,
- PROP_COMPARE_COL,
-};
-
-static void
-etc_dispose (GObject *object)
-{
- ETableCol *etc = E_TABLE_COL (object);
-
- if (etc->ecell)
- g_object_unref (etc->ecell);
- etc->ecell = NULL;
-
- if (etc->pixbuf)
- gdk_pixbuf_unref (etc->pixbuf);
- etc->pixbuf = NULL;
-
- if (etc->text)
- g_free (etc->text);
- etc->text = NULL;
-
- parent_class->dispose (object);
-}
-
-static void
-etc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ETableCol *etc = E_TABLE_COL (object);
-
- switch (prop_id) {
- case PROP_COMPARE_COL:
- etc->compare_col = g_value_get_int (value);
- break;
- default:
- break;
- }
-}
-
-static void
-etc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableCol *etc = E_TABLE_COL (object);
-
- switch (prop_id) {
- case PROP_COMPARE_COL:
- g_value_set_int (value, etc->compare_col);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-e_table_col_class_init (GObjectClass *object_class)
-{
- parent_class = g_type_class_peek_parent (object_class);
-
- object_class->dispose = etc_dispose;
- object_class->set_property = etc_set_property;
- object_class->get_property = etc_get_property;
-
- g_object_class_install_property (object_class, PROP_COMPARE_COL,
- g_param_spec_int ("compare_col",
- _( "Width" ),
- "Width",
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-}
-
-static void
-e_table_col_init (ETableCol *etc)
-{
- etc->width = 0;
- etc->sortable = 1;
- etc->groupable = 1;
- etc->justification = GTK_JUSTIFY_LEFT;
- etc->priority = 0;
-}
-
-E_MAKE_TYPE(e_table_col, "ETableCol", ETableCol, e_table_col_class_init, e_table_col_init, G_TYPE_OBJECT)
-
-/**
- * e_table_col_new:
- * @col_idx: the column we represent in the model
- * @text: a title for this column
- * @expansion: FIXME
- * @min_width: minimum width in pixels for this column
- * @ecell: the renderer to be used for this column
- * @compare: comparision function for the elements stored in this column
- * @resizable: whether the column can be resized interactively by the user
- * @priority: FIXME
- *
- * The ETableCol represents a column to be used inside an ETable. The
- * ETableCol objects are inserted inside an ETableHeader (which is just a collection
- * of ETableCols). The ETableHeader is the definition of the order in which
- * columns are shown to the user.
- *
- * The @text argument is the the text that will be shown as a header to the
- * user. @col_idx reflects where the data for this ETableCol object will
- * be fetch from an ETableModel. So even if the user changes the order
- * of the columns being viewed (the ETableCols in the ETableHeader), the
- * column will always point to the same column inside the ETableModel.
- *
- * The @ecell argument is an ECell object that needs to know how to render the
- * data in the ETableModel for this specific row.
- *
- * Returns: the newly created ETableCol object.
- */
-ETableCol *
-e_table_col_new (int col_idx, const char *text, double expansion, int min_width,
- ECell *ecell, GCompareFunc compare, gboolean resizable, gboolean disabled, int priority)
-{
- ETableCol *etc;
-
- g_return_val_if_fail (expansion >= 0, NULL);
- g_return_val_if_fail (min_width >= 0, NULL);
- g_return_val_if_fail (ecell != NULL, NULL);
- g_return_val_if_fail (compare != NULL, NULL);
- g_return_val_if_fail (text != NULL, NULL);
-
- etc = g_object_new (E_TABLE_COL_TYPE, NULL);
-
- etc->is_pixbuf = FALSE;
-
- etc->col_idx = col_idx;
- etc->compare_col = col_idx;
- etc->text = g_strdup (text);
- etc->pixbuf = NULL;
- etc->expansion = expansion;
- etc->min_width = min_width;
- etc->ecell = ecell;
- etc->compare = compare;
- etc->disabled = disabled;
- etc->priority = priority;
-
- etc->selected = 0;
- etc->resizable = resizable;
-
- g_object_ref (etc->ecell);
-
- return etc;
-}
-
-/**
- * e_table_col_new_with_pixbuf:
- * @col_idx: the column we represent in the model
- * @pixbuf: the image to be used for the header
- * @expansion: FIXME
- * @min_width: minimum width in pixels for this column
- * @ecell: the renderer to be used for this column
- * @compare: comparision function for the elements stored in this column
- * @resizable: whether the column can be resized interactively by the user
- *
- * The ETableCol represents a column to be used inside an ETable. The
- * ETableCol objects are inserted inside an ETableHeader (which is just a collection
- * of ETableCols). The ETableHeader is the definition of the order in which
- * columns are shown to the user.
- *
- * The @text argument is the the text that will be shown as a header to the
- * user. @col_idx reflects where the data for this ETableCol object will
- * be fetch from an ETableModel. So even if the user changes the order
- * of the columns being viewed (the ETableCols in the ETableHeader), the
- * column will always point to the same column inside the ETableModel.
- *
- * The @ecell argument is an ECell object that needs to know how to render the
- * data in the ETableModel for this specific row.
- *
- * Returns: the newly created ETableCol object.
- */
-ETableCol *
-e_table_col_new_with_pixbuf (int col_idx, const char *text, GdkPixbuf *pixbuf, double expansion, int min_width,
- ECell *ecell, GCompareFunc compare, gboolean resizable, gboolean disabled, int priority)
-{
- ETableCol *etc;
-
- g_return_val_if_fail (expansion >= 0, NULL);
- g_return_val_if_fail (min_width >= 0, NULL);
- g_return_val_if_fail (ecell != NULL, NULL);
- g_return_val_if_fail (compare != NULL, NULL);
- g_return_val_if_fail (pixbuf != NULL, NULL);
-
- etc = g_object_new (E_TABLE_COL_TYPE, NULL);
-
- etc->is_pixbuf = TRUE;
-
- etc->col_idx = col_idx;
- etc->compare_col = col_idx;
- etc->text = g_strdup(text);
- etc->pixbuf = pixbuf;
- etc->expansion = expansion;
- etc->min_width = min_width;
- etc->ecell = ecell;
- etc->compare = compare;
- etc->disabled = disabled;
- etc->priority = priority;
-
- etc->selected = 0;
- etc->resizable = resizable;
-
- g_object_ref (etc->ecell);
- gdk_pixbuf_ref (etc->pixbuf);
-
- return etc;
-}
diff --git a/widgets/table/e-table-col.h b/widgets/table/e-table-col.h
deleted file mode 100644
index 8f2369c76a..0000000000
--- a/widgets/table/e-table-col.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-col.h
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_COL_H_
-#define _E_TABLE_COL_H_
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gal/e-table/e-cell.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_COL_TYPE (e_table_col_get_type ())
-#define E_TABLE_COL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_COL_TYPE, ETableCol))
-#define E_TABLE_COL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_COL_TYPE, ETableColClass))
-#define E_IS_TABLE_COL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_COL_TYPE))
-#define E_IS_TABLE_COL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_COL_TYPE))
-#define E_TABLE_COL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_COL_TYPE, ETableColClass))
-
-typedef enum {
- E_TABLE_COL_ARROW_NONE = 0,
- E_TABLE_COL_ARROW_UP,
- E_TABLE_COL_ARROW_DOWN
-} ETableColArrow;
-
-/*
- * Information about a single column
- */
-typedef struct {
- GObject base;
- char *text;
- GdkPixbuf *pixbuf;
- int min_width;
- int width;
- double expansion;
- short x;
- GCompareFunc compare;
- ETableSearchFunc search;
- unsigned int is_pixbuf:1;
- unsigned int selected:1;
- unsigned int resizable:1;
- unsigned int disabled:1;
- unsigned int sortable:1;
- unsigned int groupable:1;
- int col_idx;
- int compare_col;
- int priority;
-
- GtkJustification justification;
-
- ECell *ecell;
-} ETableCol;
-
-typedef struct {
- GObjectClass parent_class;
-} ETableColClass;
-
-GType e_table_col_get_type (void);
-ETableCol *e_table_col_new (int col_idx,
- const char *text,
- double expansion,
- int min_width,
- ECell *ecell,
- GCompareFunc compare,
- gboolean resizable,
- gboolean disabled,
- int priority);
-ETableCol *e_table_col_new_with_pixbuf (int col_idx,
- const char *text,
- GdkPixbuf *pixbuf,
- double expansion,
- int min_width,
- ECell *ecell,
- GCompareFunc compare,
- gboolean resizable,
- gboolean disabled,
- int priority);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_COL_H_ */
-
diff --git a/widgets/table/e-table-column-specification.c b/widgets/table/e-table-column-specification.c
deleted file mode 100644
index 2e992414d5..0000000000
--- a/widgets/table/e-table-column-specification.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-column-specification.c - Savable specification of a column.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-#include "gal/util/e-xml-utils.h"
-#include "gal/util/e-util.h"
-#include "e-table-column-specification.h"
-
-static GObjectClass *etcs_parent_class;
-
-static void
-free_strings (ETableColumnSpecification *etcs)
-{
- g_free(etcs->title);
- etcs->title = NULL;
- g_free(etcs->pixbuf);
- etcs->pixbuf = NULL;
- g_free(etcs->cell);
- etcs->cell = NULL;
- g_free(etcs->compare);
- etcs->compare = NULL;
- g_free(etcs->search);
- etcs->search = NULL;
-}
-
-static void
-etcs_finalize (GObject *object)
-{
- ETableColumnSpecification *etcs = E_TABLE_COLUMN_SPECIFICATION (object);
-
- free_strings(etcs);
-
- etcs_parent_class->finalize (object);
-}
-
-static void
-etcs_class_init (GObjectClass *klass)
-{
- etcs_parent_class = g_type_class_peek_parent (klass);
-
- klass->finalize = etcs_finalize;
-}
-
-static void
-etcs_init (ETableColumnSpecification *specification)
-{
- specification->model_col = 0;
- specification->compare_col = 0;
- specification->title = g_strdup("");
- specification->pixbuf = NULL;
-
- specification->expansion = 0;
- specification->minimum_width = 0;
- specification->resizable = FALSE;
- specification->disabled = FALSE;
-
- specification->cell = NULL;
- specification->compare = NULL;
- specification->search = NULL;
- specification->priority = 0;
-}
-
-E_MAKE_TYPE(e_table_column_specification, "ETableColumnSpecification", ETableColumnSpecification, etcs_class_init, etcs_init, G_TYPE_OBJECT)
-
-ETableColumnSpecification *
-e_table_column_specification_new (void)
-{
- ETableColumnSpecification *etcs = g_object_new (E_TABLE_COLUMN_SPECIFICATION_TYPE, NULL);
-
- return (ETableColumnSpecification *) etcs;
-}
-
-void
-e_table_column_specification_load_from_node (ETableColumnSpecification *etcs,
- const xmlNode *node)
-{
- free_strings(etcs);
-
- etcs->model_col = e_xml_get_integer_prop_by_name (node, "model_col");
- etcs->compare_col = e_xml_get_integer_prop_by_name_with_default (node, "compare_col", etcs->model_col);
- etcs->title = e_xml_get_string_prop_by_name (node, "_title");
- etcs->pixbuf = e_xml_get_string_prop_by_name (node, "pixbuf");
-
- etcs->expansion = e_xml_get_double_prop_by_name (node, "expansion");
- etcs->minimum_width = e_xml_get_integer_prop_by_name (node, "minimum_width");
- etcs->resizable = e_xml_get_bool_prop_by_name (node, "resizable");
- etcs->disabled = e_xml_get_bool_prop_by_name (node, "disabled");
-
- etcs->cell = e_xml_get_string_prop_by_name (node, "cell");
- etcs->compare = e_xml_get_string_prop_by_name (node, "compare");
- etcs->search = e_xml_get_string_prop_by_name (node, "search");
- etcs->priority = e_xml_get_integer_prop_by_name_with_default (node, "priority", 0);
-
- if (etcs->title == NULL)
- etcs->title = g_strdup("");
-}
-
-xmlNode *
-e_table_column_specification_save_to_node (ETableColumnSpecification *specification,
- xmlNode *parent)
-{
- xmlNode *node;
- if (parent)
- node = xmlNewChild(parent, NULL, "ETableColumn", NULL);
- else
- node = xmlNewNode(NULL, "ETableColumn");
-
- e_xml_set_integer_prop_by_name(node, "model_col", specification->model_col);
- if (specification->compare_col != specification->model_col)
- e_xml_set_integer_prop_by_name(node, "compare_col", specification->compare_col);
- e_xml_set_string_prop_by_name(node, "_title", specification->title);
- e_xml_set_string_prop_by_name(node, "pixbuf", specification->pixbuf);
-
- e_xml_set_double_prop_by_name(node, "expansion", specification->expansion);
- e_xml_set_integer_prop_by_name(node, "minimum_width", specification->minimum_width);
- e_xml_set_bool_prop_by_name(node, "resizable", specification->resizable);
- e_xml_set_bool_prop_by_name(node, "disabled", specification->disabled);
-
- e_xml_set_string_prop_by_name(node, "cell", specification->cell);
- e_xml_set_string_prop_by_name(node, "compare", specification->compare);
- e_xml_set_string_prop_by_name(node, "search", specification->search);
- if (specification->priority != 0)
- e_xml_set_integer_prop_by_name (node, "priority", specification->priority);
-
- return node;
-}
-
diff --git a/widgets/table/e-table-column-specification.h b/widgets/table/e-table-column-specification.h
deleted file mode 100644
index 6bf5623398..0000000000
--- a/widgets/table/e-table-column-specification.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-column-specification.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_COLUMN_SPECIFICATION_H_
-#define _E_TABLE_COLUMN_SPECIFICATION_H_
-
-#include <glib.h>
-#include <glib-object.h>
-#include <libxml/tree.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_COLUMN_SPECIFICATION_TYPE (e_table_column_specification_get_type ())
-#define E_TABLE_COLUMN_SPECIFICATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_COLUMN_SPECIFICATION_TYPE, ETableColumnSpecification))
-#define E_TABLE_COLUMN_SPECIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_COLUMN_SPECIFICATION_TYPE, ETableColumnSpecificationClass))
-#define E_IS_TABLE_COLUMN_SPECIFICATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_COLUMN_SPECIFICATION_TYPE))
-#define E_IS_TABLE_COLUMN_SPECIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_COLUMN_SPECIFICATION_TYPE))
-#define E_TABLE_COLUMN_SPECIFICATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_COLUMN_SPECIFICATION_TYPE, ETableColumnSpecificationClass))
-
-typedef struct {
- GObject base;
- int model_col;
- int compare_col;
- char *title;
- char *pixbuf;
-
- double expansion;
- int minimum_width;
- guint resizable : 1;
- guint disabled : 1;
-
- char *cell;
- char *compare;
- char *search;
- int priority;
-} ETableColumnSpecification;
-
-typedef struct {
- GObjectClass parent_class;
-} ETableColumnSpecificationClass;
-
-GType e_table_column_specification_get_type (void);
-
-ETableColumnSpecification *e_table_column_specification_new (void);
-
-void e_table_column_specification_load_from_node (ETableColumnSpecification *state,
- const xmlNode *node);
-xmlNode *e_table_column_specification_save_to_node (ETableColumnSpecification *state,
- xmlNode *parent);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_COLUMN_SPECIFICATION_H_ */
diff --git a/widgets/table/e-table-column.c b/widgets/table/e-table-column.c
deleted file mode 100644
index 514a25e74e..0000000000
--- a/widgets/table/e-table-column.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-column.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-column.h"
-
-enum {
- STRUCTURE_CHANGE,
- DIMENSION_CHANGE,
- LAST_SIGNAL
-};
-
-static guint etc_signals [LAST_SIGNAL] = { 0, };
-
-#define PARENT_CLASS GTK_TYPE_OBJECT
-static GtkObjectClass *e_table_column_parent_class;
-
-static void
-e_table_column_finalize (GObject *object)
-{
- ETableColumn *etc = E_TABLE_COLUMN (object);
- const int cols = etc->col_count;
-
- /*
- * Destroy listeners
- */
- for (l = etc->listeners; l; l = l->next)
- g_free (l->data);
- g_slist_free (etc->listeners);
- etc->listeners = NULL;
-
- /*
- * Destroy columns
- */
- for (i = 0; i < cols; i++)
- e_table_column_remove (etc, i);
-
- G_OBJECT_CLASS (e_table_column_parent_class)->finalize (object);
-}
-
-static void
-e_table_column_class_init (GtkObjectClass *object_class)
-{
- G_OBJECT_CLASS (object_class)->finalize = e_table_column_finalize;
-
- e_table_column_parent_class = g_type_class_ref (PARENT_CLASS);
-
- etc_signals [STRUCTURE_CHANGE] =
- g_signal_new ("structure_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableColumn, structure_change),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
- etc_signals [DIMENSION_CHANGE] =
- g_signal_new ("dimension_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableColumn, dimension_change),
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-}
-
-E_MAKE_TYPE (e_table_column,
- "ETableColumn",
- ETableColumn,
- e_table_column_class_init,
- NULL,
- PARENT_TYPE);
-
-static void
-etc_do_insert (ETableColumn *etc, int pos, ETableCol *val)
-{
- memcpy (&etc->columns [pos+1], &etc->columns [pos],
- sizeof (ETableCol *) * (etc->col_count - pos));
- etc->columns [pos] = val;
-}
-
-void
-e_table_column_add_column (ETableColumn *etc, ETableCol *tc, int pos)
-{
- ETableCol **new_ptr;
-
- g_return_if_fail (etc != NULL);
- g_return_if_fail (E_IS_TABLE_COLUMN (etc));
- g_return_if_fail (tc != NULL);
- g_return_if_fail (pos >= 0 && pos < etc->col_count);
-
- if (pos == -1)
- pos = etc->col_count;
- etc->columns = g_realloc (etc->columns, sizeof (ETableCol *) * (etc->col_count + 1));
- etc_do_insert (etc, pos, tc);
- etc->col_count++;
-
- g_signal_emit (etc, etc_signals [STRUCTURE_CHANGE], 0);
-}
-
-ETableCol *
-e_table_column_get_column (ETableColumn *etc, int column)
-{
- g_return_val_if_fail (etc != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), NULL);
-
- if (column < 0)
- return NULL;
-
- if (column >= etc->col_count)
- return NULL;
-
- return etc->columns [column];
-}
-
-int
-e_table_column_count (ETableColumn *etc)
-{
- g_return_val_if_fail (etc != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0);
-
- return etc->col_count;
-}
-
-int
-e_table_column_index (ETableColumn *etc, const char *identifier)
-{
- int i;
-
- g_return_val_if_fail (etc != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0);
- g_return_val_if_fail (identifier != NULL, 0);
-
- for (i = 0; i < etc->col_count; i++){
- ETableCol *tc = etc->columns [i];
-
- if (strcmp (i->id, identifier) == 0)
- return i;
- }
-
- return -1;
-}
-
-int
-e_table_column_get_index_at (ETableColumn *etc, int x_offset)
-{
- int i, total;
-
- g_return_val_if_fail (etc != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0);
- g_return_val_if_fail (identifier != NULL, 0);
-
- total = 0;
- for (i = 0; i < etc->col_count; i++){
- total += etc->columns [i]->width;
-
- if (x_offset < total)
- return i;
- }
-
- return -1;
-}
-
-ETableCol **
-e_table_column_get_columns (ETableColumn *etc)
-{
- ETableCol **ret;
- int i;
-
- g_return_val_if_fail (etc != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0);
-
- ret = g_new (ETableCol *, etc->col_count + 1);
- memcpy (ret, etc->columns, sizeof (ETableCol *) * etc->col_count);
- ret [etc->col_count] = NULL;
-
- return ret;
-}
-
-gboolean
-e_table_column_selection_ok (ETableColumn *etc)
-{
- g_return_val_if_fail (etc != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), FALSE);
-
- return etc->selectable;
-}
-
-int
-ve_table_column_get_selected (ETableColumn *etc)
-{
- int i;
- int selected = 0;
-
- g_return_val_if_fail (etc != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0);
-
- for (i = 0; i < etc->col_count; i++){
- if (etc->columns [i]->selected)
- selected++;
- }
-
- return selected;
-}
-
-int
-e_table_column_total_width (ETableColumn *etc)
-{
- int total;
-
- g_return_val_if_fail (etc != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0);
-
- total = 0;
- for (i = 0; i < etc->col_count; i++)
- total += etc->columns [i].width;
-
- return total;
-}
-
-static void
-etc_do_remove (ETableColumn *etc, int idx)
-{
- memcpy (&etc->columns [idx], &etc->columns [idx+1],
- sizeof (ETableCol *) * etc->col_count - idx);
- etc->col_count--;
-}
-
-void
-e_table_column_move (ETableColumn *etc, int source_index, int target_index)
-{
- g_return_if_fail (etc != NULL);
- g_return_if_fail (E_IS_TABLE_COLUMN (etc));
- g_return_if_fail (source_index >= 0);
- g_return_if_fail (target_index >= 0);
- g_return_if_fail (source_index < etc->col_count);
- g_return_if_fail (target_index < etc->col_count);
-
- old = etc->columns [source_index];
- etc_do_remove (etc, source_index);
- etc_do_insert (etc, target_index, old);
- g_signal_emit (etc, etc_signals [STRUCTURE_CHANGE], 0);
-}
-
-void
-e_table_column_remove (ETableColumn *etc, int idx)
-{
- g_return_if_fail (etc != NULL);
- g_return_if_fail (E_IS_TABLE_COLUMN (etc));
- g_return_if_fail (idx >= 0);
- g_return_if_fail (idx < etc->col_count);
-
- etc_do_remove (etc, idx);
- g_signal_emit (etc, etc_signals [STRUCTURE_CHANGE], 0);
-}
-
-void
-e_table_column_set_selection (ETableColumn *etc, gboolean allow_selection);
-{
-}
-
-void
-e_table_column_set_size (ETableColumn *etc, int idx, int size)
-{
- g_return_if_fail (etc != NULL);
- g_return_if_fail (E_IS_TABLE_COLUMN (etc));
- g_return_if_fail (idx >= 0);
- g_return_if_fail (idx < etc->col_count);
- g_return_if_fail (size > 0);
-
- etc->columns [idx]->width = size;
- g_signal_emit (etc, etc_signals [SIZE_CHANGE], 0, idx);
-}
diff --git a/widgets/table/e-table-config-field.c b/widgets/table/e-table-config-field.c
deleted file mode 100644
index 7c23e10046..0000000000
--- a/widgets/table/e-table-config-field.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-config-field.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkbox.h>
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include "e-table-config-field.h"
-
-#define PARENT_TYPE (gtk_vbox_get_type())
-
-static GtkVBoxClass *etcf_parent_class;
-
-static void
-etcf_dispose (GObject *object)
-{
- ETableConfigField *etcf = E_TABLE_CONFIG_FIELD (object);
-
- if (etct->spec)
- g_object_unref (etcf->spec);
- etct->spec = NULL;
-
- if (etct->sort_info)
- g_object_unref (etcf->sort_info);
- etct->sort_info = NULL;
-
- G_OBJECT_CLASS (etcf_parent_class)->dispose (object);
-}
-
-static void
-etcf_class_init (GObjectClass *klass)
-{
- etcf_parent_class = g_type_class_ref (PARENT_TYPE);
-
- klass->dispose = etcf_dispose;
-}
-
-static void
-etcf_init (ETableConfigField *etcf)
-{
- etcf->spec = NULL;
- etcf->sort_info = NULL;
-
- etcf->combo = NULL;
- etcf->radio_ascending = NULL;
- etcf->radio_descending = NULL;
- etcf->child_fields = NULL;
-}
-
-E_MAKE_TYPE(e_table_config_field, "ETableConfigField", ETableConfigField, etcf_class_init, etcf_init, PARENT_TYPE)
-
-ETableConfigField *
-e_table_config_field_new (ETableSpecification *spec,
- ETableSortInfo *sort_info,
- gboolean grouping)
-{
- ETableConfigField *etcf = g_object_new (E_TABLE_CONFIG_FIELD_TYPE, NULL);
-
- e_table_config_field_construct (etcf, spec, sort_info, grouping);
-
- return (ETableConfigField *) etcf;
-}
-
-inline static int
-etcf_get_count (ETableConfigField *etcf)
-{
- if (etcf->grouping)
- return e_table_sort_info_grouping_get_count(etcf->sort_info);
- else
- return e_table_sort_info_sorting_get_count(etcf->sort_info);
-}
-
-inline static ETableSortColumn
-etcf_get_nth (ETableConfigField *etcf)
-{
- if (etcf->grouping)
- return e_table_sort_info_grouping_get_nth(etcf->sort_info, etcf->n);
- else
- return e_table_sort_info_sorting_get_nth(etcf->sort_info, etcf->n);
-}
-
-inline static void
-etcf_set_nth (ETableConfigField *etcf, ETableSortColumn column)
-{
- if (etcf->grouping)
- e_table_sort_info_grouping_set_nth(etcf->sort_info, etcf->n, column);
- else
- e_table_sort_info_sorting_set_nth(etcf->sort_info, etcf->n, column);
-}
-
-inline static void
-etcf_truncate (ETableConfigField *etcf)
-{
- if (etcf->grouping)
- e_table_sort_info_grouping_truncate(etcf->sort_info, etcf->n);
- else
- e_table_sort_info_sorting_truncate(etcf->sort_info, etcf->n);
-}
-
-static void
-etcf_set_sensitivity(ETableConfigField *etcf)
-{
- int count = etcf_get_count(etcf);
-
- if (etcf->n >= count) {
- gtk_widget_set_sensitive(etcf->radio_ascending, FALSE);
- gtk_widget_set_sensitive(etcf->radio_descending, FALSE);
- if (etcf->child_fields)
- gtk_widget_set_sensitive(etcf->child_fields, FALSE);
- } else {
- gtk_widget_set_sensitive(etcf->radio_ascending, TRUE);
- gtk_widget_set_sensitive(etcf->radio_descending, TRUE);
- if (etcf->child_fields)
- gtk_widget_set_sensitive(etcf->child_fields, TRUE);
- }
-}
-
-static void
-toggled(GtkWidget *widget, ETableConfigField *etcf)
-{
- int count;
-
- count = etcf_get_count(etcf);
- if (count > etcf->n) {
- ETableSortColumn sort_column;
-
- sort_column = etcf_get_nth(etcf);
- sort_column.ascending = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(etcf->radio_ascending));
- etcf_set_nth(etcf, sort_column);
- }
-}
-
-static void
-changed(GtkWidget *widget, ETableConfigField *etcf)
-{
- ETableColumnSpecification **column;
- gchar *text;
-
- text = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(etcf->combo)->entry));
- for (column = etcf->spec->columns; *column; column++) {
- if (!strcmp((*column)->title_, text)) {
- ETableSortColumn sort_column;
-
- sort_column.ascending = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(etcf->radio_ascending));
- sort_column.column = (*column)->model_col;
-
- etcf_set_nth(etcf, sort_column);
- etcf_set_sensitivity(etcf);
- return;
- }
- }
- etcf_truncate(etcf);
- etcf_set_sensitivity(etcf);
-}
-
-static void
-etcf_setup(ETableConfigField *etcf)
-{
- int count;
- GList *list = NULL;
- ETableColumnSpecification **column;
- ETableColumnSpecification *chosen_column = NULL;
- int model_col = -1;
-
- etcf_set_sensitivity(etcf);
-
- count = etcf_get_count(etcf);
-
- if (count > etcf->n) {
- ETableSortColumn sort_column;
-
- sort_column = etcf_get_nth(etcf);
- model_col = sort_column.column;
- if (sort_column.ascending)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(etcf->radio_ascending), TRUE);
- else
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(etcf->radio_descending), TRUE);
- }
-
- for (column = etcf->spec->columns; *column; column++) {
- list = g_list_prepend(list, (*column)->title_);
- if (count > etcf->n && chosen_column == NULL && (*column)->model_col == model_col) {
- chosen_column = *column;
- }
- }
- list = g_list_reverse(list);
- list = g_list_prepend(list, "None");
-
- gtk_combo_set_popdown_strings(GTK_COMBO(etcf->combo), list);
- g_list_free(list);
-
- if (chosen_column) {
- gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(etcf->combo)->entry), chosen_column->title_);
- } else {
- gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(etcf->combo)->entry), "None");
- }
-
- g_signal_connect(GTK_COMBO(etcf->combo)->entry, "changed",
- G_CALLBACK (changed), etcf);
- g_signal_connect(etcf->radio_ascending, "toggled",
- G_CALLBACK (toggled), etcf);
- g_signal_connect(etcf->radio_descending, "toggled",
- G_CALLBACK (toggled), etcf);
-}
-
-static ETableConfigField *
-e_table_config_field_construct_nth (ETableConfigField *etcf,
- ETableSpecification *spec,
- ETableSortInfo *sort_info,
- gboolean grouping,
- int n)
-{
- GtkWidget *frame;
- GtkWidget *internal_hbox;
- GtkWidget *internal_vbox1;
- GtkWidget *internal_vbox2;
-
- etcf->spec = spec;
- g_object_ref (spec);
-
- etcf->sort_info = sort_info;
- g_object_ref (sort_info);
-
- etcf->grouping = grouping;
- etcf->n = n;
-
- gtk_box_set_spacing(GTK_BOX(etcf), 6);
-
- frame = gtk_frame_new(n > 0 ? _("Then By") : (grouping ? _("Group By") : _("Sort By")));
- gtk_box_pack_start(GTK_BOX(etcf), frame, FALSE, FALSE, 0);
-
- internal_hbox = gtk_hbox_new(FALSE, 6);
- gtk_container_add(GTK_CONTAINER(frame), internal_hbox);
- gtk_container_set_border_width(GTK_CONTAINER(internal_hbox), 6);
-
- internal_vbox1 = gtk_vbox_new(FALSE, 6);
- gtk_box_pack_start(GTK_BOX(internal_hbox), internal_vbox1, FALSE, FALSE, 0);
-
- etcf->combo = gtk_combo_new();
- gtk_box_pack_start(GTK_BOX(internal_vbox1), etcf->combo, FALSE, FALSE, 0);
-
- internal_vbox2 = gtk_vbox_new(FALSE, 6);
- gtk_box_pack_start(GTK_BOX(internal_hbox), internal_vbox2, FALSE, FALSE, 0);
-
- etcf->radio_ascending = gtk_radio_button_new_with_label (NULL, _("Ascending"));
- gtk_box_pack_start(GTK_BOX(internal_vbox2), etcf->radio_ascending, FALSE, FALSE, 0);
-
- etcf->radio_descending = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(etcf->radio_ascending), _("Descending"));
- gtk_box_pack_start(GTK_BOX(internal_vbox2), etcf->radio_descending, FALSE, FALSE, 0);
-
- if (n < 3) {
- etcf->child_fields = GTK_WIDGET(g_object_new (E_TABLE_CONFIG_FIELD_TYPE, NULL));
- e_table_config_field_construct_nth(E_TABLE_CONFIG_FIELD(etcf->child_fields), spec, sort_info, grouping, n + 1);
- gtk_box_pack_start(GTK_BOX(etcf), etcf->child_fields, FALSE, FALSE, 0);
- gtk_widget_show(etcf->child_fields);
- } else
- etcf->child_fields = NULL;
-
- etcf_setup(etcf);
-
- gtk_widget_show(etcf->radio_descending);
- gtk_widget_show(etcf->radio_ascending);
- gtk_widget_show(internal_vbox2);
- gtk_widget_show(etcf->combo);
- gtk_widget_show(internal_vbox1);
- gtk_widget_show(internal_hbox);
- gtk_widget_show(frame);
- return etcf;
-}
-
-ETableConfigField *
-e_table_config_field_construct (ETableConfigField *etcf,
- ETableSpecification *spec,
- ETableSortInfo *sort_info,
- gboolean grouping)
-{
- return e_table_config_field_construct_nth(etcf, spec, sort_info, grouping, 0);
-}
diff --git a/widgets/table/e-table-config-field.h b/widgets/table/e-table-config-field.h
deleted file mode 100644
index bb8f540c4a..0000000000
--- a/widgets/table/e-table-config-field.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-config-field.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_CONFIG_FIELD_H_
-#define _E_TABLE_CONFIG_FIELD_H_
-
-#include <gtk/gtkvbox.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-specification.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_CONFIG_FIELD_TYPE (e_table_config_field_get_type ())
-#define E_TABLE_CONFIG_FIELD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_CONFIG_FIELD_TYPE, ETableConfigField))
-#define E_TABLE_CONFIG_FIELD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_CONFIG_FIELD_TYPE, ETableConfigFieldClass))
-#define E_IS_TABLE_CONFIG_FIELD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_CONFIG_FIELD_TYPE))
-#define E_IS_TABLE_CONFIG_FIELD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_CONFIG_FIELD_TYPE))
-
-typedef struct {
- GtkVBox base;
-
- ETableSpecification *spec;
- ETableSortInfo *sort_info;
- guint grouping : 1;
- int n;
-
- GtkWidget *combo;
- GtkWidget *radio_ascending;
- GtkWidget *radio_descending;
-
- GtkWidget *child_fields;
-} ETableConfigField;
-
-typedef struct {
- GtkVBoxClass parent_class;
-} ETableConfigFieldClass;
-
-GType e_table_config_field_get_type (void);
-ETableConfigField *e_table_config_field_new (ETableSpecification *spec,
- ETableSortInfo *sort_info,
- gboolean grouping);
-ETableConfigField *e_table_config_field_construct (ETableConfigField *field,
- ETableSpecification *spec,
- ETableSortInfo *sort_info,
- gboolean grouping);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_CONFIG_FIELD_H_ */
diff --git a/widgets/table/e-table-config-no-group.glade b/widgets/table/e-table-config-no-group.glade
deleted file mode 100644
index 75473b67f2..0000000000
--- a/widgets/table/e-table-config-no-group.glade
+++ /dev/null
@@ -1,2112 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-<requires lib="gnome"/>
-
-<widget class="GtkDialog" id="dialog-show-fields">
- <property name="title" translatable="yes">Show Fields</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button22">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button20">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkTable" id="table2">
- <property name="visible">True</property>
- <property name="n_rows">1</property>
- <property name="n_columns">5</property>
- <property name="homogeneous">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label-available">
- <property name="visible">True</property>
- <property name="label" translatable="yes">A_vailable Fields:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-displayed">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sh_ow these fields in order:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">3</property>
- <property name="right_attach">5</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table3">
- <property name="visible">True</property>
- <property name="n_rows">1</property>
- <property name="n_columns">5</property>
- <property name="homogeneous">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="Custom" id="custom-available">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_etable_available_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 21 Feb 2002 05:42:43 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="Custom" id="custom-shown">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_etable_shown_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 21 Feb 2002 15:52:40 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox4">
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button-up">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Move _Up</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-down">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Move _Down</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">3</property>
- <property name="right_attach">5</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button-add">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Add -&gt;</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-remove">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">&lt;- _Remove</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog-group-by">
- <property name="title" translatable="yes">Group</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox4">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area4">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button39">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Clear All</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button42">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button41">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox24">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox13">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkFrame" id="frame-group-1">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-1">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:09 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox8">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-1</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Group Items By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label11">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-group-2">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox9">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-2">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:14 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox10">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-2</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label19">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label18">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-group-3">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox11">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-3">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:18 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox12">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-3</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label20">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label17">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox16">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label14">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label16">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label15">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-group-4">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox8">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox13">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-4">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:21 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-4</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog-sort">
- <property name="title" translatable="yes">Sort</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button43">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Clear All</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button45">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button44">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table5">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">1</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-4">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox9">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-4">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 08:33:52 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox17">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-4</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label22">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-3">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox10">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-3">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 05:22:22 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox19">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-3</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label23">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-2">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox11">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-2">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 05:22:15 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox21">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-2</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label24">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-1">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox12">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 05:22:00 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox23">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-1</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label25">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sort Items By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="e-table-config">
- <property name="title" translatable="yes">dialog1</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="modal">True</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area5">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="applybutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-apply</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-10</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="top-frame">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">3</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">2</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkButton" id="button-sort">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Sort...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_sort_clicked"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-sort">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-fields">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-fields">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Fields Shown...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_sort_clicked"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label26">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Description</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/widgets/table/e-table-config.c b/widgets/table/e-table-config.c
deleted file mode 100644
index 2ad23b7120..0000000000
--- a/widgets/table/e-table-config.c
+++ /dev/null
@@ -1,1215 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-config.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-/*
- * FIXME:
- * Sort Dialog: when text is selected, the toggle button switches state.
- * Make Clear all work.
- */
-
-#include <config.h>
-
-#include "e-table-config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <gtk/gtkdialog.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtktogglebutton.h>
-#include <libgnomeui/gnome-propertybox.h>
-#include <glade/glade.h>
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include "gal/widgets/e-unicode.h"
-
-#include <e-table-scrolled.h>
-#include <e-table-without.h>
-#include <e-table-memory-store.h>
-
-
-static GObjectClass *config_parent_class;
-
-enum {
- CHANGED,
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_STATE,
-};
-
-static guint e_table_config_signals [LAST_SIGNAL] = { 0, };
-
-static void
-config_finalize (GObject *object)
-{
- ETableConfig *config = E_TABLE_CONFIG (object);
-
- if (config->state)
- g_object_unref (config->state);
- config->state = NULL;
-
- if (config->source_state)
- g_object_unref (config->source_state);
- config->source_state = NULL;
-
- if (config->source_spec)
- g_object_unref (config->source_spec);
- config->source_spec = NULL;
-
- g_free (config->header);
- config->header = NULL;
-
- g_slist_free (config->column_names);
- config->column_names = NULL;
-
- g_free (config->domain);
- config->domain = NULL;
-
- config_parent_class->finalize (object);
-}
-
-static void
-e_table_config_changed (ETableConfig *config, ETableState *state)
-{
- g_return_if_fail (E_IS_TABLE_CONFIG (config));
-
- g_signal_emit(G_OBJECT(config), e_table_config_signals [CHANGED], 0, state);
-}
-
-static void
-config_dialog_changed (ETableConfig *config)
-{
- /* enable the apply/ok buttons */
- gtk_dialog_set_response_sensitive (GTK_DIALOG (config->dialog_toplevel),
- GTK_RESPONSE_APPLY, TRUE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (config->dialog_toplevel),
- GTK_RESPONSE_OK, TRUE);
-}
-
-static void
-config_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ETableConfig *config = E_TABLE_CONFIG (object);
-
- switch (prop_id) {
- case PROP_STATE:
- g_value_set_object (value, config->state);
- break;
- default:
- break;
- }
-}
-
-static void
-config_class_init (GObjectClass *object_class)
-{
- ETableConfigClass *klass = E_TABLE_CONFIG_CLASS(object_class);
-
- config_parent_class = g_type_class_peek_parent (klass);
-
- klass->changed = NULL;
-
- object_class->finalize = config_finalize;
- object_class->get_property = config_get_property;
-
- e_table_config_signals [CHANGED] =
- g_signal_new ("changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableConfigClass, changed),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- g_object_class_install_property (object_class, PROP_STATE,
- g_param_spec_object ("state",
- _("State"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_STATE_TYPE,
- G_PARAM_READABLE));
-
- glade_init ();
-}
-
-static ETableColumnSpecification *
-find_column_in_spec (ETableSpecification *spec, int model_col)
-{
- ETableColumnSpecification **column;
-
- for (column = spec->columns; *column; column++){
- if ((*column)->disabled)
- continue;
- if ((*column)->model_col != model_col)
- continue;
-
- return *column;
- }
-
- return NULL;
-}
-
-static int
-find_model_column_by_name (ETableSpecification *spec, const char *s)
-{
- ETableColumnSpecification **column;
-
- for (column = spec->columns; *column; column++){
-
- if ((*column)->disabled)
- continue;
- if (g_strcasecmp ((*column)->title, s) == 0)
- return (*column)->model_col;
- }
- return -1;
-}
-
-static void
-update_sort_and_group_config_dialog (ETableConfig *config, gboolean is_sort)
-{
- ETableConfigSortWidgets *widgets;
- int count, i;
-
- if (is_sort){
- count = e_table_sort_info_sorting_get_count (
- config->temp_state->sort_info);
- widgets = &config->sort [0];
- } else {
- count = e_table_sort_info_grouping_get_count (
- config->temp_state->sort_info);
- widgets = &config->group [0];
- }
-
- for (i = 0; i < 4; i++){
- gboolean sensitive = (i <= count);
- char *text = "";
-
- gtk_widget_set_sensitive (widgets [i].frames, sensitive);
-
- /*
- * Sorting is set, auto select the text
- */
- g_signal_handler_block (
- widgets [i].radio_ascending,
- widgets [i].toggled_id);
- g_signal_handler_block (
- widgets [i].combo->entry,
- widgets [i].changed_id);
-
- if (i < count){
- GtkToggleButton *a, *d;
- ETableSortColumn col =
- is_sort
- ? e_table_sort_info_sorting_get_nth (
- config->temp_state->sort_info,
- i)
- : e_table_sort_info_grouping_get_nth (
- config->temp_state->sort_info,
- i);
-
- ETableColumnSpecification *column =
- find_column_in_spec (config->source_spec, col.column);
-
- if (!column){
- /*
- * This is a bug in the programmer
- * stuff, but by the time we arrive
- * here, the user has been given a
- * warning
- */
- continue;
- }
-
- text = dgettext (config->domain, column->title);
-
- /*
- * Update radio buttons
- */
- a = GTK_TOGGLE_BUTTON (
- widgets [i].radio_ascending);
- d = GTK_TOGGLE_BUTTON (
- widgets [i].radio_descending);
-
- gtk_toggle_button_set_active (col.ascending ? a:d, 1);
- } else {
- GtkToggleButton *t;
-
- t = GTK_TOGGLE_BUTTON (
- widgets [i].radio_ascending);
-
- if (is_sort)
- g_assert (widgets [i].radio_ascending != config->group [i].radio_ascending);
- else
- g_assert (widgets [i].radio_ascending != config->sort [i].radio_ascending);
- gtk_toggle_button_set_active (t, 1);
- }
-
- /* Set the text */
- gal_combo_text_set_text (widgets [i].combo, text);
-
- g_signal_handler_unblock (
- widgets [i].radio_ascending,
- widgets [i].toggled_id);
- g_signal_handler_unblock (
- widgets [i].combo->entry,
- widgets [i].changed_id);
- }
-}
-
-static void
-config_sort_info_update (ETableConfig *config)
-{
- ETableSortInfo *info = config->state->sort_info;
- GString *res;
- int count, i;
-
- count = e_table_sort_info_sorting_get_count (info);
- res = g_string_new ("");
-
- for (i = 0; i < count; i++) {
- ETableSortColumn col = e_table_sort_info_sorting_get_nth (info, i);
- ETableColumnSpecification *column;
-
- column = find_column_in_spec (config->source_spec, col.column);
- if (!column){
- g_warning ("Could not find column model in specification");
- continue;
- }
-
- g_string_append (res, dgettext (config->domain, (column)->title));
- g_string_append_c (res, ' ');
- g_string_append (
- res,
- col.ascending ?
- _("(Ascending)") : _("(Descending)"));
-
- if ((i + 1) != count)
- g_string_append (res, ", ");
- }
-
- if (res->str [0] == 0)
- g_string_append (res, _("Not sorted"));
-
- gtk_label_set_text (GTK_LABEL(config->sort_label), res->str);
-
- g_string_free (res, TRUE);
-}
-
-static void
-config_group_info_update (ETableConfig *config)
-{
- ETableSortInfo *info = config->state->sort_info;
- GString *res;
- int count, i;
-
- if (!e_table_sort_info_get_can_group (info))
- return;
-
- count = e_table_sort_info_grouping_get_count (info);
- res = g_string_new ("");
-
- for (i = 0; i < count; i++) {
- ETableSortColumn col = e_table_sort_info_grouping_get_nth (info, i);
- ETableColumnSpecification *column;
-
- column = find_column_in_spec (config->source_spec, col.column);
- if (!column){
- g_warning ("Could not find model column in specification");
- continue;
- }
-
- g_string_append (res, dgettext (config->domain, (column)->title));
- g_string_append_c (res, ' ');
- g_string_append (
- res,
- col.ascending ?
- _("(Ascending)") : _("(Descending)"));
-
- if ((i+1) != count)
- g_string_append (res, ", ");
- }
- if (res->str [0] == 0)
- g_string_append (res, _("No grouping"));
-
- gtk_label_set_text (GTK_LABEL (config->group_label), res->str);
- g_string_free (res, TRUE);
-}
-
-static void
-setup_fields (ETableConfig *config)
-{
- int i;
-
- e_table_model_freeze (config->available_model);
- e_table_model_freeze (config->shown_model);
- e_table_without_show_all (config->available_model);
- e_table_subset_variable_clear (config->shown_model);
-
- if (config->temp_state) {
- for (i = 0; i < config->temp_state->col_count; i++) {
- gint j, idx;
- for (j = 0, idx = 0; j < config->temp_state->columns[i]; j++)
- if (!config->source_spec->columns[j]->disabled)
- idx++;
-
- e_table_subset_variable_add (config->shown_model, idx);
- e_table_without_hide (config->available_model, GINT_TO_POINTER(idx));
- }
- }
- e_table_model_thaw (config->available_model);
- e_table_model_thaw (config->shown_model);
-}
-
-static void
-config_fields_info_update (ETableConfig *config)
-{
- ETableColumnSpecification **column;
- GString *res = g_string_new ("");
- int i;
-
- for (i = 0; i < config->state->col_count; i++){
- for (column = config->source_spec->columns; *column; column++){
-
- if ((*column)->disabled)
- continue;
-
- if (config->state->columns [i] != (*column)->model_col)
- continue;
-
- g_string_append (res, dgettext (config->domain, (*column)->title));
- if (column [1])
- g_string_append (res, ", ");
- }
- }
-
- gtk_label_set_text (GTK_LABEL (config->fields_label), res->str);
- g_string_free (res, TRUE);
-}
-
-static void
-do_sort_and_group_config_dialog (ETableConfig *config, gboolean is_sort)
-{
- GtkDialog *dialog;
- int response, running = 1;
-
- config->temp_state = e_table_state_duplicate (config->state);
-
- update_sort_and_group_config_dialog (config, is_sort);
-
- gtk_widget_grab_focus (GTK_WIDGET (
- is_sort
- ? config->sort [0].combo
- : config->group [0].combo));
-
-
- if (is_sort)
- dialog = GTK_DIALOG (config->dialog_sort);
- else
- dialog = GTK_DIALOG (config->dialog_group_by);
-
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (config->dialog_toplevel));
-
- do {
- response = gtk_dialog_run (dialog);
- switch (response){
- case 0: /* clear fields */
- if (is_sort){
- e_table_sort_info_sorting_truncate (
- config->temp_state->sort_info, 0);
- } else {
- e_table_sort_info_grouping_truncate (
- config->temp_state->sort_info, 0);
- }
- update_sort_and_group_config_dialog (config, is_sort);
- break;
-
- case GTK_RESPONSE_OK:
- g_object_unref (config->state);
- config->state = config->temp_state;
- config->temp_state = 0;
- running = 0;
- config_dialog_changed (config);
- break;
-
- case GTK_RESPONSE_DELETE_EVENT:
- case GTK_RESPONSE_CANCEL:
- g_object_unref (config->temp_state);
- config->temp_state = 0;
- running = 0;
- break;
- }
-
- } while (running);
- gtk_widget_hide (GTK_WIDGET (dialog));
-
- if (is_sort)
- config_sort_info_update (config);
- else
- config_group_info_update (config);
-}
-
-static void
-do_fields_config_dialog (ETableConfig *config)
-{
- int response, running = 1;
-
- gtk_widget_ensure_style (config->dialog_show_fields);
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (config->dialog_show_fields)->vbox), 0);
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (config->dialog_show_fields)->action_area), 12);
-
- config->temp_state = e_table_state_duplicate (config->state);
-
- setup_fields (config);
-
- gtk_window_set_transient_for (GTK_WINDOW (config->dialog_show_fields),
- GTK_WINDOW (config->dialog_toplevel));
-
- do {
- response = gtk_dialog_run (GTK_DIALOG(config->dialog_show_fields));
- switch (response){
- case GTK_RESPONSE_OK:
- g_object_unref (config->state);
- config->state = config->temp_state;
- config->temp_state = 0;
- running = 0;
- config_dialog_changed (config);
- break;
-
- case GTK_RESPONSE_DELETE_EVENT:
- case GTK_RESPONSE_CANCEL:
- g_object_unref (config->temp_state);
- config->temp_state = 0;
- running = 0;
- break;
- }
-
- } while (running);
- gtk_widget_hide (GTK_WIDGET (config->dialog_show_fields));
-
- config_fields_info_update (config);
-}
-
-
-ETableMemoryStoreColumnInfo store_columns[] = {
- E_TABLE_MEMORY_STORE_STRING,
- E_TABLE_MEMORY_STORE_INTEGER,
- E_TABLE_MEMORY_STORE_TERMINATOR
-};
-
-static ETableModel *global_store; /* Glade better not be reentrant any time soon. */
-
-static void
-create_global_store (ETableConfig *config)
-{
- int i;
-
- global_store = e_table_memory_store_new (store_columns);
- for (i = 0; config->source_spec->columns[i]; i++) {
-
- char *text;
-
- if (config->source_spec->columns[i]->disabled)
- continue;
-
- text = g_strdup (dgettext (config->domain, config->source_spec->columns[i]->title));
- e_table_memory_store_insert_adopt (E_TABLE_MEMORY_STORE (global_store), -1, NULL, text, i);
- }
-}
-
-char *spec = "<ETableSpecification gettext-domain=\"" E_I18N_DOMAIN "\" no-headers=\"true\" cursor-mode=\"line\" "
- " draw-grid=\"false\" draw-focus=\"true\" selection-mode=\"browse\">"
- "<ETableColumn model_col= \"0\" _title=\"Name\" minimum_width=\"30\" resizable=\"true\" cell=\"string\" compare=\"string\"/>"
- "<ETableState> <column source=\"0\"/>"
- "<grouping/>"
- "</ETableState>"
- "</ETableSpecification>";
-
-GtkWidget *e_table_proxy_etable_shown_new (void);
-
-GtkWidget *
-e_table_proxy_etable_shown_new (void)
-{
- ETableModel *model = NULL;
-
- model = e_table_subset_variable_new (global_store);
-
- return e_table_scrolled_new (model, NULL, spec, NULL);
-}
-
-GtkWidget *e_table_proxy_etable_available_new (void);
-
-GtkWidget *
-e_table_proxy_etable_available_new (void)
-{
- ETableModel *model;
-
- model = e_table_without_new (global_store,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-
- e_table_without_show_all (E_TABLE_WITHOUT (model));
-
- return e_table_scrolled_new (model, NULL, spec, NULL);
-}
-
-static void
-config_button_fields (GtkWidget *widget, ETableConfig *config)
-{
- do_fields_config_dialog (config);
-}
-
-static void
-config_button_sort (GtkWidget *widget, ETableConfig *config)
-{
- do_sort_and_group_config_dialog (config, TRUE);
-}
-
-static void
-config_button_group (GtkWidget *widget, ETableConfig *config)
-{
- do_sort_and_group_config_dialog (config, FALSE);
-}
-
-static void
-dialog_destroyed (gpointer data, GObject *where_object_was)
-{
- ETableConfig *config = data;
- g_object_unref (config);
-}
-
-static void
-dialog_response (GtkWidget *dialog, int response_id, ETableConfig *config)
-{
- if (response_id == GTK_RESPONSE_APPLY
- || response_id == GTK_RESPONSE_OK) {
- e_table_config_changed (config, config->state);
- }
-
- if (response_id == GTK_RESPONSE_CANCEL
- || response_id == GTK_RESPONSE_OK) {
- gtk_widget_destroy (dialog);
- }
-}
-
-/*
- * Invoked by the Glade auto-connect code
- */
-GtkWidget *e_table_proxy_gtk_combo_text_new (void);
-GtkWidget *
-e_table_proxy_gtk_combo_text_new (void)
-{
- return gal_combo_text_new (TRUE);
-}
-
-#if 0
-static GtkWidget *
-configure_dialog (GladeXML *gui, const char *widget_name, ETableConfig *config)
-{
- GtkWidget *w;
-
- w = glade_xml_get_widget (gui, widget_name);
-
- return w;
-}
-#endif
-
-static void
-connect_button (ETableConfig *config, GladeXML *gui, const char *widget_name, GCallback cback)
-{
- GtkWidget *button = glade_xml_get_widget (gui, widget_name);
-
- if (button) {
- g_signal_connect (G_OBJECT (button), "clicked",
- cback, config);
- }
-}
-
-static gint
-get_source_model_col_index (ETableConfig *config, gint idx)
-{
- gint visible_index;
- ETableModel *src_model = E_TABLE_SUBSET (config->available_model)->source;
-
- visible_index = e_table_subset_view_to_model_row (E_TABLE_SUBSET (config->available_model), idx);
-
- return GPOINTER_TO_INT (e_table_model_value_at (src_model, 1, visible_index));
-}
-
-static void
-sort_entry_changed (GtkEntry *entry, ETableConfigSortWidgets *sort)
-{
- ETableConfig *config = sort->e_table_config;
- ETableSortInfo *sort_info = config->temp_state->sort_info;
- ETableConfigSortWidgets *base = &config->sort[0];
- int idx = sort - base;
-
- const char *s = gtk_entry_get_text (entry);
-
- if (s && s [0] && g_hash_table_lookup (sort->combo->elements, s)){
- ETableSortColumn c;
- int col;
-
- col = find_model_column_by_name (config->source_spec, s);
- if (col == -1){
- g_warning ("sort: This should not happen (%s)", s);
- return;
- }
-
- c.ascending = GTK_TOGGLE_BUTTON (
- config->sort [idx].radio_ascending)->active;
- c.column = col;
- e_table_sort_info_sorting_set_nth (sort_info, idx, c);
-
- update_sort_and_group_config_dialog (config, TRUE);
- } else {
- e_table_sort_info_sorting_truncate (sort_info, idx);
- update_sort_and_group_config_dialog (config, TRUE);
- }
-}
-
-static void
-sort_ascending_toggled (GtkToggleButton *t, ETableConfigSortWidgets *sort)
-{
- ETableConfig *config = sort->e_table_config;
- ETableSortInfo *si = config->temp_state->sort_info;
- ETableConfigSortWidgets *base = &config->sort[0];
- int idx = sort - base;
- ETableSortColumn c;
-
- c = e_table_sort_info_sorting_get_nth (si, idx);
- c.ascending = t->active;
- e_table_sort_info_sorting_set_nth (si, idx, c);
-}
-
-static void
-configure_sort_dialog (ETableConfig *config, GladeXML *gui)
-{
- GSList *l;
- int i;
-
- for (i = 0; i < 4; i++){
- char buffer [80];
-
- snprintf (buffer, sizeof (buffer), "sort-combo-%d", i + 1);
- config->sort [i].combo = GAL_COMBO_TEXT (
- glade_xml_get_widget (gui, buffer));
- gtk_widget_show (GTK_WIDGET (config->sort [i].combo));
- gal_combo_text_add_item (config->sort [i].combo, "", "");
-
- snprintf (buffer, sizeof (buffer), "frame-sort-%d", i + 1);
- config->sort [i].frames =
- glade_xml_get_widget (gui, buffer);
-
- snprintf (
- buffer, sizeof (buffer),
- "radiobutton-ascending-sort-%d", i+1);
- config->sort [i].radio_ascending = glade_xml_get_widget (
- gui, buffer);
-
- snprintf (
- buffer, sizeof (buffer),
- "radiobutton-descending-sort-%d", i+1);
- config->sort [i].radio_descending = glade_xml_get_widget (
- gui, buffer);
-
- config->sort [i].e_table_config = config;
- }
-
- for (l = config->column_names; l; l = l->next){
- char *label = l->data;
-
- for (i = 0; i < 4; i++){
- gal_combo_text_add_item (config->sort [i].combo,
- dgettext (config->domain, label), label);
- }
- }
-
- /*
- * After we have runtime modified things, signal connect
- */
- for (i = 0; i < 4; i++){
- config->sort [i].changed_id = g_signal_connect (
- config->sort [i].combo->entry,
- "changed", G_CALLBACK (sort_entry_changed),
- &config->sort [i]);
-
- config->sort [i].toggled_id = g_signal_connect (
- config->sort [i].radio_ascending,
- "toggled", G_CALLBACK (sort_ascending_toggled),
- &config->sort [i]);
- }
-}
-
-static void
-group_entry_changed (GtkEntry *entry, ETableConfigSortWidgets *group)
-{
- ETableConfig *config = group->e_table_config;
- ETableSortInfo *sort_info = config->temp_state->sort_info;
- ETableConfigSortWidgets *base = &config->group[0];
- int idx = group - base;
- const char *s = gtk_entry_get_text (entry);
-
- if (s && s [0] && g_hash_table_lookup (group->combo->elements, s)){
- ETableSortColumn c;
- int col;
-
- col = find_model_column_by_name (config->source_spec, s);
- if (col == -1){
- g_warning ("grouping: this should not happen, %s", s);
- return;
- }
-
- c.ascending = GTK_TOGGLE_BUTTON (
- config->group [idx].radio_ascending)->active;
- c.column = col;
- e_table_sort_info_grouping_set_nth (sort_info, idx, c);
-
- update_sort_and_group_config_dialog (config, FALSE);
- } else {
- e_table_sort_info_grouping_truncate (sort_info, idx);
- update_sort_and_group_config_dialog (config, FALSE);
- }
-}
-
-static void
-group_ascending_toggled (GtkToggleButton *t, ETableConfigSortWidgets *group)
-{
- ETableConfig *config = group->e_table_config;
- ETableSortInfo *si = config->temp_state->sort_info;
- ETableConfigSortWidgets *base = &config->group[0];
- int idx = group - base;
- ETableSortColumn c;
-
- c = e_table_sort_info_grouping_get_nth (si, idx);
- c.ascending = t->active;
- e_table_sort_info_grouping_set_nth (si, idx, c);
-}
-
-static void
-configure_group_dialog (ETableConfig *config, GladeXML *gui)
-{
- GSList *l;
- int i;
-
- for (i = 0; i < 4; i++){
- char buffer [80];
-
- snprintf (buffer, sizeof (buffer), "group-combo-%d", i + 1);
- config->group [i].combo = GAL_COMBO_TEXT (
- glade_xml_get_widget (gui, buffer));
- gtk_widget_show (GTK_WIDGET (config->group [i].combo));
-
- gal_combo_text_add_item (config->group [i].combo, "", "");
-
- snprintf (buffer, sizeof (buffer), "frame-group-%d", i + 1);
- config->group [i].frames =
- glade_xml_get_widget (gui, buffer);
-
- snprintf (
- buffer, sizeof (buffer),
- "radiobutton-ascending-group-%d", i+1);
- config->group [i].radio_ascending = glade_xml_get_widget (
- gui, buffer);
-
- snprintf (
- buffer, sizeof (buffer),
- "radiobutton-descending-group-%d", i+1);
- config->group [i].radio_descending = glade_xml_get_widget (
- gui, buffer);
-
- snprintf (
- buffer, sizeof (buffer),
- "checkbutton-group-%d", i+1);
- config->group [i].view_check = glade_xml_get_widget (
- gui, buffer);
-
- config->group [i].e_table_config = config;
- }
-
-
- for (l = config->column_names; l; l = l->next){
- char *label = l->data;
-
- for (i = 0; i < 4; i++){
- gal_combo_text_add_item (
- config->group [i].combo,
- dgettext (config->domain, label), label);
- }
- }
-
- /*
- * After we have runtime modified things, signal connect
- */
- for (i = 0; i < 4; i++){
- config->group [i].changed_id = g_signal_connect (
- config->group [i].combo->entry,
- "changed", G_CALLBACK (group_entry_changed),
- &config->group [i]);
-
- config->group [i].toggled_id = g_signal_connect (
- config->group [i].radio_ascending,
- "toggled", G_CALLBACK (group_ascending_toggled),
- &config->group [i]);
- }
-}
-
-static void
-add_column (int model_row, gpointer closure)
-{
- GList **columns = closure;
- *columns = g_list_prepend (*columns, GINT_TO_POINTER (model_row));
-}
-
-static void
-config_button_add (GtkWidget *widget, ETableConfig *config)
-{
- GList *columns = NULL;
- GList *column;
- int count;
- int i;
-
- e_table_selected_row_foreach (config->available, add_column, &columns);
- columns = g_list_reverse (columns);
-
- count = g_list_length (columns);
-
- config->temp_state->columns = g_renew (int, config->temp_state->columns, config->temp_state->col_count + count);
- config->temp_state->expansions = g_renew (double, config->temp_state->expansions, config->temp_state->col_count + count);
- i = config->temp_state->col_count;
- for (column = columns; column; column = column->next) {
- config->temp_state->columns[i] = get_source_model_col_index (config, GPOINTER_TO_INT (column->data));
- config->temp_state->expansions[i] = config->source_spec->columns[config->temp_state->columns[i]]->expansion;
- i++;
- }
- config->temp_state->col_count += count;
-
- g_list_free (columns);
-
- setup_fields (config);
-}
-
-static void
-config_button_remove (GtkWidget *widget, ETableConfig *config)
-{
- GList *columns = NULL;
- GList *column;
-
- e_table_selected_row_foreach (config->shown, add_column, &columns);
-
- for (column = columns; column; column = column->next) {
- int row = GPOINTER_TO_INT (column->data);
-
- memmove (config->temp_state->columns + row, config->temp_state->columns + row + 1, sizeof (int) * (config->temp_state->col_count - row - 1));
- memmove (config->temp_state->expansions + row, config->temp_state->expansions + row + 1, sizeof (double) * (config->temp_state->col_count - row - 1));
- config->temp_state->col_count --;
- }
- config->temp_state->columns = g_renew (int, config->temp_state->columns, config->temp_state->col_count);
- config->temp_state->expansions = g_renew (double, config->temp_state->expansions, config->temp_state->col_count);
-
- g_list_free (columns);
-
- setup_fields (config);
-}
-
-static void
-config_button_up (GtkWidget *widget, ETableConfig *config)
-{
- GList *columns = NULL;
- GList *column;
- int *new_shown;
- double *new_expansions;
- int next_col;
- double next_expansion;
- int i;
-
- e_table_selected_row_foreach (config->shown, add_column, &columns);
- columns = g_list_reverse (columns);
-
- new_shown = g_new (int, config->temp_state->col_count);
- new_expansions = g_new (double, config->temp_state->col_count);
-
- column = columns;
-
- next_col = config->temp_state->columns[0];
- next_expansion = config->temp_state->expansions[0];
-
- for (i = 1; i < config->temp_state->col_count; i++) {
- if (column && (GPOINTER_TO_INT (column->data) == i)) {
- new_expansions[i - 1] = config->temp_state->expansions[i];
- new_shown[i - 1] = config->temp_state->columns[i];
- column = column->next;
- } else {
- new_shown[i - 1] = next_col;
- next_col = config->temp_state->columns[i];
-
- new_expansions[i - 1] = next_expansion;
- next_expansion = config->temp_state->expansions[i];
- }
- }
-
- new_shown[i - 1] = next_col;
- new_expansions[i - 1] = next_expansion;
-
- g_free (config->temp_state->columns);
- g_free (config->temp_state->expansions);
-
- config->temp_state->columns = new_shown;
- config->temp_state->expansions = new_expansions;
-
- g_list_free (columns);
-
- setup_fields (config);
-}
-
-static void
-config_button_down (GtkWidget *widget, ETableConfig *config)
-{
- GList *columns = NULL;
- GList *column;
- int *new_shown;
- double *new_expansions;
- int next_col;
- double next_expansion;
- int i;
-
- e_table_selected_row_foreach (config->shown, add_column, &columns);
-
- new_shown = g_new (int, config->temp_state->col_count);
- new_expansions = g_new (double, config->temp_state->col_count);
-
- column = columns;
-
- next_col = config->temp_state->columns[config->temp_state->col_count - 1];
- next_expansion = config->temp_state->expansions[config->temp_state->col_count - 1];
-
- for (i = config->temp_state->col_count - 1; i > 0; i--) {
- if (column && (GPOINTER_TO_INT (column->data) == i - 1)) {
- new_expansions[i] = config->temp_state->expansions[i - 1];
- new_shown[i] = config->temp_state->columns[i - 1];
- column = column->next;
- } else {
- new_shown[i] = next_col;
- next_col = config->temp_state->columns[i - 1];
-
- new_expansions[i] = next_expansion;
- next_expansion = config->temp_state->expansions[i - 1];
- }
- }
-
- new_shown[0] = next_col;
- new_expansions[0] = next_expansion;
-
- g_free (config->temp_state->columns);
- g_free (config->temp_state->expansions);
-
- config->temp_state->columns = new_shown;
- config->temp_state->expansions = new_expansions;
-
- g_list_free (columns);
-
- setup_fields (config);
-}
-
-static void
-configure_fields_dialog (ETableConfig *config, GladeXML *gui)
-{
- GtkWidget *scrolled;
-
- scrolled = glade_xml_get_widget (gui, "custom-available");
- config->available = e_table_scrolled_get_table (E_TABLE_SCROLLED (scrolled));
- g_object_get (config->available,
- "model", &config->available_model,
- NULL);
- gtk_widget_show_all (scrolled);
-
- scrolled = glade_xml_get_widget (gui, "custom-shown");
- config->shown = e_table_scrolled_get_table (E_TABLE_SCROLLED (scrolled));
- g_object_get (config->shown,
- "model", &config->shown_model,
- NULL);
- gtk_widget_show_all (scrolled);
-
- connect_button (config, gui, "button-add", G_CALLBACK (config_button_add));
- connect_button (config, gui, "button-remove", G_CALLBACK (config_button_remove));
- connect_button (config, gui, "button-up", G_CALLBACK (config_button_up));
- connect_button (config, gui, "button-down", G_CALLBACK (config_button_down));
-
- setup_fields (config);
-}
-
-static void
-setup_gui (ETableConfig *config)
-{
- GladeXML *gui;
-
- create_global_store (config);
-
- if (e_table_sort_info_get_can_group (config->state->sort_info)) {
- gui = glade_xml_new (ETABLE_GLADEDIR "/e-table-config.glade", NULL, E_I18N_DOMAIN);
- } else {
- gui = glade_xml_new (ETABLE_GLADEDIR "/e-table-config-no-group.glade", NULL, E_I18N_DOMAIN);
- }
-
- g_object_unref (global_store);
-
- config->dialog_toplevel = glade_xml_get_widget (
- gui, "e-table-config");
-
- if (config->header)
- gtk_window_set_title (GTK_WINDOW (config->dialog_toplevel), config->header);
-
- config->dialog_show_fields = glade_xml_get_widget (
- gui, "dialog-show-fields");
- config->dialog_group_by = glade_xml_get_widget (
- gui, "dialog-group-by");
- config->dialog_sort = glade_xml_get_widget (
- gui, "dialog-sort");
-
- config->sort_label = glade_xml_get_widget (
- gui, "label-sort");
- config->group_label = glade_xml_get_widget (
- gui, "label-group");
- config->fields_label = glade_xml_get_widget (
- gui, "label-fields");
-
- connect_button (config, gui, "button-sort", G_CALLBACK (config_button_sort));
- connect_button (config, gui, "button-group", G_CALLBACK (config_button_group));
- connect_button (config, gui, "button-fields", G_CALLBACK (config_button_fields));
-
- configure_sort_dialog (config, gui);
- configure_group_dialog (config, gui);
- configure_fields_dialog (config, gui);
-
- g_object_weak_ref (G_OBJECT (config->dialog_toplevel),
- dialog_destroyed, config);
-
- g_signal_connect (config->dialog_toplevel, "response",
- G_CALLBACK (dialog_response), config);
-
- g_object_unref (gui);
-}
-
-static void
-config_init (ETableConfig *config)
-{
- config->domain = NULL;
-}
-
-ETableConfig *
-e_table_config_construct (ETableConfig *config,
- const char *header,
- ETableSpecification *spec,
- ETableState *state,
- GtkWindow *parent_window)
-{
- ETableColumnSpecification **column;
-
- g_return_val_if_fail (config != NULL, NULL);
- g_return_val_if_fail (header != NULL, NULL);
- g_return_val_if_fail (spec != NULL, NULL);
- g_return_val_if_fail (state != NULL, NULL);
-
- config->source_spec = spec;
- config->source_state = state;
- config->header = g_strdup (header);
-
- g_object_ref (config->source_spec);
- g_object_ref (config->source_state);
-
- config->state = e_table_state_duplicate (state);
-
- config->domain = g_strdup (spec->domain);
-
- for (column = config->source_spec->columns; *column; column++){
- char *label = (*column)->title;
-
- if ((*column)->disabled)
- continue;
-
- config->column_names = g_slist_append (
- config->column_names, label);
- }
-
- setup_gui (config);
-
- gtk_window_set_transient_for (GTK_WINDOW (config->dialog_toplevel),
- parent_window);
-
- config_sort_info_update (config);
- config_group_info_update (config);
- config_fields_info_update (config);
-
- return E_TABLE_CONFIG (config);
-}
-
-/**
- * e_table_config_new:
- * @header: The title of the dialog for the ETableConfig.
- * @spec: The specification for the columns to allow.
- * @state: The current state of the configuration.
- *
- * Creates a new ETable config object.
- *
- * Returns: The config object.
- */
-ETableConfig *
-e_table_config_new (const char *header,
- ETableSpecification *spec,
- ETableState *state,
- GtkWindow *parent_window)
-{
- ETableConfig *config = g_object_new (E_TABLE_CONFIG_TYPE, NULL);
-
- if (e_table_config_construct (config, header, spec, state, parent_window) == NULL){
- g_object_unref (config);
- return NULL;
- }
-
- gtk_widget_ensure_style (config->dialog_toplevel);
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (config->dialog_toplevel)->vbox), 0);
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (config->dialog_toplevel)->action_area), 12);
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (config->dialog_toplevel),
- GTK_RESPONSE_APPLY, FALSE);
- gtk_widget_show (config->dialog_toplevel);
-
- return E_TABLE_CONFIG (config);
-}
-
-/**
- * e_table_config_raise:
- * @config: The ETableConfig object.
- *
- * Raises the dialog associated with this ETableConfig object.
- */
-void
-e_table_config_raise (ETableConfig *config)
-{
- gdk_window_raise (GTK_WIDGET (config->dialog_toplevel)->window);
-}
-
-E_MAKE_TYPE(e_table_config, "ETableConfig", ETableConfig, config_class_init, config_init, G_TYPE_OBJECT)
diff --git a/widgets/table/e-table-config.glade b/widgets/table/e-table-config.glade
deleted file mode 100644
index f721c7c8fb..0000000000
--- a/widgets/table/e-table-config.glade
+++ /dev/null
@@ -1,2181 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-<requires lib="gnome"/>
-
-<widget class="GtkDialog" id="dialog-show-fields">
- <property name="title" translatable="yes">Show Fields</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button22">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button20">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkTable" id="table2">
- <property name="visible">True</property>
- <property name="n_rows">1</property>
- <property name="n_columns">5</property>
- <property name="homogeneous">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label-available">
- <property name="visible">True</property>
- <property name="label" translatable="yes">A_vailable Fields:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-displayed">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Show these fields in order:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">3</property>
- <property name="right_attach">5</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table3">
- <property name="visible">True</property>
- <property name="n_rows">1</property>
- <property name="n_columns">5</property>
- <property name="homogeneous">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="Custom" id="custom-available">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_etable_available_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 21 Feb 2002 16:09:53 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="Custom" id="custom-shown">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_etable_shown_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 21 Feb 2002 16:09:58 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox4">
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button-up">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Move _Up</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-down">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Move _Down</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">3</property>
- <property name="right_attach">5</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button-add">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Add -&gt;</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-remove">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">&lt;- _Remove</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog-group-by">
- <property name="title" translatable="yes">Group</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox4">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area4">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button39">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Clear All</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button42">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button41">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox24">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox13">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkFrame" id="frame-group-1">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox5">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-1">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:09 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox8">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-1</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Group Items By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label11">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-group-2">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox9">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-2">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:14 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox10">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-2</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label19">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label18">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-group-3">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox11">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-3">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:18 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox12">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-3</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label20">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label17">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox16">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label14">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label16">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label15">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-group-4">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox8">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkVBox" id="vbox13">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="group-combo-4">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 19 Jan 2001 04:52:21 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="checkbutton-group-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Show field in View</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-group-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-group-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-group-4</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="dialog-sort">
- <property name="title" translatable="yes">Sort</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button43">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Clear All</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button45">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button44">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table5">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">1</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-4">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox9">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-4">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 08:33:52 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox17">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-4">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-4</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label22">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-3">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox10">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-3">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 05:22:22 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox19">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-3</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label23">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-2">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox11">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-2">
- <property name="visible">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 05:22:15 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox21">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-2</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label24">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Then By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame-sort-1">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox12">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="Custom" id="sort-combo-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="creation_function">e_table_proxy_gtk_combo_text_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 16 Jan 2001 05:22:00 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox23">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-ascending-sort-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Ascending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radiobutton-descending-sort-1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Descending</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton-ascending-sort-1</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label25">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sort Items By</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="e-table-config">
- <property name="title" translatable="yes">dialog1</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="modal">True</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area6">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="applybutton2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-apply</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-10</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="top-frame">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">3</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">2</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkButton" id="button-sort">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Sort...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_sort_clicked"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-group">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Group By...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_group_by_clicked"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-sort">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-fields">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Fields Shown...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_group_by_clicked"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-fields">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label22">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label-group">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label26">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Description</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/widgets/table/e-table-config.h b/widgets/table/e-table-config.h
deleted file mode 100644
index cad376b955..0000000000
--- a/widgets/table/e-table-config.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-config.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_CONFIG_H_
-#define _E_TABLE_CONFIG_H_
-
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-specification.h>
-#include <gal/widgets/gal-combo-text.h>
-#include <gal/e-table/e-table-without.h>
-#include <gal/e-table/e-table-subset-variable.h>
-#include <gal/e-table/e-table.h>
-#include <gtk/gtkwindow.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_CONFIG_TYPE (e_table_config_get_type ())
-#define E_TABLE_CONFIG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_CONFIG_TYPE, ETableConfig))
-#define E_TABLE_CONFIG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_CONFIG_TYPE, ETableConfigClass))
-#define E_IS_TABLE_CONFIG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_CONFIG_TYPE))
-#define E_IS_TABLE_CONFIG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_CONFIG_TYPE))
-#define E_TABLE_CONFIG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_CONFIG_TYPE, ETableConfigClass))
-
-typedef struct {
- GalComboText *combo;
- GtkWidget *frames;
- GtkWidget *radio_ascending;
- GtkWidget *radio_descending;
- GtkWidget *view_check; /* Only for group dialog */
- guint changed_id, toggled_id;
- void *e_table_config;
-} ETableConfigSortWidgets;
-
-
-typedef struct {
- GObject parent;
-
- char *header;
-
- /*
- * Our various dialog boxes
- */
- GtkWidget *dialog_toplevel;
- GtkWidget *dialog_show_fields;
- GtkWidget *dialog_group_by;
- GtkWidget *dialog_sort;
-
- /*
- * The state we manipulate
- */
- ETableSpecification *source_spec;
- ETableState *source_state, *state, *temp_state;
-
- GtkWidget *sort_label;
- GtkWidget *group_label;
- GtkWidget *fields_label;
-
- ETableConfigSortWidgets sort [4];
- ETableConfigSortWidgets group [4];
-
- ETable *available;
- ETableWithout *available_model;
- ETable *shown;
- ETableSubsetVariable *shown_model;
- char *domain;
-
- /*
- * List of valid column names
- */
- GSList *column_names;
-} ETableConfig;
-
-typedef struct {
- GObjectClass parent_class;
-
- /* Signals */
- void (*changed) (ETableConfig *config);
-} ETableConfigClass;
-
-GType e_table_config_get_type (void);
-ETableConfig *e_table_config_new (const char *header,
- ETableSpecification *spec,
- ETableState *state,
- GtkWindow *parent_window);
-ETableConfig *e_table_config_construct (ETableConfig *etco,
- const char *header,
- ETableSpecification *spec,
- ETableState *state,
- GtkWindow *parent_window);
-void e_table_config_raise (ETableConfig *config);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_CONFIG_H */
diff --git a/widgets/table/e-table-defines.h b/widgets/table/e-table-defines.h
deleted file mode 100644
index 34585789d4..0000000000
--- a/widgets/table/e-table-defines.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-defines.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_TABLE_DEFINES__
-#define __E_TABLE_DEFINES__ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define BUTTON_HEIGHT 10
-#define BUTTON_PADDING 2
-#define GROUP_INDENT (BUTTON_HEIGHT + (BUTTON_PADDING * 2))
-
-/* Padding around the contents of a header button */
-#define HEADER_PADDING 1
-
-#define MIN_ARROW_SIZE 10
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif
diff --git a/widgets/table/e-table-example-1.c b/widgets/table/e-table-example-1.c
deleted file mode 100644
index 37ac85770f..0000000000
--- a/widgets/table/e-table-example-1.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-example-1.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/* This code is GPL. */
-#include <stdio.h>
-#include <string.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "gal/e-util/e-cursors.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 "table-test.h"
-
-/*
- * One way in which we make it simpler to build an ETableModel is through
- * the ETableSimple class. Instead of creating your own ETableModel
- * class, you simply create a new object of the ETableSimple class. You
- * give it a bunch of functions that act as callbacks.
- *
- * You also get to pass a void * to ETableSimple and it gets passed to
- * your callbacks. This would be for having multiple models of the same
- * type. This is just an example though, so we statically define all the
- * data and ignore the void *data parameter.
- *
- * In our example we will be creating a table model with 6 columns and 10
- * rows. This corresponds to having 6 different types of information and
- * 10 different sets of data in our database.
- *
- * The headers will be hard coded, as will be the example data.
- *
- */
-
-/*
- * There are two different meanings to the word "column". The first is
- * the model column. A model column corresponds to a specific type of
- * data. This is very much like the usage in a database table where a
- * column is a field in the database.
- *
- * The second type of column is a view column. A view column
- * corresponds to a visually displayed column. Each view column
- * corresponds to a specific model column, though a model column may
- * have any number of view columns associated with it, from zero to
- * greater than one.
- *
- * Also, a view column doesn't necessarily depend on only one model
- * column. In some cases, the view column renderer can be given a
- * reference to another column to get extra information about its
- * display.
-*/
-
-#define ROWS 10
-#define COLS 4
-
-#define IMPORTANCE_COLUMN 4
-#define COLOR_COLUMN 5
-
-/*
- * 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 "<ETableSpecification> \
- <columns-shown> \
- <column> 0 </column> \
- <column> 4 </column> \
- <column> 1 </column> \
- <column> 2 </column> \
- <column> 3 </column> \
- </columns-shown> \
- <grouping> <leaf column=\"1\" ascending=\"true\"/> </grouping> \
-</ETableSpecification>"
-
-char *headers [COLS] = {
- "Email",
- "Full Name",
- "Address",
- "Phone"
-};
-
-/*
- * Virtual Column list:
- * 0 Email
- * 1 Full Name
- * 2 Address
- * 3 Phone
- */
-
-char *table_data [ROWS] [COLS];
-
-/*
- * ETableSimple callbacks
- * These are the callbacks that define the behavior of our custom model.
- */
-
-/*
- * Since our model is a constant size, we can just return its size in
- * the column and row count fields.
- */
-
-/* This function returns the number of columns in our ETableModel. */
-static int
-my_col_count (ETableModel *etc, void *data)
-{
- return COLS;
-}
-
-/* This function returns the number of rows in our ETableModel. */
-static int
-my_row_count (ETableModel *etc, void *data)
-{
- return ROWS;
-}
-
-/* This function returns the value at a particular point in our ETableModel. */
-static void *
-my_value_at (ETableModel *etc, int col, int row, void *data)
-{
- return (void *) table_data [row] [col];
-}
-
-/* This function sets the value at a particular point in our ETableModel. */
-static void
-my_set_value_at (ETableModel *etc, int col, int row, const void *val, void *data)
-{
- g_free (table_data [row] [col]);
- table_data [row] [col] = g_strdup (val);
-}
-
-/* This function returns whether a particular cell is editable. */
-static gboolean
-my_is_cell_editable (ETableModel *etc, int col, int row, void *data)
-{
- return TRUE;
-}
-
-/* This function duplicates the value passed to it. */
-static void *
-my_duplicate_value (ETableModel *etc, int col, const void *value, void *data)
-{
- return g_strdup (value);
-}
-
-/* This function frees the value passed to it. */
-static void
-my_free_value (ETableModel *etc, int col, void *value, void *data)
-{
- g_free (value);
-}
-
-/* This function creates an empty value. */
-static void *
-my_initialize_value (ETableModel *etc, int col, void *data)
-{
- return g_strdup ("");
-}
-
-/* This function reports if a value is empty. */
-static gboolean
-my_value_is_empty (ETableModel *etc, int col, const void *value, void *data)
-{
- return !(value && *(char *)value);
-}
-
-/* This function reports if a value is empty. */
-static char *
-my_value_to_string (ETableModel *etc, int col, const void *value, void *data)
-{
- return g_strdup(value);
-}
-
-/* We create a window containing our new table. */
-static void
-create_table (void)
-{
- GtkWidget *e_table, *window, *frame;
- ECell *cell_left_just;
- ETableHeader *e_table_header;
- int i, j;
- ETableModel *e_table_model = NULL;
-
- /* First we fill in the simple data. */
- for (i = 0; i < ROWS; i++){
- for (j = 0; j < COLS; j++)
- table_data [i] [j] = g_strdup ("");
- }
- /* Next we create our model. This uses the functions we defined
- earlier. */
- e_table_model = e_table_simple_new (
- my_col_count, my_row_count, my_value_at,
- my_set_value_at, my_is_cell_editable,
- my_duplicate_value, my_free_value,
- my_initialize_value, my_value_is_empty,
- my_value_to_string,
- NULL);
- /*
- * 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, 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 < COLS; i++) {
- /* Create the column. */
- ETableCol *ecol = e_table_col_new (
- i, headers [i],
- 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 a window for our new table. This window
- * will get shown and the person will be able to test their
- * item.
- */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- /* This frame is simply to get a bevel around our table. */
- frame = gtk_frame_new (NULL);
-
- /*
- * 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 (e_table_header, e_table_model, INITIAL_SPEC);
-
- /* Build the gtk widget hierarchy. */
- gtk_container_add (GTK_CONTAINER (frame), e_table);
- gtk_container_add (GTK_CONTAINER (window), frame);
-
- /* Size the initial window. */
- gtk_widget_set_usize (window, 200, 200);
-
- /* Show it all. */
- gtk_widget_show_all (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_table ();
-
- gtk_main ();
-
- e_cursors_shutdown ();
- return 0;
-}
-
diff --git a/widgets/table/e-table-example-2.c b/widgets/table/e-table-example-2.c
deleted file mode 100644
index 2321e4e7dd..0000000000
--- a/widgets/table/e-table-example-2.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-example-2.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "gal/e-util/e-cursors.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 "table-test.h"
-
-/*
-One way in which we make it simpler to build an ETableModel is through
-the ETableSimple class. Instead of creating your own ETableModel
-class, you simply create a new object of the ETableSimple class. You
-give it a bunch of functions that act as callbacks.
-
-You also get to pass a void * to ETableSimple and it gets passed to
-your callbacks. This would be for having multiple models of the same
-type. This is just an example though, so we statically define all the
-data and ignore the void *data parameter.
-
-In our example we will be creating a table model with 6 columns and 10
-rows. This corresponds to having 6 different types of information and
-10 different sets of data in our database.
-
-The headers will be hard coded, as will be the example data.
-
-*/
-
-/*
- There are two different meanings to the word "column". The first is
- the model column. A model column corresponds to a specific type of
- data. This is very much like the usage in a database table where a
- column is a field in the database.
-
- The second type of column is a view column. A view column
- corresponds to a visually displayed column. Each view column
- corresponds to a specific model column, though a model column may
- have any number of view columns associated with it, from zero to
- greater than one.
-
- Also, a view column doesn't necessarily depend on only one model
- column. In some cases, the view column renderer can be given a
- reference to another column to get extra information about its
- display.
-*/
-
-#define ROWS 10
-#define VIEW_COLS 4
-#define PHYSICAL_COLS 5
-#define VIRTUAL_COLS 6
-
-#define IMPORTANCE_COLUMN 4
-#define COLOR_COLUMN 5
-
-/* 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 "<ETableSpecification> \
- <columns-shown> \
- <column> 0 </column> \
- <column> 4 </column> \
- <column> 1 </column> \
- <column> 2 </column> \
- <column> 3 </column> \
- </columns-shown> \
- <grouping> <leaf column=\"1\" ascending=\"true\"/> </grouping> \
-</ETableSpecification>"
-
-char *headers[VIEW_COLS] = {
- "Email",
- "Full Name",
- "Address",
- "Phone"
-};
-
-/* Virtual Column list:
- 0 Full Name
- 1 Email
- 2 Address
- 3 Phone
- 4 Importance field. This field will be a boolean. It also has a
- special header, so doesn't appear in the headers list.
- 5 Color field. This column is also not displayed. It is also
- not stored in the database. It's calculated based on the
- Importance field.
-*/
-
-char *table_data[ROWS][VIEW_COLS];
-gboolean importance_data[ROWS];
-
-/*
- * ETableSimple callbacks
- * These are the callbacks that define the behavior of our custom model.
- */
-
-/* Since our model is a constant size, we can just return its size in
- the column and row count fields. */
-
-static GdkColor *color1;
-static GdkColor *color2;
-
-static int
-my_col_count (ETableModel *etc, void *data)
-{
- return VIRTUAL_COLS;
-}
-
-static int
-my_row_count (ETableModel *etc, void *data)
-{
- return ROWS;
-}
-
-static void *
-my_value_at (ETableModel *etc, int col, int row, void *data)
-{
- if (col == COLOR_COLUMN){
- if (importance_data[row]){
- return color1;
- } else {
- return color2;
- }
- } else if (col == IMPORTANCE_COLUMN){
- return (gpointer) importance_data[row];
- } else {
- return (void *) table_data [row][col];
- }
-}
-
-static void
-my_set_value_at (ETableModel *etc, int col, int row, const void *val, void *data)
-{
- if (col == COLOR_COLUMN){
- } else if (col == IMPORTANCE_COLUMN){
- importance_data[row] = (gboolean) val;
- } else {
- g_free (table_data [row][col]);
- table_data [row][col] = g_strdup (val);
- }
-}
-
-static gboolean
-my_is_cell_editable (ETableModel *etc, int col, int row, void *data)
-{
- if (col == IMPORTANCE_COLUMN)
- return FALSE;
- else
- return TRUE;
-}
-
-static void *
-my_duplicate_value (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == COLOR_COLUMN){
- return (void *) value;
- } else if (col == IMPORTANCE_COLUMN){
- return (void *) value;
- } else {
- return g_strdup (value);
- }
-}
-
-static void
-my_free_value (ETableModel *etc, int col, void *value, void *data)
-{
- if (col == COLOR_COLUMN){
- } else if (col == IMPORTANCE_COLUMN){
- } else {
- g_free (value);
- }
-}
-
-static void *
-my_initialize_value (ETableModel *etc, int col, void *data)
-{
- if (col == COLOR_COLUMN){
- return NULL;
- } else if (col == IMPORTANCE_COLUMN){
- return NULL;
- } else {
- return g_strdup ("");
- }
-}
-
-static gboolean
-my_value_is_empty (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == COLOR_COLUMN){
- return value == NULL;
- } else if (col == IMPORTANCE_COLUMN){
- return value == NULL;
- } else {
- return !(value && *(char *)value);
- }
-}
-
-static char *
-my_value_to_string (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == COLOR_COLUMN){
- return g_strdup_printf("%d", (int) value);
- } else if (col == IMPORTANCE_COLUMN){
- return g_strdup_printf("%d", (int) value);
- } else {
- return g_strdup(value);
- }
-}
-
-/* We create a window containing our new table. */
-static void
-create_table ()
-{
- GtkWidget *e_table, *window, *frame;
- ECell *cell_left_just;
- ECell *cell_checkbox;
- ETableHeader *e_table_header;
- int i, j;
- ETableModel *e_table_model = NULL;
- ETableCol *ecol;
- GdkPixbuf *pixbuf;
-
- /* First we fill in the simple data. */
- for (i = 0; i < ROWS; i++){
- for (j = 0; j < VIEW_COLS; j++){
- table_data[i][j] = g_strdup ("");
- }
- importance_data[i] = FALSE;
- }
- /* Next we create our model. This uses the functions we defined
- earlier. */
- e_table_model = e_table_simple_new (
- my_col_count, my_row_count, my_value_at,
- my_set_value_at, my_is_cell_editable,
- my_duplicate_value, my_free_value,
- my_initialize_value, my_value_is_empty,
- my_value_to_string,
- NULL);
- /*
- 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, 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 < VIEW_COLS; i++){
- /* Create the column. */
- ETableCol *ecol = e_table_col_new (
- i, headers [i],
- 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);
- }
-
- /* Next we add a special column for the check box. */
-
- cell_checkbox = e_cell_checkbox_new ();
- pixbuf = gdk_pixbuf_new_from_file ("clip.png");
- ecol = e_table_col_new_with_pixbuf (i, pixbuf, 0.0, 18, cell_checkbox, g_int_compare, TRUE);
- e_table_header_add_column (e_table_header, ecol, i);
-
- /*
- * Setup GUI
- */
- /* Here we create a window for our new table. This window
- will get shown and the person will be able to test their
- item. */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- /* This frame is simply to get a bevel around our table. */
- frame = gtk_frame_new (NULL);
- /* 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 (e_table_header, e_table_model, INITIAL_SPEC);
-
- /* Build the gtk widget hierarchy. */
- gtk_container_add (GTK_CONTAINER (frame), e_table);
- gtk_container_add (GTK_CONTAINER (window), frame);
-
- /* Size the initial window. */
- gtk_widget_set_usize (window, 200, 200);
- /* Show it all. */
- gtk_widget_show_all (window);
-}
-
-
-
-int
-main (int argc, char *argv [])
-{
- gnome_init ("TableExample", "TableExample", argc, argv);
- e_cursors_init ();
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
- create_table ();
-
- gtk_main ();
-
- e_cursors_shutdown ();
- return 0;
-}
diff --git a/widgets/table/e-table-extras.c b/widgets/table/e-table-extras.c
deleted file mode 100644
index 81947a6e94..0000000000
--- a/widgets/table/e-table-extras.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-extras.c - Set of hash table sort of thingies.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <gtk/gtksignal.h>
-#include "gal/util/e-util.h"
-#include "gal/e-table/e-cell-text.h"
-#include "gal/e-table/e-cell-checkbox.h"
-#include "gal/e-table/e-cell-date.h"
-#include "gal/e-table/e-cell-number.h"
-#include "gal/e-table/e-cell-pixbuf.h"
-#include "gal/e-table/e-cell-size.h"
-#include "gal/e-table/e-cell-tree.h"
-#include "e-table-extras.h"
-#include <string.h>
-
-static GObjectClass *ete_parent_class;
-
-static void
-cell_hash_free(gchar *key,
- ECell *cell,
- gpointer user_data)
-{
- g_free(key);
- if (cell)
- g_object_unref(cell);
-}
-
-static void
-pixbuf_hash_free(gchar *key,
- GdkPixbuf *pixbuf,
- gpointer user_data)
-{
- g_free(key);
- if (pixbuf)
- gdk_pixbuf_unref(pixbuf);
-}
-
-static void
-ete_finalize (GObject *object)
-{
- ETableExtras *ete = E_TABLE_EXTRAS (object);
-
- if (ete->cells) {
- g_hash_table_foreach (ete->cells, (GHFunc) cell_hash_free, NULL);
- g_hash_table_destroy (ete->cells);
- }
-
- if (ete->compares) {
- g_hash_table_foreach (ete->compares, (GHFunc) g_free, NULL);
- g_hash_table_destroy (ete->compares);
- }
-
- if (ete->searches) {
- g_hash_table_foreach (ete->searches, (GHFunc) g_free, NULL);
- g_hash_table_destroy (ete->searches);
- }
-
- if (ete->pixbufs) {
- g_hash_table_foreach (ete->pixbufs, (GHFunc) pixbuf_hash_free, NULL);
- g_hash_table_destroy (ete->pixbufs);
- }
-
- ete->cells = NULL;
- ete->compares = NULL;
- ete->searches = NULL;
- ete->pixbufs = NULL;
-
- ete_parent_class->finalize (object);
-}
-
-static void
-ete_class_init (GObjectClass *klass)
-{
- ete_parent_class = g_type_class_peek_parent (klass);
-
- klass->finalize = ete_finalize;
-}
-
-static gint
-e_strint_compare(gconstpointer data1, gconstpointer data2)
-{
- int int1 = atoi(data1);
- int int2 = atoi(data2);
-
- return g_int_compare(GINT_TO_POINTER(int1), GINT_TO_POINTER(int2));
-}
-
-/* UTF-8 strncasecmp - not optimized */
-
-static gint
-g_utf8_strncasecmp (const gchar *s1,
- const gchar *s2,
- guint n)
-{
- gunichar c1, c2;
-
- g_return_val_if_fail (s1 != NULL && g_utf8_validate (s1, -1, NULL), 0);
- g_return_val_if_fail (s2 != NULL && g_utf8_validate (s2, -1, NULL), 0);
-
- while (n && *s1 && *s2)
- {
-
- n -= 1;
-
- c1 = g_unichar_tolower (g_utf8_get_char (s1));
- c2 = g_unichar_tolower (g_utf8_get_char (s2));
-
- /* Collation is locale-dependent, so this totally fails to do the right thing. */
- if (c1 != c2)
- return c1 < c2 ? -1 : 1;
-
- s1 = g_utf8_next_char (s1);
- s2 = g_utf8_next_char (s2);
- }
-
- if (n == 0 || (*s1 == '\0' && *s2 == '\0'))
- return 0;
-
- return *s1 ? 1 : -1;
-}
-
-static gboolean
-e_string_search(gconstpointer haystack, const char *needle)
-{
- int length;
- if (haystack == NULL)
- return FALSE;
-
- length = g_utf8_strlen (needle, -1);
- if (g_utf8_strncasecmp (haystack, needle, length) == 0)
- return TRUE;
- else
- return FALSE;
-}
-
-static void
-ete_init (ETableExtras *extras)
-{
- extras->cells = g_hash_table_new(g_str_hash, g_str_equal);
- extras->compares = g_hash_table_new(g_str_hash, g_str_equal);
- extras->searches = g_hash_table_new(g_str_hash, g_str_equal);
- extras->pixbufs = g_hash_table_new(g_str_hash, g_str_equal);
-
- e_table_extras_add_compare(extras, "string", g_str_compare);
- e_table_extras_add_compare(extras, "collate", g_collate_compare);
- e_table_extras_add_compare(extras, "integer", g_int_compare);
- e_table_extras_add_compare(extras, "string-integer", e_strint_compare);
-
- e_table_extras_add_search(extras, "string", e_string_search);
-
- e_table_extras_add_cell(extras, "checkbox", e_cell_checkbox_new());
- e_table_extras_add_cell(extras, "date", e_cell_date_new (NULL, GTK_JUSTIFY_LEFT));
- e_table_extras_add_cell(extras, "number", e_cell_number_new (NULL, GTK_JUSTIFY_RIGHT));
- e_table_extras_add_cell(extras, "pixbuf", e_cell_pixbuf_new ());
- e_table_extras_add_cell(extras, "size", e_cell_size_new (NULL, GTK_JUSTIFY_RIGHT));
- e_table_extras_add_cell(extras, "string", e_cell_text_new (NULL, GTK_JUSTIFY_LEFT));
- e_table_extras_add_cell(extras, "tree-string", e_cell_tree_new (NULL, NULL, TRUE, e_cell_text_new (NULL, GTK_JUSTIFY_LEFT)));
-}
-
-E_MAKE_TYPE(e_table_extras, "ETableExtras", ETableExtras, ete_class_init, ete_init, G_TYPE_OBJECT)
-
-ETableExtras *
-e_table_extras_new (void)
-{
- ETableExtras *ete = g_object_new (E_TABLE_EXTRAS_TYPE, NULL);
-
- return (ETableExtras *) ete;
-}
-
-void
-e_table_extras_add_cell (ETableExtras *extras,
- char *id,
- ECell *cell)
-{
- gchar *old_key;
- ECell *old_cell;
-
- if (g_hash_table_lookup_extended (extras->cells, id, (gpointer *)&old_key, (gpointer *)&old_cell)) {
- g_hash_table_remove (extras->cells, old_key);
- g_free (old_key);
- if (old_cell)
- g_object_unref (old_cell);
- }
-
- if (cell) {
- g_object_ref (cell);
- gtk_object_sink (GTK_OBJECT (cell));
- }
- g_hash_table_insert (extras->cells, g_strdup(id), cell);
-}
-
-ECell *
-e_table_extras_get_cell (ETableExtras *extras,
- char *id)
-{
- return g_hash_table_lookup(extras->cells, id);
-}
-
-void
-e_table_extras_add_compare (ETableExtras *extras,
- char *id,
- GCompareFunc compare)
-{
- gchar *old_key;
- GCompareFunc old_compare;
-
- if (g_hash_table_lookup_extended (extras->compares, id, (gpointer *)&old_key, (gpointer *)&old_compare)) {
- g_hash_table_remove (extras->compares, old_key);
- g_free (old_key);
- }
-
- g_hash_table_insert(extras->compares, g_strdup(id), (gpointer) compare);
-}
-
-GCompareFunc
-e_table_extras_get_compare (ETableExtras *extras,
- char *id)
-{
- return (GCompareFunc) g_hash_table_lookup(extras->compares, id);
-}
-
-void
-e_table_extras_add_search (ETableExtras *extras,
- char *id,
- ETableSearchFunc search)
-{
- gchar *old_key;
- ETableSearchFunc old_search;
-
- if (g_hash_table_lookup_extended (extras->searches, id, (gpointer *)&old_key, (gpointer *)&old_search)) {
- g_hash_table_remove (extras->searches, old_key);
- g_free (old_key);
- }
-
- g_hash_table_insert(extras->searches, g_strdup(id), search);
-}
-
-ETableSearchFunc
-e_table_extras_get_search (ETableExtras *extras,
- char *id)
-{
- return g_hash_table_lookup(extras->searches, id);
-}
-
-void
-e_table_extras_add_pixbuf (ETableExtras *extras,
- char *id,
- GdkPixbuf *pixbuf)
-{
- gchar *old_key;
- GdkPixbuf *old_pixbuf;
-
- if (g_hash_table_lookup_extended (extras->pixbufs, id, (gpointer *)&old_key, (gpointer *)&old_pixbuf)) {
- g_hash_table_remove (extras->cells, old_key);
- g_free (old_key);
- if (old_pixbuf)
- gdk_pixbuf_unref (old_pixbuf);
- }
-
- if (pixbuf)
- gdk_pixbuf_ref(pixbuf);
- g_hash_table_insert (extras->pixbufs, g_strdup(id), pixbuf);
-}
-
-GdkPixbuf *
-e_table_extras_get_pixbuf (ETableExtras *extras,
- char *id)
-{
- return g_hash_table_lookup(extras->pixbufs, id);
-}
diff --git a/widgets/table/e-table-extras.h b/widgets/table/e-table-extras.h
deleted file mode 100644
index bd478e0bd8..0000000000
--- a/widgets/table/e-table-extras.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-extras.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_EXTRAS_H_
-#define _E_TABLE_EXTRAS_H_
-
-#include <glib-object.h>
-#include <gal/e-table/e-cell.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_EXTRAS_TYPE (e_table_extras_get_type ())
-#define E_TABLE_EXTRAS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_EXTRAS_TYPE, ETableExtras))
-#define E_TABLE_EXTRAS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_EXTRAS_TYPE, ETableExtrasClass))
-#define E_IS_TABLE_EXTRAS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_EXTRAS_TYPE))
-#define E_IS_TABLE_EXTRAS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_EXTRAS_TYPE))
-#define E_TABLE_EXTRAS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_TABLE_EXTRAS_TYPE, ETableExtrasClass))
-
-typedef struct {
- GObject base;
-
- GHashTable *cells;
- GHashTable *compares;
- GHashTable *pixbufs;
- GHashTable *searches;
-} ETableExtras;
-
-typedef struct {
- GObjectClass parent_class;
-} ETableExtrasClass;
-
-GType e_table_extras_get_type (void);
-ETableExtras *e_table_extras_new (void);
-
-void e_table_extras_add_cell (ETableExtras *extras,
- char *id,
- ECell *cell);
-ECell *e_table_extras_get_cell (ETableExtras *extras,
- char *id);
-
-void e_table_extras_add_compare (ETableExtras *extras,
- char *id,
- GCompareFunc compare);
-GCompareFunc e_table_extras_get_compare (ETableExtras *extras,
- char *id);
-
-void e_table_extras_add_search (ETableExtras *extras,
- char *id,
- ETableSearchFunc search);
-ETableSearchFunc e_table_extras_get_search (ETableExtras *extras,
- char *id);
-
-void e_table_extras_add_pixbuf (ETableExtras *extras,
- char *id,
- GdkPixbuf *pixbuf);
-GdkPixbuf *e_table_extras_get_pixbuf (ETableExtras *extras,
- char *id);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_EXTRAS_H_ */
diff --git a/widgets/table/e-table-field-chooser-dialog.c b/widgets/table/e-table-field-chooser-dialog.c
deleted file mode 100644
index d7e725fd12..0000000000
--- a/widgets/table/e-table-field-chooser-dialog.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-field-chooser-dialog.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-field-chooser-dialog.h"
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-#include <gtk/gtkstock.h>
-
-static void e_table_field_chooser_dialog_init (ETableFieldChooserDialog *card);
-static void e_table_field_chooser_dialog_class_init (ETableFieldChooserDialogClass *klass);
-static void e_table_field_chooser_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void e_table_field_chooser_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
-static void e_table_field_chooser_dialog_dispose (GObject *object);
-static void e_table_field_chooser_dialog_response (GtkDialog *dialog, gint id);
-
-#define PARENT_TYPE GTK_TYPE_DIALOG
-static GtkDialogClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_DND_CODE,
- PROP_FULL_HEADER,
- PROP_HEADER
-};
-
-E_MAKE_TYPE (e_table_field_chooser_dialog,
- "ETableFieldChooserDialog",
- ETableFieldChooserDialog,
- e_table_field_chooser_dialog_class_init,
- e_table_field_chooser_dialog_init,
- PARENT_TYPE);
-
-static void
-e_table_field_chooser_dialog_class_init (ETableFieldChooserDialogClass *klass)
-{
- GObjectClass *object_class;
- GtkDialogClass *dialog_class;
-
- object_class = (GObjectClass*) klass;
- dialog_class = GTK_DIALOG_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = e_table_field_chooser_dialog_dispose;
- object_class->set_property = e_table_field_chooser_dialog_set_property;
- object_class->get_property = e_table_field_chooser_dialog_get_property;
-
- dialog_class->response = e_table_field_chooser_dialog_response;
-
- g_object_class_install_property (object_class, PROP_DND_CODE,
- g_param_spec_string ("dnd_code",
- _("DnD code"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FULL_HEADER,
- g_param_spec_object ("full_header",
- _("Full Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_HEADER,
- g_param_spec_object ("header",
- _("Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-}
-
-static void
-e_table_field_chooser_dialog_init (ETableFieldChooserDialog *e_table_field_chooser_dialog)
-{
- GtkWidget *widget;
-
- e_table_field_chooser_dialog->etfc = NULL;
- e_table_field_chooser_dialog->dnd_code = g_strdup("");
- e_table_field_chooser_dialog->full_header = NULL;
- e_table_field_chooser_dialog->header = NULL;
-
- gtk_dialog_add_button(GTK_DIALOG(e_table_field_chooser_dialog),
- GTK_STOCK_CLOSE, GTK_RESPONSE_OK);
-
- gtk_window_set_policy(GTK_WINDOW(e_table_field_chooser_dialog), FALSE, TRUE, FALSE);
-
- widget = e_table_field_chooser_new();
- e_table_field_chooser_dialog->etfc = E_TABLE_FIELD_CHOOSER(widget);
-
- g_object_set(widget,
- "dnd_code", e_table_field_chooser_dialog->dnd_code,
- "full_header", e_table_field_chooser_dialog->full_header,
- "header", e_table_field_chooser_dialog->header,
- NULL);
-
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(e_table_field_chooser_dialog)->vbox),
- widget, TRUE, TRUE, 0);
-
- gtk_widget_show(GTK_WIDGET(widget));
-
- gtk_window_set_title (GTK_WINDOW (e_table_field_chooser_dialog), _("Add a column..."));
-}
-
-GtkWidget*
-e_table_field_chooser_dialog_new (void)
-{
- GtkWidget *widget = g_object_new (E_TABLE_FIELD_CHOOSER_DIALOG_TYPE, NULL);
- return widget;
-}
-
-static void
-e_table_field_chooser_dialog_dispose (GObject *object)
-{
- ETableFieldChooserDialog *etfcd = E_TABLE_FIELD_CHOOSER_DIALOG (object);
-
- if (etfcd->dnd_code)
- g_free (etfcd->dnd_code);
- etfcd->dnd_code = NULL;
-
- if (etfcd->full_header)
- g_object_unref (etfcd->full_header);
- etfcd->full_header = NULL;
-
- if (etfcd->header)
- g_object_unref (etfcd->header);
- etfcd->header = NULL;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-e_table_field_chooser_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ETableFieldChooserDialog *etfcd = E_TABLE_FIELD_CHOOSER_DIALOG(object);
- switch (prop_id){
- case PROP_DND_CODE:
- g_free(etfcd->dnd_code);
- etfcd->dnd_code = g_strdup(g_value_get_string (value));
- if (etfcd->etfc)
- g_object_set(etfcd->etfc,
- "dnd_code", etfcd->dnd_code,
- NULL);
- break;
- case PROP_FULL_HEADER:
- if (etfcd->full_header)
- g_object_unref (etfcd->full_header);
- if (g_value_get_object (value))
- etfcd->full_header = E_TABLE_HEADER(g_value_get_object (value));
- else
- etfcd->full_header = NULL;
- if (etfcd->full_header)
- g_object_ref (etfcd->full_header);
- if (etfcd->etfc)
- g_object_set(etfcd->etfc,
- "full_header", etfcd->full_header,
- NULL);
- break;
- case PROP_HEADER:
- if (etfcd->header)
- g_object_unref (etfcd->header);
- if (g_value_get_object (value))
- etfcd->header = E_TABLE_HEADER(g_value_get_object (value));
- else
- etfcd->header = NULL;
- if (etfcd->header)
- g_object_ref (etfcd->header);
- if (etfcd->etfc)
- g_object_set(etfcd->etfc,
- "header", etfcd->header,
- NULL);
- break;
- default:
- break;
- }
-}
-
-static void
-e_table_field_chooser_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableFieldChooserDialog *etfcd = E_TABLE_FIELD_CHOOSER_DIALOG(object);
- switch (prop_id) {
- case PROP_DND_CODE:
- g_value_set_string (value, g_strdup (etfcd->dnd_code));
- break;
- case PROP_FULL_HEADER:
- g_value_set_object (value, etfcd->full_header);
- break;
- case PROP_HEADER:
- g_value_set_object (value, etfcd->header);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-e_table_field_chooser_dialog_response (GtkDialog *dialog, int id)
-{
- if (id == GTK_RESPONSE_OK)
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
diff --git a/widgets/table/e-table-field-chooser-dialog.h b/widgets/table/e-table-field-chooser-dialog.h
deleted file mode 100644
index 83fd5d3738..0000000000
--- a/widgets/table/e-table-field-chooser-dialog.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-field-chooser-dialog.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_TABLE_FIELD_CHOOSER_DIALOG_H__
-#define __E_TABLE_FIELD_CHOOSER_DIALOG_H__
-
-#include <gtk/gtkdialog.h>
-#include <gal/e-table/e-table-field-chooser.h>
-#include <gal/e-table/e-table-header.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* ETableFieldChooserDialog - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name type read/write description
- * --------------------------------------------------------------------------------
- */
-
-#define E_TABLE_FIELD_CHOOSER_DIALOG_TYPE (e_table_field_chooser_dialog_get_type ())
-#define E_TABLE_FIELD_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TABLE_FIELD_CHOOSER_DIALOG_TYPE, ETableFieldChooserDialog))
-#define E_TABLE_FIELD_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TABLE_FIELD_CHOOSER_DIALOG_TYPE, ETableFieldChooserDialogClass))
-#define E_IS_TABLE_FIELD_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TABLE_FIELD_CHOOSER_DIALOG_TYPE))
-#define E_IS_TABLE_FIELD_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TABLE_FIELD_CHOOSER_DIALOG_TYPE))
-
-
-typedef struct _ETableFieldChooserDialog ETableFieldChooserDialog;
-typedef struct _ETableFieldChooserDialogClass ETableFieldChooserDialogClass;
-
-struct _ETableFieldChooserDialog
-{
- GtkDialog parent;
-
- /* item specific fields */
- ETableFieldChooser *etfc;
- gchar *dnd_code;
- ETableHeader *full_header;
- ETableHeader *header;
-};
-
-struct _ETableFieldChooserDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-
-GtkWidget *e_table_field_chooser_dialog_new(void);
-GType e_table_field_chooser_dialog_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_TABLE_FIELD_CHOOSER_DIALOG_H__ */
diff --git a/widgets/table/e-table-field-chooser-item.c b/widgets/table/e-table-field-chooser-item.c
deleted file mode 100644
index cfc73fc102..0000000000
--- a/widgets/table/e-table-field-chooser-item.c
+++ /dev/null
@@ -1,711 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-field-chooser-item.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkdnd.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <libgnomecanvas/gnome-canvas-util.h>
-#include <libgnomecanvas/gnome-canvas-polygon.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include "gal/widgets/e-canvas.h"
-
-#include "e-table-header.h"
-#include "e-table-col-dnd.h"
-#include "e-table-defines.h"
-#include "e-table-header-utils.h"
-
-#include "e-table-field-chooser-item.h"
-
-#define d(x)
-
-#if 0
-enum {
- BUTTON_PRESSED,
- LAST_SIGNAL
-};
-
-static guint etfci_signals [LAST_SIGNAL] = { 0, };
-#endif
-
-#define PARENT_OBJECT_TYPE gnome_canvas_item_get_type ()
-
-#define ELEMENTS(x) (sizeof (x) / sizeof (x[0]))
-
-static GnomeCanvasItemClass *etfci_parent_class;
-
-static void etfci_drop_table_header (ETableFieldChooserItem *etfci);
-static void etfci_drop_full_header (ETableFieldChooserItem *etfci);
-
-enum {
- PROP_0,
- PROP_FULL_HEADER,
- PROP_HEADER,
- PROP_DND_CODE,
- PROP_WIDTH,
- PROP_HEIGHT
-};
-
-static void
-etfci_dispose (GObject *object)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (object);
-
- etfci_drop_table_header (etfci);
- etfci_drop_full_header (etfci);
-
- if (etfci->combined_header)
- g_object_unref (etfci->combined_header);
- etfci->combined_header = NULL;
-
- if (etfci->font)
- gdk_font_unref(etfci->font);
- etfci->font = NULL;
-
- if (G_OBJECT_CLASS (etfci_parent_class)->dispose)
- (*G_OBJECT_CLASS (etfci_parent_class)->dispose) (object);
-}
-
-static gint
-etfci_find_button (ETableFieldChooserItem *etfci, double loc)
-{
- int i;
- int count;
- double height = 0;
- GtkStyle *style;
-
- style = GTK_WIDGET (GNOME_CANVAS_ITEM (etfci)->canvas)->style;
-
- count = e_table_header_count(etfci->combined_header);
- for (i = 0; i < count; i++) {
- ETableCol *ecol;
-
- ecol = e_table_header_get_column (etfci->combined_header, i);
- if (ecol->disabled)
- continue;
- height += e_table_header_compute_height (ecol, GTK_WIDGET (GNOME_CANVAS_ITEM (etfci)->canvas));
- if (height > loc)
- return i;
- }
- return MAX(0, count - 1);
-}
-
-static void
-etfci_rebuild_combined (ETableFieldChooserItem *etfci)
-{
- int count;
- GHashTable *hash;
- int i;
-
- if (etfci->combined_header != NULL)
- g_object_unref (etfci->combined_header);
-
- etfci->combined_header = e_table_header_new ();
-
- hash = g_hash_table_new (NULL, NULL);
-
- count = e_table_header_count (etfci->header);
- for (i = 0; i < count; i++) {
- ETableCol *ecol = e_table_header_get_column (etfci->header, i);
- if (ecol->disabled)
- continue;
- g_hash_table_insert (hash, GINT_TO_POINTER (ecol->col_idx), GINT_TO_POINTER (1));
- }
-
- count = e_table_header_count (etfci->full_header);
- for (i = 0; i < count; i++) {
- ETableCol *ecol = e_table_header_get_column (etfci->full_header, i);
- if (ecol->disabled)
- continue;
- if (! (GPOINTER_TO_INT (g_hash_table_lookup (hash, GINT_TO_POINTER (ecol->col_idx)))))
- e_table_header_add_column (etfci->combined_header, ecol, -1);
- }
-
- g_hash_table_destroy (hash);
-}
-
-static void
-etfci_reflow (GnomeCanvasItem *item, gint flags)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
- double old_height;
- int i;
- int count;
- double height = 0;
- GtkStyle *style;
-
- etfci_rebuild_combined (etfci);
-
- style = GTK_WIDGET (GNOME_CANVAS_ITEM (etfci)->canvas)->style;
-
- old_height = etfci->height;
-
- count = e_table_header_count(etfci->combined_header);
- for (i = 0; i < count; i++) {
- ETableCol *ecol;
-
- ecol = e_table_header_get_column (etfci->combined_header, i);
- if (ecol->disabled)
- continue;
- height += e_table_header_compute_height (ecol, GTK_WIDGET (GNOME_CANVAS_ITEM (etfci)->canvas));
- }
-
- etfci->height = height;
-
- if (old_height != etfci->height)
- e_canvas_item_request_parent_reflow(item);
-
- gnome_canvas_item_request_update(item);
-}
-
-static void
-etfci_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
- double i2c [6];
- ArtPoint c1, c2, i1, i2;
-
- if (GNOME_CANVAS_ITEM_CLASS (etfci_parent_class)->update)
- (*GNOME_CANVAS_ITEM_CLASS (etfci_parent_class)->update)(item, affine, clip_path, flags);
-
- i1.x = i1.y = 0;
- i2.x = etfci->width;
- i2.y = etfci->height;
-
- gnome_canvas_item_i2c_affine (item, i2c);
- art_affine_point (&c1, &i1, i2c);
- art_affine_point (&c2, &i2, i2c);
-
- if (item->x1 != c1.x ||
- item->y1 != c1.y ||
- item->x2 != c2.x ||
- item->y2 != c2.y)
- {
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2);
- item->x1 = c1.x;
- item->y1 = c1.y;
- item->x2 = c2.x;
- item->y2 = c2.y;
-#ifndef NO_WARNINGS
-#warning Group Child bounds !?
-#endif
-#if 0
- gnome_canvas_group_child_bounds (GNOME_CANVAS_GROUP (item->parent), item);
-#endif
- }
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2);
-}
-
-static void
-etfci_font_load (ETableFieldChooserItem *etfci)
-{
- if (etfci->font)
- gdk_font_unref (etfci->font);
-
- etfci->font = gtk_style_get_font (GTK_WIDGET(GNOME_CANVAS_ITEM(etfci)->canvas)->style);
- gdk_font_ref(etfci->font);
-}
-
-static void
-etfci_drop_full_header (ETableFieldChooserItem *etfci)
-{
- GObject *header;
-
- if (!etfci->full_header)
- return;
-
- header = G_OBJECT (etfci->full_header);
- if (etfci->full_header_structure_change_id)
- g_signal_handler_disconnect (header, etfci->full_header_structure_change_id);
- if (etfci->full_header_dimension_change_id)
- g_signal_handler_disconnect (header, etfci->full_header_dimension_change_id);
- etfci->full_header_structure_change_id = 0;
- etfci->full_header_dimension_change_id = 0;
-
- if (header)
- g_object_unref (header);
- etfci->full_header = NULL;
- etfci->height = 0;
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-full_header_structure_changed (ETableHeader *header, ETableFieldChooserItem *etfci)
-{
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-full_header_dimension_changed (ETableHeader *header, int col, ETableFieldChooserItem *etfci)
-{
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-etfci_add_full_header (ETableFieldChooserItem *etfci, ETableHeader *header)
-{
- etfci->full_header = header;
- g_object_ref (etfci->full_header);
-
- etfci->full_header_structure_change_id = g_signal_connect (
- header, "structure_change",
- G_CALLBACK(full_header_structure_changed), etfci);
- etfci->full_header_dimension_change_id = g_signal_connect (
- header, "dimension_change",
- G_CALLBACK(full_header_dimension_changed), etfci);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-etfci_drop_table_header (ETableFieldChooserItem *etfci)
-{
- GObject *header;
-
- if (!etfci->header)
- return;
-
- header = G_OBJECT (etfci->header);
- if (etfci->table_header_structure_change_id)
- g_signal_handler_disconnect (header, etfci->table_header_structure_change_id);
- if (etfci->table_header_dimension_change_id)
- g_signal_handler_disconnect (header, etfci->table_header_dimension_change_id);
- etfci->table_header_structure_change_id = 0;
- etfci->table_header_dimension_change_id = 0;
-
- if (header)
- g_object_unref (header);
- etfci->header = NULL;
- etfci->height = 0;
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-table_header_structure_changed (ETableHeader *header, ETableFieldChooserItem *etfci)
-{
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-table_header_dimension_changed (ETableHeader *header, int col, ETableFieldChooserItem *etfci)
-{
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-etfci_add_table_header (ETableFieldChooserItem *etfci, ETableHeader *header)
-{
- etfci->header = header;
- g_object_ref (etfci->header);
-
- etfci->table_header_structure_change_id = g_signal_connect (
- header, "structure_change",
- G_CALLBACK(table_header_structure_changed), etfci);
- etfci->table_header_dimension_change_id = g_signal_connect (
- header, "dimension_change",
- G_CALLBACK(table_header_dimension_changed), etfci);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-etfci_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ETableFieldChooserItem *etfci;
-
- item = GNOME_CANVAS_ITEM (object);
- etfci = E_TABLE_FIELD_CHOOSER_ITEM (object);
-
- switch (prop_id){
- case PROP_FULL_HEADER:
- etfci_drop_full_header (etfci);
- if (g_value_get_object (value))
- etfci_add_full_header (etfci, E_TABLE_HEADER(g_value_get_object (value)));
- break;
-
- case PROP_HEADER:
- etfci_drop_table_header (etfci);
- if (g_value_get_object (value))
- etfci_add_table_header (etfci, E_TABLE_HEADER(g_value_get_object (value)));
- break;
-
- case PROP_DND_CODE:
- g_free(etfci->dnd_code);
- etfci->dnd_code = g_strdup(g_value_get_string (value));
- break;
-
- case PROP_WIDTH:
- etfci->width = g_value_get_double (value);
- gnome_canvas_item_request_update(item);
- break;
- }
-}
-
-static void
-etfci_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ETableFieldChooserItem *etfci;
-
- item = GNOME_CANVAS_ITEM (object);
- etfci = E_TABLE_FIELD_CHOOSER_ITEM (object);
-
- switch (prop_id){
-
- case PROP_DND_CODE:
- g_value_set_string (value, g_strdup (etfci->dnd_code));
- break;
- case PROP_WIDTH:
- g_value_set_double (value, etfci->width);
- break;
- case PROP_HEIGHT:
- g_value_set_double (value, etfci->height);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-etfci_drag_data_get (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETableFieldChooserItem *etfci)
-{
- if (etfci->drag_col != -1) {
- gchar *string = g_strdup_printf("%d", etfci->drag_col);
- gtk_selection_data_set(selection_data,
- GDK_SELECTION_TYPE_STRING,
- sizeof(string[0]),
- string,
- strlen(string));
- g_free(string);
- }
-}
-
-static void
-etfci_drag_end (GtkWidget *canvas,
- GdkDragContext *context,
- ETableFieldChooserItem *etfci)
-{
- etfci->drag_col = -1;
-}
-
-static void
-etfci_realize (GnomeCanvasItem *item)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
- GdkWindow *window;
-
- if (GNOME_CANVAS_ITEM_CLASS (etfci_parent_class)-> realize)
- (*GNOME_CANVAS_ITEM_CLASS (etfci_parent_class)->realize)(item);
-
- window = GTK_WIDGET (item->canvas)->window;
-
- if (!etfci->font)
- etfci_font_load (etfci);
-
- etfci->drag_end_id = g_signal_connect (
- item->canvas, "drag_end",
- G_CALLBACK (etfci_drag_end), etfci);
- etfci->drag_data_get_id = g_signal_connect (
- item->canvas, "drag_data_get",
- G_CALLBACK (etfci_drag_data_get), etfci);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(etfci));
-}
-
-static void
-etfci_unrealize (GnomeCanvasItem *item)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
-
- if (etfci->font)
- gdk_font_unref (etfci->font);
- etfci->font = NULL;
-
- g_signal_handler_disconnect (item->canvas, etfci->drag_end_id);
- etfci->drag_end_id = 0;
- g_signal_handler_disconnect (item->canvas, etfci->drag_data_get_id);
- etfci->drag_data_get_id = 0;
-
- if (GNOME_CANVAS_ITEM_CLASS (etfci_parent_class)->unrealize)
- (*GNOME_CANVAS_ITEM_CLASS (etfci_parent_class)->unrealize)(item);
-}
-
-static void
-etfci_draw (GnomeCanvasItem *item, GdkDrawable *drawable, int x, int y, int width, int height)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
- GnomeCanvas *canvas = item->canvas;
- int rows;
- int y1, y2;
- int row;
- GtkStyle *style;
- GtkStateType state;
-
- if (etfci->combined_header == NULL)
- return;
-
- rows = e_table_header_count (etfci->combined_header);
-
- style = GTK_WIDGET (canvas)->style;
- state = GTK_WIDGET_STATE (canvas);
-
- y1 = y2 = 0;
- for (row = 0; row < rows; row++, y1 = y2){
- ETableCol *ecol;
-
- ecol = e_table_header_get_column (etfci->combined_header, row);
-
- if (ecol->disabled)
- continue;
-
- y2 += e_table_header_compute_height (ecol, GTK_WIDGET (canvas));
-
- if (y1 > (y + height))
- break;
-
- if (y2 < y)
- continue;
-
- e_table_header_draw_button (drawable, ecol,
- style, state,
- GTK_WIDGET (canvas),
- -x, y1 - y,
- width, height,
- etfci->width, y2 - y1,
- E_TABLE_COL_ARROW_NONE);
- }
-}
-
-static double
-etfci_point (GnomeCanvasItem *item, double x, double y, int cx, int cy,
- GnomeCanvasItem **actual_item)
-{
- *actual_item = item;
- return 0.0;
-}
-
-static gboolean
-etfci_maybe_start_drag (ETableFieldChooserItem *etfci, int x, int y)
-{
- if (!etfci->maybe_drag)
- return FALSE;
-
- if (MAX (abs (etfci->click_x - x),
- abs (etfci->click_y - y)) <= 3)
- return FALSE;
-
- return TRUE;
-}
-
-static void
-etfci_start_drag (ETableFieldChooserItem *etfci, GdkEvent *event, double x, double y)
-{
- GtkWidget *widget = GTK_WIDGET (GNOME_CANVAS_ITEM (etfci)->canvas);
- GtkTargetList *list;
- GdkDragContext *context;
- ETableCol *ecol;
- GdkPixmap *pixmap;
- int drag_col;
- int button_height;
-
- GtkTargetEntry etfci_drag_types [] = {
- { TARGET_ETABLE_COL_TYPE, 0, TARGET_ETABLE_COL_HEADER },
- };
-
- if (etfci->combined_header == NULL)
- return;
-
- drag_col = etfci_find_button(etfci, y);
-
- if (drag_col < 0 || drag_col > e_table_header_count(etfci->combined_header))
- return;
-
- ecol = e_table_header_get_column (etfci->combined_header, drag_col);
-
- if (ecol->disabled)
- return;
-
- etfci->drag_col = ecol->col_idx;
-
- etfci_drag_types[0].target = g_strdup_printf("%s-%s", etfci_drag_types[0].target, etfci->dnd_code);
- d(g_print ("etfci - %s\n", etfci_drag_types[0].target));
- list = gtk_target_list_new (etfci_drag_types, ELEMENTS (etfci_drag_types));
- context = gtk_drag_begin (widget, list, GDK_ACTION_MOVE, 1, event);
- g_free(etfci_drag_types[0].target);
-
- button_height = e_table_header_compute_height (ecol, widget);
- pixmap = gdk_pixmap_new (widget->window, etfci->width, button_height, -1);
-
- e_table_header_draw_button (pixmap, ecol,
- widget->style, GTK_WIDGET_STATE (widget),
- widget,
- 0, 0,
- etfci->width, button_height,
- etfci->width, button_height,
- E_TABLE_COL_ARROW_NONE);
-
- gtk_drag_set_icon_pixmap (context,
- gdk_window_get_colormap (widget->window),
- pixmap,
- NULL,
- etfci->width / 2,
- button_height / 2);
- gdk_pixmap_unref (pixmap);
- etfci->maybe_drag = FALSE;
-}
-
-/*
- * Handles the events on the ETableFieldChooserItem
- */
-static int
-etfci_event (GnomeCanvasItem *item, GdkEvent *e)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
- GnomeCanvas *canvas = item->canvas;
- int x, y;
-
- switch (e->type){
- case GDK_MOTION_NOTIFY:
- gnome_canvas_w2c (canvas, e->motion.x, e->motion.y, &x, &y);
-
- if (etfci_maybe_start_drag (etfci, x, y))
- etfci_start_drag (etfci, e, x, y);
- break;
-
- case GDK_BUTTON_PRESS:
- gnome_canvas_w2c (canvas, e->button.x, e->button.y, &x, &y);
-
- if (e->button.button == 1){
- etfci->click_x = x;
- etfci->click_y = y;
- etfci->maybe_drag = TRUE;
- }
- break;
-
- case GDK_BUTTON_RELEASE: {
- etfci->maybe_drag = FALSE;
- break;
- }
-
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-static void
-etfci_class_init (GObjectClass *object_class)
-{
- GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
-
- etfci_parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-
- object_class->dispose = etfci_dispose;
- object_class->set_property = etfci_set_property;
- object_class->get_property = etfci_get_property;
-
- item_class->update = etfci_update;
- item_class->realize = etfci_realize;
- item_class->unrealize = etfci_unrealize;
- item_class->draw = etfci_draw;
- item_class->point = etfci_point;
- item_class->event = etfci_event;
-
- g_object_class_install_property (object_class, PROP_DND_CODE,
- g_param_spec_string ("dnd_code",
- _("DnD code"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FULL_HEADER,
- g_param_spec_object ("full_header",
- _("Full Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_HEADER,
- g_param_spec_object ("header",
- _("Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _("Width"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXDOUBLE, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _("Height"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXDOUBLE, 0,
- G_PARAM_READABLE));
-}
-
-static void
-etfci_init (GnomeCanvasItem *item)
-{
- ETableFieldChooserItem *etfci = E_TABLE_FIELD_CHOOSER_ITEM (item);
-
- etfci->full_header = NULL;
- etfci->header = NULL;
- etfci->combined_header = NULL;
-
- etfci->height = etfci->width = 0;
-
- etfci->font = NULL;
-
- etfci->full_header_structure_change_id = 0;
- etfci->full_header_dimension_change_id = 0;
- etfci->table_header_structure_change_id = 0;
- etfci->table_header_dimension_change_id = 0;
-
- etfci->dnd_code = NULL;
-
- etfci->maybe_drag = 0;
- etfci->drag_end_id = 0;
-
- e_canvas_item_set_reflow_callback(item, etfci_reflow);
-}
-
-E_MAKE_TYPE (e_table_field_chooser_item,
- "ETableFieldChooserItem",
- ETableFieldChooserItem,
- etfci_class_init,
- etfci_init,
- PARENT_OBJECT_TYPE);
diff --git a/widgets/table/e-table-field-chooser-item.h b/widgets/table/e-table-field-chooser-item.h
deleted file mode 100644
index 2ed37d37f1..0000000000
--- a/widgets/table/e-table-field-chooser-item.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-field-chooser-item.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_FIELD_CHOOSER_ITEM_H_
-#define _E_TABLE_FIELD_CHOOSER_ITEM_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <libxml/tree.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_FIELD_CHOOSER_ITEM_TYPE (e_table_field_chooser_item_get_type ())
-#define E_TABLE_FIELD_CHOOSER_ITEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_FIELD_CHOOSER_ITEM_TYPE, ETableFieldChooserItem))
-#define E_TABLE_FIELD_CHOOSER_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_FIELD_CHOOSER_ITEM_TYPE, ETableFieldChooserItemClass))
-#define E_IS_TABLE_FIELD_CHOOSER_ITEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_FIELD_CHOOSER_ITEM_TYPE))
-#define E_IS_TABLE_FIELD_CHOOSER_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_FIELD_CHOOSER_ITEM_TYPE))
-
-typedef struct {
- GnomeCanvasItem parent;
- ETableHeader *full_header;
- ETableHeader *header;
- ETableHeader *combined_header;
-
- double height, width;
-
- GdkFont *font;
-
- /*
- * Ids
- */
- int full_header_structure_change_id, full_header_dimension_change_id;
- int table_header_structure_change_id, table_header_dimension_change_id;
-
- gchar *dnd_code;
-
- /*
- * For dragging columns
- */
- guint maybe_drag:1;
- int click_x, click_y;
- int drag_col;
- guint drag_data_get_id;
- guint drag_end_id;
-} ETableFieldChooserItem;
-
-typedef struct {
- GnomeCanvasItemClass parent_class;
-} ETableFieldChooserItemClass;
-
-GType e_table_field_chooser_item_get_type (void);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_FIELD_CHOOSER_ITEM_H_ */
diff --git a/widgets/table/e-table-field-chooser.c b/widgets/table/e-table-field-chooser.c
deleted file mode 100644
index 25b94b2aca..0000000000
--- a/widgets/table/e-table-field-chooser.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-field-chooser.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkbox.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include "e-table-field-chooser.h"
-#include "e-table-field-chooser-item.h"
-#include <gal/util/e-i18n.h>
-#include <gal/util/e-util.h>
-
-static void e_table_field_chooser_init (ETableFieldChooser *card);
-static void e_table_field_chooser_class_init (ETableFieldChooserClass *klass);
-static void e_table_field_chooser_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void e_table_field_chooser_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
-static void e_table_field_chooser_dispose (GObject *object);
-
-#define PARENT_TYPE GTK_TYPE_VBOX
-static GtkVBoxClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_FULL_HEADER,
- PROP_HEADER,
- PROP_DND_CODE
-};
-
-E_MAKE_TYPE (e_table_field_chooser,
- "ETableFieldChooser",
- ETableFieldChooser,
- e_table_field_chooser_class_init,
- e_table_field_chooser_init,
- PARENT_TYPE);
-
-static void
-e_table_field_chooser_class_init (ETableFieldChooserClass *klass)
-{
- GObjectClass *object_class;
- GtkVBoxClass *vbox_class;
-
- object_class = (GObjectClass*) klass;
- vbox_class = (GtkVBoxClass *) klass;
-
- glade_init();
-
- parent_class = g_type_class_ref (GTK_TYPE_VBOX);
-
- object_class->set_property = e_table_field_chooser_set_property;
- object_class->get_property = e_table_field_chooser_get_property;
- object_class->dispose = e_table_field_chooser_dispose;
-
- g_object_class_install_property (object_class, PROP_DND_CODE,
- g_param_spec_string ("dnd_code",
- _("DnD code"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FULL_HEADER,
- g_param_spec_object ("full_header",
- _("Full Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_HEADER,
- g_param_spec_object ("header",
- _("Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-}
-
-static void
-ensure_nonzero_step_increments (ETableFieldChooser *etfc)
-{
- GtkAdjustment *va, *ha;
-
- va = gtk_layout_get_vadjustment (GTK_LAYOUT (etfc->canvas));
- ha = gtk_layout_get_hadjustment (GTK_LAYOUT (etfc->canvas));
-
- /*
- it looks pretty complicated to get height of column header
- so use 16 pixels which should be OK
- */
- if (va)
- va->step_increment = 16.0;
- if (ha)
- ha->step_increment = 16.0;
-}
-
-static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, ETableFieldChooser *etfc)
-{
- double height;
- etfc->last_alloc = *allocation;
- gnome_canvas_item_set( etfc->item,
- "width", (double) allocation->width,
- NULL );
- g_object_get(etfc->item,
- "height", &height,
- NULL);
- height = MAX(height, allocation->height);
- gnome_canvas_set_scroll_region(GNOME_CANVAS( etfc->canvas ), 0, 0, allocation->width - 1, height - 1);
- gnome_canvas_item_set( etfc->rect,
- "x2", (double) allocation->width,
- "y2", (double) height,
- NULL );
- ensure_nonzero_step_increments (etfc);
-}
-
-static void resize(GnomeCanvas *canvas, ETableFieldChooser *etfc)
-{
- double height;
- g_object_get(etfc->item,
- "height", &height,
- NULL);
-
- height = MAX(height, etfc->last_alloc.height);
-
- gnome_canvas_set_scroll_region (GNOME_CANVAS(etfc->canvas), 0, 0, etfc->last_alloc.width - 1, height - 1);
- gnome_canvas_item_set( etfc->rect,
- "x2", (double) etfc->last_alloc.width,
- "y2", (double) height,
- NULL );
- ensure_nonzero_step_increments (etfc);
-}
-
-static void
-e_table_field_chooser_init (ETableFieldChooser *etfc)
-{
- GladeXML *gui;
- GtkWidget *widget;
-
- gui = glade_xml_new (ETABLE_GLADEDIR "/e-table-field-chooser.glade", NULL, E_I18N_DOMAIN);
- etfc->gui = gui;
-
- widget = glade_xml_get_widget(gui, "vbox-top");
- if (!widget) {
- return;
- }
- gtk_widget_reparent(widget,
- GTK_WIDGET(etfc));
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
- etfc->canvas = GNOME_CANVAS(glade_xml_get_widget(gui, "canvas-buttons"));
-
- etfc->rect = gnome_canvas_item_new(gnome_canvas_root( GNOME_CANVAS( etfc->canvas ) ),
- gnome_canvas_rect_get_type(),
- "x1", (double) 0,
- "y1", (double) 0,
- "x2", (double) 100,
- "y2", (double) 100,
- "fill_color", "white",
- NULL );
-
- etfc->item = gnome_canvas_item_new(gnome_canvas_root(etfc->canvas),
- e_table_field_chooser_item_get_type(),
- "width", (double) 100,
- "full_header", etfc->full_header,
- "header", etfc->header,
- "dnd_code", etfc->dnd_code,
- NULL );
-
- g_signal_connect( etfc->canvas, "reflow",
- G_CALLBACK ( resize ),
- etfc);
-
- gnome_canvas_set_scroll_region ( GNOME_CANVAS( etfc->canvas ),
- 0, 0,
- 100, 100 );
-
- /* Connect the signals */
- g_signal_connect (etfc->canvas, "size_allocate",
- G_CALLBACK (allocate_callback),
- etfc);
-
- gtk_widget_pop_colormap ();
- gtk_widget_show_all(widget);
-}
-
-static void
-e_table_field_chooser_dispose (GObject *object)
-{
- ETableFieldChooser *etfc = E_TABLE_FIELD_CHOOSER(object);
-
- g_free (etfc->dnd_code);
- etfc->dnd_code = NULL;
-
- if (etfc->full_header)
- g_object_unref (etfc->full_header);
- etfc->full_header = NULL;
-
- if (etfc->header)
- g_object_unref (etfc->header);
- etfc->header = NULL;
-
- if (etfc->gui)
- g_object_unref (etfc->gui);
- etfc->gui = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-GtkWidget*
-e_table_field_chooser_new (void)
-{
- GtkWidget *widget = GTK_WIDGET (g_object_new (E_TABLE_FIELD_CHOOSER_TYPE, NULL));
- return widget;
-}
-
-static void
-e_table_field_chooser_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ETableFieldChooser *etfc = E_TABLE_FIELD_CHOOSER(object);
-
- switch (prop_id){
- case PROP_DND_CODE:
- g_free(etfc->dnd_code);
- etfc->dnd_code = g_strdup(g_value_get_string(value));
- if (etfc->item)
- g_object_set(etfc->item,
- "dnd_code", etfc->dnd_code,
- NULL);
- break;
- case PROP_FULL_HEADER:
- if (etfc->full_header)
- g_object_unref (etfc->full_header);
- if (g_value_get_object (value))
- etfc->full_header = E_TABLE_HEADER(g_value_get_object (value));
- else
- etfc->full_header = NULL;
- if (etfc->full_header)
- g_object_ref (etfc->full_header);
- if (etfc->item)
- g_object_set(etfc->item,
- "full_header", etfc->full_header,
- NULL);
- break;
- case PROP_HEADER:
- if (etfc->header)
- g_object_unref (etfc->header);
- if (g_value_get_object (value))
- etfc->header = E_TABLE_HEADER(g_value_get_object (value));
- else
- etfc->header = NULL;
- if (etfc->header)
- g_object_ref (etfc->header);
- if (etfc->item)
- g_object_set(etfc->item,
- "header", etfc->header,
- NULL);
- break;
- default:
- break;
- }
-}
-
-static void
-e_table_field_chooser_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableFieldChooser *etfc = E_TABLE_FIELD_CHOOSER(object);
-
- switch (prop_id) {
- case PROP_DND_CODE:
- g_value_set_string (value, g_strdup (etfc->dnd_code));
- break;
- case PROP_FULL_HEADER:
- g_value_set_object (value, etfc->full_header);
- break;
- case PROP_HEADER:
- g_value_set_object (value, etfc->header);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
diff --git a/widgets/table/e-table-field-chooser.glade b/widgets/table/e-table-field-chooser.glade
deleted file mode 100644
index f46a8dbd52..0000000000
--- a/widgets/table/e-table-field-chooser.glade
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd" >
-
-<glade-interface>
- <widget class="GtkDialog" id="dialog-field-chooser">
- <property name="visible">no</property>
- <property name="title" translatable="yes">Field Chooser</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="modal">no</property>
- <property name="allow_shrink">no</property>
- <property name="allow_grow">yes</property>
- <property name="window-position">GTK_WIN_POS_NONE</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="homogeneous">no</property>
- <property name="spacing">8</property>
- <property name="visible">yes</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">8</property>
- <property name="visible">yes</property>
-
- <child>
- <widget class="GtkButton" id="button3">
- <property name="can_default">yes</property>
- <property name="can_focus">yes</property>
- <property name="visible">yes</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">yes</property>
- <property name="use_underline">yes</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">no</property>
- <property name="fill">yes</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox-top">
- <property name="homogeneous">no</property>
- <property name="spacing">4</property>
- <property name="visible">yes</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="label" translatable="yes">To add a column to your table, drag it into
-the location in which you want it to appear.</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">no</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="visible">yes</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">no</property>
- <property name="fill">no</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="width-request">200</property>
- <property name="height-request">200</property>
- <property name="visible">yes</property>
-
- <child>
- <widget class="Custom" id="canvas-buttons">
- <property name="creation_function">e_canvas_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 08 Jun 2000 07:27:33 GMT</property>
- <property name="visible">yes</property>
- </widget>
- </child>
-
- <child internal-child="hscrollbar">
- <widget class="GtkHScrollbar" id="convertwidget1">
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="visible">yes</property>
- </widget>
- </child>
-
- <child internal-child="vscrollbar">
- <widget class="GtkVScrollbar" id="convertwidget2">
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="visible">yes</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
-</glade-interface>
diff --git a/widgets/table/e-table-field-chooser.h b/widgets/table/e-table-field-chooser.h
deleted file mode 100644
index 65efeeedbe..0000000000
--- a/widgets/table/e-table-field-chooser.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-field-chooser.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_TABLE_FIELD_CHOOSER_H__
-#define __E_TABLE_FIELD_CHOOSER_H__
-
-#include <glade/glade.h>
-#include <gtk/gtkvbox.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-/* ETableFieldChooser - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name type read/write description
- * --------------------------------------------------------------------------------
- */
-
-#define E_TABLE_FIELD_CHOOSER_TYPE (e_table_field_chooser_get_type ())
-#define E_TABLE_FIELD_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TABLE_FIELD_CHOOSER_TYPE, ETableFieldChooser))
-#define E_TABLE_FIELD_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TABLE_FIELD_CHOOSER_TYPE, ETableFieldChooserClass))
-#define E_IS_TABLE_FIELD_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TABLE_FIELD_CHOOSER_TYPE))
-#define E_IS_TABLE_FIELD_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TABLE_FIELD_CHOOSER_TYPE))
-
-
-typedef struct _ETableFieldChooser ETableFieldChooser;
-typedef struct _ETableFieldChooserClass ETableFieldChooserClass;
-
-struct _ETableFieldChooser
-{
- GtkVBox parent;
-
- /* item specific fields */
- GladeXML *gui;
- GnomeCanvas *canvas;
- GnomeCanvasItem *item;
-
- GnomeCanvasItem *rect;
- GtkAllocation last_alloc;
-
- gchar *dnd_code;
- ETableHeader *full_header;
- ETableHeader *header;
-};
-
-struct _ETableFieldChooserClass
-{
- GtkVBoxClass parent_class;
-};
-
-
-GtkWidget *e_table_field_chooser_new(void);
-GType e_table_field_chooser_get_type (void);
-
-G_END_DECLS
-
-#endif /* __E_TABLE_FIELD_CHOOSER_H__ */
diff --git a/widgets/table/e-table-group-container.c b/widgets/table/e-table-group-container.c
deleted file mode 100644
index 61b8b9f1a5..0000000000
--- a/widgets/table/e-table-group-container.c
+++ /dev/null
@@ -1,1512 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-group-container.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtksignal.h>
-#include <libgnome/libgnome.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include "e-table-group-container.h"
-#include "e-table-group-leaf.h"
-#include "e-table-item.h"
-#include "gal/util/e-util.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-canvas-utils.h"
-#include "gal/widgets/e-unicode.h"
-#include "gal/e-text/e-text.h"
-#include "e-table-defines.h"
-
-#define TITLE_HEIGHT 16
-
-#define PARENT_TYPE e_table_group_get_type ()
-
-static GnomeCanvasGroupClass *etgc_parent_class;
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_HEIGHT,
- PROP_WIDTH,
- PROP_MINIMUM_WIDTH,
- PROP_FROZEN,
- PROP_TABLE_ALTERNATING_ROW_COLORS,
- PROP_TABLE_HORIZONTAL_DRAW_GRID,
- PROP_TABLE_VERTICAL_DRAW_GRID,
- PROP_TABLE_DRAW_FOCUS,
- PROP_CURSOR_MODE,
- PROP_SELECTION_MODEL,
- PROP_LENGTH_THRESHOLD,
- PROP_UNIFORM_ROW_HEIGHT
-};
-
-typedef struct {
- ETableGroup *child;
- void *key;
- char *string;
- GnomeCanvasItem *text;
- GnomeCanvasItem *rect;
- gint count;
-} ETableGroupContainerChildNode;
-
-static EPrintable *
-etgc_get_printable (ETableGroup *etg);
-
-
-static void
-e_table_group_container_child_node_free (ETableGroupContainer *etgc,
- ETableGroupContainerChildNode *child_node)
-{
- ETableGroup *etg = E_TABLE_GROUP (etgc);
- ETableGroup *child = child_node->child;
-
- gtk_object_destroy (GTK_OBJECT (child));
- e_table_model_free_value (etg->model, etgc->ecol->col_idx,
- child_node->key);
- g_free(child_node->string);
- gtk_object_destroy (GTK_OBJECT (child_node->text));
- gtk_object_destroy (GTK_OBJECT (child_node->rect));
-}
-
-static void
-e_table_group_container_list_free (ETableGroupContainer *etgc)
-{
- ETableGroupContainerChildNode *child_node;
- GList *list;
-
- for (list = etgc->children; list; list = g_list_next (list)) {
- child_node = (ETableGroupContainerChildNode *) list->data;
- e_table_group_container_child_node_free (etgc, child_node);
- }
-
- g_list_free (etgc->children);
- etgc->children = NULL;
-}
-
-static void
-etgc_dispose (GObject *object)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (object);
-
- if (etgc->children)
- e_table_group_container_list_free (etgc);
-
- if (etgc->font)
- gdk_font_unref (etgc->font);
- etgc->font = NULL;
-
- if (etgc->ecol)
- g_object_unref (etgc->ecol);
- etgc->ecol = NULL;
-
- if (etgc->sort_info)
- g_object_unref (etgc->sort_info);
- etgc->sort_info = NULL;
-
- if (etgc->selection_model)
- g_object_unref (etgc->selection_model);
- etgc->selection_model = NULL;
-
- if (etgc->rect)
- gtk_object_destroy (GTK_OBJECT(etgc->rect));
- etgc->rect = NULL;
-
- G_OBJECT_CLASS (etgc_parent_class)->dispose (object);
-}
-
-/**
- * e_table_group_container_construct
- * @parent: The %GnomeCanvasGroup to create a child of.
- * @etgc: The %ETableGroupContainer.
- * @full_header: The full header of the %ETable.
- * @header: The current header of the %ETable.
- * @model: The %ETableModel of the %ETable.
- * @sort_info: The %ETableSortInfo of the %ETable.
- * @n: Which grouping level this is (Starts at 0 and sends n + 1 to any child %ETableGroups.
- *
- * This routine constructs the new %ETableGroupContainer.
- */
-void
-e_table_group_container_construct (GnomeCanvasGroup *parent, ETableGroupContainer *etgc,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model, ETableSortInfo *sort_info, int n)
-{
- ETableCol *col;
- ETableSortColumn column = e_table_sort_info_grouping_get_nth(sort_info, n);
-
- col = e_table_header_get_column_by_col_idx(full_header, column.column);
- if (col == NULL)
- col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
-
- e_table_group_construct (parent, E_TABLE_GROUP (etgc), full_header, header, model);
- etgc->ecol = col;
- g_object_ref (etgc->ecol);
- etgc->sort_info = sort_info;
- g_object_ref (etgc->sort_info);
- etgc->n = n;
- etgc->ascending = column.ascending;
-
- etgc->font = gtk_style_get_font (GTK_WIDGET (GNOME_CANVAS_ITEM (etgc)->canvas)->style);
-
- gdk_font_ref (etgc->font);
-
- etgc->open = TRUE;
-}
-
-/**
- * e_table_group_container_new
- * @parent: The %GnomeCanvasGroup to create a child of.
- * @full_header: The full header of the %ETable.
- * @header: The current header of the %ETable.
- * @model: The %ETableModel of the %ETable.
- * @sort_info: The %ETableSortInfo of the %ETable.
- * @n: Which grouping level this is (Starts at 0 and sends n + 1 to any child %ETableGroups.
- *
- * %ETableGroupContainer is an %ETableGroup which groups by the nth
- * grouping of the %ETableSortInfo. It creates %ETableGroups as
- * children.
- *
- * Returns: The new %ETableGroupContainer.
- */
-ETableGroup *
-e_table_group_container_new (GnomeCanvasGroup *parent, ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model, ETableSortInfo *sort_info, int n)
-{
- ETableGroupContainer *etgc;
-
- g_return_val_if_fail (parent != NULL, NULL);
-
- etgc = g_object_new (E_TABLE_GROUP_CONTAINER_TYPE, NULL);
-
- e_table_group_container_construct (parent, etgc, full_header, header,
- model, sort_info, n);
- return E_TABLE_GROUP (etgc);
-}
-
-
-static int
-etgc_event (GnomeCanvasItem *item, GdkEvent *event)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(item);
- gboolean return_val = TRUE;
- gboolean change_focus = FALSE;
- gboolean use_col = FALSE;
- gint start_col = 0;
- gint old_col;
- EFocus direction = E_FOCUS_START;
-
- 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) {
- change_focus = TRUE;
- use_col = TRUE;
- start_col = (event->key.state & GDK_SHIFT_MASK) ? -1 : 0;
- direction = (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START;
- } else if (event->key.keyval == GDK_Left ||
- event->key.keyval == GDK_KP_Left) {
- change_focus = TRUE;
- use_col = TRUE;
- start_col = -1;
- direction = E_FOCUS_END;
- } else if (event->key.keyval == GDK_Right ||
- event->key.keyval == GDK_KP_Right) {
- change_focus = TRUE;
- use_col = TRUE;
- start_col = 0;
- direction = E_FOCUS_START;
- } else if (event->key.keyval == GDK_Down ||
- event->key.keyval == GDK_KP_Down) {
- change_focus = TRUE;
- use_col = FALSE;
- direction = E_FOCUS_START;
- } else if (event->key.keyval == GDK_Up ||
- event->key.keyval == GDK_KP_Up) {
- change_focus = TRUE;
- use_col = FALSE;
- direction = E_FOCUS_END;
- } else if (event->key.keyval == GDK_Return ||
- event->key.keyval == GDK_KP_Enter) {
- change_focus = TRUE;
- use_col = FALSE;
- direction = E_FOCUS_START;
- }
- if (change_focus){
- GList *list;
- for (list = etgc->children; list; list = list->next) {
- ETableGroupContainerChildNode *child_node;
- ETableGroup *child;
-
- child_node = (ETableGroupContainerChildNode *)list->data;
- child = child_node->child;
-
- if (e_table_group_get_focus (child)) {
- old_col = e_table_group_get_focus_column (child);
- if (old_col == -1)
- old_col = 0;
- if (start_col == -1)
- start_col = e_table_header_count (e_table_group_get_header (child)) - 1;
-
- if (direction == E_FOCUS_END)
- list = list->prev;
- else
- list = list->next;
-
- if (list) {
- child_node = (ETableGroupContainerChildNode *)list->data;
- child = child_node->child;
- if (use_col)
- e_table_group_set_focus (child, direction, start_col);
- else
- e_table_group_set_focus (child, direction, old_col);
- return 1;
- } else {
- return 0;
- }
- }
- }
- if (direction == E_FOCUS_END)
- list = g_list_last(etgc->children);
- else
- list = etgc->children;
- if (list) {
- ETableGroupContainerChildNode *child_node;
- ETableGroup *child;
-
- child_node = (ETableGroupContainerChildNode *)list->data;
- child = child_node->child;
-
- if (start_col == -1)
- start_col = e_table_header_count (e_table_group_get_header (child)) - 1;
-
- e_table_group_set_focus (child, direction, start_col);
- return 1;
- }
- }
- return_val = FALSE;
- break;
- default:
- return_val = FALSE;
- break;
- }
- if (return_val == FALSE) {
- if (GNOME_CANVAS_ITEM_CLASS(etgc_parent_class)->event)
- return GNOME_CANVAS_ITEM_CLASS (etgc_parent_class)->event (item, event);
- }
- return return_val;
-
-}
-
-/* Realize handler for the text item */
-static void
-etgc_realize (GnomeCanvasItem *item)
-{
- ETableGroupContainer *etgc;
-
- if (GNOME_CANVAS_ITEM_CLASS (etgc_parent_class)->realize)
- (* GNOME_CANVAS_ITEM_CLASS (etgc_parent_class)->realize) (item);
-
- etgc = E_TABLE_GROUP_CONTAINER (item);
-
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (etgc));
-}
-
-/* Unrealize handler for the etgc item */
-static void
-etgc_unrealize (GnomeCanvasItem *item)
-{
- ETableGroupContainer *etgc;
-
- etgc = E_TABLE_GROUP_CONTAINER (item);
-
- if (GNOME_CANVAS_ITEM_CLASS (etgc_parent_class)->unrealize)
- (* GNOME_CANVAS_ITEM_CLASS (etgc_parent_class)->unrealize) (item);
-}
-
-static void
-compute_text (ETableGroupContainer *etgc, ETableGroupContainerChildNode *child_node)
-{
- gchar *text;
-
- if (etgc->ecol->text) {
- text = g_strdup_printf ((child_node->count == 1)
- ? _("%s : %s (%d item)")
- : _("%s : %s (%d items)"),
- etgc->ecol->text, child_node->string,
- (gint) child_node->count);
- } else {
- text = g_strdup_printf ((child_node->count == 1)
- ? _("%s (%d item)")
- : _("%s (%d items)"),
- child_node->string,
- (gint) child_node->count);
- }
- gnome_canvas_item_set (child_node->text,
- "text", text,
- NULL);
- g_free (text);
-}
-
-static void
-child_cursor_change (ETableGroup *etg, int row,
- ETableGroupContainer *etgc)
-{
- e_table_group_cursor_change (E_TABLE_GROUP (etgc), row);
-}
-
-static void
-child_cursor_activated (ETableGroup *etg, int row,
- ETableGroupContainer *etgc)
-{
- e_table_group_cursor_activated (E_TABLE_GROUP (etgc), row);
-}
-
-static void
-child_double_click (ETableGroup *etg, int row, int col, GdkEvent *event,
- ETableGroupContainer *etgc)
-{
- e_table_group_double_click (E_TABLE_GROUP (etgc), row, col, event);
-}
-
-static gint
-child_right_click (ETableGroup *etg, int row, int col, GdkEvent *event,
- ETableGroupContainer *etgc)
-{
- return e_table_group_right_click (E_TABLE_GROUP (etgc), row, col, event);
-}
-
-static gint
-child_click (ETableGroup *etg, int row, int col, GdkEvent *event,
- ETableGroupContainer *etgc)
-{
- return e_table_group_click (E_TABLE_GROUP (etgc), row, col, event);
-}
-
-static gint
-child_key_press (ETableGroup *etg, int row, int col, GdkEvent *event,
- ETableGroupContainer *etgc)
-{
- return e_table_group_key_press (E_TABLE_GROUP (etgc), row, col, event);
-}
-
-static gint
-child_start_drag (ETableGroup *etg, int row, int col, GdkEvent *event,
- ETableGroupContainer *etgc)
-{
- return e_table_group_start_drag (E_TABLE_GROUP (etgc), row, col, event);
-}
-
-static ETableGroupContainerChildNode *
-create_child_node (ETableGroupContainer *etgc, void *val)
-{
- ETableGroup *child;
- ETableGroupContainerChildNode *child_node;
- ETableGroup *etg = E_TABLE_GROUP(etgc);
-
- child_node = g_new (ETableGroupContainerChildNode, 1);
- child_node->rect = gnome_canvas_item_new (GNOME_CANVAS_GROUP (etgc),
- gnome_canvas_rect_get_type (),
- "fill_color", "grey70",
- "outline_color", "grey50",
- NULL);
- child_node->text = gnome_canvas_item_new (GNOME_CANVAS_GROUP (etgc),
- e_text_get_type (),
- "anchor", GTK_ANCHOR_SW,
- "fill_color", "black",
- "draw_background", FALSE,
- NULL);
- child = e_table_group_new (GNOME_CANVAS_GROUP (etgc), etg->full_header,
- etg->header, etg->model, etgc->sort_info, etgc->n + 1);
- gnome_canvas_item_set(GNOME_CANVAS_ITEM(child),
- "alternating_row_colors", etgc->alternating_row_colors,
- "horizontal_draw_grid", etgc->horizontal_draw_grid,
- "vertical_draw_grid", etgc->vertical_draw_grid,
- "drawfocus", etgc->draw_focus,
- "cursor_mode", etgc->cursor_mode,
- "selection_model", etgc->selection_model,
- "length_threshold", etgc->length_threshold,
- "uniform_row_height", etgc->uniform_row_height,
- "minimum_width", etgc->minimum_width - GROUP_INDENT,
- NULL);
-
- g_signal_connect (child, "cursor_change",
- G_CALLBACK (child_cursor_change), etgc);
- g_signal_connect (child, "cursor_activated",
- G_CALLBACK (child_cursor_activated), etgc);
- g_signal_connect (child, "double_click",
- G_CALLBACK (child_double_click), etgc);
- g_signal_connect (child, "right_click",
- G_CALLBACK (child_right_click), etgc);
- g_signal_connect (child, "click",
- G_CALLBACK (child_click), etgc);
- g_signal_connect (child, "key_press",
- G_CALLBACK (child_key_press), etgc);
- g_signal_connect (child, "start_drag",
- G_CALLBACK (child_start_drag), etgc);
- child_node->child = child;
- child_node->key = e_table_model_duplicate_value (etg->model, etgc->ecol->col_idx, val);
- child_node->string = e_table_model_value_to_string (etg->model, etgc->ecol->col_idx, val);
- child_node->count = 0;
-
- return child_node;
-}
-
-static void
-etgc_add (ETableGroup *etg, gint row)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (etg);
- void *val = e_table_model_value_at (etg->model, etgc->ecol->col_idx, row);
- GCompareFunc comp = etgc->ecol->compare;
- GList *list = etgc->children;
- ETableGroup *child;
- ETableGroupContainerChildNode *child_node;
- int i = 0;
-
- for (; list; list = g_list_next (list), i++){
- int comp_val;
-
- child_node = list->data;
- comp_val = (*comp)(child_node->key, val);
- if (comp_val == 0) {
- child = child_node->child;
- child_node->count ++;
- e_table_group_add (child, row);
- compute_text (etgc, child_node);
- return;
- }
- if ((comp_val > 0 && etgc->ascending) ||
- (comp_val < 0 && (!etgc->ascending)))
- break;
- }
- child_node = create_child_node (etgc, val);
- child = child_node->child;
- child_node->count = 1;
- e_table_group_add (child, row);
-
- if (list)
- etgc->children = g_list_insert (etgc->children, child_node, i);
- else
- etgc->children = g_list_append (etgc->children, child_node);
-
- compute_text (etgc, child_node);
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (etgc));
-}
-
-static void
-etgc_add_array (ETableGroup *etg, const int *array, int count)
-{
- int i;
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (etg);
- void *lastval = 0;
- int laststart = 0;
- GCompareFunc comp = etgc->ecol->compare;
- ETableGroupContainerChildNode *child_node;
- ETableGroup *child;
-
- if (count <= 0)
- return;
-
- e_table_group_container_list_free (etgc);
- etgc->children = NULL;
-
- lastval = e_table_model_value_at (etg->model, etgc->ecol->col_idx, array[0]);
-
- for (i = 1; i < count; i++) {
- void *val = e_table_model_value_at (etg->model, etgc->ecol->col_idx, array[i]);
- int comp_val;
-
- comp_val = (*comp)(lastval, val);
- if (comp_val != 0) {
- child_node = create_child_node(etgc, lastval);
- child = child_node->child;
-
- e_table_group_add_array(child, array + laststart, i - laststart);
- child_node->count = i - laststart;
-
- etgc->children = g_list_append (etgc->children, child_node);
- compute_text (etgc, child_node);
- laststart = i;
- lastval = val;
- }
- }
-
- child_node = create_child_node(etgc, lastval);
- child = child_node->child;
-
- e_table_group_add_array(child, array + laststart, i - laststart);
- child_node->count = i - laststart;
-
- etgc->children = g_list_append (etgc->children, child_node);
- compute_text (etgc, child_node);
-
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (etgc));
-}
-
-static void
-etgc_add_all (ETableGroup *etg)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (etg);
- ESorter *sorter = etgc->selection_model->sorter;
- int *array;
- int count;
-
- e_sorter_get_sorted_to_model_array(sorter, &array, &count);
-
- etgc_add_array(etg, array, count);
-}
-
-static gboolean
-etgc_remove (ETableGroup *etg, gint row)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
- GList *list;
-
- for (list = etgc->children ; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = list->data;
- ETableGroup *child = child_node->child;
-
- if (e_table_group_remove (child, row)) {
- child_node->count --;
- if (child_node->count == 0) {
- e_table_group_container_child_node_free (etgc, child_node);
- etgc->children = g_list_remove (etgc->children, child_node);
- g_free (child_node);
- } else
- compute_text (etgc, child_node);
-
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (etgc));
-
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static int
-etgc_row_count (ETableGroup *etg)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
- GList *list;
- gint count = 0;
- for (list = etgc->children; list; list = g_list_next(list)) {
- ETableGroup *group = ((ETableGroupContainerChildNode *)list->data)->child;
- gint this_count = e_table_group_row_count(group);
- count += this_count;
- }
- return count;
-}
-
-static void
-etgc_increment (ETableGroup *etg, gint position, gint amount)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
- GList *list = etgc->children;
-
- for (list = etgc->children ; list; list = g_list_next (list))
- e_table_group_increment (((ETableGroupContainerChildNode *)list->data)->child,
- position, amount);
-}
-
-static void
-etgc_decrement (ETableGroup *etg, gint position, gint amount)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
- GList *list = etgc->children;
-
- for (list = etgc->children ; list; list = g_list_next (list))
- e_table_group_decrement (((ETableGroupContainerChildNode *)list->data)->child,
- position, amount);
-}
-
-static void
-etgc_set_focus (ETableGroup *etg, EFocus direction, gint view_col)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
- if (etgc->children) {
- if (direction == E_FOCUS_END)
- e_table_group_set_focus (((ETableGroupContainerChildNode *)g_list_last (etgc->children)->data)->child,
- direction, view_col);
- else
- e_table_group_set_focus (((ETableGroupContainerChildNode *)etgc->children->data)->child,
- direction, view_col);
- }
-}
-
-static gint
-etgc_get_focus_column (ETableGroup *etg)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
- if (etgc->children) {
- GList *list;
- for (list = etgc->children; list; list = list->next) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- ETableGroup *child = child_node->child;
- if (e_table_group_get_focus (child)) {
- return e_table_group_get_focus_column (child);
- }
- }
- }
- return 0;
-}
-
-static void
-etgc_compute_location (ETableGroup *etg, int *x, int *y, int *row, int *col)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
-
- if (row)
- *row = -1;
- if (col)
- *col = -1;
-
- *x -= GROUP_INDENT;
- *y -= TITLE_HEIGHT;
-
- if (*x >= 0 && *y >= 0 && etgc->children) {
- GList *list;
- for (list = etgc->children; list; list = list->next) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- ETableGroup *child = child_node->child;
-
- e_table_group_compute_location (child, x, y, row, col);
- if ((*row != -1) && (*col != -1))
- return;
- }
- }
-}
-
-static void
-etgc_get_cell_geometry (ETableGroup *etg, int *row, int *col, int *x, int *y, int *width, int *height)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
-
- int ypos;
-
- ypos = 0;
-
- if (etgc->children) {
- GList *list;
- for (list = etgc->children; list; list = list->next) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- ETableGroup *child = child_node->child;
- int thisy;
-
- e_table_group_get_cell_geometry (child, row, col, x, &thisy, width, height);
- ypos += thisy;
- if ((*row == -1) || (*col == -1)) {
- ypos += TITLE_HEIGHT;
- *x += GROUP_INDENT;
- *y = ypos;
- return;
- }
- }
- }
-}
-
-static void etgc_thaw (ETableGroup *etg)
-{
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM(etg));
-}
-
-static void
-etgc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ETableGroup *etg = E_TABLE_GROUP (object);
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (object);
- GList *list;
-
- switch (prop_id) {
- case PROP_FROZEN:
- if (g_value_get_boolean (value))
- etg->frozen = TRUE;
- else {
- etg->frozen = FALSE;
- etgc_thaw (etg);
- }
- break;
- case PROP_MINIMUM_WIDTH:
- case PROP_WIDTH:
- etgc->minimum_width = g_value_get_double (value);
-
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "minimum_width", etgc->minimum_width - GROUP_INDENT,
- NULL);
- }
- break;
- case PROP_LENGTH_THRESHOLD:
- etgc->length_threshold = g_value_get_int (value);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "length_threshold", etgc->length_threshold,
- NULL);
- }
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- etgc->uniform_row_height = g_value_get_boolean (value);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "uniform_row_height", etgc->uniform_row_height,
- NULL);
- }
- break;
-
- case PROP_SELECTION_MODEL:
- if (etgc->selection_model)
- g_object_unref (etgc->selection_model);
- etgc->selection_model = E_SELECTION_MODEL(g_value_get_object (value));
- if (etgc->selection_model)
- g_object_ref (etgc->selection_model);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "selection_model", etgc->selection_model,
- NULL);
- }
- break;
-
- case PROP_TABLE_ALTERNATING_ROW_COLORS:
- etgc->alternating_row_colors = g_value_get_boolean (value);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "alternating_row_colors", etgc->alternating_row_colors,
- NULL);
- }
- break;
-
- case PROP_TABLE_HORIZONTAL_DRAW_GRID:
- etgc->horizontal_draw_grid = g_value_get_boolean (value);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "horizontal_draw_grid", etgc->horizontal_draw_grid,
- NULL);
- }
- break;
-
- case PROP_TABLE_VERTICAL_DRAW_GRID:
- etgc->vertical_draw_grid = g_value_get_boolean (value);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "vertical_draw_grid", etgc->vertical_draw_grid,
- NULL);
- }
- break;
-
- case PROP_TABLE_DRAW_FOCUS:
- etgc->draw_focus = g_value_get_boolean (value);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "drawfocus", etgc->draw_focus,
- NULL);
- }
- break;
-
- case PROP_CURSOR_MODE:
- etgc->cursor_mode = g_value_get_int (value);
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data;
- g_object_set (child_node->child,
- "cursor_mode", etgc->cursor_mode,
- NULL);
- }
- break;
- default:
- break;
- }
-}
-
-static void
-etgc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableGroup *etg = E_TABLE_GROUP (object);
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (object);
-
- switch (prop_id) {
- case PROP_FROZEN:
- g_value_set_boolean (value, etg->frozen);
- break;
- case PROP_HEIGHT:
- g_value_set_double (value, etgc->height);
- break;
- case PROP_WIDTH:
- g_value_set_double (value, etgc->width);
- break;
- case PROP_MINIMUM_WIDTH:
- g_value_set_double (value, etgc->minimum_width);
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- g_value_set_boolean (value, etgc->uniform_row_height);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-etgc_class_init (GObjectClass *object_class)
-{
- GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
- ETableGroupClass *e_group_class = E_TABLE_GROUP_CLASS(object_class);
-
- object_class->dispose = etgc_dispose;
- object_class->set_property = etgc_set_property;
- object_class->get_property = etgc_get_property;
-
- item_class->event = etgc_event;
- item_class->realize = etgc_realize;
- item_class->unrealize = etgc_unrealize;
-
- etgc_parent_class = g_type_class_ref (PARENT_TYPE);
-
- e_group_class->add = etgc_add;
- e_group_class->add_array = etgc_add_array;
- e_group_class->add_all = etgc_add_all;
- e_group_class->remove = etgc_remove;
- e_group_class->increment = etgc_increment;
- e_group_class->decrement = etgc_decrement;
- e_group_class->row_count = etgc_row_count;
- e_group_class->set_focus = etgc_set_focus;
- e_group_class->get_focus_column = etgc_get_focus_column;
- e_group_class->get_printable = etgc_get_printable;
- e_group_class->compute_location = etgc_compute_location;
- e_group_class->get_cell_geometry = etgc_get_cell_geometry;
-
- g_object_class_install_property (object_class, PROP_TABLE_ALTERNATING_ROW_COLORS,
- g_param_spec_boolean ("alternating_row_colors",
- _( "Alternating Row Colors" ),
- _( "Alternating Row Colors" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_HORIZONTAL_DRAW_GRID,
- g_param_spec_boolean ("horizontal_draw_grid",
- _( "Horizontal Draw Grid" ),
- _( "Horizontal Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_VERTICAL_DRAW_GRID,
- g_param_spec_boolean ("vertical_draw_grid",
- _( "Vertical Draw Grid" ),
- _( "Vertical Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_DRAW_FOCUS,
- g_param_spec_boolean ("drawfocus",
- _( "Draw focus" ),
- _( "Draw focus" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_MODE,
- g_param_spec_int ("cursor_mode",
- _( "Cursor mode" ),
- _( "Cursor mode" ),
- E_CURSOR_LINE, E_CURSOR_SPREADSHEET, E_CURSOR_LINE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_SELECTION_MODEL,
- g_param_spec_object ("selection_model",
- _( "Selection model" ),
- _( "Selection model" ),
- E_SELECTION_MODEL_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_LENGTH_THRESHOLD,
- g_param_spec_int ("length_threshold",
- _( "Length Threshold" ),
- _( "Length Threshold" ),
- -1, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_UNIFORM_ROW_HEIGHT,
- g_param_spec_boolean ("uniform_row_height",
- _( "Uniform row height" ),
- _( "Uniform row height" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FROZEN,
- g_param_spec_boolean ("frozen",
- _( "Frozen" ),
- _( "Frozen" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _( "Height" ),
- _( "Height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _( "Width" ),
- _( "Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MINIMUM_WIDTH,
- g_param_spec_double ("minimum_width",
- _( "Minimum width" ),
- _( "Minimum Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-}
-
-static void
-etgc_reflow (GnomeCanvasItem *item, gint flags)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(item);
- gboolean frozen;
-
- g_object_get (etgc,
- "frozen", &frozen,
- NULL);
-
- if (frozen)
- return;
-
-
- if (GTK_OBJECT_FLAGS(etgc)& GNOME_CANVAS_ITEM_REALIZED){
- gdouble running_height = 0;
- gdouble running_width = 0;
- gdouble old_height;
- gdouble old_width;
-
- old_height = etgc->height;
- old_width = etgc->width;
- if (etgc->children == NULL){
- } else {
- GList *list;
- gdouble extra_height = 0;
- gdouble item_height = 0;
- gdouble item_width = 0;
-
- if (etgc->font)
- extra_height += etgc->font->ascent + etgc->font->descent + BUTTON_PADDING * 2;
-
- extra_height = MAX(extra_height, BUTTON_HEIGHT + BUTTON_PADDING * 2);
-
- running_height = extra_height;
-
- for ( list = etgc->children; list; list = g_list_next (list)){
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *) list->data;
- ETableGroup *child = child_node->child;
-
- g_object_get (child,
- "width", &item_width,
- NULL);
-
- if (item_width > running_width)
- running_width = item_width;
- }
- for ( list = etgc->children; list; list = g_list_next (list)){
- ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *) list->data;
- ETableGroup *child = child_node->child;
- g_object_get (child,
- "height", &item_height,
- NULL);
-
- e_canvas_item_move_absolute (GNOME_CANVAS_ITEM(child_node->text),
- GROUP_INDENT,
- running_height - BUTTON_PADDING);
-
- e_canvas_item_move_absolute (GNOME_CANVAS_ITEM(child),
- GROUP_INDENT,
- running_height);
-
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(child_node->rect),
- "x1", (double) 0,
- "x2", (double) running_width + GROUP_INDENT,
- "y1", (double) running_height - extra_height,
- "y2", (double) running_height + item_height,
- NULL);
-
- running_height += item_height + extra_height;
- }
- running_height -= extra_height;
- }
- if (running_height != old_height || running_width != old_width) {
- etgc->height = running_height;
- etgc->width = running_width;
- e_canvas_item_request_parent_reflow (item);
- }
- }
-}
-
-static void
-etgc_init (GtkObject *object)
-{
- ETableGroupContainer *container = E_TABLE_GROUP_CONTAINER(object);
- container->children = FALSE;
-
- e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM(object), etgc_reflow);
-
- container->alternating_row_colors = 1;
- container->horizontal_draw_grid = 1;
- container->vertical_draw_grid = 1;
- container->draw_focus = 1;
- container->cursor_mode = E_CURSOR_SIMPLE;
- container->length_threshold = -1;
- container->selection_model = NULL;
- container->uniform_row_height = FALSE;
-}
-
-E_MAKE_TYPE (e_table_group_container, "ETableGroupContainer", ETableGroupContainer, etgc_class_init, etgc_init, PARENT_TYPE)
-
-void
-e_table_group_apply_to_leafs (ETableGroup *etg, ETableGroupLeafFn fn, void *closure)
-{
- if (E_IS_TABLE_GROUP_CONTAINER (etg)){
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (etg);
- GList *list = etgc->children;
-
- /* Protect from unrefs in the callback functions */
- g_object_ref (etg);
-
- for (list = etgc->children; list; list = list->next){
- ETableGroupContainerChildNode *child_node = list->data;
-
- e_table_group_apply_to_leafs (child_node->child, fn, closure);
- }
-
- g_object_unref (etg);
- } else if (E_IS_TABLE_GROUP_LEAF (etg)){
- (*fn) (E_TABLE_GROUP_LEAF (etg)->item, closure);
- } else {
- g_error ("Unknown ETableGroup found: %s",
- g_type_name (G_TYPE_FROM_INSTANCE (etg)));
- }
-}
-
-
-typedef struct {
- ETableGroupContainer *etgc;
- GList *child;
- EPrintable *child_printable;
-} ETGCPrintContext;
-
-#if 0
-#define CHECK(x) if((x) == -1) return -1;
-
-static gint
-gp_draw_rect (GnomePrintContext *context, gdouble x, gdouble y, gdouble width, gdouble height, gdouble r, gdouble g, gdouble b)
-{
- CHECK(gnome_print_moveto(context, x, y));
- CHECK(gnome_print_lineto(context, x + width, y));
- CHECK(gnome_print_lineto(context, x + width, y - height));
- CHECK(gnome_print_lineto(context, x, y - height));
- CHECK(gnome_print_lineto(context, x, y));
- return gnome_print_fill(context);
-}
-#endif
-
-#define CHECK(x) if((x) == -1) return -1;
-
-static gint
-gp_draw_rect (GnomePrintContext *context, gdouble x, gdouble y, gdouble width, gdouble height)
-{
- CHECK(gnome_print_moveto(context, x, y));
- CHECK(gnome_print_lineto(context, x + width, y));
- CHECK(gnome_print_lineto(context, x + width, y - height));
- CHECK(gnome_print_lineto(context, x, y - height));
- CHECK(gnome_print_lineto(context, x, y));
- return gnome_print_fill(context);
-}
-
-#define TEXT_HEIGHT (12)
-#define TEXT_AREA_HEIGHT (TEXT_HEIGHT + 4)
-
-static void
-e_table_group_container_print_page (EPrintable *ep,
- GnomePrintContext *context,
- gdouble width,
- gdouble height,
- gboolean quantize,
- ETGCPrintContext *groupcontext)
-{
- gdouble yd = height;
- gdouble child_height;
- ETableGroupContainerChildNode *child_node;
- GList *child;
- EPrintable *child_printable;
- gchar *string;
- GnomeFont *font = gnome_font_find ("Helvetica", TEXT_HEIGHT);
-
- child_printable = groupcontext->child_printable;
- child = groupcontext->child;
-
- if (child_printable) {
- if (child)
- child_node = child->data;
- else
- child_node = NULL;
- g_object_ref (child_printable);
- } else {
- if (!child) {
- return;
- } else {
- child_node = child->data;
- child_printable = e_table_group_get_printable(child_node->child);
- if (child_printable)
- g_object_ref (child_printable);
- e_printable_reset(child_printable);
- }
- }
-
- while (1) {
- child_height = e_printable_height(child_printable, context, width - 36, yd - TEXT_AREA_HEIGHT, quantize);
-
- if (gnome_print_gsave(context) == -1)
- /* FIXME */;
- if (gnome_print_moveto(context, 0, yd - child_height - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 36, yd - child_height - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 36, yd - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width, yd - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width, yd) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, yd) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, yd - child_height - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_setrgbcolor(context, .7, .7, .7) == -1)
- /* FIXME */;
- if (gnome_print_fill(context) == -1)
- /* FIXME */;
- if (gnome_print_grestore(context) == -1)
- /* FIXME */;
-
- if (gnome_print_gsave(context) == -1)
- /* FIXME */;
- if (gnome_print_moveto(context, 0, yd - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width, yd - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width, yd) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, yd) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, yd - TEXT_AREA_HEIGHT) == -1)
- /* FIXME */;
- if (gnome_print_clip(context) == -1)
- /* FIXME */;
-
- if (gnome_print_moveto(context, 2, yd - (TEXT_AREA_HEIGHT + gnome_font_get_ascender(font) - gnome_font_get_descender(font)) / 2) == -1)
- /* FIXME */;
- if (gnome_print_setfont(context, font))
- /* FIXME */;
- if (groupcontext->etgc->ecol->text)
- string = g_strdup_printf ("%s : %s (%d item%s)",
- groupcontext->etgc->ecol->text,
- child_node->string,
- (gint) child_node->count,
- child_node->count == 1 ? "" : "s");
- else
- string = g_strdup_printf ("%s (%d item%s)",
- child_node->string,
- (gint) child_node->count,
- child_node->count == 1 ? "" : "s");
- if (gnome_print_show(context, string))
- /* FIXME */;
- g_free(string);
- if (gnome_print_grestore(context) == -1)
- /* FIXME */;
-
- if (gnome_print_gsave(context) == -1)
- /* FIXME */;
- if (gnome_print_translate(context, 36, yd - TEXT_AREA_HEIGHT - child_height) == -1)
- /* FIXME */;
- if (gnome_print_moveto(context, 0, 0) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width - 36, 0) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, width - 36, child_height) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, child_height) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, 0) == -1)
- /* FIXME */;
- if (gnome_print_clip(context) == -1)
- /* FIXME */;
- e_printable_print_page(child_printable, context, width - 36, child_height, quantize);
- if (gnome_print_grestore(context) == -1)
- /* FIXME */;
-
- gp_draw_rect(context, 0, yd - child_height - TEXT_AREA_HEIGHT + 1, width, 1);
- gp_draw_rect(context, width - 1, yd, 1, yd - child_height - TEXT_AREA_HEIGHT);
- gp_draw_rect(context, 0, yd, 1, yd - child_height - TEXT_AREA_HEIGHT);
-
- yd -= child_height + TEXT_AREA_HEIGHT;
-
- if (e_printable_data_left(child_printable))
- break;
-
- child = child->next;
- if (!child) {
- child_printable = NULL;
- break;
- }
-
- child_node = child->data;
- if (child_printable)
- g_object_unref (child_printable);
- child_printable = e_table_group_get_printable(child_node->child);
- if (child_printable)
- g_object_ref (child_printable);
- e_printable_reset(child_printable);
- }
-
- gp_draw_rect(context, 0, height, width, 1);
-
- if (groupcontext->child_printable)
- g_object_unref (groupcontext->child_printable);
- groupcontext->child_printable = child_printable;
- groupcontext->child = child;
-
-}
-
-static gboolean
-e_table_group_container_data_left (EPrintable *ep,
- ETGCPrintContext *groupcontext)
-{
- g_signal_stop_emission_by_name(ep, "data_left");
- return groupcontext->child != NULL;
-}
-
-static void
-e_table_group_container_reset (EPrintable *ep,
- ETGCPrintContext *groupcontext)
-{
- groupcontext->child = groupcontext->etgc->children;
- if (groupcontext->child_printable)
- g_object_unref (groupcontext->child_printable);
- groupcontext->child_printable = NULL;
-}
-
-static gdouble
-e_table_group_container_height (EPrintable *ep,
- GnomePrintContext *context,
- gdouble width,
- gdouble max_height,
- gboolean quantize,
- ETGCPrintContext *groupcontext)
-{
- gdouble height = 0;
- gdouble child_height;
- gdouble yd = max_height;
- ETableGroupContainerChildNode *child_node;
- GList *child;
- EPrintable *child_printable;
-
- child_printable = groupcontext->child_printable;
- child = groupcontext->child;
-
- if (child_printable)
- g_object_ref (child_printable);
- else {
- if (!child) {
- g_signal_stop_emission_by_name(ep, "height");
- return 0;
- } else {
- child_node = child->data;
- child_printable = e_table_group_get_printable(child_node->child);
- if (child_printable)
- g_object_ref (child_printable);
- e_printable_reset(child_printable);
- }
- }
-
- if (yd != -1 && yd < TEXT_AREA_HEIGHT)
- return 0;
-
- while (1) {
- child_height = e_printable_height(child_printable, context, width - 36, yd - (yd == -1 ? 0 : TEXT_AREA_HEIGHT), quantize);
-
- height += child_height + TEXT_AREA_HEIGHT;
-
- if (yd != -1) {
- if (!e_printable_will_fit(child_printable, context, width - 36, yd - (yd == -1 ? 0 : TEXT_AREA_HEIGHT), quantize)) {
- break;
- }
-
- yd -= child_height + TEXT_AREA_HEIGHT;
- }
-
- child = child->next;
- if (!child) {
- break;
- }
-
- child_node = child->data;
- if (child_printable)
- g_object_unref (child_printable);
- child_printable = e_table_group_get_printable(child_node->child);
- if (child_printable)
- g_object_ref (child_printable);
- e_printable_reset(child_printable);
- }
- if (child_printable)
- g_object_unref (child_printable);
- g_signal_stop_emission_by_name(ep, "height");
- return height;
-}
-
-static gboolean
-e_table_group_container_will_fit (EPrintable *ep,
- GnomePrintContext *context,
- gdouble width,
- gdouble max_height,
- gboolean quantize,
- ETGCPrintContext *groupcontext)
-{
- gboolean will_fit = TRUE;
- gdouble child_height;
- gdouble yd = max_height;
- ETableGroupContainerChildNode *child_node;
- GList *child;
- EPrintable *child_printable;
-
- child_printable = groupcontext->child_printable;
- child = groupcontext->child;
-
- if (child_printable)
- g_object_ref (child_printable);
- else {
- if (!child) {
- g_signal_stop_emission_by_name(ep, "will_fit");
- return will_fit;
- } else {
- child_node = child->data;
- child_printable = e_table_group_get_printable(child_node->child);
- if (child_printable)
- g_object_ref (child_printable);
- e_printable_reset(child_printable);
- }
- }
-
- if (yd != -1 && yd < TEXT_AREA_HEIGHT)
- will_fit = FALSE;
- else {
- while (1) {
- child_height = e_printable_height(child_printable, context, width - 36, yd - (yd == -1 ? 0 : TEXT_AREA_HEIGHT), quantize);
-
- if (yd != -1) {
- if (!e_printable_will_fit(child_printable, context, width - 36, yd - (yd == -1 ? 0 : TEXT_AREA_HEIGHT), quantize)) {
- will_fit = FALSE;
- break;
- }
-
- yd -= child_height + TEXT_AREA_HEIGHT;
- }
-
- child = child->next;
- if (!child) {
- break;
- }
-
- child_node = child->data;
- if (child_printable)
- g_object_unref (child_printable);
- child_printable = e_table_group_get_printable(child_node->child);
- if (child_printable)
- g_object_ref (child_printable);
- e_printable_reset(child_printable);
- }
- }
-
- if (child_printable)
- g_object_unref (child_printable);
-
- g_signal_stop_emission_by_name(ep, "will_fit");
- return will_fit;
-}
-
-static void
-e_table_group_container_printable_destroy (gpointer data,
- GObject *where_object_was)
-
-{
- ETGCPrintContext *groupcontext = data;
-
- g_object_unref (groupcontext->etgc);
- if (groupcontext->child_printable)
- g_object_ref (groupcontext->child_printable);
- g_free(groupcontext);
-}
-
-static EPrintable *
-etgc_get_printable (ETableGroup *etg)
-{
- ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg);
- EPrintable *printable = e_printable_new();
- ETGCPrintContext *groupcontext;
-
- groupcontext = g_new(ETGCPrintContext, 1);
- groupcontext->etgc = etgc;
- g_object_ref (etgc);
- groupcontext->child = etgc->children;
- groupcontext->child_printable = NULL;
-
- g_signal_connect (printable,
- "print_page",
- G_CALLBACK(e_table_group_container_print_page),
- groupcontext);
- g_signal_connect (printable,
- "data_left",
- G_CALLBACK(e_table_group_container_data_left),
- groupcontext);
- g_signal_connect (printable,
- "reset",
- G_CALLBACK(e_table_group_container_reset),
- groupcontext);
- g_signal_connect (printable,
- "height",
- G_CALLBACK(e_table_group_container_height),
- groupcontext);
- g_signal_connect (printable,
- "will_fit",
- G_CALLBACK(e_table_group_container_will_fit),
- groupcontext);
- g_object_weak_ref (G_OBJECT (printable),
- e_table_group_container_printable_destroy,
- groupcontext);
-
- return printable;
-}
diff --git a/widgets/table/e-table-group-container.h b/widgets/table/e-table-group-container.h
deleted file mode 100644
index b094167c09..0000000000
--- a/widgets/table/e-table-group-container.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-group-container.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_GROUP_CONTAINER_H_
-#define _E_TABLE_GROUP_CONTAINER_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-group.h>
-#include <gal/e-table/e-table-item.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_GROUP_CONTAINER_TYPE (e_table_group_container_get_type ())
-#define E_TABLE_GROUP_CONTAINER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_GROUP_CONTAINER_TYPE, ETableGroupContainer))
-#define E_TABLE_GROUP_CONTAINER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_GROUP_CONTAINER_TYPE, ETableGroupContainerClass))
-#define E_IS_TABLE_GROUP_CONTAINER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_GROUP_CONTAINER_TYPE))
-#define E_IS_TABLE_GROUP_CONTAINER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_GROUP_CONTAINER_TYPE))
-
-typedef struct {
- ETableGroup group;
-
- /*
- * The ETableCol used to group this set
- */
- ETableCol *ecol;
- gint ascending;
-
- /*
- * List of ETableGroups we stack
- */
- GList *children;
-
- /*
- * The canvas rectangle that contains the children
- */
- GnomeCanvasItem *rect;
-
- GdkFont *font;
-
- gdouble width, height, minimum_width;
-
- ETableSortInfo *sort_info;
- int n;
- int length_threshold;
-
- ESelectionModel *selection_model;
-
- guint alternating_row_colors : 1;
- guint horizontal_draw_grid : 1;
- guint vertical_draw_grid : 1;
- guint draw_focus : 1;
- guint uniform_row_height : 1;
- ECursorMode cursor_mode;
-
- /*
- * State: the ETableGroup is open or closed
- */
- guint open:1;
-} ETableGroupContainer;
-
-typedef struct {
- ETableGroupClass parent_class;
-} ETableGroupContainerClass;
-
-ETableGroup *e_table_group_container_new (GnomeCanvasGroup *parent, ETableHeader *full_header, ETableHeader *header,
- ETableModel *model, ETableSortInfo *sort_info, int n);
-void e_table_group_container_construct (GnomeCanvasGroup *parent, ETableGroupContainer *etgc,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model, ETableSortInfo *sort_info, int n);
-
-GType e_table_group_container_get_type (void);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_GROUP_CONTAINER_H_ */
diff --git a/widgets/table/e-table-group-leaf.c b/widgets/table/e-table-group-leaf.c
deleted file mode 100644
index 083345ed74..0000000000
--- a/widgets/table/e-table-group-leaf.c
+++ /dev/null
@@ -1,686 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-group-leaf.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtksignal.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include "e-table-group-leaf.h"
-#include "e-table-item.h"
-#include "e-table-sorted-variable.h"
-#include "e-table-sorted.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include "gal/widgets/e-canvas.h"
-
-#define PARENT_TYPE e_table_group_get_type ()
-
-static GnomeCanvasGroupClass *etgl_parent_class;
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_HEIGHT,
- PROP_WIDTH,
- PROP_MINIMUM_WIDTH,
- PROP_FROZEN,
- PROP_TABLE_ALTERNATING_ROW_COLORS,
- PROP_TABLE_HORIZONTAL_DRAW_GRID,
- PROP_TABLE_VERTICAL_DRAW_GRID,
- PROP_TABLE_DRAW_FOCUS,
- PROP_CURSOR_MODE,
- PROP_LENGTH_THRESHOLD,
- PROP_SELECTION_MODEL,
- PROP_UNIFORM_ROW_HEIGHT
-};
-
-static void
-etgl_dispose (GObject *object)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF(object);
-
- if (etgl->ets) {
- g_object_unref (etgl->ets);
- etgl->ets = NULL;
- }
-
- if (etgl->item) {
- if (etgl->etgl_cursor_change_id != 0)
- g_signal_handler_disconnect (etgl->item,
- etgl->etgl_cursor_change_id);
- if (etgl->etgl_cursor_activated_id != 0)
- g_signal_handler_disconnect (etgl->item,
- etgl->etgl_cursor_activated_id);
- if (etgl->etgl_double_click_id != 0)
- g_signal_handler_disconnect (etgl->item,
- etgl->etgl_double_click_id);
- if (etgl->etgl_right_click_id != 0)
- g_signal_handler_disconnect (etgl->item,
- etgl->etgl_right_click_id);
- if (etgl->etgl_click_id != 0)
- g_signal_handler_disconnect (etgl->item,
- etgl->etgl_click_id);
- if (etgl->etgl_key_press_id != 0)
- g_signal_handler_disconnect (etgl->item,
- etgl->etgl_key_press_id);
- if (etgl->etgl_start_drag_id != 0)
- g_signal_handler_disconnect (etgl->item,
- etgl->etgl_start_drag_id);
-
- etgl->etgl_cursor_change_id = 0;
- etgl->etgl_cursor_activated_id = 0;
- etgl->etgl_double_click_id = 0;
- etgl->etgl_right_click_id = 0;
- etgl->etgl_click_id = 0;
- etgl->etgl_key_press_id = 0;
- etgl->etgl_start_drag_id = 0;
-
- gtk_object_destroy (GTK_OBJECT(etgl->item));
- etgl->item = NULL;
- }
-
- if (etgl->selection_model) {
- g_object_unref (etgl->selection_model);
- etgl->selection_model = NULL;
- }
-
- if (G_OBJECT_CLASS (etgl_parent_class)->dispose)
- G_OBJECT_CLASS (etgl_parent_class)->dispose (object);
-}
-
-static void
-e_table_group_leaf_construct (GnomeCanvasGroup *parent,
- ETableGroupLeaf *etgl,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model,
- ETableSortInfo *sort_info)
-{
- etgl->is_grouped = e_table_sort_info_grouping_get_count(sort_info) > 0 ? TRUE : FALSE;
-
- if (etgl->is_grouped)
- etgl->ets = E_TABLE_SUBSET(e_table_sorted_variable_new (model,
- full_header,
- sort_info));
- else
- etgl->ets = E_TABLE_SUBSET(e_table_sorted_new (model,
- full_header,
- sort_info));
-
- e_table_group_construct (parent, E_TABLE_GROUP (etgl), full_header, header, model);
-}
-
-/**
- * e_table_group_leaf_new
- * @parent: The %GnomeCanvasGroup to create a child of.
- * @full_header: The full header of the %ETable.
- * @header: The current header of the %ETable.
- * @model: The %ETableModel of the %ETable.
- * @sort_info: The %ETableSortInfo of the %ETable.
- *
- * %ETableGroupLeaf is an %ETableGroup which simply contains an
- * %ETableItem.
- *
- * Returns: The new %ETableGroupLeaf.
- */
-ETableGroup *
-e_table_group_leaf_new (GnomeCanvasGroup *parent,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model,
- ETableSortInfo *sort_info)
-{
- ETableGroupLeaf *etgl;
-
- g_return_val_if_fail (parent != NULL, NULL);
-
- etgl = g_object_new (E_TABLE_GROUP_LEAF_TYPE, NULL);
-
- e_table_group_leaf_construct (parent, etgl, full_header,
- header, model, sort_info);
- return E_TABLE_GROUP (etgl);
-}
-
-static void
-etgl_cursor_change (GtkObject *object, gint row, ETableGroupLeaf *etgl)
-{
- if (row < E_TABLE_SUBSET(etgl->ets)->n_map)
- e_table_group_cursor_change (E_TABLE_GROUP(etgl),
- E_TABLE_SUBSET(etgl->ets)->map_table[row]);
-}
-
-static void
-etgl_cursor_activated (GtkObject *object, gint view_row, ETableGroupLeaf *etgl)
-{
- if (view_row < E_TABLE_SUBSET(etgl->ets)->n_map)
- e_table_group_cursor_activated (E_TABLE_GROUP(etgl),
- E_TABLE_SUBSET(etgl->ets)->map_table[view_row]);
-}
-
-static void
-etgl_double_click (GtkObject *object, gint model_row, gint model_col, GdkEvent *event,
- ETableGroupLeaf *etgl)
-{
- e_table_group_double_click (E_TABLE_GROUP(etgl), model_row, model_col, event);
-}
-
-static gint
-etgl_key_press (GtkObject *object, gint row, gint col, GdkEvent *event, ETableGroupLeaf *etgl)
-{
- if (row < E_TABLE_SUBSET(etgl->ets)->n_map && row >= 0)
- return e_table_group_key_press (E_TABLE_GROUP(etgl),
- E_TABLE_SUBSET(etgl->ets)->map_table[row],
- col,
- event);
- else
- return 0;
-}
-
-static gint
-etgl_start_drag (GtkObject *object, gint model_row, gint model_col, GdkEvent *event,
- ETableGroupLeaf *etgl)
-{
- return e_table_group_start_drag (E_TABLE_GROUP(etgl), model_row, model_col, event);
-}
-
-static gint
-etgl_right_click (GtkObject *object, gint view_row, gint model_col, GdkEvent *event,
- ETableGroupLeaf *etgl)
-{
- if (view_row < E_TABLE_SUBSET(etgl->ets)->n_map)
- return e_table_group_right_click (E_TABLE_GROUP(etgl),
- E_TABLE_SUBSET(etgl->ets)->map_table[view_row],
- model_col,
- event);
- else
- return 0;
-}
-
-static gint
-etgl_click (GtkObject *object, gint row, gint col, GdkEvent *event, ETableGroupLeaf *etgl)
-{
- if (row < E_TABLE_SUBSET(etgl->ets)->n_map)
- return e_table_group_click (E_TABLE_GROUP(etgl),
- E_TABLE_SUBSET(etgl->ets)->map_table[row],
- col,
- event);
- else
- return 0;
-}
-
-static void
-etgl_reflow (GnomeCanvasItem *item, gint flags)
-{
- ETableGroupLeaf *leaf = E_TABLE_GROUP_LEAF(item);
-
- g_object_get(leaf->item,
- "height", &leaf->height,
- NULL);
- g_object_get(leaf->item,
- "width", &leaf->width,
- NULL);
-
- e_canvas_item_request_parent_reflow (item);
-}
-
-static void
-etgl_realize (GnomeCanvasItem *item)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF(item);
-
- if (GNOME_CANVAS_ITEM_CLASS (etgl_parent_class)->realize)
- GNOME_CANVAS_ITEM_CLASS (etgl_parent_class)->realize (item);
-
- etgl->item = E_TABLE_ITEM(gnome_canvas_item_new (
- GNOME_CANVAS_GROUP(etgl),
- e_table_item_get_type (),
- "ETableHeader", E_TABLE_GROUP(etgl)->header,
- "ETableModel", etgl->ets,
- "alternating_row_colors", etgl->alternating_row_colors,
- "horizontal_draw_grid", etgl->horizontal_draw_grid,
- "vertical_draw_grid", etgl->vertical_draw_grid,
- "drawfocus", etgl->draw_focus,
- "cursor_mode", etgl->cursor_mode,
- "minimum_width", etgl->minimum_width,
- "length_threshold", etgl->length_threshold,
- "selection_model", etgl->selection_model,
- "uniform_row_height", etgl->uniform_row_height,
- NULL));
-
- etgl->etgl_cursor_change_id = g_signal_connect (etgl->item,
- "cursor_change",
- G_CALLBACK(etgl_cursor_change),
- etgl);
- etgl->etgl_cursor_activated_id = g_signal_connect (etgl->item,
- "cursor_activated",
- G_CALLBACK(etgl_cursor_activated),
- etgl);
- etgl->etgl_double_click_id = g_signal_connect (etgl->item,
- "double_click",
- G_CALLBACK(etgl_double_click),
- etgl);
-
- etgl->etgl_right_click_id = g_signal_connect (etgl->item,
- "right_click",
- G_CALLBACK(etgl_right_click),
- etgl);
- etgl->etgl_click_id = g_signal_connect (etgl->item,
- "click",
- G_CALLBACK(etgl_click),
- etgl);
- etgl->etgl_key_press_id = g_signal_connect (etgl->item,
- "key_press",
- G_CALLBACK(etgl_key_press),
- etgl);
- etgl->etgl_start_drag_id = g_signal_connect (etgl->item,
- "start_drag",
- G_CALLBACK(etgl_start_drag),
- etgl);
-
- e_canvas_item_request_reflow(item);
-}
-
-static void
-etgl_add (ETableGroup *etg, gint row)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- if (E_IS_TABLE_SUBSET_VARIABLE(etgl->ets)) {
- e_table_subset_variable_add (E_TABLE_SUBSET_VARIABLE(etgl->ets), row);
- }
-}
-
-static void
-etgl_add_array (ETableGroup *etg, const gint *array, gint count)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- if (E_IS_TABLE_SUBSET_VARIABLE(etgl->ets)) {
- e_table_subset_variable_add_array (E_TABLE_SUBSET_VARIABLE(etgl->ets), array, count);
- }
-}
-
-static void
-etgl_add_all (ETableGroup *etg)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- if (E_IS_TABLE_SUBSET_VARIABLE(etgl->ets)) {
- e_table_subset_variable_add_all (E_TABLE_SUBSET_VARIABLE(etgl->ets));
- }
-}
-
-static gboolean
-etgl_remove (ETableGroup *etg, gint row)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- if (E_IS_TABLE_SUBSET_VARIABLE(etgl->ets)) {
- return e_table_subset_variable_remove (E_TABLE_SUBSET_VARIABLE(etgl->ets), row);
- }
- return FALSE;
-}
-
-static void
-etgl_increment (ETableGroup *etg, gint position, gint amount)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- if (E_IS_TABLE_SUBSET_VARIABLE(etgl->ets)) {
- e_table_subset_variable_increment (E_TABLE_SUBSET_VARIABLE(etgl->ets), position, amount);
- }
-}
-
-static void
-etgl_decrement (ETableGroup *etg, gint position, gint amount)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- if (E_IS_TABLE_SUBSET_VARIABLE(etgl->ets)) {
- e_table_subset_variable_decrement (E_TABLE_SUBSET_VARIABLE(etgl->ets), position, amount);
- }
-}
-
-static int
-etgl_row_count (ETableGroup *etg)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- return e_table_model_row_count(E_TABLE_MODEL(etgl->ets));
-}
-
-static void
-etgl_set_focus (ETableGroup *etg, EFocus direction, gint view_col)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- if (direction == E_FOCUS_END) {
- e_table_item_set_cursor (etgl->item, view_col, e_table_model_row_count(E_TABLE_MODEL(etgl->ets)) - 1);
- } else {
- e_table_item_set_cursor (etgl->item, view_col, 0);
- }
-}
-
-static gint
-etgl_get_focus_column (ETableGroup *etg)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- return e_table_item_get_focused_column (etgl->item);
-}
-
-static EPrintable *
-etgl_get_printable (ETableGroup *etg)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- return e_table_item_get_printable (etgl->item);
-}
-
-static void
-etgl_compute_location (ETableGroup *etg, int *x, int *y, int *row, int *col)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- e_table_item_compute_location (etgl->item, x, y, row, col);
-}
-
-static void
-etgl_get_cell_geometry (ETableGroup *etg, int *row, int *col, int *x, int *y, int *width, int *height)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg);
-
- e_table_item_get_cell_geometry (etgl->item, row, col, x, y, width, height);
-}
-
-static void
-etgl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ETableGroup *etg = E_TABLE_GROUP (object);
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (object);
-
- switch (prop_id) {
- case PROP_FROZEN:
- etg->frozen = g_value_get_boolean (value);
- break;
- case PROP_MINIMUM_WIDTH:
- case PROP_WIDTH:
- etgl->minimum_width = g_value_get_double (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "minimum_width", etgl->minimum_width,
- NULL);
- }
- break;
- case PROP_LENGTH_THRESHOLD:
- etgl->length_threshold = g_value_get_int (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "length_threshold", etgl->length_threshold,
- NULL);
- }
- break;
- case PROP_SELECTION_MODEL:
- if (etgl->selection_model)
- g_object_unref(etgl->selection_model);
- etgl->selection_model = E_SELECTION_MODEL(g_value_get_object (value));
- if (etgl->selection_model) {
- g_object_ref(etgl->selection_model);
- }
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "selection_model", etgl->selection_model,
- NULL);
- }
- break;
-
- case PROP_UNIFORM_ROW_HEIGHT:
- etgl->uniform_row_height = g_value_get_boolean (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "uniform_row_height", etgl->uniform_row_height,
- NULL);
- }
- break;
-
- case PROP_TABLE_ALTERNATING_ROW_COLORS:
- etgl->alternating_row_colors = g_value_get_boolean (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "alternating_row_colors", etgl->alternating_row_colors,
- NULL);
- }
- break;
-
- case PROP_TABLE_HORIZONTAL_DRAW_GRID:
- etgl->horizontal_draw_grid = g_value_get_boolean (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "horizontal_draw_grid", etgl->horizontal_draw_grid,
- NULL);
- }
- break;
-
- case PROP_TABLE_VERTICAL_DRAW_GRID:
- etgl->vertical_draw_grid = g_value_get_boolean (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "vertical_draw_grid", etgl->vertical_draw_grid,
- NULL);
- }
- break;
-
- case PROP_TABLE_DRAW_FOCUS:
- etgl->draw_focus = g_value_get_boolean (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "drawfocus", etgl->draw_focus,
- NULL);
- }
- break;
-
- case PROP_CURSOR_MODE:
- etgl->cursor_mode = g_value_get_int (value);
- if (etgl->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etgl->item),
- "cursor_mode", etgl->cursor_mode,
- NULL);
- }
- break;
- default:
- break;
- }
-}
-
-static void
-etgl_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableGroup *etg = E_TABLE_GROUP (object);
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (object);
-
- switch (prop_id) {
- case PROP_FROZEN:
- g_value_set_boolean (value, etg->frozen);
- break;
- case PROP_HEIGHT:
- g_value_set_double (value, etgl->height);
- break;
- case PROP_WIDTH:
- g_value_set_double (value, etgl->width);
- break;
- case PROP_MINIMUM_WIDTH:
- g_value_set_double (value, etgl->minimum_width);
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- g_value_set_boolean (value, etgl->uniform_row_height);
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-etgl_class_init (GObjectClass *object_class)
-{
- GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
- ETableGroupClass *e_group_class = E_TABLE_GROUP_CLASS(object_class);
-
- object_class->dispose = etgl_dispose;
- object_class->set_property = etgl_set_property;
- object_class->get_property = etgl_get_property;
-
- item_class->realize = etgl_realize;
-
- etgl_parent_class = g_type_class_ref (PARENT_TYPE);
-
- e_group_class->add = etgl_add;
- e_group_class->add_array = etgl_add_array;
- e_group_class->add_all = etgl_add_all;
- e_group_class->remove = etgl_remove;
- e_group_class->increment = etgl_increment;
- e_group_class->decrement = etgl_decrement;
- e_group_class->row_count = etgl_row_count;
- e_group_class->set_focus = etgl_set_focus;
- e_group_class->get_focus_column = etgl_get_focus_column;
- e_group_class->get_printable = etgl_get_printable;
- e_group_class->compute_location = etgl_compute_location;
- e_group_class->get_cell_geometry = etgl_get_cell_geometry;
-
- g_object_class_install_property (object_class, PROP_TABLE_ALTERNATING_ROW_COLORS,
- g_param_spec_boolean ("alternating_row_colors",
- _( "Alternating Row Colors" ),
- _( "Alternating Row Colors" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_HORIZONTAL_DRAW_GRID,
- g_param_spec_boolean ("horizontal_draw_grid",
- _( "Horizontal Draw Grid" ),
- _( "Horizontal Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_VERTICAL_DRAW_GRID,
- g_param_spec_boolean ("vertical_draw_grid",
- _( "Vertical Draw Grid" ),
- _( "Vertical Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_DRAW_FOCUS,
- g_param_spec_boolean ("drawfocus",
- _( "Draw focus" ),
- _( "Draw focus" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_MODE,
- g_param_spec_int ("cursor_mode",
- _( "Cursor mode" ),
- _( "Cursor mode" ),
- E_CURSOR_LINE, E_CURSOR_SPREADSHEET, E_CURSOR_LINE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_LENGTH_THRESHOLD,
- g_param_spec_int ("length_threshold",
- _( "Length Threshold" ),
- _( "Length Threshold" ),
- -1, G_MAXINT, 0,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_SELECTION_MODEL,
- g_param_spec_object ("selection_model",
- _( "Selection model" ),
- _( "Selection model" ),
- E_SELECTION_MODEL_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _( "Height" ),
- _( "Height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _( "Width" ),
- _( "Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MINIMUM_WIDTH,
- g_param_spec_double ("minimum_width",
- _( "Minimum width" ),
- _( "Minimum Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FROZEN,
- g_param_spec_boolean ("frozen",
- _( "Frozen" ),
- _( "Frozen" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_UNIFORM_ROW_HEIGHT,
- g_param_spec_boolean ("uniform_row_height",
- _( "Uniform row height" ),
- _( "Uniform row height" ),
- FALSE,
- G_PARAM_READWRITE));
-}
-
-static void
-etgl_init (GtkObject *object)
-{
- ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (object);
-
- etgl->width = 1;
- etgl->height = 1;
- etgl->minimum_width = 0;
-
- etgl->ets = NULL;
- etgl->item = NULL;
-
- etgl->etgl_cursor_change_id = 0;
- etgl->etgl_cursor_activated_id = 0;
- etgl->etgl_double_click_id = 0;
- etgl->etgl_right_click_id = 0;
- etgl->etgl_click_id = 0;
- etgl->etgl_key_press_id = 0;
- etgl->etgl_start_drag_id = 0;
-
- etgl->alternating_row_colors = 1;
- etgl->horizontal_draw_grid = 1;
- etgl->vertical_draw_grid = 1;
- etgl->draw_focus = 1;
- etgl->cursor_mode = E_CURSOR_SIMPLE;
- etgl->length_threshold = -1;
-
- etgl->selection_model = NULL;
- etgl->uniform_row_height = FALSE;
-
- e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM(object), etgl_reflow);
-}
-
-E_MAKE_TYPE (e_table_group_leaf, "ETableGroupLeaf", ETableGroupLeaf, etgl_class_init, etgl_init, PARENT_TYPE)
diff --git a/widgets/table/e-table-group-leaf.h b/widgets/table/e-table-group-leaf.h
deleted file mode 100644
index 74fdfd8c03..0000000000
--- a/widgets/table/e-table-group-leaf.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-group-leaf.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_GROUP_LEAF_H_
-#define _E_TABLE_GROUP_LEAF_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-table-group.h>
-#include <gal/e-table/e-table-subset.h>
-#include <gal/e-table/e-table-item.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_GROUP_LEAF_TYPE (e_table_group_leaf_get_type ())
-#define E_TABLE_GROUP_LEAF(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_GROUP_LEAF_TYPE, ETableGroupLeaf))
-#define E_TABLE_GROUP_LEAF_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_GROUP_LEAF_TYPE, ETableGroupLeafClass))
-#define E_IS_TABLE_GROUP_LEAF(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_GROUP_LEAF_TYPE))
-#define E_IS_TABLE_GROUP_LEAF_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_GROUP_LEAF_TYPE))
-
-typedef struct {
- ETableGroup group;
-
- /*
- * Item.
- */
- ETableItem *item;
-
- gdouble height;
- gdouble width;
- gdouble minimum_width;
-
- int length_threshold;
-
- ETableSubset *ets;
- guint is_grouped : 1;
-
- guint alternating_row_colors : 1;
- guint horizontal_draw_grid : 1;
- guint vertical_draw_grid : 1;
- guint draw_focus : 1;
- guint uniform_row_height : 1;
- ECursorMode cursor_mode;
-
- int etgl_cursor_change_id;
- int etgl_cursor_activated_id;
- int etgl_double_click_id;
- int etgl_right_click_id;
- int etgl_click_id;
- int etgl_key_press_id;
- int etgl_start_drag_id;
-
- ESelectionModel *selection_model;
-} ETableGroupLeaf;
-
-typedef struct {
- ETableGroupClass parent_class;
-} ETableGroupLeafClass;
-
-ETableGroup *e_table_group_leaf_new (GnomeCanvasGroup *parent,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model,
- ETableSortInfo *sort_info);
-GType e_table_group_leaf_get_type (void);
-
-
-G_END_DECLS
-
-#endif /* _E_TABLE_GROUP_LEAF_H_ */
-
diff --git a/widgets/table/e-table-group.c b/widgets/table/e-table-group.c
deleted file mode 100644
index 5bc8841cb4..0000000000
--- a/widgets/table/e-table-group.c
+++ /dev/null
@@ -1,712 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-group.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtksignal.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include "e-table-group.h"
-#include "e-table-group-container.h"
-#include "e-table-group-leaf.h"
-#include "e-table-item.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE gnome_canvas_group_get_type ()
-
-#define ETG_CLASS(e) (E_TABLE_GROUP_CLASS(GTK_OBJECT_GET_CLASS(e)))
-
-static GnomeCanvasGroupClass *etg_parent_class;
-
-enum {
- CURSOR_CHANGE,
- CURSOR_ACTIVATED,
- DOUBLE_CLICK,
- RIGHT_CLICK,
- CLICK,
- KEY_PRESS,
- START_DRAG,
- LAST_SIGNAL
-};
-
-static guint etg_signals [LAST_SIGNAL] = { 0, };
-
-static gboolean etg_get_focus (ETableGroup *etg);
-
-static void
-etg_dispose (GObject *object)
-{
- ETableGroup *etg = E_TABLE_GROUP(object);
-
- if (etg->header) {
- g_object_unref (etg->header);
- etg->header = NULL;
- }
-
- if (etg->full_header) {
- g_object_unref (etg->full_header);
- etg->full_header = NULL;
- }
-
- if (etg->model) {
- g_object_unref (etg->model);
- etg->model = NULL;
- }
-
- if (G_OBJECT_CLASS (etg_parent_class)->dispose)
- G_OBJECT_CLASS (etg_parent_class)->dispose (object);
-}
-
-/**
- * e_table_group_new
- * @parent: The %GnomeCanvasGroup to create a child of.
- * @full_header: The full header of the %ETable.
- * @header: The current header of the %ETable.
- * @model: The %ETableModel of the %ETable.
- * @sort_info: The %ETableSortInfo of the %ETable.
- * @n: The grouping information object to group by.
- *
- * %ETableGroup is a collection of rows of an %ETable. It's a
- * %GnomeCanvasItem. There are two different forms. If n < the
- * number of groupings in the given %ETableSortInfo, then the
- * %ETableGroup will need to contain other %ETableGroups, thus it
- * creates an %ETableGroupContainer. Otherwise, it will just contain
- * an %ETableItem, and thus it creates an %ETableGroupLeaf.
- *
- * Returns: The new %ETableGroup.
- */
-ETableGroup *
-e_table_group_new (GnomeCanvasGroup *parent,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model,
- ETableSortInfo *sort_info,
- int n)
-{
- g_return_val_if_fail (model != NULL, NULL);
-
- if (n < e_table_sort_info_grouping_get_count(sort_info)) {
- return e_table_group_container_new (parent, full_header, header, model, sort_info, n);
- } else {
- return e_table_group_leaf_new (parent, full_header, header, model, sort_info);
- }
- return NULL;
-}
-
-/**
- * e_table_group_construct
- * @parent: The %GnomeCanvasGroup to create a child of.
- * @etg: The %ETableGroup to construct.
- * @full_header: The full header of the %ETable.
- * @header: The current header of the %ETable.
- * @model: The %ETableModel of the %ETable.
- *
- * This routine does the base construction of the %ETableGroup.
- */
-void
-e_table_group_construct (GnomeCanvasGroup *parent,
- ETableGroup *etg,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model)
-{
- etg->full_header = full_header;
- g_object_ref (etg->full_header);
- etg->header = header;
- g_object_ref (etg->header);
- etg->model = model;
- g_object_ref (etg->model);
- g_object_set (G_OBJECT (etg),
- "parent", parent,
- NULL);
-}
-
-/**
- * e_table_group_add
- * @etg: The %ETableGroup to add a row to
- * @row: The row to add.
- *
- * This routine adds the given row from the %ETableModel to this set
- * of rows.
- */
-void
-e_table_group_add (ETableGroup *etg,
- gint row)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->add != NULL);
- ETG_CLASS (etg)->add (etg, row);
-}
-
-/**
- * e_table_group_add_array
- * @etg: The %ETableGroup to add to
- * @array: The array to add.
- * @count: The number of times to add
- *
- * This routine adds all the rows in the array to this set of rows.
- * It assumes that the array is already sorted properly.
- */
-void
-e_table_group_add_array (ETableGroup *etg,
- const int *array,
- int count)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->add_array != NULL);
- ETG_CLASS (etg)->add_array (etg, array, count);
-}
-
-/**
- * e_table_group_add_all
- * @etg: The %ETableGroup to add to
- *
- * This routine adds all the rows from the %ETableModel to this set
- * of rows.
- */
-void
-e_table_group_add_all (ETableGroup *etg)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->add_all != NULL);
- ETG_CLASS (etg)->add_all (etg);
-}
-
-/**
- * e_table_group_remove
- * @etg: The %ETableGroup to remove a row from
- * @row: The row to remove.
- *
- * This routine removes the given row from the %ETableModel from this
- * set of rows.
- *
- * Returns: TRUE if the row was deleted and FALSE if the row was not
- * found.
- */
-gboolean
-e_table_group_remove (ETableGroup *etg,
- gint row)
-{
- g_return_val_if_fail (etg != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_GROUP (etg), FALSE);
-
- g_assert (ETG_CLASS (etg)->remove != NULL);
- return ETG_CLASS (etg)->remove (etg, row);
-}
-
-/**
- * e_table_group_increment
- * @etg: The %ETableGroup to increment
- * @position: The position to increment from
- * @amount: The amount to increment.
- *
- * This routine adds amount to all rows greater than or equal to
- * position. This is to handle when a row gets inserted into the
- * model.
- */
-void
-e_table_group_increment (ETableGroup *etg,
- gint position,
- gint amount)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->increment != NULL);
- ETG_CLASS (etg)->increment (etg, position, amount);
-}
-
-/**
- * e_table_group_increment
- * @etg: The %ETableGroup to decrement
- * @position: The position to decrement from
- * @amount: The amount to decrement
- *
- * This routine removes amount from all rows greater than or equal to
- * position. This is to handle when a row gets deleted from the
- * model.
- */
-void
-e_table_group_decrement (ETableGroup *etg,
- gint position,
- gint amount)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->decrement != NULL);
- ETG_CLASS (etg)->decrement (etg, position, amount);
-}
-
-/**
- * e_table_group_increment
- * @etg: The %ETableGroup to count
- *
- * This routine calculates the number of rows shown in this group.
- *
- * Returns: The number of rows.
- */
-gint
-e_table_group_row_count (ETableGroup *etg)
-{
- g_return_val_if_fail (etg != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_GROUP (etg), -1);
-
- g_assert (ETG_CLASS (etg)->row_count != NULL);
- return ETG_CLASS (etg)->row_count (etg);
-}
-
-/**
- * e_table_group_set_focus
- * @etg: The %ETableGroup to set
- * @direction: The direction the focus is coming from.
- * @view_col: The column to set the focus in.
- *
- * Sets the focus to this widget. Places the focus in the view column
- * coming from direction direction.
- */
-void
-e_table_group_set_focus (ETableGroup *etg,
- EFocus direction,
- gint view_col)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->set_focus != NULL);
- ETG_CLASS (etg)->set_focus (etg, direction, view_col);
-}
-
-/**
- * e_table_group_get_focus
- * @etg: The %ETableGroup to check
- *
- * Calculates if this group has the focus.
- *
- * Returns: TRUE if this group has the focus.
- */
-gboolean
-e_table_group_get_focus (ETableGroup *etg)
-{
- g_return_val_if_fail (etg != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_GROUP (etg), FALSE);
-
- g_assert (ETG_CLASS (etg)->get_focus != NULL);
- return ETG_CLASS (etg)->get_focus (etg);
-}
-
-/**
- * e_table_group_get_focus_column
- * @etg: The %ETableGroup to check
- *
- * Calculates which column in this group has the focus.
- *
- * Returns: The column index (view column).
- */
-gint
-e_table_group_get_focus_column (ETableGroup *etg)
-{
- g_return_val_if_fail (etg != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_GROUP (etg), -1);
-
- g_assert (ETG_CLASS (etg)->get_focus_column != NULL);
- return ETG_CLASS (etg)->get_focus_column (etg);
-}
-
-/**
- * e_table_group_get_printable
- * @etg: %ETableGroup which will be printed
- *
- * This routine creates and returns an %EPrintable that can be used to
- * print the given %ETableGroup.
- *
- * Returns: The %EPrintable.
- */
-EPrintable *
-e_table_group_get_printable (ETableGroup *etg)
-{
- g_return_val_if_fail (etg != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_GROUP (etg), NULL);
-
- g_assert (ETG_CLASS (etg)->get_printable != NULL);
- return ETG_CLASS (etg)->get_printable (etg);
-}
-
-/**
- * e_table_group_compute_location
- * @eti: %ETableGroup to look in.
- * @x: A pointer to the x location to find in the %ETableGroup.
- * @y: A pointer to the y location to find in the %ETableGroup.
- * @row: A pointer to the location to store the found row in.
- * @col: A pointer to the location to store the found col in.
- *
- * This routine locates the pixel location (*x, *y) in the
- * %ETableGroup. If that location is in the %ETableGroup, *row and
- * *col are set to the view row and column where it was found. If
- * that location is not in the %ETableGroup, the height of the
- * %ETableGroup is removed from the value y points to.
- */
-void
-e_table_group_compute_location (ETableGroup *etg, int *x, int *y, int *row, int *col)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->compute_location != NULL);
- ETG_CLASS (etg)->compute_location (etg, x, y, row, col);
-}
-
-/**
- * e_table_group_get_position
- * @eti: %ETableGroup to look in.
- * @x: A pointer to the location to store the found x location in.
- * @y: A pointer to the location to store the found y location in.
- * @row: A pointer to the row number to find.
- * @col: A pointer to the col number to find.
- *
- * This routine finds the view cell (row, col) in the #ETableGroup.
- * If that location is in the #ETableGroup *@x and *@y are set to the
- * upper left hand corner of the cell found. If that location is not
- * in the #ETableGroup, the number of rows in the #ETableGroup is
- * removed from the value row points to.
- */
-void
-e_table_group_get_cell_geometry (ETableGroup *etg,
- int *row,
- int *col,
- int *x,
- int *y,
- int *width,
- int *height)
-{
- g_return_if_fail (etg != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (etg));
-
- g_assert (ETG_CLASS (etg)->get_cell_geometry != NULL);
- ETG_CLASS (etg)->get_cell_geometry (etg, row, col, x, y, width, height);
-}
-
-/**
- * e_table_group_cursor_change
- * @eti: %ETableGroup to emit the signal on
- * @row: The new cursor row (model row)
- *
- * This routine emits the "cursor_change" signal.
- */
-void
-e_table_group_cursor_change (ETableGroup *e_table_group, gint row)
-{
- g_return_if_fail (e_table_group != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (e_table_group));
-
- g_signal_emit (e_table_group,
- etg_signals [CURSOR_CHANGE], 0,
- row);
-}
-
-/**
- * e_table_group_cursor_activated
- * @eti: %ETableGroup to emit the signal on
- * @row: The cursor row (model row)
- *
- * This routine emits the "cursor_activated" signal.
- */
-void
-e_table_group_cursor_activated (ETableGroup *e_table_group, gint row)
-{
- g_return_if_fail (e_table_group != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (e_table_group));
-
- g_signal_emit (e_table_group,
- etg_signals [CURSOR_ACTIVATED], 0,
- row);
-}
-
-/**
- * e_table_group_double_click
- * @eti: %ETableGroup to emit the signal on
- * @row: The row clicked on (model row)
- * @col: The col clicked on (model col)
- * @event: The event that caused this signal
- *
- * This routine emits the "double_click" signal.
- */
-void
-e_table_group_double_click (ETableGroup *e_table_group, gint row, gint col, GdkEvent *event)
-{
- g_return_if_fail (e_table_group != NULL);
- g_return_if_fail (E_IS_TABLE_GROUP (e_table_group));
-
- g_signal_emit (e_table_group,
- etg_signals [DOUBLE_CLICK], 0,
- row, col, event);
-}
-
-/**
- * e_table_group_right_click
- * @eti: %ETableGroup to emit the signal on
- * @row: The row clicked on (model row)
- * @col: The col clicked on (model col)
- * @event: The event that caused this signal
- *
- * This routine emits the "right_click" signal.
- */
-gint
-e_table_group_right_click (ETableGroup *e_table_group, gint row, gint col, GdkEvent *event)
-{
- gint return_val = 0;
-
- g_return_val_if_fail (e_table_group != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_GROUP (e_table_group), 0);
-
- g_signal_emit (e_table_group,
- etg_signals [RIGHT_CLICK], 0,
- row, col, event, &return_val);
-
- return return_val;
-}
-
-/**
- * e_table_group_click
- * @eti: %ETableGroup to emit the signal on
- * @row: The row clicked on (model row)
- * @col: The col clicked on (model col)
- * @event: The event that caused this signal
- *
- * This routine emits the "click" signal.
- */
-gint
-e_table_group_click (ETableGroup *e_table_group, gint row, gint col, GdkEvent *event)
-{
- gint return_val = 0;
-
- g_return_val_if_fail (e_table_group != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_GROUP (e_table_group), 0);
-
- g_signal_emit (e_table_group,
- etg_signals [CLICK], 0,
- row, col, event, &return_val);
-
- return return_val;
-}
-
-/**
- * e_table_group_key_press
- * @eti: %ETableGroup to emit the signal on
- * @row: The cursor row (model row)
- * @col: The cursor col (model col)
- * @event: The event that caused this signal
- *
- * This routine emits the "key_press" signal.
- */
-gint
-e_table_group_key_press (ETableGroup *e_table_group, gint row, gint col, GdkEvent *event)
-{
- gint return_val = 0;
-
- g_return_val_if_fail (e_table_group != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_GROUP (e_table_group), 0);
-
- g_signal_emit (e_table_group,
- etg_signals [KEY_PRESS], 0,
- row, col, event, &return_val);
-
- return return_val;
-}
-
-/**
- * e_table_group_start_drag
- * @eti: %ETableGroup to emit the signal on
- * @row: The cursor row (model row)
- * @col: The cursor col (model col)
- * @event: The event that caused this signal
- *
- * This routine emits the "start_drag" signal.
- */
-gint
-e_table_group_start_drag (ETableGroup *e_table_group, gint row, gint col, GdkEvent *event)
-{
- gint return_val = 0;
-
- g_return_val_if_fail (e_table_group != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_GROUP (e_table_group), 0);
-
- g_signal_emit (e_table_group,
- etg_signals [START_DRAG], 0,
- row, col, event, &return_val);
-
- return return_val;
-}
-
-/**
- * e_table_group_get_header
- * @eti: %ETableGroup to check
- *
- * This routine returns the %ETableGroup's header.
- *
- * Returns: The %ETableHeader.
- */
-ETableHeader *
-e_table_group_get_header (ETableGroup *etg)
-{
- g_return_val_if_fail (etg != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_GROUP (etg), NULL);
-
- return etg->header;
-}
-
-static int
-etg_event (GnomeCanvasItem *item, GdkEvent *event)
-{
- ETableGroup *etg = E_TABLE_GROUP (item);
- gboolean return_val = TRUE;
-
- switch (event->type) {
-
- case GDK_FOCUS_CHANGE:
- etg->has_focus = event->focus_change.in;
- return_val = FALSE;
-
- default:
- return_val = FALSE;
- }
- if (return_val == FALSE){
- if (GNOME_CANVAS_ITEM_CLASS(etg_parent_class)->event)
- return GNOME_CANVAS_ITEM_CLASS(etg_parent_class)->event (item, event);
- }
- return return_val;
-
-}
-
-static gboolean
-etg_get_focus (ETableGroup *etg)
-{
- return etg->has_focus;
-}
-
-static void
-etg_class_init (GObjectClass *object_class)
-{
- GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
- ETableGroupClass *klass = (ETableGroupClass *) object_class;
-
- object_class->dispose = etg_dispose;
-
- item_class->event = etg_event;
-
- klass->cursor_change = NULL;
- klass->cursor_activated = NULL;
- klass->double_click = NULL;
- klass->right_click = NULL;
- klass->click = NULL;
- klass->key_press = NULL;
- klass->start_drag = NULL;
-
- klass->add = NULL;
- klass->add_array = NULL;
- klass->add_all = NULL;
- klass->remove = NULL;
- klass->row_count = NULL;
- klass->increment = NULL;
- klass->decrement = NULL;
- klass->set_focus = NULL;
- klass->get_focus = etg_get_focus;
- klass->get_printable = NULL;
- klass->compute_location = NULL;
- klass->get_cell_geometry = NULL;
-
- etg_parent_class = g_type_class_ref (PARENT_TYPE);
-
- etg_signals [CURSOR_CHANGE] =
- g_signal_new ("cursor_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableGroupClass, cursor_change),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- etg_signals [CURSOR_ACTIVATED] =
- g_signal_new ("cursor_activated",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableGroupClass, cursor_activated),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- etg_signals [DOUBLE_CLICK] =
- g_signal_new ("double_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableGroupClass, double_click),
- NULL, NULL,
- e_marshal_NONE__INT_INT_BOXED,
- G_TYPE_NONE, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- etg_signals [RIGHT_CLICK] =
- g_signal_new ("right_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableGroupClass, right_click),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT, G_TYPE_INT, GDK_TYPE_EVENT);
-
- etg_signals [CLICK] =
- g_signal_new ("click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableGroupClass, click),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- etg_signals [KEY_PRESS] =
- g_signal_new ("key_press",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableGroupClass, key_press),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- etg_signals [START_DRAG] =
- g_signal_new ("start_drag",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableGroupClass, start_drag),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-}
-
-E_MAKE_TYPE (e_table_group, "ETableGroup", ETableGroup, etg_class_init, NULL, PARENT_TYPE)
diff --git a/widgets/table/e-table-group.h b/widgets/table/e-table-group.h
deleted file mode 100644
index 2ecd34efe1..0000000000
--- a/widgets/table/e-table-group.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-group.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_GROUP_H_
-#define _E_TABLE_GROUP_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-defines.h>
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-printable.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_GROUP_TYPE (e_table_group_get_type ())
-#define E_TABLE_GROUP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_GROUP_TYPE, ETableGroup))
-#define E_TABLE_GROUP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_GROUP_TYPE, ETableGroupClass))
-#define E_IS_TABLE_GROUP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_GROUP_TYPE))
-#define E_IS_TABLE_GROUP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_GROUP_TYPE))
-
-typedef struct {
- GnomeCanvasGroup group;
-
- /*
- * The full header.
- */
- ETableHeader *full_header;
- ETableHeader *header;
-
- /*
- * The model we pull data from.
- */
- ETableModel *model;
-
- /*
- * Whether we should add indentation and open/close markers,
- * or if we just act as containers of subtables.
- */
- guint transparent : 1;
-
- guint has_focus : 1;
-
- guint frozen : 1;
-} ETableGroup;
-
-typedef struct {
- GnomeCanvasGroupClass parent_class;
-
- /* Signals */
- void (*cursor_change) (ETableGroup *etg, int row);
- void (*cursor_activated) (ETableGroup *etg, int row);
- void (*double_click) (ETableGroup *etg, int row, int col, GdkEvent *event);
- gint (*right_click) (ETableGroup *etg, int row, int col, GdkEvent *event);
- gint (*click) (ETableGroup *etg, int row, int col, GdkEvent *event);
- gint (*key_press) (ETableGroup *etg, int row, int col, GdkEvent *event);
- gint (*start_drag) (ETableGroup *etg, int row, int col, GdkEvent *event);
-
- /* Virtual functions. */
- void (*add) (ETableGroup *etg, gint row);
- void (*add_array) (ETableGroup *etg, const int *array, int count);
- void (*add_all) (ETableGroup *etg);
- gboolean (*remove) (ETableGroup *etg, gint row);
- gint (*row_count) (ETableGroup *etg);
- void (*increment) (ETableGroup *etg, gint position, gint amount);
- void (*decrement) (ETableGroup *etg, gint position, gint amount);
- void (*set_focus) (ETableGroup *etg, EFocus direction, gint view_col);
- gboolean (*get_focus) (ETableGroup *etg);
- gint (*get_focus_column) (ETableGroup *etg);
- EPrintable *(*get_printable) (ETableGroup *etg);
- void (*compute_location) (ETableGroup *etg, int *x, int *y, int *row, int *col);
- void (*get_cell_geometry) (ETableGroup *etg, int *row, int *col, int *x, int *y, int *width, int *height);
-
-} ETableGroupClass;
-
-/* Virtual functions */
-void e_table_group_add (ETableGroup *etg,
- gint row);
-void e_table_group_add_array (ETableGroup *etg,
- const int *array,
- int count);
-void e_table_group_add_all (ETableGroup *etg);
-gboolean e_table_group_remove (ETableGroup *etg,
- gint row);
-void e_table_group_increment (ETableGroup *etg,
- gint position,
- gint amount);
-void e_table_group_decrement (ETableGroup *etg,
- gint position,
- gint amount);
-gint e_table_group_row_count (ETableGroup *etg);
-void e_table_group_set_focus (ETableGroup *etg,
- EFocus direction,
- gint view_col);
-gboolean e_table_group_get_focus (ETableGroup *etg);
-gint e_table_group_get_focus_column (ETableGroup *etg);
-ETableHeader *e_table_group_get_header (ETableGroup *etg);
-EPrintable *e_table_group_get_printable (ETableGroup *etg);
-void e_table_group_compute_location (ETableGroup *etg,
- int *x,
- int *y,
- int *row,
- int *col);
-void e_table_group_get_cell_geometry (ETableGroup *etg,
- int *row,
- int *col,
- int *x,
- int *y,
- int *width,
- int *height);
-ETableGroup *e_table_group_new (GnomeCanvasGroup *parent,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model,
- ETableSortInfo *sort_info,
- int n);
-void e_table_group_construct (GnomeCanvasGroup *parent,
- ETableGroup *etg,
- ETableHeader *full_header,
- ETableHeader *header,
- ETableModel *model);
-
-/* For emitting the signals */
-void e_table_group_cursor_change (ETableGroup *etg,
- gint row);
-void e_table_group_cursor_activated (ETableGroup *etg,
- gint row);
-void e_table_group_double_click (ETableGroup *etg,
- gint row,
- gint col,
- GdkEvent *event);
-gint e_table_group_right_click (ETableGroup *etg,
- gint row,
- gint col,
- GdkEvent *event);
-gint e_table_group_click (ETableGroup *etg,
- gint row,
- gint col,
- GdkEvent *event);
-gint e_table_group_key_press (ETableGroup *etg,
- gint row,
- gint col,
- GdkEvent *event);
-gint e_table_group_start_drag (ETableGroup *etg,
- gint row,
- gint col,
- GdkEvent *event);
-GType e_table_group_get_type (void);
-
-typedef void (*ETableGroupLeafFn) (void *e_table_item, void *closure);
-void e_table_group_apply_to_leafs (ETableGroup *etg,
- ETableGroupLeafFn fn,
- void *closure);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_GROUP_H_ */
diff --git a/widgets/table/e-table-header-item.c b/widgets/table/e-table-header-item.c
deleted file mode 100644
index 44d54dd4e3..0000000000
--- a/widgets/table/e-table-header-item.c
+++ /dev/null
@@ -1,1896 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-header-item.c
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-table-header-item.h"
-
-#include <string.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkdnd.h>
-#include <gtk/gtkimage.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <libgnomecanvas/gnome-canvas-util.h>
-#include <libgnomecanvas/gnome-canvas-polygon.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gdk/gdkkeysyms.h>
-#include "gal/widgets/e-cursors.h"
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include "gal/util/e-marshal.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-popup-menu.h"
-#include "gal/widgets/e-gui-utils.h"
-#include "e-table-header.h"
-#include "e-table-header-utils.h"
-#include "e-table-col-dnd.h"
-#include "e-table-defines.h"
-#include "e-table-field-chooser-dialog.h"
-#include "e-table-config.h"
-#include "e-table.h"
-
-#include "add-col.xpm"
-#include "remove-col.xpm"
-#include "arrow-up.xpm"
-#include "arrow-down.xpm"
-
-enum {
- BUTTON_PRESSED,
- LAST_SIGNAL
-};
-
-static guint ethi_signals [LAST_SIGNAL] = { 0, };
-
-#define ARROW_DOWN_HEIGHT 16
-#define ARROW_PTR 7
-
-/* Defines the tolerance for proximity of the column division to the cursor position */
-#define TOLERANCE 4
-
-#define ETHI_RESIZING(x) ((x)->resize_col != -1)
-
-#define PARENT_OBJECT_TYPE gnome_canvas_item_get_type ()
-
-#define ELEMENTS(x) (sizeof (x) / sizeof (x[0]))
-#define d(x)
-
-static GnomeCanvasItemClass *ethi_parent_class;
-
-static void ethi_drop_table_header (ETableHeaderItem *ethi);
-
-/*
- * They display the arrows for the drop location.
- */
-
-static GtkWidget *arrow_up, *arrow_down;
-
-/*
- * DnD icons
- */
-static GdkColormap *dnd_colormap;
-static GdkPixmap *remove_col_pixmap, *remove_col_mask;
-static GdkPixmap *add_col_pixmap, *add_col_mask;
-
-enum {
- PROP_0,
- PROP_TABLE_HEADER,
- PROP_FULL_HEADER,
- PROP_DND_CODE,
- PROP_TABLE_FONTSET,
- PROP_SORT_INFO,
- PROP_TABLE,
- PROP_TREE
-};
-
-enum {
- ET_SCROLL_UP = 1 << 0,
- ET_SCROLL_DOWN = 1 << 1,
- ET_SCROLL_LEFT = 1 << 2,
- ET_SCROLL_RIGHT = 1 << 3
-};
-
-static void scroll_off (ETableHeaderItem *ethi);
-static void scroll_on (ETableHeaderItem *ethi, guint scroll_direction);
-
-static void
-ethi_dispose (GObject *object){
- ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (object);
-
- ethi_drop_table_header (ethi);
-
- scroll_off (ethi);
-
- if (ethi->dnd_code) {
- g_free (ethi->dnd_code);
- ethi->dnd_code = NULL;
- }
-
- if (ethi->sort_info) {
- if (ethi->sort_info_changed_id)
- g_signal_handler_disconnect (ethi->sort_info, ethi->sort_info_changed_id);
- if (ethi->group_info_changed_id)
- g_signal_handler_disconnect (ethi->sort_info, ethi->group_info_changed_id);
- g_object_unref (ethi->sort_info);
- ethi->sort_info = NULL;
- }
-
- if (ethi->full_header)
- g_object_unref (ethi->full_header);
- ethi->full_header = NULL;
-
- if (ethi->config)
- g_object_unref (ethi->config);
- ethi->config = NULL;
-
- if (G_OBJECT_CLASS (ethi_parent_class)->dispose)
- (*G_OBJECT_CLASS (ethi_parent_class)->dispose) (object);
-}
-
-static int
-e_table_header_item_get_height (ETableHeaderItem *ethi)
-{
- ETableHeader *eth;
- int numcols, col;
- int maxheight;
- GtkStyle *style;
-
- g_return_val_if_fail (ethi != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER_ITEM (ethi), 0);
-
- eth = ethi->eth;
- numcols = e_table_header_count (eth);
-
- maxheight = 0;
-
- style = GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas)->style;
-
- for (col = 0; col < numcols; col++) {
- ETableCol *ecol = e_table_header_get_column (eth, col);
- int height;
-
- height = e_table_header_compute_height (ecol,
- GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas));
-
- if (height > maxheight)
- maxheight = height;
- }
-
- return maxheight;
-}
-
-static void
-ethi_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
-{
- ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (item);
-
- double i2c [6];
- ArtPoint c1, c2, i1, i2;
-
- if (GNOME_CANVAS_ITEM_CLASS (ethi_parent_class)->update)
- (*GNOME_CANVAS_ITEM_CLASS (ethi_parent_class)->update)(item, affine, clip_path, flags);
-
- if (ethi->sort_info)
- ethi->group_indent_width = e_table_sort_info_grouping_get_count(ethi->sort_info) * GROUP_INDENT;
- else
- ethi->group_indent_width = 0;
-
- ethi->width = e_table_header_total_width (ethi->eth) + ethi->group_indent_width;
-
- i1.x = i1.y = 0;
- i2.x = ethi->width;
- i2.y = ethi->height;
-
- gnome_canvas_item_i2c_affine (item, i2c);
- art_affine_point (&c1, &i1, i2c);
- art_affine_point (&c2, &i2, i2c);
-
- if (item->x1 != c1.x ||
- item->y1 != c1.y ||
- item->x2 != c2.x ||
- item->y2 != c2.y)
- {
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2);
- item->x1 = c1.x;
- item->y1 = c1.y;
- item->x2 = c2.x;
- item->y2 = c2.y;
-#ifndef NO_WARNINGS
-#warning FOO BAA
-#endif
-#if 0
- gnome_canvas_group_child_bounds (GNOME_CANVAS_GROUP (item->parent), item);
-#endif
- }
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2);
-}
-
-static void
-ethi_font_set (ETableHeaderItem *ethi, GdkFont *font)
-{
- if (ethi->font)
- gdk_font_unref (ethi->font);
-
- ethi->font = font;
- gdk_font_ref (font);
-
- ethi->height = e_table_header_item_get_height (ethi);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(ethi));
-}
-
-static void
-ethi_font_load (ETableHeaderItem *ethi, const char *fontname)
-{
- GdkFont *font = NULL;
-
- if (fontname != NULL)
- font = gdk_fontset_load (fontname);
-
- if (font == NULL) {
- font = gtk_style_get_font (GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas)->style);
- gdk_font_ref (font);
- }
-
- ethi_font_set (ethi, font);
- gdk_font_unref (font);
-}
-
-static void
-ethi_drop_table_header (ETableHeaderItem *ethi)
-{
- GObject *header;
-
- if (!ethi->eth)
- return;
-
- header = G_OBJECT (ethi->eth);
- g_signal_handler_disconnect (header, ethi->structure_change_id);
- g_signal_handler_disconnect (header, ethi->dimension_change_id);
-
- g_object_unref (header);
- ethi->eth = NULL;
- ethi->width = 0;
-}
-
-static void
-structure_changed (ETableHeader *header, ETableHeaderItem *ethi)
-{
- gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(ethi));
-}
-
-static void
-dimension_changed (ETableHeader *header, int col, ETableHeaderItem *ethi)
-{
- gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(ethi));
-}
-
-static void
-ethi_add_table_header (ETableHeaderItem *ethi, ETableHeader *header)
-{
- ethi->eth = header;
- g_object_ref (ethi->eth);
-
- ethi->height = e_table_header_item_get_height (ethi);
-
- ethi->structure_change_id = g_signal_connect (
- header, "structure_change",
- G_CALLBACK (structure_changed), ethi);
- ethi->dimension_change_id = g_signal_connect (
- header, "dimension_change",
- G_CALLBACK (dimension_changed), ethi);
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(ethi));
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(ethi));
-}
-
-static void
-ethi_sort_info_changed (ETableSortInfo *sort_info, ETableHeaderItem *ethi)
-{
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(ethi));
-}
-
-static void
-ethi_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ETableHeaderItem *ethi;
-
- item = GNOME_CANVAS_ITEM (object);
- ethi = E_TABLE_HEADER_ITEM (object);
-
- switch (prop_id){
- case PROP_TABLE_HEADER:
- ethi_drop_table_header (ethi);
- ethi_add_table_header (ethi, E_TABLE_HEADER(g_value_get_object (value)));
- break;
-
- case PROP_FULL_HEADER:
- if (ethi->full_header)
- g_object_unref(ethi->full_header);
- ethi->full_header = E_TABLE_HEADER(g_value_get_object (value));
- if (ethi->full_header)
- g_object_ref(ethi->full_header);
- break;
-
- case PROP_DND_CODE:
- g_free(ethi->dnd_code);
- ethi->dnd_code = g_strdup (g_value_get_string (value));
- break;
-
- case PROP_TABLE_FONTSET:
- ethi_font_load (ethi, g_value_get_string (value));
- break;
-
- case PROP_SORT_INFO:
- if (ethi->sort_info){
- if (ethi->sort_info_changed_id)
- g_signal_handler_disconnect (
- ethi->sort_info,
- ethi->sort_info_changed_id);
-
- if (ethi->group_info_changed_id)
- g_signal_handler_disconnect (
- ethi->sort_info,
- ethi->group_info_changed_id);
- g_object_unref (ethi->sort_info);
- }
- ethi->sort_info = g_value_get_object (value);
- g_object_ref (ethi->sort_info);
- ethi->sort_info_changed_id =
- g_signal_connect (
- ethi->sort_info, "sort_info_changed",
- G_CALLBACK (ethi_sort_info_changed), ethi);
- ethi->group_info_changed_id =
- g_signal_connect (
- ethi->sort_info, "group_info_changed",
- G_CALLBACK(ethi_sort_info_changed), ethi);
- break;
- case PROP_TABLE:
- if (g_value_get_object (value))
- ethi->table = E_TABLE(g_value_get_object (value));
- else
- ethi->table = NULL;
- break;
- case PROP_TREE:
- if (g_value_get_object (value))
- ethi->tree = E_TREE(g_value_get_object (value));
- else
- ethi->tree = NULL;
- break;
- }
- gnome_canvas_item_request_update(item);
-}
-
-static void
-ethi_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ETableHeaderItem *ethi;
-
- ethi = E_TABLE_HEADER_ITEM (object);
-
- switch (prop_id){
- case PROP_FULL_HEADER:
- g_value_set_object (value, ethi->full_header);
- break;
- case PROP_DND_CODE:
- g_value_set_string (value, g_strdup (ethi->dnd_code));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static int
-ethi_find_col_by_x (ETableHeaderItem *ethi, int x)
-{
- const int cols = e_table_header_count (ethi->eth);
- int x1 = 0;
- int col;
-
- d(g_print ("%s:%d: x = %d, x1 = %d\n", __FUNCTION__, __LINE__, x, x1));
-
- x1 += ethi->group_indent_width;
-
- if (x < x1) {
- d(g_print ("%s:%d: Returning 0\n", __FUNCTION__, __LINE__));
- return 0;
- }
-
- for (col = 0; col < cols; col++){
- ETableCol *ecol = e_table_header_get_column (ethi->eth, col);
-
- if ((x >= x1) && (x <= x1 + ecol->width)) {
- d(g_print ("%s:%d: Returning %d\n", __FUNCTION__, __LINE__, col));
- return col;
- }
-
- x1 += ecol->width;
- }
- d(g_print ("%s:%d: Returning %d\n", __FUNCTION__, __LINE__, cols - 1));
- return cols - 1;
-}
-
-static int
-ethi_find_col_by_x_nearest (ETableHeaderItem *ethi, int x)
-{
- const int cols = e_table_header_count (ethi->eth);
- int x1 = 0;
- int col;
-
- x1 += ethi->group_indent_width;
-
- if (x < x1)
- return 0;
-
- for (col = 0; col < cols; col++){
- ETableCol *ecol = e_table_header_get_column (ethi->eth, col);
-
- x1 += (ecol->width / 2);
-
- if (x <= x1)
- return col;
-
- x1 += (ecol->width + 1) / 2;
- }
- return col;
-}
-
-static void
-ethi_remove_drop_marker (ETableHeaderItem *ethi)
-{
- if (ethi->drag_mark == -1)
- return;
-
- gtk_widget_hide (arrow_up);
- gtk_widget_hide (arrow_down);
-
- ethi->drag_mark = -1;
-}
-
-static GtkWidget *
-make_shaped_window_from_xpm (const char **xpm)
-{
- GdkPixbuf *pixbuf;
- GdkPixmap *pixmap;
- GdkBitmap *bitmap;
- GtkWidget *win, *pix;
-
- pixbuf = gdk_pixbuf_new_from_xpm_data (xpm);
- gdk_pixbuf_render_pixmap_and_mask (pixbuf, &pixmap, &bitmap, 128);
- gdk_pixbuf_unref (pixbuf);
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
- win = gtk_window_new (GTK_WINDOW_POPUP);
-
- pix = gtk_image_new_from_pixmap (pixmap, bitmap);
- gtk_widget_realize (win);
- gtk_container_add (GTK_CONTAINER (win), pix);
- gtk_widget_shape_combine_mask (win, bitmap, 0, 0);
- gtk_widget_pop_colormap ();
-
- gdk_pixmap_unref (pixmap);
- gdk_bitmap_unref (bitmap);
-
- return win;
-}
-
-static void
-ethi_add_drop_marker (ETableHeaderItem *ethi, int col, gboolean recreate)
-{
- int rx, ry;
- int x;
-
- if (!recreate && ethi->drag_mark == col)
- return;
-
- ethi->drag_mark = col;
-
- x = e_table_header_col_diff (ethi->eth, 0, col);
- if (col > 0)
- x += ethi->group_indent_width;
-
- if (!arrow_up){
- arrow_up = make_shaped_window_from_xpm (arrow_up_xpm);
- arrow_down = make_shaped_window_from_xpm (arrow_down_xpm);
- }
-
- gdk_window_get_origin (
- GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas)->window,
- &rx, &ry);
-
- rx -= gtk_layout_get_hadjustment (GTK_LAYOUT (GNOME_CANVAS_ITEM (ethi)->canvas))->value;
- ry -= gtk_layout_get_vadjustment (GTK_LAYOUT (GNOME_CANVAS_ITEM (ethi)->canvas))->value;
-
- gtk_widget_set_uposition (arrow_down, rx + x - ARROW_PTR, ry - ARROW_DOWN_HEIGHT);
- gtk_widget_show_all (arrow_down);
-
- gtk_widget_set_uposition (arrow_up, rx + x - ARROW_PTR, ry + ethi->height);
- gtk_widget_show_all (arrow_up);
-}
-
-#define gray50_width 2
-#define gray50_height 2
-static char gray50_bits [] = {
- 0x02, 0x01, };
-
-static void
-ethi_add_destroy_marker (ETableHeaderItem *ethi)
-{
- double x1;
-
- if (ethi->remove_item)
- gtk_object_destroy (GTK_OBJECT (ethi->remove_item));
-
- if (!ethi->stipple)
- ethi->stipple = gdk_bitmap_create_from_data (
- NULL, gray50_bits, gray50_width, gray50_height);
-
- x1 = (double) e_table_header_col_diff (ethi->eth, 0, ethi->drag_col);
- if (ethi->drag_col > 0)
- x1 += ethi->group_indent_width;
-
- ethi->remove_item = gnome_canvas_item_new (
- GNOME_CANVAS_GROUP (GNOME_CANVAS_ITEM (ethi)->canvas->root),
- gnome_canvas_rect_get_type (),
- "x1", x1 + 1,
- "y1", (double) 1,
- "x2", (double) x1 + e_table_header_col_diff (
- ethi->eth, ethi->drag_col, ethi->drag_col+1) - 2,
-
- "y2", (double) ethi->height - 2,
- "fill_color", "red",
- "fill_stipple", ethi->stipple,
- NULL);
-}
-
-static void
-ethi_remove_destroy_marker (ETableHeaderItem *ethi)
-{
- if (!ethi->remove_item)
- return;
-
- gtk_object_destroy (GTK_OBJECT (ethi->remove_item));
- ethi->remove_item = NULL;
-}
-
-#if 0
-static gboolean
-moved (ETableHeaderItem *ethi, guint col, guint model_col)
-{
- if (col == -1)
- return TRUE;
- ecol = e_table_header_get_column (ethi->eth, col);
- if (ecol->col_idx == model_col)
- return FALSE;
- if (col > 0) {
- ecol = e_table_header_get_column (ethi->eth, col - 1);
- if (ecol->col_idx == model_col)
- return FALSE;
- }
- return TRUE;
-}
-#endif
-
-static void
-do_drag_motion(ETableHeaderItem *ethi,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- gboolean recreate)
-{
- d(g_print("In do_drag_motion\n"));
- d(g_print("x = %d, y = %d, ethi->width = %d, ethi->height = %d\n", x, y, ethi->width, ethi->height));
-
- if ((x >= 0) && (x <= (ethi->width)) &&
- (y >= 0) && (y <= (ethi->height))){
- int col;
- d(g_print("In header\n"));
-
- col = ethi_find_col_by_x_nearest (ethi, x);
-
- if (ethi->drag_col != -1 && (col == ethi->drag_col || col == ethi->drag_col + 1)) {
- if (ethi->drag_col != -1)
- ethi_remove_destroy_marker (ethi);
-
- ethi_remove_drop_marker (ethi);
- gdk_drag_status (context, context->suggested_action, time);
- }
- else if (col != -1){
- if (ethi->drag_col != -1)
- ethi_remove_destroy_marker (ethi);
-
- ethi_add_drop_marker (ethi, col, recreate);
- gdk_drag_status (context, context->suggested_action, time);
- } else {
- ethi_remove_drop_marker (ethi);
- if (ethi->drag_col != -1)
- ethi_add_destroy_marker (ethi);
- }
- } else {
- ethi_remove_drop_marker (ethi);
- if (ethi->drag_col != -1)
- ethi_add_destroy_marker (ethi);
- }
-}
-
-static gboolean
-scroll_timeout (gpointer data)
-{
- ETableHeaderItem *ethi = data;
- int dx = 0;
- GtkAdjustment *h, *v;
- double value;
-
- if (ethi->scroll_direction & ET_SCROLL_RIGHT)
- dx += 20;
- if (ethi->scroll_direction & ET_SCROLL_LEFT)
- dx -= 20;
-
- h = GTK_LAYOUT(GNOME_CANVAS_ITEM (ethi)->canvas)->hadjustment;
- v = GTK_LAYOUT(GNOME_CANVAS_ITEM (ethi)->canvas)->vadjustment;
-
- value = h->value;
-
- gtk_adjustment_set_value(h, CLAMP(h->value + dx, h->lower, h->upper - h->page_size));
-
- if (h->value != value)
- do_drag_motion(ethi,
- ethi->last_drop_context,
- ethi->last_drop_x + h->value,
- ethi->last_drop_y + v->value,
- ethi->last_drop_time,
- TRUE);
-
- return TRUE;
-}
-
-static void
-scroll_on (ETableHeaderItem *ethi, guint scroll_direction)
-{
- if (ethi->scroll_idle_id == 0 || scroll_direction != ethi->scroll_direction) {
- if (ethi->scroll_idle_id != 0)
- g_source_remove (ethi->scroll_idle_id);
- ethi->scroll_direction = scroll_direction;
- ethi->scroll_idle_id = g_timeout_add (100, scroll_timeout, ethi);
- }
-}
-
-static void
-scroll_off (ETableHeaderItem *ethi)
-{
- if (ethi->scroll_idle_id) {
- g_source_remove (ethi->scroll_idle_id);
- ethi->scroll_idle_id = 0;
- }
-}
-
-static void
-context_destroyed (gpointer data)
-{
- ETableHeaderItem *ethi = data;
-
- ethi->last_drop_x = 0;
- ethi->last_drop_y = 0;
- ethi->last_drop_time = 0;
- ethi->last_drop_context = NULL;
- scroll_off (ethi);
-
- g_object_unref (ethi);
-}
-
-static void
-context_connect (ETableHeaderItem *ethi, GdkDragContext *context)
-{
- if (g_dataset_get_data (context, "e-table-header-item") == NULL) {
- g_object_ref (ethi);
- g_dataset_set_data_full (context, "e-table-header-item", ethi, context_destroyed);
- }
-}
-
-static gboolean
-ethi_drag_motion (GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint time,
- ETableHeaderItem *ethi)
-{
- char *droptype, *headertype;
- guint direction = 0;
-
- gdk_drag_status (context, 0, time);
-
- droptype = gdk_atom_name (GDK_POINTER_TO_ATOM (context->targets->data));
- headertype = g_strdup_printf ("%s-%s", TARGET_ETABLE_COL_TYPE,
- ethi->dnd_code);
-
- if (strcmp (droptype, headertype) != 0) {
- g_free (headertype);
- return FALSE;
- }
-
- g_free (headertype);
-
- d(g_print ("y = %d, widget->allocation.y = %d, GTK_LAYOUT (widget)->vadjustment->value = %f\n", y, widget->allocation.y, GTK_LAYOUT (widget)->vadjustment->value));
-
- if (x < 20)
- direction |= ET_SCROLL_LEFT;
- if (x > widget->allocation.width - 20)
- direction |= ET_SCROLL_RIGHT;
-
- ethi->last_drop_x = x;
- ethi->last_drop_y = y;
- ethi->last_drop_time = time;
- ethi->last_drop_context = context;
- context_connect (ethi, context);
-
- do_drag_motion (ethi,
- context,
- x + GTK_LAYOUT(widget)->hadjustment->value,
- y + GTK_LAYOUT(widget)->vadjustment->value,
- time,
- FALSE);
-
- if (direction != 0)
- scroll_on (ethi, direction);
- else
- scroll_off (ethi);
-
- return TRUE;
-}
-
-static void
-ethi_drag_end (GtkWidget *canvas, GdkDragContext *context, ETableHeaderItem *ethi)
-{
- if (context->action == 0) {
- e_table_header_remove (ethi->eth, ethi->drag_col);
- gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(ethi));
- }
- ethi_remove_drop_marker (ethi);
- ethi_remove_destroy_marker (ethi);
- ethi->drag_col = -1;
- scroll_off (ethi);
-}
-
-static void
-ethi_drag_data_received (GtkWidget *canvas,
- GdkDragContext *drag_context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- ETableHeaderItem *ethi)
-{
- int found = FALSE;
- int count;
- int column;
- int drop_col;
- int i;
-
- if (data->data) {
- count = e_table_header_count(ethi->eth);
- column = atoi(data->data);
- drop_col = ethi->drop_col;
- ethi->drop_col = -1;
-
- if (column >= 0) {
- for (i = 0; i < count; i++) {
- ETableCol *ecol = e_table_header_get_column (ethi->eth, i);
- if (ecol->col_idx == column) {
- e_table_header_move(ethi->eth, i, drop_col);
- found = TRUE;
- break;
- }
- }
- if (!found) {
- count = e_table_header_count(ethi->full_header);
- for (i = 0; i < count; i++) {
- ETableCol *ecol = e_table_header_get_column (ethi->full_header, i);
- if (ecol->col_idx == column) {
- e_table_header_add_column (ethi->eth, ecol, drop_col);
- break;
- }
- }
- }
- }
- }
- ethi_remove_drop_marker (ethi);
- gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(ethi));
-}
-
-static void
-ethi_drag_data_get (GtkWidget *canvas,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETableHeaderItem *ethi)
-{
- if (ethi->drag_col != -1) {
- ETableCol *ecol = e_table_header_get_column (ethi->eth, ethi->drag_col);
-
- gchar *string = g_strdup_printf("%d", ecol->col_idx);
- gtk_selection_data_set(selection_data,
- GDK_SELECTION_TYPE_STRING,
- sizeof(string[0]),
- string,
- strlen(string));
- g_free(string);
- }
-}
-
-static gboolean
-ethi_drag_drop (GtkWidget *canvas,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETableHeaderItem *ethi)
-{
- gboolean successful = FALSE;
-
- if ((x >= 0) && (x <= (ethi->width)) &&
- (y >= 0) && (y <= (ethi->height))){
- int col;
-
- col = ethi_find_col_by_x_nearest (ethi, x);
-
- ethi_add_drop_marker (ethi, col, FALSE);
-
- ethi->drop_col = col;
-
- if (col != -1) {
- char *target = g_strdup_printf ("%s-%s", TARGET_ETABLE_COL_TYPE, ethi->dnd_code);
- d(g_print ("ethi - %s\n", target));
- gtk_drag_get_data (canvas, context, gdk_atom_intern(target, FALSE), time);
- g_free (target);
- }
- }
- gtk_drag_finish (context, successful, successful, time);
- scroll_off (ethi);
- return successful;
-}
-
-static void
-ethi_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time, ETableHeaderItem *ethi)
-{
- ethi_remove_drop_marker (ethi);
- if (ethi->drag_col != -1)
- ethi_add_destroy_marker (ethi);
-}
-
-static void
-ethi_realize (GnomeCanvasItem *item)
-{
- ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (item);
- GdkWindow *window;
- GtkTargetEntry ethi_drop_types [] = {
- { TARGET_ETABLE_COL_TYPE, 0, TARGET_ETABLE_COL_HEADER },
- };
-
-
- if (GNOME_CANVAS_ITEM_CLASS (ethi_parent_class)-> realize)
- (*GNOME_CANVAS_ITEM_CLASS (ethi_parent_class)->realize)(item);
-
- window = GTK_WIDGET (item->canvas)->window;
-
- if (!ethi->font)
- ethi_font_set (ethi, gtk_style_get_font (GTK_WIDGET (item->canvas)->style));
-
- /*
- * Now, configure DnD
- */
- ethi_drop_types[0].target = g_strdup_printf("%s-%s", ethi_drop_types[0].target, ethi->dnd_code);
- gtk_drag_dest_set (GTK_WIDGET (item->canvas), 0,
- ethi_drop_types, ELEMENTS (ethi_drop_types),
- GDK_ACTION_MOVE);
- g_free(ethi_drop_types[0].target);
-
- /* Drop signals */
- ethi->drag_motion_id = g_signal_connect (item->canvas, "drag_motion",
- G_CALLBACK (ethi_drag_motion), ethi);
- ethi->drag_leave_id = g_signal_connect (item->canvas, "drag_leave",
- G_CALLBACK (ethi_drag_leave), ethi);
- ethi->drag_drop_id = g_signal_connect (item->canvas, "drag_drop",
- G_CALLBACK (ethi_drag_drop), ethi);
- ethi->drag_data_received_id = g_signal_connect (item->canvas, "drag_data_received",
- G_CALLBACK (ethi_drag_data_received), ethi);
-
- /* Drag signals */
- ethi->drag_end_id = g_signal_connect (item->canvas, "drag_end",
- G_CALLBACK (ethi_drag_end), ethi);
- ethi->drag_data_get_id = g_signal_connect (item->canvas, "drag_data_get",
- G_CALLBACK (ethi_drag_data_get), ethi);
-
-}
-
-static void
-ethi_unrealize (GnomeCanvasItem *item)
-{
- ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (item);
-
- gdk_font_unref (ethi->font);
-
- g_signal_handler_disconnect (item->canvas, ethi->drag_motion_id);
- g_signal_handler_disconnect (item->canvas, ethi->drag_leave_id);
- g_signal_handler_disconnect (item->canvas, ethi->drag_drop_id);
- g_signal_handler_disconnect (item->canvas, ethi->drag_data_received_id);
-
- g_signal_handler_disconnect (item->canvas, ethi->drag_end_id);
- g_signal_handler_disconnect (item->canvas, ethi->drag_data_get_id);
-
- gtk_drag_dest_unset (GTK_WIDGET (item->canvas));
-
- if (ethi->stipple){
- gdk_bitmap_unref (ethi->stipple);
- ethi->stipple = NULL;
- }
-
- if (GNOME_CANVAS_ITEM_CLASS (ethi_parent_class)->unrealize)
- (*GNOME_CANVAS_ITEM_CLASS (ethi_parent_class)->unrealize)(item);
-}
-
-static void
-ethi_draw (GnomeCanvasItem *item, GdkDrawable *drawable, int x, int y, int width, int height)
-{
- ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (item);
- GnomeCanvas *canvas = item->canvas;
- const int cols = e_table_header_count (ethi->eth);
- int x1, x2;
- int col;
- GHashTable *arrows = g_hash_table_new (NULL, NULL);
-
-
- if (ethi->sort_info) {
- int length = e_table_sort_info_grouping_get_count(ethi->sort_info);
- int i;
- for (i = 0; i < length; i++) {
- ETableSortColumn column = e_table_sort_info_grouping_get_nth(ethi->sort_info, i);
- g_hash_table_insert (arrows,
- GINT_TO_POINTER (column.column),
- GINT_TO_POINTER (column.ascending ?
- E_TABLE_COL_ARROW_DOWN :
- E_TABLE_COL_ARROW_UP));
- }
- length = e_table_sort_info_sorting_get_count(ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(ethi->sort_info, i);
- g_hash_table_insert (arrows,
- GINT_TO_POINTER (column.column),
- GINT_TO_POINTER (column.ascending ?
- E_TABLE_COL_ARROW_DOWN :
- E_TABLE_COL_ARROW_UP));
- }
- }
-
- ethi->width = e_table_header_total_width (ethi->eth) + ethi->group_indent_width;
- x1 = x2 = 0;
- x2 += ethi->group_indent_width;
- for (col = 0; col < cols; col++, x1 = x2){
- ETableCol *ecol = e_table_header_get_column (ethi->eth, col);
- int col_width;
-
- col_width = ecol->width;
-
- x2 += col_width;
-
- if (x1 > (x + width))
- break;
-
- if (x2 < x)
- continue;
-
- if (x2 <= x1)
- continue;
-
- e_table_header_draw_button (drawable, ecol,
- GTK_WIDGET (canvas)->style,
- GTK_WIDGET_STATE (canvas),
- GTK_WIDGET (canvas),
- x1 - x, -y,
- width, height,
- x2 - x1, ethi->height,
- (ETableColArrow) g_hash_table_lookup (
- arrows, GINT_TO_POINTER (ecol->col_idx)));
- }
-
- g_hash_table_destroy (arrows);
-}
-
-static double
-ethi_point (GnomeCanvasItem *item, double x, double y, int cx, int cy,
- GnomeCanvasItem **actual_item)
-{
- *actual_item = item;
- return 0.0;
-}
-
-/*
- * is_pointer_on_division:
- *
- * Returns whether @pos is a column header division; If @the_total is not NULL,
- * then the actual position is returned here. If @return_ecol is not NULL,
- * then the ETableCol that actually contains this point is returned here
- */
-static gboolean
-is_pointer_on_division (ETableHeaderItem *ethi, int pos, int *the_total, int *return_col)
-{
- const int cols = e_table_header_count (ethi->eth);
- int col, total;
-
- total = 0;
- for (col = 0; col < cols; col++){
- ETableCol *ecol = e_table_header_get_column (ethi->eth, col);
-
- if (col == 0)
- total += ethi->group_indent_width;
-
- total += ecol->width;
-
- if ((total - TOLERANCE < pos)&& (pos < total + TOLERANCE)){
- if (return_col)
- *return_col = col;
- if (the_total)
- *the_total = total;
-
- return TRUE;
- }
- if (return_col)
- *return_col = col;
-
- if (total > pos + TOLERANCE)
- return FALSE;
- }
-
- return FALSE;
-}
-
-#define convert(c,sx,sy,x,y) gnome_canvas_w2c (c,sx,sy,x,y)
-
-static void
-set_cursor (ETableHeaderItem *ethi, int pos)
-{
- int col;
- GtkWidget *canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas);
- gboolean resizable = FALSE;
-
- /* We might be invoked before we are realized */
- if (!canvas->window)
- return;
-
- if (is_pointer_on_division (ethi, pos, NULL, &col)) {
- int last_col = ethi->eth->col_count - 1;
- ETableCol *ecol = e_table_header_get_column (ethi->eth, col);
-
- /* Last column is not resizable */
- if (ecol->resizable && col != last_col) {
- int c = col + 1;
-
- /* Column is not resizable if all columns after it
- are also not resizable */
- for (; c <= last_col; c++){
- ETableCol *ecol2;
-
- ecol2 = e_table_header_get_column (ethi->eth, c);
- if (ecol2->resizable) {
- resizable = TRUE;
- break;
- }
- }
- }
- }
-
- if (resizable)
- e_cursor_set (canvas->window, E_CURSOR_SIZE_X);
- else
- gdk_window_set_cursor (canvas->window, NULL);
- /* e_cursor_set (canvas->window, E_CURSOR_ARROW);*/
-}
-
-static void
-ethi_end_resize (ETableHeaderItem *ethi)
-{
- ethi->resize_col = -1;
- ethi->resize_guide = GINT_TO_POINTER (0);
-
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(ethi));
-}
-
-static gboolean
-ethi_maybe_start_drag (ETableHeaderItem *ethi, GdkEventMotion *event)
-{
- if (!ethi->maybe_drag)
- return FALSE;
-
- if (ethi->eth->col_count < 2) {
- ethi->maybe_drag = FALSE;
- return FALSE;
- }
-
- if (MAX (abs (ethi->click_x - event->x),
- abs (ethi->click_y - event->y)) <= 3)
- return FALSE;
-
- return TRUE;
-}
-
-static void
-ethi_start_drag (ETableHeaderItem *ethi, GdkEvent *event)
-{
- GtkWidget *widget = GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas);
- GtkTargetList *list;
- GdkDragContext *context;
- ETableCol *ecol;
- int col_width;
- GdkPixmap *pixmap;
- int group_indent = 0;
- GHashTable *arrows = g_hash_table_new (NULL, NULL);
-
- GtkTargetEntry ethi_drag_types [] = {
- { TARGET_ETABLE_COL_TYPE, 0, TARGET_ETABLE_COL_HEADER },
- };
-
- ethi->drag_col = ethi_find_col_by_x (ethi, event->motion.x);
-
- if (ethi->drag_col == -1)
- return;
-
- if (ethi->sort_info) {
- int length = e_table_sort_info_grouping_get_count(ethi->sort_info);
- int i;
- for (i = 0; i < length; i++) {
- ETableSortColumn column =
- e_table_sort_info_grouping_get_nth(
- ethi->sort_info, i);
- group_indent ++;
- g_hash_table_insert (
- arrows,
- GINT_TO_POINTER (column.column),
- GINT_TO_POINTER (column.ascending ?
- E_TABLE_COL_ARROW_DOWN :
- E_TABLE_COL_ARROW_UP));
- }
- length = e_table_sort_info_sorting_get_count(ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column =
- e_table_sort_info_sorting_get_nth (
- ethi->sort_info, i);
-
- g_hash_table_insert (
- arrows,
- GINT_TO_POINTER (column.column),
- GINT_TO_POINTER (column.ascending ?
- E_TABLE_COL_ARROW_DOWN :
- E_TABLE_COL_ARROW_UP));
- }
- }
-
- ethi_drag_types[0].target = g_strdup_printf(
- "%s-%s", ethi_drag_types[0].target, ethi->dnd_code);
- list = gtk_target_list_new (
- ethi_drag_types, ELEMENTS (ethi_drag_types));
- context = gtk_drag_begin (widget, list, GDK_ACTION_MOVE, 1, event);
- g_free(ethi_drag_types[0].target);
-
- ecol = e_table_header_get_column (ethi->eth, ethi->drag_col);
- col_width = ecol->width;
- pixmap = gdk_pixmap_new (widget->window, col_width, ethi->height, -1);
-
- e_table_header_draw_button (
- pixmap, ecol,
- widget->style,
- GTK_WIDGET_STATE (widget),
- widget,
- 0, 0,
- col_width, ethi->height,
- col_width, ethi->height,
- (ETableColArrow) g_hash_table_lookup (
- arrows, GINT_TO_POINTER (ecol->col_idx)));
- gtk_drag_set_icon_pixmap (
- context,
- gdk_window_get_colormap (widget->window),
- pixmap,
- NULL,
- col_width / 2,
- ethi->height / 2);
- gdk_pixmap_unref (pixmap);
-
- ethi->maybe_drag = FALSE;
- g_hash_table_destroy (arrows);
-}
-
-typedef struct {
- ETableHeaderItem *ethi;
- int col;
-} EthiHeaderInfo;
-
-static void
-ethi_popup_sort_ascending(GtkWidget *widget, EthiHeaderInfo *info)
-{
- ETableCol *col;
- int model_col;
- int length;
- int i;
- int found = FALSE;
- ETableHeaderItem *ethi = info->ethi;
-
- col = e_table_header_get_column (ethi->eth, info->col);
- model_col = col->col_idx;
-
- length = e_table_sort_info_grouping_get_count(ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column = e_table_sort_info_grouping_get_nth (
- ethi->sort_info, i);
-
- if (model_col == column.column){
- column.ascending = 1;
- e_table_sort_info_grouping_set_nth (
- ethi->sort_info, i, column);
- found = 1;
- break;
- }
- }
- if (!found) {
- length = e_table_sort_info_sorting_get_count (
- ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column =
- e_table_sort_info_sorting_get_nth(
- ethi->sort_info, i);
- if (model_col == column.column){
- column.ascending = 1;
- e_table_sort_info_sorting_set_nth (
- ethi->sort_info, i, column);
- found = 1;
- break;
- }
- }
- }
- if (!found) {
- ETableSortColumn column;
- column.column = model_col;
- column.ascending = 1;
- length = e_table_sort_info_sorting_get_count(ethi->sort_info);
- if (length == 0)
- length++;
- e_table_sort_info_sorting_set_nth(ethi->sort_info, length - 1, column);
- }
-}
-
-static void
-ethi_popup_sort_descending(GtkWidget *widget, EthiHeaderInfo *info)
-{
- ETableCol *col;
- int model_col;
- int length;
- int i;
- int found = FALSE;
- ETableHeaderItem *ethi = info->ethi;
-
- col = e_table_header_get_column (ethi->eth, info->col);
- model_col = col->col_idx;
-
- length = e_table_sort_info_grouping_get_count(ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column = e_table_sort_info_grouping_get_nth(
- ethi->sort_info, i);
- if (model_col == column.column){
- column.ascending = 0;
- e_table_sort_info_grouping_set_nth(
- ethi->sort_info, i, column);
- found = 1;
- break;
- }
- }
- if (!found) {
- length = e_table_sort_info_sorting_get_count (ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column =
- e_table_sort_info_sorting_get_nth(
- ethi->sort_info, i);
-
- if (model_col == column.column){
- column.ascending = 0;
- e_table_sort_info_sorting_set_nth (
- ethi->sort_info, i, column);
- found = 1;
- break;
- }
- }
- }
- if (!found) {
- ETableSortColumn column;
- column.column = model_col;
- column.ascending = 0;
- length = e_table_sort_info_sorting_get_count (ethi->sort_info);
- if (length == 0)
- length++;
- e_table_sort_info_sorting_set_nth (
- ethi->sort_info, length - 1, column);
- }
-}
-
-static void
-ethi_popup_unsort(GtkWidget *widget, EthiHeaderInfo *info)
-{
- ETableHeaderItem *ethi = info->ethi;
-
- e_table_sort_info_grouping_truncate(ethi->sort_info, 0);
- e_table_sort_info_sorting_truncate(ethi->sort_info, 0);
-}
-
-static void
-ethi_popup_group_field(GtkWidget *widget, EthiHeaderInfo *info)
-{
- ETableCol *col;
- int model_col;
- ETableHeaderItem *ethi = info->ethi;
- ETableSortColumn column;
-
- col = e_table_header_get_column (ethi->eth, info->col);
- model_col = col->col_idx;
-
- column.column = model_col;
- column.ascending = 1;
- e_table_sort_info_grouping_set_nth(ethi->sort_info, 0, column);
- e_table_sort_info_grouping_truncate(ethi->sort_info, 1);
-}
-
-static void
-ethi_popup_group_box(GtkWidget *widget, EthiHeaderInfo *info)
-{
-}
-
-static void
-ethi_popup_remove_column(GtkWidget *widget, EthiHeaderInfo *info)
-{
- e_table_header_remove(info->ethi->eth, info->col);
-}
-
-static void
-ethi_popup_field_chooser(GtkWidget *widget, EthiHeaderInfo *info)
-{
- GtkWidget *etfcd = e_table_field_chooser_dialog_new();
- g_object_set(etfcd,
- "full_header", info->ethi->full_header,
- "header", info->ethi->eth,
- "dnd_code", info->ethi->dnd_code,
- NULL);
- gtk_widget_show(etfcd);
-}
-
-static void
-ethi_popup_alignment(GtkWidget *widget, EthiHeaderInfo *info)
-{
-}
-
-static void
-ethi_popup_best_fit(GtkWidget *widget, EthiHeaderInfo *info)
-{
- ETableHeaderItem *ethi = info->ethi;
- int width;
-
- g_signal_emit_by_name (ethi->eth,
- "request_width",
- info->col, &width);
- /* Add 10 to stop it from "..."ing */
- e_table_header_set_size (ethi->eth, info->col, width + 10);
-
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(ethi));
-
-}
-
-static void
-ethi_popup_format_columns(GtkWidget *widget, EthiHeaderInfo *info)
-{
-}
-
-static void
-config_destroyed (gpointer data, GObject *where_object_was)
-{
- ETableHeaderItem *ethi = data;
- ethi->config = NULL;
-}
-
-static void
-apply_changes (ETableConfig *config, ETableHeaderItem *ethi)
-{
- char *state = e_table_state_save_to_string (config->state);
-
- if (ethi->table)
- e_table_set_state (ethi->table, state);
- if (ethi->tree)
- e_tree_set_state (ethi->tree, state);
- g_free (state);
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (config->dialog_toplevel),
- GTK_RESPONSE_APPLY, FALSE);
-}
-
-static void
-ethi_popup_customize_view(GtkWidget *widget, EthiHeaderInfo *info)
-{
- ETableHeaderItem *ethi = info->ethi;
- ETableState *state;
- ETableSpecification *spec;
-
- if (ethi->config)
- e_table_config_raise (E_TABLE_CONFIG (ethi->config));
- else {
- if (ethi->table) {
- state = e_table_get_state_object(ethi->table);
- spec = ethi->table->spec;
- } else if (ethi->tree) {
- state = e_tree_get_state_object(ethi->tree);
- spec = e_tree_get_spec (ethi->tree);
- } else
- return;
-
- ethi->config = e_table_config_new (
- _("Customize Current View"),
- spec, state, GTK_WINDOW (gtk_widget_get_toplevel (widget)));
- g_object_weak_ref (G_OBJECT (ethi->config),
- config_destroyed, ethi);
- g_signal_connect (
- ethi->config, "changed",
- G_CALLBACK (apply_changes), ethi);
- }
-}
-
-static void
-free_popup_info (GtkWidget *w, EthiHeaderInfo *info)
-{
- g_free (info);
-}
-
-/* Bit 1 is always disabled. */
-/* Bit 2 is disabled if not "sortable". */
-/* Bit 4 is disabled if we don't have a pointer to our table object. */
-static EPopupMenu ethi_context_menu [] = {
- E_POPUP_ITEM (N_("Sort Ascending"), G_CALLBACK(ethi_popup_sort_ascending), 2),
- E_POPUP_ITEM (N_("Sort Descending"), G_CALLBACK(ethi_popup_sort_descending), 2),
- E_POPUP_ITEM (N_("Unsort"), G_CALLBACK(ethi_popup_unsort), 0),
- E_POPUP_SEPARATOR,
- E_POPUP_ITEM (N_("Group By This Field"), G_CALLBACK(ethi_popup_group_field), 16),
- E_POPUP_ITEM (N_("Group By Box"), G_CALLBACK(ethi_popup_group_box), 128),
- E_POPUP_SEPARATOR,
- E_POPUP_ITEM (N_("Remove This Column"), G_CALLBACK(ethi_popup_remove_column), 8),
- E_POPUP_ITEM (N_("Add a Column..."), G_CALLBACK(ethi_popup_field_chooser), 0),
- E_POPUP_SEPARATOR,
- E_POPUP_ITEM (N_("Alignment"), G_CALLBACK(ethi_popup_alignment), 128),
- E_POPUP_ITEM (N_("Best Fit"), G_CALLBACK(ethi_popup_best_fit), 2),
- E_POPUP_ITEM (N_("Format Columns..."), G_CALLBACK(ethi_popup_format_columns), 128),
- E_POPUP_SEPARATOR,
- E_POPUP_ITEM (N_("Customize Current View..."), G_CALLBACK(ethi_popup_customize_view), 4),
- E_POPUP_TERMINATOR
-};
-
-static void
-ethi_header_context_menu (ETableHeaderItem *ethi, GdkEventButton *event)
-{
- EthiHeaderInfo *info = g_new(EthiHeaderInfo, 1);
- ETableCol *col;
- GtkMenu *popup;
- info->ethi = ethi;
- info->col = ethi_find_col_by_x (ethi, event->x);
- col = e_table_header_get_column (ethi->eth, info->col);
-
- popup = e_popup_menu_create_with_domain (ethi_context_menu,
- 1 +
- (col->sortable ? 0 : 2) +
- ((ethi->table || ethi->tree) ? 0 : 4) +
- ((e_table_header_count (ethi->eth) > 1) ? 0 : 8),
- ((e_table_sort_info_get_can_group (ethi->sort_info)) ? 0 : 16) +
- 128, info, E_I18N_DOMAIN);
- g_object_ref (popup);
- gtk_object_sink (GTK_OBJECT (popup));
- g_signal_connect (popup, "selection-done",
- G_CALLBACK (free_popup_info), info);
- e_popup_menu (popup, (GdkEvent *) event);
-}
-
-static void
-ethi_button_pressed (ETableHeaderItem *ethi, GdkEventButton *event)
-{
- g_signal_emit (ethi,
- ethi_signals [BUTTON_PRESSED], 0, event);
-}
-
-static void
-ethi_change_sort_state (ETableHeaderItem *ethi, ETableCol *col)
-{
- int model_col;
- int length;
- int i;
- int found = FALSE;
-
- if (col == NULL)
- return;
-
- model_col = col->col_idx;
-
- length = e_table_sort_info_grouping_get_count(ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column = e_table_sort_info_grouping_get_nth(ethi->sort_info, i);
- if (model_col == column.column){
- int ascending = column.ascending;
- ascending = ! ascending;
- column.ascending = ascending;
- e_table_sort_info_grouping_set_nth(ethi->sort_info, i, column);
- found = 1;
- break;
- }
- }
-
- if (!col->sortable)
- return;
-
- if (!found) {
- length = e_table_sort_info_sorting_get_count(ethi->sort_info);
- for (i = 0; i < length; i++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(ethi->sort_info, i);
-
- if (model_col == column.column){
- int ascending = column.ascending;
-
- if (ascending == 0){
- /*
- * This means the user has clicked twice
- * already, lets kill sorting now.
- */
- e_table_sort_info_sorting_truncate (ethi->sort_info, i);
- } else {
- ascending = !ascending;
- column.ascending = ascending;
- e_table_sort_info_sorting_set_nth(ethi->sort_info, i, column);
- }
- found = 1;
- break;
- }
- }
- }
-
- if (!found) {
- ETableSortColumn column;
- column.column = model_col;
- column.ascending = 1;
- length = e_table_sort_info_sorting_get_count(ethi->sort_info);
- if (length == 0)
- length++;
- e_table_sort_info_sorting_set_nth(ethi->sort_info, length - 1, column);
- }
-}
-
-/*
- * Handles the events on the ETableHeaderItem, particularly it handles resizing
- */
-static int
-ethi_event (GnomeCanvasItem *item, GdkEvent *e)
-{
- ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (item);
- GnomeCanvas *canvas = item->canvas;
- const gboolean resizing = ETHI_RESIZING (ethi);
- int x, y, start, col;
- int was_maybe_drag = 0;
-
- switch (e->type){
- case GDK_ENTER_NOTIFY:
- convert (canvas, e->crossing.x, e->crossing.y, &x, &y);
- set_cursor (ethi, x);
- break;
-
- case GDK_LEAVE_NOTIFY:
- gdk_window_set_cursor (GTK_WIDGET (canvas)->window, NULL);
- /* e_cursor_set (GTK_WIDGET (canvas)->window, E_CURSOR_ARROW);*/
- break;
-
- case GDK_MOTION_NOTIFY:
-
- convert (canvas, e->motion.x, e->motion.y, &x, &y);
- if (resizing){
- int new_width;
-
- if (ethi->resize_guide == NULL){
- /* Quick hack until I actually bind the views */
- ethi->resize_guide = GINT_TO_POINTER (1);
-
- gnome_canvas_item_grab (item,
- GDK_POINTER_MOTION_MASK |
- GDK_BUTTON_RELEASE_MASK,
- e_cursor_get (E_CURSOR_SIZE_X),
- e->button.time);
- }
-
- new_width = x - ethi->resize_start_pos;
-
- e_table_header_set_size (ethi->eth, ethi->resize_col, new_width);
-
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(ethi));
- } else if (ethi_maybe_start_drag (ethi, &e->motion)){
- ethi_start_drag (ethi, e);
- } else
- set_cursor (ethi, x);
- break;
-
- case GDK_BUTTON_PRESS:
- if (e->button.button > 3)
- return FALSE;
-
- convert (canvas, e->button.x, e->button.y, &x, &y);
-
- if (is_pointer_on_division (ethi, x, &start, &col) && e->button.button == 1){
- ETableCol *ecol;
-
- /*
- * Record the important bits.
- *
- * By setting resize_pos to a non -1 value,
- * we know that we are being resized (used in the
- * other event handlers).
- */
- ecol = e_table_header_get_column (ethi->eth, col);
-
- if (!ecol->resizable)
- break;
- ethi->resize_col = col;
- ethi->resize_start_pos = start - ecol->width;
- ethi->resize_min_width = ecol->min_width;
- } else {
- if (e->button.button == 1){
- ethi->click_x = e->button.x;
- ethi->click_y = e->button.y;
- ethi->maybe_drag = TRUE;
- is_pointer_on_division (ethi, x, &start, &col);
- ethi->selected_col = col;
- e_canvas_item_grab_focus (item, TRUE);
- } else if (e->button.button == 3){
- ethi_header_context_menu (ethi, &e->button);
- } else
- ethi_button_pressed (ethi, &e->button);
- }
- break;
-
- case GDK_2BUTTON_PRESS:
- if (!resizing)
- break;
-
- if (e->button.button != 1)
- break;
- else {
- int width = 0;
- g_signal_emit_by_name (ethi->eth,
- "request_width",
- (int)ethi->resize_col, &width);
- /* Add 10 to stop it from "..."ing */
- e_table_header_set_size (ethi->eth, ethi->resize_col, width + 10);
-
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(ethi));
- ethi->maybe_drag = FALSE;
- }
- break;
-
- case GDK_BUTTON_RELEASE: {
- gboolean needs_ungrab = FALSE;
-
- was_maybe_drag = ethi->maybe_drag;
-
- ethi->maybe_drag = FALSE;
-
- if (ethi->resize_col != -1){
- needs_ungrab = (ethi->resize_guide != NULL);
- ethi_end_resize (ethi);
- } else if (was_maybe_drag && ethi->sort_info) {
- ETableCol *col;
-
- col = e_table_header_get_column (ethi->eth, ethi_find_col_by_x (ethi, e->button.x));
- ethi_change_sort_state (ethi, col);
- }
-
- if (needs_ungrab)
- gnome_canvas_item_ungrab (item, e->button.time);
-
- break;
- }
- case GDK_KEY_PRESS:
- if ((e->key.keyval == GDK_F10) && (e->key.state & GDK_SHIFT_MASK)) {
- EthiHeaderInfo *info = g_new(EthiHeaderInfo, 1);
- ETableCol *col;
- GtkMenu *popup;
-
- info->ethi = ethi;
- info->col = ethi->selected_col;
- col = e_table_header_get_column (ethi->eth, info->col);
-
- popup = e_popup_menu_create_with_domain (ethi_context_menu,
- 1 +
- (col->sortable ? 0 : 2) +
- ((ethi->table || ethi->tree) ? 0 : 4) +
- ((e_table_header_count (ethi->eth) > 1) ? 0 : 8),
- ((e_table_sort_info_get_can_group (ethi->sort_info)) ? 0 : 16) +
- 128, info, E_I18N_DOMAIN);
- g_object_ref (popup);
- gtk_object_sink (GTK_OBJECT (popup));
- g_signal_connect (popup, "selection-done",
- G_CALLBACK (free_popup_info), info);
- e_popup_menu (popup, NULL);
- } else if (e->key.keyval == GDK_space) {
- ETableCol *col;
-
- col = e_table_header_get_column (ethi->eth, ethi->selected_col);
- ethi_change_sort_state (ethi, col);
- } else if ((e->key.keyval == GDK_Right) || (e->key.keyval == GDK_KP_Right)) {
- ETableCol *col;
-
- if ((ethi->selected_col < 0) || (ethi->selected_col >= ethi->eth->col_count - 1))
- ethi->selected_col = 0;
- else
- ethi->selected_col++;
- col = e_table_header_get_column (ethi->eth, ethi->selected_col);
- ethi_change_sort_state (ethi, col);
- } else if ((e->key.keyval == GDK_Left) || (e->key.keyval == GDK_KP_Left)) {
- ETableCol *col;
-
- if ((ethi->selected_col <= 0) || (ethi->selected_col >= ethi->eth->col_count))
- ethi->selected_col = ethi->eth->col_count - 1;
- else
- ethi->selected_col--;
- col = e_table_header_get_column (ethi->eth, ethi->selected_col);
- ethi_change_sort_state (ethi, col);
- }
- break;
-
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-static void
-ethi_class_init (GObjectClass *object_class)
-{
- GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
-
- ethi_parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-
- object_class->dispose = ethi_dispose;
- object_class->set_property = ethi_set_property;
- object_class->get_property = ethi_get_property;
-
- item_class->update = ethi_update;
- item_class->realize = ethi_realize;
- item_class->unrealize = ethi_unrealize;
- item_class->draw = ethi_draw;
- item_class->point = ethi_point;
- item_class->event = ethi_event;
-
- g_object_class_install_property (object_class, PROP_DND_CODE,
- g_param_spec_string ("dnd_code",
- _("DnD code"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_TABLE_FONTSET,
- g_param_spec_string ("fontset",
- _("Fontset"),
- /*_( */"XXX blurb" /*)*/,
- NULL,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_FULL_HEADER,
- g_param_spec_object ("full_header",
- _("Full Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_TABLE_HEADER,
- g_param_spec_object ("ETableHeader",
- _("Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_SORT_INFO,
- g_param_spec_object ("sort_info",
- _("Sort Info"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_SORT_INFO_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE,
- g_param_spec_object ("table",
- _("Table"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TREE,
- g_param_spec_object ("tree",
- _("Tree"),
- /*_( */"XXX blurb" /*)*/,
- E_TREE_TYPE,
- G_PARAM_WRITABLE));
-
- /*
- * Create our pixmaps for DnD
- */
- dnd_colormap = gtk_widget_get_default_colormap ();
- remove_col_pixmap = gdk_pixmap_colormap_create_from_xpm_d (
- NULL, dnd_colormap,
- &remove_col_mask, NULL, remove_col_xpm);
-
- add_col_pixmap = gdk_pixmap_colormap_create_from_xpm_d (
- NULL, dnd_colormap,
- &add_col_mask, NULL, add_col_xpm);
-
- ethi_signals [BUTTON_PRESSED] =
- g_signal_new ("button_pressed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableHeaderItemClass, button_pressed),
- NULL, NULL,
- e_marshal_NONE__BOXED,
- G_TYPE_NONE, 1, GDK_TYPE_EVENT);
-}
-
-static void
-ethi_init (GnomeCanvasItem *item)
-{
- ETableHeaderItem *ethi = E_TABLE_HEADER_ITEM (item);
-
- ethi->resize_col = -1;
-
- item->x1 = 0;
- item->y1 = 0;
- item->x2 = 0;
- item->y2 = 0;
-
- ethi->drag_col = -1;
- ethi->drag_mark = -1;
-
- ethi->sort_info = NULL;
-
- ethi->sort_info_changed_id = 0;
- ethi->group_info_changed_id = 0;
-
- ethi->group_indent_width = 0;
- ethi->table = NULL;
- ethi->tree = NULL;
-
- ethi->selected_col = 0;
-}
-
-E_MAKE_TYPE (e_table_header_item,
- "ETableHeaderItem",
- ETableHeaderItem,
- ethi_class_init,
- ethi_init,
- PARENT_OBJECT_TYPE)
diff --git a/widgets/table/e-table-header-item.h b/widgets/table/e-table-header-item.h
deleted file mode 100644
index eafc50dc63..0000000000
--- a/widgets/table/e-table-header-item.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-header-item.h
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_HEADER_ITEM_H_
-#define _E_TABLE_HEADER_ITEM_H_
-
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-tree.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <libxml/tree.h>
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-sort-info.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_HEADER_ITEM_TYPE (e_table_header_item_get_type ())
-#define E_TABLE_HEADER_ITEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_HEADER_ITEM_TYPE, ETableHeaderItem))
-#define E_TABLE_HEADER_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_HEADER_ITEM_TYPE, ETableHeaderItemClass))
-#define E_IS_TABLE_HEADER_ITEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_HEADER_ITEM_TYPE))
-#define E_IS_TABLE_HEADER_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_HEADER_ITEM_TYPE))
-
-typedef struct {
- GnomeCanvasItem parent;
- ETableHeader *eth;
-
- GdkCursor *change_cursor;
-
- short height, width;
- GdkFont *font;
-
- /*
- * Used during resizing; Could be shorts
- */
- int resize_col;
- int resize_start_pos;
- int resize_min_width;
-
- GtkObject *resize_guide;
-
- int group_indent_width;
-
- /*
- * Ids
- */
- int structure_change_id, dimension_change_id;
-
- /*
- * For dragging columns
- */
- guint maybe_drag:1;
- guint dnd_ready:1;
- int click_x, click_y;
- int drag_col, drop_col, drag_mark;
- guint drag_motion_id, drag_end_id, drag_leave_id, drag_drop_id, drag_data_received_id, drag_data_get_id;
- guint sort_info_changed_id, group_info_changed_id;
- GnomeCanvasItem *remove_item;
- GdkBitmap *stipple;
-
- gchar *dnd_code;
-
- /*
- * For column sorting info
- */
- ETableSortInfo *sort_info;
-
- guint scroll_direction : 4;
- int last_drop_x;
- int last_drop_y;
- int last_drop_time;
- GdkDragContext *last_drop_context;
- int scroll_idle_id;
-
- /* For adding fields. */
- ETableHeader *full_header;
- ETable *table;
- ETree *tree;
- void *config;
-
- /* For keyboard navigation*/
- int selected_col;
-
-} ETableHeaderItem;
-
-typedef struct {
- GnomeCanvasItemClass parent_class;
-
- /*
- * signals
- */
- void (*button_pressed) (ETableHeaderItem *ethi, GdkEventButton *button);
-} ETableHeaderItemClass;
-
-GType e_table_header_item_get_type (void);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_HEADER_ITEM_H_ */
diff --git a/widgets/table/e-table-header-utils.c b/widgets/table/e-table-header-utils.c
deleted file mode 100644
index cf99e8ecba..0000000000
--- a/widgets/table/e-table-header-utils.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-header-utils.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- * Federico Mena-Quintero <federico@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-table-header-utils.h"
-
-#include <string.h> /* strlen() */
-#include <glib.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkwindow.h>
-#include "e-table-defines.h"
-#include <gal/widgets/e-unicode.h>
-
-
-
-static PangoLayout*
-build_header_layout (GtkWidget *widget, const char *str)
-{
- PangoLayout *layout;
-
- layout = gtk_widget_create_pango_layout (widget, str);
-
-#ifdef FROB_FONT_DESC
- {
- PangoFontDescription *desc;
- desc = pango_font_description_copy (gtk_widget_get_style (widget)->font_desc);
- pango_font_description_set_size (desc,
- pango_font_description_get_size (desc) * 1.2);
-
- pango_font_description_set_weight (desc, PANGO_WEIGHT_BOLD);
- pango_layout_set_font_description (layout, desc);
-
- pango_font_description_free (desc);
- }
-#endif
-
- return layout;
-}
-
-/**
- * e_table_header_compute_height:
- * @ecol: Table column description.
- * @widget: The widget from which to build the PangoLayout.
- *
- * Computes the minimum height required for a table header button.
- *
- * Return value: The height of the button, in pixels.
- **/
-double
-e_table_header_compute_height (ETableCol *ecol, GtkWidget *widget)
-{
- int ythick;
- int height;
- PangoLayout *layout;
-
- g_return_val_if_fail (ecol != NULL, -1);
- g_return_val_if_fail (E_IS_TABLE_COL (ecol), -1);
- g_return_val_if_fail (GTK_IS_WIDGET (widget), -1);
-
- ythick = gtk_widget_get_style (widget)->ythickness;
-
- layout = build_header_layout (widget, ecol->text);
-
- pango_layout_get_pixel_size (layout, NULL, &height);
-
- if (ecol->is_pixbuf) {
- g_assert (ecol->pixbuf != NULL);
- height = MAX (height, gdk_pixbuf_get_height (ecol->pixbuf));
- }
-
- height = MAX (height, MIN_ARROW_SIZE);
-
- height += 2 * (ythick + HEADER_PADDING);
-
- g_object_unref (layout);
-
- return height;
-}
-
-double
-e_table_header_width_extras (GtkStyle *style)
-{
- g_return_val_if_fail (style != NULL, -1);
-
- return 2 * (style->xthickness + HEADER_PADDING);
-}
-
-/* Creates a pixmap that is a composite of a background color and the upper-left
- * corner rectangle of a pixbuf.
- */
-static GdkPixmap *
-make_composite_pixmap (GdkDrawable *drawable, GdkGC *gc,
- GdkPixbuf *pixbuf, GdkColor *bg, int width, int height,
- int dither_xofs, int dither_yofs)
-{
- int pwidth, pheight;
- GdkPixmap *pixmap;
- GdkPixbuf *tmp;
- int color;
-
- pwidth = gdk_pixbuf_get_width (pixbuf);
- pheight = gdk_pixbuf_get_height (pixbuf);
- g_assert (width <= pwidth && height <= pheight);
-
- color = ((bg->red & 0xff00) << 8) | (bg->green & 0xff00) | ((bg->blue & 0xff00) >> 8);
-
- if (width >= pwidth && height >= pheight) {
- tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
- if (!tmp)
- return NULL;
-
- gdk_pixbuf_composite_color (pixbuf, tmp,
- 0, 0,
- width, height,
- 0, 0,
- 1.0, 1.0,
- GDK_INTERP_NEAREST,
- 255,
- 0, 0,
- 16,
- color, color);
- } else {
- int x, y, rowstride;
- GdkPixbuf *fade;
- guchar *pixels;
-
- /* Do a nice fade of the pixbuf down and to the right */
-
- fade = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
- if (!fade)
- return NULL;
-
- gdk_pixbuf_copy_area (pixbuf,
- 0, 0,
- width, height,
- fade,
- 0, 0);
-
- rowstride = gdk_pixbuf_get_rowstride (fade);
- pixels = gdk_pixbuf_get_pixels (fade);
-
- for (y = 0; y < height; y++) {
- guchar *p;
- int yfactor;
-
- p = pixels + y * rowstride;
-
- if (height < pheight)
- yfactor = height - y;
- else
- yfactor = height;
-
- for (x = 0; x < width; x++) {
- int xfactor;
-
- if (width < pwidth)
- xfactor = width - x;
- else
- xfactor = width;
-
- p[3] = ((int) p[3] * xfactor * yfactor / (width * height));
- p += 4;
- }
- }
-
- tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
- if (!tmp) {
- gdk_pixbuf_unref (fade);
- return NULL;
- }
-
- gdk_pixbuf_composite_color (fade, tmp,
- 0, 0,
- width, height,
- 0, 0,
- 1.0, 1.0,
- GDK_INTERP_NEAREST,
- 255,
- 0, 0,
- 16,
- color, color);
-
- gdk_pixbuf_unref (fade);
- }
-
- pixmap = gdk_pixmap_new (drawable, width, height, gdk_rgb_get_visual ()->depth);
- gdk_draw_rgb_image_dithalign (pixmap, gc,
- 0, 0,
- width, height,
- GDK_RGB_DITHER_NORMAL,
- gdk_pixbuf_get_pixels (tmp),
- gdk_pixbuf_get_rowstride (tmp),
- dither_xofs, dither_yofs);
- gdk_pixbuf_unref (tmp);
-
- return pixmap;
-}
-
-/* Default width of the elision arrow in pixels */
-#define ARROW_WIDTH 4
-
-/**
- * e_table_draw_elided_string:
- * @drawable: Destination drawable.
- * @font: Font for the text.
- * @gc: GC to use for drawing.
- * @x: X insertion point for the string.
- * @y: Y insertion point for the string's baseline.
- * @layout: the PangoLayout to draw.
- * @str: the string we're drawing, passed in so we can change the layout if it needs eliding.
- * @max_width: Maximum width in which the string must fit.
- * @center: Whether to center the string in the available area if it does fit.
- *
- * Draws a string, possibly trimming it so that it fits inside the specified
- * maximum width. If it does not fit, an elision indicator is drawn after the
- * last character that does fit.
- **/
-static void
-e_table_draw_elided_string (GdkDrawable *drawable, GdkGC *gc, GtkWidget *widget,
- int x, int y, PangoLayout *layout, char *str,
- int max_width, gboolean center)
-{
- int width;
- int height;
- int index;
- GSList *lines;
- PangoLayoutLine *line;
-
- g_return_if_fail (drawable != NULL);
- g_return_if_fail (gc != NULL);
- g_return_if_fail (layout != NULL);
- g_return_if_fail (max_width >= 0);
-
- pango_layout_get_pixel_size (layout, &width, &height);
-
- gdk_gc_set_clip_rectangle (gc, NULL);
-
- if (width <= max_width) {
- int xpos;
-
- if (center)
- xpos = x + (max_width - width) / 2;
- else
- xpos = x;
-
- gdk_draw_layout (drawable, gc,
- xpos, y,
- layout);
- } else {
- int arrow_width;
- int i;
-
- if (max_width < ARROW_WIDTH + 1)
- arrow_width = max_width - 1;
- else
- arrow_width = ARROW_WIDTH;
-
-
- lines = pango_layout_get_lines (layout);
- line = lines->data;
-
- if (!pango_layout_line_x_to_index (line,
- (max_width - arrow_width) * PANGO_SCALE,
- &index,
- NULL)) {
- g_warning ("pango_layout_line_x_to_index returned false");
- return;
- }
-
- pango_layout_set_text (layout, str, index);
-
- gdk_draw_layout (drawable, gc, x, y, layout);
-
- for (i = 0; i < arrow_width; i++) {
- int h;
-
- h = 2 * i + 1;
-
- gdk_draw_line (drawable, gc,
- x + max_width - i,
- y + height / 2 - i,
- x + max_width - i,
- y + height / 2 + i + 1);
- }
- }
-}
-
-static GtkWidget *g_label;
-
-/**
- * e_table_header_draw_button:
- * @drawable: Destination drawable.
- * @ecol: Table column for the header information.
- * @style: Style to use for drawing the button.
- * @state: State of the table widget.
- * @widget: The table widget.
- * @x: Leftmost coordinate of the button.
- * @y: Topmost coordinate of the button.
- * @width: Width of the region to draw.
- * @height: Height of the region to draw.
- * @button_width: Width for the complete button.
- * @button_height: Height for the complete button.
- * @arrow: Arrow type to use as a sort indicator.
- *
- * Draws a button suitable for a table header.
- **/
-void
-e_table_header_draw_button (GdkDrawable *drawable, ETableCol *ecol,
- GtkStyle *style, GtkStateType state,
- GtkWidget *widget,
- int x, int y, int width, int height,
- int button_width, int button_height,
- ETableColArrow arrow)
-{
- int xthick, ythick;
- int inner_x, inner_y;
- int inner_width, inner_height;
- GdkGC *gc;
- PangoLayout *layout;
-
- g_return_if_fail (drawable != NULL);
- g_return_if_fail (ecol != NULL);
- g_return_if_fail (E_IS_TABLE_COL (ecol));
- g_return_if_fail (style != NULL);
- g_return_if_fail (widget != NULL);
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (button_width > 0 && button_height > 0);
-
- if (g_label == NULL) {
- GtkWidget *button = gtk_button_new_with_label("Hi");
- GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- g_label = GTK_BIN(button)->child;
- gtk_container_add (GTK_CONTAINER (window), button);
- gtk_widget_ensure_style (window);
- gtk_widget_ensure_style (button);
- gtk_widget_ensure_style (g_label);
- }
-
- gc = g_label->style->fg_gc[state];
-
- gdk_gc_set_clip_rectangle (gc, NULL);
-
- xthick = style->xthickness;
- ythick = style->ythickness;
-
- /* Button bevel */
-
- gtk_paint_box (style, drawable, state, GTK_SHADOW_OUT,
- NULL, widget, "button",
- x, y, button_width, button_height);
-
- /* Inside area */
-
- inner_width = button_width - 2 * (xthick + HEADER_PADDING);
- inner_height = button_height - 2 * (ythick + HEADER_PADDING);
-
- if (inner_width < 1 || inner_height < 1)
- return; /* nothing fits */
-
- inner_x = x + xthick + HEADER_PADDING;
- inner_y = y + ythick + HEADER_PADDING;
-
- /* Arrow */
-
- switch (arrow) {
- case E_TABLE_COL_ARROW_NONE:
- break;
-
- case E_TABLE_COL_ARROW_UP:
- case E_TABLE_COL_ARROW_DOWN: {
- int arrow_width, arrow_height;
-
- arrow_width = MIN (MIN_ARROW_SIZE, inner_width);
- arrow_height = MIN (MIN_ARROW_SIZE, inner_height);
-
- gtk_paint_arrow (style, drawable, state,
- GTK_SHADOW_NONE, NULL, widget, "header",
- (arrow == E_TABLE_COL_ARROW_UP) ? GTK_ARROW_UP : GTK_ARROW_DOWN,
- TRUE,
- inner_x + inner_width - arrow_width,
- inner_y + (inner_height - arrow_height) / 2,
- arrow_width, arrow_height);
-
- inner_width -= arrow_width + HEADER_PADDING;
- break;
- }
-
- default:
- g_assert_not_reached ();
- return;
- }
-
- if (inner_width < 1)
- return; /* nothing else fits */
-
- layout = build_header_layout (widget, ecol->text);
-
- /* Pixbuf or label */
- if (ecol->is_pixbuf) {
- int pwidth, pheight;
- int clip_width, clip_height;
- int xpos;
- GdkPixmap *pixmap;
-
- g_assert (ecol->pixbuf != NULL);
-
- pwidth = gdk_pixbuf_get_width (ecol->pixbuf);
- pheight = gdk_pixbuf_get_height (ecol->pixbuf);
-
- clip_width = MIN (pwidth, inner_width);
- clip_height = MIN (pheight, inner_height);
-
- xpos = inner_x;
-
- if (inner_width - pwidth > 11) {
- int width;
- int ypos;
-
- pango_layout_get_pixel_size (layout, &width, NULL);
-
- if (width < inner_width - (pwidth + 1)) {
- xpos = inner_x + (inner_width - width - (pwidth + 1)) / 2;
- }
-
- ypos = inner_y;
-
- e_table_draw_elided_string (drawable, gc, widget,
- xpos + pwidth + 1, ypos,
- layout, ecol->text, inner_width - (xpos - inner_x), FALSE);
- }
-
- pixmap = make_composite_pixmap (drawable, gc,
- ecol->pixbuf, &style->bg[state],
- clip_width, clip_height,
- xpos,
- inner_y + (inner_height - clip_height) / 2);
-
- gdk_gc_set_clip_rectangle (gc, NULL);
-
- if (pixmap) {
- gdk_draw_pixmap (drawable, gc, pixmap,
- 0, 0,
- xpos,
- inner_y + (inner_height - clip_height) / 2,
- clip_width, clip_height);
- gdk_pixmap_unref (pixmap);
- }
- } else {
- e_table_draw_elided_string (drawable, gc, widget,
- inner_x, inner_y,
- layout, ecol->text, inner_width, TRUE);
- }
-
- g_object_unref (layout);
-}
diff --git a/widgets/table/e-table-header-utils.h b/widgets/table/e-table-header-utils.h
deleted file mode 100644
index 38defa9261..0000000000
--- a/widgets/table/e-table-header-utils.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-header-utils.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- * Federico Mena-Quintero <federico@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_TABLE_HEADER_UTILS_H
-#define E_TABLE_HEADER_UTILS_H
-
-#include <gal/e-table/e-table-col.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-double e_table_header_compute_height (ETableCol *ecol,
- GtkWidget *widget);
-double e_table_header_width_extras (GtkStyle *style);
-void e_table_header_draw_button (GdkDrawable *drawable,
- ETableCol *ecol,
- GtkStyle *style,
- GtkStateType state,
- GtkWidget *widget,
- int x,
- int y,
- int width,
- int height,
- int button_width,
- int button_height,
- ETableColArrow arrow);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
diff --git a/widgets/table/e-table-header.c b/widgets/table/e-table-header.c
deleted file mode 100644
index d810d61bd1..0000000000
--- a/widgets/table/e-table-header.c
+++ /dev/null
@@ -1,952 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-header.c
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include <glib-object.h>
-#include <gtk/gtkimage.h>
-#include <gal/util/e-util.h>
-#include "e-table-header.h"
-#include "e-table-defines.h"
-#include "gal/util/e-util.h"
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_SORT_INFO,
- PROP_WIDTH,
- PROP_WIDTH_EXTRAS
-};
-
-enum {
- STRUCTURE_CHANGE,
- DIMENSION_CHANGE,
- EXPANSION_CHANGE,
- REQUEST_WIDTH,
- LAST_SIGNAL
-};
-
-static void eth_set_size (ETableHeader *eth, int idx, int size);
-static void eth_calc_widths (ETableHeader *eth);
-
-static guint eth_signals [LAST_SIGNAL] = { 0, };
-
-static GObjectClass *e_table_header_parent_class;
-
-struct two_ints {
- int column;
- int width;
-};
-
-static void
-eth_set_width (ETableHeader *eth, int width)
-{
- eth->width = width;
-}
-
-static void
-dequeue (ETableHeader *eth, int *column, int *width)
-{
- GSList *head;
- struct two_ints *store;
- head = eth->change_queue;
- eth->change_queue = eth->change_queue->next;
- if (!eth->change_queue)
- eth->change_tail = NULL;
- store = head->data;
- g_slist_free_1(head);
- if (column)
- *column = store->column;
- if (width)
- *width = store->width;
- g_free(store);
-}
-
-static gboolean
-dequeue_idle (ETableHeader *eth)
-{
- int column, width;
-
- dequeue (eth, &column, &width);
- while (eth->change_queue && ((struct two_ints *) eth->change_queue->data)->column == column)
- dequeue (eth, &column, &width);
-
- if (column == -1)
- eth_set_width (eth, width);
- else if (column < eth->col_count)
- eth_set_size (eth, column, width);
- if (eth->change_queue)
- return TRUE;
- else {
- eth_calc_widths (eth);
- eth->idle = 0;
- return FALSE;
- }
-}
-
-static void
-enqueue (ETableHeader *eth, int column, int width)
-{
- struct two_ints *store;
- store = g_new(struct two_ints, 1);
- store->column = column;
- store->width = width;
-
- eth->change_tail = g_slist_last(g_slist_append(eth->change_tail, store));
- if (!eth->change_queue)
- eth->change_queue = eth->change_tail;
-
- if (!eth->idle) {
- eth->idle = g_idle_add_full(G_PRIORITY_LOW, (GSourceFunc) dequeue_idle, eth, NULL);
- }
-}
-
-void
-e_table_header_set_size (ETableHeader *eth, int idx, int size)
-{
- g_return_if_fail (eth != NULL);
- g_return_if_fail (E_IS_TABLE_HEADER (eth));
-
- enqueue (eth, idx, size);
-}
-
-static void
-eth_do_remove (ETableHeader *eth, int idx, gboolean do_unref)
-{
- if (do_unref)
- g_object_unref (eth->columns [idx]);
-
- memmove (&eth->columns [idx], &eth->columns [idx+1],
- sizeof (ETableCol *) * (eth->col_count - idx - 1));
- eth->col_count--;
-}
-
-static void
-eth_finalize (GObject *object)
-{
- ETableHeader *eth = E_TABLE_HEADER (object);
- const int cols = eth->col_count;
- int i;
-
- if (eth->sort_info) {
- if (eth->sort_info_group_change_id)
- g_signal_handler_disconnect(G_OBJECT(eth->sort_info),
- eth->sort_info_group_change_id);
- g_object_unref(eth->sort_info);
- eth->sort_info = NULL;
- }
-
- if (eth->idle)
- g_source_remove(eth->idle);
- eth->idle = 0;
-
- if (eth->change_queue) {
- g_slist_foreach(eth->change_queue, (GFunc) g_free, NULL);
- g_slist_free(eth->change_queue);
- eth->change_queue = NULL;
- }
-
- /*
- * Destroy columns
- */
- for (i = cols - 1; i >= 0; i--){
- eth_do_remove (eth, i, TRUE);
- }
- g_free (eth->columns);
-
- eth->col_count = 0;
- eth->columns = NULL;
-
- if (e_table_header_parent_class->finalize)
- e_table_header_parent_class->finalize (object);
-}
-
-static void
-eth_group_info_changed(ETableSortInfo *info, ETableHeader *eth)
-{
- enqueue(eth, -1, eth->nominal_width);
-}
-
-static void
-eth_set_property (GObject *object, guint prop_id, const GValue *val, GParamSpec *pspec)
-{
- ETableHeader *eth = E_TABLE_HEADER (object);
-
- switch (prop_id) {
- case PROP_WIDTH:
- eth->nominal_width = g_value_get_double (val);
- enqueue(eth, -1, eth->nominal_width);
- break;
- case PROP_WIDTH_EXTRAS:
- eth->width_extras = g_value_get_double (val);
- enqueue(eth, -1, eth->nominal_width);
- break;
- case PROP_SORT_INFO:
- if (eth->sort_info) {
- if (eth->sort_info_group_change_id)
- g_signal_handler_disconnect(G_OBJECT(eth->sort_info), eth->sort_info_group_change_id);
- g_object_unref (eth->sort_info);
- }
- eth->sort_info = E_TABLE_SORT_INFO(g_value_get_object (val));
- if (eth->sort_info) {
- g_object_ref(eth->sort_info);
- eth->sort_info_group_change_id
- = g_signal_connect(G_OBJECT(eth->sort_info), "group_info_changed",
- G_CALLBACK(eth_group_info_changed), eth);
- }
- enqueue(eth, -1, eth->nominal_width);
- break;
- default:
- break;
- }
-}
-
-static void
-eth_get_property (GObject *object, guint prop_id, GValue *val, GParamSpec *pspec)
-{
- ETableHeader *eth = E_TABLE_HEADER (object);
-
- switch (prop_id) {
- case PROP_SORT_INFO:
- g_value_set_object (val, G_OBJECT(eth->sort_info));
- break;
- case PROP_WIDTH:
- g_value_set_double (val, eth->nominal_width);
- break;
- case PROP_WIDTH_EXTRAS:
- g_value_set_double (val, eth->width_extras);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-e_table_header_class_init (GObjectClass *object_class)
-{
- ETableHeaderClass *klass = E_TABLE_HEADER_CLASS (object_class);
-
- object_class->finalize = eth_finalize;
- object_class->set_property = eth_set_property;
- object_class->get_property = eth_get_property;
-
- e_table_header_parent_class = g_type_class_peek_parent (object_class);
-
- g_object_class_install_property (
- object_class, PROP_WIDTH,
- g_param_spec_double ("width", "Width", "Width",
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class, PROP_WIDTH_EXTRAS,
- g_param_spec_double ("width_extras", "Width of Extras", "Width of Extras",
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class, PROP_SORT_INFO,
- g_param_spec_object ("sort_info", "Sort Info", "Sort Info",
- E_TABLE_SORT_INFO_TYPE,
- G_PARAM_READWRITE));
-
- eth_signals [STRUCTURE_CHANGE] =
- g_signal_new ("structure_change",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableHeaderClass, structure_change),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- eth_signals [DIMENSION_CHANGE] =
- g_signal_new ("dimension_change",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableHeaderClass, dimension_change),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- eth_signals [EXPANSION_CHANGE] =
- g_signal_new ("expansion_change",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableHeaderClass, expansion_change),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- eth_signals [REQUEST_WIDTH] =
- g_signal_new ("request_width",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableHeaderClass, request_width),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_INT__INT,
- G_TYPE_INT, 1, G_TYPE_INT);
-
- klass->structure_change = NULL;
- klass->dimension_change = NULL;
- klass->expansion_change = NULL;
- klass->request_width = NULL;
-}
-
-static void
-e_table_header_init (ETableHeader *eth)
-{
- eth->col_count = 0;
- eth->width = 0;
-
- eth->sort_info = NULL;
- eth->sort_info_group_change_id = 0;
-
- eth->columns = NULL;
-
- eth->change_queue = NULL;
- eth->change_tail = NULL;
-
- eth->width_extras = 0;
-}
-
-/**
- * e_table_header_new:
- *
- * Returns: A new @ETableHeader object.
- */
-ETableHeader *
-e_table_header_new (void)
-{
-
- return (ETableHeader *) g_object_new (E_TABLE_HEADER_TYPE, NULL);
-}
-
-static void
-eth_update_offsets (ETableHeader *eth)
-{
- int i;
- int x = 0;
-
- for (i = 0; i < eth->col_count; i++){
- ETableCol *etc = eth->columns [i];
-
- etc->x = x;
- x += etc->width;
- }
-}
-
-static void
-eth_do_insert (ETableHeader *eth, int pos, ETableCol *val)
-{
- memmove (&eth->columns [pos+1], &eth->columns [pos],
- sizeof (ETableCol *) * (eth->col_count - pos));
- eth->columns [pos] = val;
- eth->col_count ++;
-}
-
-/**
- * e_table_header_add_column:
- * @eth: the table header to add the column to.
- * @tc: the ETableCol definition
- * @pos: position where the ETableCol will go.
- *
- * This function adds the @tc ETableCol definition into the @eth ETableHeader
- * at position @pos. This is the way you add new ETableCols to the
- * ETableHeader. The header will assume ownership of the @tc; you should not
- * unref it after you add it.
- *
- * This function will emit the "structure_change" signal on the @eth object.
- * The ETableCol is assumed
- */
-void
-e_table_header_add_column (ETableHeader *eth, ETableCol *tc, int pos)
-{
- g_return_if_fail (eth != NULL);
- g_return_if_fail (E_IS_TABLE_HEADER (eth));
- g_return_if_fail (tc != NULL);
- g_return_if_fail (E_IS_TABLE_COL (tc));
- g_return_if_fail (pos >= -1 && pos <= eth->col_count);
-
- if (pos == -1)
- pos = eth->col_count;
- eth->columns = g_realloc (eth->columns, sizeof (ETableCol *) * (eth->col_count + 1));
-
- /*
- * We are the primary owners of the column
- */
- g_object_ref (tc);
-
- eth_do_insert (eth, pos, tc);
-
- enqueue(eth, -1, eth->nominal_width);
- g_signal_emit (G_OBJECT (eth), eth_signals [STRUCTURE_CHANGE], 0);
-}
-
-/**
- * e_table_header_get_column:
- * @eth: the ETableHeader to query
- * @column: the column inside the @eth.
- *
- * Returns: The ETableCol at @column in the @eth object
- */
-ETableCol *
-e_table_header_get_column (ETableHeader *eth, int column)
-{
- g_return_val_if_fail (eth != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), NULL);
-
- if (column < 0)
- return NULL;
-
- if (column >= eth->col_count)
- return NULL;
-
- return eth->columns [column];
-}
-
-/**
- * e_table_header_get_column_by_col_id:
- * @eth: the ETableHeader to query
- * @col_id: the col_id to search for.
- *
- * Returns: The ETableCol with col_idx = @col_idx in the @eth object
- */
-ETableCol *
-e_table_header_get_column_by_col_idx (ETableHeader *eth, int col_idx)
-{
- int i;
- g_return_val_if_fail (eth != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), NULL);
-
- for (i = 0; i < eth->col_count; i++) {
- if (eth->columns[i]->col_idx == col_idx) {
- return eth->columns [i];
- }
- }
-
- return NULL;
-}
-
-/**
- * e_table_header_count:
- * @eth: the ETableHeader to query
- *
- * Returns: the number of columns in this ETableHeader.
- */
-int
-e_table_header_count (ETableHeader *eth)
-{
- g_return_val_if_fail (eth != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), 0);
-
- return eth->col_count;
-}
-
-/**
- * e_table_header_index:
- * @eth: the ETableHeader to query
- * @col: the column to fetch.
- *
- * ETableHeaders contain the visual list of columns that the user will
- * view. The visible columns will typically map to different columns
- * in the ETableModel (because the user reordered the data for
- * example).
- *
- * Returns: the column in the model that the @col column
- * in the ETableHeader points to. */
-int
-e_table_header_index (ETableHeader *eth, int col)
-{
- g_return_val_if_fail (eth != NULL, -1);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), -1);
- g_return_val_if_fail (col >= 0 && col < eth->col_count, -1);
-
- return eth->columns [col]->col_idx;
-}
-
-/**
- * e_table_header_get_index_at:
- * @eth: the ETableHeader to query
- * @x_offset: a pixel count from the beginning of the ETableHeader
- *
- * This will return the ETableHeader column that would contain
- * the @x_offset pixel.
- *
- * Returns: the column that contains pixel @x_offset, or -1
- * if no column inside this ETableHeader contains that pixel.
- */
-int
-e_table_header_get_index_at (ETableHeader *eth, int x_offset)
-{
- int i, total;
-
- g_return_val_if_fail (eth != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), 0);
-
- total = 0;
- for (i = 0; i < eth->col_count; i++){
- total += eth->columns [i]->width;
-
- if (x_offset < total)
- return i;
- }
-
- return -1;
-}
-
-/**
- * e_table_header_get_columns:
- * @eth: The ETableHeader to query
- *
- * Returns: A NULL terminated array of the ETableCols
- * contained in the ETableHeader @eth. Note that every
- * returned ETableCol in the array has been referenced, to release
- * this information you need to g_free the buffer returned
- * and you need to g_object_unref every element returned
- */
-ETableCol **
-e_table_header_get_columns (ETableHeader *eth)
-{
- ETableCol **ret;
- int i;
-
- g_return_val_if_fail (eth != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), 0);
-
- ret = g_new (ETableCol *, eth->col_count + 1);
- memcpy (ret, eth->columns, sizeof (ETableCol *) * eth->col_count);
- ret [eth->col_count] = NULL;
-
- for (i = 0; i < eth->col_count; i++) {
- g_object_ref(ret[i]);
- }
-
- return ret;
-}
-
-/**
- * e_table_header_get_selected:
- * @eth: The ETableHeader to query
- *
- * Returns: The number of selected columns in the @eth object.
- */
-int
-e_table_header_get_selected (ETableHeader *eth)
-{
- int i;
- int selected = 0;
-
- g_return_val_if_fail (eth != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), 0);
-
- for (i = 0; i < eth->col_count; i++){
- if (eth->columns [i]->selected)
- selected++;
- }
-
- return selected;
-}
-
-/**
- * e_table_header_total_width:
- * @eth: The ETableHeader to query
- *
- * Returns: the number of pixels used by the @eth object
- * when rendered on screen
- */
-int
-e_table_header_total_width (ETableHeader *eth)
-{
- int total, i;
-
- g_return_val_if_fail (eth != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), 0);
-
- total = 0;
- for (i = 0; i < eth->col_count; i++)
- total += eth->columns [i]->width;
-
- return total;
-}
-
-/**
- * e_table_header_min_width:
- * @eth: The ETableHeader to query
- *
- * Returns: the minimum number of pixels required by the @eth object.
- **/
-int
-e_table_header_min_width (ETableHeader *eth)
-{
- int total, i;
-
- g_return_val_if_fail (eth != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), 0);
-
- total = 0;
- for (i = 0; i < eth->col_count; i++)
- total += eth->columns [i]->min_width;
-
- return total;
-}
-
-/**
- * e_table_header_move:
- * @eth: The ETableHeader to operate on.
- * @source_index: the source column to move.
- * @target_index: the target location for the column
- *
- * This function moves the column @source_index to @target_index
- * inside the @eth ETableHeader. The signals "dimension_change"
- * and "structure_change" will be emmited
- */
-void
-e_table_header_move (ETableHeader *eth, int source_index, int target_index)
-{
- ETableCol *old;
-
- g_return_if_fail (eth != NULL);
- g_return_if_fail (E_IS_TABLE_HEADER (eth));
- g_return_if_fail (source_index >= 0);
- g_return_if_fail (target_index >= 0);
- g_return_if_fail (source_index < eth->col_count);
- g_return_if_fail (target_index < eth->col_count + 1); /* Can be moved beyond the last item. */
-
- if (source_index < target_index)
- target_index --;
-
- old = eth->columns [source_index];
- eth_do_remove (eth, source_index, FALSE);
- eth_do_insert (eth, target_index, old);
- eth_update_offsets (eth);
-
- g_signal_emit (G_OBJECT (eth), eth_signals [DIMENSION_CHANGE], 0, eth->width);
- g_signal_emit (G_OBJECT (eth), eth_signals [STRUCTURE_CHANGE], 0);
-}
-
-/**
- * e_table_header_remove:
- * @eth: The ETableHeader to operate on.
- * @idx: the index to the column to be removed.
- *
- * Removes the column at @idx position in the ETableHeader @eth.
- * This emmits the "structure_change" signal on the @eth object.
- */
-void
-e_table_header_remove (ETableHeader *eth, int idx)
-{
- g_return_if_fail (eth != NULL);
- g_return_if_fail (E_IS_TABLE_HEADER (eth));
- g_return_if_fail (idx >= 0);
- g_return_if_fail (idx < eth->col_count);
-
- eth_do_remove (eth, idx, TRUE);
- enqueue(eth, -1, eth->nominal_width);
- g_signal_emit (G_OBJECT (eth), eth_signals [STRUCTURE_CHANGE], 0);
-}
-
-/*
- * FIXME: deprecated?
- */
-void
-e_table_header_set_selection (ETableHeader *eth, gboolean allow_selection)
-{
- g_return_if_fail (eth != NULL);
- g_return_if_fail (E_IS_TABLE_HEADER (eth));
-}
-
-static void
-eth_set_size (ETableHeader *eth, int idx, int size)
-{
- double expansion;
- double old_expansion;
- int min_width;
- int left_width;
- int total_extra;
- int expandable_count;
- int usable_width;
- int i;
- g_return_if_fail (eth != NULL);
- g_return_if_fail (E_IS_TABLE_HEADER (eth));
- g_return_if_fail (idx >= 0);
- g_return_if_fail (idx < eth->col_count);
-
- /* If this column is not resizable, don't do anything. */
- if (!eth->columns[idx]->resizable)
- return;
-
- expansion = 0;
- min_width = 0;
- left_width = 0;
- expandable_count = -1;
-
- /* Calculate usable area. */
- for (i = 0; i < idx; i++) {
- left_width += eth->columns[i]->width;
- }
- /* - 1 to account for the last pixel border. */
- usable_width = eth->width - left_width - 1;
-
- if (eth->sort_info)
- usable_width -= e_table_sort_info_grouping_get_count(eth->sort_info) * GROUP_INDENT;
-
- /* Calculate minimum_width of stuff on the right as well as
- * total usable expansion on the right.
- */
- for (; i < eth->col_count; i++) {
- min_width += eth->columns[i]->min_width + eth->width_extras;
- if (eth->columns[i]->resizable) {
- expansion += eth->columns[i]->expansion;
- expandable_count ++;
- }
- }
- /* If there's no room for anything, don't change. */
- if (expansion == 0)
- return;
-
- /* (1) If none of the columns to the right are expandable, use
- * all the expansion space in this column.
- */
- if(expandable_count == 0) {
- eth->columns[idx]->expansion = expansion;
- for (i = idx + 1; i < eth->col_count; i++) {
- eth->columns[i]->expansion = 0;
- }
-
- g_signal_emit (G_OBJECT (eth), eth_signals [EXPANSION_CHANGE], 0);
- return;
- }
-
- total_extra = usable_width - min_width;
- /* If there's no extra space, set all expansions to 0. */
- if (total_extra <= 0) {
- for (i = idx; i < eth->col_count; i++) {
- eth->columns[i]->expansion = 0;
- }
- g_signal_emit (G_OBJECT (eth), eth_signals [EXPANSION_CHANGE], 0);
- return;
- }
-
- /* If you try to resize smaller than the minimum width, it
- * uses the minimum. */
- if (size < eth->columns[idx]->min_width + eth->width_extras)
- size = eth->columns[idx]->min_width + eth->width_extras;
-
- /* If all the extra space will be used up in this column, use
- * all the expansion and set all others to 0.
- */
- if (size >= total_extra + eth->columns[idx]->min_width + eth->width_extras) {
- eth->columns[idx]->expansion = expansion;
- for (i = idx + 1; i < eth->col_count; i++) {
- eth->columns[i]->expansion = 0;
- }
- g_signal_emit (G_OBJECT (eth), eth_signals [EXPANSION_CHANGE], 0);
- return;
- }
-
- /* The old_expansion used by columns to the right. */
- old_expansion = expansion;
- old_expansion -= eth->columns[idx]->expansion;
- /* Set the new expansion so that it will generate the desired size. */
- eth->columns[idx]->expansion = expansion * (((double)(size - (eth->columns[idx]->min_width + eth->width_extras)))/((double)total_extra));
- /* The expansion left for the columns on the right. */
- expansion -= eth->columns[idx]->expansion;
-
- /* (2) If the old columns to the right didn't have any
- * expansion before, expand them evenly. old_expansion > 0 by
- * expansion = SUM(i=idx to col_count -1,
- * columns[i]->min_width) - columns[idx]->min_width) =
- * SUM(non-negatives).
- */
- if (old_expansion == 0) {
- for (i = idx + 1; i < eth->col_count; i++) {
- if (eth->columns[idx]->resizable) {
- /* expandable_count != 0 by (1) */
- eth->columns[i]->expansion = expansion / expandable_count;
- }
- }
- g_signal_emit (G_OBJECT (eth), eth_signals [EXPANSION_CHANGE], 0);
- return;
- }
-
- /* Remove from total_extra the amount used for this column. */
- total_extra -= size - (eth->columns[idx]->min_width + eth->width_extras);
- for (i = idx + 1; i < eth->col_count; i++) {
- if (eth->columns[idx]->resizable) {
- /* old_expansion != 0 by (2) */
- eth->columns[i]->expansion *= expansion / old_expansion;
- }
- }
- g_signal_emit (G_OBJECT (eth), eth_signals [EXPANSION_CHANGE], 0);
-}
-
-/**
- * e_table_header_col_diff:
- * @eth: the ETableHeader to query.
- * @start_col: the starting column
- * @end_col: the ending column.
- *
- * Computes the number of pixels between the columns @start_col and
- * @end_col.
- *
- * Returns: the number of pixels between @start_col and @end_col on the
- * @eth ETableHeader object
- */
-int
-e_table_header_col_diff (ETableHeader *eth, int start_col, int end_col)
-{
- int total, col;
-
- g_return_val_if_fail (eth != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_HEADER (eth), 0);
-
- if (start_col < 0)
- start_col = 0;
- if (end_col > eth->col_count)
- end_col = eth->col_count;
-
- total = 0;
- for (col = start_col; col < end_col; col++){
-
- total += eth->columns [col]->width;
- }
-
- return total;
-}
-
-static void
-eth_calc_widths (ETableHeader *eth)
-{
- int i;
- int extra;
- double expansion;
- int last_position = 0;
- double next_position = 0;
- int last_resizable = -1;
- int *widths;
- gboolean changed;
-
- widths = g_new (int, eth->col_count);
-
- /* - 1 to account for the last pixel border. */
- extra = eth->width - 1;
- expansion = 0;
- for (i = 0; i < eth->col_count; i++) {
- extra -= eth->columns[i]->min_width + eth->width_extras;
- if (eth->columns[i]->resizable && eth->columns[i]->expansion > 0)
- last_resizable = i;
- expansion += eth->columns[i]->resizable ? eth->columns[i]->expansion : 0;
- widths[i] = eth->columns[i]->min_width + eth->width_extras;
- }
- if (eth->sort_info)
- extra -= e_table_sort_info_grouping_get_count(eth->sort_info) * GROUP_INDENT;
- if (expansion != 0 && extra > 0) {
- for (i = 0; i < last_resizable; i++) {
- next_position += extra * (eth->columns[i]->resizable ? eth->columns[i]->expansion : 0)/expansion;
- widths[i] += next_position - last_position;
- last_position = next_position;
- }
- widths[i] += extra - last_position;
- }
-
- changed = FALSE;
-
- for (i = 0; i < eth->col_count; i++) {
- if (eth->columns[i]->width != widths[i]) {
- changed = TRUE;
- eth->columns[i]->width = widths[i];
- }
- }
- g_free (widths);
- if (changed)
- g_signal_emit (G_OBJECT (eth), eth_signals [DIMENSION_CHANGE], 0, eth->width);
- eth_update_offsets (eth);
-}
-
-void
-e_table_header_update_horizontal (ETableHeader *eth)
-{
- int i;
- int cols;
-
- cols = eth->col_count;
-
- for (i = 0; i < cols; i++) {
- int width = 0;
-
- g_signal_emit_by_name (G_OBJECT (eth),
- "request_width",
- i, &width);
- eth->columns[i]->min_width = width + 10;
- eth->columns[i]->expansion = 1;
- }
- enqueue(eth, -1, eth->nominal_width);
- g_signal_emit (G_OBJECT (eth), eth_signals [EXPANSION_CHANGE], 0);
-}
-
-E_MAKE_TYPE(e_table_header, "ETableHeader", ETableHeader, e_table_header_class_init, e_table_header_init, G_TYPE_OBJECT)
-
-int
-e_table_header_prioritized_column (ETableHeader *eth)
-{
- int best_model_col = 0;
- int best_priority;
- int i;
- int count;
-
- count = e_table_header_count (eth);
- if (count == 0)
- return -1;
- best_priority = e_table_header_get_column (eth, 0)->priority;
- best_model_col = e_table_header_get_column (eth, 0)->col_idx;
- for (i = 1; i < count; i++) {
- int priority = e_table_header_get_column (eth, i)->priority;
- if (priority > best_priority) {
- best_priority = priority;
- best_model_col = e_table_header_get_column (eth, i)->col_idx;
- }
- }
- return best_model_col;
-}
-
-ETableCol *
-e_table_header_prioritized_column_selected (ETableHeader *eth, ETableColCheckFunc check_func, gpointer user_data)
-{
- ETableCol *best_col = NULL;
- int best_priority = G_MININT;
- int i;
- int count;
-
- count = e_table_header_count (eth);
- if (count == 0)
- return NULL;
- for (i = 1; i < count; i++) {
- ETableCol *col = e_table_header_get_column (eth, i);
- if (col) {
- if ((best_col == NULL || col->priority > best_priority) && check_func (col, user_data)) {
- best_priority = col->priority;
- best_col = col;
- }
- }
- }
- return best_col;
-}
diff --git a/widgets/table/e-table-header.h b/widgets/table/e-table-header.h
deleted file mode 100644
index 3a9ae6a0bf..0000000000
--- a/widgets/table/e-table-header.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-header.h
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_COLUMN_H_
-#define _E_TABLE_COLUMN_H_
-
-#include <glib-object.h>
-#include <gdk/gdk.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-col.h>
-
-G_BEGIN_DECLS
-
-typedef struct _ETableHeader ETableHeader;
-
-#define E_TABLE_HEADER_TYPE (e_table_header_get_type ())
-#define E_TABLE_HEADER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_HEADER_TYPE, ETableHeader))
-#define E_TABLE_HEADER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_HEADER_TYPE, ETableHeaderClass))
-#define E_IS_TABLE_HEADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_HEADER_TYPE))
-#define E_IS_TABLE_HEADER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_HEADER_TYPE))
-#define E_TABLE_HEADER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_HEADER_TYPE, ETableHeaderClass))
-
-typedef gboolean (*ETableColCheckFunc) (ETableCol *col, gpointer user_data);
-
-/*
- * A Columnar header.
- */
-struct _ETableHeader {
- GObject base;
-
- int col_count;
- int width;
- int nominal_width;
- int width_extras;
-
- ETableSortInfo *sort_info;
- int sort_info_group_change_id;
-
- ETableCol **columns;
-
- GSList *change_queue, *change_tail;
- gint idle;
-};
-
-typedef struct {
- GObjectClass parent_class;
-
- void (*structure_change) (ETableHeader *eth);
- void (*dimension_change) (ETableHeader *eth, int width);
- void (*expansion_change) (ETableHeader *eth);
- int (*request_width) (ETableHeader *eth, int col);
-} ETableHeaderClass;
-
-GType e_table_header_get_type (void);
-ETableHeader *e_table_header_new (void);
-
-void e_table_header_add_column (ETableHeader *eth,
- ETableCol *tc,
- int pos);
-ETableCol *e_table_header_get_column (ETableHeader *eth,
- int column);
-ETableCol *e_table_header_get_column_by_col_idx (ETableHeader *eth,
- int col_idx);
-int e_table_header_count (ETableHeader *eth);
-int e_table_header_index (ETableHeader *eth,
- int col);
-int e_table_header_get_index_at (ETableHeader *eth,
- int x_offset);
-ETableCol **e_table_header_get_columns (ETableHeader *eth);
-int e_table_header_get_selected (ETableHeader *eth);
-
-int e_table_header_total_width (ETableHeader *eth);
-int e_table_header_min_width (ETableHeader *eth);
-void e_table_header_move (ETableHeader *eth,
- int source_index,
- int target_index);
-void e_table_header_remove (ETableHeader *eth,
- int idx);
-void e_table_header_set_size (ETableHeader *eth,
- int idx,
- int size);
-void e_table_header_set_selection (ETableHeader *eth,
- gboolean allow_selection);
-int e_table_header_col_diff (ETableHeader *eth,
- int start_col,
- int end_col);
-
-void e_table_header_calc_widths (ETableHeader *eth);
-GList *e_table_header_get_selected_indexes (ETableHeader *eth);
-void e_table_header_update_horizontal (ETableHeader *eth);
-int e_table_header_prioritized_column (ETableHeader *eth);
-ETableCol *e_table_header_prioritized_column_selected (ETableHeader *eth,
- ETableColCheckFunc check_func,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_HEADER_H_ */
-
diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c
deleted file mode 100644
index a582502b7b..0000000000
--- a/widgets/table/e-table-item.c
+++ /dev/null
@@ -1,3734 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-item.c
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@gnu.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/*
- * TODO:
- * Add a border to the thing, so that focusing works properly.
- */
-#include <config.h>
-
-#include "e-table-item.h"
-
-#include <X11/Xlib.h>
-
-#include <math.h>
-#include <stdio.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkmain.h>
-#include <gdk/gdkkeysyms.h>
-#include "e-table-subset.h"
-#include "e-cell.h"
-#include "gal/a11y/e-table/gal-a11y-e-table-item-factory.h"
-#include "gal/widgets/e-hsv-utils.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-canvas-utils.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include <string.h>
-#include <stdlib.h>
-#include <atk/atk.h>
-
-#define PARENT_OBJECT_TYPE gnome_canvas_item_get_type ()
-
-#define FOCUSED_BORDER 2
-
-#define d(x)
-
-#if d(!)0
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)), g_print ("%s: e_table_item_leave_edit\n", __FUNCTION__))
-#else
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)))
-#endif
-
-static void eti_check_cursor_bounds (ETableItem *eti);
-static void eti_cancel_drag_due_to_model_change (ETableItem *eti);
-
-/* FIXME: Do an analysis of which cell functions are needed before
- realize and make sure that all of them are doable by all the cells
- and that all of the others are only done after realization. */
-
-static GnomeCanvasItemClass *eti_parent_class;
-
-enum {
- CURSOR_CHANGE,
- CURSOR_ACTIVATED,
- DOUBLE_CLICK,
- RIGHT_CLICK,
- CLICK,
- KEY_PRESS,
- START_DRAG,
- STYLE_SET,
- SELECTION_MODEL_REMOVED,
- SELECTION_MODEL_ADDED,
- LAST_SIGNAL
-};
-
-static guint eti_signals [LAST_SIGNAL] = { 0, };
-
-enum {
- PROP_0,
- PROP_TABLE_HEADER,
- PROP_TABLE_MODEL,
- PROP_SELECTION_MODEL,
- PROP_TABLE_ALTERNATING_ROW_COLORS,
- PROP_TABLE_HORIZONTAL_DRAW_GRID,
- PROP_TABLE_VERTICAL_DRAW_GRID,
- PROP_TABLE_DRAW_FOCUS,
- PROP_CURSOR_MODE,
- PROP_LENGTH_THRESHOLD,
- PROP_CURSOR_ROW,
- PROP_UNIFORM_ROW_HEIGHT,
-
- PROP_MINIMUM_WIDTH,
- PROP_WIDTH,
- PROP_HEIGHT
-};
-
-#define DOUBLE_CLICK_TIME 250
-#define TRIPLE_CLICK_TIME 500
-
-
-static int eti_get_height (ETableItem *eti);
-static int eti_row_height (ETableItem *eti, int row);
-static void e_table_item_focus (ETableItem *eti, int col, int row, GdkModifierType state);
-static void eti_cursor_change (ESelectionModel *selection, int row, int col, ETableItem *eti);
-static void eti_cursor_activated (ESelectionModel *selection, int row, int col, ETableItem *eti);
-static void eti_selection_change (ESelectionModel *selection, ETableItem *eti);
-static void eti_selection_row_change (ESelectionModel *selection, int row, ETableItem *eti);
-static void e_table_item_redraw_row (ETableItem *eti, int row);
-
-#define ETI_SINGLE_ROW_HEIGHT(eti) ((eti)->uniform_row_height_cache != -1 ? (eti)->uniform_row_height_cache : eti_row_height((eti), -1))
-#define ETI_MULTIPLE_ROW_HEIGHT(eti,row) ((eti)->height_cache && (eti)->height_cache[(row)] != -1 ? (eti)->height_cache[(row)] : eti_row_height((eti),(row)))
-#define ETI_ROW_HEIGHT(eti,row) ((eti)->uniform_row_height ? ETI_SINGLE_ROW_HEIGHT ((eti)) : ETI_MULTIPLE_ROW_HEIGHT((eti),(row)))
-
-inline static gint
-model_to_view_row(ETableItem *eti, int row)
-{
- int i;
- if (row == -1)
- return -1;
- if (eti->uses_source_model) {
- ETableSubset *etss = E_TABLE_SUBSET(eti->table_model);
- if (eti->row_guess >= 0 && eti->row_guess < etss->n_map) {
- if (etss->map_table[eti->row_guess] == row) {
- return eti->row_guess;
- }
- }
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] == row)
- return i;
- }
- return -1;
- } else
- return row;
-}
-
-inline static gint
-view_to_model_row(ETableItem *eti, int row)
-{
- if (eti->uses_source_model) {
- ETableSubset *etss = E_TABLE_SUBSET(eti->table_model);
- if (row >= 0 && row < etss->n_map) {
- eti->row_guess = row;
- return etss->map_table[row];
- } else
- return -1;
- } else
- return row;
-}
-
-inline static gint
-model_to_view_col(ETableItem *eti, int col)
-{
- int i;
- if (col == -1)
- return -1;
- for (i = 0; i < eti->cols; i++) {
- ETableCol *ecol = e_table_header_get_column (eti->header, i);
- if (ecol->col_idx == col)
- return i;
- }
- return -1;
-}
-
-inline static gint
-view_to_model_col(ETableItem *eti, int col)
-{
- ETableCol *ecol = e_table_header_get_column (eti->header, col);
- return ecol ? ecol->col_idx : -1;
-}
-
-static void
-grab_cancelled (ECanvas *canvas, GnomeCanvasItem *item, gpointer data)
-{
- ETableItem *eti = data;
-
- eti->grab_cancelled = TRUE;
-}
-
-inline static void
-eti_grab (ETableItem *eti, guint32 time)
-{
- GnomeCanvasItem *item = GNOME_CANVAS_ITEM (eti);
- d(g_print ("%s: time: %d\n", __FUNCTION__, time));
- if (eti->grabbed_count == 0) {
- eti->gtk_grabbed = FALSE;
- eti->grab_cancelled = FALSE;
- if (e_canvas_item_grab(E_CANVAS (item->canvas),
- item,
- GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK
- | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK,
- NULL, time,
- grab_cancelled,
- eti) != GrabSuccess) {
- d(g_print ("%s: gtk_grab_add\n", __FUNCTION__));
- gtk_grab_add (GTK_WIDGET (item->canvas));
- eti->gtk_grabbed = TRUE;
- }
- }
- eti->grabbed_count ++;
-}
-
-inline static void
-eti_ungrab (ETableItem *eti, guint32 time)
-{
- GnomeCanvasItem *item = GNOME_CANVAS_ITEM (eti);
- d(g_print ("%s: time: %d\n", __FUNCTION__, time));
- eti->grabbed_count --;
- if (eti->grabbed_count == 0) {
- if (eti->grab_cancelled) {
- eti->grab_cancelled = FALSE;
- } else {
- if (eti->gtk_grabbed) {
- d(g_print ("%s: gtk_grab_remove\n", __FUNCTION__));
- gtk_grab_remove (GTK_WIDGET (item->canvas));
- eti->gtk_grabbed = FALSE;
- }
- gnome_canvas_item_ungrab(item, time);
- eti->grabbed_col = -1;
- eti->grabbed_row = -1;
- }
- }
-}
-
-inline static gboolean
-eti_editing (ETableItem *eti)
-{
- d(g_print("%s: %s\n", __FUNCTION__, (eti->editing_col == -1) ? "false":"true"));
-
- if (eti->editing_col == -1)
- return FALSE;
- else
- return TRUE;
-}
-
-inline static GdkColor *
-eti_get_cell_background_color (ETableItem *eti, int row, int col, gboolean selected, gboolean *allocatedp)
-{
- ECellView *ecell_view = eti->cell_views [col];
- GtkWidget *canvas = GTK_WIDGET(GNOME_CANVAS_ITEM(eti)->canvas);
- GdkColor *background, bg;
- gchar *color_spec = NULL;
- gboolean allocated = FALSE;
-
- if (selected){
- if (GTK_WIDGET_HAS_FOCUS(canvas))
- background = &canvas->style->bg [GTK_STATE_SELECTED];
- else
- background = &canvas->style->bg [GTK_STATE_ACTIVE];
- } else {
- background = &canvas->style->base [GTK_STATE_NORMAL];
- }
-
- color_spec = e_cell_get_bg_color (ecell_view, row);
-
- if (color_spec != NULL) {
- if (gdk_color_parse (color_spec, &bg)) {
- background = gdk_color_copy (&bg);
- gdk_colormap_alloc_color (gtk_widget_get_colormap (GTK_WIDGET (canvas)), background,
- FALSE, TRUE);
- allocated = TRUE;
- }
- }
-
- if (eti->alternating_row_colors) {
- if (row % 2) {
-
- } else {
- if (!allocated) {
- background = gdk_color_copy (background);
- allocated = TRUE;
- }
- e_hsv_tweak (background, 0.0f, 0.0f, -0.07f);
- gdk_colormap_alloc_color (gtk_widget_get_colormap (GTK_WIDGET (canvas)), background,
- FALSE, TRUE);
- }
- }
- if (allocatedp)
- *allocatedp = allocated;
-
- return background;
-}
-
-inline static GdkColor *
-eti_get_cell_foreground_color (ETableItem *eti, int row, int col, gboolean selected, gboolean *allocated)
-{
- GtkWidget *canvas = GTK_WIDGET(GNOME_CANVAS_ITEM(eti)->canvas);
- GdkColor *foreground;
-
- if (allocated)
- *allocated = FALSE;
-
- if (selected){
- if (GTK_WIDGET_HAS_FOCUS (canvas))
- foreground = &canvas->style->fg [GTK_STATE_SELECTED];
- else
- foreground = &canvas->style->fg [GTK_STATE_ACTIVE];
- } else {
- foreground = &canvas->style->text [GTK_STATE_NORMAL];
- }
-
- return foreground;
-}
-
-static void
-eti_free_save_state (ETableItem *eti)
-{
- if (eti->save_row == -1 ||
- !eti->cell_views_realized)
- return;
-
- e_cell_free_state (eti->cell_views [eti->save_col], view_to_model_col(eti, eti->save_col),
- eti->save_col, eti->save_row, eti->save_state);
- eti->save_row = -1;
- eti->save_col = -1;
- eti->save_state = NULL;
-}
-
-/*
- * During realization, we have to invoke the per-ecell realize routine
- * (On our current setup, we have one e-cell per column.
- *
- * We might want to optimize this to only realize the unique e-cells:
- * ie, a strings-only table, uses the same e-cell for every column, and
- * we might want to avoid realizing each e-cell.
- */
-static void
-eti_realize_cell_views (ETableItem *eti)
-{
- int i;
-
- if (eti->cell_views_realized)
- return;
-
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED))
- return;
-
- for (i = 0; i < eti->n_cells; i++)
- e_cell_realize (eti->cell_views [i]);
- eti->cell_views_realized = 1;
-}
-
-static void
-eti_attach_cell_views (ETableItem *eti)
-{
- int i;
-
- g_assert (eti->header);
- g_assert (eti->table_model);
-
- /* this is just c&p from model pre change, but it fixes things */
- eti_cancel_drag_due_to_model_change (eti);
- eti_check_cursor_bounds (eti);
- if (eti_editing (eti))
- e_table_item_leave_edit_(eti);
- eti->motion_row = -1;
- eti->motion_col = -1;
-
- /*
- * Now realize the various ECells
- */
- eti->n_cells = eti->cols;
- eti->cell_views = g_new (ECellView *, eti->n_cells);
-
- for (i = 0; i < eti->n_cells; i++){
- ETableCol *ecol = e_table_header_get_column (eti->header, i);
-
- eti->cell_views [i] = e_cell_new_view (ecol->ecell, eti->table_model, eti);
- }
-
- eti->needs_compute_height = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-}
-
-/*
- * During unrealization: we invoke every e-cell (one per column in the current
- * setup) to dispose all X resources allocated
- */
-static void
-eti_unrealize_cell_views (ETableItem *eti)
-{
- int i;
-
- if (eti->cell_views_realized == 0)
- return;
-
- eti_free_save_state (eti);
-
- for (i = 0; i < eti->n_cells; i++)
- e_cell_unrealize (eti->cell_views [i]);
- eti->cell_views_realized = 0;
-}
-
-static void
-eti_detach_cell_views (ETableItem *eti)
-{
- int i;
-
- eti_free_save_state (eti);
-
- for (i = 0; i < eti->n_cells; i++){
- e_cell_kill_view (eti->cell_views [i]);
- eti->cell_views [i] = NULL;
- }
-
- g_free (eti->cell_views);
- eti->cell_views = NULL;
- eti->n_cells = 0;
-}
-
-static void
-eti_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2)
-{
- double i2c [6];
- ArtPoint c1, c2, i1, i2;
- ETableItem *eti = E_TABLE_ITEM (item);
-
- /* Wrong BBox's are the source of redraw nightmares */
-
- gnome_canvas_item_i2c_affine (GNOME_CANVAS_ITEM (eti), i2c);
-
- i1.x = eti->x1;
- i1.y = eti->y1;
- i2.x = eti->x1 + eti->width;
- i2.y = eti->y1 + eti->height;
- art_affine_point (&c1, &i1, i2c);
- art_affine_point (&c2, &i2, i2c);
-
- *x1 = c1.x;
- *y1 = c1.y;
- *x2 = c2.x + 1;
- *y2 = c2.y + 1;
-}
-
-static void
-eti_reflow (GnomeCanvasItem *item, gint flags)
-{
- ETableItem *eti = E_TABLE_ITEM (item);
-
- if (eti->needs_compute_height) {
- int new_height = eti_get_height (eti);
-
- if (new_height != eti->height) {
- eti->height = new_height;
- e_canvas_item_request_parent_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
- }
- eti->needs_compute_height = 0;
- }
- if (eti->needs_compute_width) {
- int new_width = e_table_header_total_width(eti->header);
- if (new_width != eti->width) {
- eti->width = new_width;
- e_canvas_item_request_parent_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
- }
- eti->needs_compute_width = 0;
- }
-}
-
-/*
- * GnomeCanvasItem::update method
- */
-static void
-eti_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
-{
- ArtPoint o1, o2;
- ETableItem *eti = E_TABLE_ITEM (item);
-
- if (GNOME_CANVAS_ITEM_CLASS (eti_parent_class)->update)
- (*GNOME_CANVAS_ITEM_CLASS (eti_parent_class)->update)(item, affine, clip_path, flags);
-
- o1.x = item->x1;
- o1.y = item->y1;
- o2.x = item->x2;
- o2.y = item->y2;
-
- eti_bounds (item, &item->x1, &item->y1, &item->x2, &item->y2);
- if (item->x1 != o1.x ||
- item->y1 != o1.y ||
- item->x2 != o2.x ||
- item->y2 != o2.y) {
- gnome_canvas_request_redraw (item->canvas, o1.x, o1.y, o2.x, o2.y);
- eti->needs_redraw = 1;
- }
-
- if (eti->needs_redraw) {
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1,
- item->x2, item->y2);
- eti->needs_redraw = 0;
- }
-}
-
-/*
- * eti_remove_table_model:
- *
- * Invoked to release the table model associated with this ETableItem
- */
-static void
-eti_remove_table_model (ETableItem *eti)
-{
- if (!eti->table_model)
- return;
-
- g_signal_handler_disconnect (G_OBJECT (eti->table_model),
- eti->table_model_pre_change_id);
- g_signal_handler_disconnect (G_OBJECT (eti->table_model),
- eti->table_model_no_change_id);
- g_signal_handler_disconnect (G_OBJECT (eti->table_model),
- eti->table_model_change_id);
- g_signal_handler_disconnect (G_OBJECT (eti->table_model),
- eti->table_model_row_change_id);
- g_signal_handler_disconnect (G_OBJECT (eti->table_model),
- eti->table_model_cell_change_id);
- g_signal_handler_disconnect (G_OBJECT (eti->table_model),
- eti->table_model_rows_inserted_id);
- g_signal_handler_disconnect (G_OBJECT (eti->table_model),
- eti->table_model_rows_deleted_id);
- g_object_unref (eti->table_model);
- if (eti->source_model)
- g_object_unref (eti->source_model);
-
- eti->table_model_pre_change_id = 0;
- eti->table_model_no_change_id = 0;
- eti->table_model_change_id = 0;
- eti->table_model_row_change_id = 0;
- eti->table_model_cell_change_id = 0;
- eti->table_model_rows_inserted_id = 0;
- eti->table_model_rows_deleted_id = 0;
- eti->table_model = NULL;
- eti->source_model = NULL;
- eti->uses_source_model = 0;
-}
-
-/*
- * eti_remove_table_model:
- *
- * Invoked to release the table model associated with this ETableItem
- */
-static void
-eti_remove_selection_model (ETableItem *eti)
-{
- if (!eti->selection)
- return;
-
- g_signal_handler_disconnect (eti->selection,
- eti->selection_change_id);
- g_signal_handler_disconnect (eti->selection,
- eti->selection_row_change_id);
- g_signal_handler_disconnect (eti->selection,
- eti->cursor_change_id);
- g_signal_handler_disconnect (eti->selection,
- eti->cursor_activated_id);
- g_object_unref (eti->selection);
-
- eti->selection_change_id = 0;
- eti->selection_row_change_id = 0;
- eti->cursor_activated_id = 0;
- eti->selection = NULL;
-}
-
-/*
- * eti_remove_header_model:
- *
- * Invoked to release the header model associated with this ETableItem
- */
-static void
-eti_remove_header_model (ETableItem *eti)
-{
- if (!eti->header)
- return;
-
- g_signal_handler_disconnect (G_OBJECT (eti->header),
- eti->header_structure_change_id);
- g_signal_handler_disconnect (G_OBJECT (eti->header),
- eti->header_dim_change_id);
- g_signal_handler_disconnect (G_OBJECT (eti->header),
- eti->header_request_width_id);
-
- if (eti->cell_views){
- eti_unrealize_cell_views (eti);
- eti_detach_cell_views (eti);
- }
- g_object_unref (eti->header);
-
-
- eti->header_structure_change_id = 0;
- eti->header_dim_change_id = 0;
- eti->header_request_width_id = 0;
- eti->header = NULL;
-}
-
-/*
- * eti_row_height_real:
- *
- * Returns the height used by row @row. This does not include the one-pixel
- * used as a separator between rows
- */
-static int
-eti_row_height_real (ETableItem *eti, int row)
-{
- const int cols = e_table_header_count (eti->header);
- int col;
- int h, max_h;
-
- g_assert (cols == 0 || eti->cell_views);
-
- max_h = 0;
-
- for (col = 0; col < cols; col++){
- h = e_cell_height (eti->cell_views [col], view_to_model_col(eti, col), col, row);
-
- if (h > max_h)
- max_h = h;
- }
- return max_h;
-}
-
-static void
-confirm_height_cache (ETableItem *eti)
-{
- int i;
-
- if (eti->uniform_row_height || eti->height_cache)
- return;
- eti->height_cache = g_new(int, eti->rows);
- for (i = 0; i < eti->rows; i++) {
- eti->height_cache[i] = -1;
- }
-}
-
-static gboolean
-height_cache_idle(ETableItem *eti)
-{
- int changed = 0;
- int i;
- confirm_height_cache(eti);
- for (i = eti->height_cache_idle_count; i < eti->rows; i++) {
- if (eti->height_cache[i] == -1) {
- eti_row_height(eti, i);
- changed ++;
- if (changed >= 20)
- break;
- }
- }
- if (changed >= 20) {
- eti->height_cache_idle_count = i;
- return TRUE;
- }
- eti->height_cache_idle_id = 0;
- return FALSE;
-}
-
-static void
-free_height_cache (ETableItem *eti)
-{
- if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS (eti)) {
- if (eti->height_cache)
- g_free (eti->height_cache);
- eti->height_cache = NULL;
- eti->height_cache_idle_count = 0;
- eti->uniform_row_height_cache = -1;
-
- if (eti->uniform_row_height && eti->height_cache_idle_id != 0) {
- g_source_remove(eti->height_cache_idle_id);
- eti->height_cache_idle_id = 0;
- }
-
- if ((!eti->uniform_row_height) && eti->height_cache_idle_id == 0)
- eti->height_cache_idle_id = g_idle_add_full(G_PRIORITY_LOW, (GSourceFunc) height_cache_idle, eti, NULL);
- }
-}
-
-static void
-calculate_height_cache (ETableItem *eti)
-{
- free_height_cache(eti);
- confirm_height_cache(eti);
-}
-
-
-/*
- * eti_row_height:
- *
- * Returns the height used by row @row. This does not include the one-pixel
- * used as a separator between rows
- */
-static int
-eti_row_height (ETableItem *eti, int row)
-{
- if (eti->uniform_row_height) {
- eti->uniform_row_height_cache = eti_row_height_real (eti, -1);
- return eti->uniform_row_height_cache;
- } else {
- if (!eti->height_cache) {
- calculate_height_cache (eti);
- }
- if (eti->height_cache[row] == -1) {
- eti->height_cache[row] = eti_row_height_real(eti, row);
- if (row > 0 &&
- eti->length_threshold != -1 &&
- eti->rows > eti->length_threshold &&
- eti->height_cache[row] != eti_row_height(eti, 0)) {
- eti->needs_compute_height = 1;
- e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(eti));
- }
- }
- return eti->height_cache[row];
- }
-}
-
-/*
- * eti_get_height:
- *
- * Returns the height of the ETableItem.
- *
- * The ETableItem might compute the whole height by asking every row its
- * size. There is a special mode (designed to work when there are too
- * many rows in the table that performing the previous step could take
- * too long) set by the ETableItem->length_threshold that would determine
- * when the height is computed by using the first row as the size for
- * every other row in the ETableItem.
- */
-static int
-eti_get_height (ETableItem *eti)
-{
- const int rows = eti->rows;
- int height_extra = eti->horizontal_draw_grid ? 1 : 0;
-
- if (rows == 0)
- return 0;
-
- if (eti->uniform_row_height) {
- int row_height = eti_row_height(eti, -1);
- return ((row_height + height_extra) * rows + height_extra);
- } else {
- int height;
- int row;
- if (eti->length_threshold != -1){
- if (rows > eti->length_threshold){
- int row_height = eti_row_height(eti, 0);
- if (eti->height_cache) {
- height = 0;
- for (row = 0; row < rows; row++) {
- if (eti->height_cache[row] == -1) {
- height += (row_height + height_extra) * (rows - row);
- break;
- }
- else
- height += eti->height_cache[row] + height_extra;
- }
- } else
- height = (eti_row_height (eti, 0) + height_extra) * rows;
-
- /*
- * 1 pixel at the top
- */
- return height + height_extra;
- }
- }
-
- height = height_extra;
- for (row = 0; row < rows; row++)
- height += eti_row_height (eti, row) + height_extra;
-
- return height;
- }
-}
-
-static void
-eti_item_region_redraw (ETableItem *eti, int x0, int y0, int x1, int y1)
-{
- GnomeCanvasItem *item = GNOME_CANVAS_ITEM (eti);
- ArtDRect rect;
- double i2c [6];
-
- rect.x0 = x0;
- rect.y0 = y0;
- rect.x1 = x1;
- rect.y1 = y1;
-
- gnome_canvas_item_i2c_affine (item, i2c);
- art_drect_affine_transform (&rect, &rect, i2c);
-
- gnome_canvas_request_redraw (item->canvas, rect.x0, rect.y0, rect.x1, rect.y1);
-}
-
-/*
- * Computes the distance between @start_row and @end_row in pixels
- */
-int
-e_table_item_row_diff (ETableItem *eti, int start_row, int end_row)
-{
- int height_extra = eti->horizontal_draw_grid ? 1 : 0;
-
- if (start_row < 0)
- start_row = 0;
- if (end_row > eti->rows)
- end_row = eti->rows;
-
- if (eti->uniform_row_height) {
- return ((end_row - start_row) * (eti_row_height(eti, -1) + height_extra));
- } else {
- int row, total;
- total = 0;
- for (row = start_row; row < end_row; row++)
- total += eti_row_height (eti, row) + height_extra;
-
- return total;
- }
-}
-
-static void
-eti_get_region (ETableItem *eti,
- int start_col, int start_row,
- int end_col, int end_row,
- int *x1p, int *y1p,
- int *x2p, int *y2p)
-{
- int x1, y1, x2, y2;
-
- x1 = e_table_header_col_diff (eti->header, 0, start_col);
- y1 = e_table_item_row_diff (eti, 0, start_row);
- x2 = x1 + e_table_header_col_diff (eti->header, start_col, end_col + 1);
- y2 = y1 + e_table_item_row_diff (eti, start_row, end_row + 1);
- if (x1p)
- *x1p = x1;
- if (y1p)
- *y1p = y1;
- if (x2p)
- *x2p = x2;
- if (y2p)
- *y2p = y2;
-}
-
-/*
- * eti_request_region_redraw:
- *
- * Request a canvas redraw on the range (start_col, start_row) to (end_col, end_row).
- * This is inclusive (ie, you can use: 0,0-0,0 to redraw the first cell).
- *
- * The @border argument is a number of pixels around the region that should also be queued
- * for redraw. This is typically used by the focus routines to queue a redraw for the
- * border as well.
- */
-static void
-eti_request_region_redraw (ETableItem *eti,
- int start_col, int start_row,
- int end_col, int end_row, int border)
-{
- int x1, y1, x2, y2;
-
- if (eti->rows > 0) {
-
- eti_get_region (eti,
- start_col, start_row,
- end_col, end_row,
- &x1, &y1, &x2, &y2);
-
- eti_item_region_redraw (eti, eti->x1 + x1 - border,
- eti->y1 + y1 - border,
- eti->x1 + x2 + 1 + border,
- eti->y1 + y2 + 1 + border);
- }
-}
-
-/*
- * eti_request_region_show
- *
- * Request a canvas show on the range (start_col, start_row) to (end_col, end_row).
- * This is inclusive (ie, you can use: 0,0-0,0 to show the first cell).
- */
-static void
-eti_request_region_show (ETableItem *eti,
- int start_col, int start_row,
- int end_col, int end_row, int delay)
-{
- int x1, y1, x2, y2;
-
- eti_get_region (eti,
- start_col, start_row,
- end_col, end_row,
- &x1, &y1, &x2, &y2);
-
- if (delay)
- e_canvas_item_show_area_delayed(GNOME_CANVAS_ITEM(eti), x1, y1, x2, y2, delay);
- else
- e_canvas_item_show_area(GNOME_CANVAS_ITEM(eti), x1, y1, x2, y2);
-}
-
-static void
-eti_show_cursor (ETableItem *eti, int delay)
-{
- int cursor_row;
-
- if (!((GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED) && eti->cell_views_realized))
- return;
-
- if (eti->frozen_count > 0) {
- eti->queue_show_cursor = TRUE;
- return;
- }
-
-#if 0
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- NULL);
-#else
- cursor_row = e_selection_model_cursor_row (eti->selection);
-#endif
-
- d(g_print ("%s: cursor row: %d\n", __FUNCTION__, cursor_row));
-
- if (cursor_row != -1) {
- cursor_row = model_to_view_row (eti, cursor_row);
- eti_request_region_show (eti,
- 0, cursor_row, eti->cols - 1, cursor_row,
- delay);
- }
-}
-
-static void
-eti_check_cursor_on_screen (ETableItem *eti)
-{
- if (eti->cursor_x1 == -1 ||
- eti->cursor_y1 == -1 ||
- eti->cursor_x2 == -1 ||
- eti->cursor_y2 == -1)
- return;
-
- eti->cursor_on_screen = e_canvas_item_area_shown (GNOME_CANVAS_ITEM(eti),
- eti->cursor_x1,
- eti->cursor_y1,
- eti->cursor_x2,
- eti->cursor_y2);
-
- d(g_print ("%s: cursor on screen: %s\n", __FUNCTION__, eti->cursor_on_screen ? "TRUE" : "FALSE"));
-}
-
-static void
-eti_check_cursor_bounds (ETableItem *eti)
-{
- int x1, y1, x2, y2;
- int cursor_row;
-
- if (!((GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED) && eti->cell_views_realized))
- return;
-
- if (eti->frozen_count > 0) {
- return;
- }
-
- if (!((GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED) && eti->cell_views_realized))
- return;
-
- if (eti->frozen_count > 0) {
- return;
- }
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- NULL);
-
- if (cursor_row == -1) {
- eti->cursor_x1 = -1;
- eti->cursor_y1 = -1;
- eti->cursor_x2 = -1;
- eti->cursor_y2 = -1;
- eti->cursor_on_screen = TRUE;
- return;
- }
-
- d(g_print ("%s: model cursor row: %d\n", __FUNCTION__, cursor_row));
-
- cursor_row = model_to_view_row (eti, cursor_row);
-
- d(g_print ("%s: cursor row: %d\n", __FUNCTION__, cursor_row));
-
- eti_get_region (eti,
- 0, cursor_row, eti->cols - 1, cursor_row,
- &x1, &y1, &x2, &y2);
- eti->cursor_x1 = x1;
- eti->cursor_y1 = y1;
- eti->cursor_x2 = x2;
- eti->cursor_y2 = y2;
- eti->cursor_on_screen = e_canvas_item_area_shown (GNOME_CANVAS_ITEM(eti), x1, y1, x2, y2);
-
- d(g_print ("%s: cursor on screen: %s\n", __FUNCTION__, eti->cursor_on_screen ? "TRUE" : "FALSE"));
-}
-
-static void
-eti_maybe_show_cursor(ETableItem *eti, int delay)
-{
- d(g_print ("%s: cursor on screen: %s\n", __FUNCTION__, eti->cursor_on_screen ? "TRUE" : "FALSE"));
- if (eti->cursor_on_screen)
- eti_show_cursor (eti, delay);
- eti_check_cursor_bounds (eti);
-}
-
-static gboolean
-eti_idle_show_cursor_cb (gpointer data)
-{
- ETableItem *eti = data;
-
- if (eti->selection) {
- eti_show_cursor (eti, 0);
- eti_check_cursor_bounds (eti);
- }
-
- eti->cursor_idle_id = 0;
- g_object_unref (eti);
- return FALSE;
-}
-
-static void
-eti_idle_maybe_show_cursor(ETableItem *eti)
-{
- d(g_print ("%s: cursor on screen: %s\n", __FUNCTION__, eti->cursor_on_screen ? "TRUE" : "FALSE"));
- if (eti->cursor_on_screen) {
- g_object_ref (eti);
- if (!eti->cursor_idle_id)
- eti->cursor_idle_id = g_idle_add (eti_idle_show_cursor_cb, eti);
- }
-}
-
-static void
-eti_cancel_drag_due_to_model_change (ETableItem *eti)
-{
- if (eti->maybe_in_drag) {
- eti->maybe_in_drag = FALSE;
- if (!eti->maybe_did_something)
- e_selection_model_do_something(E_SELECTION_MODEL (eti->selection), eti->drag_row, eti->drag_col, eti->drag_state);
- }
- if (eti->in_drag) {
- eti->in_drag = FALSE;
- }
-}
-
-static void
-eti_freeze (ETableItem *eti)
-{
- eti->frozen_count ++;
- d(g_print ("%s: %d\n", __FUNCTION__, eti->frozen_count));
-}
-
-static void
-eti_unfreeze (ETableItem *eti)
-{
- g_return_if_fail (eti->frozen_count > 0);
- eti->frozen_count --;
- d(g_print ("%s: %d\n", __FUNCTION__, eti->frozen_count));
- if (eti->frozen_count == 0 && eti->queue_show_cursor) {
- eti_show_cursor (eti, 0);
- eti_check_cursor_bounds (eti);
- eti->queue_show_cursor = FALSE;
- }
-}
-
-/*
- * Callback routine: invoked before the ETableModel suffers a change
- */
-static void
-eti_table_model_pre_change (ETableModel *table_model, ETableItem *eti)
-{
- eti_cancel_drag_due_to_model_change (eti);
- eti_check_cursor_bounds (eti);
- if (eti_editing (eti))
- e_table_item_leave_edit_(eti);
- eti->motion_row = -1;
- eti->motion_col = -1;
- eti_freeze (eti);
-}
-
-/*
- * Callback routine: invoked when the ETableModel has not suffered a change
- */
-static void
-eti_table_model_no_change (ETableModel *table_model, ETableItem *eti)
-{
- eti_unfreeze (eti);
-}
-
-/*
- * Callback routine: invoked when the ETableModel has suffered a change
- */
-
-static void
-eti_table_model_changed (ETableModel *table_model, ETableItem *eti)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED)) {
- eti_unfreeze (eti);
- return;
- }
-
- eti->rows = e_table_model_row_count (eti->table_model);
-
- free_height_cache(eti);
-
- eti_unfreeze (eti);
-
- eti->needs_compute_height = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-
- eti_idle_maybe_show_cursor(eti);
-}
-
-static void
-eti_table_model_row_changed (ETableModel *table_model, int row, ETableItem *eti)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED)) {
- eti_unfreeze (eti);
- return;
- }
-
- if ((!eti->uniform_row_height) && eti->height_cache && eti->height_cache[row] != -1 && eti_row_height_real(eti, row) != eti->height_cache[row]) {
- eti_table_model_changed (table_model, eti);
- return;
- }
-
- eti_unfreeze (eti);
-
- e_table_item_redraw_row (eti, row);
-}
-
-static void
-eti_table_model_cell_changed (ETableModel *table_model, int col, int row, ETableItem *eti)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED)) {
- eti_unfreeze (eti);
- return;
- }
-
- if ((!eti->uniform_row_height) && eti->height_cache && eti->height_cache[row] != -1 && eti_row_height_real(eti, row) != eti->height_cache[row]) {
- eti_table_model_changed (table_model, eti);
- return;
- }
-
- eti_unfreeze (eti);
-
- e_table_item_redraw_row (eti, row);
-}
-
-static void
-eti_table_model_rows_inserted (ETableModel *table_model, int row, int count, ETableItem *eti)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED)) {
- eti_unfreeze (eti);
- return;
- }
- eti->rows = e_table_model_row_count (eti->table_model);
-
- if (eti->height_cache) {
- int i;
- eti->height_cache = g_renew(int, eti->height_cache, eti->rows);
- memmove(eti->height_cache + row + count, eti->height_cache + row, (eti->rows - count - row) * sizeof(int));
- for (i = row; i < row + count; i++)
- eti->height_cache[i] = -1;
- }
-
- eti_unfreeze (eti);
-
- eti_idle_maybe_show_cursor(eti);
-
- eti->needs_compute_height = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-}
-
-static void
-eti_table_model_rows_deleted (ETableModel *table_model, int row, int count, ETableItem *eti)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED)) {
- eti_unfreeze (eti);
- return;
- }
-
- eti->rows = e_table_model_row_count (eti->table_model);
-
- if (eti->height_cache && (eti->rows > row)) {
- memmove(eti->height_cache + row, eti->height_cache + row + count, (eti->rows - row) * sizeof(int));
- }
-
- eti_unfreeze (eti);
-
- eti_idle_maybe_show_cursor(eti);
-
- eti->needs_compute_height = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-}
-
-/**
- * e_table_item_redraw_range
- * @eti: %ETableItem which will be redrawn
- * @start_col: The first col to redraw.
- * @start_row: The first row to redraw.
- * @end_col: The last col to redraw.
- * @end_row: The last row to redraw.
- *
- * This routine redraws the given %ETableItem in the range given. The
- * range is inclusive at both ends.
- */
-void
-e_table_item_redraw_range (ETableItem *eti,
- int start_col, int start_row,
- int end_col, int end_row)
-{
- int border;
- int cursor_col, cursor_row;
-
- g_return_if_fail (eti != NULL);
- g_return_if_fail (E_IS_TABLE_ITEM (eti));
-
- g_object_get(eti->selection,
- "cursor_col", &cursor_col,
- "cursor_row", &cursor_row,
- NULL);
-
- if ((start_col == cursor_col) ||
- (end_col == cursor_col) ||
- (view_to_model_row(eti, start_row) == cursor_row) ||
- (view_to_model_row(eti, end_row) == cursor_row))
- border = 2;
- else
- border = 0;
-
- eti_request_region_redraw(eti, start_col, start_row, end_col, end_row, border);
-}
-
-static void
-e_table_item_redraw_row (ETableItem *eti,
- int row)
-{
- if (row != -1)
- e_table_item_redraw_range (eti, 0, row, eti->cols - 1, row);
-}
-
-static void
-eti_add_table_model (ETableItem *eti, ETableModel *table_model)
-{
- g_assert (eti->table_model == NULL);
-
- eti->table_model = table_model;
- g_object_ref (eti->table_model);
-
- eti->table_model_pre_change_id = g_signal_connect (
- G_OBJECT (table_model), "model_pre_change",
- G_CALLBACK (eti_table_model_pre_change), eti);
-
- eti->table_model_no_change_id = g_signal_connect (
- G_OBJECT (table_model), "model_no_change",
- G_CALLBACK (eti_table_model_no_change), eti);
-
- eti->table_model_change_id = g_signal_connect (
- G_OBJECT (table_model), "model_changed",
- G_CALLBACK (eti_table_model_changed), eti);
-
- eti->table_model_row_change_id = g_signal_connect (
- G_OBJECT (table_model), "model_row_changed",
- G_CALLBACK (eti_table_model_row_changed), eti);
-
- eti->table_model_cell_change_id = g_signal_connect (
- G_OBJECT (table_model), "model_cell_changed",
- G_CALLBACK (eti_table_model_cell_changed), eti);
-
- eti->table_model_rows_inserted_id = g_signal_connect (
- G_OBJECT (table_model), "model_rows_inserted",
- G_CALLBACK (eti_table_model_rows_inserted), eti);
-
- eti->table_model_rows_deleted_id = g_signal_connect (
- G_OBJECT (table_model), "model_rows_deleted",
- G_CALLBACK (eti_table_model_rows_deleted), eti);
-
- if (eti->header) {
- eti_detach_cell_views (eti);
- eti_attach_cell_views (eti);
- }
-
- if (E_IS_TABLE_SUBSET(table_model)) {
- eti->uses_source_model = 1;
- eti->source_model = E_TABLE_SUBSET(table_model)->source;
- if (eti->source_model)
- g_object_ref(eti->source_model);
- }
-
- eti_freeze (eti);
-
- eti_table_model_changed (table_model, eti);
-}
-
-static void
-eti_add_selection_model (ETableItem *eti, ESelectionModel *selection)
-{
- g_assert (eti->selection == NULL);
-
- eti->selection = selection;
- g_object_ref (eti->selection);
-
- eti->selection_change_id = g_signal_connect (
- selection, "selection_changed",
- G_CALLBACK (eti_selection_change), eti);
-
- eti->selection_row_change_id = g_signal_connect (
- selection, "selection_row_changed",
- G_CALLBACK (eti_selection_row_change), eti);
-
- eti->cursor_change_id = g_signal_connect (
- selection, "cursor_changed",
- G_CALLBACK (eti_cursor_change), eti);
-
- eti->cursor_activated_id = g_signal_connect (
- selection, "cursor_activated",
- G_CALLBACK (eti_cursor_activated), eti);
-
- eti_selection_change(selection, eti);
- g_signal_emit_by_name (G_OBJECT(eti),
- "selection_model_added", eti->selection);
-}
-
-static void
-eti_header_dim_changed (ETableHeader *eth, int col, ETableItem *eti)
-{
- eti->needs_compute_width = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-}
-
-static void
-eti_header_structure_changed (ETableHeader *eth, ETableItem *eti)
-{
- eti->cols = e_table_header_count (eti->header);
-
- /*
- * There should be at least one column
- * BUT: then you can't remove all columns from a header and add new ones.
- */
- /*g_assert (eti->cols != 0);*/
-
- if (eti->cell_views){
- eti_unrealize_cell_views (eti);
- eti_detach_cell_views (eti);
- eti_attach_cell_views (eti);
- eti_realize_cell_views (eti);
- } else {
- if (eti->table_model) {
- eti_attach_cell_views (eti);
- eti_realize_cell_views (eti);
- }
- }
- eti->needs_compute_width = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-}
-
-static int
-eti_request_column_width (ETableHeader *eth, int col, ETableItem *eti)
-{
- int width = 0;
-
- if (eti->cell_views && eti->cell_views_realized) {
- width = e_cell_max_width (eti->cell_views[col], view_to_model_col(eti, col), col);
- }
-
- return width;
-}
-
-static void
-eti_add_header_model (ETableItem *eti, ETableHeader *header)
-{
- g_assert (eti->header == NULL);
-
- eti->header = header;
- g_object_ref (header);
-
- eti_header_structure_changed (header, eti);
-
- eti->header_dim_change_id = g_signal_connect (
- G_OBJECT (header), "dimension_change",
- G_CALLBACK (eti_header_dim_changed), eti);
-
- eti->header_structure_change_id = g_signal_connect (
- G_OBJECT (header), "structure_change",
- G_CALLBACK (eti_header_structure_changed), eti);
-
- eti->header_request_width_id = g_signal_connect
- (G_OBJECT (header), "request_width",
- G_CALLBACK (eti_request_column_width), eti);
-}
-
-/*
- * GObject::dispose method
- */
-static void
-eti_dispose (GObject *object)
-{
- ETableItem *eti = E_TABLE_ITEM (object);
-
- eti_remove_header_model (eti);
- eti_remove_table_model (eti);
- eti_remove_selection_model (eti);
-
- if (eti->height_cache_idle_id) {
- g_source_remove(eti->height_cache_idle_id);
- eti->height_cache_idle_id = 0;
- }
- eti->height_cache_idle_count = 0;
-
- if (eti->cursor_idle_id) {
- g_source_remove(eti->cursor_idle_id);
- eti->cursor_idle_id = 0;
- }
-
- if (eti->height_cache)
- g_free (eti->height_cache);
- eti->height_cache = NULL;
-
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(eti)->canvas));
- if (eti->tooltip) {
- if (eti->tooltip->background)
- gdk_color_free (eti->tooltip->background);
- eti->tooltip->background = NULL;
-
- if (eti->tooltip->foreground)
- gdk_color_free (eti->tooltip->foreground);
- eti->tooltip->foreground = NULL;
-
- if (eti->tooltip->timer) {
- gtk_timeout_remove (eti->tooltip->timer);
- eti->tooltip->timer = 0;
- }
- g_free (eti->tooltip);
- eti->tooltip = NULL;
- }
-
- if (G_OBJECT_CLASS (eti_parent_class)->dispose)
- (*G_OBJECT_CLASS (eti_parent_class)->dispose) (object);
-}
-
-static void
-eti_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ETableItem *eti;
- int cursor_col;
-
- item = GNOME_CANVAS_ITEM (object);
- eti = E_TABLE_ITEM (object);
-
- switch (prop_id){
- case PROP_TABLE_HEADER:
- eti_remove_header_model (eti);
- eti_add_header_model (eti, E_TABLE_HEADER(g_value_get_object (value)));
- break;
-
- case PROP_TABLE_MODEL:
- eti_remove_table_model (eti);
- eti_add_table_model (eti, E_TABLE_MODEL(g_value_get_object (value)));
- break;
-
- case PROP_SELECTION_MODEL:
- g_signal_emit_by_name (G_OBJECT(eti),
- "selection_model_removed", eti->selection);
- eti_remove_selection_model (eti);
- if (g_value_get_object (value))
- eti_add_selection_model (eti, E_SELECTION_MODEL(g_value_get_object(value)));
- break;
-
- case PROP_LENGTH_THRESHOLD:
- eti->length_threshold = g_value_get_int (value);
- break;
-
- case PROP_TABLE_ALTERNATING_ROW_COLORS:
- eti->alternating_row_colors = g_value_get_boolean (value);
- break;
-
- case PROP_TABLE_HORIZONTAL_DRAW_GRID:
- eti->horizontal_draw_grid = g_value_get_boolean (value);
- break;
-
- case PROP_TABLE_VERTICAL_DRAW_GRID:
- eti->vertical_draw_grid = g_value_get_boolean (value);
- break;
-
- case PROP_TABLE_DRAW_FOCUS:
- eti->draw_focus = g_value_get_boolean (value);
- break;
-
- case PROP_CURSOR_MODE:
- eti->cursor_mode = g_value_get_int (value);
- break;
-
- case PROP_MINIMUM_WIDTH:
- case PROP_WIDTH:
- if ((eti->minimum_width == eti->width && g_value_get_double(value) > eti->width) ||
- g_value_get_double(value) < eti->width) {
- eti->needs_compute_width = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM(eti));
- }
- eti->minimum_width = g_value_get_double (value);
- break;
- case PROP_CURSOR_ROW:
- g_object_get(eti->selection,
- "cursor_col", &cursor_col,
- NULL);
-
- e_table_item_focus (eti, cursor_col != -1 ? cursor_col : 0, view_to_model_row(eti, g_value_get_int (value)), 0);
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- if (eti->uniform_row_height != g_value_get_boolean (value)) {
- eti->uniform_row_height = g_value_get_boolean (value);
- if (GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED) {
- free_height_cache(eti);
- eti->needs_compute_height = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
- }
- }
- break;
- }
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(eti));
-}
-
-static void
-eti_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- ETableItem *eti;
- int row;
-
- item = GNOME_CANVAS_ITEM (object);
- eti = E_TABLE_ITEM (object);
-
- switch (prop_id){
- case PROP_WIDTH:
- g_value_set_double (value, eti->width);
- break;
- case PROP_HEIGHT:
- g_value_set_double (value, eti->height);
- break;
- case PROP_MINIMUM_WIDTH:
- g_value_set_double (value, eti->minimum_width);
- break;
- case PROP_CURSOR_ROW:
- g_object_get(eti->selection,
- "cursor_row", &row,
- NULL);
- g_value_set_int (value, model_to_view_row(eti, row));
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- g_value_set_boolean (value, eti->uniform_row_height);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-eti_init (GnomeCanvasItem *item)
-{
- ETableItem *eti = E_TABLE_ITEM (item);
-
- eti->motion_row = -1;
- eti->motion_col = -1;
- eti->editing_col = -1;
- eti->editing_row = -1;
- eti->height = 0;
- eti->width = 0;
- eti->minimum_width = 0;
-
- eti->save_col = -1;
- eti->save_row = -1;
- eti->save_state = NULL;
-
- eti->click_count = 0;
-
- eti->height_cache = NULL;
- eti->height_cache_idle_id = 0;
- eti->height_cache_idle_count = 0;
-
- eti->length_threshold = -1;
- eti->uniform_row_height = FALSE;
-
- eti->uses_source_model = 0;
- eti->source_model = NULL;
-
- eti->row_guess = -1;
- eti->cursor_mode = E_CURSOR_SIMPLE;
-
- eti->selection_change_id = 0;
- eti->selection_row_change_id = 0;
- eti->cursor_change_id = 0;
- eti->cursor_activated_id = 0;
- eti->selection = NULL;
-
- eti->old_cursor_row = -1;
-
- eti->needs_redraw = 0;
- eti->needs_compute_height = 0;
-
- eti->in_key_press = 0;
-
- eti->tooltip = g_new0 (ETableTooltip, 1);
- eti->tooltip->timer = 0;
- eti->tooltip->eti = GNOME_CANVAS_ITEM (eti);
- eti->tooltip->background = NULL;
- eti->tooltip->foreground = NULL;
-
- eti->maybe_did_something = TRUE;
-
- eti->grabbed_count = 0;
- eti->gtk_grabbed = 0;
-
- eti->in_drag = 0;
- eti->maybe_in_drag = 0;
- eti->grabbed = 0;
-
- eti->grabbed_col = -1;
- eti->grabbed_row = -1;
-
- eti->cursor_on_screen = FALSE;
- eti->cursor_x1 = -1;
- eti->cursor_y1 = -1;
- eti->cursor_x2 = -1;
- eti->cursor_y2 = -1;
-
- eti->rows = -1;
-
- eti->frozen_count = 0;
- eti->queue_show_cursor = FALSE;
-
- e_canvas_item_set_reflow_callback (GNOME_CANVAS_ITEM (eti), eti_reflow);
-}
-
-#define gray50_width 2
-#define gray50_height 2
-static const char gray50_bits[] = {
- 0x02, 0x01, };
-
-static void
-adjustment_changed (GtkAdjustment *adjustment, ETableItem *eti)
-{
- eti_check_cursor_on_screen (eti);
-}
-
-static void
-eti_realize (GnomeCanvasItem *item)
-{
- ETableItem *eti = E_TABLE_ITEM (item);
- GtkWidget *canvas_widget = GTK_WIDGET (item->canvas);
- GdkWindow *window;
-
- if (GNOME_CANVAS_ITEM_CLASS (eti_parent_class)->realize)
- (*GNOME_CANVAS_ITEM_CLASS (eti_parent_class)->realize)(item);
-
-
- eti->rows = e_table_model_row_count (eti->table_model);
-
- /*
- * Gdk Resource allocation
- */
- window = canvas_widget->window;
-
- eti->fill_gc = gdk_gc_new (window);
-
- eti->grid_gc = gdk_gc_new (window);
- gdk_gc_set_foreground (eti->grid_gc, &canvas_widget->style->dark [GTK_STATE_NORMAL]);
- eti->focus_gc = gdk_gc_new (window);
- gdk_gc_set_foreground (eti->focus_gc, &canvas_widget->style->bg [GTK_STATE_NORMAL]);
- gdk_gc_set_background (eti->focus_gc, &canvas_widget->style->fg [GTK_STATE_NORMAL]);
- eti->stipple = gdk_bitmap_create_from_data (NULL, gray50_bits, gray50_width, gray50_height);
- gdk_gc_set_ts_origin (eti->focus_gc, 0, 0);
- gdk_gc_set_stipple (eti->focus_gc, eti->stipple);
- gdk_gc_set_fill (eti->focus_gc, GDK_OPAQUE_STIPPLED);
-
- eti->hadjustment_change_id =
- g_signal_connect (gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)), "changed",
- G_CALLBACK (adjustment_changed), eti);
- eti->hadjustment_value_change_id =
- g_signal_connect (gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)), "value_changed",
- G_CALLBACK (adjustment_changed), eti);
- eti->vadjustment_change_id =
- g_signal_connect (gtk_layout_get_vadjustment(GTK_LAYOUT(item->canvas)), "changed",
- G_CALLBACK (adjustment_changed), eti);
- eti->vadjustment_value_change_id =
- g_signal_connect (gtk_layout_get_vadjustment(GTK_LAYOUT(item->canvas)), "value_changed",
- G_CALLBACK (adjustment_changed), eti);
-
- if (eti->cell_views == NULL)
- eti_attach_cell_views (eti);
-
- eti_realize_cell_views (eti);
-
- free_height_cache(eti);
-
- if (item->canvas->focused_item == NULL && eti->selection) {
- int row;
-
- row = e_selection_model_cursor_row (E_SELECTION_MODEL (eti->selection));
- row = model_to_view_row(eti, row);
- if (row != -1) {
- e_canvas_item_grab_focus (item, FALSE);
- eti_show_cursor (eti, 0);
- eti_check_cursor_bounds (eti);
- }
- }
-
- eti->needs_compute_height = 1;
- eti->needs_compute_width = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-}
-
-static void
-eti_unrealize (GnomeCanvasItem *item)
-{
- ETableItem *eti = E_TABLE_ITEM (item);
-
- if (eti->grabbed_count > 0) {
- d(g_print ("%s: eti_ungrab\n", __FUNCTION__));
- eti_ungrab (eti, -1);
- }
-
- if (eti_editing (eti))
- e_table_item_leave_edit_(eti);
-
- if (eti->height_cache_idle_id) {
- g_source_remove(eti->height_cache_idle_id);
- eti->height_cache_idle_id = 0;
- }
-
- if (eti->height_cache)
- g_free (eti->height_cache);
- eti->height_cache = NULL;
- eti->height_cache_idle_count = 0;
-
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(eti)->canvas));
- if (eti->tooltip) {
- if (eti->tooltip->background) {
- gdk_color_free (eti->tooltip->background);
- eti->tooltip->background = NULL;
- }
- if (eti->tooltip->foreground) {
- gdk_color_free (eti->tooltip->foreground);
- eti->tooltip->foreground = NULL;
- }
- if (eti->tooltip->timer) {
- gtk_timeout_remove (eti->tooltip->timer);
- eti->tooltip->timer = 0;
- }
- }
-
- gdk_gc_unref (eti->fill_gc);
- eti->fill_gc = NULL;
- gdk_gc_unref (eti->grid_gc);
- eti->grid_gc = NULL;
- gdk_gc_unref (eti->focus_gc);
- eti->focus_gc = NULL;
- gdk_bitmap_unref (eti->stipple);
- eti->stipple = NULL;
-
- eti_unrealize_cell_views (eti);
-
- eti->height = 0;
-
- g_signal_handler_disconnect(gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)),
- eti->hadjustment_change_id);
- g_signal_handler_disconnect(gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)),
- eti->hadjustment_value_change_id);
- g_signal_handler_disconnect(gtk_layout_get_vadjustment(GTK_LAYOUT(item->canvas)),
- eti->vadjustment_change_id);
- g_signal_handler_disconnect(gtk_layout_get_vadjustment(GTK_LAYOUT(item->canvas)),
- eti->vadjustment_value_change_id);
-
- if (GNOME_CANVAS_ITEM_CLASS (eti_parent_class)->unrealize)
- (*GNOME_CANVAS_ITEM_CLASS (eti_parent_class)->unrealize)(item);
-}
-
-
-
-static void
-eti_draw (GnomeCanvasItem *item, GdkDrawable *drawable, int x, int y, int width, int height)
-{
- ETableItem *eti = E_TABLE_ITEM (item);
- const int rows = eti->rows;
- const int cols = eti->cols;
- int row, col;
- int first_col, last_col, x_offset;
- int first_row, last_row, y_offset, yd;
- int x1, x2;
- int f_x1, f_x2, f_y1, f_y2;
- gboolean f_found;
- double i2c [6];
- ArtPoint eti_base, eti_base_item, lower_right;
- GtkWidget *canvas = GTK_WIDGET(item->canvas);
- int height_extra = eti->horizontal_draw_grid ? 1 : 0;
-
- /*
- * Find out our real position after grouping
- */
- gnome_canvas_item_i2c_affine (item, i2c);
- eti_base_item.x = eti->x1;
- eti_base_item.y = eti->y1;
- art_affine_point (&eti_base, &eti_base_item, i2c);
-
- eti_base_item.x = eti->x1 + eti->width;
- eti_base_item.y = eti->y1 + eti->height;
- art_affine_point (&lower_right, &eti_base_item, i2c);
-
- /*
- * First column to draw, last column to draw
- */
- first_col = -1;
- last_col = x_offset = 0;
- x1 = x2 = floor (eti_base.x);
- for (col = 0; col < cols; col++, x1 = x2){
- ETableCol *ecol = e_table_header_get_column (eti->header, col);
-
- x2 = x1 + ecol->width;
-
- if (x1 > (x + width))
- break;
- if (x2 < x)
- continue;
- if (first_col == -1){
- x_offset = x1 - x;
- first_col = col;
- }
- }
- last_col = col;
-
- /*
- * Nothing to paint
- */
- if (first_col == -1)
- return;
-
- /*
- * Compute row span.
- */
- if (eti->uniform_row_height) {
- first_row = (y - floor (eti_base.y) - height_extra) / (eti_row_height (eti, -1) + height_extra);
- last_row = (y + height - floor (eti_base.y) ) / (eti_row_height (eti, -1) + height_extra) + 1;
- if (first_row > last_row)
- return;
- y_offset = floor (eti_base.y) - y + height_extra + first_row * (eti_row_height (eti, -1) + height_extra);
- if (first_row < 0)
- first_row = 0;
- if (last_row > eti->rows)
- last_row = eti->rows;
- } else {
- int y1, y2;
-
- y_offset = 0;
- first_row = -1;
-
- y1 = y2 = floor (eti_base.y) + height_extra;
- for (row = 0; row < rows; row++, y1 = y2){
-
- y2 += ETI_ROW_HEIGHT (eti, row) + height_extra;
-
- if (y1 > y + height)
- break;
-
- if (y2 < y)
- continue;
-
- if (first_row == -1){
- y_offset = y1 - y;
- first_row = row;
- }
- }
- last_row = row;
-
- if (first_row == -1)
- return;
- }
-
- if (first_row == -1)
- return;
-
- /*
- * Draw cells
- */
- yd = y_offset;
- f_x1 = f_x2 = f_y1 = f_y2 = -1;
- f_found = FALSE;
-
- if (eti->horizontal_draw_grid && first_row == 0){
- gdk_draw_line (
- drawable, eti->grid_gc,
- eti_base.x - x, yd, eti_base.x + eti->width - x, yd);
- }
-
- yd += height_extra;
-
- for (row = first_row; row < last_row; row++){
- int xd, height;
- gboolean selected;
- gint cursor_col, cursor_row;
-
- height = ETI_ROW_HEIGHT (eti, row);
-
- xd = x_offset;
-/* printf ("paint: %d %d\n", yd, yd + height); */
-
- selected = e_selection_model_is_row_selected(E_SELECTION_MODEL (eti->selection), view_to_model_row(eti,row));
-
- g_object_get(eti->selection,
- "cursor_col", &cursor_col,
- "cursor_row", &cursor_row,
- NULL);
-
- for (col = first_col; col < last_col; col++){
- ETableCol *ecol = e_table_header_get_column (eti->header, col);
- ECellView *ecell_view = eti->cell_views [col];
- gboolean col_selected = selected;
- gboolean cursor = FALSE;
- ECellFlags flags;
- gboolean free_background;
- GdkColor *background;
-
- switch (eti->cursor_mode) {
- case E_CURSOR_SIMPLE:
- case E_CURSOR_SPREADSHEET:
- if (cursor_col == ecol->col_idx && cursor_row == view_to_model_row(eti, row)) {
- col_selected = !col_selected;
- cursor = TRUE;
- }
- break;
- case E_CURSOR_LINE:
- /* Nothing */
- break;
- }
-
- background = eti_get_cell_background_color (eti, row, col, col_selected, &free_background);
-
- gdk_gc_set_foreground (eti->fill_gc, background);
- gdk_draw_rectangle (drawable, eti->fill_gc, TRUE,
- xd, yd, ecol->width, height);
-
- if (free_background)
- gdk_color_free (background);
-
- flags = col_selected ? E_CELL_SELECTED : 0;
- flags |= GTK_WIDGET_HAS_FOCUS(canvas) ? E_CELL_FOCUSED : 0;
- flags |= cursor ? E_CELL_CURSOR : 0;
-
- switch (ecol->justification) {
- case GTK_JUSTIFY_LEFT:
- flags |= E_CELL_JUSTIFY_LEFT;
- break;
- case GTK_JUSTIFY_RIGHT:
- flags |= E_CELL_JUSTIFY_RIGHT;
- break;
- case GTK_JUSTIFY_CENTER:
- flags |= E_CELL_JUSTIFY_CENTER;
- break;
- case GTK_JUSTIFY_FILL:
- flags |= E_CELL_JUSTIFY_FILL;
- break;
- }
-
- e_cell_draw (ecell_view, drawable, ecol->col_idx, col, row, flags,
- xd, yd, xd + ecol->width, yd + height);
-
- if (!f_found) {
- switch (eti->cursor_mode) {
- case E_CURSOR_LINE:
- if (view_to_model_row(eti, row) == cursor_row) {
- f_x1 = floor (eti_base.x) - x;
- f_x2 = floor (lower_right.x) - x;
- f_y1 = yd;
- f_y2 = yd + height;
- f_found = TRUE;
- }
- break;
- case E_CURSOR_SIMPLE:
- case E_CURSOR_SPREADSHEET:
- if (view_to_model_col(eti, col) == cursor_col && view_to_model_row(eti, row) == cursor_row) {
- f_x1 = xd;
- f_x2 = xd + ecol->width;
- f_y1 = yd;
- f_y2 = yd + height;
- f_found = TRUE;
- }
- break;
- }
- }
-
- xd += ecol->width;
- }
- yd += height;
-
- if (eti->horizontal_draw_grid) {
- gdk_draw_line (
- drawable, eti->grid_gc,
- eti_base.x - x, yd, eti_base.x + eti->width - x, yd);
-
- yd++;
- }
- }
-
- if (eti->vertical_draw_grid){
- int xd = x_offset;
-
- for (col = first_col; col <= last_col; col++){
- ETableCol *ecol = e_table_header_get_column (eti->header, col);
-
- gdk_draw_line (
- drawable, eti->grid_gc,
- xd, y_offset, xd, yd - 1);
-
- /*
- * This looks wierd, but it is to draw the last line
- */
- if (ecol)
- xd += ecol->width;
- }
- }
-
- /*
- * Draw focus
- */
- if (eti->draw_focus && f_found) {
- gdk_gc_set_ts_origin (eti->focus_gc, f_x1, f_y1);
- gdk_draw_rectangle (drawable, eti->focus_gc, FALSE,
- f_x1, f_y1, f_x2 - f_x1 - 1, f_y2 - f_y1 - 1);
- }
-}
-
-static double
-eti_point (GnomeCanvasItem *item, double x, double y, int cx, int cy,
- GnomeCanvasItem **actual_item)
-{
- *actual_item = item;
-
- return 0.0;
-}
-
-static gboolean
-find_cell (ETableItem *eti, double x, double y, int *view_col_res, int *view_row_res, double *x1_res, double *y1_res)
-{
- const int cols = eti->cols;
- const int rows = eti->rows;
- gdouble x1, y1, x2, y2;
- int col, row;
-
- int height_extra = eti->horizontal_draw_grid ? 1 : 0;
-
- /* FIXME: this routine is inneficient, fix later */
-
- if (eti->grabbed_col >= 0 && eti->grabbed_row >= 0) {
- *view_col_res = eti->grabbed_col;
- *view_row_res = eti->grabbed_row;
- *x1_res = x - eti->x1 - e_table_header_col_diff (eti->header, 0, eti->grabbed_col);
- *y1_res = y - eti->y1 - e_table_item_row_diff (eti, 0, eti->grabbed_row);
- return TRUE;
- }
-
- if (cols == 0 || rows == 0)
- return FALSE;
-
- x -= eti->x1;
- y -= eti->y1;
-
- x1 = 0;
- for (col = 0; col < cols - 1; col++, x1 = x2){
- ETableCol *ecol = e_table_header_get_column (eti->header, col);
-
- if (x < x1)
- return FALSE;
-
- x2 = x1 + ecol->width;
-
- if (x <= x2)
- break;
- }
-
- if (eti->uniform_row_height) {
- if (y < height_extra)
- return FALSE;
- row = (y - height_extra) / (eti_row_height (eti, -1) + height_extra);
- y1 = row * (eti_row_height (eti, -1) + height_extra) + height_extra;
- if (row >= eti->rows)
- return FALSE;
- } else {
- y1 = y2 = height_extra;
- if (y < height_extra)
- return FALSE;
- for (row = 0; row < rows - 1; row++, y1 = y2){
- y2 += ETI_ROW_HEIGHT (eti, row) + height_extra;
-
- if (y <= y2)
- break;
- }
- }
- *view_col_res = col;
- if (x1_res)
- *x1_res = x - x1;
- *view_row_res = row;
- if (y1_res)
- *y1_res = y - y1;
- return TRUE;
-}
-
-static void
-eti_cursor_move (ETableItem *eti, gint row, gint column)
-{
- e_table_item_leave_edit_(eti);
- e_table_item_focus (eti, view_to_model_col(eti, column), view_to_model_row(eti, row), 0);
-}
-
-static void
-eti_cursor_move_left (ETableItem *eti)
-{
- int cursor_col, cursor_row;
- g_object_get(eti->selection,
- "cursor_col", &cursor_col,
- "cursor_row", &cursor_row,
- NULL);
-
- eti_cursor_move (eti, model_to_view_row(eti, cursor_row), model_to_view_col(eti, cursor_col) - 1);
-}
-
-static void
-eti_cursor_move_right (ETableItem *eti)
-{
- int cursor_col, cursor_row;
- g_object_get(eti->selection,
- "cursor_col", &cursor_col,
- "cursor_row", &cursor_row,
- NULL);
-
- eti_cursor_move (eti, model_to_view_row(eti, cursor_row), model_to_view_col(eti, cursor_col) + 1);
-}
-
-#ifdef DO_TOOLTIPS
-static int
-_do_tooltip (ETableItem *eti)
-{
- ECellView *ecell_view;
- gboolean free_color;
- ETableCol *ecol;
- gboolean selected;
- int cursor_row, cursor_col;
-
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(eti)->canvas));
-
- if (eti_editing (eti))
- return FALSE;
-
- ecell_view = eti->cell_views[eti->tooltip->col];
-
- eti->tooltip->x = e_table_header_col_diff (eti->header, 0, eti->tooltip->col);
-
- eti->tooltip->y = e_table_item_row_diff (eti, 0, eti->tooltip->row);
- eti->tooltip->row_height = ETI_ROW_HEIGHT (eti, eti->tooltip->row);
-
- selected = e_selection_model_is_row_selected(E_SELECTION_MODEL (eti->selection), view_to_model_row(eti,eti->tooltip->row));
-
- if (eti->tooltip->foreground)
- gdk_color_free (eti->tooltip->foreground);
- if (eti->tooltip->background)
- gdk_color_free (eti->tooltip->background);
-
- switch (eti->cursor_mode) {
- case E_CURSOR_SIMPLE:
- case E_CURSOR_SPREADSHEET:
- ecol = e_table_header_get_column (eti->header, eti->tooltip->col);
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
- if (cursor_col == ecol->col_idx && cursor_row == view_to_model_row(eti, eti->tooltip->row))
- selected = !selected;
- break;
- case E_CURSOR_LINE:
- /* Nothing */
- break;
- }
-
- eti->tooltip->background = eti_get_cell_background_color (eti, eti->tooltip->row, eti->tooltip->col, selected, &free_color);
- if (!free_color)
- eti->tooltip->background = gdk_color_copy(eti->tooltip->background);
-
- eti->tooltip->foreground = eti_get_cell_foreground_color (eti, eti->tooltip->row, eti->tooltip->col, selected, &free_color);
- if (!free_color)
- eti->tooltip->foreground = gdk_color_copy(eti->tooltip->foreground);
-
- e_cell_show_tooltip (ecell_view,
- view_to_model_col (eti, eti->tooltip->col),
- eti->tooltip->col,
- eti->tooltip->row,
- eti->header->columns[eti->tooltip->col]->width,
- eti->tooltip);
- return FALSE;
-}
-#endif
-
-static gint
-eti_e_cell_event (ETableItem *item, ECellView *ecell_view, GdkEvent *event, int time, int model_col, int view_col, int row, ECellFlags flags)
-{
- ECellActions actions = 0;
- gint ret_val;
-
- ret_val = e_cell_event (ecell_view, event, model_col, view_col, row, flags, &actions);
-
- if (actions & E_CELL_GRAB) {
- d(g_print ("%s: eti_grab\n", __FUNCTION__));
- eti_grab (item, time);
- item->grabbed_col = view_col;
- item->grabbed_row = row;
- }
-
- if (actions & E_CELL_UNGRAB) {
- d(g_print ("%s: eti_ungrab\n", __FUNCTION__));
- eti_ungrab (item, time);
- item->grabbed_col = -1;
- item->grabbed_row = -1;
- }
-
- return ret_val;
-}
-
-/* FIXME: cursor */
-static int
-eti_event (GnomeCanvasItem *item, GdkEvent *e)
-{
- ETableItem *eti = E_TABLE_ITEM (item);
- ECellView *ecell_view;
- gint return_val = TRUE;
-#if d(!)0
- gboolean leave = FALSE;
-#endif
-
- if (!eti->header)
- return FALSE;
-
- switch (e->type){
- case GDK_BUTTON_PRESS: {
- double x1, y1;
- double realx, realy;
- GdkEventButton button;
- int col, row;
- gint cursor_row, cursor_col;
- gint new_cursor_row, new_cursor_col;
- ECellFlags flags = 0;
-
- d(g_print("%s: GDK_BUTTON_PRESS received, button %d\n", __FUNCTION__, e->button.button));
-
- if (eti->tooltip->timer) {
- gtk_timeout_remove (eti->tooltip->timer);
- eti->tooltip->timer = 0;
- }
-
- switch (e->button.button) {
- case 1: /* Fall through. */
- case 2:
- e_canvas_item_grab_focus(GNOME_CANVAS_ITEM(eti), TRUE);
- gnome_canvas_item_w2i (item, &e->button.x, &e->button.y);
-
- realx = e->button.x;
- realy = e->button.y;
-
- if (!find_cell (eti, realx, realy, &col, &row, &x1, &y1)) {
- if (eti_editing (eti))
- e_table_item_leave_edit_(eti);
- return TRUE;
- }
-
- ecell_view = eti->cell_views [col];
- button = *(GdkEventButton *)e;
- button.x = x1;
- button.y = y1;
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
- if (cursor_col == view_to_model_col (eti, col) && cursor_row == view_to_model_row(eti, row)) {
- flags = E_CELL_CURSOR;
- } else {
- flags = 0;
- }
-
- return_val = eti_e_cell_event (eti, ecell_view, (GdkEvent *) &button, button.time, view_to_model_col(eti, col), col, row, flags);
- if (return_val)
- return TRUE;
-
- g_signal_emit (eti, eti_signals [CLICK], 0,
- row, view_to_model_col(eti, col), &button, &return_val);
-
- if (return_val) {
- eti->click_count = 0;
- return TRUE;
- }
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
- eti->maybe_did_something =
- e_selection_model_maybe_do_something(E_SELECTION_MODEL (eti->selection), view_to_model_row(eti, row), view_to_model_col(eti, col), button.state);
- g_object_get(eti->selection,
- "cursor_row", &new_cursor_row,
- "cursor_col", &new_cursor_col,
- NULL);
-
- if (cursor_row != new_cursor_row || cursor_col != new_cursor_col) {
- eti->click_count = 1;
- } else {
- eti->click_count ++;
- eti->row_guess = row;
-
- if ((!eti_editing(eti)) && e_table_model_is_cell_editable(eti->table_model, cursor_col, row)) {
- e_table_item_enter_edit (eti, col, row);
- }
-
- /*
- * Adjust the event positions
- */
-
- if (eti_editing (eti)) {
- return_val = eti_e_cell_event (eti, ecell_view, (GdkEvent *) &button, button.time,
- view_to_model_col(eti, col), col, row, E_CELL_EDITING | E_CELL_CURSOR);
- if (return_val)
- return TRUE;
- }
- }
-
- if (e->button.button == 1) {
- return_val = TRUE;
-
- eti->maybe_in_drag = TRUE;
- eti->drag_row = new_cursor_row;
- eti->drag_col = new_cursor_col;
- eti->drag_x = realx;
- eti->drag_y = realy;
- eti->drag_state = e->button.state;
- eti->grabbed = TRUE;
- d(g_print ("%s: eti_grab\n", __FUNCTION__));
- eti_grab (eti, e->button.time);
- }
-
- break;
- case 3:
- e_canvas_item_grab_focus(GNOME_CANVAS_ITEM(eti), TRUE);
- gnome_canvas_item_w2i (item, &e->button.x, &e->button.y);
- if (!find_cell (eti, e->button.x, e->button.y, &col, &row, &x1, &y1))
- return TRUE;
-
- e_selection_model_right_click_down(E_SELECTION_MODEL (eti->selection), view_to_model_row(eti, row), view_to_model_col(eti, col), 0);
-
- g_signal_emit (eti, eti_signals [RIGHT_CLICK], 0,
- row, view_to_model_col(eti, col), e, &return_val);
- if (!return_val)
- e_selection_model_right_click_up(E_SELECTION_MODEL (eti->selection));
- break;
- case 4:
- case 5:
- return FALSE;
- break;
-
- }
- break;
- }
-
- case GDK_BUTTON_RELEASE: {
- double x1, y1;
- int col, row;
- gint cursor_row, cursor_col;
-
- d(g_print("%s: GDK_BUTTON_RELEASE received, button %d\n", __FUNCTION__, e->button.button));
-
- if (eti->grabbed_count > 0) {
- d(g_print ("%s: eti_ungrab\n", __FUNCTION__));
- eti_ungrab (eti, e->button.time);
- }
-
- if (e->button.button == 1) {
- if (eti->maybe_in_drag) {
- eti->maybe_in_drag = FALSE;
- if (!eti->maybe_did_something)
- e_selection_model_do_something(E_SELECTION_MODEL (eti->selection), eti->drag_row, eti->drag_col, eti->drag_state);
- }
- if (eti->in_drag) {
- eti->in_drag = FALSE;
- }
- }
-
- if (eti->tooltip->timer) {
- gtk_timeout_remove (eti->tooltip->timer);
- eti->tooltip->timer = 0;
- }
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(eti)->canvas));
- switch (e->button.button) {
- case 1: /* Fall through. */
- case 2:
-
- gnome_canvas_item_w2i (item, &e->button.x, &e->button.y);
-#if d(!)0
- {
- gboolean cell_found = find_cell (eti, e->button.x, e->button.y, &col, &row, &x1, &y1);
- g_print("%s: find_cell(%f, %f) = %s(%d, %d, %f, %f)\n", __FUNCTION__, e->button.x, e->button.y,
- cell_found?"true":"false", col, row, x1, y1);
- }
-#endif
-
- if (!find_cell (eti, e->button.x, e->button.y, &col, &row, &x1, &y1))
- return TRUE;
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
-
- d(g_print("%s: GDK_BUTTON_RELEASE received, button %d, line: %d\n"
- "eti_editing: %s, row:%d:%d, col:%d:%d\n", __FUNCTION__, e->button.button, __LINE__,
- eti_editing(eti)?"true":"false", cursor_row, view_to_model_row(eti, row), cursor_col, view_to_model_col(eti, col)));
-
- if (eti_editing (eti) && cursor_row == view_to_model_row(eti, row) && cursor_col == view_to_model_col(eti, col)){
-
- d(g_print("%s: GDK_BUTTON_RELEASE received, button %d, line: %d\n", __FUNCTION__, e->button.button, __LINE__))
-;
-
- ecell_view = eti->cell_views [col];
-
- /*
- * Adjust the event positions
- */
- e->button.x = x1;
- e->button.y = y1;
-
- return_val = eti_e_cell_event (eti, ecell_view, e, e->button.time,
- view_to_model_col(eti, col), col, row, E_CELL_EDITING | E_CELL_CURSOR);
- }
- break;
- case 3:
- e_selection_model_right_click_up(E_SELECTION_MODEL (eti->selection));
- return_val = TRUE;
- break;
- case 4:
- case 5:
- return FALSE;
- break;
-
- }
- break;
- }
-
- case GDK_2BUTTON_PRESS: {
- int model_col, model_row;
-#if 0
- double x1, y1;
-#endif
-
- d(g_print("%s: GDK_2BUTTON_PRESS received, button %d\n", __FUNCTION__, e->button.button));
-
- if (e->button.button == 5 ||
- e->button.button == 4)
- return FALSE;
-
- /*
- * click_count is so that if you click on two
- * different rows we don't send a double click signal.
- */
-
- if (eti->click_count >= 2) {
-
- gnome_canvas_item_w2i (item, &e->button.x, &e->button.y);
-
-#if 0
- if (!find_cell (eti, e->button.x, e->button.y, &current_col, &current_row, &x1, &y1))
- return TRUE;
-#endif
-
- g_object_get(eti->selection,
- "cursor_row", &model_row,
- "cursor_col", &model_col,
- NULL);
-
- e->button.x -= e_table_header_col_diff (eti->header, 0, model_to_view_col (eti, model_col));
- e->button.y -= e_table_item_row_diff (eti, 0, model_to_view_row (eti, model_row));
-
- if (e->button.button == 1) {
- if (eti->maybe_in_drag) {
- eti->maybe_in_drag = FALSE;
- if (!eti->maybe_did_something)
- e_selection_model_do_something(E_SELECTION_MODEL (eti->selection), eti->drag_row, eti->drag_col, eti->drag_state);
- }
- if (eti->in_drag) {
- eti->in_drag = FALSE;
- }
- if (eti_editing (eti))
- e_table_item_leave_edit_ (eti);
-
- }
-
- if (eti->grabbed_count > 0) {
- d(g_print ("%s: eti_ungrab\n", __FUNCTION__));
- eti_ungrab (eti, e->button.time);
- }
-
- if (model_row != -1 && model_col != -1) {
- g_signal_emit (eti, eti_signals [DOUBLE_CLICK], 0,
- model_row, model_col, e);
- }
- }
- break;
- }
- case GDK_MOTION_NOTIFY: {
- int col, row, flags;
- double x1, y1;
- gint cursor_col, cursor_row;
-
- gnome_canvas_item_w2i (item, &e->motion.x, &e->motion.y);
-
- if (eti->maybe_in_drag) {
- if (abs (e->motion.x - eti->drag_x) >= 3 ||
- abs (e->motion.y - eti->drag_y) >= 3) {
- gint drag_handled;
-
- eti->maybe_in_drag = 0;
- g_signal_emit (eti, eti_signals [START_DRAG], 0,
- eti->drag_row, eti->drag_col, e, &drag_handled);
- if (drag_handled)
- eti->in_drag = 1;
- else
- eti->in_drag = 0;
- }
- }
-
- if (!find_cell (eti, e->motion.x, e->motion.y, &col, &row, &x1, &y1))
- return TRUE;
-
- if (eti->motion_row != -1 && eti->motion_col != -1 &&
- (row != eti->motion_row || col != eti->motion_col)) {
- GdkEvent *cross = gdk_event_new (GDK_LEAVE_NOTIFY);
- cross->crossing.time = e->motion.time;
- return_val = eti_e_cell_event (eti, eti->cell_views [eti->motion_col],
- cross, cross->crossing.time,
- view_to_model_col(eti, eti->motion_col),
- eti->motion_col, eti->motion_row, 0);
- }
-
- eti->motion_row = row;
- eti->motion_col = col;
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(eti)->canvas));
-
-#ifdef DO_TOOLTIPS
- if (!g_getenv ("GAL_DONT_DO_TOOLTIPS")) {
- if (eti->tooltip->timer)
- gtk_timeout_remove (eti->tooltip->timer);
- eti->tooltip->col = col;
- eti->tooltip->row = row;
- eti->tooltip->cx = e->motion.x;
- eti->tooltip->cy = e->motion.y;
- eti->tooltip->timer = gtk_timeout_add (100, (GSourceFunc)_do_tooltip, eti);
- }
-#endif
-
- flags = 0;
- if (cursor_row == view_to_model_row(eti, row) && cursor_col == view_to_model_col(eti, col)){
- flags = E_CELL_EDITING | E_CELL_CURSOR;
- }
-
- ecell_view = eti->cell_views [col];
-
- /*
- * Adjust the event positions
- */
- e->motion.x = x1;
- e->motion.y = y1;
-
- return_val = eti_e_cell_event (eti, ecell_view, e, e->motion.time,
- view_to_model_col(eti, col), col, row, flags);
- break;
- }
-
- case GDK_KEY_PRESS: {
- gint cursor_row, cursor_col;
- gint handled = TRUE;
-
- d(g_print("%s: GDK_KEY_PRESS received, keyval: %d\n", __FUNCTION__, (int) e->key.keyval));
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
- if (eti->tooltip->timer) {
- gtk_timeout_remove (eti->tooltip->timer);
- eti->tooltip->timer = 0;
- }
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(eti)->canvas));
-
- if (cursor_row == -1 && cursor_col == -1)
- return FALSE;
-
- eti->in_key_press = TRUE;
-
- switch (e->key.keyval){
- case GDK_Left:
- case GDK_KP_Left:
- if (eti_editing (eti)) {
- handled = FALSE;
- break;
- }
-
- g_signal_emit (eti, eti_signals [KEY_PRESS], 0,
- model_to_view_row(eti, cursor_row), cursor_col, e, &return_val);
- if ((!return_val) && eti->cursor_mode != E_CURSOR_LINE && cursor_col != view_to_model_col(eti, 0))
- eti_cursor_move_left (eti);
- return_val = 1;
- break;
-
- case GDK_Right:
- case GDK_KP_Right:
- if (eti_editing (eti)) {
- handled = FALSE;
- break;
- }
-
- g_signal_emit (eti, eti_signals [KEY_PRESS], 0,
- model_to_view_row(eti, cursor_row), cursor_col, e, &return_val);
- if ((!return_val) && eti->cursor_mode != E_CURSOR_LINE && cursor_col != view_to_model_col(eti, eti->cols - 1))
- eti_cursor_move_right (eti);
- return_val = 1;
- break;
-
- case GDK_Up:
- case GDK_KP_Up:
- case GDK_Down:
- case GDK_KP_Down:
- if ((e->key.state & GDK_MOD1_MASK)
- && ((e->key.keyval == GDK_Down ) || (e->key.keyval == GDK_KP_Down))) {
- gint view_col = model_to_view_col(eti, cursor_col);
- if (eti_e_cell_event (eti, eti->cell_views [view_col], e, ((GdkEventKey *)e)->time, cursor_col, view_col, model_to_view_row(eti, cursor_row), E_CELL_CURSOR))
- return TRUE;
- } else
- return_val = e_selection_model_key_press(E_SELECTION_MODEL (eti->selection), (GdkEventKey *) e);
- break;
- case GDK_Home:
- case GDK_KP_Home:
- if (eti->cursor_mode != E_CURSOR_LINE) {
- eti_cursor_move (eti, model_to_view_row(eti, cursor_row), 0);
- return_val = TRUE;
- } else
- return_val = e_selection_model_key_press(E_SELECTION_MODEL (eti->selection), (GdkEventKey *) e);
- break;
- case GDK_End:
- case GDK_KP_End:
- if (eti->cursor_mode != E_CURSOR_LINE) {
- eti_cursor_move (eti, model_to_view_row(eti, cursor_row), eti->cols - 1);
- return_val = TRUE;
- } else
- return_val = e_selection_model_key_press(E_SELECTION_MODEL (eti->selection), (GdkEventKey *) e);
- break;
- case GDK_Tab:
- case GDK_KP_Tab:
- case GDK_ISO_Left_Tab:
- if ((e->key.state & GDK_CONTROL_MASK) != 0) {
- return_val = FALSE;
- break;
- }
- if (eti->cursor_mode == E_CURSOR_SPREADSHEET) {
- if ((e->key.state & GDK_SHIFT_MASK) != 0){
- /* shift tab */
- if (cursor_col != view_to_model_col(eti, 0))
- eti_cursor_move_left (eti);
- else if (cursor_row != view_to_model_row(eti, 0))
- eti_cursor_move (eti, model_to_view_row(eti, cursor_row) - 1, eti->cols - 1);
- else
- return_val = FALSE;
- } else {
- if (cursor_col != view_to_model_col (eti, eti->cols - 1))
- eti_cursor_move_right (eti);
- else if (cursor_row != view_to_model_row(eti, eti->rows - 1))
- eti_cursor_move (eti, model_to_view_row(eti, cursor_row) + 1, 0);
- else
- return_val = FALSE;
- }
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
- if (cursor_col >= 0 && cursor_row >= 0 && return_val &&
- (!eti_editing(eti)) && e_table_model_is_cell_editable(eti->table_model, cursor_col, model_to_view_row (eti, cursor_row))) {
- e_table_item_enter_edit (eti, model_to_view_col(eti, cursor_col), model_to_view_row(eti, cursor_row));
- }
- break;
- } else {
- /* Let tab send you to the next widget. */
- return_val = FALSE;
- break;
- }
-
- case GDK_Return:
- case GDK_KP_Enter:
- case GDK_ISO_Enter:
- case GDK_3270_Enter:
- if (eti_editing (eti)){
- ecell_view = eti->cell_views [eti->editing_col];
- return_val = eti_e_cell_event (eti, ecell_view, e, e->key.time,
- view_to_model_col (eti, eti->editing_col),
- eti->editing_col, eti->editing_row, E_CELL_EDITING | E_CELL_CURSOR | E_CELL_PREEDIT);
- if (!return_val)
- break;
- }
- g_signal_emit (eti, eti_signals [KEY_PRESS], 0,
- model_to_view_row (eti, cursor_row), cursor_col, e, &return_val);
- if (!return_val)
- return_val = e_selection_model_key_press (E_SELECTION_MODEL (eti->selection), (GdkEventKey *) e);
- break;
-
- default:
- handled = FALSE;
- break;
- }
-
- if (!handled) {
- switch (e->key.keyval) {
- case GDK_Scroll_Lock:
- case GDK_Sys_Req:
- case GDK_Shift_L:
- case GDK_Shift_R:
- case GDK_Control_L:
- case GDK_Control_R:
- case GDK_Caps_Lock:
- case GDK_Shift_Lock:
- case GDK_Meta_L:
- case GDK_Meta_R:
- case GDK_Alt_L:
- case GDK_Alt_R:
- case GDK_Super_L:
- case GDK_Super_R:
- case GDK_Hyper_L:
- case GDK_Hyper_R:
- case GDK_ISO_Lock:
- break;
-
- default:
- if (!eti_editing (eti)){
- gint col, row;
- row = model_to_view_row(eti, cursor_row);
- col = model_to_view_col(eti, cursor_col);
- if (col != -1 && row != -1 && e_table_model_is_cell_editable(eti->table_model, cursor_col, row)) {
- e_table_item_enter_edit (eti, col, row);
- }
- }
- if (!eti_editing (eti)){
- g_signal_emit (eti, eti_signals [KEY_PRESS], 0,
- model_to_view_row(eti, cursor_row), cursor_col, e, &return_val);
- if (!return_val)
- e_selection_model_key_press(E_SELECTION_MODEL (eti->selection), (GdkEventKey *) e);
- } else {
- ecell_view = eti->cell_views [eti->editing_col];
- return_val = eti_e_cell_event (eti, ecell_view, e, e->key.time,
- view_to_model_col(eti, eti->editing_col),
- eti->editing_col, eti->editing_row, E_CELL_EDITING | E_CELL_CURSOR);
- if (!return_val)
- e_selection_model_key_press(E_SELECTION_MODEL (eti->selection), (GdkEventKey *) e);
- }
- break;
- }
- }
- eti->in_key_press = FALSE;
- break;
- }
-
- case GDK_KEY_RELEASE: {
- gint cursor_row, cursor_col;
-
- d(g_print("%s: GDK_KEY_RELEASE received, keyval: %d\n", __FUNCTION__, (int) e->key.keyval));
-
- g_object_get(eti->selection,
- "cursor_row", &cursor_row,
- "cursor_col", &cursor_col,
- NULL);
-
- if (cursor_col == -1)
- return FALSE;
-
- if (eti_editing (eti)){
- ecell_view = eti->cell_views [eti->editing_col];
- return_val = eti_e_cell_event (eti, ecell_view, e, e->key.time,
- view_to_model_col(eti, eti->editing_col),
- eti->editing_col, eti->editing_row, E_CELL_EDITING | E_CELL_CURSOR);
- }
- break;
- }
-
- case GDK_LEAVE_NOTIFY:
- d(leave = TRUE);
- case GDK_ENTER_NOTIFY:
- d(g_print("%s: %s received\n", __FUNCTION__, leave ? "GDK_LEAVE_NOTIFY" : "GDK_ENTER_NOTIFY"));
- if (eti->tooltip->timer)
- gtk_timeout_remove (eti->tooltip->timer);
- eti->tooltip->timer = 0;
- if (eti->motion_row != -1 && eti->motion_col != -1)
- return_val = eti_e_cell_event (eti, eti->cell_views [eti->motion_col],
- e, e->crossing.time,
- view_to_model_col(eti, eti->motion_col),
- eti->motion_col, eti->motion_row, 0);
- eti->motion_row = -1;
- eti->motion_col = -1;
-
- break;
-
- case GDK_FOCUS_CHANGE:
- d(g_print("%s: GDK_FOCUS_CHANGE received, %s\n", __FUNCTION__, e->focus_change.in ? "in": "out"));
- if (e->focus_change.in) {
- if (eti->save_row != -1 &&
- eti->save_col != -1 &&
- !eti_editing (eti) &&
- e_table_model_is_cell_editable(eti->table_model, view_to_model_col (eti, eti->save_col), eti->save_row)) {
- e_table_item_enter_edit (eti, eti->save_col, eti->save_row);
- e_cell_load_state (eti->cell_views [eti->editing_col], view_to_model_col(eti, eti->save_col),
- eti->save_col, eti->save_row, eti->edit_ctx, eti->save_state);
- eti_free_save_state (eti);
- }
- } else {
- if (eti_editing (eti)) {
- eti_free_save_state (eti);
-
- eti->save_row = eti->editing_row;
- eti->save_col = eti->editing_col;
- eti->save_state = e_cell_save_state (eti->cell_views [eti->editing_col], view_to_model_col(eti, eti->editing_col),
- eti->editing_col, eti->editing_row, eti->edit_ctx);
- e_table_item_leave_edit_(eti);
- }
- }
-
- default:
- return_val = FALSE;
- }
- /* d(g_print("%s: returning: %s\n", __FUNCTION__, return_val?"true":"false"));*/
-
- return return_val;
-}
-
-static void
-eti_style_set (ETableItem *eti, GtkStyle *previous_style)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED))
- return;
-
- if (eti->cell_views_realized) {
- int i;
- int n_cells = eti->n_cells;
-
- for (i = 0; i < n_cells; i++) {
- e_cell_style_set (eti->cell_views[i], previous_style);
- }
- }
-
- eti->needs_compute_height = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (eti));
- eti->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (eti));
-
- free_height_cache (eti);
-
- eti_idle_maybe_show_cursor(eti);
-}
-
-static void
-eti_class_init (GObjectClass *object_class)
-{
- GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) object_class;
- ETableItemClass *eti_class = (ETableItemClass *) object_class;
-
- eti_parent_class = g_type_class_ref (PARENT_OBJECT_TYPE);
-
- object_class->dispose = eti_dispose;
- object_class->set_property = eti_set_property;
- object_class->get_property = eti_get_property;
-
- item_class->update = eti_update;
- item_class->realize = eti_realize;
- item_class->unrealize = eti_unrealize;
- item_class->draw = eti_draw;
- item_class->point = eti_point;
- item_class->event = eti_event;
-
- eti_class->cursor_change = NULL;
- eti_class->cursor_activated = NULL;
- eti_class->double_click = NULL;
- eti_class->right_click = NULL;
- eti_class->click = NULL;
- eti_class->key_press = NULL;
- eti_class->start_drag = NULL;
- eti_class->style_set = eti_style_set;
- eti_class->selection_model_removed = NULL;
- eti_class->selection_model_added = NULL;
-
- g_object_class_install_property (object_class, PROP_TABLE_HEADER,
- g_param_spec_object ("ETableHeader",
- _( "Table header" ),
- _( "Table header" ),
- E_TABLE_HEADER_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_MODEL,
- g_param_spec_object ("ETableModel",
- _( "Table model" ),
- _( "Table model" ),
- E_TABLE_MODEL_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_SELECTION_MODEL,
- g_param_spec_object ("selection_model",
- _( "Selection model" ),
- _( "Selection model" ),
- E_SELECTION_MODEL_TYPE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_ALTERNATING_ROW_COLORS,
- g_param_spec_boolean ("alternating_row_colors",
- _( "Alternating Row Colors" ),
- _( "Alternating Row Colors" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_HORIZONTAL_DRAW_GRID,
- g_param_spec_boolean ("horizontal_draw_grid",
- _( "Horizontal Draw Grid" ),
- _( "Horizontal Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_VERTICAL_DRAW_GRID,
- g_param_spec_boolean ("vertical_draw_grid",
- _( "Vertical Draw Grid" ),
- _( "Vertical Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_TABLE_DRAW_FOCUS,
- g_param_spec_boolean ("drawfocus",
- _( "Draw focus" ),
- _( "Draw focus" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_MODE,
- g_param_spec_int ("cursor_mode",
- _( "Cursor mode" ),
- _( "Cursor mode" ),
- E_CURSOR_LINE, E_CURSOR_SPREADSHEET, E_CURSOR_LINE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_LENGTH_THRESHOLD,
- g_param_spec_int ("length_threshold",
- _( "Length Threshold" ),
- _( "Length Threshold" ),
- -1, G_MAXINT, 0,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_MINIMUM_WIDTH,
- g_param_spec_double ("minimum_width",
- _( "Minimum width" ),
- _( "Minimum Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _( "Width" ),
- _( "Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _( "Height" ),
- _( "Height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_ROW,
- g_param_spec_int ("cursor_row",
- _( "Cursor row" ),
- _( "Cursor row" ),
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_UNIFORM_ROW_HEIGHT,
- g_param_spec_boolean ("uniform_row_height",
- _( "Uniform row height" ),
- _( "Uniform row height" ),
- FALSE,
- G_PARAM_READWRITE));
-
- eti_signals [CURSOR_CHANGE] =
- g_signal_new ("cursor_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, cursor_change),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- eti_signals [CURSOR_ACTIVATED] =
- g_signal_new ("cursor_activated",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, cursor_activated),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- eti_signals [DOUBLE_CLICK] =
- g_signal_new ("double_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, double_click),
- NULL, NULL,
- e_marshal_NONE__INT_INT_BOXED,
- G_TYPE_NONE, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- eti_signals [START_DRAG] =
- g_signal_new ("start_drag",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, start_drag),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- eti_signals [RIGHT_CLICK] =
- g_signal_new ("right_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, right_click),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- eti_signals [CLICK] =
- g_signal_new ("click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, click),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- eti_signals [KEY_PRESS] =
- g_signal_new ("key_press",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, key_press),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- eti_signals [STYLE_SET] =
- g_signal_new ("style_set",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableItemClass, style_set),
- NULL, NULL,
- e_marshal_NONE__OBJECT,
- G_TYPE_NONE, 1, GTK_TYPE_STYLE);
-
- eti_signals[SELECTION_MODEL_REMOVED] =
- g_signal_new ("selection_model_removed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (ETableItemClass, selection_model_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- eti_signals[SELECTION_MODEL_ADDED] =
- g_signal_new ("selection_model_added",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (ETableItemClass, selection_model_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TABLE_ITEM_TYPE,
- gal_a11y_e_table_item_factory_get_type ());
-
-}
-
-E_MAKE_TYPE (e_table_item,
- "ETableItem",
- ETableItem,
- eti_class_init,
- eti_init,
- PARENT_OBJECT_TYPE)
-
-/**
- * e_table_item_set_cursor:
- * @eti: %ETableItem which will have the cursor set.
- * @col: Column to select. -1 means the last column.
- * @row: Row to select. -1 means the last row.
- *
- * This routine sets the cursor of the %ETableItem canvas item.
- */
-void
-e_table_item_set_cursor (ETableItem *eti, int col, int row)
-{
- e_table_item_focus(eti, col, view_to_model_row(eti, row), 0);
-}
-
-static void
-e_table_item_focus (ETableItem *eti, int col, int row, GdkModifierType state)
-{
- g_return_if_fail (eti != NULL);
- g_return_if_fail (E_IS_TABLE_ITEM (eti));
-
- if (row == -1) {
- row = view_to_model_row(eti, eti->rows - 1);
- }
-
- if (col == -1) {
- col = eti->cols - 1;
- }
-
- if (row != -1) {
- e_selection_model_do_something(E_SELECTION_MODEL (eti->selection),
- row, col,
- state);
- }
-}
-
-/**
- * e_table_item_get_focused_column:
- * @eti: %ETableItem which will have the cursor retrieved.
- *
- * This routine gets the cursor of the %ETableItem canvas item.
- *
- * Returns: The current cursor column.
- */
-gint
-e_table_item_get_focused_column (ETableItem *eti)
-{
- int cursor_col;
-
- g_return_val_if_fail (eti != NULL, -1);
- g_return_val_if_fail (E_IS_TABLE_ITEM (eti), -1);
-
- g_object_get(eti->selection,
- "cursor_col", &cursor_col,
- NULL);
-
- return cursor_col;
-}
-
-static void
-eti_cursor_change (ESelectionModel *selection, int row, int col, ETableItem *eti)
-{
- int view_row;
- int view_col;
-
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED))
- return;
-
- view_row = model_to_view_row(eti, row);
- view_col = model_to_view_col(eti, col);
-
- if (eti->old_cursor_row != -1 && view_row != eti->old_cursor_row)
- e_table_item_redraw_row (eti, eti->old_cursor_row);
-
- if (view_row == -1) {
- e_table_item_leave_edit_(eti);
- eti->old_cursor_row = -1;
- return;
- }
-
- if (! e_table_model_has_change_pending (eti->table_model)) {
- if (!eti->in_key_press) {
- eti_maybe_show_cursor(eti, DOUBLE_CLICK_TIME + 10);
- } else {
- eti_maybe_show_cursor(eti, 0);
- }
- }
-
- e_canvas_item_grab_focus(GNOME_CANVAS_ITEM(eti), FALSE);
- if (eti_editing(eti))
- e_table_item_leave_edit_(eti);
- g_signal_emit (eti, eti_signals [CURSOR_CHANGE], 0,
- view_row);
-
- e_table_item_redraw_row (eti, view_row);
-
- eti->old_cursor_row = view_row;
-}
-
-static void
-eti_cursor_activated (ESelectionModel *selection, int row, int col, ETableItem *eti)
-{
- int view_row;
- int view_col;
-
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED))
- return;
-
- view_row = model_to_view_row(eti, row);
- view_col = model_to_view_col(eti, col);
-
- if (view_row != -1 && view_col != -1) {
- if (! e_table_model_has_change_pending (eti->table_model)) {
- if (!eti->in_key_press) {
- eti_show_cursor(eti, DOUBLE_CLICK_TIME + 10);
- } else {
- eti_show_cursor(eti, 0);
- }
- eti_check_cursor_bounds (eti);
- }
- }
-
- if (eti_editing(eti))
- e_table_item_leave_edit_(eti);
-
- if (view_row != -1)
- g_signal_emit (eti, eti_signals [CURSOR_ACTIVATED], 0,
- view_row);
-}
-
-static void
-eti_selection_change (ESelectionModel *selection, ETableItem *eti)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED))
- return;
-
- eti->needs_redraw = TRUE;
- gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(eti));
-}
-
-static void
-eti_selection_row_change (ESelectionModel *selection, int row, ETableItem *eti)
-{
- if (!(GTK_OBJECT_FLAGS(eti) & GNOME_CANVAS_ITEM_REALIZED))
- return;
-
- if (!eti->needs_redraw) {
- e_table_item_redraw_row (eti, model_to_view_row(eti, row));
- }
-}
-
-
-/**
- * e_table_item_enter_edit
- * @eti: %ETableItem which will start being edited
- * @col: The view col to edit.
- * @row: The view row to edit.
- *
- * This routine starts the given %ETableItem editing at the given view
- * column and row.
- */
-void
-e_table_item_enter_edit (ETableItem *eti, int col, int row)
-{
- g_return_if_fail (eti != NULL);
- g_return_if_fail (E_IS_TABLE_ITEM (eti));
-
- d(g_print("%s: %d, %d, eti_editing() = %s\n", __FUNCTION__, col, row, eti_editing(eti)?"true":"false"));
-
- if (eti_editing (eti))
- e_table_item_leave_edit_(eti);
-
- eti->editing_col = col;
- eti->editing_row = row;
-
- eti->edit_ctx = e_cell_enter_edit (eti->cell_views [col], view_to_model_col(eti, col), col, row);
-}
-
-/**
- * e_table_item_leave_edit_
- * @eti: %ETableItem which will stop being edited
- *
- * This routine stops the given %ETableItem from editing.
- */
-void
-e_table_item_leave_edit (ETableItem *eti)
-{
- int col, row;
- void *edit_ctx;
-
- g_return_if_fail (eti != NULL);
- g_return_if_fail (E_IS_TABLE_ITEM (eti));
-
- d(g_print("%s: eti_editing() = %s\n", __FUNCTION__, eti_editing(eti)?"true":"false"));
-
- if (!eti_editing (eti))
- return;
-
- col = eti->editing_col;
- row = eti->editing_row;
- edit_ctx = eti->edit_ctx;
-
- eti->editing_col = -1;
- eti->editing_row = -1;
- eti->edit_ctx = NULL;
-
- e_cell_leave_edit (eti->cell_views [col],
- view_to_model_col(eti, col),
- col, row, edit_ctx);
-}
-
-/**
- * e_table_item_compute_location
- * @eti: %ETableItem to look in.
- * @x: A pointer to the x location to find in the %ETableItem.
- * @y: A pointer to the y location to find in the %ETableItem.
- * @row: A pointer to the location to store the found row in.
- * @col: A pointer to the location to store the found col in.
- *
- * This routine locates the pixel location (*x, *y) in the
- * %ETableItem. If that location is in the %ETableItem, *row and *col
- * are set to the view row and column where it was found. If that
- * location is not in the %ETableItem, the height of the %ETableItem
- * is removed from the value y points to.
- */
-void
-e_table_item_compute_location (ETableItem *eti,
- int *x,
- int *y,
- int *row,
- int *col)
-{
- /* Save the grabbed row but make sure that we don't get flawed
- results because the cursor is grabbed. */
- int grabbed_row = eti->grabbed_row;
- eti->grabbed_row = -1;
-
- if (!find_cell (eti, *x, *y, col, row, NULL, NULL)) {
- *y -= eti->height;
- }
-
- eti->grabbed_row = grabbed_row;
-}
-
-void
-e_table_item_get_cell_geometry (ETableItem *eti,
- int *row,
- int *col,
- int *x,
- int *y,
- int *width,
- int *height)
-{
- if (eti->rows > *row) {
- if (x)
- *x = e_table_header_col_diff (eti->header, 0, *col);
- if (y)
- *y = e_table_item_row_diff (eti, 0, *row);
- if (width)
- *width = e_table_header_col_diff (eti->header, *col, *col + 1);
- if (height)
- *height = ETI_ROW_HEIGHT (eti, *row);
- *row = -1;
- *col = -1;
- } else {
- *row -= eti->rows;
- }
-}
-
-typedef struct {
- ETableItem *item;
- int rows_printed;
-} ETableItemPrintContext;
-
-static gdouble *
-e_table_item_calculate_print_widths (ETableHeader *eth, gdouble width)
-{
- int i;
- double extra;
- double expansion;
- int last_resizable = -1;
- gdouble scale = 1.0L;
- gdouble *widths = g_new(gdouble, e_table_header_count(eth));
- /* - 1 to account for the last pixel border. */
- extra = width - 1;
- expansion = 0;
- for (i = 0; i < eth->col_count; i++) {
- extra -= eth->columns[i]->min_width * scale;
- if (eth->columns[i]->resizable && eth->columns[i]->expansion > 0)
- last_resizable = i;
- expansion += eth->columns[i]->resizable ? eth->columns[i]->expansion : 0;
- widths[i] = eth->columns[i]->min_width * scale;
- }
- for (i = 0; i <= last_resizable; i++) {
- widths[i] += extra * (eth->columns[i]->resizable ? eth->columns[i]->expansion : 0)/expansion;
- }
-
- return widths;
-}
-
-static gdouble
-eti_printed_row_height (ETableItem *eti, gdouble *widths, GnomePrintContext *context, gint row)
-{
- int col;
- int cols = eti->cols;
- gdouble height = 0;
- for (col = 0; col < cols; col++) {
- ECellView *ecell_view = eti->cell_views [col];
- gdouble this_height = e_cell_print_height (ecell_view, context, view_to_model_col(eti, col), col, row,
- widths[col] - 1);
- if (this_height > height)
- height = this_height;
- }
- return height;
-}
-
-#define CHECK(x) if((x) == -1) return -1;
-
-static gint
-gp_draw_rect (GnomePrintContext *context, gdouble x, gdouble y, gdouble width, gdouble height)
-{
- CHECK(gnome_print_moveto(context, x, y));
- CHECK(gnome_print_lineto(context, x + width, y));
- CHECK(gnome_print_lineto(context, x + width, y - height));
- CHECK(gnome_print_lineto(context, x, y - height));
- CHECK(gnome_print_lineto(context, x, y));
- return gnome_print_fill(context);
-}
-
-static void
-e_table_item_print_page (EPrintable *ep,
- GnomePrintContext *context,
- gdouble width,
- gdouble height,
- gboolean quantize,
- ETableItemPrintContext *itemcontext)
-{
- ETableItem *eti = itemcontext->item;
- const int rows = eti->rows;
- const int cols = eti->cols;
- int rows_printed = itemcontext->rows_printed;
- gdouble *widths;
- int row, col;
- gdouble yd = height;
-
- widths = e_table_item_calculate_print_widths (itemcontext->item->header, width);
-
- /*
- * Draw cells
- */
- if (eti->horizontal_draw_grid){
- gp_draw_rect(context, 0, yd, width, 1);
- }
- yd--;
-
- for (row = rows_printed; row < rows; row++){
- gdouble xd = 1, row_height;
-
- row_height = eti_printed_row_height(eti, widths, context, row);
- if (quantize) {
- if (yd - row_height - 1 < 0 && row != rows_printed) {
- break;
- }
- } else {
- if (yd < 0) {
- break;
- }
- }
-
- for (col = 0; col < cols; col++){
- ECellView *ecell_view = eti->cell_views [col];
-
- if (gnome_print_gsave(context) == -1)
- /* FIXME */;
- if (gnome_print_translate(context, xd, yd - row_height) == -1)
- /* FIXME */;
-
- if (gnome_print_moveto(context, 0, 0) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, widths[col] - 1, 0) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, widths[col] - 1, row_height) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, row_height) == -1)
- /* FIXME */;
- if (gnome_print_lineto(context, 0, 0) == -1)
- /* FIXME */;
- if (gnome_print_clip(context) == -1)
- /* FIXME */;
-
- e_cell_print (ecell_view, context, view_to_model_col(eti, col), col, row,
- widths[col] - 1, row_height);
-
- if (gnome_print_grestore(context) == -1)
- /* FIXME */;
-
- xd += widths[col];
- }
- yd -= row_height;
-
- if (eti->horizontal_draw_grid){
- gp_draw_rect(context, 0, yd, width, 1);
- }
- yd--;
- }
-
- itemcontext->rows_printed = row;
-
- if (eti->vertical_draw_grid){
- gdouble xd = 0;
-
- for (col = 0; col < cols; col++){
- gp_draw_rect(context, xd, height, 1, height - yd);
-
- xd += widths[col];
- }
- gp_draw_rect(context, xd, height, 1, height - yd);
- }
-
- g_free (widths);
-}
-
-static gboolean
-e_table_item_data_left (EPrintable *ep,
- ETableItemPrintContext *itemcontext)
-{
- ETableItem *item = itemcontext->item;
- int rows_printed = itemcontext->rows_printed;
-
- g_signal_stop_emission_by_name(ep, "data_left");
- return rows_printed < item->rows;
-}
-
-static void
-e_table_item_reset (EPrintable *ep,
- ETableItemPrintContext *itemcontext)
-{
- itemcontext->rows_printed = 0;
-}
-
-static gdouble
-e_table_item_height (EPrintable *ep,
- GnomePrintContext *context,
- gdouble width,
- gdouble max_height,
- gboolean quantize,
- ETableItemPrintContext *itemcontext)
-{
- ETableItem *item = itemcontext->item;
- const int rows = item->rows;
- int rows_printed = itemcontext->rows_printed;
- gdouble *widths;
- int row;
- gdouble yd = 0;
-
- widths = e_table_item_calculate_print_widths (itemcontext->item->header, width);
-
- /*
- * Draw cells
- */
- yd++;
-
- for (row = rows_printed; row < rows; row++){
- gdouble row_height;
-
- row_height = eti_printed_row_height(item, widths, context, row);
- if (quantize) {
- if (max_height != -1 && yd + row_height + 1 > max_height && row != rows_printed) {
- break;
- }
- } else {
- if (max_height != -1 && yd > max_height) {
- break;
- }
- }
-
- yd += row_height;
-
- yd++;
- }
-
- g_free (widths);
-
- if (max_height != -1 && (!quantize) && yd > max_height)
- yd = max_height;
-
- g_signal_stop_emission_by_name(ep, "height");
- return yd;
-}
-
-static gboolean
-e_table_item_will_fit (EPrintable *ep,
- GnomePrintContext *context,
- gdouble width,
- gdouble max_height,
- gboolean quantize,
- ETableItemPrintContext *itemcontext)
-{
- ETableItem *item = itemcontext->item;
- const int rows = item->rows;
- int rows_printed = itemcontext->rows_printed;
- gdouble *widths;
- int row;
- gdouble yd = 0;
- gboolean ret_val = TRUE;
-
- widths = e_table_item_calculate_print_widths (itemcontext->item->header, width);
-
- /*
- * Draw cells
- */
- yd++;
-
- for (row = rows_printed; row < rows; row++){
- gdouble row_height;
-
- row_height = eti_printed_row_height(item, widths, context, row);
- if (quantize) {
- if (max_height != -1 && yd + row_height + 1 > max_height && row != rows_printed) {
- ret_val = FALSE;
- break;
- }
- } else {
- if (max_height != -1 && yd > max_height) {
- ret_val = FALSE;
- break;
- }
- }
-
- yd += row_height;
-
- yd++;
- }
-
- g_free (widths);
-
- g_signal_stop_emission_by_name(ep, "will_fit");
- return ret_val;
-}
-
-static void
-e_table_item_printable_destroy (gpointer data,
- GObject *where_object_was)
-{
- ETableItemPrintContext *itemcontext = data;
-
- g_object_unref(itemcontext->item);
- g_free(itemcontext);
-}
-
-/**
- * e_table_item_get_printable
- * @eti: %ETableItem which will be printed
- *
- * This routine creates and returns an %EPrintable that can be used to
- * print the given %ETableItem.
- *
- * Returns: The %EPrintable.
- */
-EPrintable *
-e_table_item_get_printable (ETableItem *item)
-{
- EPrintable *printable = e_printable_new();
- ETableItemPrintContext *itemcontext;
-
- itemcontext = g_new(ETableItemPrintContext, 1);
- itemcontext->item = item;
- g_object_ref(item);
- itemcontext->rows_printed = 0;
-
- g_signal_connect (printable,
- "print_page",
- G_CALLBACK(e_table_item_print_page),
- itemcontext);
- g_signal_connect (printable,
- "data_left",
- G_CALLBACK(e_table_item_data_left),
- itemcontext);
- g_signal_connect (printable,
- "reset",
- G_CALLBACK(e_table_item_reset),
- itemcontext);
- g_signal_connect (printable,
- "height",
- G_CALLBACK(e_table_item_height),
- itemcontext);
- g_signal_connect (printable,
- "will_fit",
- G_CALLBACK(e_table_item_will_fit),
- itemcontext);
- g_object_weak_ref (G_OBJECT (printable),
- e_table_item_printable_destroy,
- itemcontext);
-
- return printable;
-}
diff --git a/widgets/table/e-table-item.h b/widgets/table/e-table-item.h
deleted file mode 100644
index e5b5322019..0000000000
--- a/widgets/table/e-table-item.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-item.h
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@gnu.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_ITEM_H_
-#define _E_TABLE_ITEM_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-defines.h>
-#include <gal/e-table/e-table-tooltip.h>
-#include <gal/widgets/e-selection-model.h>
-#include <gal/widgets/e-printable.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_ITEM_TYPE (e_table_item_get_type ())
-#define E_TABLE_ITEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_ITEM_TYPE, ETableItem))
-#define E_TABLE_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_ITEM_TYPE, ETableItemClass))
-#define E_IS_TABLE_ITEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_ITEM_TYPE))
-#define E_IS_TABLE_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_ITEM_TYPE))
-
-typedef struct {
- GnomeCanvasItem parent;
- ETableModel *table_model;
- ETableHeader *header;
-
- ETableModel *source_model;
- ESelectionModel *selection;
-
- int x1, y1;
- int minimum_width, width, height;
-
- int cols, rows;
-
- int click_count;
-
- /*
- * Ids for the signals we connect to
- */
- int header_dim_change_id;
- int header_structure_change_id;
- int header_request_width_id;
- int table_model_pre_change_id;
- int table_model_no_change_id;
- int table_model_change_id;
- int table_model_row_change_id;
- int table_model_cell_change_id;
- int table_model_rows_inserted_id;
- int table_model_rows_deleted_id;
-
- int selection_change_id;
- int selection_row_change_id;
- int cursor_change_id;
- int cursor_activated_id;
-
- guint cursor_idle_id;
-
- /* View row, -1 means unknown */
- int old_cursor_row;
-
- int hadjustment_change_id;
- int hadjustment_value_change_id;
- int vadjustment_change_id;
- int vadjustment_value_change_id;
-
- GdkGC *fill_gc;
- GdkGC *grid_gc;
- GdkGC *focus_gc;
- GdkBitmap *stipple;
-
- guint alternating_row_colors:1;
- guint horizontal_draw_grid:1;
- guint vertical_draw_grid:1;
- guint draw_focus:1;
- guint uniform_row_height:1;
- guint cell_views_realized:1;
-
- guint needs_redraw : 1;
- guint needs_compute_height : 1;
- guint needs_compute_width : 1;
-
- guint uses_source_model : 1;
-
- guint in_key_press : 1;
-
- guint maybe_in_drag : 1;
- guint in_drag : 1;
- guint grabbed : 1;
-
- guint maybe_did_something : 1;
-
- guint cursor_on_screen : 1;
- guint gtk_grabbed : 1;
-
- guint queue_show_cursor : 1;
- guint grab_cancelled : 1;
-
- int frozen_count;
-
- int cursor_x1;
- int cursor_y1;
- int cursor_x2;
- int cursor_y2;
-
- int drag_col;
- int drag_row;
- int drag_x;
- int drag_y;
- guint drag_state;
-
- /*
- * Realized views, per column
- */
- ECellView **cell_views;
- int n_cells;
-
- int *height_cache;
- int uniform_row_height_cache;
- int height_cache_idle_id;
- int height_cache_idle_count;
-
- /*
- * Lengh Threshold: above this, we stop computing correctly
- * the size
- */
- int length_threshold;
-
- gint row_guess;
- ECursorMode cursor_mode;
-
- int motion_col, motion_row;
-
- /*
- * During editing
- */
- int editing_col, editing_row;
- void *edit_ctx;
-
- int save_col, save_row;
- void *save_state;
-
- int grabbed_col, grabbed_row;
- int grabbed_count;
-
- /*
- * Tooltip
- */
- ETableTooltip *tooltip;
-
-} ETableItem;
-
-typedef struct {
- GnomeCanvasItemClass parent_class;
-
- void (*cursor_change) (ETableItem *eti, int row);
- void (*cursor_activated) (ETableItem *eti, int row);
- void (*double_click) (ETableItem *eti, int row, int col, GdkEvent *event);
- gint (*right_click) (ETableItem *eti, int row, int col, GdkEvent *event);
- gint (*click) (ETableItem *eti, int row, int col, GdkEvent *event);
- gint (*key_press) (ETableItem *eti, int row, int col, GdkEvent *event);
- gint (*start_drag) (ETableItem *eti, int row, int col, GdkEvent *event);
- void (*style_set) (ETableItem *eti, GtkStyle *previous_style);
- void (*selection_model_removed) (ETableItem *eti, ESelectionModel *selection);
- void (*selection_model_added) (ETableItem *eti, ESelectionModel *selection);
-} ETableItemClass;
-GType e_table_item_get_type (void);
-
-
-/*
- * Focus
- */
-void e_table_item_set_cursor (ETableItem *eti,
- int col,
- int row);
-
-gint e_table_item_get_focused_column (ETableItem *eti);
-
-void e_table_item_leave_edit (ETableItem *eti);
-void e_table_item_enter_edit (ETableItem *eti,
- int col,
- int row);
-
-void e_table_item_redraw_range (ETableItem *eti,
- int start_col,
- int start_row,
- int end_col,
- int end_row);
-
-EPrintable *e_table_item_get_printable (ETableItem *eti);
-void e_table_item_compute_location (ETableItem *eti,
- int *x,
- int *y,
- int *row,
- int *col);
-void e_table_item_get_cell_geometry (ETableItem *eti,
- int *row,
- int *col,
- int *x,
- int *y,
- int *width,
- int *height);
-
-int e_table_item_row_diff (ETableItem *eti,
- int start_row,
- int end_row);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_ITEM_H_ */
diff --git a/widgets/table/e-table-memory-callbacks.c b/widgets/table/e-table-memory-callbacks.c
deleted file mode 100644
index 6cd1b9c8a1..0000000000
--- a/widgets/table/e-table-memory-callbacks.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-memory-callbacks.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-memory-callbacks.h"
-#include "gal/util/e-util.h"
-
-static int
-etmc_column_count (ETableModel *etm)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->col_count)
- return etmc->col_count (etm, etmc->data);
- else
- return 0;
-}
-
-static void *
-etmc_value_at (ETableModel *etm, int col, int row)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->value_at)
- return etmc->value_at (etm, col, row, etmc->data);
- else
- return NULL;
-}
-
-static void
-etmc_set_value_at (ETableModel *etm, int col, int row, const void *val)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->set_value_at)
- etmc->set_value_at (etm, col, row, val, etmc->data);
-}
-
-static gboolean
-etmc_is_cell_editable (ETableModel *etm, int col, int row)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->is_cell_editable)
- return etmc->is_cell_editable (etm, col, row, etmc->data);
- else
- return FALSE;
-}
-
-/* The default for etmc_duplicate_value is to return the raw value. */
-static void *
-etmc_duplicate_value (ETableModel *etm, int col, const void *value)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->duplicate_value)
- return etmc->duplicate_value (etm, col, value, etmc->data);
- else
- return (void *)value;
-}
-
-static void
-etmc_free_value (ETableModel *etm, int col, void *value)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->free_value)
- etmc->free_value (etm, col, value, etmc->data);
-}
-
-static void *
-etmc_initialize_value (ETableModel *etm, int col)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->initialize_value)
- return etmc->initialize_value (etm, col, etmc->data);
- else
- return NULL;
-}
-
-static gboolean
-etmc_value_is_empty (ETableModel *etm, int col, const void *value)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->value_is_empty)
- return etmc->value_is_empty (etm, col, value, etmc->data);
- else
- return FALSE;
-}
-
-static char *
-etmc_value_to_string (ETableModel *etm, int col, const void *value)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->value_to_string)
- return etmc->value_to_string (etm, col, value, etmc->data);
- else
- return g_strdup ("");
-}
-
-static void
-etmc_append_row (ETableModel *etm, ETableModel *source, int row)
-{
- ETableMemoryCalbacks *etmc = E_TABLE_MEMORY_CALLBACKS(etm);
-
- if (etmc->append_row)
- etmc->append_row (etm, source, row, etmc->data);
-}
-
-static void
-e_table_memory_callbacks_class_init (GObjectClass *object_class)
-{
- ETableModelClass *model_class = (ETableModelClass *) object_class;
-
- model_class->column_count = etmc_column_count;
- model_class->value_at = etmc_value_at;
- model_class->set_value_at = etmc_set_value_at;
- model_class->is_cell_editable = etmc_is_cell_editable;
- model_class->duplicate_value = etmc_duplicate_value;
- model_class->free_value = etmc_free_value;
- model_class->initialize_value = etmc_initialize_value;
- model_class->value_is_empty = etmc_value_is_empty;
- model_class->value_to_string = etmc_value_to_string;
- model_class->append_row = etmc_append_row;
-
-}
-
-E_MAKE_TYPE(e_table_memory_callbacks, "ETableMemoryCalbacks", ETableMemoryCalbacks, e_table_memory_callbacks_class_init, NULL, E_TABLE_MEMORY_TYPE)
-
-
-/**
- * e_table_memory_callbacks_new:
- * @col_count:
- * @value_at:
- * @set_value_at:
- * @is_cell_editable:
- * @duplicate_value:
- * @free_value:
- * @initialize_value:
- * @value_is_empty:
- * @value_to_string:
- * @data: closure pointer.
- *
- * This initializes a new ETableMemoryCalbacksModel object. ETableMemoryCalbacksModel is
- * an implementaiton of the abstract class ETableModel. The ETableMemoryCalbacksModel
- * is designed to allow people to easily create ETableModels without having
- * to create a new GtkType derived from ETableModel every time they need one.
- *
- * Instead, ETableMemoryCalbacksModel uses a setup based in callback functions, every
- * callback function signature mimics the signature of each ETableModel method
- * and passes the extra @data pointer to each one of the method to provide them
- * with any context they might want to use.
- *
- * Returns: An ETableMemoryCalbacksModel object (which is also an ETableModel
- * object).
- */
-ETableModel *
-e_table_memory_callbacks_new (ETableMemoryCalbacksColumnCountFn col_count,
- ETableMemoryCalbacksValueAtFn value_at,
- ETableMemoryCalbacksSetValueAtFn set_value_at,
- ETableMemoryCalbacksIsCellEditableFn is_cell_editable,
- ETableMemoryCalbacksDuplicateValueFn duplicate_value,
- ETableMemoryCalbacksFreeValueFn free_value,
- ETableMemoryCalbacksInitializeValueFn initialize_value,
- ETableMemoryCalbacksValueIsEmptyFn value_is_empty,
- ETableMemoryCalbacksValueToStringFn value_to_string,
- void *data)
-{
- ETableMemoryCalbacks *et;
-
- et = g_object_new (E_TABLE_MEMORY_CALLBACKS_TYPE, NULL);
-
- et->col_count = col_count;
- et->value_at = value_at;
- et->set_value_at = set_value_at;
- et->is_cell_editable = is_cell_editable;
- et->duplicate_value = duplicate_value;
- et->free_value = free_value;
- et->initialize_value = initialize_value;
- et->value_is_empty = value_is_empty;
- et->value_to_string = value_to_string;
- et->data = data;
-
- return (ETableModel *) et;
- }
diff --git a/widgets/table/e-table-memory-callbacks.h b/widgets/table/e-table-memory-callbacks.h
deleted file mode 100644
index 599ffa01f3..0000000000
--- a/widgets/table/e-table-memory-callbacks.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-memory-callbacks.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_MEMORY_CALLBACKS_H_
-#define _E_TABLE_MEMORY_CALLBACKS_H_
-
-#include <gal/e-table/e-table-memory.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_MEMORY_CALLBACKS_TYPE (e_table_memory_callbacks_get_type ())
-#define E_TABLE_MEMORY_CALLBACKS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_MEMORY_CALLBACKS_TYPE, ETableMemoryCalbacks))
-#define E_TABLE_MEMORY_CALLBACKS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_MEMORY_CALLBACKS_TYPE, ETableMemoryCalbacksClass))
-#define E_IS_TABLE_MEMORY_CALLBACKS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_MEMORY_CALLBACKS_TYPE))
-#define E_IS_TABLE_MEMORY_CALLBACKS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_MEMORY_CALLBACKS_TYPE))
-#define E_TABLE_MEMORY_CALLBACKS_GET_CLASS(k) (G_TYPE_INSTANCE_GET_CLASS((k), E_TABLE_MEMORY_CALLBACKS_TYPE, ETableMemoryCalbacksClass))
-
-typedef int (*ETableMemoryCalbacksColumnCountFn) (ETableModel *etm, void *data);
-typedef void (*ETableMemoryCalbacksAppendRowFn) (ETableModel *etm, ETableModel *model, int row, void *data);
-
-typedef void *(*ETableMemoryCalbacksValueAtFn) (ETableModel *etm, int col, int row, void *data);
-typedef void (*ETableMemoryCalbacksSetValueAtFn) (ETableModel *etm, int col, int row, const void *val, void *data);
-typedef gboolean (*ETableMemoryCalbacksIsCellEditableFn) (ETableModel *etm, int col, int row, void *data);
-
-typedef void *(*ETableMemoryCalbacksDuplicateValueFn) (ETableModel *etm, int col, const void *val, void *data);
-typedef void (*ETableMemoryCalbacksFreeValueFn) (ETableModel *etm, int col, void *val, void *data);
-typedef void *(*ETableMemoryCalbacksInitializeValueFn) (ETableModel *etm, int col, void *data);
-typedef gboolean (*ETableMemoryCalbacksValueIsEmptyFn) (ETableModel *etm, int col, const void *val, void *data);
-typedef char *(*ETableMemoryCalbacksValueToStringFn) (ETableModel *etm, int col, const void *val, void *data);
-
-typedef struct {
- ETableMemory parent;
-
- ETableMemoryCalbacksColumnCountFn col_count;
- ETableMemoryCalbacksAppendRowFn append_row;
-
- ETableMemoryCalbacksValueAtFn value_at;
- ETableMemoryCalbacksSetValueAtFn set_value_at;
- ETableMemoryCalbacksIsCellEditableFn is_cell_editable;
-
- ETableMemoryCalbacksDuplicateValueFn duplicate_value;
- ETableMemoryCalbacksFreeValueFn free_value;
- ETableMemoryCalbacksInitializeValueFn initialize_value;
- ETableMemoryCalbacksValueIsEmptyFn value_is_empty;
- ETableMemoryCalbacksValueToStringFn value_to_string;
- void *data;
-} ETableMemoryCalbacks;
-
-typedef struct {
- ETableMemoryClass parent_class;
-} ETableMemoryCalbacksClass;
-
-GType e_table_memory_callbacks_get_type (void);
-
-ETableModel *e_table_memory_callbacks_new (ETableMemoryCalbacksColumnCountFn col_count,
-
- ETableMemoryCalbacksValueAtFn value_at,
- ETableMemoryCalbacksSetValueAtFn set_value_at,
- ETableMemoryCalbacksIsCellEditableFn is_cell_editable,
-
- ETableMemoryCalbacksDuplicateValueFn duplicate_value,
- ETableMemoryCalbacksFreeValueFn free_value,
- ETableMemoryCalbacksInitializeValueFn initialize_value,
- ETableMemoryCalbacksValueIsEmptyFn value_is_empty,
- ETableMemoryCalbacksValueToStringFn value_to_string,
- void *data);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_MEMORY_CALLBACKS_H_ */
-
diff --git a/widgets/table/e-table-memory-store.c b/widgets/table/e-table-memory-store.c
deleted file mode 100644
index 69765b32ab..0000000000
--- a/widgets/table/e-table-memory-store.c
+++ /dev/null
@@ -1,583 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-memory-store.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include "e-table-memory-store.h"
-#include "gal/util/e-util.h"
-
-#define STORE_LOCATOR(etms, col, row) (*((etms)->priv->store + (row) * (etms)->priv->col_count + (col)))
-
-static ETableMemoryClass *parent_class;
-
-struct _ETableMemoryStorePrivate {
- int col_count;
- ETableMemoryStoreColumnInfo *columns;
- void **store;
-};
-
-static void *
-duplicate_value (ETableMemoryStore *etms, int col, const void *val)
-{
- switch (etms->priv->columns[col].type) {
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING:
- return g_strdup (val);
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_PIXBUF:
- if (val)
- gdk_pixbuf_ref ((void *) val);
- return (void *) val;
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_OBJECT:
- if (val)
- g_object_ref ((void *) val);
- return (void *) val;
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM:
- if (etms->priv->columns[col].custom.duplicate_value)
- return etms->priv->columns[col].custom.duplicate_value (E_TABLE_MODEL (etms), col, val, NULL);
- break;
- default:
- break;
- }
- return (void *) val;
-}
-
-static void
-free_value (ETableMemoryStore *etms, int col, void *value)
-{
- switch (etms->priv->columns[col].type) {
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING:
- g_free (value);
- break;
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_PIXBUF:
- if (value)
- gdk_pixbuf_unref (value);
- break;
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_OBJECT:
- if (value)
- g_object_unref (value);
- break;
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM:
- if (etms->priv->columns[col].custom.free_value)
- etms->priv->columns[col].custom.free_value (E_TABLE_MODEL (etms), col, value, NULL);
- break;
- default:
- break;
- }
-}
-
-
-static int
-etms_column_count (ETableModel *etm)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- return etms->priv->col_count;
-}
-
-static void *
-etms_value_at (ETableModel *etm, int col, int row)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- return STORE_LOCATOR (etms, col, row);
-}
-
-static void
-etms_set_value_at (ETableModel *etm, int col, int row, const void *val)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- e_table_model_pre_change (etm);
-
- STORE_LOCATOR (etms, col, row) = duplicate_value (etms, col, val);
-
- e_table_model_cell_changed (etm, col, row);
-}
-
-static gboolean
-etms_is_cell_editable (ETableModel *etm, int col, int row)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- return etms->priv->columns[col].editable;
-}
-
-/* The default for etms_duplicate_value is to return the raw value. */
-static void *
-etms_duplicate_value (ETableModel *etm, int col, const void *value)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- return duplicate_value (etms, col, value);
-}
-
-static void
-etms_free_value (ETableModel *etm, int col, void *value)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- free_value (etms, col, value);
-}
-
-static void *
-etms_initialize_value (ETableModel *etm, int col)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- switch (etms->priv->columns[col].type) {
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING:
- return g_strdup ("");
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_PIXBUF:
- return NULL;
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM:
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_OBJECT:
- if (etms->priv->columns[col].custom.initialize_value)
- return etms->priv->columns[col].custom.initialize_value (E_TABLE_MODEL (etms), col, NULL);
- break;
- default:
- break;
- }
- return 0;
-}
-
-static gboolean
-etms_value_is_empty (ETableModel *etm, int col, const void *value)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- switch (etms->priv->columns[col].type) {
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING:
- return !(value && *(char *) value);
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_PIXBUF:
- return value == NULL;
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM:
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_OBJECT:
- if (etms->priv->columns[col].custom.value_is_empty)
- return etms->priv->columns[col].custom.value_is_empty (E_TABLE_MODEL (etms), col, value, NULL);
- break;
- default:
- break;
- }
- return value == 0;
-}
-
-static char *
-etms_value_to_string (ETableModel *etm, int col, const void *value)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
-
- switch (etms->priv->columns[col].type) {
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING:
- return g_strdup (value);
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_PIXBUF:
- return g_strdup ("");
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM:
- case E_TABLE_MEMORY_STORE_COLUMN_TYPE_OBJECT:
- if (etms->priv->columns[col].custom.value_is_empty)
- return etms->priv->columns[col].custom.value_to_string (E_TABLE_MODEL (etms), col, value, NULL);
- break;
- default:
- break;
- }
- return g_strdup_printf ("%d", GPOINTER_TO_INT (value));
-}
-
-static void
-etms_append_row (ETableModel *etm, ETableModel *source, int row)
-{
- ETableMemoryStore *etms = E_TABLE_MEMORY_STORE(etm);
- void **new_data;
- int i;
- int row_count;
-
- new_data = g_new (void *, etms->priv->col_count);
-
- for (i = 0; i < etms->priv->col_count; i++) {
- new_data[i] = e_table_model_value_at (source, i, row);
- }
-
- row_count = e_table_model_row_count (E_TABLE_MODEL (etms));
-
- e_table_memory_store_insert_array (etms, row_count, new_data, NULL);
-}
-
-static void
-etms_finalize (GObject *obj)
-{
- ETableMemoryStore *etms = (ETableMemoryStore *) obj;
-
- if (etms->priv) {
- e_table_memory_store_clear (etms);
-
- g_free (etms->priv->columns);
- g_free (etms->priv->store);
- g_free (etms->priv);
- }
-
- if (G_OBJECT_CLASS (parent_class)->finalize)
- G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-e_table_memory_store_init (ETableMemoryStore *etms)
-{
- etms->priv = g_new (ETableMemoryStorePrivate, 1);
-
- etms->priv->col_count = 0;
- etms->priv->columns = NULL;
- etms->priv->store = NULL;
-}
-
-static void
-e_table_memory_store_class_init (GObjectClass *object_class)
-{
- ETableModelClass *model_class = (ETableModelClass *) object_class;
-
- parent_class = g_type_class_peek_parent (object_class);
-
- object_class->finalize = etms_finalize;
-
- model_class->column_count = etms_column_count;
- model_class->value_at = etms_value_at;
- model_class->set_value_at = etms_set_value_at;
- model_class->is_cell_editable = etms_is_cell_editable;
- model_class->duplicate_value = etms_duplicate_value;
- model_class->free_value = etms_free_value;
- model_class->initialize_value = etms_initialize_value;
- model_class->value_is_empty = etms_value_is_empty;
- model_class->value_to_string = etms_value_to_string;
- model_class->append_row = etms_append_row;
-}
-
-E_MAKE_TYPE(e_table_memory_store, "ETableMemoryStore", ETableMemoryStore, e_table_memory_store_class_init, e_table_memory_store_init, E_TABLE_MEMORY_TYPE)
-
-/**
- * e_table_memory_store_new:
- * @col_count:
- * @value_at:
- * @set_value_at:
- * @is_cell_editable:
- * @duplicate_value:
- * @free_value:
- * @initialize_value:
- * @value_is_empty:
- * @value_to_string:
- * @data: closure pointer.
- *
- * This initializes a new ETableMemoryStoreModel object. ETableMemoryStoreModel is
- * an implementaiton of the abstract class ETableModel. The ETableMemoryStoreModel
- * is designed to allow people to easily create ETableModels without having
- * to create a new GtkType derived from ETableModel every time they need one.
- *
- * Instead, ETableMemoryStoreModel uses a setup based in callback functions, every
- * callback function signature mimics the signature of each ETableModel method
- * and passes the extra @data pointer to each one of the method to provide them
- * with any context they might want to use.
- *
- * Returns: An ETableMemoryStoreModel object (which is also an ETableModel
- * object).
- */
-ETableModel *
-e_table_memory_store_new (ETableMemoryStoreColumnInfo *columns)
-{
- ETableMemoryStore *et = g_object_new (E_TABLE_MEMORY_STORE_TYPE, NULL);
-
- if (e_table_memory_store_construct (et, columns)) {
- return (ETableModel *) et;
- } else {
- g_object_unref (et);
- return NULL;
- }
-}
-
-ETableModel *
-e_table_memory_store_construct (ETableMemoryStore *etms, ETableMemoryStoreColumnInfo *columns)
-{
- int i;
- for (i = 0; columns[i].type != E_TABLE_MEMORY_STORE_COLUMN_TYPE_TERMINATOR; i++)
- /* Intentionally blank */;
- etms->priv->col_count = i;
-
- etms->priv->columns = g_new (ETableMemoryStoreColumnInfo, etms->priv->col_count + 1);
-
- memcpy (etms->priv->columns, columns, (etms->priv->col_count + 1) * sizeof (ETableMemoryStoreColumnInfo));
-
- return E_TABLE_MODEL (etms);
-}
-
-
-void
-e_table_memory_store_adopt_value_at (ETableMemoryStore *etms, int col, int row, void *value)
-{
- e_table_model_pre_change (E_TABLE_MODEL (etms));
-
- STORE_LOCATOR (etms, col, row) = value;
-
- e_table_model_cell_changed (E_TABLE_MODEL (etms), col, row);
-}
-
-/* The size of these arrays is the number of columns. */
-void
-e_table_memory_store_insert_array (ETableMemoryStore *etms, int row, void **store, gpointer data)
-{
- int row_count;
- int i;
-
- row_count = e_table_model_row_count (E_TABLE_MODEL (etms)) + 1;
- if (row == -1)
- row = row_count - 1;
- etms->priv->store = g_realloc (etms->priv->store, etms->priv->col_count * row_count * sizeof (void *));
- memmove (etms->priv->store + etms->priv->col_count * (row + 1),
- etms->priv->store + etms->priv->col_count * row,
- etms->priv->col_count * (row_count - row - 1) * sizeof (void *));
-
- for (i = 0; i < etms->priv->col_count; i++) {
- STORE_LOCATOR(etms, i, row) = duplicate_value(etms, i, store[i]);
- }
-
- e_table_memory_insert (E_TABLE_MEMORY (etms), row, data);
-}
-
-void
-e_table_memory_store_insert (ETableMemoryStore *etms, int row, gpointer data, ...)
-{
- void **store;
- va_list args;
- int i;
-
- store = g_new (void *, etms->priv->col_count + 1);
-
- va_start (args, data);
- for (i = 0; i < etms->priv->col_count; i++) {
- store[i] = va_arg (args, void *);
- }
- va_end (args);
-
- e_table_memory_store_insert_array (etms, row, store, data);
-
- g_free (store);
-}
-
-void
-e_table_memory_store_insert_adopt_array (ETableMemoryStore *etms, int row, void **store, gpointer data)
-{
- int row_count;
- int i;
-
- row_count = e_table_model_row_count (E_TABLE_MODEL (etms)) + 1;
- if (row == -1)
- row = row_count - 1;
- etms->priv->store = g_realloc (etms->priv->store, etms->priv->col_count * row_count * sizeof (void *));
- memmove (etms->priv->store + etms->priv->col_count * (row + 1),
- etms->priv->store + etms->priv->col_count * row,
- etms->priv->col_count * (row_count - row - 1) * sizeof (void *));
-
- for (i = 0; i < etms->priv->col_count; i++) {
- STORE_LOCATOR(etms, i, row) = store[i];
- }
-
- e_table_memory_insert (E_TABLE_MEMORY (etms), row, data);
-}
-
-void
-e_table_memory_store_insert_adopt (ETableMemoryStore *etms, int row, gpointer data, ...)
-{
- void **store;
- va_list args;
- int i;
-
- store = g_new (void *, etms->priv->col_count + 1);
-
- va_start (args, data);
- for (i = 0; i < etms->priv->col_count; i++) {
- store[i] = va_arg (args, void *);
- }
- va_end (args);
-
- e_table_memory_store_insert_adopt_array (etms, row, store, data);
-
- g_free (store);
-}
-
-/**
- * e_table_memory_store_change_array:
- * @etms: the ETabelMemoryStore.
- * @row: the row we're changing.
- * @store: an array of new values to fill the row
- * @data: the new closure to associate with this row.
- *
- * frees existing values associated with a row and replaces them with
- * duplicates of the values in store.
- *
- */
-void
-e_table_memory_store_change_array (ETableMemoryStore *etms, int row, void **store, gpointer data)
-{
- int i;
-
- g_return_if_fail (row >= 0 && row < e_table_model_row_count (E_TABLE_MODEL (etms)));
-
- e_table_model_pre_change (E_TABLE_MODEL (etms));
-
- for (i = 0; i < etms->priv->col_count; i++) {
- free_value (etms, i, STORE_LOCATOR(etms, i, row));
- STORE_LOCATOR(etms, i, row) = duplicate_value(etms, i, store[i]);
- }
-
- e_table_memory_set_data (E_TABLE_MEMORY (etms), row, data);
- e_table_model_row_changed (E_TABLE_MODEL (etms), row);
-}
-
-/**
- * e_table_memory_store_change:
- * @etms: the ETabelMemoryStore.
- * @row: the row we're changing.
- * @data: the new closure to associate with this row.
- *
- * a varargs version of e_table_memory_store_change_array. you must
- * pass in etms->col_count args.
- */
-void
-e_table_memory_store_change (ETableMemoryStore *etms, int row, gpointer data, ...)
-{
- void **store;
- va_list args;
- int i;
-
- g_return_if_fail (row >= 0 && row < e_table_model_row_count (E_TABLE_MODEL (etms)));
-
- store = g_new0 (void *, etms->priv->col_count + 1);
-
- va_start (args, data);
- for (i = 0; i < etms->priv->col_count; i++) {
- store[i] = va_arg (args, void *);
- }
- va_end (args);
-
- e_table_memory_store_change_array (etms, row, store, data);
-
- g_free (store);
-}
-
-/**
- * e_table_memory_store_change_adopt_array:
- * @etms: the ETableMemoryStore
- * @row: the row we're changing.
- * @store: an array of new values to fill the row
- * @data: the new closure to associate with this row.
- *
- * frees existing values for the row and stores the values from store
- * into it. This function differs from
- * e_table_memory_storage_change_adopt_array in that it does not
- * duplicate the data.
- */
-void
-e_table_memory_store_change_adopt_array (ETableMemoryStore *etms, int row, void **store, gpointer data)
-{
- int i;
-
- g_return_if_fail (row >= 0 && row < e_table_model_row_count (E_TABLE_MODEL (etms)));
-
- for (i = 0; i < etms->priv->col_count; i++) {
- free_value (etms, i, STORE_LOCATOR(etms, i, row));
- STORE_LOCATOR(etms, i, row) = store[i];
- }
-
- e_table_memory_set_data (E_TABLE_MEMORY (etms), row, data);
- e_table_model_row_changed (E_TABLE_MODEL (etms), row);
-}
-
-/**
- * e_table_memory_store_change_adopt
- * @etms: the ETabelMemoryStore.
- * @row: the row we're changing.
- * @data: the new closure to associate with this row.
- *
- * a varargs version of e_table_memory_store_change_adopt_array. you
- * must pass in etms->col_count args.
- */
-void
-e_table_memory_store_change_adopt (ETableMemoryStore *etms, int row, gpointer data, ...)
-{
- void **store;
- va_list args;
- int i;
-
- g_return_if_fail (row >= 0 && row < e_table_model_row_count (E_TABLE_MODEL (etms)));
-
- store = g_new0 (void *, etms->priv->col_count + 1);
-
- va_start (args, data);
- for (i = 0; i < etms->priv->col_count; i++) {
- store[i] = va_arg (args, void *);
- }
- va_end (args);
-
- e_table_memory_store_change_adopt_array (etms, row, store, data);
-
- g_free (store);
-}
-
-void
-e_table_memory_store_remove (ETableMemoryStore *etms, int row)
-{
- ETableModel *model;
- int column_count, row_count;
- int i;
-
- model = E_TABLE_MODEL (etms);
- column_count = e_table_model_column_count (model);
-
- for (i = 0; i < column_count; i ++)
- e_table_model_free_value (model, i, e_table_model_value_at (model, i, row));
-
- row_count = e_table_model_row_count (E_TABLE_MODEL (etms)) - 1;
- memmove (etms->priv->store + etms->priv->col_count * row,
- etms->priv->store + etms->priv->col_count * (row + 1),
- etms->priv->col_count * (row_count - row) * sizeof (void *));
- etms->priv->store = g_realloc (etms->priv->store, etms->priv->col_count * row_count * sizeof (void *));
-
- e_table_memory_remove (E_TABLE_MEMORY (etms), row);
-}
-
-void
-e_table_memory_store_clear (ETableMemoryStore *etms)
-{
- ETableModel *model;
- int row_count, column_count;
- int i, j;
-
- model = E_TABLE_MODEL (etms);
- row_count = e_table_model_row_count (model);
- column_count = e_table_model_column_count (model);
-
- for (i = 0; i < row_count; i ++) {
- for (j = 0; j < column_count; j ++) {
- e_table_model_free_value (model, j, e_table_model_value_at (model, j, i));
- }
- }
-
- e_table_memory_clear (E_TABLE_MEMORY (etms));
-
- g_free (etms->priv->store);
- etms->priv->store = NULL;
-}
diff --git a/widgets/table/e-table-memory-store.h b/widgets/table/e-table-memory-store.h
deleted file mode 100644
index 54306da236..0000000000
--- a/widgets/table/e-table-memory-store.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-memory-store.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_MEMORY_STORE_H_
-#define _E_TABLE_MEMORY_STORE_H_
-
-#include <gal/e-table/e-table-memory.h>
-#include <gal/e-table/e-table-memory-callbacks.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_MEMORY_STORE_TYPE (e_table_memory_store_get_type ())
-#define E_TABLE_MEMORY_STORE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_MEMORY_STORE_TYPE, ETableMemoryStore))
-#define E_TABLE_MEMORY_STORE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_MEMORY_STORE_TYPE, ETableMemoryStoreClass))
-#define E_IS_TABLE_MEMORY_STORE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_MEMORY_STORE_TYPE))
-#define E_IS_TABLE_MEMORY_STORE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_MEMORY_STORE_TYPE))
-#define E_TABLE_MEMORY_STORE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TABLE_MEMORY_STORE_TYPE, ETableMemoryStoreClass))
-
-typedef enum {
- E_TABLE_MEMORY_STORE_COLUMN_TYPE_TERMINATOR,
- E_TABLE_MEMORY_STORE_COLUMN_TYPE_INTEGER,
- E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING,
- E_TABLE_MEMORY_STORE_COLUMN_TYPE_PIXBUF,
- E_TABLE_MEMORY_STORE_COLUMN_TYPE_OBJECT,
- E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM
-} ETableMemoryStoreColumnType;
-
-typedef struct {
- ETableMemoryCalbacksDuplicateValueFn duplicate_value;
- ETableMemoryCalbacksFreeValueFn free_value;
- ETableMemoryCalbacksInitializeValueFn initialize_value;
- ETableMemoryCalbacksValueIsEmptyFn value_is_empty;
- ETableMemoryCalbacksValueToStringFn value_to_string;
-} ETableMemoryStoreCustomColumn;
-
-typedef struct {
- ETableMemoryStoreColumnType type;
- ETableMemoryStoreCustomColumn custom;
- guint editable : 1;
-} ETableMemoryStoreColumnInfo;
-
-#define E_TABLE_MEMORY_STORE_TERMINATOR { E_TABLE_MEMORY_STORE_COLUMN_TYPE_TERMINATOR, { NULL }, FALSE }
-#define E_TABLE_MEMORY_STORE_INTEGER { E_TABLE_MEMORY_STORE_COLUMN_TYPE_INTEGER, { NULL }, FALSE }
-#define E_TABLE_MEMORY_STORE_STRING { E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING, { NULL }, FALSE }
-#define E_TABLE_MEMORY_STORE_PIXBUF { E_TABLE_MEMORY_STORE_COLUMN_TYPE_PIXBUF, { NULL }, FALSE }
-#define E_TABLE_MEMORY_STORE_EDITABLE_STRING { E_TABLE_MEMORY_STORE_COLUMN_TYPE_STRING, { NULL }, TRUE }
-#define E_TABLE_MEMORY_STORE_CUSTOM(editable, duplicate, free, initialize, empty, string) \
- { E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM, \
- { (duplicate), (free), (initialize), (empty), (string) }, editable }
-#define E_TABLE_MEMORY_STORE_OBJECT(editable, initialize, empty, string) \
- { E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM, \
- { NULL, NULL, (initialize), (empty), (string) }, editable }
-
-typedef struct _ETableMemoryStorePrivate ETableMemoryStorePrivate;
-
-typedef struct {
- ETableMemory parent;
-
- ETableMemoryStorePrivate *priv;
-} ETableMemoryStore;
-
-typedef struct {
- ETableMemoryClass parent_class;
-} ETableMemoryStoreClass;
-
-GType e_table_memory_store_get_type (void);
-
-/* Object Creation */
-ETableModel *e_table_memory_store_new (ETableMemoryStoreColumnInfo *columns);
-ETableModel *e_table_memory_store_construct (ETableMemoryStore *store,
- ETableMemoryStoreColumnInfo *columns);
-
-/* Adopt a value instead of copying it. */
-void e_table_memory_store_adopt_value_at (ETableMemoryStore *etms,
- int col,
- int row,
- void *value);
-
-/* The size of these arrays is the number of columns. */
-void e_table_memory_store_insert_array (ETableMemoryStore *etms,
- int row,
- void **store,
- gpointer data);
-void e_table_memory_store_insert (ETableMemoryStore *etms,
- int row,
- gpointer data,
- ...);
-void e_table_memory_store_insert_adopt (ETableMemoryStore *etms,
- int row,
- gpointer data,
- ...);
-void e_table_memory_store_insert_adopt_array (ETableMemoryStore *etms,
- int row,
- void **store,
- gpointer data);
-void e_table_memory_store_change_array (ETableMemoryStore *etms,
- int row,
- void **store,
- gpointer data);
-void e_table_memory_store_change (ETableMemoryStore *etms,
- int row,
- gpointer data,
- ...);
-void e_table_memory_store_change_adopt (ETableMemoryStore *etms,
- int row,
- gpointer data,
- ...);
-void e_table_memory_store_change_adopt_array (ETableMemoryStore *etms,
- int row,
- void **store,
- gpointer data);
-void e_table_memory_store_remove (ETableMemoryStore *etms,
- int row);
-void e_table_memory_store_clear (ETableMemoryStore *etms);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_MEMORY_STORE_H_ */
diff --git a/widgets/table/e-table-memory.c b/widgets/table/e-table-memory.c
deleted file mode 100644
index 7d9958bbd6..0000000000
--- a/widgets/table/e-table-memory.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-memory.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-table-memory.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include <string.h>
-
-static ETableModel *parent_class;
-
-struct ETableMemoryPriv {
- gpointer *data;
- int num_rows;
- gint frozen;
-};
-
-
-/* virtual methods */
-
-static void
-etmm_finalize (GObject *object)
-{
- ETableMemory *etmm = E_TABLE_MEMORY (object);
- ETableMemoryPriv *priv = etmm->priv;
-
- /* XXX lots of stuff to free here */
- if (priv) {
- g_free (priv->data);
- g_free (priv);
- }
- etmm->priv = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static int
-etmm_row_count (ETableModel *etm)
-{
- ETableMemory *etmm = E_TABLE_MEMORY (etm);
-
- return etmm->priv->num_rows;
-}
-
-
-static void
-e_table_memory_class_init (GObjectClass *klass)
-{
- ETableModelClass *table_class = (ETableModelClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- klass->finalize = etmm_finalize;
-
- table_class->row_count = etmm_row_count;
-}
-
-static void
-e_table_memory_init (GObject *object)
-{
- ETableMemory *etmm = (ETableMemory *)object;
-
- ETableMemoryPriv *priv;
-
- priv = g_new0 (ETableMemoryPriv, 1);
- etmm->priv = priv;
-
- priv->data = NULL;
- priv->num_rows = 0;
- priv->frozen = 0;
-}
-
-E_MAKE_TYPE(e_table_memory, "ETableMemory", ETableMemory, e_table_memory_class_init, e_table_memory_init, E_TABLE_MODEL_TYPE)
-
-
-
-/**
- * e_table_memory_new
- *
- * XXX docs here.
- *
- * return values: a newly constructed ETableMemory.
- */
-ETableMemory *
-e_table_memory_new (void)
-{
- return g_object_new (E_TABLE_MEMORY_TYPE, NULL);
-}
-
-/**
- * e_table_memory_get_data:
- * @etmm:
- * @row:
- *
- *
- *
- * Return value:
- **/
-gpointer
-e_table_memory_get_data (ETableMemory *etmm, int row)
-{
- g_return_val_if_fail(row >= 0, NULL);
- g_return_val_if_fail(row < etmm->priv->num_rows, NULL);
-
- return etmm->priv->data[row];
-}
-
-/**
- * e_table_memory_set_data:
- * @etmm:
- * @row:
- * @data:
- *
- *
- **/
-void
-e_table_memory_set_data (ETableMemory *etmm, int row, gpointer data)
-{
- g_return_if_fail(row >= 0);
- g_return_if_fail(row < etmm->priv->num_rows);
-
- etmm->priv->data[row] = data;
-}
-
-/**
- * e_table_memory_insert:
- * @table_model:
- * @parent_path:
- * @position:
- * @data:
- *
- *
- *
- * Return value:
- **/
-void
-e_table_memory_insert (ETableMemory *etmm,
- int row,
- gpointer data)
-{
- g_return_if_fail(row >= -1);
- g_return_if_fail(row <= etmm->priv->num_rows);
-
- if (!etmm->priv->frozen)
- e_table_model_pre_change(E_TABLE_MODEL(etmm));
-
- if (row == -1)
- row = etmm->priv->num_rows;
- etmm->priv->data = g_renew(gpointer, etmm->priv->data, etmm->priv->num_rows + 1);
- memmove(etmm->priv->data + row + 1, etmm->priv->data + row, (etmm->priv->num_rows - row) * sizeof (gpointer));
- etmm->priv->data[row] = data;
- etmm->priv->num_rows ++;
- if (!etmm->priv->frozen)
- e_table_model_row_inserted(E_TABLE_MODEL(etmm), row);
-}
-
-
-
-/**
- * e_table_memory_remove:
- * @etable:
- * @path:
- *
- *
- *
- * Return value:
- **/
-gpointer
-e_table_memory_remove (ETableMemory *etmm, int row)
-{
- gpointer ret;
-
- g_return_val_if_fail(row >= 0, NULL);
- g_return_val_if_fail(row < etmm->priv->num_rows, NULL);
-
- if (!etmm->priv->frozen)
- e_table_model_pre_change(E_TABLE_MODEL(etmm));
- ret = etmm->priv->data[row];
- memmove(etmm->priv->data + row, etmm->priv->data + row + 1, (etmm->priv->num_rows - row - 1) * sizeof (gpointer));
- etmm->priv->num_rows --;
- if (!etmm->priv->frozen)
- e_table_model_row_deleted(E_TABLE_MODEL(etmm), row);
- return ret;
-}
-
-/**
- * e_table_memory_clear:
- * @etable:
- * @path:
- *
- *
- *
- * Return value:
- **/
-void
-e_table_memory_clear (ETableMemory *etmm)
-{
- if (!etmm->priv->frozen)
- e_table_model_pre_change(E_TABLE_MODEL(etmm));
- g_free(etmm->priv->data);
- etmm->priv->data = NULL;
- etmm->priv->num_rows = 0;
- if (!etmm->priv->frozen)
- e_table_model_changed(E_TABLE_MODEL(etmm));
-}
-
-/**
- * e_table_memory_freeze:
- * @etmm: the ETableModel to freeze.
- *
- * This function prepares an ETableModel for a period of much change.
- * All signals regarding changes to the table are deferred until we
- * thaw the table.
- *
- **/
-void
-e_table_memory_freeze(ETableMemory *etmm)
-{
- ETableMemoryPriv *priv = etmm->priv;
-
- if (priv->frozen == 0)
- e_table_model_pre_change(E_TABLE_MODEL(etmm));
-
- priv->frozen ++;
-}
-
-/**
- * e_table_memory_thaw:
- * @etmm: the ETableMemory to thaw.
- *
- * This function thaws an ETableMemory. All the defered signals can add
- * up to a lot, we don't know - so we just emit a model_changed
- * signal.
- *
- **/
-void
-e_table_memory_thaw(ETableMemory *etmm)
-{
- ETableMemoryPriv *priv = etmm->priv;
-
- if (priv->frozen > 0)
- priv->frozen --;
- if (priv->frozen == 0) {
- e_table_model_changed(E_TABLE_MODEL(etmm));
- }
-}
diff --git a/widgets/table/e-table-memory.h b/widgets/table/e-table-memory.h
deleted file mode 100644
index c1b3cd45f8..0000000000
--- a/widgets/table/e-table-memory.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-memory.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_MEMORY_H_
-#define _E_TABLE_MEMORY_H_
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gal/e-table/e-table-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_MEMORY_TYPE (e_table_memory_get_type ())
-#define E_TABLE_MEMORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_MEMORY_TYPE, ETableMemory))
-#define E_TABLE_MEMORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_MEMORY_TYPE, ETableMemoryClass))
-#define E_IS_TABLE_MEMORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_MEMORY_TYPE))
-#define E_IS_TABLE_MEMORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_MEMORY_TYPE))
-#define E_TABLE_MEMORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_MEMORY_TYPE, ETableMemoryClass))
-
-typedef struct ETableMemory ETableMemory;
-typedef struct ETableMemoryPriv ETableMemoryPriv;
-typedef struct ETableMemoryClass ETableMemoryClass;
-
-struct ETableMemory {
- ETableModel base;
- ETableMemoryPriv *priv;
-};
-
-struct ETableMemoryClass {
- ETableModelClass parent_class;
-};
-
-
-GType e_table_memory_get_type (void);
-void e_table_memory_construct (ETableMemory *etable);
-ETableMemory *e_table_memory_new (void);
-
-/* row operations */
-void e_table_memory_insert (ETableMemory *etable,
- int row,
- gpointer data);
-gpointer e_table_memory_remove (ETableMemory *etable,
- int row);
-void e_table_memory_clear (ETableMemory *etable);
-
-/* Freeze and thaw */
-void e_table_memory_freeze (ETableMemory *etable);
-void e_table_memory_thaw (ETableMemory *etable);
-gpointer e_table_memory_get_data (ETableMemory *etm,
- int row);
-void e_table_memory_set_data (ETableMemory *etm,
- int row,
- gpointer data);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_MEMORY_H */
diff --git a/widgets/table/e-table-model.c b/widgets/table/e-table-model.c
deleted file mode 100644
index 67c443c8c6..0000000000
--- a/widgets/table/e-table-model.c
+++ /dev/null
@@ -1,616 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <glib-object.h>
-#include "e-table-model.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-marshal.h"
-
-#define ETM_CLASS(e) (E_TABLE_MODEL_GET_CLASS (e))
-#define ETM_FROZEN(e) (GPOINTER_TO_INT (g_object_get_data (G_OBJECT(e), "frozen")) != 0)
-
-#define d(x)
-
-d(static gint depth = 0;)
-
-
-static GObjectClass *e_table_model_parent_class;
-
-enum {
- MODEL_NO_CHANGE,
- MODEL_CHANGED,
- MODEL_PRE_CHANGE,
- MODEL_ROW_CHANGED,
- MODEL_CELL_CHANGED,
- MODEL_ROWS_INSERTED,
- MODEL_ROWS_DELETED,
- ROW_SELECTION,
- LAST_SIGNAL
-};
-
-static guint e_table_model_signals [LAST_SIGNAL] = { 0, };
-
-/**
- * e_table_model_column_count:
- * @e_table_model: The e-table-model to operate on
- *
- * Returns: the number of columns in the table model.
- */
-int
-e_table_model_column_count (ETableModel *e_table_model)
-{
- g_return_val_if_fail (e_table_model != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), 0);
-
- return ETM_CLASS (e_table_model)->column_count (e_table_model);
-}
-
-
-/**
- * e_table_model_row_count:
- * @e_table_model: the e-table-model to operate on
- *
- * Returns: the number of rows in the Table model.
- */
-int
-e_table_model_row_count (ETableModel *e_table_model)
-{
- g_return_val_if_fail (e_table_model != NULL, 0);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), 0);
-
- return ETM_CLASS (e_table_model)->row_count (e_table_model);
-}
-
-/**
- * e_table_model_append_row:
- * @e_table_model: the table model to append the a row to.
- * @source:
- * @row:
- *
- */
-void
-e_table_model_append_row (ETableModel *e_table_model, ETableModel *source, int row)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_CLASS (e_table_model)->append_row)
- ETM_CLASS (e_table_model)->append_row (e_table_model, source, row);
-}
-
-/**
- * e_table_value_at:
- * @e_table_model: the e-table-model to operate on
- * @col: column in the model to pull data from.
- * @row: row in the model to pull data from.
- *
- * Return value: This function returns the value that is stored
- * by the @e_table_model in column @col and row @row. The data
- * returned can be a pointer or any data value that can be stored
- * inside a pointer.
- *
- * The data returned is typically used by an ECell renderer.
- *
- * The data returned must be valid until the model sends a signal that
- * affect that piece of data. model_changed affects all data.
- * row_changed affects the data in that row. cell_changed affects the
- * data in that cell. rows_deleted affects all data in those rows.
- * rows_inserted and no_change don't affect any data in this way.
- **/
-void *
-e_table_model_value_at (ETableModel *e_table_model, int col, int row)
-{
- g_return_val_if_fail (e_table_model != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), NULL);
-
- return ETM_CLASS (e_table_model)->value_at (e_table_model, col, row);
-}
-
-/**
- * e_table_model_set_value_at:
- * @e_table_model: the table model to operate on.
- * @col: the column where the data will be stored in the model.
- * @row: the row where the data will be stored in the model.
- * @value: the data to be stored.
- *
- * This function instructs the model to store the value in @data in the
- * the @e_table_model at column @col and row @row. The @data typically
- * comes from one of the ECell rendering objects.
- *
- * There should be an agreement between the Table Model and the user
- * of this function about the data being stored. Typically it will
- * be a pointer to a set of data, or a datum that fits inside a void *.
- */
-void
-e_table_model_set_value_at (ETableModel *e_table_model, int col, int row, const void *value)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- ETM_CLASS (e_table_model)->set_value_at (e_table_model, col, row, value);
-}
-
-/**
- * e_table_model_is_cell_editable:
- * @e_table_model: the table model to query.
- * @col: column to query.
- * @row: row to query.
- *
- * Returns: %TRUE if the cell in @e_table_model at @col,@row can be
- * edited, %FALSE otherwise
- */
-gboolean
-e_table_model_is_cell_editable (ETableModel *e_table_model, int col, int row)
-{
- g_return_val_if_fail (e_table_model != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), FALSE);
-
- return ETM_CLASS (e_table_model)->is_cell_editable (e_table_model, col, row);
-}
-
-
-void *
-e_table_model_duplicate_value (ETableModel *e_table_model, int col, const void *value)
-{
- g_return_val_if_fail (e_table_model != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), NULL);
-
- if (ETM_CLASS (e_table_model)->duplicate_value)
- return ETM_CLASS (e_table_model)->duplicate_value (e_table_model, col, value);
- else
- return NULL;
-}
-
-void
-e_table_model_free_value (ETableModel *e_table_model, int col, void *value)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_CLASS (e_table_model)->free_value)
- ETM_CLASS (e_table_model)->free_value (e_table_model, col, value);
-}
-
-gboolean
-e_table_model_has_save_id (ETableModel *e_table_model)
-{
- g_return_val_if_fail (e_table_model != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), FALSE);
-
- if (ETM_CLASS (e_table_model)->has_save_id)
- return ETM_CLASS (e_table_model)->has_save_id (e_table_model);
- else
- return FALSE;
-}
-
-char *
-e_table_model_get_save_id (ETableModel *e_table_model, int row)
-{
- g_return_val_if_fail (e_table_model != NULL, "/");
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), "/");
-
- if (ETM_CLASS (e_table_model)->get_save_id)
- return ETM_CLASS (e_table_model)->get_save_id (e_table_model, row);
- else
- return NULL;
-}
-
-gboolean
-e_table_model_has_change_pending(ETableModel *e_table_model)
-{
- g_return_val_if_fail (e_table_model != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), FALSE);
-
- if (ETM_CLASS (e_table_model)->has_change_pending)
- return ETM_CLASS (e_table_model)->has_change_pending (e_table_model);
- else
- return FALSE;
-}
-
-void *
-e_table_model_initialize_value (ETableModel *e_table_model, int col)
-{
- g_return_val_if_fail (e_table_model != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), NULL);
-
- if (ETM_CLASS (e_table_model)->initialize_value)
- return ETM_CLASS (e_table_model)->initialize_value (e_table_model, col);
- else
- return NULL;
-}
-
-gboolean
-e_table_model_value_is_empty (ETableModel *e_table_model, int col, const void *value)
-{
- g_return_val_if_fail (e_table_model != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), FALSE);
-
- if (ETM_CLASS (e_table_model)->value_is_empty)
- return ETM_CLASS (e_table_model)->value_is_empty (e_table_model, col, value);
- else
- return FALSE;
-}
-
-char *
-e_table_model_value_to_string (ETableModel *e_table_model, int col, const void *value)
-{
- g_return_val_if_fail (e_table_model != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_MODEL (e_table_model), NULL);
-
- if (ETM_CLASS (e_table_model)->value_to_string)
- return ETM_CLASS (e_table_model)->value_to_string (e_table_model, col, value);
- else
- return g_strdup("");
-}
-
-static void
-e_table_model_finalize (GObject *object)
-{
- if (e_table_model_parent_class->finalize)
- (*e_table_model_parent_class->finalize)(object);
-}
-
-static void
-e_table_model_class_init (GObjectClass *object_class)
-{
- ETableModelClass *klass = E_TABLE_MODEL_CLASS(object_class);
- e_table_model_parent_class = g_type_class_peek_parent (object_class);
-
- object_class->finalize = e_table_model_finalize;
-
- e_table_model_signals [MODEL_NO_CHANGE] =
- g_signal_new ("model_no_change",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableModelClass, model_no_change),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
-
- e_table_model_signals [MODEL_CHANGED] =
- g_signal_new ("model_changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableModelClass, model_changed),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- e_table_model_signals [MODEL_PRE_CHANGE] =
- g_signal_new ("model_pre_change",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableModelClass, model_pre_change),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- e_table_model_signals [MODEL_ROW_CHANGED] =
- g_signal_new ("model_row_changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableModelClass, model_row_changed),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- e_table_model_signals [MODEL_CELL_CHANGED] =
- g_signal_new ("model_cell_changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableModelClass, model_cell_changed),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_VOID__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- e_table_model_signals [MODEL_ROWS_INSERTED] =
- g_signal_new ("model_rows_inserted",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableModelClass, model_rows_inserted),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_VOID__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- e_table_model_signals [MODEL_ROWS_DELETED] =
- g_signal_new ("model_rows_deleted",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableModelClass, model_rows_deleted),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_VOID__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- klass->column_count = NULL;
- klass->row_count = NULL;
- klass->append_row = NULL;
-
- klass->value_at = NULL;
- klass->set_value_at = NULL;
- klass->is_cell_editable = NULL;
-
- klass->has_save_id = NULL;
- klass->get_save_id = NULL;
-
- klass->has_change_pending = NULL;
-
- klass->duplicate_value = NULL;
- klass->free_value = NULL;
- klass->initialize_value = NULL;
- klass->value_is_empty = NULL;
- klass->value_to_string = NULL;
-
- klass->model_no_change = NULL;
- klass->model_changed = NULL;
- klass->model_row_changed = NULL;
- klass->model_cell_changed = NULL;
- klass->model_rows_inserted = NULL;
- klass->model_rows_deleted = NULL;
-}
-
-E_MAKE_TYPE(e_table_model, "ETableModel", ETableModel, e_table_model_class_init, NULL, G_TYPE_OBJECT)
-
-#if d(!)0
-static void
-print_tabs (void)
-{
- int i;
- for (i = 0; i < depth; i++)
- g_print("\t");
-}
-#endif
-
-void
-e_table_model_pre_change (ETableModel *e_table_model)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_FROZEN (e_table_model))
- return;
-
- d(print_tabs());
- d(g_print("Emitting pre_change on model 0x%p, a %s.\n", e_table_model, gtk_type_name (GTK_OBJECT(e_table_model)->klass->type)));
- d(depth++);
- g_signal_emit (G_OBJECT (e_table_model),
- e_table_model_signals [MODEL_PRE_CHANGE], 0);
- d(depth--);
-}
-
-/**
- * e_table_model_no_change:
- * @e_table_model: the table model to notify of the lack of a change
- *
- * Use this function to notify any views of this table model that
- * the contents of the table model have changed. This will emit
- * the signal "model_no_change" on the @e_table_model object.
- *
- * It is preferable to use the e_table_model_row_changed() and
- * the e_table_model_cell_changed() to notify of smaller changes
- * than to invalidate the entire model, as the views might have
- * ways of caching the information they render from the model.
- */
-void
-e_table_model_no_change (ETableModel *e_table_model)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_FROZEN (e_table_model))
- return;
-
- d(print_tabs());
- d(g_print("Emitting model_no_change on model 0x%p, a %s.\n", e_table_model, gtk_type_name (GTK_OBJECT(e_table_model)->klass->type)));
- d(depth++);
- g_signal_emit (G_OBJECT (e_table_model),
- e_table_model_signals [MODEL_NO_CHANGE], 0);
- d(depth--);
-}
-
-/**
- * e_table_model_changed:
- * @e_table_model: the table model to notify of the change
- *
- * Use this function to notify any views of this table model that
- * the contents of the table model have changed. This will emit
- * the signal "model_changed" on the @e_table_model object.
- *
- * It is preferable to use the e_table_model_row_changed() and
- * the e_table_model_cell_changed() to notify of smaller changes
- * than to invalidate the entire model, as the views might have
- * ways of caching the information they render from the model.
- */
-void
-e_table_model_changed (ETableModel *e_table_model)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_FROZEN (e_table_model))
- return;
-
- d(print_tabs());
- d(g_print("Emitting model_changed on model 0x%p, a %s.\n", e_table_model, gtk_type_name (GTK_OBJECT(e_table_model)->klass->type)));
- d(depth++);
- g_signal_emit (G_OBJECT (e_table_model),
- e_table_model_signals [MODEL_CHANGED], 0);
- d(depth--);
-}
-
-/**
- * e_table_model_row_changed:
- * @e_table_model: the table model to notify of the change
- * @row: the row that was changed in the model.
- *
- * Use this function to notify any views of the table model that
- * the contents of row @row have changed in model. This function
- * will emit the "model_row_changed" signal on the @e_table_model
- * object
- */
-void
-e_table_model_row_changed (ETableModel *e_table_model, int row)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_FROZEN (e_table_model))
- return;
-
- d(print_tabs());
- d(g_print("Emitting row_changed on model 0x%p, a %s, row %d.\n", e_table_model, gtk_type_name (GTK_OBJECT(e_table_model)->klass->type), row));
- d(depth++);
- g_signal_emit (G_OBJECT (e_table_model),
- e_table_model_signals [MODEL_ROW_CHANGED], 0, row);
- d(depth--);
-}
-
-/**
- * e_table_model_cell_changed:
- * @e_table_model: the table model to notify of the change
- * @col: the column.
- * @row: the row
- *
- * Use this function to notify any views of the table model that
- * contents of the cell at @col,@row has changed. This will emit
- * the "model_cell_changed" signal on the @e_table_model
- * object
- */
-void
-e_table_model_cell_changed (ETableModel *e_table_model, int col, int row)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_FROZEN (e_table_model))
- return;
-
- d(print_tabs());
- d(g_print("Emitting cell_changed on model 0x%p, a %s, row %d, col %d.\n", e_table_model, gtk_type_name (GTK_OBJECT(e_table_model)->klass->type), row, col));
- d(depth++);
- g_signal_emit (G_OBJECT (e_table_model),
- e_table_model_signals [MODEL_CELL_CHANGED], 0, col, row);
- d(depth--);
-}
-
-/**
- * e_table_model_rows_inserted:
- * @e_table_model: the table model to notify of the change
- * @row: the row that was inserted into the model.
- * @count: The number of rows that were inserted.
- *
- * Use this function to notify any views of the table model that
- * @count rows at row @row have been inserted into the model. This
- * function will emit the "model_rows_inserted" signal on the
- * @e_table_model object
- */
-void
-e_table_model_rows_inserted (ETableModel *e_table_model, int row, int count)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_FROZEN (e_table_model))
- return;
-
- d(print_tabs());
- d(g_print("Emitting row_inserted on model 0x%p, a %s, row %d.\n", e_table_model, gtk_type_name (GTK_OBJECT(e_table_model)->klass->type), row));
- d(depth++);
- g_signal_emit (G_OBJECT (e_table_model),
- e_table_model_signals [MODEL_ROWS_INSERTED], 0, row, count);
- d(depth--);
-}
-
-/**
- * e_table_model_row_inserted:
- * @e_table_model: the table model to notify of the change
- * @row: the row that was inserted into the model.
- *
- * Use this function to notify any views of the table model that the
- * row @row has been inserted into the model. This function will emit
- * the "model_rows_inserted" signal on the @e_table_model object
- */
-void
-e_table_model_row_inserted (ETableModel *e_table_model, int row)
-{
- e_table_model_rows_inserted(e_table_model, row, 1);
-}
-
-/**
- * e_table_model_row_deleted:
- * @e_table_model: the table model to notify of the change
- * @row: the row that was deleted
- * @count: The number of rows deleted
- *
- * Use this function to notify any views of the table model that
- * @count rows at row @row have been deleted from the model. This
- * function will emit the "model_rows_deleted" signal on the
- * @e_table_model object
- */
-void
-e_table_model_rows_deleted (ETableModel *e_table_model, int row, int count)
-{
- g_return_if_fail (e_table_model != NULL);
- g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
-
- if (ETM_FROZEN (e_table_model))
- return;
-
- d(print_tabs());
- d(g_print("Emitting row_deleted on model 0x%p, a %s, row %d.\n", e_table_model, gtk_type_name (GTK_OBJECT(e_table_model)->klass->type), row));
- d(depth++);
- g_signal_emit (G_OBJECT (e_table_model),
- e_table_model_signals [MODEL_ROWS_DELETED], 0, row, count);
- d(depth--);
-}
-
-/**
- * e_table_model_row_deleted:
- * @e_table_model: the table model to notify of the change
- * @row: the row that was deleted
- *
- * Use this function to notify any views of the table model that the
- * row @row has been deleted from the model. This function will emit
- * the "model_rows_deleted" signal on the @e_table_model object
- */
-void
-e_table_model_row_deleted (ETableModel *e_table_model, int row)
-{
- e_table_model_rows_deleted(e_table_model, row, 1);
-}
-
-void
-e_table_model_freeze (ETableModel *e_table_model)
-{
- e_table_model_pre_change (e_table_model);
- g_object_set_data (G_OBJECT (e_table_model), "frozen", GINT_TO_POINTER (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (e_table_model), "frozen")) + 1));
-}
-
-void
-e_table_model_thaw (ETableModel *e_table_model)
-{
- g_object_set_data (G_OBJECT (e_table_model), "frozen", GINT_TO_POINTER (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (e_table_model), "frozen")) - 1));
- e_table_model_changed (e_table_model);
-}
-
diff --git a/widgets/table/e-table-model.h b/widgets/table/e-table-model.h
deleted file mode 100644
index a08d9712ad..0000000000
--- a/widgets/table/e-table-model.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_MODEL_H_
-#define _E_TABLE_MODEL_H_
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_MODEL_TYPE (e_table_model_get_type ())
-#define E_TABLE_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_MODEL_TYPE, ETableModel))
-#define E_TABLE_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_MODEL_TYPE, ETableModelClass))
-#define E_IS_TABLE_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_MODEL_TYPE))
-#define E_IS_TABLE_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_MODEL_TYPE))
-#define E_TABLE_MODEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_MODEL_TYPE, ETableModelClass))
-
-typedef struct {
- GObject base;
-} ETableModel;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Virtual methods
- */
- int (*column_count) (ETableModel *etm);
- int (*row_count) (ETableModel *etm);
- void (*append_row) (ETableModel *etm, ETableModel *source, int row);
-
- void *(*value_at) (ETableModel *etm, int col, int row);
- void (*set_value_at) (ETableModel *etm, int col, int row, const void *value);
- gboolean (*is_cell_editable) (ETableModel *etm, int col, int row);
-
- gboolean (*has_save_id) (ETableModel *etm);
- char *(*get_save_id) (ETableModel *etm, int row);
-
- gboolean (*has_change_pending) (ETableModel *etm);
-
- /* Allocate a copy of the given value. */
- void *(*duplicate_value) (ETableModel *etm, int col, const void *value);
- /* Free an allocated value. */
- void (*free_value) (ETableModel *etm, int col, void *value);
- /* Return an allocated empty value. */
- void *(*initialize_value) (ETableModel *etm, int col);
- /* Return TRUE if value is equivalent to an empty cell. */
- gboolean (*value_is_empty) (ETableModel *etm, int col, const void *value);
- /* Return an allocated string. */
- char *(*value_to_string) (ETableModel *etm, int col, const void *value);
-
-
- /*
- * Signals
- */
-
- /*
- * These all come after the change has been made.
- * No changes, cancel pre_change: no_change
- * Major structural changes: model_changed
- * Changes only in a row: row_changed
- * Only changes in a cell: cell_changed
- * A row inserted: row_inserted
- * A row deleted: row_deleted
- */
- void (*model_pre_change) (ETableModel *etm);
-
- void (*model_no_change) (ETableModel *etm);
- void (*model_changed) (ETableModel *etm);
- void (*model_row_changed) (ETableModel *etm, int row);
- void (*model_cell_changed) (ETableModel *etm, int col, int row);
- void (*model_rows_inserted) (ETableModel *etm, int row, int count);
- void (*model_rows_deleted) (ETableModel *etm, int row, int count);
-} ETableModelClass;
-
-GType e_table_model_get_type (void);
-
-/**/
-int e_table_model_column_count (ETableModel *e_table_model);
-const char *e_table_model_column_name (ETableModel *e_table_model,
- int col);
-int e_table_model_row_count (ETableModel *e_table_model);
-void e_table_model_append_row (ETableModel *e_table_model,
- ETableModel *source,
- int row);
-
-/**/
-void *e_table_model_value_at (ETableModel *e_table_model,
- int col,
- int row);
-void e_table_model_set_value_at (ETableModel *e_table_model,
- int col,
- int row,
- const void *value);
-gboolean e_table_model_is_cell_editable (ETableModel *e_table_model,
- int col,
- int row);
-
-/**/
-gboolean e_table_model_has_save_id (ETableModel *etm);
-char *e_table_model_get_save_id (ETableModel *etm,
- int row);
-
-/**/
-gboolean e_table_model_has_change_pending (ETableModel *etm);
-
-
-/**/
-void *e_table_model_duplicate_value (ETableModel *e_table_model,
- int col,
- const void *value);
-void e_table_model_free_value (ETableModel *e_table_model,
- int col,
- void *value);
-void *e_table_model_initialize_value (ETableModel *e_table_model,
- int col);
-gboolean e_table_model_value_is_empty (ETableModel *e_table_model,
- int col,
- const void *value);
-char *e_table_model_value_to_string (ETableModel *e_table_model,
- int col,
- const void *value);
-
-/*
- * Routines for emitting signals on the e_table
- */
-void e_table_model_pre_change (ETableModel *e_table_model);
-void e_table_model_no_change (ETableModel *e_table_model);
-void e_table_model_changed (ETableModel *e_table_model);
-void e_table_model_row_changed (ETableModel *e_table_model,
- int row);
-void e_table_model_cell_changed (ETableModel *e_table_model,
- int col,
- int row);
-void e_table_model_rows_inserted (ETableModel *e_table_model,
-int row,
-int count);
-void e_table_model_rows_deleted (ETableModel *e_table_model,
-int row,
-int count);
-
-/**/
-void e_table_model_row_inserted (ETableModel *e_table_model,
-int row);
-void e_table_model_row_deleted (ETableModel *e_table_model,
-int row);
-
-void e_table_model_freeze (ETableModel *e_table_model);
-void e_table_model_thaw (ETableModel *e_table_model);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_MODEL_H_ */
diff --git a/widgets/table/e-table-one.c b/widgets/table/e-table-one.c
deleted file mode 100644
index 486f14862f..0000000000
--- a/widgets/table/e-table-one.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-one.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-one.h"
-#include "gal/util/e-util.h"
-
-static ETableModelClass *parent_class = NULL;
-
-static int
-one_column_count (ETableModel *etm)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->source)
- return e_table_model_column_count(one->source);
- else
- return 0;
-}
-
-static int
-one_row_count (ETableModel *etm)
-{
- return 1;
-}
-
-static void *
-one_value_at (ETableModel *etm, int col, int row)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->data)
- return one->data[col];
- else
- return NULL;
-}
-
-static void
-one_set_value_at (ETableModel *etm, int col, int row, const void *val)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->data && one->source) {
- e_table_model_free_value(one->source, col, one->data[col]);
- one->data[col] = e_table_model_duplicate_value(one->source, col, val);
- }
-}
-
-static gboolean
-one_is_cell_editable (ETableModel *etm, int col, int row)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->source)
- return e_table_model_is_cell_editable(one->source, col, -1);
- else
- return FALSE;
-}
-
-/* The default for one_duplicate_value is to return the raw value. */
-static void *
-one_duplicate_value (ETableModel *etm, int col, const void *value)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->source)
- return e_table_model_duplicate_value(one->source, col, value);
- else
- return (void *)value;
-}
-
-static void
-one_free_value (ETableModel *etm, int col, void *value)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->source)
- e_table_model_free_value(one->source, col, value);
-}
-
-static void *
-one_initialize_value (ETableModel *etm, int col)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->source)
- return e_table_model_initialize_value (one->source, col);
- else
- return NULL;
-}
-
-static gboolean
-one_value_is_empty (ETableModel *etm, int col, const void *value)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->source)
- return e_table_model_value_is_empty (one->source, col, value);
- else
- return FALSE;
-}
-
-static char *
-one_value_to_string (ETableModel *etm, int col, const void *value)
-{
- ETableOne *one = E_TABLE_ONE(etm);
-
- if (one->source)
- return e_table_model_value_to_string (one->source, col, value);
- else
- return g_strdup("");
-}
-
-static void
-one_finalize (GObject *object)
-{
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-one_dispose (GObject *object)
-{
- ETableOne *one = E_TABLE_ONE (object);
-
-
- if (one->data) {
- int i;
- int col_count;
-
- if (one->source) {
- col_count = e_table_model_column_count(one->source);
-
- for (i = 0; i < col_count; i++)
- e_table_model_free_value(one->source, i, one->data[i]);
- }
-
- g_free (one->data);
- }
- one->data = NULL;
-
- if (one->source)
- g_object_unref(one->source);
- one->source = NULL;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-e_table_one_class_init (GObjectClass *object_class)
-{
- ETableModelClass *model_class = (ETableModelClass *) object_class;
-
- parent_class = g_type_class_peek_parent (object_class);
-
- model_class->column_count = one_column_count;
- model_class->row_count = one_row_count;
- model_class->value_at = one_value_at;
- model_class->set_value_at = one_set_value_at;
- model_class->is_cell_editable = one_is_cell_editable;
- model_class->duplicate_value = one_duplicate_value;
- model_class->free_value = one_free_value;
- model_class->initialize_value = one_initialize_value;
- model_class->value_is_empty = one_value_is_empty;
- model_class->value_to_string = one_value_to_string;
-
- object_class->dispose = one_dispose;
- object_class->finalize = one_finalize;
-}
-
-static void
-e_table_one_init (GObject *object)
-{
- ETableOne *one = E_TABLE_ONE(object);
-
- one->source = NULL;
- one->data = NULL;
-}
-
-E_MAKE_TYPE(e_table_one, "ETableOne", ETableOne, e_table_one_class_init, e_table_one_init, E_TABLE_MODEL_TYPE)
-
-
-ETableModel *
-e_table_one_new (ETableModel *source)
-{
- ETableOne *eto;
- int col_count;
- int i;
-
- eto = g_object_new (E_TABLE_ONE_TYPE, NULL);
- eto->source = source;
-
- col_count = e_table_model_column_count(source);
- eto->data = g_new(void *, col_count);
- for (i = 0; i < col_count; i++) {
- eto->data[i] = e_table_model_initialize_value(source, i);
- }
-
- if (source)
- g_object_ref(source);
-
- return (ETableModel *) eto;
-}
-
-void
-e_table_one_commit (ETableOne *one)
-{
- if (one->source) {
- int empty = TRUE;
- int col;
- int cols = e_table_model_column_count(one->source);
- for (col = 0; col < cols; col++) {
- if (!e_table_model_value_is_empty(one->source, col, one->data[col])) {
- empty = FALSE;
- break;
- }
- }
- if (!empty) {
- e_table_model_append_row(one->source, E_TABLE_MODEL(one), 0);
- }
- }
-}
diff --git a/widgets/table/e-table-one.h b/widgets/table/e-table-one.h
deleted file mode 100644
index 1c8147d779..0000000000
--- a/widgets/table/e-table-one.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-one.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_ONE_H_
-#define _E_TABLE_ONE_H_
-
-#include <gal/e-table/e-table-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_ONE_TYPE (e_table_one_get_type ())
-#define E_TABLE_ONE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_ONE_TYPE, ETableOne))
-#define E_TABLE_ONE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_ONE_TYPE, ETableOneClass))
-#define E_IS_TABLE_ONE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_ONE_TYPE))
-#define E_IS_TABLE_ONE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_ONE_TYPE))
-#define E_TABLE_ONE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TABLE_ONE_TYPE, ETableOneClass))
-
-typedef struct {
- ETableModel parent;
-
- ETableModel *source;
- void **data;
-} ETableOne;
-
-typedef struct {
- ETableModelClass parent_class;
-} ETableOneClass;
-
-GType e_table_one_get_type (void);
-
-ETableModel *e_table_one_new (ETableModel *source);
-void e_table_one_commit (ETableOne *one);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_ONE_H_ */
-
diff --git a/widgets/table/e-table-scrolled.c b/widgets/table/e-table-scrolled.c
deleted file mode 100644
index 1786148c78..0000000000
--- a/widgets/table/e-table-scrolled.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-scrolled.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdio.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gtk/gtksignal.h>
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include "e-table.h"
-#include "e-table-scrolled.h"
-#include "gal/util/e-i18n.h"
-
-#define COLUMN_HEADER_HEIGHT 16
-
-#define PARENT_TYPE gtk_scrolled_window_get_type ()
-
-static GtkObjectClass *parent_class;
-
-enum {
- PROP_0,
- PROP_TABLE
-};
-
-static void
-e_table_scrolled_init (GtkObject *object)
-{
- ETableScrolled *ets;
- GtkScrolledWindow *scrolled_window;
-
- ets = E_TABLE_SCROLLED (object);
- scrolled_window = GTK_SCROLLED_WINDOW (object);
-
- GTK_WIDGET_SET_FLAGS (ets, GTK_CAN_FOCUS);
-
- ets->table = g_object_new (E_TABLE_TYPE, NULL);
-
- gtk_scrolled_window_set_policy (scrolled_window, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (scrolled_window, GTK_SHADOW_IN);
-}
-
-static void
-e_table_scrolled_real_construct (ETableScrolled *ets)
-{
- gtk_container_add(GTK_CONTAINER(ets), GTK_WIDGET(ets->table));
-
- gtk_widget_show(GTK_WIDGET(ets->table));
-}
-
-ETableScrolled *e_table_scrolled_construct (ETableScrolled *ets,
- ETableModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state)
-{
- g_return_val_if_fail(ets != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_SCROLLED(ets), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec != NULL, NULL);
-
- e_table_construct(ets->table, etm, ete, spec, state);
-
- e_table_scrolled_real_construct(ets);
-
- return ets;
-}
-
-GtkWidget *e_table_scrolled_new (ETableModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state)
-{
- ETableScrolled *ets;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec != NULL, NULL);
-
- ets = E_TABLE_SCROLLED (gtk_widget_new (e_table_scrolled_get_type (),
- "hadjustment", NULL,
- "vadjustment", NULL,
- NULL));
-
- ets = e_table_scrolled_construct (ets, etm, ete, spec, state);
-
- return GTK_WIDGET (ets);
-}
-
-ETableScrolled *e_table_scrolled_construct_from_spec_file (ETableScrolled *ets,
- ETableModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn)
-{
- g_return_val_if_fail(ets != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_SCROLLED(ets), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- e_table_construct_from_spec_file(ets->table, etm, ete, spec_fn, state_fn);
-
- e_table_scrolled_real_construct(ets);
-
- return ets;
-}
-
-GtkWidget *e_table_scrolled_new_from_spec_file (ETableModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn)
-{
- ETableScrolled *ets;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- ets = E_TABLE_SCROLLED (gtk_widget_new (e_table_scrolled_get_type (),
- "hadjustment", NULL,
- "vadjustment", NULL,
- NULL));
-
- ets = e_table_scrolled_construct_from_spec_file (ets, etm, ete, spec_fn, state_fn);
-
- return GTK_WIDGET (ets);
-}
-
-ETable *
-e_table_scrolled_get_table (ETableScrolled *ets)
-{
- return ets->table;
-}
-
-static void
-ets_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableScrolled *ets = E_TABLE_SCROLLED (object);
-
- switch (prop_id){
- case PROP_TABLE:
- g_value_set_object (value, ets->table);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-/* Grab_focus handler for the scrolled ETable */
-static void
-ets_grab_focus (GtkWidget *widget)
-{
- ETableScrolled *ets;
-
- ets = E_TABLE_SCROLLED (widget);
-
- gtk_widget_grab_focus (GTK_WIDGET (ets->table));
-}
-
-/* Focus handler for the scrolled ETable */
-static gint
-ets_focus (GtkWidget *container, GtkDirectionType direction)
-{
- ETableScrolled *ets;
-
- ets = E_TABLE_SCROLLED (container);
-
- return gtk_widget_child_focus (GTK_WIDGET (ets->table), direction);
-}
-
-static void
-e_table_scrolled_class_init (ETableScrolledClass *class)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
- GtkContainerClass *container_class;
-
- object_class = (GObjectClass *) class;
- widget_class = (GtkWidgetClass *) class;
- container_class = (GtkContainerClass *) class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->get_property = ets_get_property;
-
- widget_class->grab_focus = ets_grab_focus;
-
- widget_class->focus = ets_focus;
-
- g_object_class_install_property (object_class, PROP_TABLE,
- g_param_spec_object ("table",
- _( "Table" ),
- _( "Table" ),
- E_TABLE_TYPE,
- G_PARAM_READABLE));
-}
-
-E_MAKE_TYPE(e_table_scrolled, "ETableScrolled", ETableScrolled, e_table_scrolled_class_init, e_table_scrolled_init, PARENT_TYPE)
-
diff --git a/widgets/table/e-table-scrolled.h b/widgets/table/e-table-scrolled.h
deleted file mode 100644
index 40de97e99e..0000000000
--- a/widgets/table/e-table-scrolled.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-scrolled.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SCROLLED_H_
-#define _E_TABLE_SCROLLED_H_
-
-#include <gtk/gtkscrolledwindow.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SCROLLED_TYPE (e_table_scrolled_get_type ())
-#define E_TABLE_SCROLLED(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SCROLLED_TYPE, ETableScrolled))
-#define E_TABLE_SCROLLED_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SCROLLED_TYPE, ETableScrolledClass))
-#define E_IS_TABLE_SCROLLED(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SCROLLED_TYPE))
-#define E_IS_TABLE_SCROLLED_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SCROLLED_TYPE))
-
-typedef struct {
- GtkScrolledWindow parent;
-
- ETable *table;
-} ETableScrolled;
-
-typedef struct {
- GtkScrolledWindowClass parent_class;
-} ETableScrolledClass;
-
-GType e_table_scrolled_get_type (void);
-
-ETableScrolled *e_table_scrolled_construct (ETableScrolled *ets,
- ETableModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-GtkWidget *e_table_scrolled_new (ETableModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-
-ETableScrolled *e_table_scrolled_construct_from_spec_file (ETableScrolled *ets,
- ETableModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-GtkWidget *e_table_scrolled_new_from_spec_file (ETableModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-
-ETable *e_table_scrolled_get_table (ETableScrolled *ets);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SCROLLED_H_ */
-
diff --git a/widgets/table/e-table-search.c b/widgets/table/e-table-search.c
deleted file mode 100644
index c0460e4524..0000000000
--- a/widgets/table/e-table-search.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-search.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-search.h"
-#include "gal/util/e-util.h"
-
-#include <string.h>
-
-#define d(x)
-
-d(static gint depth = 0);
-
-struct _ETableSearchPrivate {
- guint timeout_id;
-
- char *search_string;
- gunichar last_character;
-};
-
-static GObjectClass *e_table_search_parent_class;
-
-enum {
- SEARCH_SEARCH,
- SEARCH_ACCEPT,
- LAST_SIGNAL
-};
-
-static guint e_table_search_signals [LAST_SIGNAL] = { 0, };
-
-static gboolean
-e_table_search_search (ETableSearch *e_table_search, char *string, ETableSearchFlags flags)
-{
- gboolean ret_val;
- g_return_val_if_fail (e_table_search != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_SEARCH (e_table_search), FALSE);
-
- g_signal_emit (G_OBJECT (e_table_search),
- e_table_search_signals [SEARCH_SEARCH],
- 0, string, flags, &ret_val);
-
- return ret_val;
-}
-
-static void
-e_table_search_accept (ETableSearch *e_table_search)
-{
- g_return_if_fail (e_table_search != NULL);
- g_return_if_fail (E_IS_TABLE_SEARCH (e_table_search));
-
- g_signal_emit (G_OBJECT (e_table_search),
- e_table_search_signals [SEARCH_ACCEPT], 0);
-}
-
-static gboolean
-ets_accept (gpointer data)
-{
- ETableSearch *ets = data;
- e_table_search_accept (ets);
- g_free (ets->priv->search_string);
-
- ets->priv->timeout_id = 0;
- ets->priv->search_string = g_strdup ("");
- ets->priv->last_character = 0;
-
- return FALSE;
-}
-
-static void
-drop_timeout (ETableSearch *ets)
-{
- if (ets->priv->timeout_id) {
- g_source_remove (ets->priv->timeout_id);
- }
- ets->priv->timeout_id = 0;
-}
-
-static void
-add_timeout (ETableSearch *ets)
-{
- drop_timeout (ets);
- ets->priv->timeout_id = g_timeout_add (1000, ets_accept, ets);
-}
-
-static void
-e_table_search_finalize (GObject *object)
-{
- ETableSearch *ets = (ETableSearch *) object;
-
- drop_timeout (ets);
- g_free (ets->priv->search_string);
- g_free (ets->priv);
-
- if (e_table_search_parent_class->finalize)
- (*e_table_search_parent_class->finalize)(object);
-}
-
-static void
-e_table_search_class_init (GObjectClass *object_class)
-{
- ETableSearchClass *klass = E_TABLE_SEARCH_CLASS(object_class);
- e_table_search_parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = e_table_search_finalize;
-
- e_table_search_signals [SEARCH_SEARCH] =
- g_signal_new ("search",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableSearchClass, search),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_BOOLEAN__STRING_INT,
- G_TYPE_BOOLEAN, 2, G_TYPE_STRING, G_TYPE_INT);
-
- e_table_search_signals [SEARCH_ACCEPT] =
- g_signal_new ("accept",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableSearchClass, accept),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- klass->search = NULL;
- klass->accept = NULL;
-}
-
-static void
-e_table_search_init (ETableSearch *ets)
-{
- ets->priv = g_new (ETableSearchPrivate, 1);
-
- ets->priv->timeout_id = 0;
- ets->priv->search_string = g_strdup ("");
- ets->priv->last_character = 0;
-}
-
-
-E_MAKE_TYPE(e_table_search, "ETableSearch", ETableSearch, e_table_search_class_init, e_table_search_init, G_TYPE_OBJECT)
-
-ETableSearch *
-e_table_search_new (void)
-{
- ETableSearch *ets = g_object_new (E_TABLE_SEARCH_TYPE, NULL);
-
- return ets;
-}
-
-/**
- * e_table_search_column_count:
- * @e_table_search: The e-table-search to operate on
- *
- * Returns: the number of columns in the table search.
- */
-void
-e_table_search_input_character (ETableSearch *ets, gunichar character)
-{
- char character_utf8[7];
- char *temp_string;
-
- g_return_if_fail (ets != NULL);
- g_return_if_fail (E_IS_TABLE_SEARCH (ets));
-
- character_utf8 [g_unichar_to_utf8 (character, character_utf8)] = 0;
-
- temp_string = g_strdup_printf ("%s%s", ets->priv->search_string, character_utf8);
- if (e_table_search_search (ets, temp_string,
- ets->priv->last_character != 0 ? E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST : 0)) {
- g_free (ets->priv->search_string);
- ets->priv->search_string = temp_string;
- add_timeout (ets);
- ets->priv->last_character = character;
- return;
- } else {
- g_free (temp_string);
- }
-
- if (character == ets->priv->last_character) {
- if (ets->priv->search_string && e_table_search_search (ets, ets->priv->search_string, 0)) {
- add_timeout (ets);
- }
- }
-}
-
-gboolean
-e_table_search_backspace (ETableSearch *ets)
-{
- char *end;
-
- g_return_val_if_fail (ets != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_SEARCH (ets), FALSE);
-
- if (!ets->priv->search_string ||
- !*ets->priv->search_string)
- return FALSE;
-
- end = ets->priv->search_string + strlen (ets->priv->search_string);
- end = g_utf8_prev_char (end);
- *end = 0;
- ets->priv->last_character = 0;
- add_timeout (ets);
- return TRUE;
-}
diff --git a/widgets/table/e-table-search.h b/widgets/table/e-table-search.h
deleted file mode 100644
index b3cdd9ff41..0000000000
--- a/widgets/table/e-table-search.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-search.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SEARCH_H_
-#define _E_TABLE_SEARCH_H_
-
-#include <gtk/gtkobject.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SEARCH_TYPE (e_table_search_get_type ())
-#define E_TABLE_SEARCH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SEARCH_TYPE, ETableSearch))
-#define E_TABLE_SEARCH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SEARCH_TYPE, ETableSearchClass))
-#define E_IS_TABLE_SEARCH(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SEARCH_TYPE))
-#define E_IS_TABLE_SEARCH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SEARCH_TYPE))
-#define E_TABLE_SEARCH_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_SEARCH_TYPE, ETableSearchClass))
-
-typedef struct _ETableSearchPrivate ETableSearchPrivate;
-
-typedef enum {
- E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST = 1 << 0
-} ETableSearchFlags;
-
-typedef struct {
- GObject base;
-
- ETableSearchPrivate *priv;
-} ETableSearch;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Signals
- */
- gboolean (*search) (ETableSearch *ets, char *string /* utf8 */, ETableSearchFlags flags);
- void (*accept) (ETableSearch *ets);
-} ETableSearchClass;
-
-GType e_table_search_get_type (void);
-ETableSearch *e_table_search_new (void);
-
-/**/
-void e_table_search_input_character (ETableSearch *e_table_search,
- gunichar character);
-gboolean e_table_search_backspace (ETableSearch *e_table_search);
-void e_table_search_cancel (ETableSearch *e_table_search);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SEARCH_H_ */
diff --git a/widgets/table/e-table-selection-model.c b/widgets/table/e-table-selection-model.c
deleted file mode 100644
index 14edf3d6de..0000000000
--- a/widgets/table/e-table-selection-model.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-selection-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-selection-model.h"
-
-#include <string.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-
-#define PARENT_TYPE e_selection_model_array_get_type ()
-
-static ESelectionModelArray *parent_class;
-
-static gint etsm_get_row_count (ESelectionModelArray *esm);
-
-enum {
- PROP_0,
- PROP_MODEL,
- PROP_HEADER
-};
-
-static void
-save_to_hash(int model_row, gpointer closure)
-{
- ETableSelectionModel *etsm = closure;
- gchar *key = e_table_model_get_save_id(etsm->model, model_row);
-
- g_hash_table_insert(etsm->hash, key, key);
-}
-
-static void
-free_key(gpointer key, gpointer value, gpointer closure)
-{
- g_free(key);
-}
-
-static void
-free_hash(ETableSelectionModel *etsm)
-{
- if (etsm->hash) {
- g_hash_table_foreach(etsm->hash, free_key, NULL);
- g_hash_table_destroy(etsm->hash);
- etsm->hash = NULL;
- }
- if (etsm->cursor_id)
- g_free(etsm->cursor_id);
- etsm->cursor_id = NULL;
-}
-
-static void
-model_pre_change (ETableModel *etm, ETableSelectionModel *etsm)
-{
- free_hash(etsm);
-
- if (etsm->model && e_table_model_has_save_id (etsm->model)) {
- gint cursor_row;
-
- etsm->hash = g_hash_table_new(g_str_hash, g_str_equal);
- e_selection_model_foreach(E_SELECTION_MODEL(etsm), save_to_hash, etsm);
-
- g_object_get(etsm,
- "cursor_row", &cursor_row,
- NULL);
- g_free (etsm->cursor_id);
- if (cursor_row != -1)
- etsm->cursor_id = e_table_model_get_save_id(etm, cursor_row);
- else
- etsm->cursor_id = NULL;
- }
-}
-
-static gint
-model_changed_idle(ETableSelectionModel *etsm)
-{
- ETableModel *etm = etsm->model;
-
- e_selection_model_clear(E_SELECTION_MODEL(etsm));
-
- if (etsm->cursor_id && etm && e_table_model_has_save_id(etm)) {
- int row_count = e_table_model_row_count(etm);
- int cursor_row = -1;
- int cursor_col = -1;
- int i;
- e_selection_model_array_confirm_row_count(E_SELECTION_MODEL_ARRAY(etsm));
- for (i = 0; i < row_count; i++) {
- char *save_id = e_table_model_get_save_id(etm, i);
- if (g_hash_table_lookup(etsm->hash, save_id))
- e_selection_model_change_one_row(E_SELECTION_MODEL(etsm), i, TRUE);
-
- if (etsm->cursor_id && !strcmp(etsm->cursor_id, save_id)) {
- cursor_row = i;
- cursor_col = e_selection_model_cursor_col(E_SELECTION_MODEL(etsm));
- if (cursor_col == -1) {
- if (etsm->eth) {
- cursor_col = e_table_header_prioritized_column (etsm->eth);
- } else
- cursor_col = 0;
- }
- e_selection_model_change_cursor(E_SELECTION_MODEL(etsm), cursor_row, cursor_col);
- g_free(etsm->cursor_id);
- etsm->cursor_id = NULL;
- }
- g_free(save_id);
- }
- free_hash(etsm);
- e_selection_model_cursor_changed (E_SELECTION_MODEL(etsm), cursor_row, cursor_col);
- e_selection_model_selection_changed (E_SELECTION_MODEL(etsm));
- }
- etsm->model_changed_idle_id = 0;
- return FALSE;
-}
-
-static void
-model_changed(ETableModel *etm, ETableSelectionModel *etsm)
-{
- e_selection_model_clear(E_SELECTION_MODEL(etsm));
- if (!etsm->model_changed_idle_id && etm && e_table_model_has_save_id(etm)) {
- etsm->model_changed_idle_id = g_idle_add_full(G_PRIORITY_HIGH, (GSourceFunc) model_changed_idle, etsm, NULL);
- }
-}
-
-static void
-model_row_changed(ETableModel *etm, int row, ETableSelectionModel *etsm)
-{
- free_hash(etsm);
-}
-
-static void
-model_cell_changed(ETableModel *etm, int col, int row, ETableSelectionModel *etsm)
-{
- free_hash(etsm);
-}
-
-#if 1
-static void
-model_rows_inserted(ETableModel *etm, int row, int count, ETableSelectionModel *etsm)
-{
- e_selection_model_array_insert_rows(E_SELECTION_MODEL_ARRAY(etsm), row, count);
- free_hash(etsm);
-}
-
-static void
-model_rows_deleted(ETableModel *etm, int row, int count, ETableSelectionModel *etsm)
-{
- e_selection_model_array_delete_rows(E_SELECTION_MODEL_ARRAY(etsm), row, count);
- free_hash(etsm);
-}
-
-#else
-
-static void
-model_rows_inserted(ETableModel *etm, int row, int count, ETableSelectionModel *etsm)
-{
- model_changed(etm, etsm);
-}
-
-static void
-model_rows_deleted(ETableModel *etm, int row, int count, ETableSelectionModel *etsm)
-{
- model_changed(etm, etsm);
-}
-#endif
-
-inline static void
-add_model(ETableSelectionModel *etsm, ETableModel *model)
-{
- etsm->model = model;
- if (model) {
- g_object_ref(model);
- etsm->model_pre_change_id = g_signal_connect(G_OBJECT(model), "model_pre_change",
- G_CALLBACK(model_pre_change), etsm);
- etsm->model_changed_id = g_signal_connect(G_OBJECT(model), "model_changed",
- G_CALLBACK(model_changed), etsm);
- etsm->model_row_changed_id = g_signal_connect(G_OBJECT(model), "model_row_changed",
- G_CALLBACK(model_row_changed), etsm);
- etsm->model_cell_changed_id = g_signal_connect(G_OBJECT(model), "model_cell_changed",
- G_CALLBACK(model_cell_changed), etsm);
- etsm->model_rows_inserted_id = g_signal_connect(G_OBJECT(model), "model_rows_inserted",
- G_CALLBACK(model_rows_inserted), etsm);
- etsm->model_rows_deleted_id = g_signal_connect(G_OBJECT(model), "model_rows_deleted",
- G_CALLBACK(model_rows_deleted), etsm);
- }
- e_selection_model_array_confirm_row_count(E_SELECTION_MODEL_ARRAY(etsm));
-}
-
-inline static void
-drop_model(ETableSelectionModel *etsm)
-{
- if (etsm->model) {
- g_signal_handler_disconnect(G_OBJECT(etsm->model),
- etsm->model_pre_change_id);
- g_signal_handler_disconnect(G_OBJECT(etsm->model),
- etsm->model_changed_id);
- g_signal_handler_disconnect(G_OBJECT(etsm->model),
- etsm->model_row_changed_id);
- g_signal_handler_disconnect(G_OBJECT(etsm->model),
- etsm->model_cell_changed_id);
- g_signal_handler_disconnect(G_OBJECT(etsm->model),
- etsm->model_rows_inserted_id);
- g_signal_handler_disconnect(G_OBJECT(etsm->model),
- etsm->model_rows_deleted_id);
-
- g_object_unref(etsm->model);
- }
- etsm->model = NULL;
-}
-
-static void
-etsm_dispose (GObject *object)
-{
- ETableSelectionModel *etsm;
-
- etsm = E_TABLE_SELECTION_MODEL (object);
-
- if (etsm->model_changed_idle_id)
- g_source_remove (etsm->model_changed_idle_id);
- etsm->model_changed_idle_id = 0;
-
- drop_model(etsm);
- free_hash(etsm);
-
- if (G_OBJECT_CLASS(parent_class)->dispose)
- G_OBJECT_CLASS(parent_class)->dispose (object);
-}
-
-static void
-etsm_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableSelectionModel *etsm = E_TABLE_SELECTION_MODEL (object);
-
- switch (prop_id){
- case PROP_MODEL:
- g_value_set_object (value, etsm->model);
- break;
- case PROP_HEADER:
- g_value_set_object (value, etsm->eth);
- break;
- }
-}
-
-static void
-etsm_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ETableSelectionModel *etsm = E_TABLE_SELECTION_MODEL (object);
-
- switch (prop_id){
- case PROP_MODEL:
- drop_model(etsm);
- add_model(etsm, g_value_get_object (value) ? E_TABLE_MODEL(g_value_get_object (value)) : NULL);
- break;
- case PROP_HEADER:
- etsm->eth = E_TABLE_HEADER (g_value_get_object (value));
- break;
- }
-}
-
-static void
-e_table_selection_model_init (ETableSelectionModel *selection)
-{
- selection->model = NULL;
- selection->hash = NULL;
- selection->cursor_id = NULL;
-
- selection->model_changed_idle_id = 0;
-}
-
-static void
-e_table_selection_model_class_init (ETableSelectionModelClass *klass)
-{
- GObjectClass *object_class;
- ESelectionModelArrayClass *esma_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS(klass);
- esma_class = E_SELECTION_MODEL_ARRAY_CLASS(klass);
-
- object_class->dispose = etsm_dispose;
- object_class->get_property = etsm_get_property;
- object_class->set_property = etsm_set_property;
-
- esma_class->get_row_count = etsm_get_row_count;
-
- g_object_class_install_property (object_class, PROP_MODEL,
- g_param_spec_object ("model",
- _("Model"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_MODEL_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_HEADER,
- g_param_spec_object ("header",
- _("Header"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_HEADER_TYPE,
- G_PARAM_READWRITE));
-}
-
-E_MAKE_TYPE(e_table_selection_model, "ETableSelectionModel", ETableSelectionModel,
- e_table_selection_model_class_init, e_table_selection_model_init, PARENT_TYPE)
-
-/**
- * e_table_selection_model_new
- *
- * This routine creates a new #ETableSelectionModel.
- *
- * Returns: The new #ETableSelectionModel.
- */
-ETableSelectionModel *
-e_table_selection_model_new (void)
-{
- return g_object_new (E_TABLE_SELECTION_MODEL_TYPE, NULL);
-}
-
-static gint
-etsm_get_row_count (ESelectionModelArray *esma)
-{
- ETableSelectionModel *etsm = E_TABLE_SELECTION_MODEL(esma);
-
- if (etsm->model)
- return e_table_model_row_count (etsm->model);
- else
- return 0;
-}
diff --git a/widgets/table/e-table-selection-model.h b/widgets/table/e-table-selection-model.h
deleted file mode 100644
index f3889d6f1b..0000000000
--- a/widgets/table/e-table-selection-model.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-selection-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SELECTION_MODEL_H_
-#define _E_TABLE_SELECTION_MODEL_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/widgets/e-selection-model-array.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-header.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_TABLE_SELECTION_MODEL_TYPE (e_table_selection_model_get_type ())
-#define E_TABLE_SELECTION_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SELECTION_MODEL_TYPE, ETableSelectionModel))
-#define E_TABLE_SELECTION_MODEL_CLASS(k) (G_TYPE-CHECK_CLASS_CAST((k), E_TABLE_SELECTION_MODEL_TYPE, ETableSelectionModelClass))
-#define E_IS_TABLE_SELECTION_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SELECTION_MODEL_TYPE))
-#define E_IS_TABLE_SELECTION_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SELECTION_MODEL_TYPE))
-
-typedef struct {
- ESelectionModelArray base;
-
- ETableModel *model;
- ETableHeader *eth;
-
- guint model_pre_change_id;
- guint model_changed_id;
- guint model_row_changed_id;
- guint model_cell_changed_id;
- guint model_rows_inserted_id;
- guint model_rows_deleted_id;
-
- guint model_changed_idle_id;
-
- guint selection_model_changed : 1;
- guint group_info_changed : 1;
-
- GHashTable *hash;
- char *cursor_id;
-} ETableSelectionModel;
-
-typedef struct {
- ESelectionModelArrayClass parent_class;
-} ETableSelectionModelClass;
-
-GType e_table_selection_model_get_type (void);
-ETableSelectionModel *e_table_selection_model_new (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _E_TABLE_SELECTION_MODEL_H_ */
diff --git a/widgets/table/e-table-simple.c b/widgets/table/e-table-simple.c
deleted file mode 100644
index b7cf8f66be..0000000000
--- a/widgets/table/e-table-simple.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-simple.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel.ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-table-simple.h"
-#include "gal/util/e-util.h"
-
-static int
-simple_column_count (ETableModel *etm)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->col_count)
- return simple->col_count (etm, simple->data);
- else
- return 0;
-}
-
-static int
-simple_row_count (ETableModel *etm)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->row_count)
- return simple->row_count (etm, simple->data);
- else
- return 0;
-}
-
-static void
-simple_append_row (ETableModel *etm, ETableModel *source, int row)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->append_row)
- simple->append_row (etm, source, row, simple->data);
-}
-
-static void *
-simple_value_at (ETableModel *etm, int col, int row)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->value_at)
- return simple->value_at (etm, col, row, simple->data);
- else
- return NULL;
-}
-
-static void
-simple_set_value_at (ETableModel *etm, int col, int row, const void *val)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->set_value_at)
- simple->set_value_at (etm, col, row, val, simple->data);
-}
-
-static gboolean
-simple_is_cell_editable (ETableModel *etm, int col, int row)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->is_cell_editable)
- return simple->is_cell_editable (etm, col, row, simple->data);
- else
- return FALSE;
-}
-
-static gboolean
-simple_has_save_id (ETableModel *etm)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->has_save_id)
- return simple->has_save_id (etm, simple->data);
- else
- return FALSE;
-}
-
-static char *
-simple_get_save_id (ETableModel *etm, int row)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->get_save_id)
- return simple->get_save_id (etm, row, simple->data);
- else
- return NULL;
-}
-
-/* The default for simple_duplicate_value is to return the raw value. */
-static void *
-simple_duplicate_value (ETableModel *etm, int col, const void *value)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->duplicate_value)
- return simple->duplicate_value (etm, col, value, simple->data);
- else
- return (void *)value;
-}
-
-static void
-simple_free_value (ETableModel *etm, int col, void *value)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->free_value)
- simple->free_value (etm, col, value, simple->data);
-}
-
-static void *
-simple_initialize_value (ETableModel *etm, int col)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->initialize_value)
- return simple->initialize_value (etm, col, simple->data);
- else
- return NULL;
-}
-
-static gboolean
-simple_value_is_empty (ETableModel *etm, int col, const void *value)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->value_is_empty)
- return simple->value_is_empty (etm, col, value, simple->data);
- else
- return FALSE;
-}
-
-static char *
-simple_value_to_string (ETableModel *etm, int col, const void *value)
-{
- ETableSimple *simple = E_TABLE_SIMPLE(etm);
-
- if (simple->value_to_string)
- return simple->value_to_string (etm, col, value, simple->data);
- else
- return g_strdup ("");
-}
-
-static void
-e_table_simple_class_init (GObjectClass *object_class)
-{
- ETableModelClass *model_class = (ETableModelClass *) object_class;
-
- model_class->column_count = simple_column_count;
- model_class->row_count = simple_row_count;
- model_class->append_row = simple_append_row;
-
- model_class->value_at = simple_value_at;
- model_class->set_value_at = simple_set_value_at;
- model_class->is_cell_editable = simple_is_cell_editable;
-
- model_class->has_save_id = simple_has_save_id;
- model_class->get_save_id = simple_get_save_id;
-
- model_class->duplicate_value = simple_duplicate_value;
- model_class->free_value = simple_free_value;
- model_class->initialize_value = simple_initialize_value;
- model_class->value_is_empty = simple_value_is_empty;
- model_class->value_to_string = simple_value_to_string;
-}
-
-E_MAKE_TYPE(e_table_simple, "ETableSimple", ETableSimple, e_table_simple_class_init, NULL, E_TABLE_MODEL_TYPE)
-
-/**
- * e_table_simple_new:
- * @col_count:
- * @row_count:
- * @value_at:
- * @set_value_at:
- * @is_cell_editable:
- * @duplicate_value:
- * @free_value:
- * @initialize_value:
- * @value_is_empty:
- * @value_to_string:
- * @data: closure pointer.
- *
- * This initializes a new ETableSimpleModel object. ETableSimpleModel is
- * an implementaiton of the abstract class ETableModel. The ETableSimpleModel
- * is designed to allow people to easily create ETableModels without having
- * to create a new GtkType derived from ETableModel every time they need one.
- *
- * Instead, ETableSimpleModel uses a setup based in callback functions, every
- * callback function signature mimics the signature of each ETableModel method
- * and passes the extra @data pointer to each one of the method to provide them
- * with any context they might want to use.
- *
- * Returns: An ETableSimpleModel object (which is also an ETableModel
- * object).
- */
-ETableModel *
-e_table_simple_new (ETableSimpleColumnCountFn col_count,
- ETableSimpleRowCountFn row_count,
- ETableSimpleAppendRowFn append_row,
-
- ETableSimpleValueAtFn value_at,
- ETableSimpleSetValueAtFn set_value_at,
- ETableSimpleIsCellEditableFn is_cell_editable,
-
- ETableSimpleHasSaveIdFn has_save_id,
- ETableSimpleGetSaveIdFn get_save_id,
-
- ETableSimpleDuplicateValueFn duplicate_value,
- ETableSimpleFreeValueFn free_value,
- ETableSimpleInitializeValueFn initialize_value,
- ETableSimpleValueIsEmptyFn value_is_empty,
- ETableSimpleValueToStringFn value_to_string,
- void *data)
-{
- ETableSimple *et = g_object_new (E_TABLE_SIMPLE_TYPE, NULL);
-
- et->col_count = col_count;
- et->row_count = row_count;
- et->append_row = append_row;
-
- et->value_at = value_at;
- et->set_value_at = set_value_at;
- et->is_cell_editable = is_cell_editable;
-
- et->has_save_id = has_save_id;
- et->get_save_id = get_save_id;
-
- et->duplicate_value = duplicate_value;
- et->free_value = free_value;
- et->initialize_value = initialize_value;
- et->value_is_empty = value_is_empty;
- et->value_to_string = value_to_string;
- et->data = data;
-
- return (ETableModel *) et;
-}
-
-void *
-e_table_simple_string_duplicate_value (ETableModel *etm, int col, const void *val, void *data)
-{
- return g_strdup (val);
-}
-
-void
-e_table_simple_string_free_value (ETableModel *etm, int col, void *val, void *data)
-{
- g_free (val);
-}
-
-void *
-e_table_simple_string_initialize_value (ETableModel *etm, int col, void *data)
-{
- return g_strdup ("");
-}
-
-gboolean
-e_table_simple_string_value_is_empty (ETableModel *etm, int col, const void *val, void *data)
-{
- return !(val && * (char *) val);
-}
-
-char *
-e_table_simple_string_value_to_string (ETableModel *etm, int col, const void *val, void *data)
-{
- return g_strdup (val);
-}
diff --git a/widgets/table/e-table-simple.h b/widgets/table/e-table-simple.h
deleted file mode 100644
index 39800c3118..0000000000
--- a/widgets/table/e-table-simple.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-simple.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SIMPLE_H_
-#define _E_TABLE_SIMPLE_H_
-
-#include <gal/e-table/e-table-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SIMPLE_TYPE (e_table_simple_get_type ())
-#define E_TABLE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SIMPLE_TYPE, ETableSimple))
-#define E_TABLE_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SIMPLE_TYPE, ETableSimpleClass))
-#define E_IS_TABLE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SIMPLE_TYPE))
-#define E_IS_TABLE_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SIMPLE_TYPE))
-#define E_TABLE_SIMPLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_SIMPLE_TYPE, ETableSimpleClass))
-
-typedef int (*ETableSimpleColumnCountFn) (ETableModel *etm, void *data);
-typedef int (*ETableSimpleRowCountFn) (ETableModel *etm, void *data);
-typedef void (*ETableSimpleAppendRowFn) (ETableModel *etm, ETableModel *model, int row, void *data);
-
-typedef void *(*ETableSimpleValueAtFn) (ETableModel *etm, int col, int row, void *data);
-typedef void (*ETableSimpleSetValueAtFn) (ETableModel *etm, int col, int row, const void *val, void *data);
-typedef gboolean (*ETableSimpleIsCellEditableFn) (ETableModel *etm, int col, int row, void *data);
-
-typedef gboolean (*ETableSimpleHasSaveIdFn) (ETableModel *etm, void *data);
-typedef char *(*ETableSimpleGetSaveIdFn) (ETableModel *etm, int row, void *data);
-
-typedef void *(*ETableSimpleDuplicateValueFn) (ETableModel *etm, int col, const void *val, void *data);
-typedef void (*ETableSimpleFreeValueFn) (ETableModel *etm, int col, void *val, void *data);
-typedef void *(*ETableSimpleInitializeValueFn) (ETableModel *etm, int col, void *data);
-typedef gboolean (*ETableSimpleValueIsEmptyFn) (ETableModel *etm, int col, const void *val, void *data);
-typedef char *(*ETableSimpleValueToStringFn) (ETableModel *etm, int col, const void *val, void *data);
-
-typedef struct {
- ETableModel parent;
-
- ETableSimpleColumnCountFn col_count;
- ETableSimpleRowCountFn row_count;
- ETableSimpleAppendRowFn append_row;
-
- ETableSimpleValueAtFn value_at;
- ETableSimpleSetValueAtFn set_value_at;
- ETableSimpleIsCellEditableFn is_cell_editable;
-
- ETableSimpleHasSaveIdFn has_save_id;
- ETableSimpleGetSaveIdFn get_save_id;
-
- ETableSimpleDuplicateValueFn duplicate_value;
- ETableSimpleFreeValueFn free_value;
- ETableSimpleInitializeValueFn initialize_value;
- ETableSimpleValueIsEmptyFn value_is_empty;
- ETableSimpleValueToStringFn value_to_string;
- void *data;
-} ETableSimple;
-
-typedef struct {
- ETableModelClass parent_class;
-} ETableSimpleClass;
-
-GType e_table_simple_get_type (void);
-ETableModel *e_table_simple_new (ETableSimpleColumnCountFn col_count,
- ETableSimpleRowCountFn row_count,
- ETableSimpleAppendRowFn append_row,
- ETableSimpleValueAtFn value_at,
- ETableSimpleSetValueAtFn set_value_at,
- ETableSimpleIsCellEditableFn is_cell_editable,
- ETableSimpleHasSaveIdFn has_save_id,
- ETableSimpleGetSaveIdFn get_save_id,
- ETableSimpleDuplicateValueFn duplicate_value,
- ETableSimpleFreeValueFn free_value,
- ETableSimpleInitializeValueFn initialize_value,
- ETableSimpleValueIsEmptyFn value_is_empty,
- ETableSimpleValueToStringFn value_to_string,
- void *data);
-
-
-/* Helper functions for if your values are all just strings. */
-void *e_table_simple_string_duplicate_value (ETableModel *etm,
- int col,
- const void *val,
- void *data);
-void e_table_simple_string_free_value (ETableModel *etm,
- int col,
- void *val,
- void *data);
-void *e_table_simple_string_initialize_value (ETableModel *etm,
- int col,
- void *data);
-gboolean e_table_simple_string_value_is_empty (ETableModel *etm,
- int col,
- const void *val,
- void *data);
-char *e_table_simple_string_value_to_string (ETableModel *etm,
- int col,
- const void *val,
- void *data);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SIMPLE_H_ */
diff --git a/widgets/table/e-table-size-test.c b/widgets/table/e-table-size-test.c
deleted file mode 100644
index 05a4245899..0000000000
--- a/widgets/table/e-table-size-test.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-size-test.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <gnome.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include "gal/e-util/e-cursors.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 "table-test.h"
-
-/*
- * One way in which we make it simpler to build an ETableModel is through
- * the ETableSimple class. Instead of creating your own ETableModel
- * class, you simply create a new object of the ETableSimple class. You
- * give it a bunch of functions that act as callbacks.
- *
- * You also get to pass a void * to ETableSimple and it gets passed to
- * your callbacks. This would be for having multiple models of the same
- * type. This is just an example though, so we statically define all the
- * data and ignore the void *data parameter.
- *
- * In our example we will be creating a table model with 6 columns and 10
- * rows. This corresponds to having 6 different types of information and
- * 10 different sets of data in our database.
- *
- * The headers will be hard coded, as will be the example data.
- *
- */
-
-/*
- * There are two different meanings to the word "column". The first is
- * the model column. A model column corresponds to a specific type of
- * data. This is very much like the usage in a database table where a
- * column is a field in the database.
- *
- * The second type of column is a view column. A view column
- * corresponds to a visually displayed column. Each view column
- * corresponds to a specific model column, though a model column may
- * have any number of view columns associated with it, from zero to
- * greater than one.
- *
- * Also, a view column doesn't necessarily depend on only one model
- * column. In some cases, the view column renderer can be given a
- * reference to another column to get extra information about its
- * display.
-*/
-
-#define ROWS 5000
-#define COLS 4
-
-#define IMPORTANCE_COLUMN 4
-#define COLOR_COLUMN 5
-
-/*
- * 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 "<ETableSpecification> \
- <columns-shown> \
- <column> 0 </column> \
- <column> 4 </column> \
- <column> 1 </column> \
- <column> 2 </column> \
- <column> 3 </column> \
- </columns-shown> \
- <grouping> <leaf column=\"1\" ascending=\"true\"/> </grouping> \
-</ETableSpecification>"
-
-char *headers [COLS] = {
- "Email",
- "Full Name",
- "Address",
- "Phone"
-};
-
-/*
- * Virtual Column list:
- * 0 Email
- * 1 Full Name
- * 2 Address
- * 3 Phone
- */
-
-/*
- * ETableSimple callbacks
- * These are the callbacks that define the behavior of our custom model.
- */
-
-/*
- * Since our model is a constant size, we can just return its size in
- * the column and row count fields.
- */
-
-/* This function returns the number of columns in our ETableModel. */
-static int
-my_col_count (ETableModel *etc, void *data)
-{
- return COLS;
-}
-
-/* This function returns the number of rows in our ETableModel. */
-static int
-my_row_count (ETableModel *etc, void *data)
-{
- return ROWS;
-}
-
-/* This function returns the value at a particular point in our ETableModel. */
-static void *
-my_value_at (ETableModel *etc, int col, int row, void *data)
-{
- static guchar t[] = {'A', 0xc3, 0x84, 0xc3, 0x95, 0xc3, 0x94, 0xc3, 0xb5, 0x00};
-
-#if 0
- if (col == 1) return "toshok@ximian.com";
-#else
- if (col == 1) return t;
-#endif
- else if (col == 2) return "Chris Toshok";
- else if (col == 3) return "43 Vicksburg, SF";
- else if (col == 4) return "415-867-5309";
- else return NULL;
-}
-
-/* This function sets the value at a particular point in our ETableModel. */
-static void
-my_set_value_at (ETableModel *etc, int col, int row, const void *val, void *data)
-{
-}
-
-/* This function returns whether a particular cell is editable. */
-static gboolean
-my_is_cell_editable (ETableModel *etc, int col, int row, void *data)
-{
- return FALSE;
-}
-
-/* This function duplicates the value passed to it. */
-static void *
-my_duplicate_value (ETableModel *etc, int col, const void *value, void *data)
-{
- return g_strdup (value);
-}
-
-/* This function frees the value passed to it. */
-static void
-my_free_value (ETableModel *etc, int col, void *value, void *data)
-{
- g_free (value);
-}
-
-/* This function creates an empty value. */
-static void *
-my_initialize_value (ETableModel *etc, int col, void *data)
-{
- return g_strdup ("");
-}
-
-/* This function reports if a value is empty. */
-static gboolean
-my_value_is_empty (ETableModel *etc, int col, const void *value, void *data)
-{
- return !(value && *(char *)value);
-}
-
-/* This function reports if a value is empty. */
-static char *
-my_value_to_string (ETableModel *etc, int col, const void *value, void *data)
-{
- return g_strdup(value);
-}
-
-/* We create a window containing our new table. */
-static void
-create_table (void)
-{
- GtkWidget *e_table, *window, *frame;
- ECell *cell_left_just;
- ETableHeader *e_table_header;
- ETableModel *e_table_model = NULL;
- int i;
-
- /* Next we create our model. This uses the functions we defined
- earlier. */
- e_table_model = e_table_simple_new (
- my_col_count, my_row_count, my_value_at,
- my_set_value_at, my_is_cell_editable,
- my_duplicate_value, my_free_value,
- my_initialize_value, my_value_is_empty,
- my_value_to_string,
- NULL);
- /*
- * 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, 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 < COLS; i++) {
- /* Create the column. */
- ETableCol *ecol = e_table_col_new (
- i, headers [i],
- 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 a window for our new table. This window
- * will get shown and the person will be able to test their
- * item.
- */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- /* This frame is simply to get a bevel around our table. */
- frame = gtk_frame_new (NULL);
-
- /*
- * 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 (e_table_header, e_table_model, INITIAL_SPEC);
-
- /* Build the gtk widget hierarchy. */
- gtk_container_add (GTK_CONTAINER (frame), e_table);
- gtk_container_add (GTK_CONTAINER (window), frame);
-
- /* Size the initial window. */
- gtk_widget_set_usize (window, 300, 200);
-
- /* Show it all. */
- gtk_widget_show_all (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_colormap (gdk_rgb_get_cmap ());
-
- create_table ();
-
- gtk_main ();
-
- e_cursors_shutdown ();
- return 0;
-}
-
diff --git a/widgets/table/e-table-sort-info.c b/widgets/table/e-table-sort-info.c
deleted file mode 100644
index ba8f9050ab..0000000000
--- a/widgets/table/e-table-sort-info.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sort-info.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-table-sort-info.h"
-
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include <string.h>
-
-#define ETM_CLASS(e) (E_TABLE_SORT_INFO_GET_CLASS (e))
-
-static GObjectClass *e_table_sort_info_parent_class;
-
-enum {
- SORT_INFO_CHANGED,
- GROUP_INFO_CHANGED,
- LAST_SIGNAL
-};
-
-static guint e_table_sort_info_signals [LAST_SIGNAL] = { 0, };
-
-static void
-etsi_finalize (GObject *object)
-{
- ETableSortInfo *etsi = E_TABLE_SORT_INFO (object);
-
- if (etsi->groupings)
- g_free(etsi->groupings);
- etsi->groupings = NULL;
-
- if (etsi->sortings)
- g_free(etsi->sortings);
- etsi->sortings = NULL;
-
- G_OBJECT_CLASS (e_table_sort_info_parent_class)->finalize (object);
-}
-
-static void
-e_table_sort_info_init (ETableSortInfo *info)
-{
- info->group_count = 0;
- info->groupings = NULL;
- info->sort_count = 0;
- info->sortings = NULL;
- info->frozen = 0;
- info->sort_info_changed = 0;
- info->group_info_changed = 0;
- info->can_group = 1;
-}
-
-static void
-e_table_sort_info_class_init (ETableSortInfoClass *klass)
-{
- GObjectClass * object_class = G_OBJECT_CLASS (klass);
-
- e_table_sort_info_parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = etsi_finalize;
-
- e_table_sort_info_signals [SORT_INFO_CHANGED] =
- g_signal_new ("sort_info_changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableSortInfoClass, sort_info_changed),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- e_table_sort_info_signals [GROUP_INFO_CHANGED] =
- g_signal_new ("group_info_changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableSortInfoClass, group_info_changed),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- klass->sort_info_changed = NULL;
- klass->group_info_changed = NULL;
-}
-
-E_MAKE_TYPE(e_table_sort_info, "ETableSortInfo", ETableSortInfo,
- e_table_sort_info_class_init, e_table_sort_info_init, G_TYPE_OBJECT)
-
-static void
-e_table_sort_info_sort_info_changed (ETableSortInfo *info)
-{
- g_return_if_fail (info != NULL);
- g_return_if_fail (E_IS_TABLE_SORT_INFO (info));
-
- if (info->frozen) {
- info->sort_info_changed = 1;
- } else {
- g_signal_emit (G_OBJECT (info), e_table_sort_info_signals [SORT_INFO_CHANGED], 0);
- }
-}
-
-static void
-e_table_sort_info_group_info_changed (ETableSortInfo *info)
-{
- g_return_if_fail (info != NULL);
- g_return_if_fail (E_IS_TABLE_SORT_INFO (info));
-
- if (info->frozen) {
- info->group_info_changed = 1;
- } else {
- g_signal_emit (G_OBJECT (info), e_table_sort_info_signals [GROUP_INFO_CHANGED], 0);
- }
-}
-
-/**
- * e_table_sort_info_freeze:
- * @info: The ETableSortInfo object
- *
- * This functions allows the programmer to cluster various changes to the
- * ETableSortInfo (grouping and sorting) without having the object emit
- * "group_info_changed" or "sort_info_changed" signals on each change.
- *
- * To thaw, invoke the e_table_sort_info_thaw() function, which will
- * trigger any signals that might have been queued.
- */
-void
-e_table_sort_info_freeze (ETableSortInfo *info)
-{
- info->frozen++;
-}
-
-/**
- * e_table_sort_info_thaw:
- * @info: The ETableSortInfo object
- *
- * This functions allows the programmer to cluster various changes to the
- * ETableSortInfo (grouping and sorting) without having the object emit
- * "group_info_changed" or "sort_info_changed" signals on each change.
- *
- * This function will flush any pending signals that might be emited by
- * this object.
- */
-void
-e_table_sort_info_thaw (ETableSortInfo *info)
-{
- info->frozen--;
- if (info->frozen != 0)
- return;
-
- if (info->sort_info_changed) {
- info->sort_info_changed = 0;
- e_table_sort_info_sort_info_changed(info);
- }
- if (info->group_info_changed) {
- info->group_info_changed = 0;
- e_table_sort_info_group_info_changed(info);
- }
-}
-
-/**
- * e_table_sort_info_grouping_get_count:
- * @info: The ETableSortInfo object
- *
- * Returns: the number of grouping criteria in the object.
- */
-guint
-e_table_sort_info_grouping_get_count (ETableSortInfo *info)
-{
- if (info->can_group)
- return info->group_count;
- else
- return 0;
-}
-
-static void
-e_table_sort_info_grouping_real_truncate (ETableSortInfo *info, int length)
-{
- if (length < info->group_count) {
- info->group_count = length;
- }
- if (length > info->group_count) {
- info->groupings = g_realloc(info->groupings, length * sizeof(ETableSortColumn));
- info->group_count = length;
- }
-}
-
-/**
- * e_table_sort_info_grouping_truncate:
- * @info: The ETableSortInfo object
- * @lenght: position where the truncation happens.
- *
- * This routine can be used to reduce or grow the number of grouping
- * criteria in the object.
- */
-void
-e_table_sort_info_grouping_truncate (ETableSortInfo *info, int length)
-{
- e_table_sort_info_grouping_real_truncate(info, length);
- e_table_sort_info_group_info_changed(info);
-}
-
-/**
- * e_table_sort_info_grouping_get_nth:
- * @info: The ETableSortInfo object
- * @n: Item information to fetch.
- *
- * Returns: the description of the @n-th grouping criteria in the @info object.
- */
-ETableSortColumn
-e_table_sort_info_grouping_get_nth (ETableSortInfo *info, int n)
-{
- if (info->can_group && n < info->group_count) {
- return info->groupings[n];
- } else {
- ETableSortColumn fake = {0, 0};
- return fake;
- }
-}
-
-/**
- * e_table_sort_info_grouping_set_nth:
- * @info: The ETableSortInfo object
- * @n: Item information to fetch.
- * @column: new values for the grouping
- *
- * Sets the grouping criteria for index @n to be given by @column (a column number and
- * whether it is ascending or descending).
- */
-void
-e_table_sort_info_grouping_set_nth (ETableSortInfo *info, int n, ETableSortColumn column)
-{
- if (n >= info->group_count) {
- e_table_sort_info_grouping_real_truncate(info, n + 1);
- }
- info->groupings[n] = column;
- e_table_sort_info_group_info_changed(info);
-}
-
-
-/**
- * e_table_sort_info_get_count:
- * @info: The ETableSortInfo object
- *
- * Returns: the number of sorting criteria in the object.
- */
-guint
-e_table_sort_info_sorting_get_count (ETableSortInfo *info)
-{
- return info->sort_count;
-}
-
-static void
-e_table_sort_info_sorting_real_truncate (ETableSortInfo *info, int length)
-{
- if (length < info->sort_count) {
- info->sort_count = length;
- }
- if (length > info->sort_count) {
- info->sortings = g_realloc(info->sortings, length * sizeof(ETableSortColumn));
- info->sort_count = length;
- }
-}
-
-/**
- * e_table_sort_info_sorting_truncate:
- * @info: The ETableSortInfo object
- * @lenght: position where the truncation happens.
- *
- * This routine can be used to reduce or grow the number of sort
- * criteria in the object.
- */
-void
-e_table_sort_info_sorting_truncate (ETableSortInfo *info, int length)
-{
- e_table_sort_info_sorting_real_truncate (info, length);
- e_table_sort_info_sort_info_changed(info);
-}
-
-/**
- * e_table_sort_info_sorting_get_nth:
- * @info: The ETableSortInfo object
- * @n: Item information to fetch.
- *
- * Returns: the description of the @n-th grouping criteria in the @info object.
- */
-ETableSortColumn
-e_table_sort_info_sorting_get_nth (ETableSortInfo *info, int n)
-{
- if (n < info->sort_count) {
- return info->sortings[n];
- } else {
- ETableSortColumn fake = {0, 0};
- return fake;
- }
-}
-
-/**
- * e_table_sort_info_sorting_get_nth:
- * @info: The ETableSortInfo object
- * @n: Item information to fetch.
- * @column: new values for the sorting
- *
- * Sets the sorting criteria for index @n to be given by @column (a
- * column number and whether it is ascending or descending).
- */
-void
-e_table_sort_info_sorting_set_nth (ETableSortInfo *info, int n, ETableSortColumn column)
-{
- if (n >= info->sort_count) {
- e_table_sort_info_sorting_real_truncate(info, n + 1);
- }
- info->sortings[n] = column;
- e_table_sort_info_sort_info_changed(info);
-}
-
-/**
- * e_table_sort_info_new:
- *
- * This creates a new e_table_sort_info object that contains no
- * grouping and no sorting defined as of yet. This object is used
- * to keep track of multi-level sorting and multi-level grouping of
- * the ETable.
- *
- * Returns: A new %ETableSortInfo object
- */
-ETableSortInfo *
-e_table_sort_info_new (void)
-{
- return g_object_new (E_TABLE_SORT_INFO_TYPE, NULL);
-}
-
-/**
- * e_table_sort_info_load_from_node:
- * @info: The ETableSortInfo object
- * @node: pointer to the xmlNode that describes the sorting and grouping information
- * @state_version:
- *
- * This loads the state for the %ETableSortInfo object @info from the
- * xml node @node.
- */
-void
-e_table_sort_info_load_from_node (ETableSortInfo *info,
- xmlNode *node,
- gdouble state_version)
-{
- int i;
- xmlNode *grouping;
-
- if (state_version <= 0.05) {
- i = 0;
- for (grouping = node->xmlChildrenNode; grouping && !strcmp (grouping->name, "group"); grouping = grouping->xmlChildrenNode) {
- ETableSortColumn column;
- column.column = e_xml_get_integer_prop_by_name (grouping, "column");
- column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending");
- e_table_sort_info_grouping_set_nth(info, i++, column);
- }
- i = 0;
- for (; grouping && !strcmp (grouping->name, "leaf"); grouping = grouping->xmlChildrenNode) {
- ETableSortColumn column;
- column.column = e_xml_get_integer_prop_by_name (grouping, "column");
- column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending");
- e_table_sort_info_sorting_set_nth(info, i++, column);
- }
- } else {
- gint gcnt = 0;
- gint scnt = 0;
- for (grouping = node->children; grouping; grouping = grouping->next) {
- ETableSortColumn column;
-
- if (grouping->type != XML_ELEMENT_NODE)
- continue;
-
- if (!strcmp (grouping->name, "group")) {
- column.column = e_xml_get_integer_prop_by_name (grouping, "column");
- column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending");
- e_table_sort_info_grouping_set_nth(info, gcnt++, column);
- } else if (!strcmp (grouping->name, "leaf")) {
- column.column = e_xml_get_integer_prop_by_name (grouping, "column");
- column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending");
- e_table_sort_info_sorting_set_nth(info, scnt++, column);
- }
- }
- }
- g_signal_emit (G_OBJECT (info), e_table_sort_info_signals [SORT_INFO_CHANGED], 0);
-}
-
-/**
- * e_table_sort_info_save_to_node:
- * @info: The ETableSortInfo object
- * @parent: xmlNode that will be hosting the saved state of the @info object.
- *
- * This function is used
- *
- * Returns: the node that has been appended to @parent as a child containing
- * the sorting and grouping information for this ETableSortInfo object.
- */
-xmlNode *
-e_table_sort_info_save_to_node (ETableSortInfo *info,
- xmlNode *parent)
-{
- xmlNode *grouping;
- xmlNode *node;
- int i;
- const int sort_count = e_table_sort_info_sorting_get_count (info);
- const int group_count = e_table_sort_info_grouping_get_count (info);
-
- grouping = xmlNewChild (parent, NULL, "grouping", NULL);
-
- for (i = 0; i < group_count; i++) {
- ETableSortColumn column = e_table_sort_info_grouping_get_nth(info, i);
- xmlNode *new_node = xmlNewChild(grouping, NULL, "group", NULL);
-
- e_xml_set_integer_prop_by_name (new_node, "column", column.column);
- e_xml_set_bool_prop_by_name (new_node, "ascending", column.ascending);
- node = new_node;
- }
-
- for (i = 0; i < sort_count; i++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(info, i);
- xmlNode *new_node = xmlNewChild(grouping, NULL, "leaf", NULL);
-
- e_xml_set_integer_prop_by_name (new_node, "column", column.column);
- e_xml_set_bool_prop_by_name (new_node, "ascending", column.ascending);
- node = new_node;
- }
-
- return grouping;
-}
-
-ETableSortInfo *
-e_table_sort_info_duplicate (ETableSortInfo *info)
-{
- ETableSortInfo *new_info;
-
- new_info = e_table_sort_info_new();
-
- new_info->group_count = info->group_count;
- new_info->groupings = g_new(ETableSortColumn, new_info->group_count);
- memmove(new_info->groupings, info->groupings, sizeof (ETableSortColumn) * new_info->group_count);
-
- new_info->sort_count = info->sort_count;
- new_info->sortings = g_new(ETableSortColumn, new_info->sort_count);
- memmove(new_info->sortings, info->sortings, sizeof (ETableSortColumn) * new_info->sort_count);
-
- new_info->can_group = info->can_group;
-
- return new_info;
-}
-
-void
-e_table_sort_info_set_can_group (ETableSortInfo *info,
- gboolean can_group)
-{
- info->can_group = can_group;
-}
-
-gboolean
-e_table_sort_info_get_can_group (ETableSortInfo *info)
-{
- return info->can_group;
-}
-
-
diff --git a/widgets/table/e-table-sort-info.h b/widgets/table/e-table-sort-info.h
deleted file mode 100644
index 4710fbd453..0000000000
--- a/widgets/table/e-table-sort-info.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sort-info.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SORT_INFO_H_
-#define _E_TABLE_SORT_INFO_H_
-
-#include <glib-object.h>
-#include <libxml/tree.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SORT_INFO_TYPE (e_table_sort_info_get_type ())
-#define E_TABLE_SORT_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SORT_INFO_TYPE, ETableSortInfo))
-#define E_TABLE_SORT_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SORT_INFO_TYPE, ETableSortInfoClass))
-#define E_IS_TABLE_SORT_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SORT_INFO_TYPE))
-#define E_IS_TABLE_SORT_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SORT_INFO_TYPE))
-#define E_TABLE_SORT_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_SORT_INFO_TYPE, ETableSortInfoClass))
-
-typedef struct _ETableSortColumn ETableSortColumn;
-
-struct _ETableSortColumn {
- guint column : 31;
- guint ascending : 1;
-};
-
-typedef struct {
- GObject base;
-
- gint group_count;
- ETableSortColumn *groupings;
- gint sort_count;
- ETableSortColumn *sortings;
-
- guint frozen : 1;
- guint sort_info_changed : 1;
- guint group_info_changed : 1;
-
- guint can_group : 1;
-} ETableSortInfo;
-
-typedef struct {
- GObjectClass parent_class;
-
- /*
- * Signals
- */
- void (*sort_info_changed) (ETableSortInfo *info);
- void (*group_info_changed) (ETableSortInfo *info);
-} ETableSortInfoClass;
-
-GType e_table_sort_info_get_type (void);
-
-void e_table_sort_info_freeze (ETableSortInfo *info);
-void e_table_sort_info_thaw (ETableSortInfo *info);
-
-guint e_table_sort_info_grouping_get_count (ETableSortInfo *info);
-void e_table_sort_info_grouping_truncate (ETableSortInfo *info,
- int length);
-ETableSortColumn e_table_sort_info_grouping_get_nth (ETableSortInfo *info,
- int n);
-void e_table_sort_info_grouping_set_nth (ETableSortInfo *info,
- int n,
- ETableSortColumn column);
-
-guint e_table_sort_info_sorting_get_count (ETableSortInfo *info);
-void e_table_sort_info_sorting_truncate (ETableSortInfo *info,
- int length);
-ETableSortColumn e_table_sort_info_sorting_get_nth (ETableSortInfo *info,
- int n);
-void e_table_sort_info_sorting_set_nth (ETableSortInfo *info,
- int n,
- ETableSortColumn column);
-
-ETableSortInfo *e_table_sort_info_new (void);
-void e_table_sort_info_load_from_node (ETableSortInfo *info,
- xmlNode *node,
- gdouble state_version);
-xmlNode *e_table_sort_info_save_to_node (ETableSortInfo *info,
- xmlNode *parent);
-ETableSortInfo *e_table_sort_info_duplicate (ETableSortInfo *info);
-void e_table_sort_info_set_can_group (ETableSortInfo *info,
- gboolean can_group);
-gboolean e_table_sort_info_get_can_group (ETableSortInfo *info);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SORT_INFO_H_ */
diff --git a/widgets/table/e-table-sorted-variable.c b/widgets/table/e-table-sorted-variable.c
deleted file mode 100644
index ac3a7d5067..0000000000
--- a/widgets/table/e-table-sorted-variable.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorted-variable.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-util.h"
-#include "e-table-sorted-variable.h"
-#include "e-table-sorting-utils.h"
-
-#define d(x)
-
-#define INCREMENT_AMOUNT 100
-
-/* maximum insertions between an idle event that we will do without scheduling an idle sort */
-#define ETSV_INSERT_MAX (4)
-
-static ETableSubsetVariableClass *etsv_parent_class;
-
-static void etsv_sort_info_changed (ETableSortInfo *info, ETableSortedVariable *etsv);
-static void etsv_sort (ETableSortedVariable *etsv);
-static void etsv_add (ETableSubsetVariable *etssv, gint row);
-static void etsv_add_all (ETableSubsetVariable *etssv);
-
-static void
-etsv_dispose (GObject *object)
-{
- ETableSortedVariable *etsv = E_TABLE_SORTED_VARIABLE (object);
-
- if (etsv->sort_info_changed_id)
- g_signal_handler_disconnect (G_OBJECT (etsv->sort_info),
- etsv->sort_info_changed_id);
- etsv->sort_info_changed_id = 0;
-
- if (etsv->sort_idle_id) {
- g_source_remove(etsv->sort_idle_id);
- etsv->sort_idle_id = 0;
- }
- if (etsv->insert_idle_id) {
- g_source_remove(etsv->insert_idle_id);
- etsv->insert_idle_id = 0;
- }
-
- if (etsv->sort_info)
- g_object_unref(etsv->sort_info);
- etsv->sort_info = NULL;
-
- if (etsv->full_header)
- g_object_unref(etsv->full_header);
- etsv->full_header = NULL;
-
- G_OBJECT_CLASS (etsv_parent_class)->dispose (object);
-}
-
-static void
-etsv_class_init (GObjectClass *object_class)
-{
- ETableSubsetVariableClass *etssv_class = E_TABLE_SUBSET_VARIABLE_CLASS(object_class);
-
- etsv_parent_class = g_type_class_peek_parent (object_class);
-
- object_class->dispose = etsv_dispose;
-
- etssv_class->add = etsv_add;
- etssv_class->add_all = etsv_add_all;
-}
-
-static void
-etsv_init (ETableSortedVariable *etsv)
-{
- etsv->full_header = NULL;
- etsv->sort_info = NULL;
-
- etsv->sort_info_changed_id = 0;
-
- etsv->sort_idle_id = 0;
- etsv->insert_count = 0;
-}
-
-E_MAKE_TYPE(e_table_sorted_variable, "ETableSortedVariable", ETableSortedVariable, etsv_class_init, etsv_init, E_TABLE_SUBSET_VARIABLE_TYPE)
-
-static gboolean
-etsv_sort_idle(ETableSortedVariable *etsv)
-{
- g_object_ref(etsv);
- etsv_sort(etsv);
- etsv->sort_idle_id = 0;
- etsv->insert_count = 0;
- g_object_unref(etsv);
- return FALSE;
-}
-
-static gboolean
-etsv_insert_idle(ETableSortedVariable *etsv)
-{
- etsv->insert_count = 0;
- etsv->insert_idle_id = 0;
- return FALSE;
-}
-
-
-static void
-etsv_add (ETableSubsetVariable *etssv,
- gint row)
-{
- ETableModel *etm = E_TABLE_MODEL(etssv);
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- ETableSortedVariable *etsv = E_TABLE_SORTED_VARIABLE (etssv);
- int i;
-
- e_table_model_pre_change (etm);
-
- if (etss->n_map + 1 > etssv->n_vals_allocated) {
- etssv->n_vals_allocated += INCREMENT_AMOUNT;
- etss->map_table = g_realloc (etss->map_table, (etssv->n_vals_allocated) * sizeof(int));
- }
- i = etss->n_map;
- if (etsv->sort_idle_id == 0) {
- /* this is to see if we're inserting a lot of things between idle loops.
- If we are, we're busy, its faster to just append and perform a full sort later */
- etsv->insert_count++;
- if (etsv->insert_count > ETSV_INSERT_MAX) {
- /* schedule a sort, and append instead */
- etsv->sort_idle_id = g_idle_add_full(50, (GSourceFunc) etsv_sort_idle, etsv, NULL);
- } else {
- /* make sure we have an idle handler to reset the count every now and then */
- if (etsv->insert_idle_id == 0) {
- etsv->insert_idle_id = g_idle_add_full(40, (GSourceFunc) etsv_insert_idle, etsv, NULL);
- }
- i = e_table_sorting_utils_insert(etss->source, etsv->sort_info, etsv->full_header, etss->map_table, etss->n_map, row);
- memmove(etss->map_table + i + 1, etss->map_table + i, (etss->n_map - i) * sizeof(int));
- }
- }
- etss->map_table[i] = row;
- etss->n_map++;
-
- e_table_model_row_inserted (etm, i);
-}
-
-static void
-etsv_add_all (ETableSubsetVariable *etssv)
-{
- ETableModel *etm = E_TABLE_MODEL(etssv);
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- ETableSortedVariable *etsv = E_TABLE_SORTED_VARIABLE (etssv);
- int rows;
- int i;
-
- e_table_model_pre_change(etm);
-
- rows = e_table_model_row_count(etss->source);
-
- if (etss->n_map + rows > etssv->n_vals_allocated){
- etssv->n_vals_allocated += MAX(INCREMENT_AMOUNT, rows);
- etss->map_table = g_realloc (etss->map_table, etssv->n_vals_allocated * sizeof(int));
- }
- for (i = 0; i < rows; i++)
- etss->map_table[etss->n_map++] = i;
-
- if (etsv->sort_idle_id == 0) {
- etsv->sort_idle_id = g_idle_add_full(50, (GSourceFunc) etsv_sort_idle, etsv, NULL);
- }
-
- e_table_model_changed (etm);
-}
-
-ETableModel *
-e_table_sorted_variable_new (ETableModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
-{
- ETableSortedVariable *etsv = g_object_new (E_TABLE_SORTED_VARIABLE_TYPE, NULL);
- ETableSubsetVariable *etssv = E_TABLE_SUBSET_VARIABLE (etsv);
-
- if (e_table_subset_variable_construct (etssv, source) == NULL){
- g_object_unref (etsv);
- return NULL;
- }
-
- etsv->sort_info = sort_info;
- g_object_ref(etsv->sort_info);
- etsv->full_header = full_header;
- g_object_ref(etsv->full_header);
-
- etsv->sort_info_changed_id = g_signal_connect (G_OBJECT (sort_info), "sort_info_changed",
- G_CALLBACK (etsv_sort_info_changed), etsv);
-
- return E_TABLE_MODEL(etsv);
-}
-
-static void
-etsv_sort_info_changed (ETableSortInfo *info, ETableSortedVariable *etsv)
-{
- etsv_sort(etsv);
-}
-
-static void
-etsv_sort(ETableSortedVariable *etsv)
-{
- ETableSubset *etss = E_TABLE_SUBSET(etsv);
- static int reentering = 0;
- if (reentering)
- return;
- reentering = 1;
-
- e_table_model_pre_change(E_TABLE_MODEL(etsv));
-
- e_table_sorting_utils_sort(etss->source, etsv->sort_info, etsv->full_header, etss->map_table, etss->n_map);
-
- e_table_model_changed (E_TABLE_MODEL(etsv));
- reentering = 0;
-}
diff --git a/widgets/table/e-table-sorted-variable.h b/widgets/table/e-table-sorted-variable.h
deleted file mode 100644
index 546d04b240..0000000000
--- a/widgets/table/e-table-sorted-variable.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorted-variable.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SORTED_VARIABLE_H_
-#define _E_TABLE_SORTED_VARIABLE_H_
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-subset-variable.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SORTED_VARIABLE_TYPE (e_table_sorted_variable_get_type ())
-#define E_TABLE_SORTED_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SORTED_VARIABLE_TYPE, ETableSortedVariable))
-#define E_TABLE_SORTED_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SORTED_VARIABLE_TYPE, ETableSortedVariableClass))
-#define E_IS_TABLE_SORTED_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SORTED_VARIABLE_TYPE))
-#define E_IS_TABLE_SORTED_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SORTED_VARIABLE_TYPE))
-#define E_TABLE_SORTED_VARIABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_SORTED_VARIABLE_TYPE, ETableSortedVariableClass))
-
-typedef struct {
- ETableSubsetVariable base;
-
- ETableSortInfo *sort_info;
-
- ETableHeader *full_header;
-
- int sort_info_changed_id;
- int sort_idle_id;
- int insert_idle_id;
- int insert_count;
-
-} ETableSortedVariable;
-
-typedef struct {
- ETableSubsetVariableClass parent_class;
-} ETableSortedVariableClass;
-
-GType e_table_sorted_variable_get_type (void);
-ETableModel *e_table_sorted_variable_new (ETableModel *etm, ETableHeader *header, ETableSortInfo *sort_info);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SORTED_VARIABLE_H_ */
diff --git a/widgets/table/e-table-sorted.c b/widgets/table/e-table-sorted.c
deleted file mode 100644
index a5b5acb8cf..0000000000
--- a/widgets/table/e-table-sorted.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorted.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-util.h"
-#include "e-table-sorted.h"
-#include "e-table-sorting-utils.h"
-
-#define d(x)
-
-#define INCREMENT_AMOUNT 100
-
-/* maximum insertions between an idle event that we will do without scheduling an idle sort */
-#define ETS_INSERT_MAX (4)
-
-static ETableSubsetClass *ets_parent_class;
-
-static void ets_sort_info_changed (ETableSortInfo *info, ETableSorted *ets);
-static void ets_sort (ETableSorted *ets);
-static void ets_proxy_model_changed (ETableSubset *etss, ETableModel *source);
-static void ets_proxy_model_row_changed (ETableSubset *etss, ETableModel *source, int row);
-static void ets_proxy_model_cell_changed (ETableSubset *etss, ETableModel *source, int col, int row);
-static void ets_proxy_model_rows_inserted (ETableSubset *etss, ETableModel *source, int row, int count);
-static void ets_proxy_model_rows_deleted (ETableSubset *etss, ETableModel *source, int row, int count);
-
-static void
-ets_dispose (GObject *object)
-{
- ETableSorted *ets = E_TABLE_SORTED (object);
-
- if (ets->sort_idle_id)
- g_source_remove(ets->sort_idle_id);
- ets->sort_idle_id = 0;
-
- if (ets->insert_idle_id)
- g_source_remove(ets->insert_idle_id);
- ets->insert_idle_id = 0;
-
- if (ets->sort_info) {
- g_signal_handler_disconnect (G_OBJECT (ets->sort_info),
- ets->sort_info_changed_id);
- g_object_unref(ets->sort_info);
- ets->sort_info = NULL;
- }
-
- if (ets->full_header)
- g_object_unref(ets->full_header);
- ets->full_header = NULL;
-
- G_OBJECT_CLASS (ets_parent_class)->dispose (object);
-}
-
-static void
-ets_class_init (GObjectClass *object_class)
-{
- ETableSubsetClass *etss_class = E_TABLE_SUBSET_CLASS(object_class);
-
- ets_parent_class = g_type_class_peek_parent (object_class);
-
- etss_class->proxy_model_changed = ets_proxy_model_changed;
- etss_class->proxy_model_row_changed = ets_proxy_model_row_changed;
- etss_class->proxy_model_cell_changed = ets_proxy_model_cell_changed;
- etss_class->proxy_model_rows_inserted = ets_proxy_model_rows_inserted;
- etss_class->proxy_model_rows_deleted = ets_proxy_model_rows_deleted;
-
- object_class->dispose = ets_dispose;
-}
-
-static void
-ets_init (ETableSorted *ets)
-{
- ets->full_header = NULL;
- ets->sort_info = NULL;
-
- ets->sort_info_changed_id = 0;
-
- ets->sort_idle_id = 0;
- ets->insert_count = 0;
-}
-
-E_MAKE_TYPE(e_table_sorted, "ETableSorted", ETableSorted, ets_class_init, ets_init, E_TABLE_SUBSET_TYPE)
-
-static gboolean
-ets_sort_idle(ETableSorted *ets)
-{
- g_object_ref(ets);
- ets_sort(ets);
- ets->sort_idle_id = 0;
- ets->insert_count = 0;
- g_object_unref(ets);
- return FALSE;
-}
-
-static gboolean
-ets_insert_idle(ETableSorted *ets)
-{
- ets->insert_count = 0;
- ets->insert_idle_id = 0;
- return FALSE;
-}
-
-ETableModel *
-e_table_sorted_new (ETableModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
-{
- ETableSorted *ets = g_object_new (E_TABLE_SORTED_TYPE, NULL);
- ETableSubset *etss = E_TABLE_SUBSET (ets);
-
- if (ets_parent_class->proxy_model_pre_change)
- (ets_parent_class->proxy_model_pre_change) (etss, source);
-
- if (e_table_subset_construct (etss, source, 0) == NULL){
- g_object_unref (ets);
- return NULL;
- }
-
- ets->sort_info = sort_info;
- g_object_ref(ets->sort_info);
- ets->full_header = full_header;
- g_object_ref(ets->full_header);
-
- ets_proxy_model_changed(etss, source);
-
- ets->sort_info_changed_id = g_signal_connect (G_OBJECT (sort_info), "sort_info_changed",
- G_CALLBACK (ets_sort_info_changed), ets);
-
- return E_TABLE_MODEL(ets);
-}
-
-static void
-ets_sort_info_changed (ETableSortInfo *info, ETableSorted *ets)
-{
- ets_sort(ets);
-}
-
-static void
-ets_proxy_model_changed (ETableSubset *subset, ETableModel *source)
-{
- int rows, i;
-
- rows = e_table_model_row_count(source);
-
- g_free(subset->map_table);
- subset->n_map = rows;
- subset->map_table = g_new(int, rows);
-
- for (i = 0; i < rows; i++) {
- subset->map_table[i] = i;
- }
-
- if (!E_TABLE_SORTED(subset)->sort_idle_id)
- E_TABLE_SORTED(subset)->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, subset, NULL);
-
- e_table_model_changed(E_TABLE_MODEL(subset));
-}
-
-static void
-ets_proxy_model_row_changed (ETableSubset *subset, ETableModel *source, int row)
-{
- if (!E_TABLE_SORTED(subset)->sort_idle_id)
- E_TABLE_SORTED(subset)->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, subset, NULL);
-
- if (ets_parent_class->proxy_model_row_changed)
- (ets_parent_class->proxy_model_row_changed) (subset, source, row);
-}
-
-static void
-ets_proxy_model_cell_changed (ETableSubset *subset, ETableModel *source, int col, int row)
-{
- ETableSorted *ets = E_TABLE_SORTED(subset);
- if (e_table_sorting_utils_affects_sort(ets->sort_info, ets->full_header, col))
- ets_proxy_model_row_changed(subset, source, row);
- else if (ets_parent_class->proxy_model_cell_changed)
- (ets_parent_class->proxy_model_cell_changed) (subset, source, col, row);
-}
-
-static void
-ets_proxy_model_rows_inserted (ETableSubset *etss, ETableModel *source, int row, int count)
-{
- ETableModel *etm = E_TABLE_MODEL(etss);
- ETableSorted *ets = E_TABLE_SORTED(etss);
- int i;
- gboolean full_change = FALSE;
-
- if (count == 0) {
- e_table_model_no_change (etm);
- return;
- }
-
- if (row != etss->n_map) {
- full_change = TRUE;
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] >= row) {
- etss->map_table[i] += count;
- }
- }
- }
-
- etss->map_table = g_realloc (etss->map_table, (etss->n_map + count) * sizeof(int));
-
- for (; count > 0; count --) {
- if (!full_change)
- e_table_model_pre_change (etm);
- i = etss->n_map;
- if (ets->sort_idle_id == 0) {
- /* this is to see if we're inserting a lot of things between idle loops.
- If we are, we're busy, its faster to just append and perform a full sort later */
- ets->insert_count++;
- if (ets->insert_count > ETS_INSERT_MAX) {
- /* schedule a sort, and append instead */
- ets->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, ets, NULL);
- } else {
- /* make sure we have an idle handler to reset the count every now and then */
- if (ets->insert_idle_id == 0) {
- ets->insert_idle_id = g_idle_add_full(40, (GSourceFunc) ets_insert_idle, ets, NULL);
- }
- i = e_table_sorting_utils_insert(etss->source, ets->sort_info, ets->full_header, etss->map_table, etss->n_map, row);
- memmove(etss->map_table + i + 1, etss->map_table + i, (etss->n_map - i) * sizeof(int));
- }
- }
- etss->map_table[i] = row;
- etss->n_map++;
- if (!full_change) {
- e_table_model_row_inserted (etm, i);
- }
-
- d(g_print("inserted row %d", row));
- row++;
- }
- if (full_change)
- e_table_model_changed (etm);
- else
- e_table_model_no_change (etm);
- d(e_table_subset_print_debugging(etss));
-}
-
-static void
-ets_proxy_model_rows_deleted (ETableSubset *etss, ETableModel *source, int row, int count)
-{
- ETableModel *etm = E_TABLE_MODEL(etss);
- int i;
- gboolean shift;
- int j;
-
- shift = row == etss->n_map - count;
-
- for (j = 0; j < count; j++) {
- for (i = 0; i < etss->n_map; i++){
- if (etss->map_table[i] == row + j) {
- if (shift)
- e_table_model_pre_change (etm);
- memmove (etss->map_table + i, etss->map_table + i + 1, (etss->n_map - i - 1) * sizeof(int));
- etss->n_map --;
- if (shift)
- e_table_model_row_deleted (etm, i);
- }
- }
- }
- if (!shift) {
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] >= row)
- etss->map_table[i] -= count;
- }
-
- e_table_model_changed (etm);
- } else {
- e_table_model_no_change (etm);
- }
-
- d(g_print("deleted row %d count %d", row, count));
- d(e_table_subset_print_debugging(etss));
-}
-
-static void
-ets_sort(ETableSorted *ets)
-{
- ETableSubset *etss = E_TABLE_SUBSET(ets);
- static int reentering = 0;
- if (reentering)
- return;
- reentering = 1;
-
- e_table_model_pre_change(E_TABLE_MODEL(ets));
-
- e_table_sorting_utils_sort(etss->source, ets->sort_info, ets->full_header, etss->map_table, etss->n_map);
-
- e_table_model_changed (E_TABLE_MODEL(ets));
- reentering = 0;
-}
diff --git a/widgets/table/e-table-sorted.h b/widgets/table/e-table-sorted.h
deleted file mode 100644
index e1265b0a08..0000000000
--- a/widgets/table/e-table-sorted.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorted.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SORTED_H_
-#define _E_TABLE_SORTED_H_
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-subset.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SORTED_TYPE (e_table_sorted_get_type ())
-#define E_TABLE_SORTED(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SORTED_TYPE, ETableSorted))
-#define E_TABLE_SORTED_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SORTED_TYPE, ETableSortedClass))
-#define E_IS_TABLE_SORTED(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SORTED_TYPE))
-#define E_IS_TABLE_SORTED_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SORTED_TYPE))
-#define E_TABLE_SORTED_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TABLE_SORTED_TYPE, ETableSortedClass))
-
-typedef struct {
- ETableSubset base;
-
- ETableSortInfo *sort_info;
-
- ETableHeader *full_header;
-
- int sort_info_changed_id;
- int sort_idle_id;
- int insert_idle_id;
- int insert_count;
-
-} ETableSorted;
-
-typedef struct {
- ETableSubsetClass parent_class;
-} ETableSortedClass;
-
-GType e_table_sorted_get_type (void);
-ETableModel *e_table_sorted_new (ETableModel *etm, ETableHeader *header, ETableSortInfo *sort_info);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SORTED_H_ */
diff --git a/widgets/table/e-table-sorter.c b/widgets/table/e-table-sorter.c
deleted file mode 100644
index a92af49f4d..0000000000
--- a/widgets/table/e-table-sorter.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorter.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-#include "e-table-sorter.h"
-
-#define d(x)
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_SORT_INFO
-};
-
-#define PARENT_TYPE e_sorter_get_type()
-
-#define INCREMENT_AMOUNT 100
-
-static ESorterClass *parent_class;
-
-static void ets_model_changed (ETableModel *etm, ETableSorter *ets);
-static void ets_model_row_changed (ETableModel *etm, int row, ETableSorter *ets);
-static void ets_model_cell_changed (ETableModel *etm, int col, int row, ETableSorter *ets);
-static void ets_model_rows_inserted (ETableModel *etm, int row, int count, ETableSorter *ets);
-static void ets_model_rows_deleted (ETableModel *etm, int row, int count, ETableSorter *ets);
-static void ets_sort_info_changed (ETableSortInfo *info, ETableSorter *ets);
-static void ets_clean (ETableSorter *ets);
-static void ets_sort (ETableSorter *ets);
-static void ets_backsort (ETableSorter *ets);
-
-static gint ets_model_to_sorted (ESorter *sorter, int row);
-static gint ets_sorted_to_model (ESorter *sorter, int row);
-static void ets_get_model_to_sorted_array (ESorter *sorter, int **array, int *count);
-static void ets_get_sorted_to_model_array (ESorter *sorter, int **array, int *count);
-static gboolean ets_needs_sorting (ESorter *ets);
-
-static void
-ets_dispose (GObject *object)
-{
- ETableSorter *ets = E_TABLE_SORTER (object);
-
- if (ets->sort_info) {
- if (ets->table_model_changed_id)
- g_signal_handler_disconnect (ets->source,
- ets->table_model_changed_id);
- if (ets->table_model_row_changed_id)
- g_signal_handler_disconnect (ets->source,
- ets->table_model_row_changed_id);
- if (ets->table_model_cell_changed_id)
- g_signal_handler_disconnect (ets->source,
- ets->table_model_cell_changed_id);
- if (ets->table_model_rows_inserted_id)
- g_signal_handler_disconnect (ets->source,
- ets->table_model_rows_inserted_id);
- if (ets->table_model_rows_deleted_id)
- g_signal_handler_disconnect (ets->source,
- ets->table_model_rows_deleted_id);
- if (ets->sort_info_changed_id)
- g_signal_handler_disconnect (ets->sort_info,
- ets->sort_info_changed_id);
- if (ets->group_info_changed_id)
- g_signal_handler_disconnect (ets->sort_info,
- ets->group_info_changed_id);
-
- ets->table_model_changed_id = 0;
- ets->table_model_row_changed_id = 0;
- ets->table_model_cell_changed_id = 0;
- ets->table_model_rows_inserted_id = 0;
- ets->table_model_rows_deleted_id = 0;
- ets->sort_info_changed_id = 0;
- ets->group_info_changed_id = 0;
-
- g_object_unref(ets->sort_info);
- ets->sort_info = NULL;
- }
-
- if (ets->full_header)
- g_object_unref(ets->full_header);
- ets->full_header = NULL;
-
- if (ets->source)
- g_object_unref(ets->source);
- ets->source = NULL;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-ets_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ETableSorter *ets = E_TABLE_SORTER (object);
-
- switch (prop_id) {
- case PROP_SORT_INFO:
- if (ets->sort_info) {
- if (ets->sort_info_changed_id)
- g_signal_handler_disconnect(ets->sort_info, ets->sort_info_changed_id);
- if (ets->group_info_changed_id)
- g_signal_handler_disconnect(ets->sort_info, ets->group_info_changed_id);
- g_object_unref(ets->sort_info);
- }
-
- ets->sort_info = E_TABLE_SORT_INFO(g_value_get_object (value));
- g_object_ref(ets->sort_info);
- ets->sort_info_changed_id = g_signal_connect (ets->sort_info, "sort_info_changed",
- G_CALLBACK (ets_sort_info_changed), ets);
- ets->group_info_changed_id = g_signal_connect (ets->sort_info, "group_info_changed",
- G_CALLBACK (ets_sort_info_changed), ets);
-
- ets_clean (ets);
- break;
- default:
- break;
- }
-}
-
-static void
-ets_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETableSorter *ets = E_TABLE_SORTER (object);
- switch (prop_id) {
- case PROP_SORT_INFO:
- g_value_set_object (value, ets->sort_info);
- break;
- }
-}
-
-static void
-ets_class_init (ETableSorterClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
- ESorterClass *sorter_class = E_SORTER_CLASS(klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->dispose = ets_dispose;
- object_class->set_property = ets_set_property;
- object_class->get_property = ets_get_property;
-
- sorter_class->model_to_sorted = ets_model_to_sorted ;
- sorter_class->sorted_to_model = ets_sorted_to_model ;
- sorter_class->get_model_to_sorted_array = ets_get_model_to_sorted_array ;
- sorter_class->get_sorted_to_model_array = ets_get_sorted_to_model_array ;
- sorter_class->needs_sorting = ets_needs_sorting ;
-
- g_object_class_install_property (object_class, PROP_SORT_INFO,
- g_param_spec_object ("sort_info",
- _("Sort Info"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_SORT_INFO_TYPE,
- G_PARAM_READWRITE));
-}
-
-static void
-ets_init (ETableSorter *ets)
-{
- ets->full_header = NULL;
- ets->sort_info = NULL;
- ets->source = NULL;
-
- ets->needs_sorting = -1;
-
- ets->table_model_changed_id = 0;
- ets->table_model_row_changed_id = 0;
- ets->table_model_cell_changed_id = 0;
- ets->table_model_rows_inserted_id = 0;
- ets->table_model_rows_deleted_id = 0;
- ets->sort_info_changed_id = 0;
- ets->group_info_changed_id = 0;
-}
-
-E_MAKE_TYPE(e_table_sorter, "ETableSorter", ETableSorter, ets_class_init, ets_init, PARENT_TYPE)
-
-ETableSorter *
-e_table_sorter_new (ETableModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
-{
- ETableSorter *ets = g_object_new (E_TABLE_SORTER_TYPE, NULL);
-
- ets->sort_info = sort_info;
- g_object_ref(ets->sort_info);
- ets->full_header = full_header;
- g_object_ref(ets->full_header);
- ets->source = source;
- g_object_ref(ets->source);
-
- ets->table_model_changed_id = g_signal_connect (source, "model_changed",
- G_CALLBACK (ets_model_changed), ets);
- ets->table_model_row_changed_id = g_signal_connect (source, "model_row_changed",
- G_CALLBACK (ets_model_row_changed), ets);
- ets->table_model_cell_changed_id = g_signal_connect (source, "model_cell_changed",
- G_CALLBACK (ets_model_cell_changed), ets);
- ets->table_model_rows_inserted_id = g_signal_connect (source, "model_rows_inserted",
- G_CALLBACK (ets_model_rows_inserted), ets);
- ets->table_model_rows_deleted_id = g_signal_connect (source, "model_rows_deleted",
- G_CALLBACK (ets_model_rows_deleted), ets);
- ets->sort_info_changed_id = g_signal_connect (sort_info, "sort_info_changed",
- G_CALLBACK (ets_sort_info_changed), ets);
- ets->group_info_changed_id = g_signal_connect (sort_info, "group_info_changed",
- G_CALLBACK (ets_sort_info_changed), ets);
-
- return ets;
-}
-
-static void
-ets_model_changed (ETableModel *etm, ETableSorter *ets)
-{
- ets_clean(ets);
-}
-
-static void
-ets_model_row_changed (ETableModel *etm, int row, ETableSorter *ets)
-{
- ets_clean(ets);
-}
-
-static void
-ets_model_cell_changed (ETableModel *etm, int col, int row, ETableSorter *ets)
-{
- ets_clean(ets);
-}
-
-static void
-ets_model_rows_inserted (ETableModel *etm, int row, int count, ETableSorter *ets)
-{
- ets_clean(ets);
-}
-
-static void
-ets_model_rows_deleted (ETableModel *etm, int row, int count, ETableSorter *ets)
-{
- ets_clean(ets);
-}
-
-static void
-ets_sort_info_changed (ETableSortInfo *info, ETableSorter *ets)
-{
- d(g_print ("sort info changed\n"));
- ets_clean(ets);
-}
-
-static ETableSorter *ets_closure;
-static void **vals_closure;
-static int cols_closure;
-static int *ascending_closure;
-static GCompareFunc *compare_closure;
-
-/* FIXME: Make it not cache the second and later columns (as if anyone cares.) */
-
-static int
-qsort_callback(const void *data1, const void *data2)
-{
- gint row1 = *(int *)data1;
- gint row2 = *(int *)data2;
- int j;
- int sort_count = e_table_sort_info_sorting_get_count(ets_closure->sort_info) + e_table_sort_info_grouping_get_count(ets_closure->sort_info);
- int comp_val = 0;
- int ascending = 1;
- for (j = 0; j < sort_count; j++) {
- comp_val = (*(compare_closure[j]))(vals_closure[cols_closure * row1 + j], vals_closure[cols_closure * row2 + j]);
- ascending = ascending_closure[j];
- if (comp_val != 0)
- break;
- }
- if (comp_val == 0) {
- if (row1 < row2)
- comp_val = -1;
- if (row1 > row2)
- comp_val = 1;
- }
- if (!ascending)
- comp_val = -comp_val;
- return comp_val;
-}
-
-static void
-ets_clean(ETableSorter *ets)
-{
- g_free(ets->sorted);
- ets->sorted = NULL;
-
- g_free(ets->backsorted);
- ets->backsorted = NULL;
-
- ets->needs_sorting = -1;
-}
-
-
-static void
-ets_sort(ETableSorter *ets)
-{
- int rows;
- int i;
- int j;
- int cols;
- int group_cols;
-
- if (ets->sorted)
- return;
-
- rows = e_table_model_row_count(ets->source);
- group_cols = e_table_sort_info_grouping_get_count(ets->sort_info);
- cols = e_table_sort_info_sorting_get_count(ets->sort_info) + group_cols;
-
- ets->sorted = g_new(int, rows);
- for (i = 0; i < rows; i++)
- ets->sorted[i] = i;
-
- cols_closure = cols;
- ets_closure = ets;
-
- vals_closure = g_new(void *, rows * cols);
- ascending_closure = g_new(int, cols);
- compare_closure = g_new(GCompareFunc, cols);
-
- for (j = 0; j < cols; j++) {
- ETableSortColumn column;
- ETableCol *col;
-
- if (j < group_cols)
- column = e_table_sort_info_grouping_get_nth(ets->sort_info, j);
- else
- column = e_table_sort_info_sorting_get_nth(ets->sort_info, j - group_cols);
-
- col = e_table_header_get_column_by_col_idx(ets->full_header, column.column);
- if (col == NULL)
- col = e_table_header_get_column (ets->full_header, e_table_header_count (ets->full_header) - 1);
-
- for (i = 0; i < rows; i++) {
- vals_closure[i * cols + j] = e_table_model_value_at (ets->source, col->col_idx, i);
- }
-
- compare_closure[j] = col->compare;
- ascending_closure[j] = column.ascending;
- }
-
- qsort(ets->sorted, rows, sizeof(int), qsort_callback);
-
- g_free(vals_closure);
- g_free(ascending_closure);
- g_free(compare_closure);
-}
-
-static void
-ets_backsort(ETableSorter *ets)
-{
- int i, rows;
-
- if (ets->backsorted)
- return;
-
- ets_sort(ets);
-
- rows = e_table_model_row_count(ets->source);
- ets->backsorted = g_new0(int, rows);
-
- for (i = 0; i < rows; i++) {
- ets->backsorted[ets->sorted[i]] = i;
- }
-}
-
-
-static gint
-ets_model_to_sorted (ESorter *es, int row)
-{
- ETableSorter *ets = E_TABLE_SORTER(es);
- int rows = e_table_model_row_count(ets->source);
-
- g_return_val_if_fail(row >= 0, -1);
- g_return_val_if_fail(row < rows, -1);
-
- if (ets_needs_sorting(es))
- ets_backsort(ets);
-
- if (ets->backsorted)
- return ets->backsorted[row];
- else
- return row;
-}
-
-static gint
-ets_sorted_to_model (ESorter *es, int row)
-{
- ETableSorter *ets = E_TABLE_SORTER(es);
- int rows = e_table_model_row_count(ets->source);
-
- g_return_val_if_fail(row >= 0, -1);
- g_return_val_if_fail(row < rows, -1);
-
- if (ets_needs_sorting(es))
- ets_sort(ets);
-
- if (ets->sorted)
- return ets->sorted[row];
- else
- return row;
-}
-
-static void
-ets_get_model_to_sorted_array (ESorter *es, int **array, int *count)
-{
- ETableSorter *ets = E_TABLE_SORTER(es);
- if (array || count) {
- ets_backsort(ets);
-
- if (array)
- *array = ets->backsorted;
- if (count)
- *count = e_table_model_row_count(ets->source);
- }
-}
-
-static void
-ets_get_sorted_to_model_array (ESorter *es, int **array, int *count)
-{
- ETableSorter *ets = E_TABLE_SORTER(es);
- if (array || count) {
- ets_sort(ets);
-
- if (array)
- *array = ets->sorted;
- if (count)
- *count = e_table_model_row_count(ets->source);
- }
-}
-
-
-static gboolean
-ets_needs_sorting(ESorter *es)
-{
- ETableSorter *ets = E_TABLE_SORTER(es);
- if (ets->needs_sorting < 0) {
- if (e_table_sort_info_sorting_get_count(ets->sort_info) + e_table_sort_info_grouping_get_count(ets->sort_info))
- ets->needs_sorting = 1;
- else
- ets->needs_sorting = 0;
- }
- return ets->needs_sorting;
-}
diff --git a/widgets/table/e-table-sorter.h b/widgets/table/e-table-sorter.h
deleted file mode 100644
index 67be48715a..0000000000
--- a/widgets/table/e-table-sorter.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorter.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SORTER_H_
-#define _E_TABLE_SORTER_H_
-
-#include <glib-object.h>
-#include <gal/util/e-sorter.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-subset-variable.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SORTER_TYPE (e_table_sorter_get_type ())
-#define E_TABLE_SORTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SORTER_TYPE, ETableSorter))
-#define E_TABLE_SORTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SORTER_TYPE, ETableSorterClass))
-#define E_IS_TABLE_SORTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SORTER_TYPE))
-#define E_IS_TABLE_SORTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SORTER_TYPE))
-
-typedef struct {
- ESorter base;
-
- ETableModel *source;
- ETableHeader *full_header;
- ETableSortInfo *sort_info;
-
- /* If needs_sorting is 0, then model_to_sorted and sorted_to_model are no-ops. */
- int needs_sorting;
-
- int *sorted;
- int *backsorted;
-
- int table_model_changed_id;
- int table_model_row_changed_id;
- int table_model_cell_changed_id;
- int table_model_rows_inserted_id;
- int table_model_rows_deleted_id;
- int sort_info_changed_id;
- int group_info_changed_id;
-} ETableSorter;
-
-typedef struct {
- ESorterClass parent_class;
-} ETableSorterClass;
-
-GType e_table_sorter_get_type (void);
-ETableSorter *e_table_sorter_new (ETableModel *etm,
- ETableHeader *full_header,
- ETableSortInfo *sort_info);
-G_END_DECLS
-
-#endif /* _E_TABLE_SORTER_H_ */
diff --git a/widgets/table/e-table-sorting-utils.c b/widgets/table/e-table-sorting-utils.c
deleted file mode 100644
index 80a9564a36..0000000000
--- a/widgets/table/e-table-sorting-utils.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorting-utils.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include <e-table-sorting-utils.h>
-#include <gal/util/e-util.h>
-
-#define d(x)
-
-/* This takes source rows. */
-static int
-etsu_compare(ETableModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, int row1, int row2)
-{
- int j;
- int sort_count = e_table_sort_info_sorting_get_count(sort_info);
- int comp_val = 0;
- int ascending = 1;
-
- for (j = 0; j < sort_count; j++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(sort_info, j);
- ETableCol *col;
- col = e_table_header_get_column_by_col_idx(full_header, column.column);
- if (col == NULL)
- col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
- comp_val = (*col->compare)(e_table_model_value_at (source, col->compare_col, row1),
- e_table_model_value_at (source, col->compare_col, row2));
- ascending = column.ascending;
- if (comp_val != 0)
- break;
- }
- if (comp_val == 0) {
- if (row1 < row2)
- comp_val = -1;
- if (row1 > row2)
- comp_val = 1;
- }
- if (!ascending)
- comp_val = -comp_val;
- return comp_val;
-}
-
-typedef struct {
- int cols;
- void **vals;
- int *ascending;
- GCompareFunc *compare;
-} ETableSortClosure;
-
-typedef struct {
- ETreeModel *tree;
- ETableSortInfo *sort_info;
- ETableHeader *full_header;
-} ETreeSortClosure;
-
-/* FIXME: Make it not cache the second and later columns (as if anyone cares.) */
-
-static int
-e_sort_callback(const void *data1, const void *data2, gpointer user_data)
-{
- gint row1 = *(int *)data1;
- gint row2 = *(int *)data2;
- ETableSortClosure *closure = user_data;
- int j;
- int sort_count = closure->cols;
- int comp_val = 0;
- int ascending = 1;
- for (j = 0; j < sort_count; j++) {
- comp_val = (*(closure->compare[j]))(closure->vals[closure->cols * row1 + j], closure->vals[closure->cols * row2 + j]);
- ascending = closure->ascending[j];
- if (comp_val != 0)
- break;
- }
- if (comp_val == 0) {
- if (row1 < row2)
- comp_val = -1;
- if (row1 > row2)
- comp_val = 1;
- }
- if (!ascending)
- comp_val = -comp_val;
- return comp_val;
-}
-
-void
-e_table_sorting_utils_sort(ETableModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, int *map_table, int rows)
-{
- int total_rows;
- int i;
- int j;
- int cols;
- ETableSortClosure closure;
-
- g_return_if_fail(source != NULL);
- g_return_if_fail(E_IS_TABLE_MODEL(source));
- g_return_if_fail(sort_info != NULL);
- g_return_if_fail(E_IS_TABLE_SORT_INFO(sort_info));
- g_return_if_fail(full_header != NULL);
- g_return_if_fail(E_IS_TABLE_HEADER(full_header));
-
- total_rows = e_table_model_row_count(source);
- cols = e_table_sort_info_sorting_get_count(sort_info);
- closure.cols = cols;
-
- closure.vals = g_new(void *, total_rows * cols);
- closure.ascending = g_new(int, cols);
- closure.compare = g_new(GCompareFunc, cols);
-
- for (j = 0; j < cols; j++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(sort_info, j);
- ETableCol *col;
- col = e_table_header_get_column_by_col_idx(full_header, column.column);
- if (col == NULL)
- col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
- for (i = 0; i < rows; i++) {
- closure.vals[map_table[i] * cols + j] = e_table_model_value_at (source, col->compare_col, map_table[i]);
- }
- closure.compare[j] = col->compare;
- closure.ascending[j] = column.ascending;
- }
-
- e_sort(map_table, rows, sizeof(int), e_sort_callback, &closure);
-
- g_free(closure.vals);
- g_free(closure.ascending);
- g_free(closure.compare);
-}
-
-gboolean
-e_table_sorting_utils_affects_sort (ETableSortInfo *sort_info,
- ETableHeader *full_header,
- int col)
-{
- int j;
- int cols;
-
- g_return_val_if_fail(sort_info != NULL, TRUE);
- g_return_val_if_fail(E_IS_TABLE_SORT_INFO(sort_info), TRUE);
- g_return_val_if_fail(full_header != NULL, TRUE);
- g_return_val_if_fail(E_IS_TABLE_HEADER(full_header), TRUE);
-
- cols = e_table_sort_info_sorting_get_count(sort_info);
-
- for (j = 0; j < cols; j++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(sort_info, j);
- ETableCol *tablecol;
- tablecol = e_table_header_get_column_by_col_idx(full_header, column.column);
- if (tablecol == NULL)
- tablecol = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
- if (col == tablecol->compare_col)
- return TRUE;
- }
- return FALSE;
-}
-
-
-/* FIXME: This could be done in time log n instead of time n with a binary search. */
-int
-e_table_sorting_utils_insert(ETableModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, int *map_table, int rows, int row)
-{
- int i;
-
- i = 0;
- /* handle insertions when we have a 'sort group' */
- while (i < rows && etsu_compare(source, sort_info, full_header, map_table[i], row) < 0)
- i++;
-
- return i;
-}
-
-/* FIXME: This could be done in time log n instead of time n with a binary search. */
-int
-e_table_sorting_utils_check_position (ETableModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, int *map_table, int rows, int view_row)
-{
- int i;
- int row;
-
- i = view_row;
- row = map_table[i];
-
- i = view_row;
- if (i < rows - 1 && etsu_compare(source, sort_info, full_header, map_table[i + 1], row) < 0) {
- i ++;
- while (i < rows - 1 && etsu_compare(source, sort_info, full_header, map_table[i], row) < 0)
- i ++;
- } else if (i > 0 && etsu_compare(source, sort_info, full_header, map_table[i - 1], row) > 0) {
- i --;
- while (i > 0 && etsu_compare(source, sort_info, full_header, map_table[i], row) > 0)
- i --;
- }
- return i;
-}
-
-
-
-
-/* This takes source rows. */
-static int
-etsu_tree_compare(ETreeModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, ETreePath path1, ETreePath path2)
-{
- int j;
- int sort_count = e_table_sort_info_sorting_get_count(sort_info);
- int comp_val = 0;
- int ascending = 1;
-
- for (j = 0; j < sort_count; j++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(sort_info, j);
- ETableCol *col;
- col = e_table_header_get_column_by_col_idx(full_header, column.column);
- if (col == NULL)
- col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
- comp_val = (*col->compare)(e_tree_model_value_at (source, path1, col->compare_col),
- e_tree_model_value_at (source, path2, col->compare_col));
- ascending = column.ascending;
- if (comp_val != 0)
- break;
- }
- if (!ascending)
- comp_val = -comp_val;
- return comp_val;
-}
-
-static int
-e_sort_tree_callback(const void *data1, const void *data2, gpointer user_data)
-{
- ETreePath *path1 = *(ETreePath *)data1;
- ETreePath *path2 = *(ETreePath *)data2;
- ETreeSortClosure *closure = user_data;
-
- return etsu_tree_compare(closure->tree, closure->sort_info, closure->full_header, path1, path2);
-}
-
-void
-e_table_sorting_utils_tree_sort(ETreeModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, ETreePath *map_table, int count)
-{
- ETableSortClosure closure;
- int cols;
- int i, j;
- int *map;
- ETreePath *map_copy;
- g_return_if_fail(source != NULL);
- g_return_if_fail(E_IS_TREE_MODEL(source));
- g_return_if_fail(sort_info != NULL);
- g_return_if_fail(E_IS_TABLE_SORT_INFO(sort_info));
- g_return_if_fail(full_header != NULL);
- g_return_if_fail(E_IS_TABLE_HEADER(full_header));
-
- cols = e_table_sort_info_sorting_get_count(sort_info);
- closure.cols = cols;
-
- closure.vals = g_new(void *, count * cols);
- closure.ascending = g_new(int, cols);
- closure.compare = g_new(GCompareFunc, cols);
-
- for (j = 0; j < cols; j++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(sort_info, j);
- ETableCol *col;
-
- col = e_table_header_get_column_by_col_idx(full_header, column.column);
- if (col == NULL)
- col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
-
- for (i = 0; i < count; i++) {
- closure.vals[i * cols + j] = e_tree_model_value_at (source, map_table[i], col->compare_col);
- }
- closure.ascending[j] = column.ascending;
- closure.compare[j] = col->compare;
- }
-
- map = g_new(int, count);
- for (i = 0; i < count; i++) {
- map[i] = i;
- }
-
- e_sort(map, count, sizeof(int), e_sort_callback, &closure);
-
- map_copy = g_new(ETreePath, count);
- for (i = 0; i < count; i++) {
- map_copy[i] = map_table[i];
- }
- for (i = 0; i < count; i++) {
- map_table[i] = map_copy[map[i]];
- }
-
- g_free(map);
- g_free(map_copy);
-
- g_free(closure.vals);
- g_free(closure.ascending);
- g_free(closure.compare);
-}
-
-/* FIXME: This could be done in time log n instead of time n with a binary search. */
-int
-e_table_sorting_utils_tree_check_position (ETreeModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, ETreePath *map_table, int count, int old_index)
-{
- int i;
- ETreePath path;
-
- i = old_index;
- path = map_table[i];
-
- if (i < count - 1 && etsu_tree_compare(source, sort_info, full_header, map_table[i + 1], path) < 0) {
- i ++;
- while (i < count - 1 && etsu_tree_compare(source, sort_info, full_header, map_table[i], path) < 0)
- i ++;
- } else if (i > 0 && etsu_tree_compare(source, sort_info, full_header, map_table[i - 1], path) > 0) {
- i --;
- while (i > 0 && etsu_tree_compare(source, sort_info, full_header, map_table[i], path) > 0)
- i --;
- }
- return i;
-}
-
-/* FIXME: This does not pay attention to making sure that it's a stable insert. This needs to be fixed. */
-int
-e_table_sorting_utils_tree_insert(ETreeModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, ETreePath *map_table, int count, ETreePath path)
-{
- size_t start;
- size_t end;
- ETreeSortClosure closure;
-
- closure.tree = source;
- closure.sort_info = sort_info;
- closure.full_header = full_header;
-
- e_bsearch(&path, map_table, count, sizeof(ETreePath), e_sort_tree_callback, &closure, &start, &end);
- return end;
-}
diff --git a/widgets/table/e-table-sorting-utils.h b/widgets/table/e-table-sorting-utils.h
deleted file mode 100644
index 794ead0ac9..0000000000
--- a/widgets/table/e-table-sorting-utils.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-sorting-utils.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SORTING_UTILS_H_
-#define _E_TABLE_SORTING_UTILS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-tree-model.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-header.h>
-gboolean e_table_sorting_utils_affects_sort (ETableSortInfo *sort_info,
- ETableHeader *full_header,
- int col);
-
-
-
-void e_table_sorting_utils_sort (ETableModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *full_header,
- int *map_table,
- int rows);
-int e_table_sorting_utils_insert (ETableModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *full_header,
- int *map_table,
- int rows,
- int row);
-int e_table_sorting_utils_check_position (ETableModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *full_header,
- int *map_table,
- int rows,
- int view_row);
-
-
-
-void e_table_sorting_utils_tree_sort (ETreeModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *full_header,
- ETreePath *map_table,
- int count);
-int e_table_sorting_utils_tree_check_position (ETreeModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *full_header,
- ETreePath *map_table,
- int count,
- int old_index);
-int e_table_sorting_utils_tree_insert (ETreeModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *full_header,
- ETreePath *map_table,
- int count,
- ETreePath path);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_TABLE_SORTING_UTILS_H_ */
diff --git a/widgets/table/e-table-specification.c b/widgets/table/e-table-specification.c
deleted file mode 100644
index 3fcc28689d..0000000000
--- a/widgets/table/e-table-specification.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-specification.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-table-specification.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-
-static GObjectClass *etsp_parent_class;
-
-static void
-etsp_finalize (GObject *object)
-{
- ETableSpecification *etsp = E_TABLE_SPECIFICATION (object);
- int i;
-
- if (etsp->columns) {
- for (i = 0; etsp->columns[i]; i++) {
- g_object_unref (etsp->columns[i]);
- }
- g_free (etsp->columns);
- etsp->columns = NULL;
- }
-
- if (etsp->state)
- g_object_unref (etsp->state);
- etsp->state = NULL;
-
- g_free (etsp->click_to_add_message);
- etsp->click_to_add_message = NULL;
-
- g_free (etsp->domain);
- etsp->domain = NULL;
-
- etsp_parent_class->finalize (object);
-}
-
-static void
-etsp_class_init (GObjectClass *klass)
-{
- etsp_parent_class = g_type_class_peek_parent (klass);
-
- klass->finalize = etsp_finalize;
-}
-
-static void
-etsp_init (ETableSpecification *etsp)
-{
- etsp->columns = NULL;
- etsp->state = NULL;
-
- etsp->alternating_row_colors = TRUE;
- etsp->no_headers = FALSE;
- etsp->click_to_add = FALSE;
- etsp->click_to_add_end = FALSE;
- etsp->horizontal_draw_grid = FALSE;
- etsp->vertical_draw_grid = FALSE;
- etsp->draw_focus = TRUE;
- etsp->horizontal_scrolling = FALSE;
- etsp->horizontal_resize = FALSE;
- etsp->allow_grouping = TRUE;
-
- etsp->cursor_mode = E_CURSOR_SIMPLE;
- etsp->selection_mode = GTK_SELECTION_MULTIPLE;
-
- etsp->click_to_add_message = NULL;
- etsp->domain = NULL;
-}
-
-E_MAKE_TYPE (e_table_specification, "ETableSpecification", ETableSpecification, etsp_class_init, etsp_init, G_TYPE_OBJECT)
-
-/**
- * e_table_specification_new:
- *
- * Creates a new %ETableSpecification object. This object is used to hold the
- * information about the rendering information for ETable.
- *
- * Returns: a newly created %ETableSpecification object.
- */
-ETableSpecification *
-e_table_specification_new (void)
-{
- ETableSpecification *etsp = g_object_new (E_TABLE_SPECIFICATION_TYPE, NULL);
-
- return (ETableSpecification *) etsp;
-}
-
-/**
- * e_table_specification_load_from_file:
- * @specification: An ETableSpecification that you want to modify
- * @filename: a filename that contains an ETableSpecification
- *
- * This routine modifies @specification to reflect the state described
- * by the file @filename.
- *
- * Returns: TRUE on success, FALSE on failure.
- */
-gboolean
-e_table_specification_load_from_file (ETableSpecification *specification,
- const char *filename)
-{
- xmlDoc *doc;
-
- if (!g_file_test (filename, G_FILE_TEST_EXISTS))
- return FALSE;
-
- doc = xmlParseFile (filename);
- if (doc) {
- xmlNode *node = xmlDocGetRootElement (doc);
- e_table_specification_load_from_node (specification, node);
- xmlFreeDoc (doc);
- return TRUE;
- }
- return FALSE;
-}
-
-/**
- * e_table_specification_load_from_string:
- * @specification: An ETableSpecification that you want to modify
- * @xml: a stringified representation of an ETableSpecification description.
- *
- * This routine modifies @specification to reflect the state described
- * by @xml. @xml is typically returned by e_table_specification_save_to_string
- * or it can be embedded in your source code.
- *
- * Returns: TRUE on success, FALSE on failure.
- */
-gboolean
-e_table_specification_load_from_string (ETableSpecification *specification,
- const char *xml)
-{
- xmlDoc *doc;
- doc = xmlParseMemory ( (char *) xml, strlen (xml));
- if (doc) {
- xmlNode *node = xmlDocGetRootElement (doc);
- e_table_specification_load_from_node (specification, node);
- xmlFreeDoc (doc);
- return TRUE;
- }
-
- return FALSE;
-}
-
-/**
- * e_table_specification_load_from_node:
- * @specification: An ETableSpecification that you want to modify
- * @node: an xmlNode with an XML ETableSpecification description.
- *
- * This routine modifies @specification to reflect the state described
- * by @node.
- */
-void
-e_table_specification_load_from_node (ETableSpecification *specification,
- const xmlNode *node)
-{
- char *temp;
- xmlNode *children;
- GList *list = NULL, *list2;
- int i;
-
- specification->no_headers = e_xml_get_bool_prop_by_name (node, "no-headers");
- specification->click_to_add = e_xml_get_bool_prop_by_name (node, "click-to-add");
- specification->click_to_add_end = e_xml_get_bool_prop_by_name (node, "click-to-add-end") && specification->click_to_add;
- specification->alternating_row_colors = e_xml_get_bool_prop_by_name_with_default (node, "alternating-row-colors", TRUE);
- specification->horizontal_draw_grid = e_xml_get_bool_prop_by_name (node, "horizontal-draw-grid");
- specification->vertical_draw_grid = e_xml_get_bool_prop_by_name (node, "vertical-draw-grid");
- if (e_xml_get_bool_prop_by_name_with_default(node, "draw-grid", TRUE) ==
- e_xml_get_bool_prop_by_name_with_default(node, "draw-grid", FALSE)) {
- specification->horizontal_draw_grid =
- specification->vertical_draw_grid = e_xml_get_bool_prop_by_name (node, "draw-grid");
- }
- specification->draw_focus = e_xml_get_bool_prop_by_name_with_default (node, "draw-focus", TRUE);
- specification->horizontal_scrolling = e_xml_get_bool_prop_by_name_with_default (node, "horizontal-scrolling", FALSE);
- specification->horizontal_resize = e_xml_get_bool_prop_by_name_with_default (node, "horizontal-resize", FALSE);
- specification->allow_grouping = e_xml_get_bool_prop_by_name_with_default (node, "allow-grouping", TRUE);
-
- specification->selection_mode = GTK_SELECTION_MULTIPLE;
- temp = e_xml_get_string_prop_by_name (node, "selection-mode");
- if (temp && !g_strcasecmp (temp, "single")) {
- specification->selection_mode = GTK_SELECTION_SINGLE;
- } else if (temp && !g_strcasecmp (temp, "browse")) {
- specification->selection_mode = GTK_SELECTION_BROWSE;
- } else if (temp && !g_strcasecmp (temp, "extended")) {
- specification->selection_mode = GTK_SELECTION_EXTENDED;
- }
- g_free (temp);
-
- specification->cursor_mode = E_CURSOR_SIMPLE;
- temp = e_xml_get_string_prop_by_name (node, "cursor-mode");
- if (temp && !g_strcasecmp (temp, "line")) {
- specification->cursor_mode = E_CURSOR_LINE;
- } else if (temp && !g_strcasecmp (temp, "spreadsheet")) {
- specification->cursor_mode = E_CURSOR_SPREADSHEET;
- }
- g_free (temp);
-
- g_free (specification->click_to_add_message);
- specification->click_to_add_message =
- e_xml_get_string_prop_by_name (
- node, "_click-to-add-message");
-
- g_free (specification->domain);
- specification->domain =
- e_xml_get_string_prop_by_name (
- node, "gettext-domain");
- if (specification->domain && !*specification->domain) {
- g_free (specification->domain);
- specification->domain = NULL;
- }
-
- if (specification->state)
- g_object_unref (specification->state);
- specification->state = NULL;
- if (specification->columns) {
- for (i = 0; specification->columns[i]; i++) {
- g_object_unref (specification->columns[i]);
- }
- g_free (specification->columns);
- }
- specification->columns = NULL;
-
- for (children = node->xmlChildrenNode; children; children = children->next) {
- if (!strcmp (children->name, "ETableColumn")) {
- ETableColumnSpecification *col_spec = e_table_column_specification_new ();
-
- e_table_column_specification_load_from_node (col_spec, children);
- list = g_list_append (list, col_spec);
- } else if (specification->state == NULL && !strcmp (children->name, "ETableState")) {
- specification->state = e_table_state_new ();
- e_table_state_load_from_node (specification->state, children);
- e_table_sort_info_set_can_group (specification->state->sort_info, specification->allow_grouping);
- }
- }
-
- if (specification->state == NULL) {
- /* Make the default state. */
- specification->state = e_table_state_vanilla (g_list_length (list));
- }
-
- specification->columns = g_new (ETableColumnSpecification *, g_list_length (list) + 1);
- for (list2 = list, i = 0; list2; list2 = g_list_next (list2), i++) {
- specification->columns[i] = list2->data;
- }
- specification->columns[i] = NULL;
- g_list_free (list);
-}
-
-/**
- * e_table_specification_save_to_file:
- * @specification: An %ETableSpecification that you want to save
- * @filename: a file name to store the specification.
- *
- * This routine stores the @specification into @filename.
- *
- * Returns: 0 on success or -1 on error.
- */
-int
-e_table_specification_save_to_file (ETableSpecification *specification,
- const char *filename)
-{
- xmlDoc *doc;
- int ret;
-
- g_return_val_if_fail (specification != NULL, -1);
- g_return_val_if_fail (filename != NULL, -1);
- g_return_val_if_fail (E_IS_TABLE_SPECIFICATION (specification), -1);
-
- if ((doc = xmlNewDoc ("1.0")) == NULL)
- return -1;
-
- xmlDocSetRootElement (doc, e_table_specification_save_to_node (specification, doc));
-
- ret = e_xml_save_file (filename, doc);
-
- xmlFreeDoc (doc);
-
- return ret;
-}
-
-/**
- * e_table_specification_save_to_string:
- * @specification: An %ETableSpecification that you want to stringify
- *
- * Saves the state of @specification to a string.
- *
- * Returns: an g_alloc() allocated string containing the stringified
- * representation of @specification. This stringified representation
- * uses XML as a convenience.
- */
-char *
-e_table_specification_save_to_string (ETableSpecification *specification)
-{
- char *ret_val;
- xmlChar *string;
- int length;
- xmlDoc *doc;
-
- g_return_val_if_fail (specification != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_SPECIFICATION (specification), NULL);
-
- doc = xmlNewDoc ("1.0");
- xmlDocSetRootElement (doc, e_table_specification_save_to_node (specification, doc));
- xmlDocDumpMemory (doc, &string, &length);
-
- ret_val = g_strdup (string);
- xmlFree (string);
- return ret_val;
-}
-
-/**
- * e_table_specification_save_to_node:
- * @specification: An ETableSpecification that you want to store.
- * @doc: Node where the specification is saved
- *
- * This routine saves the %ETableSpecification state in the object @specification
- * into the xmlDoc represented by @doc.
- *
- * Returns: The node that has been attached to @doc with the contents
- * of the ETableSpecification.
- */
-xmlNode *
-e_table_specification_save_to_node (ETableSpecification *specification,
- xmlDoc *doc)
-{
- xmlNode *node;
- char *s;
-
- g_return_val_if_fail (doc != NULL, NULL);
- g_return_val_if_fail (specification != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_SPECIFICATION (specification), NULL);
-
- node = xmlNewNode (NULL, "ETableSpecification");
- e_xml_set_bool_prop_by_name (node, "no-headers", specification->no_headers);
- e_xml_set_bool_prop_by_name (node, "click-to-add", specification->click_to_add);
- e_xml_set_bool_prop_by_name (node, "click-to-add-end", specification->click_to_add_end && specification->click_to_add);
- e_xml_set_bool_prop_by_name (node, "alternating-row-colors", specification->alternating_row_colors);
- e_xml_set_bool_prop_by_name (node, "horizontal-draw-grid", specification->horizontal_draw_grid);
- e_xml_set_bool_prop_by_name (node, "vertical-draw-grid", specification->vertical_draw_grid);
- e_xml_set_bool_prop_by_name (node, "draw-focus", specification->draw_focus);
- e_xml_set_bool_prop_by_name (node, "horizontal-scrolling", specification->horizontal_scrolling);
- e_xml_set_bool_prop_by_name (node, "horizontal-resize", specification->horizontal_resize);
- e_xml_set_bool_prop_by_name (node, "allow-grouping", specification->allow_grouping);
-
- switch (specification->selection_mode){
- case GTK_SELECTION_SINGLE:
- s = "single";
- break;
- case GTK_SELECTION_BROWSE:
- s = "browse";
- break;
- default:
- case GTK_SELECTION_EXTENDED:
- s = "extended";
- }
- xmlSetProp (node, "selection-mode", s);
- if (specification->cursor_mode == E_CURSOR_LINE)
- s = "line";
- else
- s = "cell";
- xmlSetProp (node, "cursor-mode", s);
-
- xmlSetProp (node, "_click-to-add-message", specification->click_to_add_message);
- xmlSetProp (node, "gettext-domain", specification->domain);
-
- if (specification->columns){
- int i;
-
- for (i = 0; specification->columns [i]; i++)
- e_table_column_specification_save_to_node (
- specification->columns [i],
- node);
- }
-
- if (specification->state)
- e_table_state_save_to_node (specification->state, node);
-
- return node;
-}
-
-/**
- * e_table_specification_duplicate:
- * @spec: specification to duplicate
- *
- * This creates a copy of the %ETableSpecification @spec
- *
- * Returns: The duplicated %ETableSpecification.
- */
-ETableSpecification *
-e_table_specification_duplicate (ETableSpecification *spec)
-{
- ETableSpecification *new_spec;
- char *spec_str;
-
- g_return_val_if_fail (spec != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_SPECIFICATION (spec), NULL);
-
- new_spec = e_table_specification_new ();
- spec_str = e_table_specification_save_to_string (spec);
- e_table_specification_load_from_string (new_spec, spec_str);
- g_free (spec_str);
-
- return new_spec;
-}
diff --git a/widgets/table/e-table-specification.h b/widgets/table/e-table-specification.h
deleted file mode 100644
index 961752b9b8..0000000000
--- a/widgets/table/e-table-specification.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-specification.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SPECIFICATION_H_
-#define _E_TABLE_SPECIFICATION_H_
-
-#include <glib-object.h>
-#include <libxml/tree.h>
-#include <gal/widgets/e-selection-model.h>
-#include <gal/e-table/e-table-state.h>
-#include <gal/e-table/e-table-column-specification.h>
-#include <gal/e-table/e-table-defines.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SPECIFICATION_TYPE (e_table_specification_get_type ())
-#define E_TABLE_SPECIFICATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SPECIFICATION_TYPE, ETableSpecification))
-#define E_TABLE_SPECIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SPECIFICATION_TYPE, ETableSpecificationClass))
-#define E_IS_TABLE_SPECIFICATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SPECIFICATION_TYPE))
-#define E_IS_TABLE_SPECIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SPECIFICATION_TYPE))
-#define E_TABLE_SPECIFICATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_SPECIFICATION_TYPE, ETableSpecificationClass))
-
-typedef struct {
- GObject base;
-
- ETableColumnSpecification **columns;
- ETableState *state;
-
- guint alternating_row_colors : 1;
- guint no_headers : 1;
- guint click_to_add : 1;
- guint click_to_add_end : 1;
- guint horizontal_draw_grid : 1;
- guint vertical_draw_grid : 1;
- guint draw_focus : 1;
- guint horizontal_scrolling : 1;
- guint horizontal_resize : 1;
- guint allow_grouping : 1;
- GtkSelectionMode selection_mode;
- ECursorMode cursor_mode;
-
- char *click_to_add_message;
- char *domain;
-} ETableSpecification;
-
-typedef struct {
- GObjectClass parent_class;
-} ETableSpecificationClass;
-
-GType e_table_specification_get_type (void);
-ETableSpecification *e_table_specification_new (void);
-
-gboolean e_table_specification_load_from_file (ETableSpecification *specification,
- const char *filename);
-gboolean e_table_specification_load_from_string (ETableSpecification *specification,
- const char *xml);
-void e_table_specification_load_from_node (ETableSpecification *specification,
- const xmlNode *node);
-
-int e_table_specification_save_to_file (ETableSpecification *specification,
- const char *filename);
-char *e_table_specification_save_to_string (ETableSpecification *specification);
-xmlNode *e_table_specification_save_to_node (ETableSpecification *specification,
- xmlDoc *doc);
-ETableSpecification *e_table_specification_duplicate (ETableSpecification *spec);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SPECIFICATION_H_ */
diff --git a/widgets/table/e-table-state.c b/widgets/table/e-table-state.c
deleted file mode 100644
index c66e5933e0..0000000000
--- a/widgets/table/e-table-state.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-state.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include "e-table-state.h"
-
-
-#define STATE_VERSION 0.1
-
-static GObjectClass *etst_parent_class;
-
-static void
-etst_dispose (GObject *object)
-{
- ETableState *etst = E_TABLE_STATE (object);
-
- if (etst->sort_info) {
- g_object_unref (etst->sort_info);
- etst->sort_info = NULL;
- }
-
- G_OBJECT_CLASS (etst_parent_class)->dispose (object);
-}
-
-static void
-etst_finalize (GObject *object)
-{
- ETableState *etst = E_TABLE_STATE (object);
-
- if (etst->columns) {
- g_free (etst->columns);
- etst->columns = NULL;
- }
-
- if (etst->expansions) {
- g_free (etst->expansions);
- etst->expansions = NULL;
- }
-
- G_OBJECT_CLASS (etst_parent_class)->finalize (object);
-}
-
-static void
-etst_class_init (GObjectClass *klass)
-{
- etst_parent_class = g_type_class_peek_parent (klass);
-
- klass->dispose = etst_dispose;
- klass->finalize = etst_finalize;
-}
-
-static void
-etst_init (ETableState *state)
-{
- state->columns = NULL;
- state->expansions = NULL;
- state->sort_info = e_table_sort_info_new();
-}
-
-E_MAKE_TYPE(e_table_state, "ETableState", ETableState, etst_class_init, etst_init, G_TYPE_OBJECT)
-
-ETableState *
-e_table_state_new (void)
-{
- return (ETableState *) g_object_new (E_TABLE_STATE_TYPE, NULL);
-}
-
-ETableState *
-e_table_state_vanilla (int col_count)
-{
- GString *str;
- int i;
- ETableState *res;
-
- str = g_string_new ("<ETableState>\n");
- for (i = 0; i < col_count; i++)
- g_string_append_printf (str, " <column source=\"%d\"/>\n", i);
- g_string_append (str, " <grouping></grouping>\n");
- g_string_append (str, "</ETableState>\n");
-
- res = e_table_state_new ();
- e_table_state_load_from_string (res, str->str);
-
- g_string_free (str, TRUE);
- return res;
-}
-
-gboolean
-e_table_state_load_from_file (ETableState *state,
- const char *filename)
-{
- xmlDoc *doc;
-
- if (!g_file_test (filename, G_FILE_TEST_EXISTS))
- return FALSE;
-
- doc = xmlParseFile (filename);
- if (doc) {
- xmlNode *node = xmlDocGetRootElement(doc);
- e_table_state_load_from_node(state, node);
- xmlFreeDoc(doc);
- return TRUE;
- }
- return FALSE;
-}
-
-void
-e_table_state_load_from_string (ETableState *state,
- const char *xml)
-{
- xmlDoc *doc;
- doc = xmlParseMemory ((char *) xml, strlen(xml));
- if (doc) {
- xmlNode *node = xmlDocGetRootElement(doc);
- e_table_state_load_from_node(state, node);
- xmlFreeDoc(doc);
- }
-}
-
-typedef struct {
- int column;
- double expansion;
-} int_and_double;
-
-void
-e_table_state_load_from_node (ETableState *state,
- const xmlNode *node)
-{
- xmlNode *children;
- GList *list = NULL, *iterator;
- gdouble state_version;
- int i;
-
- state_version = e_xml_get_double_prop_by_name_with_default (
- node, "state-version", STATE_VERSION);
-
- if (state->sort_info)
- g_object_unref (state->sort_info);
-
- state->sort_info = NULL;
- children = node->xmlChildrenNode;
- for (; children; children = children->next) {
- if (!strcmp (children->name, "column")) {
- int_and_double *column_info = g_new(int_and_double, 1);
-
- column_info->column = e_xml_get_integer_prop_by_name(
- children, "source");
- column_info->expansion =
- e_xml_get_double_prop_by_name_with_default(
- children, "expansion", 1);
-
- list = g_list_append (list, column_info);
- } else if (state->sort_info == NULL &&
- !strcmp (children->name, "grouping")) {
- state->sort_info = e_table_sort_info_new();
- e_table_sort_info_load_from_node(
- state->sort_info, children, state_version);
- }
- }
- g_free(state->columns);
- g_free(state->expansions);
- state->col_count = g_list_length(list);
- state->columns = g_new(int, state->col_count);
- state->expansions = g_new(double, state->col_count);
-
- for (iterator = list, i = 0; iterator; i++) {
- int_and_double *column_info = iterator->data;
-
- state->columns [i] = column_info->column;
- state->expansions [i] = column_info->expansion;
- g_free (column_info);
- iterator = g_list_next (iterator);
- }
- g_list_free(list);
-}
-
-void
-e_table_state_save_to_file (ETableState *state,
- const char *filename)
-{
- xmlDoc *doc;
-
- if ((doc = xmlNewDoc ("1.0")) == NULL)
- return;
-
- xmlDocSetRootElement (doc, e_table_state_save_to_node (state, NULL));
-
- e_xml_save_file (filename, doc);
-
- xmlFreeDoc (doc);
-}
-
-char *
-e_table_state_save_to_string (ETableState *state)
-{
- char *ret_val;
- xmlChar *string;
- int length;
- xmlDoc *doc;
-
- doc = xmlNewDoc("1.0");
- xmlDocSetRootElement(doc, e_table_state_save_to_node(state, NULL));
- xmlDocDumpMemory(doc, &string, &length);
- xmlFreeDoc(doc);
-
- ret_val = g_strdup(string);
- xmlFree(string);
- return ret_val;
-}
-
-xmlNode *
-e_table_state_save_to_node (ETableState *state,
- xmlNode *parent)
-{
- int i;
- xmlNode *node;
-
- if (parent)
- node = xmlNewChild (parent, NULL, "ETableState", NULL);
- else
- node = xmlNewNode (NULL, "ETableState");
-
- e_xml_set_double_prop_by_name(node, "state-version", STATE_VERSION);
-
- for (i = 0; i < state->col_count; i++) {
- int column = state->columns[i];
- double expansion = state->expansions[i];
- xmlNode *new_node;
-
- new_node = xmlNewChild(node, NULL, "column", NULL);
- e_xml_set_integer_prop_by_name (new_node, "source", column);
- if (expansion >= -1)
- e_xml_set_double_prop_by_name(new_node, "expansion", expansion);
- }
-
-
- e_table_sort_info_save_to_node(state->sort_info, node);
-
- return node;
-}
-
-/**
- * e_table_state_duplicate:
- * @state: The ETableState to duplicate
- *
- * This creates a copy of the %ETableState @state
- *
- * Returns: The duplicated %ETableState.
- */
-ETableState *
-e_table_state_duplicate (ETableState *state)
-{
- ETableState *new_state;
- char *copy;
-
- g_return_val_if_fail (state != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_STATE (state), NULL);
-
- new_state = e_table_state_new ();
- copy = e_table_state_save_to_string (state);
- e_table_state_load_from_string (new_state, copy);
- g_free (copy);
-
- e_table_sort_info_set_can_group
- (new_state->sort_info,
- e_table_sort_info_get_can_group (state->sort_info));
-
- return new_state;
-}
diff --git a/widgets/table/e-table-state.h b/widgets/table/e-table-state.h
deleted file mode 100644
index 47e0c7b9b8..0000000000
--- a/widgets/table/e-table-state.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-state.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_STATE_H_
-#define _E_TABLE_STATE_H_
-
-#include <glib-object.h>
-#include <libxml/tree.h>
-#include <gal/e-table/e-table-sort-info.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_STATE_TYPE (e_table_state_get_type ())
-#define E_TABLE_STATE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_STATE_TYPE, ETableState))
-#define E_TABLE_STATE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_STATE_TYPE, ETableStateClass))
-#define E_IS_TABLE_STATE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_STATE_TYPE))
-#define E_IS_TABLE_STATE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_STATE_TYPE))
-#define E_TABLE_STATE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_STATE_TYPE, ETableStateClass))
-
-typedef struct {
- GObject base;
-
- ETableSortInfo *sort_info;
- int col_count;
- int *columns;
- double *expansions;
-} ETableState;
-
-typedef struct {
- GObjectClass parent_class;
-} ETableStateClass;
-
-GType e_table_state_get_type (void);
-ETableState *e_table_state_new (void);
-
-ETableState *e_table_state_vanilla (int col_count);
-
-gboolean e_table_state_load_from_file (ETableState *state,
- const char *filename);
-void e_table_state_load_from_string (ETableState *state,
- const char *xml);
-void e_table_state_load_from_node (ETableState *state,
- const xmlNode *node);
-
-void e_table_state_save_to_file (ETableState *state,
- const char *filename);
-char *e_table_state_save_to_string (ETableState *state);
-xmlNode *e_table_state_save_to_node (ETableState *state,
- xmlNode *parent);
-ETableState *e_table_state_duplicate (ETableState *state);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_STATE_H_ */
diff --git a/widgets/table/e-table-subset-variable.c b/widgets/table/e-table-subset-variable.c
deleted file mode 100644
index efe6529806..0000000000
--- a/widgets/table/e-table-subset-variable.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-subset-variable.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-util.h"
-#include "e-table-subset-variable.h"
-
-#define ETSSV_CLASS(e) (E_TABLE_SUBSET_VARIABLE_GET_CLASS (e))
-
-#define INCREMENT_AMOUNT 10
-
-static void
-etssv_add (ETableSubsetVariable *etssv,
- gint row)
-{
- ETableModel *etm = E_TABLE_MODEL(etssv);
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
-
- e_table_model_pre_change(etm);
-
- if (etss->n_map + 1 > etssv->n_vals_allocated){
- etssv->n_vals_allocated += INCREMENT_AMOUNT;
- etss->map_table = g_realloc (etss->map_table, etssv->n_vals_allocated * sizeof(int));
- }
-
- etss->map_table[etss->n_map++] = row;
-
- e_table_model_row_inserted (etm, etss->n_map - 1);
-}
-
-static void
-etssv_add_array (ETableSubsetVariable *etssv,
- const gint *array,
- gint count)
-{
- ETableModel *etm = E_TABLE_MODEL(etssv);
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- int i;
-
- e_table_model_pre_change(etm);
-
- if (etss->n_map + count > etssv->n_vals_allocated){
- etssv->n_vals_allocated += MAX(INCREMENT_AMOUNT, count);
- etss->map_table = g_realloc (etss->map_table, etssv->n_vals_allocated * sizeof(int));
- }
- for (i = 0; i < count; i++)
- etss->map_table[etss->n_map++] = array[i];
-
- e_table_model_changed (etm);
-}
-
-static void
-etssv_add_all (ETableSubsetVariable *etssv)
-{
- ETableModel *etm = E_TABLE_MODEL(etssv);
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- int rows;
- int i;
-
- e_table_model_pre_change(etm);
-
- rows = e_table_model_row_count(etss->source);
- if (etss->n_map + rows > etssv->n_vals_allocated){
- etssv->n_vals_allocated += MAX(INCREMENT_AMOUNT, rows);
- etss->map_table = g_realloc (etss->map_table, etssv->n_vals_allocated * sizeof(int));
- }
- for (i = 0; i < rows; i++)
- etss->map_table[etss->n_map++] = i;
-
- e_table_model_changed (etm);
-}
-
-static gboolean
-etssv_remove (ETableSubsetVariable *etssv,
- gint row)
-{
- ETableModel *etm = E_TABLE_MODEL(etssv);
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- int i;
-
- for (i = 0; i < etss->n_map; i++){
- if (etss->map_table[i] == row) {
- e_table_model_pre_change (etm);
- memmove (etss->map_table + i, etss->map_table + i + 1, (etss->n_map - i - 1) * sizeof(int));
- etss->n_map --;
-
- e_table_model_row_deleted (etm, i);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static void
-etssv_class_init (GObjectClass *object_class)
-{
- ETableSubsetVariableClass *klass = E_TABLE_SUBSET_VARIABLE_CLASS(object_class);
-
- klass->add = etssv_add;
- klass->add_array = etssv_add_array;
- klass->add_all = etssv_add_all;
- klass->remove = etssv_remove;
-}
-
-E_MAKE_TYPE(e_table_subset_variable, "ETableSubsetVariable", ETableSubsetVariable, etssv_class_init, NULL, E_TABLE_SUBSET_TYPE)
-
-ETableModel *
-e_table_subset_variable_construct (ETableSubsetVariable *etssv,
- ETableModel *source)
-{
- if (e_table_subset_construct (E_TABLE_SUBSET(etssv), source, 1) == NULL)
- return NULL;
- E_TABLE_SUBSET(etssv)->n_map = 0;
-
- return E_TABLE_MODEL (etssv);
-}
-
-ETableModel *
-e_table_subset_variable_new (ETableModel *source)
-{
- ETableSubsetVariable *etssv = g_object_new (E_TABLE_SUBSET_VARIABLE_TYPE, NULL);
-
- if (e_table_subset_variable_construct (etssv, source) == NULL){
- g_object_unref (etssv);
- return NULL;
- }
-
- return (ETableModel *) etssv;
-}
-
-void
-e_table_subset_variable_add (ETableSubsetVariable *etssv,
- gint row)
-{
- g_return_if_fail (etssv != NULL);
- g_return_if_fail (E_IS_TABLE_SUBSET_VARIABLE(etssv));
-
- if (ETSSV_CLASS(etssv)->add)
- ETSSV_CLASS (etssv)->add (etssv, row);
-}
-
-void
-e_table_subset_variable_add_array (ETableSubsetVariable *etssv,
- const gint *array,
- gint count)
-{
- g_return_if_fail (etssv != NULL);
- g_return_if_fail (E_IS_TABLE_SUBSET_VARIABLE(etssv));
-
- if (ETSSV_CLASS(etssv)->add_array)
- ETSSV_CLASS (etssv)->add_array (etssv, array, count);
-}
-
-void
-e_table_subset_variable_add_all (ETableSubsetVariable *etssv)
-{
- g_return_if_fail (etssv != NULL);
- g_return_if_fail (E_IS_TABLE_SUBSET_VARIABLE(etssv));
-
- if (ETSSV_CLASS(etssv)->add_all)
- ETSSV_CLASS (etssv)->add_all (etssv);
-}
-
-gboolean
-e_table_subset_variable_remove (ETableSubsetVariable *etssv,
- gint row)
-{
- g_return_val_if_fail (etssv != NULL, FALSE);
- g_return_val_if_fail (E_IS_TABLE_SUBSET_VARIABLE(etssv), FALSE);
-
- if (ETSSV_CLASS(etssv)->remove)
- return ETSSV_CLASS (etssv)->remove (etssv, row);
- else
- return FALSE;
-}
-
-void
-e_table_subset_variable_clear (ETableSubsetVariable *etssv)
-{
- ETableModel *etm = E_TABLE_MODEL(etssv);
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
-
- e_table_model_pre_change (etm);
- etss->n_map = 0;
- g_free (etss->map_table);
- etss->map_table = g_new (unsigned int, 1);
- etssv->n_vals_allocated = 1;
-
- e_table_model_changed (etm);
-}
-
-void
-e_table_subset_variable_increment (ETableSubsetVariable *etssv,
- gint position,
- gint amount)
-{
- int i;
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] >= position)
- etss->map_table[i] += amount;
- }
-}
-
-void
-e_table_subset_variable_decrement (ETableSubsetVariable *etssv,
- gint position,
- gint amount)
-{
- int i;
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] >= position)
- etss->map_table[i] -= amount;
- }
-}
-
-void
-e_table_subset_variable_set_allocation (ETableSubsetVariable *etssv,
- gint total)
-{
- ETableSubset *etss = E_TABLE_SUBSET(etssv);
- if (total <= 0)
- total = 1;
- if (total > etss->n_map){
- etss->map_table = g_realloc (etss->map_table, total * sizeof(int));
- }
-}
diff --git a/widgets/table/e-table-subset-variable.h b/widgets/table/e-table-subset-variable.h
deleted file mode 100644
index 2dc0914f9b..0000000000
--- a/widgets/table/e-table-subset-variable.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-subset-variable.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SUBSET_VARIABLE_H_
-#define _E_TABLE_SUBSET_VARIABLE_H_
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-subset.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SUBSET_VARIABLE_TYPE (e_table_subset_variable_get_type ())
-#define E_TABLE_SUBSET_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SUBSET_VARIABLE_TYPE, ETableSubsetVariable))
-#define E_TABLE_SUBSET_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SUBSET_VARIABLE_TYPE, ETableSubsetVariableClass))
-#define E_IS_TABLE_SUBSET_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SUBSET_VARIABLE_TYPE))
-#define E_IS_TABLE_SUBSET_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SUBSET_VARIABLE_TYPE))
-#define E_TABLE_SUBSET_VARIABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TABLE_SUBSET_VARIABLE_TYPE, ETableSubsetVariableClass))
-
-typedef struct {
- ETableSubset base;
-
- int n_vals_allocated;
-} ETableSubsetVariable;
-
-typedef struct {
- ETableSubsetClass parent_class;
-
- void (*add) (ETableSubsetVariable *ets,
- gint row);
- void (*add_array) (ETableSubsetVariable *ets,
- const gint *array,
- gint count);
- void (*add_all) (ETableSubsetVariable *ets);
- gboolean (*remove) (ETableSubsetVariable *ets,
- gint row);
-} ETableSubsetVariableClass;
-
-GType e_table_subset_variable_get_type (void);
-ETableModel *e_table_subset_variable_new (ETableModel *etm);
-ETableModel *e_table_subset_variable_construct (ETableSubsetVariable *etssv,
- ETableModel *source);
-void e_table_subset_variable_add (ETableSubsetVariable *ets,
- gint row);
-void e_table_subset_variable_add_array (ETableSubsetVariable *ets,
- const gint *array,
- gint count);
-void e_table_subset_variable_add_all (ETableSubsetVariable *ets);
-gboolean e_table_subset_variable_remove (ETableSubsetVariable *ets,
- gint row);
-void e_table_subset_variable_clear (ETableSubsetVariable *ets);
-void e_table_subset_variable_increment (ETableSubsetVariable *ets,
- gint position,
- gint amount);
-void e_table_subset_variable_decrement (ETableSubsetVariable *ets,
- gint position,
- gint amount);
-void e_table_subset_variable_set_allocation (ETableSubsetVariable *ets,
- gint total);
-G_END_DECLS
-
-#endif /* _E_TABLE_SUBSET_VARIABLE_H_ */
-
diff --git a/widgets/table/e-table-subset.c b/widgets/table/e-table-subset.c
deleted file mode 100644
index a237ba2d94..0000000000
--- a/widgets/table/e-table-subset.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-subset.c - Implements a table that contains a subset of another table.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include "gal/util/e-util.h"
-#include "e-table-subset.h"
-
-static void etss_proxy_model_pre_change_real (ETableSubset *etss, ETableModel *etm);
-static void etss_proxy_model_no_change_real (ETableSubset *etss, ETableModel *etm);
-static void etss_proxy_model_changed_real (ETableSubset *etss, ETableModel *etm);
-static void etss_proxy_model_row_changed_real (ETableSubset *etss, ETableModel *etm, int row);
-static void etss_proxy_model_cell_changed_real (ETableSubset *etss, ETableModel *etm, int col, int row);
-static void etss_proxy_model_rows_inserted_real (ETableSubset *etss, ETableModel *etm, int row, int count);
-static void etss_proxy_model_rows_deleted_real (ETableSubset *etss, ETableModel *etm, int row, int count);
-
-#define d(x)
-
-static ETableModelClass *etss_parent_class;
-
-#define ETSS_CLASS(object) (E_TABLE_SUBSET_GET_CLASS(object))
-
-#define VALID_ROW(etss, row) (row >= -1 && row < etss->n_map)
-#define MAP_ROW(etss, row) (row == -1 ? -1 : etss->map_table[row])
-
-static gint
-etss_get_view_row (ETableSubset *etss, int row)
-{
- const int n = etss->n_map;
- const int * const map_table = etss->map_table;
- int i;
-
- int end = MIN(etss->n_map, etss->last_access + 10);
- int start = MAX(0, etss->last_access - 10);
- int initial = MAX (MIN (etss->last_access, end), start);
-
- for (i = initial; i < end; i++) {
- if (map_table [i] == row){
- d(g_print("a) Found %d from %d\n", i, etss->last_access));
- etss->last_access = i;
- return i;
- }
- }
-
- for (i = initial - 1; i >= start; i--) {
- if (map_table [i] == row){
- d(g_print("b) Found %d from %d\n", i, etss->last_access));
- etss->last_access = i;
- return i;
- }
- }
-
- for (i = 0; i < n; i++){
- if (map_table [i] == row){
- d(g_print("c) Found %d from %d\n", i, etss->last_access));
- etss->last_access = i;
- return i;
- }
- }
- return -1;
-}
-
-static void
-etss_dispose (GObject *object)
-{
- ETableSubset *etss = E_TABLE_SUBSET (object);
-
- if (etss->source) {
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etss->table_model_pre_change_id);
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etss->table_model_no_change_id);
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etss->table_model_changed_id);
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etss->table_model_row_changed_id);
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etss->table_model_cell_changed_id);
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etss->table_model_rows_inserted_id);
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etss->table_model_rows_deleted_id);
-
- g_object_unref (etss->source);
- etss->source = NULL;
-
- etss->table_model_changed_id = 0;
- etss->table_model_row_changed_id = 0;
- etss->table_model_cell_changed_id = 0;
- etss->table_model_rows_inserted_id = 0;
- etss->table_model_rows_deleted_id = 0;
- }
-
- G_OBJECT_CLASS (etss_parent_class)->dispose (object);
-}
-
-static void
-etss_finalize (GObject *object)
-{
- ETableSubset *etss = E_TABLE_SUBSET (object);
-
- g_free (etss->map_table);
- etss->map_table = NULL;
-
- G_OBJECT_CLASS (etss_parent_class)->finalize (object);
-}
-
-static int
-etss_column_count (ETableModel *etm)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return e_table_model_column_count (etss->source);
-}
-
-static int
-etss_row_count (ETableModel *etm)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return etss->n_map;
-}
-
-static void *
-etss_value_at (ETableModel *etm, int col, int row)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- g_return_val_if_fail (VALID_ROW (etss, row), NULL);
-
- etss->last_access = row;
- d(g_print("g) Setting last_access to %d\n", row));
- return e_table_model_value_at (etss->source, col, MAP_ROW(etss, row));
-}
-
-static void
-etss_set_value_at (ETableModel *etm, int col, int row, const void *val)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- g_return_if_fail (VALID_ROW (etss, row));
-
- etss->last_access = row;
- d(g_print("h) Setting last_access to %d\n", row));
- e_table_model_set_value_at (etss->source, col, MAP_ROW(etss, row), val);
-}
-
-static gboolean
-etss_is_cell_editable (ETableModel *etm, int col, int row)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- g_return_val_if_fail (VALID_ROW (etss, row), FALSE);
-
- return e_table_model_is_cell_editable (etss->source, col, MAP_ROW(etss, row));
-}
-
-static gboolean
-etss_has_save_id (ETableModel *etm)
-{
- return TRUE;
-}
-
-static char *
-etss_get_save_id (ETableModel *etm, int row)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- g_return_val_if_fail (VALID_ROW (etss, row), NULL);
-
- if (e_table_model_has_save_id (etss->source))
- return e_table_model_get_save_id (etss->source, MAP_ROW(etss, row));
- else
- return g_strdup_printf ("%d", MAP_ROW(etss, row));
-}
-
-static void
-etss_append_row (ETableModel *etm, ETableModel *source, int row)
-{
- ETableSubset *etss = (ETableSubset *)etm;
- e_table_model_append_row (etss->source, source, row);
-}
-
-static void *
-etss_duplicate_value (ETableModel *etm, int col, const void *value)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return e_table_model_duplicate_value (etss->source, col, value);
-}
-
-static void
-etss_free_value (ETableModel *etm, int col, void *value)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- e_table_model_free_value (etss->source, col, value);
-}
-
-static void *
-etss_initialize_value (ETableModel *etm, int col)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return e_table_model_initialize_value (etss->source, col);
-}
-
-static gboolean
-etss_value_is_empty (ETableModel *etm, int col, const void *value)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return e_table_model_value_is_empty (etss->source, col, value);
-}
-
-static char *
-etss_value_to_string (ETableModel *etm, int col, const void *value)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return e_table_model_value_to_string (etss->source, col, value);
-}
-
-static void
-etss_class_init (GObjectClass *object_class)
-{
- ETableSubsetClass *klass = (ETableSubsetClass *) object_class;
- ETableModelClass *table_class = (ETableModelClass *) object_class;
-
- etss_parent_class = g_type_class_peek_parent (klass);
-
- object_class->dispose = etss_dispose;
- object_class->finalize = etss_finalize;
-
- table_class->column_count = etss_column_count;
- table_class->row_count = etss_row_count;
- table_class->append_row = etss_append_row;
-
- table_class->value_at = etss_value_at;
- table_class->set_value_at = etss_set_value_at;
- table_class->is_cell_editable = etss_is_cell_editable;
-
- table_class->has_save_id = etss_has_save_id;
- table_class->get_save_id = etss_get_save_id;
-
- table_class->duplicate_value = etss_duplicate_value;
- table_class->free_value = etss_free_value;
- table_class->initialize_value = etss_initialize_value;
- table_class->value_is_empty = etss_value_is_empty;
- table_class->value_to_string = etss_value_to_string;
-
- klass->proxy_model_pre_change = etss_proxy_model_pre_change_real;
- klass->proxy_model_no_change = etss_proxy_model_no_change_real;
- klass->proxy_model_changed = etss_proxy_model_changed_real;
- klass->proxy_model_row_changed = etss_proxy_model_row_changed_real;
- klass->proxy_model_cell_changed = etss_proxy_model_cell_changed_real;
- klass->proxy_model_rows_inserted = etss_proxy_model_rows_inserted_real;
- klass->proxy_model_rows_deleted = etss_proxy_model_rows_deleted_real;
-}
-
-static void
-etss_init (ETableSubset *etss)
-{
- etss->last_access = 0;
-}
-
-E_MAKE_TYPE(e_table_subset, "ETableSubset", ETableSubset, etss_class_init, etss_init, E_TABLE_MODEL_TYPE)
-
-static void
-etss_proxy_model_pre_change_real (ETableSubset *etss, ETableModel *etm)
-{
- e_table_model_pre_change (E_TABLE_MODEL (etss));
-}
-
-static void
-etss_proxy_model_no_change_real (ETableSubset *etss, ETableModel *etm)
-{
- e_table_model_no_change (E_TABLE_MODEL (etss));
-}
-
-static void
-etss_proxy_model_changed_real (ETableSubset *etss, ETableModel *etm)
-{
- e_table_model_changed (E_TABLE_MODEL (etss));
-}
-
-static void
-etss_proxy_model_row_changed_real (ETableSubset *etss, ETableModel *etm, int row)
-{
- int view_row = etss_get_view_row (etss, row);
- if (view_row != -1)
- e_table_model_row_changed (E_TABLE_MODEL (etss), view_row);
- else
- e_table_model_no_change (E_TABLE_MODEL (etss));
-}
-
-static void
-etss_proxy_model_cell_changed_real (ETableSubset *etss, ETableModel *etm, int col, int row)
-{
- int view_row = etss_get_view_row (etss, row);
- if (view_row != -1)
- e_table_model_cell_changed (E_TABLE_MODEL (etss), col, view_row);
- else
- e_table_model_no_change (E_TABLE_MODEL (etss));
-}
-
-static void
-etss_proxy_model_rows_inserted_real (ETableSubset *etss, ETableModel *etm, int row, int count)
-{
- e_table_model_no_change (E_TABLE_MODEL (etss));
-}
-
-static void
-etss_proxy_model_rows_deleted_real (ETableSubset *etss, ETableModel *etm, int row, int count)
-{
- e_table_model_no_change (E_TABLE_MODEL (etss));
-}
-
-static void
-etss_proxy_model_pre_change (ETableModel *etm, ETableSubset *etss)
-{
- if (ETSS_CLASS(etss)->proxy_model_pre_change)
- (ETSS_CLASS(etss)->proxy_model_pre_change) (etss, etm);
-}
-
-static void
-etss_proxy_model_no_change (ETableModel *etm, ETableSubset *etss)
-{
- if (ETSS_CLASS(etss)->proxy_model_no_change)
- (ETSS_CLASS(etss)->proxy_model_no_change) (etss, etm);
-}
-
-static void
-etss_proxy_model_changed (ETableModel *etm, ETableSubset *etss)
-{
- if (ETSS_CLASS(etss)->proxy_model_changed)
- (ETSS_CLASS(etss)->proxy_model_changed) (etss, etm);
-}
-
-static void
-etss_proxy_model_row_changed (ETableModel *etm, int row, ETableSubset *etss)
-{
- if (ETSS_CLASS(etss)->proxy_model_row_changed)
- (ETSS_CLASS(etss)->proxy_model_row_changed) (etss, etm, row);
-}
-
-static void
-etss_proxy_model_cell_changed (ETableModel *etm, int row, int col, ETableSubset *etss)
-{
- if (ETSS_CLASS(etss)->proxy_model_cell_changed)
- (ETSS_CLASS(etss)->proxy_model_cell_changed) (etss, etm, col, row);
-}
-
-static void
-etss_proxy_model_rows_inserted (ETableModel *etm, int row, int col, ETableSubset *etss)
-{
- if (ETSS_CLASS(etss)->proxy_model_rows_inserted)
- (ETSS_CLASS(etss)->proxy_model_rows_inserted) (etss, etm, row, col);
-}
-
-static void
-etss_proxy_model_rows_deleted (ETableModel *etm, int row, int col, ETableSubset *etss)
-{
- if (ETSS_CLASS(etss)->proxy_model_rows_deleted)
- (ETSS_CLASS(etss)->proxy_model_rows_deleted) (etss, etm, row, col);
-}
-
-ETableModel *
-e_table_subset_construct (ETableSubset *etss, ETableModel *source, int nvals)
-{
- unsigned int *buffer;
- int i;
-
- if (nvals) {
- buffer = (unsigned int *) g_malloc (sizeof (unsigned int) * nvals);
- if (buffer == NULL)
- return NULL;
- } else
- buffer = NULL;
- etss->map_table = buffer;
- etss->n_map = nvals;
- etss->source = source;
- g_object_ref (source);
-
- /* Init */
- for (i = 0; i < nvals; i++)
- etss->map_table [i] = i;
-
- etss->table_model_pre_change_id = g_signal_connect (G_OBJECT (source), "model_pre_change",
- G_CALLBACK (etss_proxy_model_pre_change), etss);
- etss->table_model_no_change_id = g_signal_connect (G_OBJECT (source), "model_no_change",
- G_CALLBACK (etss_proxy_model_no_change), etss);
- etss->table_model_changed_id = g_signal_connect (G_OBJECT (source), "model_changed",
- G_CALLBACK (etss_proxy_model_changed), etss);
- etss->table_model_row_changed_id = g_signal_connect (G_OBJECT (source), "model_row_changed",
- G_CALLBACK (etss_proxy_model_row_changed), etss);
- etss->table_model_cell_changed_id = g_signal_connect (G_OBJECT (source), "model_cell_changed",
- G_CALLBACK (etss_proxy_model_cell_changed), etss);
- etss->table_model_rows_inserted_id = g_signal_connect (G_OBJECT (source), "model_rows_inserted",
- G_CALLBACK (etss_proxy_model_rows_inserted), etss);
- etss->table_model_rows_deleted_id = g_signal_connect (G_OBJECT (source), "model_rows_deleted",
- G_CALLBACK (etss_proxy_model_rows_deleted), etss);
-
- return E_TABLE_MODEL (etss);
-}
-
-ETableModel *
-e_table_subset_new (ETableModel *source, const int nvals)
-{
- ETableSubset *etss = g_object_new (E_TABLE_SUBSET_TYPE, NULL);
-
- if (e_table_subset_construct (etss, source, nvals) == NULL){
- g_object_unref (etss);
- return NULL;
- }
-
- return (ETableModel *) etss;
-}
-
-int
-e_table_subset_model_to_view_row (ETableSubset *ets,
- int model_row)
-{
- int i;
- for (i = 0; i < ets->n_map; i++) {
- if (ets->map_table[i] == model_row)
- return i;
- }
- return -1;
-}
-
-int
-e_table_subset_view_to_model_row (ETableSubset *ets,
- int view_row)
-{
- if (view_row >= 0 && view_row < ets->n_map)
- return ets->map_table[view_row];
- else
- return -1;
-}
-
-ETableModel *
-e_table_subset_get_toplevel (ETableSubset *table)
-{
- g_return_val_if_fail (table != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE_SUBSET (table), NULL);
-
- if (E_IS_TABLE_SUBSET (table->source))
- return e_table_subset_get_toplevel (E_TABLE_SUBSET (table->source));
- else
- return table->source;
-}
-
-void
-e_table_subset_print_debugging (ETableSubset *table_model)
-{
- int i;
- for (i = 0; i < table_model->n_map; i++) {
- g_print("%8d\n", table_model->map_table[i]);
- }
-}
diff --git a/widgets/table/e-table-subset.h b/widgets/table/e-table-subset.h
deleted file mode 100644
index 505aa6c305..0000000000
--- a/widgets/table/e-table-subset.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-subset.h - Implements a table that contains a subset of another table.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_SUBSET_H_
-#define _E_TABLE_SUBSET_H_
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_SUBSET_TYPE (e_table_subset_get_type ())
-#define E_TABLE_SUBSET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_SUBSET_TYPE, ETableSubset))
-#define E_TABLE_SUBSET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_SUBSET_TYPE, ETableSubsetClass))
-#define E_IS_TABLE_SUBSET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_SUBSET_TYPE))
-#define E_IS_TABLE_SUBSET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_SUBSET_TYPE))
-#define E_TABLE_SUBSET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_TABLE_SUBSET_TYPE, ETableSubsetClass))
-
-typedef struct {
- ETableModel base;
-
- ETableModel *source;
- int n_map;
- int *map_table;
-
- int last_access;
-
- int table_model_pre_change_id;
- int table_model_no_change_id;
- int table_model_changed_id;
- int table_model_row_changed_id;
- int table_model_cell_changed_id;
- int table_model_rows_inserted_id;
- int table_model_rows_deleted_id;
-} ETableSubset;
-
-typedef struct {
- ETableModelClass parent_class;
-
- void (*proxy_model_pre_change) (ETableSubset *etss, ETableModel *etm);
- void (*proxy_model_no_change) (ETableSubset *etss, ETableModel *etm);
- void (*proxy_model_changed) (ETableSubset *etss, ETableModel *etm);
- void (*proxy_model_row_changed) (ETableSubset *etss, ETableModel *etm, int row);
- void (*proxy_model_cell_changed) (ETableSubset *etss, ETableModel *etm, int col, int row);
- void (*proxy_model_rows_inserted) (ETableSubset *etss, ETableModel *etm, int row, int count);
- void (*proxy_model_rows_deleted) (ETableSubset *etss, ETableModel *etm, int row, int count);
-} ETableSubsetClass;
-
-GType e_table_subset_get_type (void);
-ETableModel *e_table_subset_new (ETableModel *etm,
- int n_vals);
-ETableModel *e_table_subset_construct (ETableSubset *ets,
- ETableModel *source,
- int nvals);
-
-int e_table_subset_model_to_view_row (ETableSubset *ets,
- int model_row);
-int e_table_subset_view_to_model_row (ETableSubset *ets,
- int view_row);
-
-ETableModel *e_table_subset_get_toplevel (ETableSubset *table_model);
-
-void e_table_subset_print_debugging (ETableSubset *table_model);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_SUBSET_H_ */
-
diff --git a/widgets/table/e-table-tooltip.h b/widgets/table/e-table-tooltip.h
deleted file mode 100644
index 81c00f9e34..0000000000
--- a/widgets/table/e-table-tooltip.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-tooltip.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_TOOLTIP_H_
-#define _E_TABLE_TOOLTIP_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-
-G_BEGIN_DECLS
-
-typedef struct {
- gint timer;
- int col, row;
- int row_height;
- int x, y;
- int cx, cy;
- GdkColor *foreground;
- GdkColor *background;
- GnomeCanvasItem *eti;
-} ETableTooltip;
-
-G_END_DECLS
-
-#endif
diff --git a/widgets/table/e-table-tree.h b/widgets/table/e-table-tree.h
deleted file mode 100644
index 5648fc2f06..0000000000
--- a/widgets/table/e-table-tree.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-tree.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_TREE_H_
-#define _E_TABLE_TREE_H_
-
-#include <gal/e-table/e-table-model.h>
-
-G_BEGIN_DECLS
-
-typedef struct {
- char *title;
-
- union {
- ETableModel *table;
- GList *children;
- } u;
-
- guint expanded :1;
- guint is_leaf :1;
-} ETableGroup;
-
-ETableGroup *e_table_group_new (const char *title, ETableModel *table);
-ETableGroup *e_table_group_new_leaf (const char *title);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_TREE_H_ */
diff --git a/widgets/table/e-table-utils.c b/widgets/table/e-table-utils.c
deleted file mode 100644
index eec4fc79d5..0000000000
--- a/widgets/table/e-table-utils.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-utils.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-#include "gal/widgets/e-unicode.h"
-#include "e-table-utils.h"
-#include "e-table-header-utils.h"
-
-ETableHeader *
-e_table_state_to_header (GtkWidget *widget, ETableHeader *full_header, ETableState *state)
-{
- ETableHeader *nh;
- const int max_cols = e_table_header_count (full_header);
- int column;
- GValue *val = g_new0 (GValue, 1);
-
- g_return_val_if_fail (widget, NULL);
- g_return_val_if_fail (full_header, NULL);
- g_return_val_if_fail (state, NULL);
-
- nh = e_table_header_new ();
- g_value_init (val, G_TYPE_DOUBLE);
- g_value_set_double (val, e_table_header_width_extras (widget->style));
- g_object_set_property (G_OBJECT(nh), "width_extras", val);
- g_free (val);
-
- for (column = 0; column < state->col_count; column++) {
- int col;
- double expansion;
- ETableCol *table_col;
-
- col = state->columns[column];
- expansion = state->expansions[column];
-
- if (col >= max_cols)
- continue;
-
- table_col = e_table_header_get_column (full_header, col);
-
- if (expansion >= -1)
- table_col->expansion = expansion;
-
- e_table_header_add_column (nh, table_col, -1);
- }
-
- return nh;
-}
-
-static ETableCol *
-et_col_spec_to_col (ETableColumnSpecification *col_spec,
- ETableExtras *ete,
- const char *domain)
-{
- ETableCol *col = NULL;
- ECell *cell = NULL;
- GCompareFunc compare = NULL;
- ETableSearchFunc search = NULL;
-
- if (col_spec->cell)
- cell = e_table_extras_get_cell(ete, col_spec->cell);
- if (col_spec->compare)
- compare = e_table_extras_get_compare(ete, col_spec->compare);
- if (col_spec->search)
- search = e_table_extras_get_search(ete, col_spec->search);
-
- if (cell && compare) {
- char *title = dgettext (domain, col_spec->title);
-
- title = g_strdup (title);
-
- if (col_spec->pixbuf && *col_spec->pixbuf) {
- GdkPixbuf *pixbuf;
-
- pixbuf = e_table_extras_get_pixbuf(
- ete, col_spec->pixbuf);
- if (pixbuf) {
- col = e_table_col_new_with_pixbuf (
- col_spec->model_col, title,
- pixbuf, col_spec->expansion,
- col_spec->minimum_width,
- cell, compare, col_spec->resizable, col_spec->disabled, col_spec->priority);
- }
- }
- if (col == NULL && col_spec->title && *col_spec->title) {
- col = e_table_col_new (
- col_spec->model_col, title,
- col_spec->expansion, col_spec->minimum_width,
- cell, compare, col_spec->resizable, col_spec->disabled, col_spec->priority);
- }
- col->search = search;
-
- g_free (title);
- }
- if (col && col_spec->compare_col != col_spec->model_col)
- g_object_set (col,
- "compare_col", col_spec->compare_col,
- NULL);
- return col;
-}
-
-ETableHeader *
-e_table_spec_to_full_header (ETableSpecification *spec,
- ETableExtras *ete)
-{
- ETableHeader *nh;
- int column;
-
- g_return_val_if_fail (spec, NULL);
- g_return_val_if_fail (ete, NULL);
-
- nh = e_table_header_new ();
-
- for (column = 0; spec->columns[column]; column++) {
- ETableCol *col = et_col_spec_to_col (
- spec->columns[column], ete, spec->domain);
-
- if (col) {
- e_table_header_add_column (nh, col, -1);
- g_object_unref (col);
- }
- }
-
- return nh;
-}
-
-static gboolean
-check_col (ETableCol *col, gpointer user_data)
-{
- return col->search ? TRUE : FALSE;
-}
-
-ETableCol *
-e_table_util_calculate_current_search_col (ETableHeader *header, ETableHeader *full_header, ETableSortInfo *sort_info, gboolean always_search)
-{
- int i;
- int count;
- ETableCol *col = NULL;
- count = e_table_sort_info_grouping_get_count (sort_info);
- for (i = 0; i < count; i++) {
- ETableSortColumn column = e_table_sort_info_grouping_get_nth(sort_info, i);
-
- col = e_table_header_get_column (full_header, column.column);
-
- if (col && col->search)
- break;
-
- col = NULL;
- }
-
- if (col == NULL) {
- count = e_table_sort_info_sorting_get_count (sort_info);
- for (i = 0; i < count; i++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(sort_info, i);
-
- col = e_table_header_get_column (full_header, column.column);
-
- if (col && col->search)
- break;
-
- col = NULL;
- }
- }
-
- if (col == NULL && always_search) {
- col = e_table_header_prioritized_column_selected (header, check_col, NULL);
- }
-
- return col;
-}
diff --git a/widgets/table/e-table-utils.h b/widgets/table/e-table-utils.h
deleted file mode 100644
index 3c7fd937b6..0000000000
--- a/widgets/table/e-table-utils.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-utils.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_UTILS_H_
-#define _E_TABLE_UTILS_H_
-
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-state.h>
-#include <gal/e-table/e-table-specification.h>
-#include <gal/e-table/e-table-extras.h>
-
-G_BEGIN_DECLS
-
-ETableHeader *e_table_state_to_header (GtkWidget *widget,
- ETableHeader *full_header,
- ETableState *state);
-
-ETableHeader *e_table_spec_to_full_header (ETableSpecification *spec,
- ETableExtras *ete);
-
-ETableCol *e_table_util_calculate_current_search_col (ETableHeader *header,
- ETableHeader *full_header,
- ETableSortInfo *sort_info,
- gboolean always_search);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_UTILS_H_ */
-
diff --git a/widgets/table/e-table-without.c b/widgets/table/e-table-without.c
deleted file mode 100644
index e49076be0f..0000000000
--- a/widgets/table/e-table-without.c
+++ /dev/null
@@ -1,392 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-without.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-util.h"
-#include "e-table-without.h"
-
-#define PARENT_TYPE E_TABLE_SUBSET_TYPE
-
-#define INCREMENT_AMOUNT 10
-
-static ETableSubsetClass *parent_class;
-
-struct _ETableWithoutPrivate {
- GHashTable *hash;
-
- GHashFunc hash_func;
- GCompareFunc compare_func;
-
- ETableWithoutGetKeyFunc get_key_func;
- ETableWithoutDuplicateKeyFunc duplicate_key_func;
- ETableWithoutFreeKeyFunc free_gotten_key_func;
- ETableWithoutFreeKeyFunc free_duplicated_key_func;
-
- void *closure;
-};
-
-static gboolean
-check (ETableWithout *etw, int model_row)
-{
- gboolean ret_val;
- void *key;
- ETableSubset *etss = E_TABLE_SUBSET (etw);
-
- if (etw->priv->get_key_func)
- key = etw->priv->get_key_func (etss->source, model_row, etw->priv->closure);
- else
- key = GINT_TO_POINTER (model_row);
- ret_val = (g_hash_table_lookup (etw->priv->hash, key) != NULL);
- if (etw->priv->free_gotten_key_func)
- etw->priv->free_gotten_key_func (key, etw->priv->closure);
- return ret_val;
-}
-
-static gboolean
-check_with_key (ETableWithout *etw, void *key, int model_row)
-{
- gboolean ret_val;
- void *key2;
- ETableSubset *etss = E_TABLE_SUBSET (etw);
-
- if (etw->priv->get_key_func)
- key2 = etw->priv->get_key_func (etss->source, model_row, etw->priv->closure);
- else
- key2 = GINT_TO_POINTER (model_row);
- if (etw->priv->compare_func)
- ret_val = (etw->priv->compare_func (key, key2));
- else
- ret_val = (key == key2);
- if (etw->priv->free_gotten_key_func)
- etw->priv->free_gotten_key_func (key2, etw->priv->closure);
- return ret_val;
-}
-
-static gint
-etw_view_to_model_row (ETableWithout *etw, int view_row)
-{
- ETableSubset *etss = E_TABLE_SUBSET (etw);
- return etss->map_table[view_row];
-}
-
-static void
-add_row (ETableWithout *etw, int model_row)
-{
- ETableSubset *etss = E_TABLE_SUBSET (etw);
-
- e_table_model_pre_change (E_TABLE_MODEL (etw));
-
- etss->map_table = g_renew (int, etss->map_table, etss->n_map + 1);
-
- etss->map_table[etss->n_map++] = model_row;
-
- e_table_model_row_inserted (E_TABLE_MODEL (etw), etss->n_map - 1);
-}
-
-static void
-remove_row (ETableWithout *etw, int view_row)
-{
- ETableSubset *etss = E_TABLE_SUBSET (etw);
-
- e_table_model_pre_change (E_TABLE_MODEL (etw));
- memmove (etss->map_table + view_row, etss->map_table + view_row + 1, (etss->n_map - view_row - 1) * sizeof (int));
- etss->n_map --;
- e_table_model_row_deleted (E_TABLE_MODEL (etw), view_row);
-}
-
-static void
-delete_hash_element (gpointer key,
- gpointer value,
- gpointer closure)
-{
- ETableWithout *etw = closure;
- if (etw->priv->free_duplicated_key_func)
- etw->priv->free_duplicated_key_func (key, etw->priv->closure);
-}
-
-static void
-etw_dispose (GObject *object)
-{
- ETableWithout *etw = E_TABLE_WITHOUT (object);
-
- if (etw->priv) {
- if (etw->priv->hash) {
- g_hash_table_foreach (etw->priv->hash, delete_hash_element, etw);
- g_hash_table_destroy (etw->priv->hash);
- etw->priv->hash = NULL;
- }
- g_free (etw->priv);
- etw->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-etw_proxy_model_rows_inserted (ETableSubset *etss, ETableModel *etm, int model_row, int count)
-{
- int i;
- ETableWithout *etw = E_TABLE_WITHOUT (etss);
- gboolean shift = FALSE;
-
- /* i is View row */
- if (model_row != etss->n_map) {
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] > model_row)
- etss->map_table[i] += count;
- }
- shift = TRUE;
- }
-
- /* i is Model row */
- for (i = model_row; i < model_row + count; i++) {
- if (!check (etw, i)) {
- add_row (etw, i);
- }
- }
- if (shift)
- e_table_model_changed (E_TABLE_MODEL (etw));
- else
- e_table_model_no_change (E_TABLE_MODEL (etw));
-}
-
-static void
-etw_proxy_model_rows_deleted (ETableSubset *etss, ETableModel *etm, int model_row, int count)
-{
- int i; /* View row */
- ETableWithout *etw = E_TABLE_WITHOUT (etss);
- gboolean shift = FALSE;
-
- for (i = 0; i < etss->n_map; i++) {
- if (etss->map_table[i] >= model_row && etss->map_table[i] < model_row + count) {
- remove_row (etw, i);
- i--;
- } else if (etss->map_table[i] >= model_row + count) {
- etss->map_table[i] -= count;
- shift = TRUE;
- }
- }
- if (shift)
- e_table_model_changed (E_TABLE_MODEL (etw));
- else
- e_table_model_no_change (E_TABLE_MODEL (etw));
-}
-
-static void
-etw_proxy_model_changed (ETableSubset *etss, ETableModel *etm)
-{
- int i; /* Model row */
- int j; /* View row */
- int row_count;
- ETableWithout *etw = E_TABLE_WITHOUT (etss);
-
- g_free (etss->map_table);
- row_count = e_table_model_row_count (etm);
- etss->map_table = g_new (int, row_count);
-
- for (i = 0, j = 0; i < row_count; i++) {
- if (!check (etw, i)) {
- etss->map_table[j++] = i;
- }
- }
- etss->n_map = j;
-
- if (parent_class->proxy_model_changed)
- parent_class->proxy_model_changed (etss, etm);
-}
-
-static void
-etw_class_init (ETableWithoutClass *klass)
-{
- ETableSubsetClass *etss_class = E_TABLE_SUBSET_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = etw_dispose;
-
- etss_class->proxy_model_rows_inserted = etw_proxy_model_rows_inserted;
- etss_class->proxy_model_rows_deleted = etw_proxy_model_rows_deleted;
- etss_class->proxy_model_changed = etw_proxy_model_changed;
-}
-
-static void
-etw_init (ETableWithout *etw)
-{
- etw->priv = g_new (ETableWithoutPrivate, 1);
- etw->priv->hash_func = NULL;
- etw->priv->compare_func = NULL;
- etw->priv->get_key_func = NULL;
- etw->priv->duplicate_key_func = NULL;
- etw->priv->free_gotten_key_func = NULL;
- etw->priv->free_duplicated_key_func = NULL;
-}
-
-E_MAKE_TYPE(e_table_without, "ETableWithout", ETableWithout, etw_class_init, etw_init, PARENT_TYPE)
-
-ETableModel *
-e_table_without_construct (ETableWithout *etw,
- ETableModel *source,
- GHashFunc hash_func,
- GCompareFunc compare_func,
- ETableWithoutGetKeyFunc get_key_func,
- ETableWithoutDuplicateKeyFunc duplicate_key_func,
- ETableWithoutFreeKeyFunc free_gotten_key_func,
- ETableWithoutFreeKeyFunc free_duplicated_key_func,
- void *closure)
-{
- if (e_table_subset_construct (E_TABLE_SUBSET(etw), source, 1) == NULL)
- return NULL;
- E_TABLE_SUBSET(etw)->n_map = 0;
-
- etw->priv->hash_func = hash_func;
- etw->priv->compare_func = compare_func;
- etw->priv->get_key_func = get_key_func;
- etw->priv->duplicate_key_func = duplicate_key_func;
- etw->priv->free_gotten_key_func = free_gotten_key_func;
- etw->priv->free_duplicated_key_func = free_duplicated_key_func;
- etw->priv->closure = closure;
-
- etw->priv->hash = g_hash_table_new (etw->priv->hash_func, etw->priv->compare_func);
-
- return E_TABLE_MODEL (etw);
-}
-
-ETableModel *
-e_table_without_new (ETableModel *source,
- GHashFunc hash_func,
- GCompareFunc compare_func,
- ETableWithoutGetKeyFunc get_key_func,
- ETableWithoutDuplicateKeyFunc duplicate_key_func,
- ETableWithoutFreeKeyFunc free_gotten_key_func,
- ETableWithoutFreeKeyFunc free_duplicated_key_func,
- void *closure)
-{
- ETableWithout *etw = g_object_new (E_TABLE_WITHOUT_TYPE, NULL);
-
- if (e_table_without_construct (etw,
- source,
- hash_func,
- compare_func,
- get_key_func,
- duplicate_key_func,
- free_gotten_key_func,
- free_duplicated_key_func,
- closure)
- == NULL) {
- g_object_unref (etw);
- return NULL;
- }
-
- return (ETableModel *) etw;
-}
-
-void e_table_without_hide (ETableWithout *etw,
- void *key)
-{
- int i; /* View row */
- ETableSubset *etss = E_TABLE_SUBSET (etw);
-
- if (etw->priv->duplicate_key_func)
- key = etw->priv->duplicate_key_func (key, etw->priv->closure);
-
- g_hash_table_insert (etw->priv->hash, key, key);
- for (i = 0; i < etss->n_map; i++) {
- if (check_with_key (etw, key, etw_view_to_model_row (etw, i))) {
- remove_row (etw, i);
- i --;
- }
- }
-}
-
-/* An adopted key will later be freed using the free_duplicated_key function. */
-void e_table_without_hide_adopt (ETableWithout *etw,
- void *key)
-{
- int i; /* View row */
- ETableSubset *etss = E_TABLE_SUBSET (etw);
-
- g_hash_table_insert (etw->priv->hash, key, key);
- for (i = 0; i < etss->n_map; i++) {
- if (check_with_key (etw, key, etw_view_to_model_row (etw, i))) {
- remove_row (etw, i);
- i --;
- }
- }
-}
-
-void
-e_table_without_show (ETableWithout *etw,
- void *key)
-{
- int i; /* Model row */
- ETableSubset *etss = E_TABLE_SUBSET (etw);
- int count;
- void *old_key;
-
- count = e_table_model_row_count (etss->source);
-
- for (i = 0; i < count; i++) {
- if (check_with_key (etw, key, i)) {
- add_row (etw, i);
- }
- }
- if (g_hash_table_lookup_extended (etw->priv->hash, key, &old_key, NULL)) {
-#if 0
- if (etw->priv->free_duplicated_key_func)
- etw->priv->free_duplicated_key_func (key, etw->priv->closure);
-#endif
- g_hash_table_remove (etw->priv->hash, key);
- }
-}
-
-void
-e_table_without_show_all (ETableWithout *etw)
-{
- int i; /* Model row */
- int row_count;
- ETableSubset *etss = E_TABLE_SUBSET (etw);
-
- e_table_model_pre_change (E_TABLE_MODEL (etw));
-
- if (etw->priv->hash) {
- g_hash_table_foreach (etw->priv->hash, delete_hash_element, etw);
- g_hash_table_destroy (etw->priv->hash);
- etw->priv->hash = NULL;
- }
- etw->priv->hash = g_hash_table_new (etw->priv->hash_func, etw->priv->compare_func);
-
- row_count = e_table_model_row_count (E_TABLE_MODEL(etss->source));
- g_free (etss->map_table);
- etss->map_table = g_new (int, row_count);
-
- for (i = 0; i < row_count; i++) {
- etss->map_table[i] = i;
- }
- etss->n_map = row_count;
-
- e_table_model_changed (E_TABLE_MODEL (etw));
-}
diff --git a/widgets/table/e-table-without.h b/widgets/table/e-table-without.h
deleted file mode 100644
index 6bcbdcdc65..0000000000
--- a/widgets/table/e-table-without.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-without.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_WITHOUT_H_
-#define _E_TABLE_WITHOUT_H_
-
-#include <gtk/gtkobject.h>
-#include <gal/e-table/e-table-subset.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_TABLE_WITHOUT_TYPE (e_table_without_get_type ())
-#define E_TABLE_WITHOUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_WITHOUT_TYPE, ETableWithout))
-#define E_TABLE_WITHOUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_WITHOUT_TYPE, ETableWithoutClass))
-#define E_IS_TABLE_WITHOUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_WITHOUT_TYPE))
-#define E_IS_TABLE_WITHOUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_WITHOUT_TYPE))
-
-typedef struct _ETableWithoutPrivate ETableWithoutPrivate;
-typedef void *(*ETableWithoutGetKeyFunc) (ETableModel *source,
- int row,
- void *closure);
-typedef void *(*ETableWithoutDuplicateKeyFunc) (const void *key,
- void *closure);
-typedef void (*ETableWithoutFreeKeyFunc) (void *key,
- void *closure);
-
-typedef struct {
- ETableSubset base;
-
- ETableWithoutPrivate *priv;
-} ETableWithout;
-
-typedef struct {
- ETableSubsetClass parent_class;
-
-} ETableWithoutClass;
-
-GType e_table_without_get_type (void);
-ETableModel *e_table_without_new (ETableModel *source,
- GHashFunc hash_func,
- GCompareFunc compare_func,
- ETableWithoutGetKeyFunc get_key_func,
- ETableWithoutDuplicateKeyFunc duplicate_key_func,
- ETableWithoutFreeKeyFunc free_gotten_key_func,
- ETableWithoutFreeKeyFunc free_duplicated_key_func,
- void *closure);
-ETableModel *e_table_without_construct (ETableWithout *etw,
- ETableModel *source,
- GHashFunc hash_func,
- GCompareFunc compare_func,
- ETableWithoutGetKeyFunc get_key_func,
- ETableWithoutDuplicateKeyFunc duplicate_key_func,
- ETableWithoutFreeKeyFunc free_gotten_key_func,
- ETableWithoutFreeKeyFunc free_duplicated_key_func,
- void *closure);
-void e_table_without_hide (ETableWithout *etw,
- void *key);
-void e_table_without_hide_adopt (ETableWithout *etw,
- void *key);
-void e_table_without_show (ETableWithout *etw,
- void *key);
-void e_table_without_show_all (ETableWithout *etw);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _E_TABLE_WITHOUT_H_ */
-
diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c
deleted file mode 100644
index 9c218ad974..0000000000
--- a/widgets/table/e-table.c
+++ /dev/null
@@ -1,3338 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table.c - A graphical view of a Table.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtksignal.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-
-#include "gal/util/e-i18n.h"
-#include "gal/util/e-util.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-canvas-background.h"
-#include "gal/widgets/e-canvas-vbox.h"
-#include "gal/widgets/e-unicode.h"
-#include "e-table.h"
-#include "e-table-header-item.h"
-#include "e-table-header-utils.h"
-#include "e-table-subset.h"
-#include "e-table-item.h"
-#include "e-table-group.h"
-#include "e-table-group-leaf.h"
-#include "e-table-click-to-add.h"
-#include "e-table-specification.h"
-#include "e-table-state.h"
-#include "e-table-column-specification.h"
-
-#include "e-table-utils.h"
-
-#include <atk/atk.h>
-#include "gal/a11y/e-table/gal-a11y-e-table-factory.h"
-
-#define COLUMN_HEADER_HEIGHT 16
-
-#define PARENT_TYPE gtk_table_get_type ()
-
-#define d(x)
-
-#if d(!)0
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)), g_print ("%s: e_table_item_leave_edit\n", __FUNCTION__))
-#else
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)))
-#endif
-
-static GtkObjectClass *parent_class;
-
-enum {
- CURSOR_CHANGE,
- CURSOR_ACTIVATED,
- SELECTION_CHANGE,
- DOUBLE_CLICK,
- RIGHT_CLICK,
- CLICK,
- KEY_PRESS,
- START_DRAG,
- STATE_CHANGE,
- WHITE_SPACE_EVENT,
-
- TABLE_DRAG_BEGIN,
- TABLE_DRAG_END,
- TABLE_DRAG_DATA_GET,
- TABLE_DRAG_DATA_DELETE,
-
- TABLE_DRAG_LEAVE,
- TABLE_DRAG_MOTION,
- TABLE_DRAG_DROP,
- TABLE_DRAG_DATA_RECEIVED,
-
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_LENGTH_THRESHOLD,
- PROP_MODEL,
- PROP_UNIFORM_ROW_HEIGHT,
- PROP_ALWAYS_SEARCH,
- PROP_USE_CLICK_TO_ADD
-};
-
-enum {
- ET_SCROLL_UP = 1 << 0,
- ET_SCROLL_DOWN = 1 << 1,
- ET_SCROLL_LEFT = 1 << 2,
- ET_SCROLL_RIGHT = 1 << 3
-};
-
-static guint et_signals [LAST_SIGNAL] = { 0 };
-
-static void e_table_fill_table (ETable *e_table, ETableModel *model);
-static gboolean changed_idle (gpointer data);
-
-static void et_grab_focus (GtkWidget *widget);
-
-static void et_drag_begin (GtkWidget *widget,
- GdkDragContext *context,
- ETable *et);
-static void et_drag_end (GtkWidget *widget,
- GdkDragContext *context,
- ETable *et);
-static void et_drag_data_get(GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETable *et);
-static void et_drag_data_delete(GtkWidget *widget,
- GdkDragContext *context,
- ETable *et);
-
-static void et_drag_leave(GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- ETable *et);
-static gboolean et_drag_motion(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETable *et);
-static gboolean et_drag_drop(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETable *et);
-static void et_drag_data_received(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETable *et);
-
-static gint et_focus (GtkWidget *container, GtkDirectionType direction);
-
-static void scroll_off (ETable *et);
-static void scroll_on (ETable *et, guint scroll_direction);
-
-static void
-et_disconnect_model (ETable *et)
-{
- if (et->model == NULL)
- return;
-
- if (et->table_model_change_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->model),
- et->table_model_change_id);
- if (et->table_row_change_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->model),
- et->table_row_change_id);
- if (et->table_cell_change_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->model),
- et->table_cell_change_id);
- if (et->table_rows_inserted_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->model),
- et->table_rows_inserted_id);
- if (et->table_rows_deleted_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->model),
- et->table_rows_deleted_id);
-
- et->table_model_change_id = 0;
- et->table_row_change_id = 0;
- et->table_cell_change_id = 0;
- et->table_rows_inserted_id = 0;
- et->table_rows_deleted_id = 0;
-}
-
-static void
-e_table_state_change (ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [STATE_CHANGE], 0);
-}
-
-#define CHECK_HORIZONTAL(et) if ((et)->horizontal_scrolling || (et)->horizontal_resize) e_table_header_update_horizontal (et->header);
-
-static void
-clear_current_search_col (ETable *et)
-{
- et->search_col_set = FALSE;
-}
-
-static ETableCol *
-current_search_col (ETable *et)
-{
- if (!et->search_col_set) {
- et->current_search_col =
- e_table_util_calculate_current_search_col (et->header,
- et->full_header,
- et->sort_info,
- et->always_search);
- et->search_col_set = TRUE;
- }
-
- return et->current_search_col;
-}
-
-static void
-et_size_request (GtkWidget *widget, GtkRequisition *request)
-{
- ETable *et = E_TABLE (widget);
- if (GTK_WIDGET_CLASS (parent_class)->size_request)
- GTK_WIDGET_CLASS (parent_class)->size_request (widget, request);
- if (et->horizontal_resize)
- request->width = MAX (request->width, et->header_width);
-}
-
-static void
-set_header_width (ETable *et)
-{
- if (et->horizontal_resize) {
- et->header_width = e_table_header_min_width (et->header);
- gtk_widget_queue_resize (GTK_WIDGET (et));
- }
-}
-
-static void
-structure_changed (ETableHeader *header, ETable *et)
-{
- e_table_state_change (et);
- set_header_width (et);
- clear_current_search_col (et);
-}
-
-static void
-expansion_changed (ETableHeader *header, ETable *et)
-{
- e_table_state_change (et);
- set_header_width (et);
-}
-
-static void
-dimension_changed (ETableHeader *header, int total_width, ETable *et)
-{
- set_header_width (et);
-}
-
-static void
-disconnect_header (ETable *e_table)
-{
- if (e_table->header == NULL)
- return;
-
- if (e_table->structure_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_table->header),
- e_table->structure_change_id);
- if (e_table->expansion_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_table->header),
- e_table->expansion_change_id);
- if (e_table->dimension_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_table->header),
- e_table->dimension_change_id);
-
- g_object_unref(e_table->header);
- e_table->header = NULL;
-}
-
-static void
-connect_header (ETable *e_table, ETableState *state)
-{
- if (e_table->header != NULL)
- disconnect_header (e_table);
-
- e_table->header = e_table_state_to_header (GTK_WIDGET(e_table), e_table->full_header, state);
-
- e_table->structure_change_id =
- g_signal_connect (G_OBJECT (e_table->header), "structure_change",
- G_CALLBACK (structure_changed), e_table);
- e_table->expansion_change_id =
- g_signal_connect (G_OBJECT (e_table->header), "expansion_change",
- G_CALLBACK (expansion_changed), e_table);
- e_table->dimension_change_id =
- g_signal_connect (G_OBJECT (e_table->header), "dimension_change",
- G_CALLBACK (dimension_changed), e_table);
-}
-
-static void
-et_dispose (GObject *object)
-{
- ETable *et = E_TABLE (object);
-
- et_disconnect_model (et);
-
- if (et->search) {
- if (et->search_search_id)
- g_signal_handler_disconnect (G_OBJECT (et->search),
- et->search_search_id);
- if (et->search_accept_id)
- g_signal_handler_disconnect (G_OBJECT (et->search),
- et->search_accept_id);
- g_object_unref (et->search);
- et->search = NULL;
- }
-
- if (et->group_info_change_id) {
- g_signal_handler_disconnect (G_OBJECT (et->sort_info),
- et->group_info_change_id);
- et->group_info_change_id = 0;
- }
-
- if (et->sort_info_change_id) {
- g_signal_handler_disconnect (G_OBJECT (et->sort_info),
- et->sort_info_change_id);
- et->sort_info_change_id = 0;
- }
-
- if (et->reflow_idle_id) {
- g_source_remove(et->reflow_idle_id);
- et->reflow_idle_id = 0;
- }
-
- scroll_off (et);
-
- disconnect_header (et);
-
- if (et->model) {
- g_object_unref (et->model);
- et->model = NULL;
- }
-
- if (et->full_header) {
- g_object_unref (et->full_header);
- et->full_header = NULL;
- }
-
- if (et->sort_info) {
- g_object_unref (et->sort_info);
- et->sort_info = NULL;
- }
-
- if (et->sorter) {
- g_object_unref (et->sorter);
- et->sorter = NULL;
- }
-
- if (et->selection) {
- g_object_unref (et->selection);
- et->selection = NULL;
- }
-
- if (et->spec) {
- g_object_unref (et->spec);
- et->spec = NULL;
- }
-
- if (et->header_canvas != NULL) {
- gtk_widget_destroy (GTK_WIDGET (et->header_canvas));
- et->header_canvas = NULL;
- }
-
- if (et->site != NULL) {
- e_table_drag_source_unset (et);
- et->site = NULL;
- }
-
- if (et->table_canvas != NULL) {
- gtk_widget_destroy (GTK_WIDGET (et->table_canvas));
- et->table_canvas = NULL;
- }
-
- if (et->rebuild_idle_id != 0) {
- g_source_remove (et->rebuild_idle_id);
- et->rebuild_idle_id = 0;
- }
-
- g_free(et->click_to_add_message);
- et->click_to_add_message = NULL;
-
- g_free(et->domain);
- et->domain = NULL;
-
- (*G_OBJECT_CLASS (parent_class)->dispose)(object);
-}
-
-static void
-et_unrealize (GtkWidget *widget)
-{
- scroll_off (E_TABLE (widget));
-
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
-}
-
-static gboolean
-check_row (ETable *et, int model_row, int col, ETableSearchFunc search, char *string)
-{
- const void *value;
-
- value = e_table_model_value_at (et->model, col, model_row);
-
- return search (value, string);
-}
-
-static gboolean
-et_search_search (ETableSearch *search, char *string, ETableSearchFlags flags, ETable *et)
-{
- int cursor;
- int rows;
- int i;
- ETableCol *col = current_search_col (et);
-
- if (col == NULL)
- return FALSE;
-
- rows = e_table_model_row_count (et->model);
-
- g_object_get(et->selection,
- "cursor_row", &cursor,
- NULL);
-
- if ((flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST) && cursor < rows && cursor >= 0 && check_row (et, cursor, col->col_idx, col->search, string))
- return TRUE;
-
- cursor = e_sorter_model_to_sorted (E_SORTER (et->sorter), cursor);
-
- for (i = cursor + 1; i < rows; i++) {
- int model_row = e_sorter_sorted_to_model (E_SORTER (et->sorter), i);
- if (check_row (et, model_row, col->col_idx, col->search, string)) {
- e_selection_model_select_as_key_press(E_SELECTION_MODEL (et->selection), model_row, col->col_idx, GDK_CONTROL_MASK);
- return TRUE;
- }
- }
-
- for (i = 0; i < cursor; i++) {
- int model_row = e_sorter_sorted_to_model (E_SORTER (et->sorter), i);
- if (check_row (et, model_row, col->col_idx, col->search, string)) {
- e_selection_model_select_as_key_press(E_SELECTION_MODEL (et->selection), model_row, col->col_idx, GDK_CONTROL_MASK);
- return TRUE;
- }
- }
-
- cursor = e_sorter_sorted_to_model (E_SORTER (et->sorter), cursor);
-
- /* Check if the cursor row is the only matching row. */
- return (!(flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST) && cursor < rows && cursor >= 0 && check_row (et, cursor, col->col_idx, col->search, string));
-}
-
-static void
-et_search_accept (ETableSearch *search, ETable *et)
-{
- int cursor;
- ETableCol *col = current_search_col (et);
-
- if (col == NULL)
- return;
-
- g_object_get(et->selection,
- "cursor_row", &cursor,
- NULL);
- e_selection_model_select_as_key_press(E_SELECTION_MODEL (et->selection), cursor, col->col_idx, 0);
-}
-
-static void
-init_search (ETable *e_table)
-{
- if (e_table->search != NULL)
- return;
-
- e_table->search = e_table_search_new();
-
- e_table->search_search_id =
- g_signal_connect (G_OBJECT (e_table->search), "search",
- G_CALLBACK (et_search_search), e_table);
- e_table->search_accept_id =
- g_signal_connect (G_OBJECT (e_table->search), "accept",
- G_CALLBACK (et_search_accept), e_table);
-}
-
-static void
-et_finalize (GObject *object)
-{
- ETable *et = E_TABLE (object);
-
- g_free (et->click_to_add_message);
- et->click_to_add_message = NULL;
-
- g_free(et->domain);
- et->domain = NULL;
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-e_table_init (GtkObject *object)
-{
- ETable *e_table = E_TABLE (object);
- GtkTable *gtk_table = GTK_TABLE (object);
-
- GTK_WIDGET_SET_FLAGS (e_table, GTK_CAN_FOCUS);
-
- gtk_table->homogeneous = FALSE;
-
- e_table->sort_info = NULL;
- e_table->group_info_change_id = 0;
- e_table->sort_info_change_id = 0;
- e_table->structure_change_id = 0;
- e_table->expansion_change_id = 0;
- e_table->dimension_change_id = 0;
- e_table->reflow_idle_id = 0;
- e_table->scroll_idle_id = 0;
-
- e_table->alternating_row_colors = 1;
- e_table->horizontal_draw_grid = 1;
- e_table->vertical_draw_grid = 1;
- e_table->draw_focus = 1;
- e_table->cursor_mode = E_CURSOR_SIMPLE;
- e_table->length_threshold = 200;
- e_table->uniform_row_height = FALSE;
-
- e_table->need_rebuild = 0;
- e_table->rebuild_idle_id = 0;
-
- e_table->horizontal_scrolling = FALSE;
- e_table->horizontal_resize = FALSE;
-
- e_table->click_to_add_message = NULL;
- e_table->domain = NULL;
-
- e_table->drop_row = -1;
- e_table->drop_col = -1;
- e_table->site = NULL;
-
- e_table->do_drag = 0;
-
- e_table->sorter = NULL;
- e_table->selection = e_table_selection_model_new();
- e_table->cursor_loc = E_TABLE_CURSOR_LOC_NONE;
- e_table->spec = NULL;
-
- e_table->always_search = g_getenv ("GAL_ALWAYS_SEARCH") ? TRUE : FALSE;
-
- e_table->search = NULL;
- e_table->search_search_id = 0;
- e_table->search_accept_id = 0;
-
- e_table->current_search_col = NULL;
-
- e_table->header_width = 0;
-}
-
-/* Grab_focus handler for the ETable */
-static void
-et_grab_focus (GtkWidget *widget)
-{
- ETable *e_table;
-
- e_table = E_TABLE (widget);
-
- gtk_widget_grab_focus (GTK_WIDGET (e_table->table_canvas));
-}
-
-/* Focus handler for the ETable */
-static gint
-et_focus (GtkWidget *container, GtkDirectionType direction)
-{
- ETable *e_table;
-
- e_table = E_TABLE (container);
-
- if (GTK_CONTAINER (container)->focus_child) {
- gtk_container_set_focus_child (GTK_CONTAINER (container), NULL);
- return FALSE;
- }
-
- return gtk_widget_child_focus (GTK_WIDGET (e_table->table_canvas), direction);
-}
-
-static void
-set_header_canvas_width (ETable *e_table)
-{
- double oldwidth, oldheight, width;
-
- if (!(e_table->header_item && e_table->header_canvas && e_table->table_canvas))
- return;
-
- gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->table_canvas),
- NULL, NULL, &width, NULL);
- gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->header_canvas),
- NULL, NULL, &oldwidth, &oldheight);
-
- if (oldwidth != width ||
- oldheight != E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1)
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_table->header_canvas),
- 0, 0, width, /* COLUMN_HEADER_HEIGHT - 1 */
- E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1);
-
-}
-
-static void
-header_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc, ETable *e_table)
-{
- set_header_canvas_width (e_table);
-
- /* When the header item is created ->height == 0,
- as the font is only created when everything is realized.
- So we set the usize here as well, so that the size of the
- header is correct */
- if (GTK_WIDGET (e_table->header_canvas)->allocation.height !=
- E_TABLE_HEADER_ITEM (e_table->header_item)->height)
- gtk_widget_set_usize (GTK_WIDGET (e_table->header_canvas), -2,
- E_TABLE_HEADER_ITEM (e_table->header_item)->height);
-}
-
-static void
-group_info_changed (ETableSortInfo *info, ETable *et)
-{
- gboolean will_be_grouped = e_table_sort_info_grouping_get_count(info) > 0;
- clear_current_search_col (et);
- if (et->is_grouped || will_be_grouped) {
- et->need_rebuild = TRUE;
- if (!et->rebuild_idle_id) {
- gtk_object_destroy (GTK_OBJECT (et->group));
- et->group = NULL;
- et->rebuild_idle_id = g_idle_add_full (20, changed_idle, et, NULL);
- }
- }
- e_table_state_change (et);
-}
-
-static void
-sort_info_changed (ETableSortInfo *info, ETable *et)
-{
- clear_current_search_col (et);
- e_table_state_change (et);
-}
-
-static void
-e_table_setup_header (ETable *e_table)
-{
- char *pointer;
- e_table->header_canvas = GNOME_CANVAS (e_canvas_new ());
-
- gtk_widget_show (GTK_WIDGET (e_table->header_canvas));
-
- pointer = g_strdup_printf("%p", e_table);
-
- e_table->header_item = gnome_canvas_item_new (
- gnome_canvas_root (e_table->header_canvas),
- e_table_header_item_get_type (),
- "ETableHeader", e_table->header,
- "full_header", e_table->full_header,
- "sort_info", e_table->sort_info,
- "dnd_code", pointer,
- "table", e_table,
- NULL);
-
- g_free(pointer);
-
- g_signal_connect (
- G_OBJECT (e_table->header_canvas), "size_allocate",
- G_CALLBACK (header_canvas_size_allocate), e_table);
-
- gtk_widget_set_usize (GTK_WIDGET (e_table->header_canvas), -2,
- E_TABLE_HEADER_ITEM (e_table->header_item)->height);
-}
-
-static gboolean
-table_canvas_reflow_idle (ETable *e_table)
-{
- gdouble height, width;
- gdouble item_height;
- gdouble oldheight, oldwidth;
- GtkAllocation *alloc = &(GTK_WIDGET (e_table->table_canvas)->allocation);
-
- g_object_get (e_table->canvas_vbox,
- "height", &height,
- "width", &width,
- NULL);
- item_height = height;
- height = MAX ((int)height, alloc->height);
- width = MAX((int)width, alloc->width);
- /* I have no idea why this needs to be -1, but it works. */
- gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->table_canvas),
- NULL, NULL, &oldwidth, &oldheight);
-
- if (oldwidth != width - 1 ||
- oldheight != height - 1) {
- gnome_canvas_set_scroll_region (GNOME_CANVAS (e_table->table_canvas),
- 0, 0, width - 1, height - 1);
- set_header_canvas_width (e_table);
- }
- e_table->reflow_idle_id = 0;
- return FALSE;
-}
-
-static void
-table_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc,
- ETable *e_table)
-{
- gdouble width;
- gdouble height;
- gdouble item_height;
- GValue *val = g_new0 (GValue, 1);
- g_value_init (val, G_TYPE_DOUBLE);
-
- width = alloc->width;
- g_value_set_double (val, width);
- g_object_get (e_table->canvas_vbox,
- "height", &height,
- NULL);
- item_height = height;
- height = MAX ((int)height, alloc->height);
-
- g_object_set (e_table->canvas_vbox,
- "width", width,
- NULL);
- g_object_set_property (G_OBJECT (e_table->header), "width", val);
- g_free (val);
- if (e_table->reflow_idle_id)
- g_source_remove(e_table->reflow_idle_id);
- table_canvas_reflow_idle(e_table);
-}
-
-static void
-table_canvas_reflow (GnomeCanvas *canvas, ETable *e_table)
-{
- if (!e_table->reflow_idle_id)
- e_table->reflow_idle_id = g_idle_add_full (400, (GSourceFunc) table_canvas_reflow_idle, e_table, NULL);
-}
-
-static void
-click_to_add_cursor_change (ETableClickToAdd *etcta, int row, int col, ETable *et)
-{
- if (et->cursor_loc == E_TABLE_CURSOR_LOC_TABLE) {
- e_selection_model_clear(E_SELECTION_MODEL (et->selection));
- }
- et->cursor_loc = E_TABLE_CURSOR_LOC_ETCTA;
-}
-
-static void
-group_cursor_change (ETableGroup *etg, int row, ETable *et)
-{
- ETableCursorLoc old_cursor_loc;
-
- old_cursor_loc = et->cursor_loc;
-
- et->cursor_loc = E_TABLE_CURSOR_LOC_TABLE;
- g_signal_emit (G_OBJECT (et), et_signals [CURSOR_CHANGE], 0, row);
-
- if (old_cursor_loc == E_TABLE_CURSOR_LOC_ETCTA && et->click_to_add)
- e_table_click_to_add_commit(E_TABLE_CLICK_TO_ADD(et->click_to_add));
-}
-
-static void
-group_cursor_activated (ETableGroup *etg, int row, ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [CURSOR_ACTIVATED], 0, row);
-}
-
-static void
-group_double_click (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [DOUBLE_CLICK], 0, row, col, event);
-}
-
-static gint
-group_right_click (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et)
-{
- int return_val = 0;
- g_signal_emit (G_OBJECT (et), et_signals [RIGHT_CLICK], 0, row, col, event, &return_val);
- return return_val;
-}
-
-static gint
-group_click (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et)
-{
- int return_val = 0;
- g_signal_emit (G_OBJECT (et), et_signals [CLICK], 0, row, col, event, &return_val);
- return return_val;
-}
-
-static gint
-group_key_press (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et)
-{
- int return_val = 0;
- GdkEventKey *key = (GdkEventKey *) event;
- int y, row_local, col_local;
- GtkAdjustment *vadj;
-
- switch (key->keyval) {
- case GDK_Page_Down:
- case GDK_KP_Page_Down:
- vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas));
- y = CLAMP(vadj->value + (2 * vadj->page_size - 50), 0, vadj->upper);
- y -= vadj->value;
- e_table_get_cell_at (et, 30, y, &row_local, &col_local);
-
- if (row_local == -1)
- row_local = e_table_model_row_count (et->model) - 1;
-
- row_local = e_table_view_to_model_row (et, row_local);
- col_local = e_selection_model_cursor_col (E_SELECTION_MODEL (et->selection));
- e_selection_model_select_as_key_press (E_SELECTION_MODEL (et->selection), row_local, col_local, key->state);
- return_val = 1;
- break;
- case GDK_Page_Up:
- case GDK_KP_Page_Up:
- vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas));
- y = CLAMP(vadj->value - (vadj->page_size - 50), 0, vadj->upper);
- y -= vadj->value;
- e_table_get_cell_at (et, 30, y, &row_local, &col_local);
-
- if (row_local == -1)
- row_local = 0;
-
- row_local = e_table_view_to_model_row (et, row_local);
- col_local = e_selection_model_cursor_col (E_SELECTION_MODEL (et->selection));
- e_selection_model_select_as_key_press (E_SELECTION_MODEL (et->selection), row_local, col_local, key->state);
- return_val = 1;
- break;
- case GDK_BackSpace:
- init_search (et);
- if (e_table_search_backspace (et->search))
- return TRUE;
- /* Fall through */
- default:
- init_search (et);
- if ((key->state & ~(GDK_SHIFT_MASK | GDK_LOCK_MASK)) == 0
- && ((key->keyval >= GDK_a && key->keyval <= GDK_z) ||
- (key->keyval >= GDK_A && key->keyval <= GDK_Z) ||
- (key->keyval >= GDK_0 && key->keyval <= GDK_9)))
- e_table_search_input_character (et->search, key->keyval);
- g_signal_emit (G_OBJECT (et), et_signals [KEY_PRESS], 0,
- row, col, event, &return_val);
- break;
- }
- return return_val;
-}
-
-static gint
-group_start_drag (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et)
-{
- int return_val = 0;
- g_signal_emit (G_OBJECT (et), et_signals [START_DRAG], 0,
- row, col, event, &return_val);
- return return_val;
-}
-
-static void
-et_table_model_changed (ETableModel *model, ETable *et)
-{
- et->need_rebuild = TRUE;
- if (!et->rebuild_idle_id) {
- gtk_object_destroy (GTK_OBJECT (et->group));
- et->group = NULL;
- et->rebuild_idle_id = g_idle_add_full (20, changed_idle, et, NULL);
- }
-}
-
-static void
-et_table_row_changed (ETableModel *table_model, int row, ETable *et)
-{
- if (!et->need_rebuild) {
- if (e_table_group_remove (et->group, row))
- e_table_group_add (et->group, row);
- CHECK_HORIZONTAL(et);
- }
-}
-
-static void
-et_table_cell_changed (ETableModel *table_model, int view_col, int row, ETable *et)
-{
- et_table_row_changed (table_model, row, et);
-}
-
-static void
-et_table_rows_inserted (ETableModel *table_model, int row, int count, ETable *et)
-{
- /* This number has already been decremented. */
- int row_count = e_table_model_row_count(table_model);
- if (!et->need_rebuild) {
- int i;
- if (row != row_count - count)
- e_table_group_increment(et->group, row, count);
- for (i = 0; i < count; i++)
- e_table_group_add (et->group, row + i);
- CHECK_HORIZONTAL(et);
- }
-}
-
-static void
-et_table_rows_deleted (ETableModel *table_model, int row, int count, ETable *et)
-{
- int row_count = e_table_model_row_count(table_model);
- if (!et->need_rebuild) {
- int i;
- for (i = 0; i < count; i++)
- e_table_group_remove (et->group, row + i);
- if (row != row_count)
- e_table_group_decrement(et->group, row, count);
- CHECK_HORIZONTAL(et);
- }
-}
-
-static void
-et_build_groups (ETable *et)
-{
- gboolean was_grouped = et->is_grouped;
-
- et->is_grouped = e_table_sort_info_grouping_get_count(et->sort_info) > 0;
-
- et->group = e_table_group_new (GNOME_CANVAS_GROUP (et->canvas_vbox),
- et->full_header,
- et->header,
- et->model,
- et->sort_info,
- 0);
-
- if (et->use_click_to_add_end)
- e_canvas_vbox_add_item_start(E_CANVAS_VBOX(et->canvas_vbox), GNOME_CANVAS_ITEM(et->group));
- else
- e_canvas_vbox_add_item(E_CANVAS_VBOX(et->canvas_vbox), GNOME_CANVAS_ITEM(et->group));
-
- gnome_canvas_item_set(GNOME_CANVAS_ITEM(et->group),
- "alternating_row_colors", et->alternating_row_colors,
- "horizontal_draw_grid", et->horizontal_draw_grid,
- "vertical_draw_grid", et->vertical_draw_grid,
- "drawfocus", et->draw_focus,
- "cursor_mode", et->cursor_mode,
- "length_threshold", et->length_threshold,
- "uniform_row_height", et->uniform_row_height,
- "selection_model", et->selection,
- NULL);
-
- g_signal_connect (G_OBJECT (et->group), "cursor_change",
- G_CALLBACK (group_cursor_change), et);
- g_signal_connect (G_OBJECT (et->group), "cursor_activated",
- G_CALLBACK (group_cursor_activated), et);
- g_signal_connect (G_OBJECT (et->group), "double_click",
- G_CALLBACK (group_double_click), et);
- g_signal_connect (G_OBJECT (et->group), "right_click",
- G_CALLBACK (group_right_click), et);
- g_signal_connect (G_OBJECT (et->group), "click",
- G_CALLBACK (group_click), et);
- g_signal_connect (G_OBJECT (et->group), "key_press",
- G_CALLBACK (group_key_press), et);
- g_signal_connect (G_OBJECT (et->group), "start_drag",
- G_CALLBACK (group_start_drag), et);
-
-
- if (!(et->is_grouped) && was_grouped)
- et_disconnect_model (et);
-
- if (et->is_grouped && (!was_grouped)) {
- et->table_model_change_id = g_signal_connect (G_OBJECT (et->model), "model_changed",
- G_CALLBACK (et_table_model_changed), et);
-
- et->table_row_change_id = g_signal_connect (G_OBJECT (et->model), "model_row_changed",
- G_CALLBACK (et_table_row_changed), et);
-
- et->table_cell_change_id = g_signal_connect (G_OBJECT (et->model), "model_cell_changed",
- G_CALLBACK (et_table_cell_changed), et);
-
- et->table_rows_inserted_id = g_signal_connect (G_OBJECT (et->model), "model_rows_inserted",
- G_CALLBACK (et_table_rows_inserted), et);
-
- et->table_rows_deleted_id = g_signal_connect (G_OBJECT (et->model), "model_rows_deleted",
- G_CALLBACK (et_table_rows_deleted), et);
-
- }
-
- if (et->is_grouped)
- e_table_fill_table (et, et->model);
-}
-
-static gboolean
-changed_idle (gpointer data)
-{
- ETable *et = E_TABLE (data);
-
- if (et->need_rebuild) {
- if (et->group)
- gtk_object_destroy (GTK_OBJECT (et->group));
- et_build_groups(et);
- g_object_set (et->canvas_vbox,
- "width", (double) GTK_WIDGET (et->table_canvas)->allocation.width,
- NULL);
-
- if (GTK_WIDGET_REALIZED(et->table_canvas))
- table_canvas_size_allocate (GTK_WIDGET(et->table_canvas), &GTK_WIDGET(et->table_canvas)->allocation, et);
- }
-
- et->need_rebuild = 0;
- et->rebuild_idle_id = 0;
-
- CHECK_HORIZONTAL(et);
-
- return FALSE;
-}
-
-static void
-et_canvas_realize (GtkWidget *canvas, ETable *e_table)
-{
- gnome_canvas_item_set(
- e_table->white_item,
- "fill_color_gdk", &GTK_WIDGET(e_table->table_canvas)->style->base[GTK_STATE_NORMAL],
- NULL);
-
- CHECK_HORIZONTAL(e_table);
- set_header_width (e_table);
-}
-
-static gint
-white_item_event (GnomeCanvasItem *white_item, GdkEvent *event, ETable *e_table)
-{
- int return_val = 0;
- g_signal_emit (GTK_OBJECT (e_table), et_signals [WHITE_SPACE_EVENT], 0,
- event, &return_val);
- return return_val;
-}
-
-static void
-et_eti_leave_edit (ETable *et)
-{
- GnomeCanvas *canvas = et->table_canvas;
-
- if (GTK_WIDGET_HAS_FOCUS(canvas)) {
- GnomeCanvasItem *item = GNOME_CANVAS(canvas)->focused_item;
-
- if (E_IS_TABLE_ITEM(item)) {
- e_table_item_leave_edit_(E_TABLE_ITEM(item));
- }
- }
-}
-
-static gint
-et_canvas_root_event (GnomeCanvasItem *root, GdkEvent *event, ETable *e_table)
-{
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- case GDK_2BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- if (event->button.button != 4 && event->button.button != 5) {
- et_eti_leave_edit (e_table);
- return TRUE;
- }
- break;
- default:
- break;
- }
-
- return FALSE;
-}
-
-/* Finds the first descendant of the group that is an ETableItem and focuses it */
-static void
-focus_first_etable_item (ETableGroup *group)
-{
- GnomeCanvasGroup *cgroup;
- GList *l;
-
- cgroup = GNOME_CANVAS_GROUP (group);
-
- for (l = cgroup->item_list; l; l = l->next) {
- GnomeCanvasItem *i;
-
- i = GNOME_CANVAS_ITEM (l->data);
-
- if (E_IS_TABLE_GROUP (i))
- focus_first_etable_item (E_TABLE_GROUP (i));
- else if (E_IS_TABLE_ITEM (i)) {
- e_table_item_set_cursor (E_TABLE_ITEM (i), 0, 0);
- gnome_canvas_item_grab_focus (i);
- }
- }
-}
-
-/* Handler for focus events in the table_canvas; we have to repaint ourselves
- * always, and also give the focus to some ETableItem if we get focused.
- */
-static gint
-table_canvas_focus_event_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
- GnomeCanvas *canvas;
- ECanvas *ecanvas;
- ETable *etable;
-
- gtk_widget_queue_draw (widget);
- canvas = GNOME_CANVAS (widget);
- ecanvas = E_CANVAS (widget);
-
- if (!event->in) {
- gtk_im_context_focus_out(ecanvas->im_context);
- return TRUE;
- } else {
- gtk_im_context_focus_in(ecanvas->im_context);
- }
-
- etable = E_TABLE (data);
-
- if (e_table_model_row_count(etable->model) < 1
- && (etable->click_to_add)
- && !(E_TABLE_CLICK_TO_ADD(etable->click_to_add)->row)) {
- gnome_canvas_item_grab_focus (etable->canvas_vbox);
- gnome_canvas_item_grab_focus (etable->click_to_add);
- } else if (!canvas->focused_item && etable->group) {
- focus_first_etable_item (etable->group);
- }
-
- return TRUE;
-}
-
-static gboolean
-canvas_vbox_event (ECanvasVbox *vbox, GdkEventKey *key, ETable *etable)
-{
- GnomeCanvas *canvas;
-
- canvas = GNOME_CANVAS (etable->table_canvas);
- switch (key->keyval) {
- case GDK_Tab:
- case GDK_KP_Tab:
- case GDK_ISO_Left_Tab:
- if ((key->state & GDK_CONTROL_MASK) && etable->click_to_add) {
- gnome_canvas_item_grab_focus (etable->click_to_add);
- break;
- }
- default:
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-click_to_add_event (ETableClickToAdd *etcta, GdkEventKey *key, ETable *etable)
-{
- GnomeCanvas *canvas;
-
- canvas = GNOME_CANVAS (etable->table_canvas);
- switch (key->keyval) {
- case GDK_Tab:
- case GDK_KP_Tab:
- case GDK_ISO_Left_Tab:
- if (key->state & GDK_CONTROL_MASK) {
- if (etable->group) {
- if (e_table_model_row_count(etable->model) > 0)
- focus_first_etable_item (etable->group);
- else
- gtk_widget_child_focus (
- gtk_widget_get_toplevel(GTK_WIDGET(etable->table_canvas)), GTK_DIR_TAB_FORWARD);
- break;
- }
- }
- default:
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-e_table_setup_table (ETable *e_table, ETableHeader *full_header, ETableHeader *header,
- ETableModel *model)
-{
- e_table->table_canvas = GNOME_CANVAS (e_canvas_new ());
- g_signal_connect (
- G_OBJECT (e_table->table_canvas), "size_allocate",
- G_CALLBACK (table_canvas_size_allocate), e_table);
- g_signal_connect (
- G_OBJECT (e_table->table_canvas), "focus_in_event",
- G_CALLBACK (table_canvas_focus_event_cb), e_table);
- g_signal_connect (
- G_OBJECT (e_table->table_canvas), "focus_out_event",
- G_CALLBACK (table_canvas_focus_event_cb), e_table);
-
- g_signal_connect (
- G_OBJECT (e_table), "drag_begin",
- G_CALLBACK (et_drag_begin), e_table);
- g_signal_connect (
- G_OBJECT (e_table), "drag_end",
- G_CALLBACK (et_drag_end), e_table);
- g_signal_connect (
- G_OBJECT (e_table), "drag_data_get",
- G_CALLBACK (et_drag_data_get), e_table);
- g_signal_connect (
- G_OBJECT (e_table), "drag_data_delete",
- G_CALLBACK (et_drag_data_delete), e_table);
- g_signal_connect (
- G_OBJECT (e_table), "drag_motion",
- G_CALLBACK (et_drag_motion), e_table);
- g_signal_connect (
- G_OBJECT (e_table), "drag_leave",
- G_CALLBACK (et_drag_leave), e_table);
- g_signal_connect (
- G_OBJECT (e_table), "drag_drop",
- G_CALLBACK (et_drag_drop), e_table);
- g_signal_connect (
- G_OBJECT (e_table), "drag_data_received",
- G_CALLBACK (et_drag_data_received), e_table);
-
- g_signal_connect (G_OBJECT(e_table->table_canvas), "reflow",
- G_CALLBACK (table_canvas_reflow), e_table);
-
- gtk_widget_show (GTK_WIDGET (e_table->table_canvas));
-
-
- e_table->white_item = gnome_canvas_item_new(
- gnome_canvas_root(e_table->table_canvas),
- e_canvas_background_get_type(),
- "fill_color_gdk", &GTK_WIDGET(e_table->table_canvas)->style->base[GTK_STATE_NORMAL],
- NULL);
-
- g_signal_connect (G_OBJECT (e_table->white_item), "event",
- G_CALLBACK (white_item_event), e_table);
-
- g_signal_connect (G_OBJECT(e_table->table_canvas), "realize",
- G_CALLBACK(et_canvas_realize), e_table);
-
- g_signal_connect (G_OBJECT(gnome_canvas_root (e_table->table_canvas)), "event",
- G_CALLBACK(et_canvas_root_event), e_table);
-
- e_table->canvas_vbox = gnome_canvas_item_new(
- gnome_canvas_root(e_table->table_canvas),
- e_canvas_vbox_get_type(),
- "spacing", 10.0,
- NULL);
-
- g_signal_connect (
- G_OBJECT (e_table->canvas_vbox), "event",
- G_CALLBACK (canvas_vbox_event), e_table);
-
- et_build_groups(e_table);
-
- if (e_table->use_click_to_add) {
- e_table->click_to_add = gnome_canvas_item_new (
- GNOME_CANVAS_GROUP(e_table->canvas_vbox),
- e_table_click_to_add_get_type (),
- "header", e_table->header,
- "model", e_table->model,
- "message", e_table->click_to_add_message,
- NULL);
-
- if (e_table->use_click_to_add_end)
- e_canvas_vbox_add_item (
- E_CANVAS_VBOX(e_table->canvas_vbox),
- e_table->click_to_add);
- else
- e_canvas_vbox_add_item_start (
- E_CANVAS_VBOX(e_table->canvas_vbox),
- e_table->click_to_add);
-
- g_signal_connect (
- G_OBJECT (e_table->click_to_add), "event",
- G_CALLBACK (click_to_add_event), e_table);
- g_signal_connect (
- G_OBJECT (e_table->click_to_add), "cursor_change",
- G_CALLBACK (click_to_add_cursor_change), e_table);
- }
-}
-
-static void
-e_table_fill_table (ETable *e_table, ETableModel *model)
-{
- e_table_group_add_all (e_table->group);
-}
-
-/**
- * e_table_set_state_object:
- * @e_table: The #ETable object to modify
- * @state: The #ETableState to use
- *
- * This routine sets the state of the #ETable from the given
- * #ETableState.
- *
- **/
-void
-e_table_set_state_object(ETable *e_table, ETableState *state)
-{
- GValue *val = g_new0 (GValue, 1);
- g_value_init (val, G_TYPE_DOUBLE);
-
- connect_header (e_table, state);
-
- g_value_set_double (val, (double) (GTK_WIDGET(e_table->table_canvas)->allocation.width));
- g_object_set_property (G_OBJECT (e_table->header), "width", val);
- g_free (val);
-
- if (e_table->sort_info) {
- if (e_table->group_info_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_table->sort_info),
- e_table->group_info_change_id);
- if (e_table->sort_info_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_table->sort_info),
- e_table->sort_info_change_id);
- g_object_unref(e_table->sort_info);
- }
- if (state->sort_info) {
- e_table->sort_info = e_table_sort_info_duplicate(state->sort_info);
- e_table_sort_info_set_can_group (e_table->sort_info, e_table->allow_grouping);
- e_table->group_info_change_id =
- g_signal_connect (G_OBJECT (e_table->sort_info), "group_info_changed",
- G_CALLBACK (group_info_changed), e_table);
- e_table->sort_info_change_id =
- g_signal_connect (G_OBJECT (e_table->sort_info), "sort_info_changed",
- G_CALLBACK (sort_info_changed), e_table);
- }
- else
- e_table->sort_info = NULL;
-
- if (e_table->sorter)
- g_object_set(e_table->sorter,
- "sort_info", e_table->sort_info,
- NULL);
- if (e_table->header_item)
- g_object_set(e_table->header_item,
- "ETableHeader", e_table->header,
- "sort_info", e_table->sort_info,
- NULL);
- if (e_table->click_to_add)
- g_object_set(e_table->click_to_add,
- "header", e_table->header,
- NULL);
-
- e_table->need_rebuild = TRUE;
- if (!e_table->rebuild_idle_id)
- e_table->rebuild_idle_id = g_idle_add_full (20, changed_idle, e_table, NULL);
-}
-
-/**
- * e_table_set_state:
- * @e_table: The #ETable object to modify
- * @state_str: a string representing an #ETableState
- *
- * This routine sets the state of the #ETable from a string.
- *
- **/
-void
-e_table_set_state (ETable *e_table,
- const gchar *state_str)
-{
- ETableState *state;
-
- g_return_if_fail(e_table != NULL);
- g_return_if_fail(E_IS_TABLE(e_table));
- g_return_if_fail(state_str != NULL);
-
- state = e_table_state_new();
- e_table_state_load_from_string(state, state_str);
-
- if (state->col_count > 0)
- e_table_set_state_object(e_table, state);
-
- g_object_unref(state);
-}
-
-/**
- * e_table_load_state:
- * @e_table: The #ETable object to modify
- * @filename: name of the file to use
- *
- * This routine sets the state of the #ETable from a file.
- *
- **/
-void
-e_table_load_state (ETable *e_table,
- const gchar *filename)
-{
- ETableState *state;
-
- g_return_if_fail(e_table != NULL);
- g_return_if_fail(E_IS_TABLE(e_table));
- g_return_if_fail(filename != NULL);
-
- state = e_table_state_new();
- e_table_state_load_from_file(state, filename);
-
- if (state->col_count > 0)
- e_table_set_state_object(e_table, state);
-
- g_object_unref(state);
-}
-
-/**
- * e_table_get_state_object:
- * @e_table: #ETable object to act on
- *
- * Builds an #ETableState corresponding to the current state of the
- * #ETable.
- *
- * Return value:
- * The %ETableState object generated.
- **/
-ETableState *
-e_table_get_state_object (ETable *e_table)
-{
- ETableState *state;
- int full_col_count;
- int i, j;
-
- state = e_table_state_new();
- if (state->sort_info)
- g_object_unref (state->sort_info);
- state->sort_info = e_table->sort_info;
- g_object_ref(state->sort_info);
-
-
- state->col_count = e_table_header_count (e_table->header);
- full_col_count = e_table_header_count (e_table->full_header);
- state->columns = g_new(int, state->col_count);
- state->expansions = g_new(double, state->col_count);
- for (i = 0; i < state->col_count; i++) {
- ETableCol *col = e_table_header_get_column(e_table->header, i);
- state->columns[i] = -1;
- for (j = 0; j < full_col_count; j++) {
- if (col->col_idx == e_table_header_index(e_table->full_header, j)) {
- state->columns[i] = j;
- break;
- }
- }
- state->expansions[i] = col->expansion;
- }
-
- return state;
-}
-
-/**
- * e_table_get_state:
- * @e_table: The #ETable to act on.
- *
- * Builds a state object based on the current state and returns the
- * string corresponding to that state.
- *
- * Return value:
- * A string describing the current state of the #ETable.
- **/
-gchar *e_table_get_state (ETable *e_table)
-{
- ETableState *state;
- gchar *string;
-
- state = e_table_get_state_object(e_table);
- string = e_table_state_save_to_string(state);
- g_object_unref(state);
- return string;
-}
-
-/**
- * e_table_save_state:
- * @e_table: The #ETable to act on
- * @filename: name of the file to save to
- *
- * Saves the state of the @e_table object into the file pointed by
- * @filename.
- *
- **/
-void
-e_table_save_state (ETable *e_table,
- const gchar *filename)
-{
- ETableState *state;
-
- state = e_table_get_state_object(e_table);
- e_table_state_save_to_file(state, filename);
- g_object_unref(state);
-}
-
-static void
-et_selection_model_selection_changed (ETableGroup *etg, ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [SELECTION_CHANGE], 0);
-}
-
-static void
-et_selection_model_selection_row_changed (ETableGroup *etg, int row, ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [SELECTION_CHANGE], 0);
-}
-
-static ETable *
-et_real_construct (ETable *e_table, ETableModel *etm, ETableExtras *ete,
- ETableSpecification *specification, ETableState *state)
-{
- int row = 0;
- int col_count, i;
- GValue *val = g_new0 (GValue, 1);
- g_value_init (val, G_TYPE_OBJECT);
-
- if (ete)
- g_object_ref(ete);
- else {
- ete = e_table_extras_new();
- }
-
- e_table->domain = g_strdup (specification->domain);
-
- e_table->use_click_to_add = specification->click_to_add;
- e_table->use_click_to_add_end = specification->click_to_add_end;
- e_table->click_to_add_message = g_strdup (dgettext (e_table->domain, specification->click_to_add_message));
- e_table->alternating_row_colors = specification->alternating_row_colors;
- e_table->horizontal_draw_grid = specification->horizontal_draw_grid;
- e_table->vertical_draw_grid = specification->vertical_draw_grid;
- e_table->draw_focus = specification->draw_focus;
- e_table->cursor_mode = specification->cursor_mode;
- e_table->full_header = e_table_spec_to_full_header(specification, ete);
- g_object_ref (e_table->full_header);
-
- col_count = e_table_header_count (e_table->full_header);
- for (i = 0; i < col_count; i++) {
- ETableCol *col = e_table_header_get_column(e_table->full_header, i);
- if (col && col->search) {
- e_table->current_search_col = col;
- e_table->search_col_set = TRUE;
- break;
- }
- }
-
- e_table->model = etm;
- g_object_ref (etm);
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
- connect_header (e_table, state);
- e_table->horizontal_scrolling = specification->horizontal_scrolling;
- e_table->horizontal_resize = specification->horizontal_resize;
- e_table->allow_grouping = specification->allow_grouping;
-
- e_table->sort_info = state->sort_info;
- g_object_ref (state->sort_info);
- e_table_sort_info_set_can_group (e_table->sort_info, e_table->allow_grouping);
-
- e_table->group_info_change_id =
- g_signal_connect (G_OBJECT (e_table->sort_info), "group_info_changed",
- G_CALLBACK (group_info_changed), e_table);
-
- e_table->sort_info_change_id =
- g_signal_connect (G_OBJECT (e_table->sort_info), "sort_info_changed",
- G_CALLBACK (sort_info_changed), e_table);
-
-
- g_value_set_object (val, e_table->sort_info);
- g_object_set_property (G_OBJECT(e_table->header), "sort_info", val);
- g_free (val);
-
- e_table->sorter = e_table_sorter_new(etm, e_table->full_header, e_table->sort_info);
-
- g_object_set (e_table->selection,
- "model", etm,
- "selection_mode", specification->selection_mode,
- "cursor_mode", specification->cursor_mode,
- "sorter", e_table->sorter,
- "header", e_table->header,
- NULL);
-
- g_signal_connect(e_table->selection, "selection_changed",
- G_CALLBACK (et_selection_model_selection_changed), e_table);
- g_signal_connect(e_table->selection, "selection_row_changed",
- G_CALLBACK (et_selection_model_selection_row_changed), e_table);
-
- if (!specification->no_headers) {
- e_table_setup_header (e_table);
- }
- e_table_setup_table (e_table, e_table->full_header, e_table->header, etm);
- e_table_fill_table (e_table, etm);
-
- gtk_layout_get_vadjustment (GTK_LAYOUT (e_table->table_canvas))->step_increment = 20;
- gtk_adjustment_changed(gtk_layout_get_vadjustment (GTK_LAYOUT (e_table->table_canvas)));
- gtk_layout_get_hadjustment (GTK_LAYOUT (e_table->table_canvas))->step_increment = 20;
- gtk_adjustment_changed(gtk_layout_get_hadjustment (GTK_LAYOUT (e_table->table_canvas)));
-
- if (!specification->no_headers) {
- /*
- * The header
- */
- gtk_table_attach (GTK_TABLE (e_table), GTK_WIDGET (e_table->header_canvas),
- 0, 1, 0 + row, 1 + row,
- GTK_FILL | GTK_EXPAND,
- GTK_FILL, 0, 0);
- row ++;
- }
- gtk_table_attach (GTK_TABLE (e_table), GTK_WIDGET (e_table->table_canvas),
- 0, 1, 0 + row, 1 + row,
- GTK_FILL | GTK_EXPAND,
- GTK_FILL | GTK_EXPAND,
- 0, 0);
-
- gtk_widget_pop_colormap ();
-
- g_object_unref(ete);
-
- return e_table;
-}
-
-/**
- * e_table_construct:
- * @e_table: The newly created #ETable object.
- * @etm: The model for this table.
- * @ete: An optional #ETableExtras. (%NULL is valid.)
- * @spec_str: The spec.
- * @state_str: An optional state. (%NULL is valid.)
- *
- * This is the internal implementation of e_table_new() for use by
- * subclasses or language bindings. See e_table_new() for details.
- *
- * Return value:
- * The passed in value @e_table or %NULL if there's an error.
- **/
-ETable *
-e_table_construct (ETable *e_table, ETableModel *etm, ETableExtras *ete,
- const char *spec_str, const char *state_str)
-{
- ETableSpecification *specification;
- ETableState *state;
-
- g_return_val_if_fail(e_table != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE(e_table), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_str != NULL, NULL);
-
- g_object_ref (etm);
-
- specification = e_table_specification_new();
- g_object_ref (specification);
- if (!e_table_specification_load_from_string(specification, spec_str)) {
- g_object_unref(specification);
- return NULL;
- }
-
- if (state_str) {
- state = e_table_state_new();
- g_object_ref (state);
- e_table_state_load_from_string(state, state_str);
- if (state->col_count <= 0) {
- g_object_unref(state);
- state = specification->state;
- g_object_ref(state);
- }
- } else {
- state = specification->state;
- g_object_ref(state);
- }
-
- e_table = et_real_construct (e_table, etm, ete, specification, state);
-
- e_table->spec = specification;
- g_object_unref(state);
-
- return e_table;
-}
-
-/**
- * e_table_construct_from_spec_file:
- * @e_table: The newly created #ETable object.
- * @etm: The model for this table.
- * @ete: An optional #ETableExtras. (%NULL is valid.)
- * @spec_fn: The filename of the spec.
- * @state_fn: An optional state file. (%NULL is valid.)
- *
- * This is the internal implementation of e_table_new_from_spec_file()
- * for use by subclasses or language bindings. See
- * e_table_new_from_spec_file() for details.
- *
- * Return value:
- * The passed in value @e_table or %NULL if there's an error.
- **/
-ETable *
-e_table_construct_from_spec_file (ETable *e_table, ETableModel *etm, ETableExtras *ete,
- const char *spec_fn, const char *state_fn)
-{
- ETableSpecification *specification;
- ETableState *state;
-
- g_return_val_if_fail(e_table != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE(e_table), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- specification = e_table_specification_new();
- if (!e_table_specification_load_from_file(specification, spec_fn)) {
- g_object_unref(specification);
- return NULL;
- }
-
- if (state_fn) {
- state = e_table_state_new();
- if (!e_table_state_load_from_file(state, state_fn)) {
- g_object_unref(state);
- state = specification->state;
- g_object_ref(state);
- }
- if (state->col_count <= 0) {
- g_object_unref(state);
- state = specification->state;
- g_object_ref(state);
- }
- } else {
- state = specification->state;
- g_object_ref(state);
- }
-
- e_table = et_real_construct (e_table, etm, ete, specification, state);
-
- e_table->spec = specification;
- g_object_unref(state);
-
- return e_table;
-}
-
-/**
- * e_table_new:
- * @etm: The model for this table.
- * @ete: An optional #ETableExtras. (%NULL is valid.)
- * @spec: The spec.
- * @state: An optional state. (%NULL is valid.)
- *
- * This function creates an #ETable from the given parameters. The
- * #ETableModel is a table model to be represented. The #ETableExtras
- * is an optional set of pixbufs, cells, and sorting functions to be
- * used when interpreting the spec. If you pass in %NULL it uses the
- * default #ETableExtras. (See e_table_extras_new()).
- *
- * @spec is the specification of the set of viewable columns and the
- * default sorting state and such. @state is an optional string
- * specifying the current sorting state and such. If @state is NULL,
- * then the default state from the spec will be used.
- *
- * Return value:
- * The newly created #ETable or %NULL if there's an error.
- **/
-GtkWidget *
-e_table_new (ETableModel *etm, ETableExtras *ete, const char *spec, const char *state)
-{
- ETable *e_table;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec != NULL, NULL);
-
- e_table = g_object_new (E_TABLE_TYPE, NULL);
-
- e_table = e_table_construct (e_table, etm, ete, spec, state);
-
- return GTK_WIDGET (e_table);
-}
-
-/**
- * e_table_new_from_spec_file:
- * @etm: The model for this table.
- * @ete: An optional #ETableExtras. (%NULL is valid.)
- * @spec_fn: The filename of the spec.
- * @state_fn: An optional state file. (%NULL is valid.)
- *
- * This is very similar to e_table_new(), except instead of passing in
- * strings you pass in the file names of the spec and state to load.
- *
- * @spec_fn is the filename of the spec to load. If this file doesn't
- * exist, e_table_new_from_spec_file will return %NULL.
- *
- * @state_fn is the filename of the initial state to load. If this is
- * %NULL or if the specified file doesn't exist, the default state
- * from the spec file is used.
- *
- * Return value:
- * The newly created #ETable or %NULL if there's an error.
- **/
-GtkWidget *
-e_table_new_from_spec_file (ETableModel *etm, ETableExtras *ete, const char *spec_fn, const char *state_fn)
-{
- ETable *e_table;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- e_table = g_object_new (E_TABLE_TYPE, NULL);
-
- e_table = e_table_construct_from_spec_file (e_table, etm, ete, spec_fn, state_fn);
-
- return GTK_WIDGET (e_table);
-}
-
-#if 0
-static xmlNode *
-et_build_column_spec (ETable *e_table)
-{
- xmlNode *columns_shown;
- gint i;
- gint col_count;
-
- columns_shown = xmlNewNode (NULL, "columns-shown");
-
- col_count = e_table_header_count (e_table->header);
- for (i = 0; i < col_count; i++){
- gchar *text = g_strdup_printf ("%d", e_table_header_index(e_table->header, i));
- xmlNewChild (columns_shown, NULL, "column", text);
- g_free (text);
- }
-
- return columns_shown;
-}
-
-static xmlNode *
-et_build_grouping_spec (ETable *e_table)
-{
- xmlNode *node;
- xmlNode *grouping;
- int i;
- const int sort_count = e_table_sort_info_sorting_get_count (e_table->sort_info);
- const int group_count = e_table_sort_info_grouping_get_count (e_table->sort_info);
-
- grouping = xmlNewNode (NULL, "grouping");
- node = grouping;
-
- for (i = 0; i < group_count; i++) {
- ETableSortColumn column = e_table_sort_info_grouping_get_nth(e_table->sort_info, i);
- xmlNode *new_node = xmlNewChild(node, NULL, "group", NULL);
-
- e_xml_set_integer_prop_by_name (new_node, "column", column.column);
- e_xml_set_integer_prop_by_name (new_node, "ascending", column.ascending);
- node = new_node;
- }
-
- for (i = 0; i < sort_count; i++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(e_table->sort_info, i);
- xmlNode *new_node = xmlNewChild(node, NULL, "leaf", NULL);
-
- e_xml_set_integer_prop_by_name (new_node, "column", column.column);
- e_xml_set_integer_prop_by_name (new_node, "ascending", column.ascending);
- node = new_node;
- }
-
- return grouping;
-}
-
-static xmlDoc *
-et_build_tree (ETable *e_table)
-{
- xmlDoc *doc;
- xmlNode *root;
-
- doc = xmlNewDoc ("1.0");
- if (doc == NULL)
- return NULL;
-
- root = xmlNewDocNode (doc, NULL, "ETableSpecification", NULL);
- xmlDocSetRootElement (doc, root);
- xmlAddChild (root, et_build_column_spec (e_table));
- xmlAddChild (root, et_build_grouping_spec (e_table));
-
- return doc;
-}
-
-gchar *
-e_table_get_specification (ETable *e_table)
-{
- xmlDoc *doc;
- xmlChar *buffer;
- gint size;
-
- g_return_val_if_fail(e_table != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE(e_table), NULL);
-
- doc = et_build_tree (e_table);
- xmlDocDumpMemory (doc, &buffer, &size);
- xmlFreeDoc (doc);
-
- return buffer;
-}
-
-int
-e_table_set_specification (ETable *e_table, const char *spec)
-{
- xmlDoc *xmlSpec;
- int ret;
-
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
- g_return_val_if_fail(spec != NULL, -1);
-
- /* doesn't work yet, sigh */
- xmlSpec = xmlParseMemory ((char *)spec, strlen(spec));
- ret = et_real_set_specification(e_table, xmlSpec);
- xmlFreeDoc (xmlSpec);
-
- return ret;
-}
-
-void
-e_table_save_specification (ETable *e_table, const char *filename)
-{
- xmlDoc *doc = et_build_tree (e_table);
-
- g_return_if_fail(e_table != NULL);
- g_return_if_fail(E_IS_TABLE(e_table));
- g_return_if_fail(filename != NULL);
-
- e_xml_save_file (filename, doc);
-
- xmlFreeDoc (doc);
-}
-
-int
-e_table_load_specification (ETable *e_table, gchar *filename)
-{
- xmlDoc *xmlSpec;
- int ret;
-
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
- g_return_val_if_fail(filename != NULL, -1);
-
- /* doesn't work yet, yay */
- xmlSpec = xmlParseFile (filename);
- ret = et_real_set_specification(e_table, xmlSpec);
- xmlFreeDoc (xmlSpec);
-
- return ret;
-}
-#endif
-
-/**
- * e_table_set_cursor_row:
- * @e_table: The #ETable to set the cursor row of
- * @row: The row number
- *
- * Sets the cursor row and the selection to the given row number.
- **/
-void
-e_table_set_cursor_row (ETable *e_table, int row)
-{
- g_return_if_fail(e_table != NULL);
- g_return_if_fail(E_IS_TABLE(e_table));
- g_return_if_fail(row >= 0);
-
- g_object_set(e_table->selection,
- "cursor_row", row,
- NULL);
-}
-
-/**
- * e_table_get_cursor_row:
- * @e_table: The #ETable to query
- *
- * Calculates the cursor row. -1 means that we don't have a cursor.
- *
- * Return value:
- * Cursor row
- **/
-int
-e_table_get_cursor_row (ETable *e_table)
-{
- int row;
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
-
- g_object_get(e_table->selection,
- "cursor_row", &row,
- NULL);
- return row;
-}
-
-/**
- * e_table_selected_row_foreach:
- * @e_table: The #ETable to act on
- * @callback: The callback function to call
- * @closure: The value passed to the callback's closure argument
- *
- * Calls the given @callback function once for every selected row.
- *
- * If you change the selection or delete or add rows to the table
- * during these callbacks, problems can occur. A standard thing to do
- * is to create a list of rows or objects the function is called upon
- * and then act upon that list. (In inverse order if it's rows.)
- **/
-void
-e_table_selected_row_foreach (ETable *e_table,
- EForeachFunc callback,
- gpointer closure)
-{
- g_return_if_fail(e_table != NULL);
- g_return_if_fail(E_IS_TABLE(e_table));
-
- e_selection_model_foreach(E_SELECTION_MODEL (e_table->selection),
- callback,
- closure);
-}
-
-/**
- * e_table_selected_count:
- * @e_table: The #ETable to query
- *
- * Counts the number of selected rows.
- *
- * Return value:
- * The number of rows selected.
- **/
-gint
-e_table_selected_count (ETable *e_table)
-{
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
-
- return e_selection_model_selected_count(E_SELECTION_MODEL (e_table->selection));
-}
-
-/**
- * e_table_select_all:
- * @table: The #ETable to modify
- *
- * Selects all the rows in @table.
- **/
-void
-e_table_select_all (ETable *table)
-{
- g_return_if_fail (table != NULL);
- g_return_if_fail (E_IS_TABLE (table));
-
- e_selection_model_select_all (E_SELECTION_MODEL (table->selection));
-}
-
-/**
- * e_table_invert_selection:
- * @table: The #ETable to modify
- *
- * Inverts the selection in @table.
- **/
-void
-e_table_invert_selection (ETable *table)
-{
- g_return_if_fail (table != NULL);
- g_return_if_fail (E_IS_TABLE (table));
-
- e_selection_model_invert_selection (E_SELECTION_MODEL (table->selection));
-}
-
-
-/**
- * e_table_get_printable:
- * @e_table: #ETable to query
- *
- * Used for printing your #ETable.
- *
- * Return value:
- * The #EPrintable to print.
- **/
-EPrintable *
-e_table_get_printable (ETable *e_table)
-{
- g_return_val_if_fail(e_table != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE(e_table), NULL);
-
- return e_table_group_get_printable(e_table->group);
-}
-
-/**
- * e_table_right_click_up:
- * @table: The #ETable to modify.
- *
- * Call this function when you're done handling the right click if you
- * return TRUE from the "right_click" signal.
- **/
-void
-e_table_right_click_up (ETable *table)
-{
- e_selection_model_right_click_up(E_SELECTION_MODEL(table->selection));
-}
-
-/**
- * e_table_commit_click_to_add:
- * @table: The #ETable to modify
- *
- * Commits the current values in the click to add to the table.
- **/
-void
-e_table_commit_click_to_add (ETable *table)
-{
- et_eti_leave_edit (table);
- if (table->click_to_add)
- e_table_click_to_add_commit(E_TABLE_CLICK_TO_ADD(table->click_to_add));
-}
-
-static void
-et_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ETable *etable = E_TABLE (object);
-
- switch (prop_id){
- case PROP_MODEL:
- g_value_set_object (value, etable->model);
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- g_value_set_boolean (value, etable->uniform_row_height);
- break;
- case PROP_ALWAYS_SEARCH:
- g_value_set_boolean (value, etable->always_search);
- break;
- case PROP_USE_CLICK_TO_ADD:
- g_value_set_boolean (value, etable->use_click_to_add);
- break;
- default:
- break;
- }
-}
-
-typedef struct {
- char *arg;
- gboolean setting;
-} bool_closure;
-
-static void
-et_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- ETable *etable = E_TABLE (object);
-
- switch (prop_id){
- case PROP_LENGTH_THRESHOLD:
- etable->length_threshold = g_value_get_int (value);
- if (etable->group) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etable->group),
- "length_threshold", etable->length_threshold,
- NULL);
- }
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- etable->uniform_row_height = g_value_get_boolean (value);
- if (etable->group) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etable->group),
- "uniform_row_height", etable->uniform_row_height,
- NULL);
- }
- break;
- case PROP_ALWAYS_SEARCH:
- if (etable->always_search == g_value_get_boolean (value))
- return;
-
- etable->always_search = g_value_get_boolean (value);
- clear_current_search_col (etable);
- break;
- case PROP_USE_CLICK_TO_ADD:
- if (etable->use_click_to_add == g_value_get_boolean (value))
- return;
-
- etable->use_click_to_add = g_value_get_boolean (value);
- clear_current_search_col (etable);
-
- if (etable->use_click_to_add) {
- etable->click_to_add = gnome_canvas_item_new
- (GNOME_CANVAS_GROUP(etable->canvas_vbox),
- e_table_click_to_add_get_type (),
- "header", etable->header,
- "model", etable->model,
- "message", etable->click_to_add_message,
- NULL);
-
- if (etable->use_click_to_add_end)
- e_canvas_vbox_add_item (E_CANVAS_VBOX(etable->canvas_vbox),
- etable->click_to_add);
- else
- e_canvas_vbox_add_item_start (E_CANVAS_VBOX(etable->canvas_vbox),
- etable->click_to_add);
-
- g_signal_connect (G_OBJECT (etable->click_to_add), "cursor_change",
- G_CALLBACK (click_to_add_cursor_change), etable);
- } else {
- gtk_object_destroy (GTK_OBJECT (etable->click_to_add));
- etable->click_to_add = NULL;
- }
- break;
- }
-}
-
-static void
-set_scroll_adjustments (ETable *table,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment)
-{
- if (vadjustment != NULL) {
- vadjustment->step_increment = 20;
- gtk_adjustment_changed(vadjustment);
- }
- if (hadjustment != NULL) {
- hadjustment->step_increment = 20;
- gtk_adjustment_changed(hadjustment);
- }
-
- if (table->table_canvas != NULL) {
- gtk_layout_set_hadjustment (GTK_LAYOUT(table->table_canvas),
- hadjustment);
- gtk_layout_set_vadjustment (GTK_LAYOUT(table->table_canvas),
- vadjustment);
- }
-
- if (table->header_canvas != NULL)
- gtk_layout_set_hadjustment (GTK_LAYOUT(table->header_canvas),
- hadjustment);
-}
-
-/**
- * e_table_get_next_row:
- * @e_table: The #ETable to query
- * @model_row: The model row to go from
- *
- * This function is used when your table is sorted, but you're using
- * model row numbers. It returns the next row in sorted order as a model row.
- *
- * Return value:
- * The model row number.
- **/
-gint
-e_table_get_next_row (ETable *e_table,
- gint model_row)
-{
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
-
- if (e_table->sorter) {
- int i;
- i = e_sorter_model_to_sorted(E_SORTER (e_table->sorter), model_row);
- i++;
- if (i < e_table_model_row_count(e_table->model)) {
- return e_sorter_sorted_to_model(E_SORTER (e_table->sorter), i);
- } else
- return -1;
- } else
- if (model_row < e_table_model_row_count(e_table->model) - 1)
- return model_row + 1;
- else
- return -1;
-}
-
-/**
- * e_table_get_prev_row:
- * @e_table: The #ETable to query
- * @model_row: The model row to go from
- *
- * This function is used when your table is sorted, but you're using
- * model row numbers. It returns the previous row in sorted order as
- * a model row.
- *
- * Return value:
- * The model row number.
- **/
-gint
-e_table_get_prev_row (ETable *e_table,
- gint model_row)
-{
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
-
- if (e_table->sorter) {
- int i;
- i = e_sorter_model_to_sorted(E_SORTER (e_table->sorter), model_row);
- i--;
- if (i >= 0)
- return e_sorter_sorted_to_model(E_SORTER (e_table->sorter), i);
- else
- return -1;
- } else
- return model_row - 1;
-}
-
-/**
- * e_table_model_to_view_row:
- * @e_table: The #ETable to query
- * @model_row: The model row number
- *
- * Turns a model row into a view row.
- *
- * Return value:
- * The view row number.
- **/
-gint
-e_table_model_to_view_row (ETable *e_table,
- gint model_row)
-{
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
-
- if (e_table->sorter)
- return e_sorter_model_to_sorted(E_SORTER (e_table->sorter), model_row);
- else
- return model_row;
-}
-
-/**
- * e_table_view_to_model_row:
- * @e_table: The #ETable to query
- * @view_row: The view row number
- *
- * Turns a view row into a model row.
- *
- * Return value:
- * The model row number.
- **/
-gint
-e_table_view_to_model_row (ETable *e_table,
- gint view_row)
-{
- g_return_val_if_fail(e_table != NULL, -1);
- g_return_val_if_fail(E_IS_TABLE(e_table), -1);
-
- if (e_table->sorter)
- return e_sorter_sorted_to_model (E_SORTER (e_table->sorter), view_row);
- else
- return view_row;
-}
-
-/**
- * e_table_get_cell_at:
- * @table: An #ETable widget
- * @x: X coordinate for the pixel
- * @y: Y coordinate for the pixel
- * @row_return: Pointer to return the row value
- * @col_return: Pointer to return the column value
- *
- * Return the row and column for the cell in which the pixel at (@x, @y) is
- * contained.
- **/
-void
-e_table_get_cell_at (ETable *table,
- int x, int y,
- int *row_return, int *col_return)
-{
- g_return_if_fail (table != NULL);
- g_return_if_fail (E_IS_TABLE (table));
- g_return_if_fail (row_return != NULL);
- g_return_if_fail (col_return != NULL);
-
- /* FIXME it would be nice if it could handle a NULL row_return or
- * col_return gracefully. */
-
- x += GTK_LAYOUT(table->table_canvas)->hadjustment->value;
- y += GTK_LAYOUT(table->table_canvas)->vadjustment->value;
- e_table_group_compute_location(table->group, &x, &y, row_return, col_return);
-}
-
-/**
- * e_table_get_cell_geometry:
- * @table: The #ETable.
- * @row: The row to get the geometry of.
- * @col: The col to get the geometry of.
- * @x_return: Returns the x coordinate of the upper left hand corner of the cell with respect to the widget.
- * @y_return: Returns the y coordinate of the upper left hand corner of the cell with respect to the widget.
- * @width_return: Returns the width of the cell.
- * @height_return: Returns the height of the cell.
- *
- * Returns the x, y, width, and height of the given cell. These can
- * all be #NULL and they just won't be set.
- **/
-void
-e_table_get_cell_geometry (ETable *table,
- int row, int col,
- int *x_return, int *y_return,
- int *width_return, int *height_return)
-{
- g_return_if_fail (table != NULL);
- g_return_if_fail (E_IS_TABLE (table));
-
- e_table_group_get_cell_geometry(table->group, &row, &col, x_return, y_return, width_return, height_return);
-
- if (x_return)
- (*x_return) -= GTK_LAYOUT(table->table_canvas)->hadjustment->value;
- if (y_return) {
- (*y_return) -= GTK_LAYOUT(table->table_canvas)->vadjustment->value;
- (*y_return) += GTK_WIDGET(table->header_canvas)->allocation.height;
- }
-}
-
-/**
- * e_table_get_selection_model:
- * @table: The #ETable to query
- *
- * Returns the table's #ESelectionModel in case you want to access it
- * directly.
- *
- * Return value:
- * The #ESelectionModel.
- **/
-ESelectionModel *
-e_table_get_selection_model (ETable *table)
-{
- g_return_val_if_fail (table != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE (table), NULL);
-
- return E_SELECTION_MODEL (table->selection);
-}
-
-struct _ETableDragSourceSite
-{
- GdkModifierType start_button_mask;
- GtkTargetList *target_list; /* Targets for drag data */
- GdkDragAction actions; /* Possible actions */
- GdkColormap *colormap; /* Colormap for drag icon */
- GdkPixmap *pixmap; /* Icon for drag data */
- GdkBitmap *mask;
-
- /* Stored button press information to detect drag beginning */
- gint state;
- gint x, y;
- gint row, col;
-};
-
-typedef enum
-{
- GTK_DRAG_STATUS_DRAG,
- GTK_DRAG_STATUS_WAIT,
- GTK_DRAG_STATUS_DROP
-} GtkDragStatus;
-
-typedef struct _GtkDragDestInfo GtkDragDestInfo;
-typedef struct _GtkDragSourceInfo GtkDragSourceInfo;
-
-struct _GtkDragDestInfo
-{
- GtkWidget *widget; /* Widget in which drag is in */
- GdkDragContext *context; /* Drag context */
- GtkDragSourceInfo *proxy_source; /* Set if this is a proxy drag */
- GtkSelectionData *proxy_data; /* Set while retrieving proxied data */
- gboolean dropped : 1; /* Set after we receive a drop */
- guint32 proxy_drop_time; /* Timestamp for proxied drop */
- gboolean proxy_drop_wait : 1; /* Set if we are waiting for a
- * status reply before sending
- * a proxied drop on.
- */
- gint drop_x, drop_y; /* Position of drop */
-};
-
-struct _GtkDragSourceInfo
-{
- GtkWidget *widget;
- GtkTargetList *target_list; /* Targets for drag data */
- GdkDragAction possible_actions; /* Actions allowed by source */
- GdkDragContext *context; /* drag context */
- GtkWidget *icon_window; /* Window for drag */
- GtkWidget *ipc_widget; /* GtkInvisible for grab, message passing */
- GdkCursor *cursor; /* Cursor for drag */
- gint hot_x, hot_y; /* Hot spot for drag */
- gint button; /* mouse button starting drag */
-
- GtkDragStatus status; /* drag status */
- GdkEvent *last_event; /* motion event waiting for response */
-
- gint start_x, start_y; /* Initial position */
- gint cur_x, cur_y; /* Current Position */
-
- GList *selections; /* selections we've claimed */
-
- GtkDragDestInfo *proxy_dest; /* Set if this is a proxy drag */
-
- guint drop_timeout; /* Timeout for aborting drop */
- guint destroy_icon : 1; /* If true, destroy icon_window
- */
-};
-
-/* Drag & drop stuff. */
-/* Target */
-
-/**
- * e_table_drag_get_data:
- * @table:
- * @row:
- * @col:
- * @context:
- * @target:
- * @time:
- *
- *
- **/
-void
-e_table_drag_get_data (ETable *table,
- int row,
- int col,
- GdkDragContext *context,
- GdkAtom target,
- guint32 time)
-{
- g_return_if_fail(table != NULL);
- g_return_if_fail(E_IS_TABLE(table));
-
- gtk_drag_get_data(GTK_WIDGET(table),
- context,
- target,
- time);
-}
-
-/**
- * e_table_drag_highlight:
- * @table: The #ETable to highlight
- * @row: The row number of the cell to highlight
- * @col: The column number of the cell to highlight
- *
- * Set col to -1 to highlight the entire row. If row is -1, this is
- * identical to e_table_drag_unhighlight().
- **/
-void
-e_table_drag_highlight (ETable *table,
- int row,
- int col)
-{
- g_return_if_fail(table != NULL);
- g_return_if_fail(E_IS_TABLE(table));
-
- if (row != -1) {
- int x, y, width, height;
- if (col == -1) {
- e_table_get_cell_geometry (table, row, 0, &x, &y, &width, &height);
- x = 0;
- width = GTK_WIDGET (table->table_canvas)->allocation.width;
- } else {
- e_table_get_cell_geometry (table, row, col, &x, &y, &width, &height);
- x += GTK_LAYOUT(table->table_canvas)->hadjustment->value;
- }
- y += GTK_LAYOUT(table->table_canvas)->vadjustment->value;
-
- if (table->drop_highlight == NULL) {
- table->drop_highlight =
- gnome_canvas_item_new (gnome_canvas_root (table->table_canvas),
- gnome_canvas_rect_get_type (),
- "fill_color", NULL,
- /* "outline_color", "black",
- "width_pixels", 1,*/
- "outline_color_gdk", &(GTK_WIDGET (table)->style->fg[GTK_STATE_NORMAL]),
- NULL);
- }
- gnome_canvas_item_set (table->drop_highlight,
- "x1", (double) x,
- "x2", (double) x + width - 1,
- "y1", (double) y,
- "y2", (double) y + height - 1,
- NULL);
- } else {
- if (table->drop_highlight) {
- gtk_object_destroy (GTK_OBJECT (table->drop_highlight));
- table->drop_highlight = NULL;
- }
- }
-}
-
-/**
- * e_table_drag_unhighlight:
- * @table: The #ETable to unhighlight
- *
- * Removes the highlight from an #ETable.
- **/
-void
-e_table_drag_unhighlight (ETable *table)
-{
- g_return_if_fail(table != NULL);
- g_return_if_fail(E_IS_TABLE(table));
-
- if (table->drop_highlight) {
- gtk_object_destroy (GTK_OBJECT (table->drop_highlight));
- table->drop_highlight = NULL;
- }
-}
-
-void e_table_drag_dest_set (ETable *table,
- GtkDestDefaults flags,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions)
-{
- g_return_if_fail(table != NULL);
- g_return_if_fail(E_IS_TABLE(table));
-
- gtk_drag_dest_set(GTK_WIDGET(table),
- flags,
- targets,
- n_targets,
- actions);
-}
-
-void e_table_drag_dest_set_proxy (ETable *table,
- GdkWindow *proxy_window,
- GdkDragProtocol protocol,
- gboolean use_coordinates)
-{
- g_return_if_fail(table != NULL);
- g_return_if_fail(E_IS_TABLE(table));
-
- gtk_drag_dest_set_proxy(GTK_WIDGET(table),
- proxy_window,
- protocol,
- use_coordinates);
-}
-
-/*
- * There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-
-void
-e_table_drag_dest_unset (GtkWidget *widget)
-{
- g_return_if_fail(widget != NULL);
- g_return_if_fail(E_IS_TABLE(widget));
-
- gtk_drag_dest_unset(widget);
-}
-
-/* Source side */
-
-static gint
-et_real_start_drag (ETable *table, int row, int col, GdkEvent *event)
-{
- GtkDragSourceInfo *info;
- GdkDragContext *context;
- ETableDragSourceSite *site;
-
- if (table->do_drag) {
- site = table->site;
-
- site->state = 0;
- context = e_table_drag_begin (table, row, col,
- site->target_list,
- site->actions,
- 1, event);
-
- if (context) {
- info = g_dataset_get_data (context, "gtk-info");
-
- if (info && !info->icon_window) {
- if (site->pixmap)
- gtk_drag_set_icon_pixmap (context,
- site->colormap,
- site->pixmap,
- site->mask, -2, -2);
- else
- gtk_drag_set_icon_default (context);
- }
- }
- return TRUE;
- }
- return FALSE;
-}
-
-/**
- * e_table_drag_source_set:
- * @table: The #ETable to set up as a drag site
- * @start_button_mask: Mask of allowed buttons to start drag
- * @targets: Table of targets for this source
- * @n_targets: Number of targets in @targets
- * @actions: Actions allowed for this source
- *
- * Registers this table as a drag site, and possibly adds default behaviors.
- **/
-void
-e_table_drag_source_set (ETable *table,
- GdkModifierType start_button_mask,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions)
-{
- ETableDragSourceSite *site;
- GtkWidget *canvas;
-
- g_return_if_fail(table != NULL);
- g_return_if_fail(E_IS_TABLE(table));
-
- canvas = GTK_WIDGET(table->table_canvas);
- site = table->site;
-
- gtk_widget_add_events (canvas,
- gtk_widget_get_events (canvas) |
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON_MOTION_MASK | GDK_STRUCTURE_MASK);
-
- table->do_drag = TRUE;
-
- if (site) {
- if (site->target_list)
- gtk_target_list_unref (site->target_list);
- } else {
- site = g_new0 (ETableDragSourceSite, 1);
- table->site = site;
- }
-
- site->start_button_mask = start_button_mask;
-
- if (targets)
- site->target_list = gtk_target_list_new (targets, n_targets);
- else
- site->target_list = NULL;
-
- site->actions = actions;
-}
-
-/**
- * e_table_drag_source_unset:
- * @table: The #ETable to un set up as a drag site
- *
- * Unregisters this #ETable as a drag site.
- **/
-void
-e_table_drag_source_unset (ETable *table)
-{
- ETableDragSourceSite *site;
-
- g_return_if_fail (table != NULL);
- g_return_if_fail (E_IS_TABLE(table));
-
- site = table->site;
-
- if (site) {
- if (site->target_list)
- gtk_target_list_unref (site->target_list);
- g_free (site);
- table->site = NULL;
- }
- table->do_drag = FALSE;
-}
-
-/* There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-
-/**
- * e_table_drag_begin:
- * @table: The #ETable to drag from
- * @row: The row number of the cell
- * @col: The col number of the cell
- * @targets: The list of targets supported by the drag
- * @actions: The available actions supported by the drag
- * @button: The button held down for the drag
- * @event: The event that initiated the drag
- *
- * Start a drag from this cell.
- *
- * Return value:
- * The drag context.
- **/
-GdkDragContext *
-e_table_drag_begin (ETable *table,
- int row,
- int col,
- GtkTargetList *targets,
- GdkDragAction actions,
- gint button,
- GdkEvent *event)
-{
- g_return_val_if_fail (table != NULL, NULL);
- g_return_val_if_fail (E_IS_TABLE(table), NULL);
-
- table->drag_row = row;
- table->drag_col = col;
-
- return gtk_drag_begin(GTK_WIDGET(table),
- targets,
- actions,
- button,
- event);
-}
-
-static void
-et_drag_begin (GtkWidget *widget,
- GdkDragContext *context,
- ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_BEGIN], 0,
- et->drag_row, et->drag_col, context);
-}
-
-static void
-et_drag_end (GtkWidget *widget,
- GdkDragContext *context,
- ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_END], 0,
- et->drag_row, et->drag_col, context);
-}
-
-static void
-et_drag_data_get(GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_DATA_GET], 0,
- et->drag_row, et->drag_col, context, selection_data,
- info, time);
-}
-
-static void
-et_drag_data_delete(GtkWidget *widget,
- GdkDragContext *context,
- ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_DATA_DELETE], 0,
- et->drag_row, et->drag_col, context);
-}
-
-static gboolean
-do_drag_motion(ETable *et,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time)
-{
- gboolean ret_val;
- int row = -1, col = -1;
- GtkWidget *widget;
-
- widget = GTK_WIDGET (et);
-
- e_table_get_cell_at (et, x, y, &row, &col);
-
- if (row != et->drop_row && col != et->drop_row) {
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_LEAVE], 0,
- et->drop_row, et->drop_col, context, time);
- }
- et->drop_row = row;
- et->drop_col = col;
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_MOTION], 0,
- et->drop_row, et->drop_col, context, x, y, time, &ret_val);
-
- return ret_val;
-}
-
-static gboolean
-scroll_timeout (gpointer data)
-{
- ETable *et = data;
- int dx = 0, dy = 0;
- GtkAdjustment *h, *v;
- double hvalue, vvalue;
-
- if (et->scroll_direction & ET_SCROLL_DOWN)
- dy += 20;
- if (et->scroll_direction & ET_SCROLL_UP)
- dy -= 20;
-
- if (et->scroll_direction & ET_SCROLL_RIGHT)
- dx += 20;
- if (et->scroll_direction & ET_SCROLL_LEFT)
- dx -= 20;
-
- h = GTK_LAYOUT(et->table_canvas)->hadjustment;
- v = GTK_LAYOUT(et->table_canvas)->vadjustment;
-
- hvalue = h->value;
- vvalue = v->value;
-
- gtk_adjustment_set_value(h, CLAMP(h->value + dx, h->lower, h->upper - h->page_size));
- gtk_adjustment_set_value(v, CLAMP(v->value + dy, v->lower, v->upper - v->page_size));
-
- if (h->value != hvalue ||
- v->value != vvalue)
- do_drag_motion(et,
- et->last_drop_context,
- et->last_drop_x,
- et->last_drop_y,
- et->last_drop_time);
-
-
- return TRUE;
-}
-
-static void
-scroll_on (ETable *et, guint scroll_direction)
-{
- if (et->scroll_idle_id == 0 || scroll_direction != et->scroll_direction) {
- if (et->scroll_idle_id != 0)
- g_source_remove (et->scroll_idle_id);
- et->scroll_direction = scroll_direction;
- et->scroll_idle_id = g_timeout_add (100, scroll_timeout, et);
- }
-}
-
-static void
-scroll_off (ETable *et)
-{
- if (et->scroll_idle_id) {
- g_source_remove (et->scroll_idle_id);
- et->scroll_idle_id = 0;
- }
-}
-
-static void
-context_destroyed (gpointer data)
-{
- ETable *et = data;
- /* if (!GTK_OBJECT_DESTROYED (et)) */
-#ifndef NO_WARNINGS
-#warning FIXME
-#endif
- {
- et->last_drop_x = 0;
- et->last_drop_y = 0;
- et->last_drop_time = 0;
- et->last_drop_context = NULL;
- scroll_off (et);
- }
- g_object_unref (et);
-}
-
-static void
-context_connect (ETable *et, GdkDragContext *context)
-{
- if (g_dataset_get_data (context, "e-table") == NULL) {
- g_object_ref (et);
- g_dataset_set_data_full (context, "e-table", et, context_destroyed);
- }
-}
-
-static void
-et_drag_leave(GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- ETable *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_LEAVE], 0,
- et->drop_row, et->drop_col, context, time);
- et->drop_row = -1;
- et->drop_col = -1;
-
- scroll_off (et);
-}
-
-static gboolean
-et_drag_motion(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETable *et)
-{
- gboolean ret_val;
- guint direction = 0;
-
- et->last_drop_x = x;
- et->last_drop_y = y;
- et->last_drop_time = time;
- et->last_drop_context = context;
- context_connect (et, context);
-
- ret_val = do_drag_motion (et,
- context,
- x,
- y,
- time);
-
-
- if (y < 20)
- direction |= ET_SCROLL_UP;
- if (y > widget->allocation.height - 20)
- direction |= ET_SCROLL_DOWN;
- if (x < 20)
- direction |= ET_SCROLL_LEFT;
- if (x > widget->allocation.width - 20)
- direction |= ET_SCROLL_RIGHT;
-
- if (direction != 0)
- scroll_on (et, direction);
- else
- scroll_off (et);
-
- return ret_val;
-}
-
-static gboolean
-et_drag_drop(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETable *et)
-{
- gboolean ret_val;
- int row, col;
-
- e_table_get_cell_at (et, x, y, &row, &col);
-
- if (row != et->drop_row && col != et->drop_row) {
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_LEAVE], 0,
- et->drop_row, et->drop_col, context, time);
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_MOTION], 0,
- row, col, context, x, y, time, &ret_val);
- }
- et->drop_row = row;
- et->drop_col = col;
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_DROP], 0,
- et->drop_row, et->drop_col, context, x, y, time, &ret_val);
- et->drop_row = -1;
- et->drop_col = -1;
-
- scroll_off (et);
-
- return ret_val;
-}
-
-static void
-et_drag_data_received(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETable *et)
-{
- int row, col;
-
- e_table_get_cell_at (et, x, y, &row, &col);
-
- g_signal_emit (G_OBJECT (et), et_signals [TABLE_DRAG_DATA_RECEIVED], 0,
- row, col, context, x, y, selection_data, info, time);
-}
-
-static void
-e_table_class_init (ETableClass *class)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
- GtkContainerClass *container_class;
-
- object_class = (GObjectClass *) class;
- widget_class = (GtkWidgetClass *) class;
- container_class = (GtkContainerClass *) class;
-
- parent_class = g_type_class_peek_parent (class);
-
- object_class->dispose = et_dispose;
- object_class->finalize = et_finalize;
- object_class->set_property = et_set_property;
- object_class->get_property = et_get_property;
-
- widget_class->grab_focus = et_grab_focus;
- widget_class->unrealize = et_unrealize;
- widget_class->size_request = et_size_request;
-
- widget_class->focus = et_focus;
-
- class->cursor_change = NULL;
- class->cursor_activated = NULL;
- class->selection_change = NULL;
- class->double_click = NULL;
- class->right_click = NULL;
- class->click = NULL;
- class->key_press = NULL;
- class->start_drag = et_real_start_drag;
- class->state_change = NULL;
- class->white_space_event = NULL;
-
- class->table_drag_begin = NULL;
- class->table_drag_end = NULL;
- class->table_drag_data_get = NULL;
- class->table_drag_data_delete = NULL;
-
- class->table_drag_leave = NULL;
- class->table_drag_motion = NULL;
- class->table_drag_drop = NULL;
- class->table_drag_data_received = NULL;
-
- et_signals [CURSOR_CHANGE] =
- g_signal_new ("cursor_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, cursor_change),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- et_signals [CURSOR_ACTIVATED] =
- g_signal_new ("cursor_activated",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, cursor_activated),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- et_signals [SELECTION_CHANGE] =
- g_signal_new ("selection_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, selection_change),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- et_signals [DOUBLE_CLICK] =
- g_signal_new ("double_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, double_click),
- NULL, NULL,
- e_marshal_NONE__INT_INT_BOXED,
- G_TYPE_NONE, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [RIGHT_CLICK] =
- g_signal_new ("right_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, right_click),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [CLICK] =
- g_signal_new ("click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, click),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [KEY_PRESS] =
- g_signal_new ("key_press",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, key_press),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [START_DRAG] =
- g_signal_new ("start_drag",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, start_drag),
- NULL, NULL,
- e_marshal_INT__INT_INT_BOXED,
- G_TYPE_INT, 3, G_TYPE_INT,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [STATE_CHANGE] =
- g_signal_new ("state_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, state_change),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- et_signals [WHITE_SPACE_EVENT] =
- g_signal_new ("white_space_event",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, white_space_event),
- NULL, NULL,
- e_marshal_INT__BOXED,
- G_TYPE_INT, 1, GDK_TYPE_EVENT);
-
- et_signals[TABLE_DRAG_BEGIN] =
- g_signal_new ("table_drag_begin",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_begin),
- NULL, NULL,
- e_marshal_NONE__INT_INT_OBJECT,
- G_TYPE_NONE, 3,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT);
- et_signals[TABLE_DRAG_END] =
- g_signal_new ("table_drag_end",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_end),
- NULL, NULL,
- e_marshal_NONE__INT_INT_OBJECT,
- G_TYPE_NONE, 3,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT);
- et_signals[TABLE_DRAG_DATA_GET] =
- g_signal_new ("table_drag_data_get",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_data_get),
- NULL, NULL,
- e_marshal_NONE__INT_INT_OBJECT_BOXED_UINT_UINT,
- G_TYPE_NONE, 6,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- GTK_TYPE_SELECTION_DATA | G_SIGNAL_TYPE_STATIC_SCOPE,
- G_TYPE_UINT,
- G_TYPE_UINT);
- et_signals[TABLE_DRAG_DATA_DELETE] =
- g_signal_new ("table_drag_data_delete",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_data_delete),
- NULL, NULL,
- e_marshal_NONE__INT_INT_OBJECT,
- G_TYPE_NONE, 3,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT);
-
- et_signals[TABLE_DRAG_LEAVE] =
- g_signal_new ("table_drag_leave",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_leave),
- NULL, NULL,
- e_marshal_NONE__INT_INT_OBJECT_UINT,
- G_TYPE_NONE, 4,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_UINT);
- et_signals[TABLE_DRAG_MOTION] =
- g_signal_new ("table_drag_motion",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_motion),
- NULL, NULL,
- e_marshal_BOOLEAN__INT_INT_OBJECT_INT_INT_UINT,
- G_TYPE_BOOLEAN, 6,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_INT,
- G_TYPE_INT,
- G_TYPE_UINT);
- et_signals[TABLE_DRAG_DROP] =
- g_signal_new ("table_drag_drop",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_drop),
- NULL, NULL,
- e_marshal_BOOLEAN__INT_INT_OBJECT_INT_INT_UINT,
- G_TYPE_BOOLEAN, 6,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_INT,
- G_TYPE_INT,
- G_TYPE_UINT);
- et_signals[TABLE_DRAG_DATA_RECEIVED] =
- g_signal_new ("table_drag_data_received",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, table_drag_data_received),
- NULL, NULL,
- e_marshal_NONE__INT_INT_OBJECT_INT_INT_BOXED_UINT_UINT,
- G_TYPE_NONE, 8,
- G_TYPE_INT,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_INT,
- G_TYPE_INT,
- GTK_TYPE_SELECTION_DATA | G_SIGNAL_TYPE_STATIC_SCOPE,
- G_TYPE_UINT,
- G_TYPE_UINT);
-
- class->set_scroll_adjustments = set_scroll_adjustments;
-
- widget_class->set_scroll_adjustments_signal =
- g_signal_new ("set_scroll_adjustments",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClass, set_scroll_adjustments),
- NULL, NULL,
- e_marshal_NONE__OBJECT_OBJECT,
- G_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
-
- g_object_class_install_property (object_class, PROP_LENGTH_THRESHOLD,
- g_param_spec_int ("length_threshold",
- _("Length Threshold"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_UNIFORM_ROW_HEIGHT,
- g_param_spec_boolean ("uniform_row_height",
- _("Uniform row height"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ALWAYS_SEARCH,
- g_param_spec_boolean ("always_search",
- _("Always Search"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_USE_CLICK_TO_ADD,
- g_param_spec_boolean ("use_click_to_add",
- _("Use click to add"),
- /*_( */"XXX blurb" /*)*/,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MODEL,
- g_param_spec_object ("model",
- _("Model"),
- /*_( */"XXX blurb" /*)*/,
- E_TABLE_MODEL_TYPE,
- G_PARAM_READABLE));
-
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TABLE_TYPE,
- gal_a11y_e_table_factory_get_type ());
-
-}
-
-E_MAKE_TYPE(e_table, "ETable", ETable, e_table_class_init, e_table_init, PARENT_TYPE)
diff --git a/widgets/table/e-table.dia b/widgets/table/e-table.dia
deleted file mode 100644
index 5aeb01228c..0000000000
--- a/widgets/table/e-table.dia
+++ /dev/null
Binary files differ
diff --git a/widgets/table/e-table.h b/widgets/table/e-table.h
deleted file mode 100644
index f025318905..0000000000
--- a/widgets/table/e-table.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table.h - A graphical view of a Table.
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TABLE_H_
-#define _E_TABLE_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gtk/gtkdnd.h>
-#include <gtk/gtktable.h>
-#include <libxml/tree.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-group.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-table-selection-model.h>
-#include <gal/e-table/e-table-extras.h>
-#include <gal/e-table/e-table-specification.h>
-#include <gal/widgets/e-printable.h>
-#include <gal/e-table/e-table-state.h>
-#include <gal/e-table/e-table-sorter.h>
-#include <gal/e-table/e-table-search.h>
-
-G_BEGIN_DECLS
-
-#define E_TABLE_TYPE (e_table_get_type ())
-#define E_TABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_TYPE, ETable))
-#define E_TABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_TYPE, ETableClass))
-#define E_IS_TABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_TYPE))
-#define E_IS_TABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_TYPE))
-
-typedef struct _ETableDragSourceSite ETableDragSourceSite;
-
-typedef enum {
- E_TABLE_CURSOR_LOC_NONE = 0,
- E_TABLE_CURSOR_LOC_ETCTA = 1 << 0,
- E_TABLE_CURSOR_LOC_TABLE = 1 << 1
-} ETableCursorLoc;
-
-typedef struct {
- GtkTable parent;
-
- ETableModel *model;
-
- ETableHeader *full_header, *header;
-
- GnomeCanvasItem *canvas_vbox;
- ETableGroup *group;
-
- ETableSortInfo *sort_info;
- ETableSorter *sorter;
-
- ETableSelectionModel *selection;
- ETableCursorLoc cursor_loc;
- ETableSpecification *spec;
-
- ETableSearch *search;
-
- ETableCol *current_search_col;
-
- guint search_search_id;
- guint search_accept_id;
-
- int table_model_change_id;
- int table_row_change_id;
- int table_cell_change_id;
- int table_rows_inserted_id;
- int table_rows_deleted_id;
-
- int group_info_change_id;
- int sort_info_change_id;
-
- int structure_change_id;
- int expansion_change_id;
- int dimension_change_id;
-
- int reflow_idle_id;
- int scroll_idle_id;
-
- GnomeCanvas *header_canvas, *table_canvas;
-
- GnomeCanvasItem *header_item, *root;
-
- GnomeCanvasItem *white_item;
-
- gint length_threshold;
-
- gint rebuild_idle_id;
- guint need_rebuild:1;
-
- /*
- * Configuration settings
- */
- guint alternating_row_colors : 1;
- guint horizontal_draw_grid : 1;
- guint vertical_draw_grid : 1;
- guint draw_focus : 1;
- guint row_selection_active : 1;
-
- guint horizontal_scrolling : 1;
- guint horizontal_resize : 1;
-
- guint is_grouped : 1;
-
- guint scroll_direction : 4;
-
- guint do_drag : 1;
-
- guint uniform_row_height : 1;
- guint allow_grouping : 1;
-
- guint always_search : 1;
- guint search_col_set : 1;
-
- char *click_to_add_message;
- GnomeCanvasItem *click_to_add;
- gboolean use_click_to_add;
- gboolean use_click_to_add_end;
-
- ECursorMode cursor_mode;
-
- int drop_row;
- int drop_col;
- GnomeCanvasItem *drop_highlight;
- int last_drop_x;
- int last_drop_y;
- int last_drop_time;
- GdkDragContext *last_drop_context;
-
- int drag_row;
- int drag_col;
- ETableDragSourceSite *site;
-
- int header_width;
-
- char *domain;
-} ETable;
-
-typedef struct {
- GtkTableClass parent_class;
-
- void (*cursor_change) (ETable *et, int row);
- void (*cursor_activated) (ETable *et, int row);
- void (*selection_change) (ETable *et);
- void (*double_click) (ETable *et, int row, int col, GdkEvent *event);
- gint (*right_click) (ETable *et, int row, int col, GdkEvent *event);
- gint (*click) (ETable *et, int row, int col, GdkEvent *event);
- gint (*key_press) (ETable *et, int row, int col, GdkEvent *event);
- gint (*start_drag) (ETable *et, int row, int col, GdkEvent *event);
- void (*state_change) (ETable *et);
- gint (*white_space_event) (ETable *et, GdkEvent *event);
-
- void (*set_scroll_adjustments) (ETable *table,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment);
-
- /* Source side drag signals */
- void (* table_drag_begin) (ETable *table,
- int row,
- int col,
- GdkDragContext *context);
- void (* table_drag_end) (ETable *table,
- int row,
- int col,
- GdkDragContext *context);
- void (* table_drag_data_get) (ETable *table,
- int row,
- int col,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time);
- void (* table_drag_data_delete) (ETable *table,
- int row,
- int col,
- GdkDragContext *context);
-
- /* Target side drag signals */
- void (* table_drag_leave) (ETable *table,
- int row,
- int col,
- GdkDragContext *context,
- guint time);
- gboolean (* table_drag_motion) (ETable *table,
- int row,
- int col,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time);
- gboolean (* table_drag_drop) (ETable *table,
- int row,
- int col,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time);
- void (* table_drag_data_received) (ETable *table,
- int row,
- int col,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time);
-} ETableClass;
-GType e_table_get_type (void);
-ETable *e_table_construct (ETable *e_table,
- ETableModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-GtkWidget *e_table_new (ETableModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-
-/* Create an ETable using files. */
-ETable *e_table_construct_from_spec_file (ETable *e_table,
- ETableModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-GtkWidget *e_table_new_from_spec_file (ETableModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-
-/* To save the state */
-gchar *e_table_get_state (ETable *e_table);
-void e_table_save_state (ETable *e_table,
- const gchar *filename);
-ETableState *e_table_get_state_object (ETable *e_table);
-
-/* note that it is more efficient to provide the state at creation time */
-void e_table_set_state (ETable *e_table,
- const gchar *state);
-void e_table_set_state_object (ETable *e_table,
- ETableState *state);
-void e_table_load_state (ETable *e_table,
- const gchar *filename);
-void e_table_set_cursor_row (ETable *e_table,
- int row);
-
-/* -1 means we don't have the cursor. This is in model rows. */
-int e_table_get_cursor_row (ETable *e_table);
-void e_table_selected_row_foreach (ETable *e_table,
- EForeachFunc callback,
- gpointer closure);
-gint e_table_selected_count (ETable *e_table);
-EPrintable *e_table_get_printable (ETable *e_table);
-gint e_table_get_next_row (ETable *e_table,
- gint model_row);
-gint e_table_get_prev_row (ETable *e_table,
- gint model_row);
-gint e_table_model_to_view_row (ETable *e_table,
- gint model_row);
-gint e_table_view_to_model_row (ETable *e_table,
- gint view_row);
-void e_table_get_cell_at (ETable *table,
- int x,
- int y,
- int *row_return,
- int *col_return);
-void e_table_get_cell_geometry (ETable *table,
- int row,
- int col,
- int *x_return,
- int *y_return,
- int *width_return,
- int *height_return);
-
-/* Useful accessor functions. */
-ESelectionModel *e_table_get_selection_model (ETable *table);
-
-/* Drag & drop stuff. */
-/* Target */
-void e_table_drag_get_data (ETable *table,
- int row,
- int col,
- GdkDragContext *context,
- GdkAtom target,
- guint32 time);
-void e_table_drag_highlight (ETable *table,
- int row,
- int col); /* col == -1 to highlight entire row. */
-void e_table_drag_unhighlight (ETable *table);
-void e_table_drag_dest_set (ETable *table,
- GtkDestDefaults flags,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions);
-void e_table_drag_dest_set_proxy (ETable *table,
- GdkWindow *proxy_window,
- GdkDragProtocol protocol,
- gboolean use_coordinates);
-
-/* There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-void e_table_drag_dest_unset (GtkWidget *widget);
-
-/* Source side */
-void e_table_drag_source_set (ETable *table,
- GdkModifierType start_button_mask,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions);
-void e_table_drag_source_unset (ETable *table);
-
-/* There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-GdkDragContext *e_table_drag_begin (ETable *table,
- int row,
- int col,
- GtkTargetList *targets,
- GdkDragAction actions,
- gint button,
- GdkEvent *event);
-
-/* selection stuff */
-void e_table_select_all (ETable *table);
-void e_table_invert_selection (ETable *table);
-
-/* This function is only needed in single_selection_mode. */
-void e_table_right_click_up (ETable *table);
-
-void e_table_commit_click_to_add (ETable *table);
-
-void e_table_commit_click_to_add (ETable *table);
-
-G_END_DECLS
-
-#endif /* _E_TABLE_H_ */
-
diff --git a/widgets/table/e-tree-memory-callbacks.c b/widgets/table/e-tree-memory-callbacks.c
deleted file mode 100644
index b6fe3fc375..0000000000
--- a/widgets/table/e-tree-memory-callbacks.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-memory-callbacks.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <gtk/gtksignal.h>
-#include "gal/util/e-util.h"
-#include "e-tree-memory-callbacks.h"
-
-#define PARENT_TYPE E_TREE_MEMORY_TYPE
-
-static GdkPixbuf *
-etmc_icon_at (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- return etmc->icon_at (etm, node, etmc->model_data);
-}
-
-static int
-etmc_column_count (ETreeModel *etm)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->column_count)
- return etmc->column_count (etm, etmc->model_data);
- else
- return 0;
-}
-
-
-static gboolean
-etmc_has_save_id (ETreeModel *etm)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->has_save_id)
- return etmc->has_save_id (etm, etmc->model_data);
- else
- return FALSE;
-}
-
-static char *
-etmc_get_save_id (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->get_save_id)
- return etmc->get_save_id (etm, node, etmc->model_data);
- else
- return NULL;
-}
-
-static gboolean
-etmc_has_get_node_by_id (ETreeModel *etm)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->has_get_node_by_id)
- return etmc->has_get_node_by_id (etm, etmc->model_data);
- else
- return FALSE;
-}
-
-static ETreePath
-etmc_get_node_by_id (ETreeModel *etm, const char *save_id)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->get_node_by_id)
- return etmc->get_node_by_id (etm, save_id, etmc->model_data);
- else
- return NULL;
-}
-
-
-static void *
-etmc_value_at (ETreeModel *etm, ETreePath node, int col)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- return etmc->value_at (etm, node, col, etmc->model_data);
-}
-
-static void
-etmc_set_value_at (ETreeModel *etm, ETreePath node, int col, const void *val)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- etmc->set_value_at (etm, node, col, val, etmc->model_data);
-}
-
-static gboolean
-etmc_is_editable (ETreeModel *etm, ETreePath node, int col)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- return etmc->is_editable (etm, node, col, etmc->model_data);
-}
-
-
-/* The default for etmc_duplicate_value is to return the raw value. */
-static void *
-etmc_duplicate_value (ETreeModel *etm, int col, const void *value)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->duplicate_value)
- return etmc->duplicate_value (etm, col, value, etmc->model_data);
- else
- return (void *)value;
-}
-
-static void
-etmc_free_value (ETreeModel *etm, int col, void *value)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->free_value)
- etmc->free_value (etm, col, value, etmc->model_data);
-}
-
-static void *
-etmc_initialize_value (ETreeModel *etm, int col)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->initialize_value)
- return etmc->initialize_value (etm, col, etmc->model_data);
- else
- return NULL;
-}
-
-static gboolean
-etmc_value_is_empty (ETreeModel *etm, int col, const void *value)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->value_is_empty)
- return etmc->value_is_empty (etm, col, value, etmc->model_data);
- else
- return FALSE;
-}
-
-static char *
-etmc_value_to_string (ETreeModel *etm, int col, const void *value)
-{
- ETreeMemoryCallbacks *etmc = E_TREE_MEMORY_CALLBACKS(etm);
-
- if (etmc->value_to_string)
- return etmc->value_to_string (etm, col, value, etmc->model_data);
- else
- return g_strdup ("");
-}
-
-static void
-e_tree_memory_callbacks_class_init (GtkObjectClass *object_class)
-{
- ETreeModelClass *model_class = (ETreeModelClass *) object_class;
-
- model_class->icon_at = etmc_icon_at;
-
- model_class->column_count = etmc_column_count;
-
- model_class->has_save_id = etmc_has_save_id;
- model_class->get_save_id = etmc_get_save_id;
-
- model_class->has_get_node_by_id = etmc_has_get_node_by_id;
- model_class->get_node_by_id = etmc_get_node_by_id;
-
- model_class->value_at = etmc_value_at;
- model_class->set_value_at = etmc_set_value_at;
- model_class->is_editable = etmc_is_editable;
-
- model_class->duplicate_value = etmc_duplicate_value;
- model_class->free_value = etmc_free_value;
- model_class->initialize_value = etmc_initialize_value;
- model_class->value_is_empty = etmc_value_is_empty;
- model_class->value_to_string = etmc_value_to_string;
-}
-
-E_MAKE_TYPE(e_tree_memory_callbacks, "ETreeMemoryCallbacks", ETreeMemoryCallbacks, e_tree_memory_callbacks_class_init, NULL, PARENT_TYPE)
-
-/**
- * e_tree_memory_callbacks_new:
- *
- * This initializes a new ETreeMemoryCallbacksModel object.
- * ETreeMemoryCallbacksModel is an implementaiton of the somewhat
- * abstract class ETreeMemory. The ETreeMemoryCallbacksModel is
- * designed to allow people to easily create ETreeMemorys without
- * having to create a new GtkType derived from ETreeMemory every time
- * they need one.
- *
- * Instead, ETreeMemoryCallbacksModel uses a setup based in callback functions, every
- * callback function signature mimics the signature of each ETreeModel method
- * and passes the extra @data pointer to each one of the method to provide them
- * with any context they might want to use.
- *
- * ETreeMemoryCallbacks is to ETreeMemory as ETableSimple is to ETableModel.
- *
- * Return value: An ETreeMemoryCallbacks object (which is also an
- * ETreeMemory and thus an ETreeModel object).
- *
- */
-ETreeModel *
-e_tree_memory_callbacks_new (ETreeMemoryCallbacksIconAtFn icon_at,
-
- ETreeMemoryCallbacksColumnCountFn column_count,
-
- ETreeMemoryCallbacksHasSaveIdFn has_save_id,
- ETreeMemoryCallbacksGetSaveIdFn get_save_id,
-
- ETreeMemoryCallbacksHasGetNodeByIdFn has_get_node_by_id,
- ETreeMemoryCallbacksGetNodeByIdFn get_node_by_id,
-
- ETreeMemoryCallbacksValueAtFn value_at,
- ETreeMemoryCallbacksSetValueAtFn set_value_at,
- ETreeMemoryCallbacksIsEditableFn is_editable,
-
- ETreeMemoryCallbacksDuplicateValueFn duplicate_value,
- ETreeMemoryCallbacksFreeValueFn free_value,
- ETreeMemoryCallbacksInitializeValueFn initialize_value,
- ETreeMemoryCallbacksValueIsEmptyFn value_is_empty,
- ETreeMemoryCallbacksValueToStringFn value_to_string,
-
- gpointer model_data)
-{
- ETreeMemoryCallbacks *etmc;
-
- etmc = g_object_new (E_TREE_MEMORY_CALLBACKS_TYPE, NULL);
-
- etmc->icon_at = icon_at;
-
- etmc->column_count = column_count;
-
- etmc->has_save_id = has_save_id;
- etmc->get_save_id = get_save_id;
-
- etmc->has_get_node_by_id = has_get_node_by_id;
- etmc->get_node_by_id = get_node_by_id;
-
- etmc->value_at = value_at;
- etmc->set_value_at = set_value_at;
- etmc->is_editable = is_editable;
-
- etmc->duplicate_value = duplicate_value;
- etmc->free_value = free_value;
- etmc->initialize_value = initialize_value;
- etmc->value_is_empty = value_is_empty;
- etmc->value_to_string = value_to_string;
-
- etmc->model_data = model_data;
-
- return (ETreeModel*)etmc;
-}
-
diff --git a/widgets/table/e-tree-memory-callbacks.h b/widgets/table/e-tree-memory-callbacks.h
deleted file mode 100644
index 0f75fa98be..0000000000
--- a/widgets/table/e-tree-memory-callbacks.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-memory-callbacks.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-
-#ifndef _E_TREE_MEMORY_CALLBACKS_H_
-#define _E_TREE_MEMORY_CALLBACKS_H_
-
-#include <gal/e-table/e-tree-memory.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define E_TREE_MEMORY_CALLBACKS_TYPE (e_tree_memory_callbacks_get_type ())
-#define E_TREE_MEMORY_CALLBACKS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_MEMORY_CALLBACKS_TYPE, ETreeMemoryCallbacks))
-#define E_TREE_MEMORY_CALLBACKS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_MEMORY_CALLBACKS_TYPE, ETreeMemoryCallbacksClass))
-#define E_IS_TREE_MEMORY_CALLBACKS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_MEMORY_CALLBACKS_TYPE))
-#define E_IS_TREE_MEMORY_CALLBACKS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_MEMORY_CALLBACKS_TYPE))
-
-
-typedef GdkPixbuf* (*ETreeMemoryCallbacksIconAtFn) (ETreeModel *etree, ETreePath path, void *model_data);
-
-typedef gint (*ETreeMemoryCallbacksColumnCountFn) (ETreeModel *etree, void *model_data);
-
-typedef gboolean (*ETreeMemoryCallbacksHasSaveIdFn) (ETreeModel *etree, void *model_data);
-typedef gchar *(*ETreeMemoryCallbacksGetSaveIdFn) (ETreeModel *etree, ETreePath path, void *model_data);
-
-typedef gboolean (*ETreeMemoryCallbacksHasGetNodeByIdFn) (ETreeModel *etree, void *model_data);
-typedef ETreePath (*ETreeMemoryCallbacksGetNodeByIdFn) (ETreeModel *etree, const char *save_id, void *model_data);
-
-typedef void* (*ETreeMemoryCallbacksValueAtFn) (ETreeModel *etree, ETreePath path, int col, void *model_data);
-typedef void (*ETreeMemoryCallbacksSetValueAtFn) (ETreeModel *etree, ETreePath path, int col, const void *val, void *model_data);
-typedef gboolean (*ETreeMemoryCallbacksIsEditableFn) (ETreeModel *etree, ETreePath path, int col, void *model_data);
-
-typedef void *(*ETreeMemoryCallbacksDuplicateValueFn) (ETreeModel *etm, int col, const void *val, void *data);
-typedef void (*ETreeMemoryCallbacksFreeValueFn) (ETreeModel *etm, int col, void *val, void *data);
-typedef void *(*ETreeMemoryCallbacksInitializeValueFn) (ETreeModel *etm, int col, void *data);
-typedef gboolean (*ETreeMemoryCallbacksValueIsEmptyFn) (ETreeModel *etm, int col, const void *val, void *data);
-typedef char *(*ETreeMemoryCallbacksValueToStringFn) (ETreeModel *etm, int col, const void *val, void *data);
-
-typedef struct {
- ETreeMemory parent;
-
- ETreeMemoryCallbacksIconAtFn icon_at;
-
- ETreeMemoryCallbacksColumnCountFn column_count;
-
- ETreeMemoryCallbacksHasSaveIdFn has_save_id;
- ETreeMemoryCallbacksGetSaveIdFn get_save_id;
-
- ETreeMemoryCallbacksHasGetNodeByIdFn has_get_node_by_id;
- ETreeMemoryCallbacksGetNodeByIdFn get_node_by_id;
-
- ETreeMemoryCallbacksValueAtFn value_at;
- ETreeMemoryCallbacksSetValueAtFn set_value_at;
- ETreeMemoryCallbacksIsEditableFn is_editable;
-
- ETreeMemoryCallbacksDuplicateValueFn duplicate_value;
- ETreeMemoryCallbacksFreeValueFn free_value;
- ETreeMemoryCallbacksInitializeValueFn initialize_value;
- ETreeMemoryCallbacksValueIsEmptyFn value_is_empty;
- ETreeMemoryCallbacksValueToStringFn value_to_string;
-
- gpointer model_data;
-} ETreeMemoryCallbacks;
-
-typedef struct {
- ETreeMemoryClass parent_class;
-} ETreeMemoryCallbacksClass;
-
-GType e_tree_memory_callbacks_get_type (void);
-
-ETreeModel *e_tree_memory_callbacks_new (ETreeMemoryCallbacksIconAtFn icon_at,
-
- ETreeMemoryCallbacksColumnCountFn column_count,
-
- ETreeMemoryCallbacksHasSaveIdFn has_save_id,
- ETreeMemoryCallbacksGetSaveIdFn get_save_id,
-
- ETreeMemoryCallbacksHasGetNodeByIdFn has_get_node_by_id,
- ETreeMemoryCallbacksGetNodeByIdFn get_node_by_id,
-
- ETreeMemoryCallbacksValueAtFn value_at,
- ETreeMemoryCallbacksSetValueAtFn set_value_at,
- ETreeMemoryCallbacksIsEditableFn is_editable,
-
- ETreeMemoryCallbacksDuplicateValueFn duplicate_value,
- ETreeMemoryCallbacksFreeValueFn free_value,
- ETreeMemoryCallbacksInitializeValueFn initialize_value,
- ETreeMemoryCallbacksValueIsEmptyFn value_is_empty,
- ETreeMemoryCallbacksValueToStringFn value_to_string,
-
- gpointer model_data);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_TREE_MEMORY_CALLBACKS_H_ */
diff --git a/widgets/table/e-tree-memory.c b/widgets/table/e-tree-memory.c
deleted file mode 100644
index 3f178455df..0000000000
--- a/widgets/table/e-tree-memory.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-memory.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdlib.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include "e-tree-memory.h"
-
-#define TREEPATH_CHUNK_AREA_SIZE (30 * sizeof (ETreeMemoryPath))
-
-static ETreeModelClass *parent_class;
-static GMemChunk *node_chunk;
-
-enum {
- FILL_IN_CHILDREN,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = { 0, };
-
-typedef struct ETreeMemoryPath ETreeMemoryPath;
-
-struct ETreeMemoryPath {
- gpointer node_data;
-
- guint children_computed : 1;
-
- /* parent/child/sibling pointers */
- ETreeMemoryPath *parent;
- ETreeMemoryPath *next_sibling;
- ETreeMemoryPath *prev_sibling;
- ETreeMemoryPath *first_child;
- ETreeMemoryPath *last_child;
-
- gint num_children;
-};
-
-struct ETreeMemoryPriv {
- ETreeMemoryPath *root;
- gboolean expanded_default; /* whether nodes are created expanded or collapsed by default */
- gint frozen;
- GFunc destroy_func;
- gpointer destroy_user_data;
-};
-
-
-/* ETreeMemoryPath functions */
-
-static inline void
-check_children (ETreeMemory *memory, ETreePath node)
-{
- ETreeMemoryPath *path = node;
- if (!path->children_computed) {
- g_signal_emit (G_OBJECT (memory), signals[FILL_IN_CHILDREN], 0, node);
- path->children_computed = TRUE;
- }
-}
-
-static int
-e_tree_memory_path_depth (ETreeMemoryPath *path)
-{
- int depth = 0;
-
- g_return_val_if_fail(path != NULL, -1);
-
- for ( path = path->parent; path; path = path->parent)
- depth ++;
- return depth;
-}
-
-static void
-e_tree_memory_path_insert (ETreeMemoryPath *parent, int position, ETreeMemoryPath *child)
-{
- g_return_if_fail (position <= parent->num_children && position >= -1);
-
- child->parent = parent;
-
- if (parent->first_child == NULL)
- parent->first_child = child;
-
- if (position == -1 || position == parent->num_children) {
- child->prev_sibling = parent->last_child;
- if (parent->last_child)
- parent->last_child->next_sibling = child;
- parent->last_child = child;
- } else {
- ETreeMemoryPath *c;
- for (c = parent->first_child; c; c = c->next_sibling) {
- if (position == 0) {
- child->next_sibling = c;
- child->prev_sibling = c->prev_sibling;
-
- if (child->next_sibling)
- child->next_sibling->prev_sibling = child;
- if (child->prev_sibling)
- child->prev_sibling->next_sibling = child;
-
- if (parent->first_child == c)
- parent->first_child = child;
- break;
- }
- position --;
- }
- }
-
- parent->num_children++;
-}
-
-static void
-e_tree_path_unlink (ETreeMemoryPath *path)
-{
- ETreeMemoryPath *parent = path->parent;
-
- /* unlink first/last child if applicable */
- if (parent) {
- if (path == parent->first_child)
- parent->first_child = path->next_sibling;
- if (path == parent->last_child)
- parent->last_child = path->prev_sibling;
-
- parent->num_children --;
- }
-
- /* unlink prev/next sibling links */
- if (path->next_sibling)
- path->next_sibling->prev_sibling = path->prev_sibling;
- if (path->prev_sibling)
- path->prev_sibling->next_sibling = path->next_sibling;
-
- path->parent = NULL;
- path->next_sibling = NULL;
- path->prev_sibling = NULL;
-}
-
-
-
-/**
- * e_tree_memory_freeze:
- * @etmm: the ETreeModel to freeze.
- *
- * This function prepares an ETreeModel for a period of much change.
- * All signals regarding changes to the tree are deferred until we
- * thaw the tree.
- *
- **/
-void
-e_tree_memory_freeze(ETreeMemory *etmm)
-{
- ETreeMemoryPriv *priv = etmm->priv;
-
- if (priv->frozen == 0)
- e_tree_model_pre_change(E_TREE_MODEL(etmm));
-
- priv->frozen ++;
-}
-
-/**
- * e_tree_memory_thaw:
- * @etmm: the ETreeMemory to thaw.
- *
- * This function thaws an ETreeMemory. All the defered signals can add
- * up to a lot, we don't know - so we just emit a model_changed
- * signal.
- *
- **/
-void
-e_tree_memory_thaw(ETreeMemory *etmm)
-{
- ETreeMemoryPriv *priv = etmm->priv;
-
- if (priv->frozen > 0)
- priv->frozen --;
- if (priv->frozen == 0) {
- e_tree_model_node_changed(E_TREE_MODEL(etmm), priv->root);
- }
-}
-
-
-/* virtual methods */
-
-static void
-etmm_dispose (GObject *object)
-{
- ETreeMemory *etmm = E_TREE_MEMORY (object);
- ETreeMemoryPriv *priv = etmm->priv;
-
- if (priv) {
- /* XXX lots of stuff to free here */
-
- if (priv->root)
- e_tree_memory_node_remove (etmm, priv->root);
-
- g_free (priv);
- }
- etmm->priv = NULL;
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static ETreePath
-etmm_get_root (ETreeModel *etm)
-{
- ETreeMemoryPriv *priv = E_TREE_MEMORY(etm)->priv;
- return priv->root;
-}
-
-static ETreePath
-etmm_get_parent (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
- return path->parent;
-}
-
-static ETreePath
-etmm_get_first_child (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
-
- check_children (E_TREE_MEMORY (etm), node);
- return path->first_child;
-}
-
-static ETreePath
-etmm_get_last_child (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
-
- check_children (E_TREE_MEMORY (etm), node);
- return path->last_child;
-}
-
-static ETreePath
-etmm_get_next (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
- return path->next_sibling;
-}
-
-static ETreePath
-etmm_get_prev (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
- return path->prev_sibling;
-}
-
-static gboolean
-etmm_is_root (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
- return e_tree_memory_path_depth (path) == 0;
-}
-
-static gboolean
-etmm_is_expandable (ETreeModel *etm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
-
- check_children (E_TREE_MEMORY (etm), node);
- return path->first_child != NULL;
-}
-
-static guint
-etmm_get_children (ETreeModel *etm, ETreePath node, ETreePath **nodes)
-{
- ETreeMemoryPath *path = node;
- guint n_children;
-
- check_children (E_TREE_MEMORY (etm), node);
-
- n_children = path->num_children;
-
- if (nodes) {
- ETreeMemoryPath *p;
- int i = 0;
-
- (*nodes) = g_new (ETreePath, n_children);
- for (p = path->first_child; p; p = p->next_sibling) {
- (*nodes)[i++] = p;
- }
- }
-
- return n_children;
-}
-
-static guint
-etmm_depth (ETreeModel *etm, ETreePath path)
-{
- return e_tree_memory_path_depth(path);
-}
-
-static gboolean
-etmm_get_expanded_default (ETreeModel *etm)
-{
- ETreeMemory *etmm = E_TREE_MEMORY (etm);
- ETreeMemoryPriv *priv = etmm->priv;
-
- return priv->expanded_default;
-}
-
-static void
-etmm_clear_children_computed (ETreeMemoryPath *path)
-{
- for (path = path->first_child; path; path = path->next_sibling) {
- path->children_computed = FALSE;
- etmm_clear_children_computed (path);
- }
-}
-
-static void
-etmm_node_request_collapse (ETreeModel *etm, ETreePath node)
-{
- if (node)
- etmm_clear_children_computed (node);
-
- if (parent_class->node_request_collapse) {
- parent_class->node_request_collapse (etm, node);
- }
-}
-
-
-static void
-e_tree_memory_class_init (ETreeMemoryClass *klass)
-{
- ETreeModelClass *tree_class = (ETreeModelClass *) klass;
- GObjectClass *object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- node_chunk = g_mem_chunk_create (ETreeMemoryPath, TREEPATH_CHUNK_AREA_SIZE, G_ALLOC_AND_FREE);
-
- signals [FILL_IN_CHILDREN] =
- g_signal_new ("fill_in_children",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeMemoryClass, fill_in_children),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- object_class->dispose = etmm_dispose;
-
- tree_class->get_root = etmm_get_root;
- tree_class->get_prev = etmm_get_prev;
- tree_class->get_next = etmm_get_next;
- tree_class->get_first_child = etmm_get_first_child;
- tree_class->get_last_child = etmm_get_last_child;
- tree_class->get_parent = etmm_get_parent;
-
- tree_class->is_root = etmm_is_root;
- tree_class->is_expandable = etmm_is_expandable;
- tree_class->get_children = etmm_get_children;
- tree_class->depth = etmm_depth;
- tree_class->get_expanded_default = etmm_get_expanded_default;
-
- tree_class->node_request_collapse = etmm_node_request_collapse;
-
- klass->fill_in_children = NULL;
-}
-
-static void
-e_tree_memory_init (GObject *object)
-{
- ETreeMemory *etmm = (ETreeMemory *)object;
-
- ETreeMemoryPriv *priv;
-
- priv = g_new0 (ETreeMemoryPriv, 1);
- etmm->priv = priv;
-
- priv->root = NULL;
- priv->frozen = 0;
- priv->expanded_default = 0;
- priv->destroy_func = NULL;
- priv->destroy_user_data = NULL;
-}
-
-E_MAKE_TYPE(e_tree_memory, "ETreeMemory", ETreeMemory, e_tree_memory_class_init, e_tree_memory_init, E_TREE_MODEL_TYPE)
-
-
-
-/**
- * e_tree_memory_construct:
- * @etree:
- *
- *
- **/
-void
-e_tree_memory_construct (ETreeMemory *etmm)
-{
-}
-
-/**
- * e_tree_memory_new
- *
- * XXX docs here.
- *
- * return values: a newly constructed ETreeMemory.
- */
-ETreeMemory *
-e_tree_memory_new (void)
-{
- return (ETreeMemory *) g_object_new (E_TREE_MEMORY_TYPE, NULL);
-}
-
-void
-e_tree_memory_set_expanded_default (ETreeMemory *etree, gboolean expanded)
-{
- etree->priv->expanded_default = expanded;
-}
-
-/**
- * e_tree_memory_node_get_data:
- * @etmm:
- * @node:
- *
- *
- *
- * Return value:
- **/
-gpointer
-e_tree_memory_node_get_data (ETreeMemory *etmm, ETreePath node)
-{
- ETreeMemoryPath *path = node;
-
- g_return_val_if_fail (path, NULL);
-
- return path->node_data;
-}
-
-/**
- * e_tree_memory_node_set_data:
- * @etmm:
- * @node:
- * @node_data:
- *
- *
- **/
-void
-e_tree_memory_node_set_data (ETreeMemory *etmm, ETreePath node, gpointer node_data)
-{
- ETreeMemoryPath *path = node;
-
- g_return_if_fail (path);
-
- path->node_data = node_data;
-}
-
-/**
- * e_tree_memory_node_insert:
- * @tree_model:
- * @parent_path:
- * @position:
- * @node_data:
- *
- *
- *
- * Return value:
- **/
-ETreePath
-e_tree_memory_node_insert (ETreeMemory *tree_model,
- ETreePath parent_node,
- int position,
- gpointer node_data)
-{
- ETreeMemoryPriv *priv;
- ETreeMemoryPath *new_path;
- ETreeMemoryPath *parent_path = parent_node;
-
- g_return_val_if_fail(tree_model != NULL, NULL);
-
- priv = tree_model->priv;
-
- g_return_val_if_fail (parent_path != NULL || priv->root == NULL, NULL);
-
- priv = tree_model->priv;
-
- if (!tree_model->priv->frozen)
- e_tree_model_pre_change(E_TREE_MODEL(tree_model));
-
- new_path = g_chunk_new0 (ETreeMemoryPath, node_chunk);
-
- new_path->node_data = node_data;
- new_path->children_computed = FALSE;
-
- if (parent_path != NULL) {
- e_tree_memory_path_insert (parent_path, position, new_path);
- if (!tree_model->priv->frozen)
- e_tree_model_node_inserted (E_TREE_MODEL(tree_model), parent_path, new_path);
- } else {
- priv->root = new_path;
- if (!tree_model->priv->frozen)
- e_tree_model_node_changed(E_TREE_MODEL(tree_model), new_path);
- }
-
- return new_path;
-}
-
-ETreePath e_tree_memory_node_insert_id (ETreeMemory *etree, ETreePath parent, int position, gpointer node_data, char *id)
-{
- return e_tree_memory_node_insert(etree, parent, position, node_data);
-}
-
-/**
- * e_tree_memory_node_insert_before:
- * @etree:
- * @parent:
- * @sibling:
- * @node_data:
- *
- *
- *
- * Return value:
- **/
-ETreePath
-e_tree_memory_node_insert_before (ETreeMemory *etree,
- ETreePath parent,
- ETreePath sibling,
- gpointer node_data)
-{
- ETreeMemoryPath *child;
- ETreeMemoryPath *parent_path = parent;
- ETreeMemoryPath *sibling_path = sibling;
- int position = 0;
-
- g_return_val_if_fail(etree != NULL, NULL);
-
- if (sibling != NULL) {
- for (child = parent_path->first_child; child; child = child->next_sibling) {
- if (child == sibling_path)
- break;
- position ++;
- }
- } else
- position = parent_path->num_children;
- return e_tree_memory_node_insert (etree, parent, position, node_data);
-}
-
-/* just blows away child data, doesn't take into account unlinking/etc */
-static void
-child_free(ETreeMemory *etree, ETreeMemoryPath *node)
-{
- ETreeMemoryPath *child, *next;
-
- child = node->first_child;
- while (child) {
- next = child->next_sibling;
- child_free(etree, child);
- child = next;
- }
-
- if (etree->priv->destroy_func) {
- etree->priv->destroy_func (node->node_data, etree->priv->destroy_user_data);
- }
-
- g_chunk_free(node, node_chunk);
-}
-
-/**
- * e_tree_memory_node_remove:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-gpointer
-e_tree_memory_node_remove (ETreeMemory *etree, ETreePath node)
-{
- ETreeMemoryPath *path = node;
- ETreeMemoryPath *parent = path->parent;
- ETreeMemoryPath *sibling;
- gpointer ret = path->node_data;
- int old_position = 0;
-
- g_return_val_if_fail(etree != NULL, NULL);
-
- if (!etree->priv->frozen) {
- e_tree_model_pre_change(E_TREE_MODEL(etree));
- for (old_position = 0, sibling = path;
- sibling;
- old_position++, sibling = sibling->prev_sibling)
- /* Empty intentionally*/;
- old_position --;
- }
-
- /* unlink this node - we only have to unlink the root node being removed,
- since the others are only references from this node */
- e_tree_path_unlink (path);
-
- /*printf("removing %d nodes from position %d\n", visible, base);*/
- if (!etree->priv->frozen)
- e_tree_model_node_removed(E_TREE_MODEL(etree), parent, path, old_position);
-
- child_free(etree, path);
-
- if (path == etree->priv->root)
- etree->priv->root = NULL;
-
- if (!etree->priv->frozen)
- e_tree_model_node_deleted(E_TREE_MODEL(etree), path);
-
- return ret;
-}
-
-typedef struct {
- ETreeMemory *memory;
- gpointer closure;
- ETreeMemorySortCallback callback;
-} MemoryAndClosure;
-
-static int
-sort_callback(const void *data1, const void *data2, gpointer user_data)
-{
- ETreePath path1 = *(ETreePath *)data1;
- ETreePath path2 = *(ETreePath *)data2;
- MemoryAndClosure *mac = user_data;
- return (*mac->callback) (mac->memory, path1, path2, mac->closure);
-}
-
-void
-e_tree_memory_sort_node (ETreeMemory *etmm,
- ETreePath node,
- ETreeMemorySortCallback callback,
- gpointer user_data)
-{
- ETreeMemoryPath **children;
- ETreeMemoryPath *child;
- int count;
- int i;
- ETreeMemoryPath *path = node;
- MemoryAndClosure mac;
- ETreeMemoryPath *last;
-
- e_tree_model_pre_change (E_TREE_MODEL (etmm));
-
- i = 0;
- for (child = path->first_child; child; child = child->next_sibling)
- i++;
-
- children = g_new(ETreeMemoryPath *, i);
-
- count = i;
-
- for (child = path->first_child, i = 0;
- child;
- child = child->next_sibling, i++) {
- children[i] = child;
- }
-
- mac.memory = etmm;
- mac.closure = user_data;
- mac.callback = callback;
-
- e_sort (children, count, sizeof (ETreeMemoryPath *), sort_callback, &mac);
-
- path->first_child = NULL;
- last = NULL;
- for (i = 0;
- i < count;
- i++) {
- children[i]->prev_sibling = last;
- if (last)
- last->next_sibling = children[i];
- else
- path->first_child = children[i];
- last = children[i];
- }
- if (last)
- last->next_sibling = NULL;
-
- path->last_child = last;
-
- g_free(children);
-
- e_tree_model_node_changed(E_TREE_MODEL(etmm), node);
-}
-
-void
-e_tree_memory_set_node_destroy_func (ETreeMemory *etmm,
- GFunc destroy_func,
- gpointer user_data)
-{
- etmm->priv->destroy_func = destroy_func;
- etmm->priv->destroy_user_data = user_data;
-}
diff --git a/widgets/table/e-tree-memory.h b/widgets/table/e-tree-memory.h
deleted file mode 100644
index ce0003b60a..0000000000
--- a/widgets/table/e-tree-memory.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-memory.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_MEMORY_H_
-#define _E_TREE_MEMORY_H_
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gal/e-table/e-tree-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TREE_MEMORY_TYPE (e_tree_memory_get_type ())
-#define E_TREE_MEMORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_MEMORY_TYPE, ETreeMemory))
-#define E_TREE_MEMORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_MEMORY_TYPE, ETreeMemoryClass))
-#define E_IS_TREE_MEMORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_MEMORY_TYPE))
-#define E_IS_TREE_MEMORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_MEMORY_TYPE))
-#define E_TREE_MEMORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TREE_MEMORY_TYPE, ETreeMemoryClass))
-
-typedef struct ETreeMemory ETreeMemory;
-typedef struct ETreeMemoryPriv ETreeMemoryPriv;
-typedef struct ETreeMemoryClass ETreeMemoryClass;
-
-typedef int (*ETreeMemorySortCallback) (ETreeMemory *etmm, ETreePath path1, ETreePath path2, gpointer closure);
-
-struct ETreeMemory {
- ETreeModel base;
- ETreeMemoryPriv *priv;
-};
-
-struct ETreeMemoryClass {
- ETreeModelClass parent_class;
-
- /* signals */
- void (*fill_in_children) (ETreeMemory *model, ETreePath node);
-};
-
-
-GType e_tree_memory_get_type (void);
-void e_tree_memory_construct (ETreeMemory *etree);
-ETreeMemory *e_tree_memory_new (void);
-
-/* node operations */
-ETreePath e_tree_memory_node_insert (ETreeMemory *etree,
- ETreePath parent,
- int position,
- gpointer node_data);
-ETreePath e_tree_memory_node_insert_id (ETreeMemory *etree,
- ETreePath parent,
- int position,
- gpointer node_data,
- char *id);
-ETreePath e_tree_memory_node_insert_before (ETreeMemory *etree,
- ETreePath parent,
- ETreePath sibling,
- gpointer node_data);
-gpointer e_tree_memory_node_remove (ETreeMemory *etree,
- ETreePath path);
-
-/* Freeze and thaw */
-void e_tree_memory_freeze (ETreeMemory *etree);
-void e_tree_memory_thaw (ETreeMemory *etree);
-void e_tree_memory_set_expanded_default (ETreeMemory *etree,
- gboolean expanded);
-gpointer e_tree_memory_node_get_data (ETreeMemory *etm,
- ETreePath node);
-void e_tree_memory_node_set_data (ETreeMemory *etm,
- ETreePath node,
- gpointer node_data);
-void e_tree_memory_sort_node (ETreeMemory *etm,
- ETreePath node,
- ETreeMemorySortCallback callback,
- gpointer user_data);
-void e_tree_memory_set_node_destroy_func (ETreeMemory *etmm,
- GFunc destroy_func,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* _E_TREE_MEMORY_H */
-
diff --git a/widgets/table/e-tree-model.c b/widgets/table/e-tree-model.c
deleted file mode 100644
index 6ca0e17af9..0000000000
--- a/widgets/table/e-tree-model.c
+++ /dev/null
@@ -1,1098 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include <gtk/gtksignal.h>
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include "e-tree-model.h"
-
-#define ETM_CLASS(e) (E_TREE_MODEL_GET_CLASS(e))
-
-#define d(x)
-
-static GObjectClass *parent_class;
-
-enum {
- PRE_CHANGE,
- NO_CHANGE,
- NODE_CHANGED,
- NODE_DATA_CHANGED,
- NODE_COL_CHANGED,
- NODE_INSERTED,
- NODE_REMOVED,
- NODE_DELETED,
- NODE_REQUEST_COLLAPSE,
- LAST_SIGNAL
-};
-
-static guint e_tree_model_signals [LAST_SIGNAL] = {0, };
-
-
-static void
-e_tree_model_class_init (GObjectClass *klass)
-{
- ETreeModelClass *tree_class = (ETreeModelClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- e_tree_model_signals [PRE_CHANGE] =
- g_signal_new ("pre_change",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, pre_change),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- e_tree_model_signals [NO_CHANGE] =
- g_signal_new ("no_change",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, no_change),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- e_tree_model_signals [NODE_CHANGED] =
- g_signal_new ("node_changed",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, node_changed),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- e_tree_model_signals [NODE_DATA_CHANGED] =
- g_signal_new ("node_data_changed",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, node_data_changed),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- e_tree_model_signals [NODE_COL_CHANGED] =
- g_signal_new ("node_col_changed",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, node_col_changed),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_VOID__POINTER_INT,
- G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_INT);
-
- e_tree_model_signals [NODE_INSERTED] =
- g_signal_new ("node_inserted",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, node_inserted),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_VOID__POINTER_POINTER,
- G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
-
- e_tree_model_signals [NODE_REMOVED] =
- g_signal_new ("node_removed",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, node_removed),
- (GSignalAccumulator) NULL, NULL,
- e_marshal_VOID__POINTER_POINTER_INT,
- G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_INT);
-
- e_tree_model_signals [NODE_DELETED] =
- g_signal_new ("node_deleted",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, node_deleted),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- e_tree_model_signals [NODE_REQUEST_COLLAPSE] =
- g_signal_new ("node_request_collapse",
- E_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeModelClass, node_request_collapse),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- tree_class->get_root = NULL;
-
- tree_class->get_parent = NULL;
- tree_class->get_first_child = NULL;
- tree_class->get_last_child = NULL;
- tree_class->get_next = NULL;
- tree_class->get_prev = NULL;
-
- tree_class->is_root = NULL;
- tree_class->is_expandable = NULL;
- tree_class->get_children = NULL;
- tree_class->depth = NULL;
-
- tree_class->icon_at = NULL;
-
- tree_class->get_expanded_default = NULL;
- tree_class->column_count = NULL;
-
- tree_class->has_save_id = NULL;
- tree_class->get_save_id = NULL;
- tree_class->has_get_node_by_id = NULL;
- tree_class->get_node_by_id = NULL;
-
- tree_class->has_change_pending = NULL;
-
- tree_class->value_at = NULL;
- tree_class->set_value_at = NULL;
- tree_class->is_editable = NULL;
-
- tree_class->duplicate_value = NULL;
- tree_class->free_value = NULL;
- tree_class->initialize_value = NULL;
- tree_class->value_is_empty = NULL;
- tree_class->value_to_string = NULL;
-
- tree_class->pre_change = NULL;
- tree_class->no_change = NULL;
- tree_class->node_changed = NULL;
- tree_class->node_data_changed = NULL;
- tree_class->node_col_changed = NULL;
- tree_class->node_inserted = NULL;
- tree_class->node_removed = NULL;
- tree_class->node_deleted = NULL;
- tree_class->node_request_collapse = NULL;
-}
-
-E_MAKE_TYPE(e_tree_model, "ETreeModel", ETreeModel, e_tree_model_class_init, NULL, G_TYPE_OBJECT)
-
-
-/* signals */
-
-/**
- * e_tree_model_node_changed:
- * @tree_model:
- * @node:
- *
- *
- *
- * Return value:
- **/
-void
-e_tree_model_pre_change (ETreeModel *tree_model)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting pre_change on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [PRE_CHANGE], 0);
-}
-
-/**
- * e_tree_model_node_changed:
- * @tree_model:
- * @node:
- *
- *
- *
- * Return value:
- **/
-void
-e_tree_model_no_change (ETreeModel *tree_model)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting no_change on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NO_CHANGE], 0);
-}
-
-/**
- * e_tree_model_node_changed:
- * @tree_model:
- * @node:
- *
- *
- *
- * Return value:
- **/
-void
-e_tree_model_node_changed (ETreeModel *tree_model, ETreePath node)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting node_changed on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NODE_CHANGED], 0, node);
-}
-
-/**
- * e_tree_model_node_data_changed:
- * @tree_model:
- * @node:
- *
- *
- *
- * Return value:
- **/
-void
-e_tree_model_node_data_changed (ETreeModel *tree_model, ETreePath node)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting node_data_changed on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NODE_DATA_CHANGED], 0, node);
-}
-
-/**
- * e_tree_model_node_col_changed:
- * @tree_model:
- * @node:
- *
- *
- *
- * Return value:
- **/
-void
-e_tree_model_node_col_changed (ETreeModel *tree_model, ETreePath node, int col)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting node_col_changed on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NODE_COL_CHANGED], 0, node, col);
-}
-
-/**
- * e_tree_model_node_inserted:
- * @tree_model:
- * @parent_node:
- * @inserted_node:
- *
- *
- **/
-void
-e_tree_model_node_inserted (ETreeModel *tree_model,
- ETreePath parent_node,
- ETreePath inserted_node)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting node_inserted on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NODE_INSERTED], 0,
- parent_node, inserted_node);
-}
-
-/**
- * e_tree_model_node_removed:
- * @tree_model:
- * @parent_node:
- * @removed_node:
- *
- *
- **/
-void
-e_tree_model_node_removed (ETreeModel *tree_model, ETreePath parent_node, ETreePath removed_node, int old_position)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting node_removed on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NODE_REMOVED], 0,
- parent_node, removed_node, old_position);
-}
-
-/**
- * e_tree_model_node_deleted:
- * @tree_model:
- * @deleted_node:
- *
- *
- **/
-void
-e_tree_model_node_deleted (ETreeModel *tree_model, ETreePath deleted_node)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting node_deleted on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NODE_DELETED], 0, deleted_node);
-}
-
-/**
- * e_tree_model_node_request_collapse:
- * @tree_model:
- * @collapsed_node:
- *
- *
- **/
-void
-e_tree_model_node_request_collapse (ETreeModel *tree_model, ETreePath collapsed_node)
-{
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (tree_model));
-
- d(g_print("Emitting node_request_collapse on model 0x%p, a %s.\n", tree_model, gtk_type_name (GTK_OBJECT(tree_model)->klass->type)));
-
- g_signal_emit (G_OBJECT (tree_model), e_tree_model_signals [NODE_REQUEST_COLLAPSE], 0, collapsed_node);
-}
-
-
-
-/**
- * e_tree_model_new
- *
- * XXX docs here.
- *
- * return values: a newly constructed ETreeModel.
- */
-ETreeModel *
-e_tree_model_new ()
-{
- return (ETreeModel *) g_object_new (E_TREE_MODEL_TYPE, NULL);
-}
-
-/**
- * e_tree_model_get_root
- * @etree: the ETreeModel of which we want the root node.
- *
- * Accessor for the root node of @etree.
- *
- * return values: the ETreePath corresponding to the root node.
- */
-ETreePath
-e_tree_model_get_root (ETreeModel *etree)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->get_root)
- return ETM_CLASS(etree)->get_root(etree);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_node_get_parent:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-ETreePath
-e_tree_model_node_get_parent (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail(etree != NULL, NULL);
- if (ETM_CLASS(etree)->get_parent)
- return ETM_CLASS(etree)->get_parent(etree, node);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_node_get_first_child:
- * @etree:
- * @node:
- *
- *
- *
- * Return value:
- **/
-ETreePath
-e_tree_model_node_get_first_child (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->get_first_child)
- return ETM_CLASS(etree)->get_first_child(etree, node);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_node_get_last_child:
- * @etree:
- * @node:
- *
- *
- *
- * Return value:
- **/
-ETreePath
-e_tree_model_node_get_last_child (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->get_last_child)
- return ETM_CLASS(etree)->get_last_child(etree, node);
- else
- return NULL;
-}
-
-
-/**
- * e_tree_model_node_get_next:
- * @etree:
- * @node:
- *
- *
- *
- * Return value:
- **/
-ETreePath
-e_tree_model_node_get_next (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->get_next)
- return ETM_CLASS(etree)->get_next(etree, node);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_node_get_prev:
- * @etree:
- * @node:
- *
- *
- *
- * Return value:
- **/
-ETreePath
-e_tree_model_node_get_prev (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->get_prev)
- return ETM_CLASS(etree)->get_prev(etree, node);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_node_is_root:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-gboolean
-e_tree_model_node_is_root (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail(etree != NULL, FALSE);
-
- if (ETM_CLASS(etree)->is_root)
- return ETM_CLASS(etree)->is_root(etree, node);
- else
- return FALSE;
-}
-
-/**
- * e_tree_model_node_is_expandable:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-gboolean
-e_tree_model_node_is_expandable (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail(etree != NULL, FALSE);
- g_return_val_if_fail(node != NULL, FALSE);
-
- if (ETM_CLASS(etree)->is_expandable)
- return ETM_CLASS(etree)->is_expandable(etree, node);
- else
- return FALSE;
-}
-
-guint
-e_tree_model_node_get_children (ETreeModel *etree, ETreePath node, ETreePath **nodes)
-{
- g_return_val_if_fail(etree != NULL, 0);
- if (ETM_CLASS(etree)->get_children)
- return ETM_CLASS(etree)->get_children (etree, node, nodes);
- else
- return 0;
-}
-
-/**
- * e_tree_model_node_depth:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-guint
-e_tree_model_node_depth (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail (etree != NULL, 0);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), 0);
-
- if (ETM_CLASS(etree)->depth)
- return ETM_CLASS(etree)->depth(etree, node);
- else
- return 0;
-}
-
-/**
- * e_tree_model_icon_at
- * @etree: The ETreeModel.
- * @path: The ETreePath to the node we're getting the icon of.
- *
- * XXX docs here.
- *
- * return values: the GdkPixbuf associated with this node.
- */
-GdkPixbuf *
-e_tree_model_icon_at (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->icon_at)
- return ETM_CLASS(etree)->icon_at (etree, node);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_get_expanded_default
- * @etree: The ETreeModel.
- *
- * XXX docs here.
- *
- * return values: Whether nodes should be expanded by default.
- */
-gboolean
-e_tree_model_get_expanded_default (ETreeModel *etree)
-{
- g_return_val_if_fail (etree != NULL, FALSE);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), FALSE);
-
- if (ETM_CLASS(etree)->get_expanded_default)
- return ETM_CLASS(etree)->get_expanded_default (etree);
- else
- return FALSE;
-}
-
-/**
- * e_tree_model_column_count
- * @etree: The ETreeModel.
- *
- * XXX docs here.
- *
- * return values: The number of columns
- */
-gint
-e_tree_model_column_count (ETreeModel *etree)
-{
- g_return_val_if_fail (etree != NULL, 0);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), 0);
-
- if (ETM_CLASS(etree)->column_count)
- return ETM_CLASS(etree)->column_count (etree);
- else
- return 0;
-}
-
-/**
- * e_tree_model_has_save_id
- * @etree: The ETreeModel.
- *
- * XXX docs here.
- *
- * return values: Whether this tree has valid save id data.
- */
-gboolean
-e_tree_model_has_save_id (ETreeModel *etree)
-{
- g_return_val_if_fail (etree != NULL, FALSE);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), FALSE);
-
- if (ETM_CLASS(etree)->has_save_id)
- return ETM_CLASS(etree)->has_save_id (etree);
- else
- return FALSE;
-}
-
-/**
- * e_tree_model_get_save_id
- * @etree: The ETreeModel.
- * @node: The ETreePath.
- *
- * XXX docs here.
- *
- * return values: The save id for this path.
- */
-gchar *
-e_tree_model_get_save_id (ETreeModel *etree, ETreePath node)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->get_save_id)
- return ETM_CLASS(etree)->get_save_id (etree, node);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_has_get_node_by_id
- * @etree: The ETreeModel.
- *
- * XXX docs here.
- *
- * return values: Whether this tree can quickly get a node from its save id.
- */
-gboolean
-e_tree_model_has_get_node_by_id (ETreeModel *etree)
-{
- g_return_val_if_fail (etree != NULL, FALSE);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), FALSE);
-
- if (ETM_CLASS(etree)->has_get_node_by_id)
- return ETM_CLASS(etree)->has_get_node_by_id (etree);
- else
- return FALSE;
-}
-
-/**
- * e_tree_model_get_node_by_id
- * @etree: The ETreeModel.
- * @node: The ETreePath.
- *
- * get_node_by_id(get_save_id(node)) should be the original node.
- * Likewise if get_node_by_id is not NULL, then
- * get_save_id(get_node_by_id(string)) should be a copy of the
- * original string.
- *
- * return values: The path for this save id.
- */
-ETreePath
-e_tree_model_get_node_by_id (ETreeModel *etree, const char *save_id)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->get_node_by_id)
- return ETM_CLASS(etree)->get_node_by_id (etree, save_id);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_has_change_pending
- * @etree: The ETreeModel.
- *
- * XXX docs here.
- *
- * return values: Whether this tree has valid save id data.
- */
-gboolean
-e_tree_model_has_change_pending (ETreeModel *etree)
-{
- g_return_val_if_fail (etree != NULL, FALSE);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), FALSE);
-
- if (ETM_CLASS(etree)->has_change_pending)
- return ETM_CLASS(etree)->has_change_pending (etree);
- else
- return FALSE;
-}
-
-/**
- * e_tree_model_value_at:
- * @etree: The ETreeModel.
- * @node: The ETreePath to the node we're getting the data from.
- * @col: the column to retrieve data from
- *
- * Return value: This function returns the value that is stored by the
- * @etree in column @col and node @node. The data returned can be a
- * pointer or any data value that can be stored inside a pointer.
- *
- * The data returned is typically used by an ECell renderer.
- *
- * The data returned must be valid until the model sends a signal that
- * affect that piece of data. node_changed and node_deleted affect
- * all data in tha t node and all nodes under that node.
- * node_data_changed affects the data in that node. node_col_changed
- * affects the data in that node for that column. node_inserted,
- * node_removed, and no_change don't affect any data in this way.
- **/
-void *
-e_tree_model_value_at (ETreeModel *etree, ETreePath node, int col)
-{
- g_return_val_if_fail (etree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (etree), NULL);
-
- if (ETM_CLASS(etree)->value_at)
- return ETM_CLASS(etree)->value_at (etree, node, col);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_icon_of_node
- * @etree: The ETreeModel.
- * @path: The ETreePath to the node we're getting the icon of.
- *
- * XXX docs here.
- *
- * return values: the GdkPixbuf associated with this node.
- */
-void
-e_tree_model_set_value_at (ETreeModel *etree, ETreePath node, int col, const void *val)
-{
- g_return_if_fail (etree != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (etree));
-
- if (ETM_CLASS(etree)->set_value_at)
- ETM_CLASS(etree)->set_value_at (etree, node, col, val);
-}
-
-/**
- * e_tree_model_node_is_editable:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-gboolean
-e_tree_model_node_is_editable (ETreeModel *etree, ETreePath node, int col)
-{
- g_return_val_if_fail(etree != NULL, FALSE);
-
- if (ETM_CLASS(etree)->is_editable)
- return ETM_CLASS(etree)->is_editable(etree, node, col);
- else
- return FALSE;
-}
-
-/**
- * e_tree_model_duplicate_value:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-void *
-e_tree_model_duplicate_value (ETreeModel *etree, int col, const void *value)
-{
- g_return_val_if_fail(etree != NULL, NULL);
-
- if (ETM_CLASS(etree)->duplicate_value)
- return ETM_CLASS(etree)->duplicate_value(etree, col, value);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_free_value:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-void
-e_tree_model_free_value (ETreeModel *etree, int col, void *value)
-{
- g_return_if_fail(etree != NULL);
-
- if (ETM_CLASS(etree)->free_value)
- ETM_CLASS(etree)->free_value(etree, col, value);
-}
-
-/**
- * e_tree_model_initialize_value:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-void *
-e_tree_model_initialize_value (ETreeModel *etree, int col)
-{
- g_return_val_if_fail(etree != NULL, NULL);
-
- if (ETM_CLASS(etree)->initialize_value)
- return ETM_CLASS(etree)->initialize_value(etree, col);
- else
- return NULL;
-}
-
-/**
- * e_tree_model_value_is_empty:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-gboolean
-e_tree_model_value_is_empty (ETreeModel *etree, int col, const void *value)
-{
- g_return_val_if_fail(etree != NULL, TRUE);
-
- if (ETM_CLASS(etree)->value_is_empty)
- return ETM_CLASS(etree)->value_is_empty(etree, col, value);
- else
- return TRUE;
-}
-
-/**
- * e_tree_model_value_to_string:
- * @etree:
- * @path:
- *
- *
- *
- * Return value:
- **/
-char *
-e_tree_model_value_to_string (ETreeModel *etree, int col, const void *value)
-{
- g_return_val_if_fail(etree != NULL, g_strdup(""));
-
- if (ETM_CLASS(etree)->value_to_string)
- return ETM_CLASS(etree)->value_to_string(etree, col, value);
- else
- return g_strdup("");
-}
-
-/**
- * e_tree_model_node_traverse:
- * @model:
- * @path:
- * @func:
- * @data:
- *
- *
- **/
-void
-e_tree_model_node_traverse (ETreeModel *model, ETreePath path, ETreePathFunc func, gpointer data)
-{
- ETreePath child;
-
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (model));
- g_return_if_fail (path != NULL);
-
- child = e_tree_model_node_get_first_child (model, path);
-
- while (child) {
- ETreePath next_child;
-
- next_child = e_tree_model_node_get_next (model, child);
- e_tree_model_node_traverse (model, child, func, data);
- if (func (model, child, data))
- return;
-
- child = next_child;
- }
-}
-
-/**
- * e_tree_model_node_traverse_preorder:
- * @model:
- * @path:
- * @func:
- * @data:
- *
- *
- **/
-void
-e_tree_model_node_traverse_preorder (ETreeModel *model, ETreePath path, ETreePathFunc func, gpointer data)
-{
- ETreePath child;
-
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TREE_MODEL (model));
- g_return_if_fail (path != NULL);
-
- child = e_tree_model_node_get_first_child (model, path);
-
- while (child) {
- ETreePath next_child;
-
- if (func (model, child, data))
- return;
-
- next_child = e_tree_model_node_get_next (model, child);
- e_tree_model_node_traverse_preorder (model, child, func, data);
-
- child = next_child;
- }
-}
-
-/**
- * e_tree_model_node_traverse_preorder:
- * @model:
- * @path:
- * @func:
- * @data:
- *
- *
- **/
-static ETreePath
-e_tree_model_node_real_traverse (ETreeModel *model, ETreePath path, ETreePath end_path, gboolean forward_direction, ETreePathFunc func, gpointer data)
-{
- ETreePath child;
-
- g_return_val_if_fail (model != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (model), NULL);
- g_return_val_if_fail (path != NULL, NULL);
-
- if (forward_direction)
- child = e_tree_model_node_get_first_child (model, path);
- else
- child = e_tree_model_node_get_last_child (model, path);
-
- while (child) {
- ETreePath result;
-
- if (forward_direction && (child == end_path || func (model, child, data)))
- return child;
-
- if ((result = e_tree_model_node_real_traverse (model, child, end_path, forward_direction, func, data)))
- return result;
-
- if (!forward_direction && (child == end_path || func (model, child, data)))
- return child;
-
- if (forward_direction)
- child = e_tree_model_node_get_next (model, child);
- else
- child = e_tree_model_node_get_prev (model, child);
- }
- return NULL;
-}
-
-/**
- * e_tree_model_node_traverse_preorder:
- * @model:
- * @path:
- * @func:
- * @data:
- *
- *
- **/
-ETreePath
-e_tree_model_node_find (ETreeModel *model, ETreePath path, ETreePath end_path, gboolean forward_direction, ETreePathFunc func, gpointer data)
-{
- ETreePath result;
- ETreePath next;
-
- g_return_val_if_fail (model != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE_MODEL (model), NULL);
-
- /* Just search the whole tree in this case. */
- if (path == NULL) {
- ETreePath root;
- root = e_tree_model_get_root (model);
-
- if (forward_direction && (end_path == root || func (model, root, data)))
- return root;
-
- if ((result = e_tree_model_node_real_traverse (model, root, end_path, forward_direction, func, data)))
- return result;
-
- if (!forward_direction && (end_path == root || func (model, root, data)))
- return root;
-
- return NULL;
- }
-
- while (1) {
-
- if (forward_direction) {
- if ((result = e_tree_model_node_real_traverse (model, path, end_path, forward_direction, func, data)))
- return result;
- next = e_tree_model_node_get_next (model, path);
- } else {
- next = e_tree_model_node_get_prev (model, path);
- if (next && (result = e_tree_model_node_real_traverse (model, next, end_path, forward_direction, func, data)))
- return result;
- }
-
- while (next == NULL) {
- path = e_tree_model_node_get_parent (model, path);
-
- if (path == NULL)
- return NULL;
-
- if (forward_direction)
- next = e_tree_model_node_get_next (model, path);
- else
- next = path;
- }
-
- if (end_path == next || func (model, next, data))
- return next;
-
- path = next;
- }
-}
-
diff --git a/widgets/table/e-tree-model.h b/widgets/table/e-tree-model.h
deleted file mode 100644
index c9574388e1..0000000000
--- a/widgets/table/e-tree-model.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_MODEL_H_
-#define _E_TREE_MODEL_H_
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <glib-object.h>
-
-
-G_BEGIN_DECLS
-
-
-#define E_TREE_MODEL_TYPE (e_tree_model_get_type ())
-#define E_TREE_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_MODEL_TYPE, ETreeModel))
-#define E_TREE_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_MODEL_TYPE, ETreeModelClass))
-#define E_IS_TREE_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_MODEL_TYPE))
-#define E_IS_TREE_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_MODEL_TYPE))
-#define E_TREE_MODEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TREE_MODEL_TYPE, ETreeModelClass))
-
-typedef void * ETreePath;
-typedef struct ETreeModel ETreeModel;
-typedef struct ETreeModelClass ETreeModelClass;
-typedef gint (*ETreePathCompareFunc)(ETreeModel *model, ETreePath path1, ETreePath path2);
-typedef gboolean (*ETreePathFunc)(ETreeModel *model, ETreePath path, gpointer data);
-
-struct ETreeModel {
- GObject base;
-};
-
-struct ETreeModelClass {
- GObjectClass parent_class;
-
- /*
- * Virtual methods
- */
- ETreePath (*get_root) (ETreeModel *etm);
-
- ETreePath (*get_parent) (ETreeModel *etm, ETreePath node);
- ETreePath (*get_first_child) (ETreeModel *etm, ETreePath node);
- ETreePath (*get_last_child) (ETreeModel *etm, ETreePath node);
- ETreePath (*get_next) (ETreeModel *etm, ETreePath node);
- ETreePath (*get_prev) (ETreeModel *etm, ETreePath node);
-
- gboolean (*is_root) (ETreeModel *etm, ETreePath node);
- gboolean (*is_expandable) (ETreeModel *etm, ETreePath node);
- guint (*get_children) (ETreeModel *etm, ETreePath node, ETreePath **paths);
- guint (*depth) (ETreeModel *etm, ETreePath node);
-
- GdkPixbuf *(*icon_at) (ETreeModel *etm, ETreePath node);
-
- gboolean (*get_expanded_default) (ETreeModel *etm);
- gint (*column_count) (ETreeModel *etm);
-
- gboolean (*has_save_id) (ETreeModel *etm);
- gchar *(*get_save_id) (ETreeModel *etm, ETreePath node);
-
- gboolean (*has_get_node_by_id) (ETreeModel *etm);
- ETreePath (*get_node_by_id) (ETreeModel *etm, const char *save_id);
-
- gboolean (*has_change_pending) (ETreeModel *etm);
-
- /*
- * ETable analogs
- */
- void *(*value_at) (ETreeModel *etm, ETreePath node, int col);
- void (*set_value_at) (ETreeModel *etm, ETreePath node, int col, const void *val);
- gboolean (*is_editable) (ETreeModel *etm, ETreePath node, int col);
-
- void *(*duplicate_value) (ETreeModel *etm, int col, const void *value);
- void (*free_value) (ETreeModel *etm, int col, void *value);
- void *(*initialize_value) (ETreeModel *etm, int col);
- gboolean (*value_is_empty) (ETreeModel *etm, int col, const void *value);
- char *(*value_to_string) (ETreeModel *etm, int col, const void *value);
-
- /*
- * Signals
- */
-
- /* During node_remove, the ETreePath of the child is removed
- * from the tree but is still a valid ETreePath. At
- * node_deleted, the ETreePath is no longer valid.
- */
-
- void (*pre_change) (ETreeModel *etm);
- void (*no_change) (ETreeModel *etm);
- void (*node_changed) (ETreeModel *etm, ETreePath node);
- void (*node_data_changed) (ETreeModel *etm, ETreePath node);
- void (*node_col_changed) (ETreeModel *etm, ETreePath node, int col);
- void (*node_inserted) (ETreeModel *etm, ETreePath parent, ETreePath inserted_node);
- void (*node_removed) (ETreeModel *etm, ETreePath parent, ETreePath removed_node, int old_position);
- void (*node_deleted) (ETreeModel *etm, ETreePath deleted_node);
-
- /* This signal requests that any viewers of the tree that
- * collapse and expand nodes collapse this node.
- */
- void (*node_request_collapse) (ETreeModel *etm, ETreePath node);
-};
-
-
-GType e_tree_model_get_type (void);
-ETreeModel *e_tree_model_new (void);
-
-/* tree traversal operations */
-ETreePath e_tree_model_get_root (ETreeModel *etree);
-ETreePath e_tree_model_node_get_parent (ETreeModel *etree,
- ETreePath path);
-ETreePath e_tree_model_node_get_first_child (ETreeModel *etree,
- ETreePath path);
-ETreePath e_tree_model_node_get_last_child (ETreeModel *etree,
- ETreePath path);
-ETreePath e_tree_model_node_get_next (ETreeModel *etree,
- ETreePath path);
-ETreePath e_tree_model_node_get_prev (ETreeModel *etree,
- ETreePath path);
-
-/* node accessors */
-gboolean e_tree_model_node_is_root (ETreeModel *etree,
- ETreePath path);
-gboolean e_tree_model_node_is_expandable (ETreeModel *etree,
- ETreePath path);
-guint e_tree_model_node_get_children (ETreeModel *etree,
- ETreePath path,
- ETreePath **paths);
-guint e_tree_model_node_depth (ETreeModel *etree,
- ETreePath path);
-GdkPixbuf *e_tree_model_icon_at (ETreeModel *etree,
- ETreePath path);
-gboolean e_tree_model_get_expanded_default (ETreeModel *model);
-gint e_tree_model_column_count (ETreeModel *model);
-gboolean e_tree_model_has_save_id (ETreeModel *model);
-gchar *e_tree_model_get_save_id (ETreeModel *model,
- ETreePath node);
-gboolean e_tree_model_has_get_node_by_id (ETreeModel *model);
-ETreePath e_tree_model_get_node_by_id (ETreeModel *model,
- const char *save_id);
-gboolean e_tree_model_has_change_pending (ETreeModel *model);
-void *e_tree_model_value_at (ETreeModel *etree,
- ETreePath node,
- int col);
-void e_tree_model_set_value_at (ETreeModel *etree,
- ETreePath node,
- int col,
- const void *val);
-gboolean e_tree_model_node_is_editable (ETreeModel *etree,
- ETreePath node,
- int col);
-void *e_tree_model_duplicate_value (ETreeModel *etree,
- int col,
- const void *value);
-void e_tree_model_free_value (ETreeModel *etree,
- int col,
- void *value);
-void *e_tree_model_initialize_value (ETreeModel *etree,
- int col);
-gboolean e_tree_model_value_is_empty (ETreeModel *etree,
- int col,
- const void *value);
-char *e_tree_model_value_to_string (ETreeModel *etree,
- int col,
- const void *value);
-
-/* depth first traversal of path's descendents, calling func on each one */
-void e_tree_model_node_traverse (ETreeModel *model,
- ETreePath path,
- ETreePathFunc func,
- gpointer data);
-void e_tree_model_node_traverse_preorder (ETreeModel *model,
- ETreePath path,
- ETreePathFunc func,
- gpointer data);
-ETreePath e_tree_model_node_find (ETreeModel *model,
- ETreePath path,
- ETreePath end_path,
- gboolean forward_direction,
- ETreePathFunc func,
- gpointer data);
-
-/*
-** Routines for emitting signals on the ETreeModel
-*/
-void e_tree_model_pre_change (ETreeModel *tree_model);
-void e_tree_model_no_change (ETreeModel *tree_model);
-void e_tree_model_node_changed (ETreeModel *tree_model,
- ETreePath node);
-void e_tree_model_node_data_changed (ETreeModel *tree_model,
- ETreePath node);
-void e_tree_model_node_col_changed (ETreeModel *tree_model,
- ETreePath node,
- int col);
-void e_tree_model_node_inserted (ETreeModel *tree_model,
- ETreePath parent_node,
- ETreePath inserted_node);
-void e_tree_model_node_removed (ETreeModel *tree_model,
- ETreePath parent_node,
- ETreePath removed_node,
- int old_position);
-void e_tree_model_node_deleted (ETreeModel *tree_model,
- ETreePath deleted_node);
-void e_tree_model_node_request_collapse (ETreeModel *tree_model,
- ETreePath deleted_node);
-
-
-G_END_DECLS
-
-#endif /* _E_TREE_MODEL_H */
diff --git a/widgets/table/e-tree-scrolled.c b/widgets/table/e-tree-scrolled.c
deleted file mode 100644
index a72a246b69..0000000000
--- a/widgets/table/e-tree-scrolled.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-scrolled.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdio.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gtk/gtksignal.h>
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-#include <gal/util/e-util.h>
-#include <gal/util/e-i18n.h>
-
-#include "e-tree-scrolled.h"
-
-#define COLUMN_HEADER_HEIGHT 16
-
-#define PARENT_TYPE gtk_scrolled_window_get_type ()
-
-static GtkObjectClass *parent_class;
-
-enum {
- PROP_0,
- PROP_TREE
-};
-
-static void
-e_tree_scrolled_init (GtkObject *object)
-{
- ETreeScrolled *ets;
- GtkScrolledWindow *scrolled_window;
-
- ets = E_TREE_SCROLLED (object);
- scrolled_window = GTK_SCROLLED_WINDOW (object);
-
- GTK_WIDGET_SET_FLAGS (ets, GTK_CAN_FOCUS);
-
- ets->tree = g_object_new (E_TREE_TYPE, NULL);
-
- gtk_scrolled_window_set_policy (scrolled_window, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (scrolled_window, GTK_SHADOW_IN);
-}
-
-static void
-e_tree_scrolled_real_construct (ETreeScrolled *ets)
-{
- gtk_container_add(GTK_CONTAINER(ets), GTK_WIDGET(ets->tree));
-
- gtk_widget_show(GTK_WIDGET(ets->tree));
-}
-
-ETreeScrolled *e_tree_scrolled_construct (ETreeScrolled *ets,
- ETreeModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state)
-{
- g_return_val_if_fail(ets != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_SCROLLED(ets), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec != NULL, NULL);
-
- e_tree_construct(ets->tree, etm, ete, spec, state);
-
- e_tree_scrolled_real_construct(ets);
-
- return ets;
-}
-
-GtkWidget *e_tree_scrolled_new (ETreeModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state)
-{
- ETreeScrolled *ets;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec != NULL, NULL);
-
- ets = E_TREE_SCROLLED (gtk_widget_new (e_tree_scrolled_get_type (),
- "hadjustment", NULL,
- "vadjustment", NULL,
- NULL));
-
- ets = e_tree_scrolled_construct (ets, etm, ete, spec, state);
-
- return GTK_WIDGET (ets);
-}
-
-ETreeScrolled *e_tree_scrolled_construct_from_spec_file (ETreeScrolled *ets,
- ETreeModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn)
-{
- g_return_val_if_fail(ets != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_SCROLLED(ets), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- e_tree_construct_from_spec_file(ets->tree, etm, ete, spec_fn, state_fn);
-
- e_tree_scrolled_real_construct(ets);
-
- return ets;
-}
-
-GtkWidget *e_tree_scrolled_new_from_spec_file (ETreeModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn)
-{
- ETreeScrolled *ets;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- ets = E_TREE_SCROLLED (gtk_widget_new (e_tree_scrolled_get_type (),
- "hadjustment", NULL,
- "vadjustment", NULL,
- NULL));
- ets = e_tree_scrolled_construct_from_spec_file (ets, etm, ete, spec_fn, state_fn);
-
- return GTK_WIDGET (ets);
-}
-
-ETree *
-e_tree_scrolled_get_tree (ETreeScrolled *ets)
-{
- return ets->tree;
-}
-
-static void
-ets_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETreeScrolled *ets = E_TREE_SCROLLED (object);
-
- switch (prop_id){
- case PROP_TREE:
- g_value_set_object (value, ets->tree);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-/* Grab_focus handler for the scrolled ETree */
-static void
-ets_grab_focus (GtkWidget *widget)
-{
- ETreeScrolled *ets;
-
- ets = E_TREE_SCROLLED (widget);
-
- gtk_widget_grab_focus (GTK_WIDGET (ets->tree));
-}
-
-/* Focus handler for the scrolled ETree */
-static gint
-ets_focus (GtkWidget *container, GtkDirectionType direction)
-{
- ETreeScrolled *ets;
-
- ets = E_TREE_SCROLLED (container);
-
- return gtk_widget_child_focus (GTK_WIDGET (ets->tree), direction);
-}
-
-static void
-e_tree_scrolled_class_init (ETreeScrolledClass *class)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
- GtkContainerClass *container_class;
-
- object_class = (GObjectClass *) class;
- widget_class = (GtkWidgetClass *) class;
- container_class = (GtkContainerClass *) class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->get_property = ets_get_property;
-
- widget_class->grab_focus = ets_grab_focus;
-
- widget_class->focus = ets_focus;
-
- g_object_class_install_property (object_class, PROP_TREE,
- g_param_spec_object ("tree",
- _( "Tree" ),
- _( "Tree" ),
- E_TREE_TYPE,
- G_PARAM_READABLE));
-}
-
-E_MAKE_TYPE(e_tree_scrolled, "ETreeScrolled", ETreeScrolled, e_tree_scrolled_class_init, e_tree_scrolled_init, PARENT_TYPE)
-
diff --git a/widgets/table/e-tree-scrolled.h b/widgets/table/e-tree-scrolled.h
deleted file mode 100644
index f861b71138..0000000000
--- a/widgets/table/e-tree-scrolled.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-scrolled.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_SCROLLED_H_
-#define _E_TREE_SCROLLED_H_
-
-#include <gtk/gtkscrolledwindow.h>
-#include <gal/e-table/e-tree-model.h>
-#include <gal/e-table/e-tree.h>
-
-G_BEGIN_DECLS
-
-#define E_TREE_SCROLLED_TYPE (e_tree_scrolled_get_type ())
-#define E_TREE_SCROLLED(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_SCROLLED_TYPE, ETreeScrolled))
-#define E_TREE_SCROLLED_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_SCROLLED_TYPE, ETreeScrolledClass))
-#define E_IS_TREE_SCROLLED(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_SCROLLED_TYPE))
-#define E_IS_TREE_SCROLLED_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_SCROLLED_TYPE))
-
-typedef struct {
- GtkScrolledWindow parent;
-
- ETree *tree;
-} ETreeScrolled;
-
-typedef struct {
- GtkScrolledWindowClass parent_class;
-} ETreeScrolledClass;
-
-GType e_tree_scrolled_get_type (void);
-
-ETreeScrolled *e_tree_scrolled_construct (ETreeScrolled *ets,
- ETreeModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-GtkWidget *e_tree_scrolled_new (ETreeModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-
-ETreeScrolled *e_tree_scrolled_construct_from_spec_file (ETreeScrolled *ets,
- ETreeModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-GtkWidget *e_tree_scrolled_new_from_spec_file (ETreeModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-
-ETree *e_tree_scrolled_get_tree (ETreeScrolled *ets);
-
-G_END_DECLS
-
-#endif /* _E_TREE_SCROLLED_H_ */
diff --git a/widgets/table/e-tree-selection-model.c b/widgets/table/e-tree-selection-model.c
deleted file mode 100644
index 6d45b6257c..0000000000
--- a/widgets/table/e-tree-selection-model.c
+++ /dev/null
@@ -1,816 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-selection-model.c
- * Copyright 2000, 2001, 2003 Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Mike Kestner <mkestner@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "e-tree-selection-model.h"
-#include <gal/util/e-i18n.h>
-#include <gal/util/e-util.h>
-#include <gdk/gdkkeysyms.h>
-#include <gal/e-table/e-tree-table-adapter.h>
-
-#define PARENT_TYPE e_selection_model_get_type ()
-
-static ESelectionModelClass *parent_class;
-
-enum {
- PROP_0,
- PROP_CURSOR_ROW,
- PROP_CURSOR_COL,
- PROP_MODEL,
- PROP_ETTA,
-};
-
-struct ETreeSelectionModelPriv {
- ETreeTableAdapter *etta;
- ETreeModel *model;
-
- GHashTable *paths;
- ETreePath cursor_path;
- ETreePath start_path;
- gint cursor_col;
- gchar *cursor_save_id;
-
- gint tree_model_pre_change_id;
- gint tree_model_no_change_id;
- gint tree_model_node_changed_id;
- gint tree_model_node_data_changed_id;
- gint tree_model_node_col_changed_id;
- gint tree_model_node_inserted_id;
- gint tree_model_node_removed_id;
- gint tree_model_node_deleted_id;
-};
-
-static gint
-get_cursor_row (ETreeSelectionModel *etsm)
-{
- if (etsm->priv->cursor_path)
- return e_tree_table_adapter_row_of_node(etsm->priv->etta, etsm->priv->cursor_path);
-
- return -1;
-}
-
-static void
-clear_selection (ETreeSelectionModel *etsm)
-{
- g_hash_table_destroy (etsm->priv->paths);
- etsm->priv->paths = g_hash_table_new (NULL, NULL);
-}
-
-static void
-change_one_path (ETreeSelectionModel *etsm, ETreePath path, gboolean grow)
-{
- if (!path)
- return;
-
- if (grow)
- g_hash_table_insert (etsm->priv->paths, path, path);
- else if (g_hash_table_lookup (etsm->priv->paths, path))
- g_hash_table_remove (etsm->priv->paths, path);
-}
-
-static void
-select_single_path (ETreeSelectionModel *etsm, ETreePath path)
-{
- clear_selection (etsm);
- change_one_path(etsm, path, TRUE);
- etsm->priv->cursor_path = path;
- etsm->priv->start_path = NULL;
-}
-
-static void
-select_range (ETreeSelectionModel *etsm, gint start, gint end)
-{
- gint i;
-
- if (start > end) {
- i = start;
- start = end;
- end = i;
- }
-
- for (i = start; i <= end; i++) {
- ETreePath path = e_tree_table_adapter_node_at_row (etsm->priv->etta, i);
- if (path)
- g_hash_table_insert (etsm->priv->paths, path, path);
- }
-}
-
-static void
-free_id (ETreeSelectionModel *etsm)
-{
- g_free (etsm->priv->cursor_save_id);
- etsm->priv->cursor_save_id = NULL;
-}
-
-static void
-restore_cursor (ETreeSelectionModel *etsm, ETreeModel *etm)
-{
- clear_selection (etsm);
- etsm->priv->cursor_path = NULL;
-
- if (etsm->priv->cursor_save_id) {
- etsm->priv->cursor_path = e_tree_model_get_node_by_id (etm, etsm->priv->cursor_save_id);
- if (etsm->priv->cursor_path != NULL && etsm->priv->cursor_col == -1)
- etsm->priv->cursor_col = 0;
-
- select_single_path(etsm, etsm->priv->cursor_path);
- }
-
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
-
- if (etsm->priv->cursor_path) {
- gint cursor_row = get_cursor_row (etsm);
- e_selection_model_cursor_changed(E_SELECTION_MODEL(etsm), cursor_row, etsm->priv->cursor_col);
- } else {
- e_selection_model_cursor_changed(E_SELECTION_MODEL(etsm), -1, -1);
- e_selection_model_cursor_activated(E_SELECTION_MODEL(etsm), -1, -1);
-
- }
-
- free_id (etsm);
-}
-
-static void
-etsm_pre_change (ETreeModel *etm, ETreeSelectionModel *etsm)
-{
- g_free (etsm->priv->cursor_save_id);
- etsm->priv->cursor_save_id = NULL;
-
- if (e_tree_model_has_get_node_by_id (etm) && e_tree_model_has_save_id (etm) && etsm->priv->cursor_path) {
- etsm->priv->cursor_save_id = e_tree_model_get_save_id (etm, etsm->priv->cursor_path);
- }
-}
-
-static void
-etsm_no_change (ETreeModel *etm, ETreeSelectionModel *etsm)
-{
- free_id (etsm);
-}
-
-static void
-etsm_node_changed (ETreeModel *etm, ETreePath node, ETreeSelectionModel *etsm)
-{
- restore_cursor (etsm, etm);
-}
-
-static void
-etsm_node_data_changed (ETreeModel *etm, ETreePath node, ETreeSelectionModel *etsm)
-{
- free_id (etsm);
-}
-
-static void
-etsm_node_col_changed (ETreeModel *etm, ETreePath node, int col, ETreeSelectionModel *etsm)
-{
- free_id (etsm);
-}
-
-static void
-etsm_node_inserted (ETreeModel *etm, ETreePath parent, ETreePath child, ETreeSelectionModel *etsm)
-{
- restore_cursor (etsm, etm);
-}
-
-static void
-etsm_node_removed (ETreeModel *etm, ETreePath parent, ETreePath child, int old_position, ETreeSelectionModel *etsm)
-{
- restore_cursor (etsm, etm);
-}
-
-static void
-etsm_node_deleted (ETreeModel *etm, ETreePath child, ETreeSelectionModel *etsm)
-{
- restore_cursor (etsm, etm);
-}
-
-
-static void
-add_model(ETreeSelectionModel *etsm, ETreeModel *model)
-{
- ETreeSelectionModelPriv *priv = etsm->priv;
-
- priv->model = model;
-
- if (!priv->model)
- return;
-
- g_object_ref(priv->model);
- priv->tree_model_pre_change_id = g_signal_connect_after (G_OBJECT (priv->model), "pre_change",
- G_CALLBACK (etsm_pre_change), etsm);
- priv->tree_model_no_change_id = g_signal_connect_after (G_OBJECT (priv->model), "no_change",
- G_CALLBACK (etsm_no_change), etsm);
- priv->tree_model_node_changed_id = g_signal_connect_after (G_OBJECT (priv->model), "node_changed",
- G_CALLBACK (etsm_node_changed), etsm);
- priv->tree_model_node_data_changed_id = g_signal_connect_after (G_OBJECT (priv->model), "node_data_changed",
- G_CALLBACK (etsm_node_data_changed), etsm);
- priv->tree_model_node_col_changed_id = g_signal_connect_after (G_OBJECT (priv->model), "node_col_changed",
- G_CALLBACK (etsm_node_col_changed), etsm);
- priv->tree_model_node_inserted_id = g_signal_connect_after (G_OBJECT (priv->model), "node_inserted",
- G_CALLBACK (etsm_node_inserted), etsm);
- priv->tree_model_node_removed_id = g_signal_connect_after (G_OBJECT (priv->model), "node_removed",
- G_CALLBACK (etsm_node_removed), etsm);
- priv->tree_model_node_deleted_id = g_signal_connect_after (G_OBJECT (priv->model), "node_deleted",
- G_CALLBACK (etsm_node_deleted), etsm);
-}
-
-static void
-drop_model(ETreeSelectionModel *etsm)
-{
- ETreeSelectionModelPriv *priv = etsm->priv;
-
- if (!priv->model)
- return;
-
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_pre_change_id);
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_no_change_id);
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_node_changed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_node_data_changed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_node_col_changed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_node_inserted_id);
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_node_removed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->model),
- priv->tree_model_node_deleted_id);
-
- g_object_unref (priv->model);
- priv->model = NULL;
-
- priv->tree_model_pre_change_id = 0;
- priv->tree_model_no_change_id = 0;
- priv->tree_model_node_changed_id = 0;
- priv->tree_model_node_data_changed_id = 0;
- priv->tree_model_node_col_changed_id = 0;
- priv->tree_model_node_inserted_id = 0;
- priv->tree_model_node_removed_id = 0;
- priv->tree_model_node_deleted_id = 0;
-}
-
-static void
-etsm_dispose (GObject *object)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL (object);
-
- drop_model(etsm);
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-etsm_finalize (GObject *object)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL (object);
-
- if (etsm->priv) {
- clear_selection (etsm);
- g_hash_table_destroy (etsm->priv->paths);
- g_free (etsm->priv);
- etsm->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->finalize)
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-static void
-etsm_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL (object);
-
- switch (prop_id){
- case PROP_CURSOR_ROW:
- g_value_set_int (value, get_cursor_row(etsm));
- break;
-
- case PROP_CURSOR_COL:
- g_value_set_int (value, etsm->priv->cursor_col);
- break;
-
- case PROP_MODEL:
- g_value_set_object (value, etsm->priv->model);
- break;
-
- case PROP_ETTA:
- g_value_set_object (value, etsm->priv->etta);
- break;
- }
-}
-
-static void
-etsm_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- ESelectionModel *esm = E_SELECTION_MODEL (object);
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL (object);
-
- switch (prop_id){
- case PROP_CURSOR_ROW:
- e_selection_model_do_something(esm, g_value_get_int (value), etsm->priv->cursor_col, 0);
- break;
-
- case PROP_CURSOR_COL:
- e_selection_model_do_something(esm, get_cursor_row(etsm), g_value_get_int(value), 0);
- break;
-
- case PROP_MODEL:
- drop_model(etsm);
- add_model(etsm, E_TREE_MODEL (g_value_get_object(value)));
- break;
-
- case PROP_ETTA:
- etsm->priv->etta = E_TREE_TABLE_ADAPTER (g_value_get_object (value));
- break;
- }
-}
-
-static gboolean
-etsm_is_path_selected (ETreeSelectionModel *etsm, ETreePath path)
-{
- if (path && g_hash_table_lookup (etsm->priv->paths, path))
- return TRUE;
-
- return FALSE;
-}
-
-/**
- * e_selection_model_is_row_selected
- * @selection: #ESelectionModel to check
- * @n: The row to check
- *
- * This routine calculates whether the given row is selected.
- *
- * Returns: %TRUE if the given row is selected
- */
-static gboolean
-etsm_is_row_selected (ESelectionModel *selection,
- gint row)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- ETreePath path;
-
- g_return_val_if_fail(row < e_table_model_row_count(E_TABLE_MODEL(etsm->priv->etta)), FALSE);
- g_return_val_if_fail(row >= 0, FALSE);
- g_return_val_if_fail(etsm != NULL, FALSE);
-
- path = e_tree_table_adapter_node_at_row(etsm->priv->etta, row);
- return etsm_is_path_selected (etsm, path);
-}
-
-
-typedef struct {
- ETreeSelectionModel *etsm;
- EForeachFunc callback;
- gpointer closure;
-} ModelAndCallback;
-
-static void
-etsm_row_foreach_cb (gpointer key, gpointer value, gpointer user_data)
-{
- ETreePath path = key;
- ModelAndCallback *mac = user_data;
- int row = e_tree_table_adapter_row_of_node(mac->etsm->priv->etta, path);
- if (row >= 0)
- mac->callback(row, mac->closure);
-}
-
-/**
- * e_selection_model_foreach
- * @selection: #ESelectionModel to traverse
- * @callback: The callback function to call back.
- * @closure: The closure
- *
- * This routine calls the given callback function once for each
- * selected row, passing closure as the closure.
- */
-static void
-etsm_foreach (ESelectionModel *selection,
- EForeachFunc callback,
- gpointer closure)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- ModelAndCallback mac;
-
- mac.etsm = etsm;
- mac.callback = callback;
- mac.closure = closure;
-
- g_hash_table_foreach(etsm->priv->paths, etsm_row_foreach_cb, &mac);
-}
-
-/**
- * e_selection_model_clear
- * @selection: #ESelectionModel to clear
- *
- * This routine clears the selection to no rows selected.
- */
-static void
-etsm_clear(ESelectionModel *selection)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
-
- clear_selection (etsm);
-
- etsm->priv->cursor_path = NULL;
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(etsm), -1, -1);
-}
-
-/**
- * e_selection_model_selected_count
- * @selection: #ESelectionModel to count
- *
- * This routine calculates the number of rows selected.
- *
- * Returns: The number of rows selected in the given model.
- */
-static gint
-etsm_selected_count (ESelectionModel *selection)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
-
- return g_hash_table_size (etsm->priv->paths);
-}
-
-static int
-etsm_row_count (ESelectionModel *selection)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- return e_table_model_row_count(E_TABLE_MODEL(etsm->priv->etta));
-}
-
-/**
- * e_selection_model_select_all
- * @selection: #ESelectionModel to select all
- *
- * This routine selects all the rows in the given
- * #ESelectionModel.
- */
-static void
-etsm_select_all (ESelectionModel *selection)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- ETreePath root;
-
- root = e_tree_model_get_root(etsm->priv->model);
- if (root == NULL)
- return;
-
- clear_selection (etsm);
- select_range (etsm, 0, etsm_row_count (selection) - 1);
-
- if (etsm->priv->cursor_path == NULL)
- etsm->priv->cursor_path = e_tree_table_adapter_node_at_row(etsm->priv->etta, 0);
-
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(etsm), get_cursor_row(etsm), etsm->priv->cursor_col);
-}
-
-/**
- * e_selection_model_invert_selection
- * @selection: #ESelectionModel to invert
- *
- * This routine inverts all the rows in the given
- * #ESelectionModel.
- */
-static void
-etsm_invert_selection (ESelectionModel *selection)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- gint count = etsm_row_count (selection);
- gint i;
-
- for (i = 0; i < count; i++) {
- ETreePath path = e_tree_table_adapter_node_at_row (etsm->priv->etta, i);
- if (!path)
- continue;
- if (g_hash_table_lookup (etsm->priv->paths, path))
- g_hash_table_remove (etsm->priv->paths, path);
- else
- g_hash_table_insert (etsm->priv->paths, path, path);
- }
-
- etsm->priv->cursor_col = -1;
- etsm->priv->cursor_path = NULL;
- etsm->priv->start_path = NULL;
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
- e_selection_model_cursor_changed(E_SELECTION_MODEL(etsm), -1, -1);
-}
-
-static void
-etsm_change_one_row(ESelectionModel *selection, int row, gboolean grow)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- ETreePath path;
-
- g_return_if_fail(row < e_table_model_row_count(E_TABLE_MODEL(etsm->priv->etta)));
- g_return_if_fail(row >= 0);
- g_return_if_fail(selection != NULL);
-
- path = e_tree_table_adapter_node_at_row(etsm->priv->etta, row);
-
- if (!path)
- return;
-
- change_one_path (etsm, path, grow);
-}
-
-static void
-etsm_change_cursor (ESelectionModel *selection, int row, int col)
-{
- ETreeSelectionModel *etsm;
-
- g_return_if_fail(selection != NULL);
- g_return_if_fail(E_IS_SELECTION_MODEL(selection));
-
- etsm = E_TREE_SELECTION_MODEL(selection);
-
- if (row == -1) {
- etsm->priv->cursor_path = NULL;
- } else {
- etsm->priv->cursor_path = e_tree_table_adapter_node_at_row(etsm->priv->etta, row);
- }
- etsm->priv->cursor_col = col;
-}
-
-static gint
-etsm_cursor_row (ESelectionModel *selection)
-{
- return get_cursor_row(E_TREE_SELECTION_MODEL(selection));
-}
-
-static gint
-etsm_cursor_col (ESelectionModel *selection)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- return etsm->priv->cursor_col;
-}
-
-static void
-etsm_select_single_row (ESelectionModel *selection, gint row)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- ETreePath path = e_tree_table_adapter_node_at_row (etsm->priv->etta, row);
-
- g_return_if_fail (path != NULL);
-
- select_single_path (etsm, path);
-
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
-}
-
-static void
-etsm_toggle_single_row (ESelectionModel *selection, gint row)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
- ETreePath path = e_tree_table_adapter_node_at_row(etsm->priv->etta, row);
-
- g_return_if_fail (path);
-
- if (g_hash_table_lookup (etsm->priv->paths, path))
- g_hash_table_remove (etsm->priv->paths, path);
- else
- g_hash_table_insert (etsm->priv->paths, path, path);
-
- etsm->priv->start_path = NULL;
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
-}
-
-static void
-etsm_real_move_selection_end (ETreeSelectionModel *etsm, gint row)
-{
- ETreePath end_path = e_tree_table_adapter_node_at_row (etsm->priv->etta, row);
- gint start;
-
- g_return_if_fail (end_path);
-
- start = e_tree_table_adapter_row_of_node(etsm->priv->etta, etsm->priv->start_path);
- clear_selection (etsm);
- select_range (etsm, start, row);
-}
-
-static void
-etsm_move_selection_end (ESelectionModel *selection, gint row)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
-
- g_return_if_fail (etsm->priv->cursor_path);
-
- etsm_real_move_selection_end (etsm, row);
- e_selection_model_selection_changed(E_SELECTION_MODEL(selection));
-}
-
-static void
-etsm_set_selection_end (ESelectionModel *selection, gint row)
-{
- ETreeSelectionModel *etsm = E_TREE_SELECTION_MODEL(selection);
-
- g_return_if_fail (etsm->priv->cursor_path);
-
- if (!etsm->priv->start_path)
- etsm->priv->start_path = etsm->priv->cursor_path;
- etsm_real_move_selection_end(etsm, row);
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
-}
-
-struct foreach_path_t {
- ETreeForeachFunc callback;
- gpointer closure;
-};
-
-static void
-foreach_path (gpointer key, gpointer value, gpointer data)
-{
- ETreePath path = key;
- struct foreach_path_t *c = data;
- c->callback (path, c->closure);
-}
-
-void
-e_tree_selection_model_foreach (ETreeSelectionModel *etsm, ETreeForeachFunc callback, gpointer closure)
-{
- if (etsm->priv->paths) {
- struct foreach_path_t c;
- c.callback = callback;
- c.closure = closure;
- g_hash_table_foreach(etsm->priv->paths, foreach_path, &c);
- return;
- }
-}
-
-void
-e_tree_selection_model_select_single_path (ETreeSelectionModel *etsm, ETreePath path)
-{
- select_single_path (etsm, path);
-
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
-}
-
-void
-e_tree_selection_model_select_paths (ETreeSelectionModel *etsm, GPtrArray *paths)
-{
- ETreePath path;
- int i;
-
- for (i=0;i<paths->len;i++) {
- path = paths->pdata[i];
- change_one_path(etsm, path, TRUE);
- }
-
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
-}
-
-void
-e_tree_selection_model_add_to_selection (ETreeSelectionModel *etsm, ETreePath path)
-{
- change_one_path(etsm, path, TRUE);
-
- e_selection_model_selection_changed(E_SELECTION_MODEL(etsm));
-}
-
-void
-e_tree_selection_model_change_cursor (ETreeSelectionModel *etsm, ETreePath path)
-{
- int row;
-
- etsm->priv->cursor_path = path;
-
- row = get_cursor_row(etsm);
-
- E_SELECTION_MODEL (etsm)->old_selection = -1;
-
- e_selection_model_cursor_changed(E_SELECTION_MODEL(etsm), row, etsm->priv->cursor_col);
- e_selection_model_cursor_activated(E_SELECTION_MODEL(etsm), row, etsm->priv->cursor_col);
-}
-
-ETreePath
-e_tree_selection_model_get_cursor (ETreeSelectionModel *etsm)
-{
- return etsm->priv->cursor_path;
-}
-
-
-static void
-e_tree_selection_model_init (ETreeSelectionModel *etsm)
-{
- ETreeSelectionModelPriv *priv;
- priv = g_new(ETreeSelectionModelPriv, 1);
- etsm->priv = priv;
-
- priv->etta = NULL;
- priv->model = NULL;
-
- priv->paths = g_hash_table_new (NULL, NULL);
-
- priv->cursor_path = NULL;
- priv->start_path = NULL;
- priv->cursor_col = -1;
- priv->cursor_save_id = NULL;
-
- priv->tree_model_pre_change_id = 0;
- priv->tree_model_no_change_id = 0;
- priv->tree_model_node_changed_id = 0;
- priv->tree_model_node_data_changed_id = 0;
- priv->tree_model_node_col_changed_id = 0;
- priv->tree_model_node_inserted_id = 0;
- priv->tree_model_node_removed_id = 0;
- priv->tree_model_node_deleted_id = 0;
-}
-
-static void
-e_tree_selection_model_class_init (ETreeSelectionModelClass *klass)
-{
- GObjectClass *object_class;
- ESelectionModelClass *esm_class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS(klass);
- esm_class = E_SELECTION_MODEL_CLASS(klass);
-
- object_class->dispose = etsm_dispose;
- object_class->finalize = etsm_finalize;
- object_class->get_property = etsm_get_property;
- object_class->set_property = etsm_set_property;
-
- esm_class->is_row_selected = etsm_is_row_selected ;
- esm_class->foreach = etsm_foreach ;
- esm_class->clear = etsm_clear ;
- esm_class->selected_count = etsm_selected_count ;
- esm_class->select_all = etsm_select_all ;
- esm_class->invert_selection = etsm_invert_selection ;
- esm_class->row_count = etsm_row_count ;
-
- esm_class->change_one_row = etsm_change_one_row ;
- esm_class->change_cursor = etsm_change_cursor ;
- esm_class->cursor_row = etsm_cursor_row ;
- esm_class->cursor_col = etsm_cursor_col ;
-
- esm_class->select_single_row = etsm_select_single_row ;
- esm_class->toggle_single_row = etsm_toggle_single_row ;
- esm_class->move_selection_end = etsm_move_selection_end ;
- esm_class->set_selection_end = etsm_set_selection_end ;
-
- g_object_class_install_property (object_class, PROP_CURSOR_ROW,
- g_param_spec_int ("cursor_row",
- _("Cursor Row"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_COL,
- g_param_spec_int ("cursor_col",
- _("Cursor Column"),
- /*_( */"XXX blurb" /*)*/,
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MODEL,
- g_param_spec_object ("model",
- _("Model"),
- "XXX blurb",
- E_TREE_MODEL_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ETTA,
- g_param_spec_object ("etta",
- "ETTA",
- "XXX blurb",
- E_TREE_TABLE_ADAPTER_TYPE,
- G_PARAM_READWRITE));
-
-}
-
-ESelectionModel *
-e_tree_selection_model_new (void)
-{
- return g_object_new (E_TREE_SELECTION_MODEL_TYPE, NULL);
-}
-
-E_MAKE_TYPE(e_tree_selection_model, "ETreeSelectionModel", ETreeSelectionModel,
- e_tree_selection_model_class_init, e_tree_selection_model_init, PARENT_TYPE)
diff --git a/widgets/table/e-tree-selection-model.h b/widgets/table/e-tree-selection-model.h
deleted file mode 100644
index 44ebf08f31..0000000000
--- a/widgets/table/e-tree-selection-model.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-selection-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_SELECTION_MODEL_H_
-#define _E_TREE_SELECTION_MODEL_H_
-
-#include <gdk/gdktypes.h>
-#include <gtk/gtkobject.h>
-#include <gal/util/e-sorter.h>
-#include <gal/widgets/e-selection-model.h>
-#include <gal/e-table/e-tree-model.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-typedef void (*ETreeForeachFunc) (ETreePath path,
- gpointer closure);
-
-typedef struct ETreeSelectionModelPriv ETreeSelectionModelPriv;
-
-#define E_TREE_SELECTION_MODEL_TYPE (e_tree_selection_model_get_type ())
-#define E_TREE_SELECTION_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_SELECTION_MODEL_TYPE, ETreeSelectionModel))
-#define E_TREE_SELECTION_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_SELECTION_MODEL_TYPE, ETreeSelectionModelClass))
-#define E_IS_TREE_SELECTION_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_SELECTION_MODEL_TYPE))
-#define E_IS_TREE_SELECTION_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_SELECTION_MODEL_TYPE))
-
-typedef struct {
- ESelectionModel base;
-
- ETreeSelectionModelPriv *priv;
-} ETreeSelectionModel;
-
-typedef struct {
- ESelectionModelClass parent_class;
-} ETreeSelectionModelClass;
-
-
-GType e_tree_selection_model_get_type (void);
-ESelectionModel *e_tree_selection_model_new (void);
-void e_tree_selection_model_foreach (ETreeSelectionModel *etsm,
- ETreeForeachFunc callback,
- gpointer closure);
-void e_tree_selection_model_select_single_path (ETreeSelectionModel *etsm,
- ETreePath path);
-void e_tree_selection_model_select_paths (ETreeSelectionModel *etsm, GPtrArray *paths);
-
-void e_tree_selection_model_add_to_selection (ETreeSelectionModel *etsm,
- ETreePath path);
-void e_tree_selection_model_change_cursor (ETreeSelectionModel *etsm,
- ETreePath path);
-ETreePath e_tree_selection_model_get_cursor (ETreeSelectionModel *etsm);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _E_TREE_SELECTION_MODEL_H_ */
diff --git a/widgets/table/e-tree-simple.c b/widgets/table/e-tree-simple.c
deleted file mode 100644
index e8dff1e05a..0000000000
--- a/widgets/table/e-tree-simple.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-simple.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include "gal/util/e-util.h"
-#include "e-tree-simple.h"
-
-static int
-simple_column_count (ETableModel *etm)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- if (simple->col_count)
- return simple->col_count (etm, simple->model_data);
- else
- return 0;
-}
-
-/* The default for simple_duplicate_value is to return the raw value. */
-static void *
-simple_duplicate_value (ETableModel *etm, int col, const void *value)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- if (simple->duplicate_value)
- return simple->duplicate_value (etm, col, value, simple->model_data);
- else
- return (void *)value;
-}
-
-static void
-simple_free_value (ETableModel *etm, int col, void *value)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- if (simple->free_value)
- simple->free_value (etm, col, value, simple->model_data);
-}
-
-static void *
-simple_initialize_value (ETableModel *etm, int col)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- if (simple->initialize_value)
- return simple->initialize_value (etm, col, simple->model_data);
- else
- return NULL;
-}
-
-static gboolean
-simple_value_is_empty (ETableModel *etm, int col, const void *value)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- if (simple->value_is_empty)
- return simple->value_is_empty (etm, col, value, simple->model_data);
- else
- return FALSE;
-}
-
-static char *
-simple_value_to_string (ETableModel *etm, int col, const void *value)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- if (simple->value_to_string)
- return simple->value_to_string (etm, col, value, simple->model_data);
- else
- return g_strdup ("");
-}
-
-static void *
-simple_value_at (ETreeModel *etm, ETreePath *node, int col)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- return simple->value_at (etm, node, col, simple->model_data);
-}
-
-static GdkPixbuf *
-simple_icon_at (ETreeModel *etm, ETreePath *node)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- return simple->icon_at (etm, node, simple->model_data);
-}
-
-static void
-simple_set_value_at (ETreeModel *etm, ETreePath *node, int col, const void *val)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- simple->set_value_at (etm, node, col, val, simple->model_data);
-}
-
-static gboolean
-simple_is_editable (ETreeModel *etm, ETreePath *node, int col)
-{
- ETreeSimple *simple = E_TREE_SIMPLE(etm);
-
- return simple->is_editable (etm, node, col, simple->model_data);
-}
-
-static void
-e_tree_simple_class_init (GObjectClass *object_class)
-{
- ETreeModelClass *model_class = (ETreeModelClass *) object_class;
- ETableModelClass *table_model_class = (ETableModelClass *) object_class;
-
- table_model_class->column_count = simple_column_count;
- table_model_class->duplicate_value = simple_duplicate_value;
- table_model_class->free_value = simple_free_value;
- table_model_class->initialize_value = simple_initialize_value;
- table_model_class->value_is_empty = simple_value_is_empty;
- table_model_class->value_to_string = simple_value_to_string;
-
- model_class ->icon_at = simple_icon_at;
- model_class ->value_at = simple_value_at;
- model_class ->set_value_at = simple_set_value_at;
- model_class ->is_editable = simple_is_editable;
-}
-
-E_MAKE_TYPE(e_tree_simple, "ETreeSimple", ETreeSimple, e_tree_simple_class_init, NULL, E_TREE_MODEL_TYPE)
-
-/**
- * e_tree_simple_new:
- * @col_count:
- * @duplicate_value:
- * @free_value:
- * @initialize_value:
- * @value_is_empty:
- * @value_to_string:
- * @icon_at:
- * @value_at:
- * @set_value_at:
- * @is_editable:
- * @model_data:
- *
- * This initializes a new ETreeSimpleModel object. ETreeSimpleModel is
- * an implementaiton of the abstract class ETreeModel. The ETreeSimpleModel
- * is designed to allow people to easily create ETreeModels without having
- * to create a new GtkType derived from ETreeModel every time they need one.
- *
- * Instead, ETreeSimpleModel uses a setup based in callback functions, every
- * callback function signature mimics the signature of each ETreeModel method
- * and passes the extra @data pointer to each one of the method to provide them
- * with any context they might want to use.
- *
- * ETreeSimple is to ETreeModel as ETableSimple is to ETableModel.
- *
- * Return value: An ETreeSimple object (which is also an ETreeModel
- * object).
- **/
-ETreeModel *
-e_tree_simple_new (ETableSimpleColumnCountFn col_count,
- ETableSimpleDuplicateValueFn duplicate_value,
- ETableSimpleFreeValueFn free_value,
- ETableSimpleInitializeValueFn initialize_value,
- ETableSimpleValueIsEmptyFn value_is_empty,
- ETableSimpleValueToStringFn value_to_string,
-
- ETreeSimpleIconAtFn icon_at,
- ETreeSimpleValueAtFn value_at,
- ETreeSimpleSetValueAtFn set_value_at,
- ETreeSimpleIsEditableFn is_editable,
-
- gpointer model_data)
-{
- ETreeSimple *etg = g_object_new (E_TREE_SIMPLE_TYPE, NULL);
-
- etg->col_count = col_count;
- etg->duplicate_value = duplicate_value;
- etg->free_value = free_value;
- etg->initialize_value = initialize_value;
- etg->value_is_empty = value_is_empty;
- etg->value_to_string = value_to_string;
-
- etg->icon_at = icon_at;
- etg->value_at = value_at;
- etg->set_value_at = set_value_at;
- etg->is_editable = is_editable;
-
- etg->model_data = model_data;
-
- return (ETreeModel*)etg;
-}
-
diff --git a/widgets/table/e-tree-simple.h b/widgets/table/e-tree-simple.h
deleted file mode 100644
index f9980c9544..0000000000
--- a/widgets/table/e-tree-simple.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-simple.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_SIMPLE_H_
-#define _E_TREE_SIMPLE_H_
-
-#include <gal/e-table/e-tree-model.h>
-#include <gal/e-table/e-table-simple.h>
-
-G_BEGIN_DECLS
-
-#define E_TREE_SIMPLE_TYPE (e_tree_simple_get_type ())
-#define E_TREE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_SIMPLE_TYPE, ETreeSimple))
-#define E_TREE_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_SIMPLE_TYPE, ETreeSimpleClass))
-#define E_IS_TREE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_SIMPLE_TYPE))
-#define E_IS_TREE_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_SIMPLE_TYPE))
-#define E_TREE_SIMPLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TREE_SIMPLE_TYPE, ETreeSimpleClass))
-
-
-typedef GdkPixbuf* (*ETreeSimpleIconAtFn) (ETreeModel *etree, ETreePath *path, void *model_data);
-typedef void* (*ETreeSimpleValueAtFn) (ETreeModel *etree, ETreePath *path, int col, void *model_data);
-typedef void (*ETreeSimpleSetValueAtFn) (ETreeModel *etree, ETreePath *path, int col, const void *val, void *model_data);
-typedef gboolean (*ETreeSimpleIsEditableFn) (ETreeModel *etree, ETreePath *path, int col, void *model_data);
-
-typedef struct {
- ETreeModel parent;
-
- /* Table methods */
- ETableSimpleColumnCountFn col_count;
- ETableSimpleDuplicateValueFn duplicate_value;
- ETableSimpleFreeValueFn free_value;
- ETableSimpleInitializeValueFn initialize_value;
- ETableSimpleValueIsEmptyFn value_is_empty;
- ETableSimpleValueToStringFn value_to_string;
-
- /* Tree methods */
- ETreeSimpleIconAtFn icon_at;
- ETreeSimpleValueAtFn value_at;
- ETreeSimpleSetValueAtFn set_value_at;
- ETreeSimpleIsEditableFn is_editable;
-
- gpointer model_data;
-} ETreeSimple;
-
-typedef struct {
- ETreeModelClass parent_class;
-} ETreeSimpleClass;
-
-GType e_tree_simple_get_type (void);
-
-ETreeModel *e_tree_simple_new (ETableSimpleColumnCountFn col_count,
- ETableSimpleDuplicateValueFn duplicate_value,
- ETableSimpleFreeValueFn free_value,
- ETableSimpleInitializeValueFn initialize_value,
- ETableSimpleValueIsEmptyFn value_is_empty,
- ETableSimpleValueToStringFn value_to_string,
- ETreeSimpleIconAtFn icon_at,
- ETreeSimpleValueAtFn value_at,
- ETreeSimpleSetValueAtFn set_value_at,
- ETreeSimpleIsEditableFn is_editable,
- gpointer model_data);
-
-G_END_DECLS
-
-#endif /* _E_TREE_SIMPLE_H_ */
diff --git a/widgets/table/e-tree-sorted-variable.c b/widgets/table/e-tree-sorted-variable.c
deleted file mode 100644
index bb73b8b776..0000000000
--- a/widgets/table/e-tree-sorted-variable.c
+++ /dev/null
@@ -1,477 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-sorted-variable.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gal/util/e-util.h"
-#include "e-tree-sorted-variable.h"
-
-#define d(x)
-
-#define INCREMENT_AMOUNT 100
-
-/* maximum insertions between an idle event that we will do without scheduling an idle sort */
-#define ETSV_INSERT_MAX (4)
-
-static ETreeModelClass *etsv_parent_class;
-
-struct ETreePath {
- GNode node;
-};
-
-struct ETreeSortedVariablePrivate {
- GNode *root;
-};
-
-static void etsv_proxy_model_changed (ETableModel *etm, ETreeSortedVariable *etsv);
-#if 0
-static void etsv_proxy_model_row_changed (ETableModel *etm, int row, ETreeSortedVariable *etsv);
-static void etsv_proxy_model_cell_changed (ETableModel *etm, int col, int row, ETreeSortedVariable *etsv);
-#endif
-static void etsv_sort_info_changed (ETableSortInfo *info, ETreeSortedVariable *etsv);
-static void etsv_sort (ETreeSortedVariable *etsv);
-static void etsv_add (ETreeSortedVariable *etsv, gint row);
-static void etsv_add_all (ETreeSortedVariable *etsv);
-
-static void
-etsv_dispose (GObject *object)
-{
- ETreeSortedVariable *etsv = E_TREE_SORTED_VARIABLE (object);
-
- if (etsv->table_model_changed_id)
- g_signal_handler_disconnect (G_OBJECT (etss->source),
- etsv->table_model_changed_id);
- etsv->table_model_changed_id = 0;
-
-#if 0
- g_signal_handler_disconnect (etss->source,
- etsv->table_model_row_changed_id);
- g_signal_handler_disconnect (etss->source,
- etsv->table_model_cell_changed_id);
-
- etsv->table_model_row_changed_id = 0;
- etsv->table_model_cell_changed_id = 0;
-#endif
- if (etsv->sort_info_changed_id)
- g_signal_handler_disconnect (etsv->sort_info,
- etsv->sort_info_changed_id);
- etsv->sort_info_changed_id = 0;
-
- if (etsv->sort_idle_id)
- g_source_remove(etsv->sort_idle_id);
- etsv->sort_idle_id = 0;
-
- if (etsv->insert_idle_id)
- g_source_remove(etsv->insert_idle_id);
- etsv->insert_idle_id = 0;
-
- if (etsv->sort_info)
- g_object_unref(etsv->sort_info);
- etsv->sort_info = NULL;
-
- if (etsv->full_header)
- g_object_unref(etsv->full_header);
- etsv->full_header = NULL;
-
- G_OBJECT_CLASS (etsv_parent_class)->dispose (object);
-}
-
-static void
-etsv_class_init (GObjectClass *object_class)
-{
- ETreeSortedVariableClass *etsv_class = E_TREE_MODEL_CLASS(object_class);
-
- etsv_parent_class = g_type_class_peek_parent (object_class);
-
- object_class->dispose = etsv_dispose;
-
- etsv_class->add = etsv_add;
- etsv_class->add_all = etsv_add_all;
-}
-
-static void
-etsv_init (ETreeSortedVariable *etsv)
-{
- etsv->full_header = NULL;
- etsv->sort_info = NULL;
-
- etsv->table_model_changed_id = 0;
- etsv->table_model_row_changed_id = 0;
- etsv->table_model_cell_changed_id = 0;
- etsv->sort_info_changed_id = 0;
-
- etsv->sort_idle_id = 0;
- etsv->insert_count = 0;
-}
-
-E_MAKE_TYPE(e_tree_sorted_variable, "ETreeSortedVariable", ETreeSortedVariable, etsv_class_init, etsv_init, E_TREE_MODEL_TYPE)
-
-static gboolean
-etsv_sort_idle(ETreeSortedVariable *etsv)
-{
- g_object_ref(etsv);
- etsv_sort(etsv);
- etsv->sort_idle_id = 0;
- etsv->insert_count = 0;
- g_object_unref(etsv);
- return FALSE;
-}
-
-static gboolean
-etsv_insert_idle(ETreeSortedVariable *etsv)
-{
- etsv->insert_count = 0;
- etsv->insert_idle_id = 0;
- return FALSE;
-}
-
-
-ETableModel *
-e_tree_sorted_variable_new (ETreeModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
-{
- ETreeSortedVariable *etsv = g_object_new (E_TREE_SORTED_VARIABLE_TYPE, NULL);
- ETreeSortedVariable *etsv = E_TABLE_SUBSET_VARIABLE (etsv);
-
- if (e_table_subset_variable_construct (etsv, source) == NULL){
- g_object_unref (etsv);
- return NULL;
- }
-
- etsv->sort_info = sort_info;
- g_object_ref(etsv->sort_info);
- etsv->full_header = full_header;
- g_object_ref(etsv->full_header);
-
- etsv->table_model_changed_id = g_signal_connect (source, "model_changed",
- G_CALLBACK (etsv_proxy_model_changed), etsv);
-#if 0
- etsv->table_model_row_changed_id = g_signal_connect (source, "model_row_changed",
- G_CALLBACK (etsv_proxy_model_row_changed), etsv);
- etsv->table_model_cell_changed_id = g_signal_connect (source, "model_cell_changed",
- G_CALLBACK (etsv_proxy_model_cell_changed), etsv);
-#endif
- etsv->sort_info_changed_id = g_signal_connect (sort_info, "sort_info_changed",
- G_CALLBACK (etsv_sort_info_changed), etsv);
-
- return E_TABLE_MODEL(etsv);
-}
-
-static void
-etsv_proxy_model_changed (ETableModel *etm, ETreeSortedVariable *etsv)
-{
- /* FIXME: do_resort (); */
-}
-#if 0
-static void
-etsv_proxy_model_row_changed (ETableModel *etm, int row, ETreeSortedVariable *etsv)
-{
- ETreeSortedVariable *etsv = E_TABLE_SUBSET_VARIABLE(etsv);
-
- if (e_table_subset_variable_remove(etsv, row))
- e_table_subset_variable_add (etsv, row);
-}
-
-static void
-etsv_proxy_model_cell_changed (ETableModel *etm, int col, int row, ETreeSortedVariable *etsv)
-{
- ETreeSortedVariable *etsv = E_TABLE_SUBSET_VARIABLE(etsv);
-
- if (e_table_subset_variable_remove(etsv, row))
- e_table_subset_variable_add (etsv, row);
-}
-#endif
-
-static void
-etsv_sort_info_changed (ETableSortInfo *info, ETreeSortedVariable *etsv)
-{
- etsv_sort(etsv);
-}
-
-/* This takes source rows. */
-static int
-etsv_compare(ETreeSortedVariable *etsv, const ETreePath *path1, const ETreePath *path2)
-{
- int j;
- int sort_count = e_table_sort_info_sorting_get_count(etsv->sort_info);
- int comp_val = 0;
- int ascending = 1;
-
- for (j = 0; j < sort_count; j++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(etsv->sort_info, j);
- ETableCol *col;
- col = e_table_header_get_column_by_col_idx(etsv->full_header, column.column);
- if (col == NULL)
- col = e_table_header_get_column (etsv->full_header, e_table_header_count (etsv->full_header) - 1);
- comp_val = (*col->compare)(e_tree_model_value_at (etsv->source, path1, col->col_idx),
- e_tree_model_value_at (etsv->source, path2, col->col_idx));
- ascending = column.ascending;
- if (comp_val != 0)
- break;
- }
- if (comp_val == 0) {
- if (row1 < row2)
- comp_val = -1;
- if (row1 > row2)
- comp_val = 1;
- }
- if (!ascending)
- comp_val = -comp_val;
- return comp_val;
-}
-
-
-static ETreeSortedVariable *etsv_closure;
-int cols_closure;
-int *ascending_closure;
-int *col_idx_closure;
-GCompareFunc *compare_closure;
-
-static int
-etsv_compare_closure(const ETreePath *path1, const ETreePath *path2)
-{
- int j;
- int sort_count = e_table_sort_info_sorting_get_count(etsv_closure->sort_info);
- int comp_val = 0;
- int ascending = 1;
- for (j = 0; j < sort_count; j++) {
-
- comp_val = (*(compare_closure[j]))(e_tree_model_value_at (etsv_closure->source, path1, col_idx_closure[j]),
- e_tree_model_value_at (etsv_closure->source, path2, col_idx_closure[j]));
- ascending = ascending_closure[j];
- if (comp_val != 0)
- break;
- }
- if (comp_val == 0) {
- if (row1 < row2)
- comp_val = -1;
- if (row1 > row2)
- comp_val = 1;
- }
- if (!ascending)
- comp_val = -comp_val;
- return comp_val;
-}
-
-static int
-qsort_callback(const void *data1, const void *data2)
-{
- GNode *node1 = *(GNode **)data1;
- GNode *node2 = *(GNode **)data2;
- return etsv_compare_closure(node1->data, node2->data);
-}
-
-static int
-qsort_callback_source(const void *data1, const void *data2)
-{
- return etsv_compare_closure(data1, data2);
-}
-
-static void
-etsv_setup_closures(ETreeSortedVariable *etsv)
-{
- int j;
- int cols;
-
- cols = e_table_sort_info_sorting_get_count(etsv->sort_info);
- cols_closure = cols;
- etsv_closure = etsv;
-
- ascending_closure = g_new(int, cols);
- col_idx_closure = g_new(int, cols);
- compare_closure = g_new(GCompareFunc, cols);
-
- for (j = 0; j < cols; j++) {
- ETableSortColumn column = e_table_sort_info_sorting_get_nth(etsv->sort_info, j);
- ETableCol *col;
-
- col = e_table_header_get_column_by_col_idx(etsv->full_header, column.column);
- if (col == NULL) {
- col = e_table_header_get_column (etsv->full_header, e_table_header_count (etsv->full_header) - 1);
- }
-
- ascending_closure[j] = column.ascending;
- col_idx_closure[j] = col->col_idx;
- compare_closure[j] = col->compare;
- }
-}
-
-static void
-etsv_free_closures(ETreeSortedVariable *etsv)
-{
- g_free(ascending_closure);
- g_free(col_idx_closure);
- g_free(compare_closure);
-
-}
-
-static void
-etsv_sort_node(ETreeSortedVariable *etsv, GNode *node)
-{
- gint n;
- gint i;
- GNode **children;
- GNode *child;
- GNode *prev;
-
- n = g_node_n_children(node);
- children = g_new(GNode *, n);
- for (i = 0, child = node->children; child && i; child = child->next, i++) {
- children[i] = child;
- }
- qsort(children, n, sizeof(GNode *), qsort_callback);
-
- prev = NULL;
- for (i = 0; i < n; i++) {
- children[i]->prev = prev;
- if (prev) prev->next = children[i];
- prev = children[i];
- children[i]->next = NULL;
- }
-}
-
-static void
-etsv_sort_tree(ETreeSortedVariable *etsv, GNode *root)
-{
- GNode *childr;
-
- etsv_sort_node(etsv, node);
-
- for (child = node->child; child; child = child->next) {
- etsv_sort_tree(etsv, child);
- }
-}
-
-static void
-etsv_sort(ETreeSortedVariable *etsv)
-{
- static int reentering = 0;
- if (reentering)
- return;
- reentering = 1;
-
- e_table_model_pre_change(E_TABLE_MODEL(etsv));
-
- etsv_setup_closures(etsv);
-
- etsv_sort_tree(etsv, etsv->root);
-
- etsv_free_closures(etsv);
-
- e_table_model_changed (E_TABLE_MODEL(etsv));
- reentering = 0;
-}
-
-static void
-etsv_add_node (ETreeSortedVariable *etsv, ETreePath *path, GNode *root)
-{
- GNode *node;
- GNode *new_node;
- for (node = root; node; node = node->next) {
- if (e_tree_model_node_is_ancestor(etsv->source, path, node->data)) {
- etsv_add_node(etsv, path, node->data);
- return;
- }
- }
- new_node = g_node_new(path);
- for (node = root; node; ) {
- if (e_tree_model_node_is_ancestor(etsv->source, node->data, path)) {
- GNode *next;
- next = node->next;
- g_node_unlink(node);
- g_node_prepend(new_node, node);
- node = next;
- } else
- node = node->next;
- }
-
- etsv_sort_node(etsv, new_node);
-
-
-#if 0
- g_node_prepend(root, new_node);
- etsv_sort_node(etsv, root);
-#else
- /* Insert sort to be a bit faster than the above prepend and then sort. */
- for (node = root; node; node = node->next) {
- if (etsv_compare(etsv, path, node->data) > 0) {
- g_node_insert_before (root, node, new_node);
- return;
- }
- }
- g_node_append(root, new_node);
-#endif
-}
-
-etsv_add(ETreeSortedVariable *etsv, gint row)
-{
- ETreeModel *source = etsv->source;
- ETreePath *path;
-
- path = e_table_model_value_at (E_TABLE_MODEL(source), -1, row);
- etsv_add_node(etsv, path, etsv->root);
-}
-
-/* Optimize by doing the qsorts as we build. But we'll do that later. */
-static void
-etsv_add_all_node (ETreeSortedVariable *etsv, ETreePath *path, GNode *node)
-{
- ETreeModel *source = etsv->source;
- ETreePath **children;
- int n;
- int i;
-
- n = e_tree_model_node_get_children(source, path, &children);
- qsort(children, n, sizeof(ETreePath *), qsort_callback_source);
-
- for (i = n - 1; i >= 0; i--) {
- GNode *new_child = g_node_new(children[i]);
- g_node_prepend(path, new_child);
- etsv_add_all_node (etsv, children[i], new_child)
- }
-
- g_free(children);
-}
-
-static void
-etsv_add_all (ETreeSortedVariable *etsv)
-{
- GNode *node;
- ETreePath *path;
-
- e_table_model_pre_change(etm);
-
- if (etsv->root)
- g_node_destroy(etsv->root);
-
- etsv_setup_closures(etsv);
-
- path = e_tree_model_get_root(etsv->source);
- node = g_node_new(path);
- etsv_add_all_node(etsv, path, node);
- etsv->root = node;
-
- etsv_free_closures(etsv);
-
- e_tree_model_node_changed (etsv, etsv->root);
-}
diff --git a/widgets/table/e-tree-sorted-variable.h b/widgets/table/e-tree-sorted-variable.h
deleted file mode 100644
index 35c4c22ffd..0000000000
--- a/widgets/table/e-tree-sorted-variable.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-sorted-variable.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_SORTED_VARIABLE_H_
-#define _E_TREE_SORTED_VARIABLE_H_
-
-#include <glib-object.h>
-#include <gal/e-tree/e-tree-model.h>
-#include <gal/e-table/e-table-subset-variable.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-#define E_TREE_SORTED_VARIABLE_TYPE (e_tree_sorted_variable_get_type ())
-#define E_TREE_SORTED_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_SORTED_VARIABLE_TYPE, ETreeSortedVariable))
-#define E_TREE_SORTED_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_SORTED_VARIABLE_TYPE, ETreeSortedVariableClass))
-#define E_IS_TREE_SORTED_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_SORTED_VARIABLE_TYPE))
-#define E_IS_TREE_SORTED_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_SORTED_VARIABLE_TYPE))
-#define E_TREE_SORTED_VARIABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TREE_SORTED_VARIABLE_TYPE, ETreeSortedVariableClass))
-
-typedef struct {
- ETreeModel base;
-
- ETableSortInfo *sort_info;
-
- ETableHeader *full_header;
-
- int table_model_changed_id;
- int table_model_row_changed_id;
- int table_model_cell_changed_id;
- int sort_info_changed_id;
- int sort_idle_id;
- int insert_idle_id;
- int insert_count;
-
-} ETreeSortedVariable;
-
-typedef struct {
- ETreeModelClass parent_class;
-} ETreeSortedVariableClass;
-
-GType e_tree_sorted_variable_get_type (void);
-ETableModel *e_tree_sorted_variable_new (ETreeModel *etm,
- ETableHeader *header,
- ETableSortInfo *sort_info);
-
-ETreeModel *e_tree_sorted_get_toplevel (ETreeSortedVariable *tree_model);
-
-void e_tree_sorted_variable_add (ETreeSortedVariable *ets,
- gint row);
-void e_tree_sorted_variable_add_all (ETreeSortedVariable *ets);
-gboolean e_tree_sorted_variable_remove (ETreeSortedVariable *ets,
- gint row);
-void e_tree_sorted_variable_increment (ETreeSortedVariable *ets,
- gint position,
- gint amount);
-void e_tree_sorted_variable_decrement (ETreeSortedVariable *ets,
- gint position,
- gint amount);
-void e_tree_sorted_variable_set_allocation (ETreeSortedVariable *ets,
- gint total);
-G_END_DECLS
-
-#endif /* _E_TREE_SORTED_VARIABLE_H_ */
diff --git a/widgets/table/e-tree-sorted.c b/widgets/table/e-tree-sorted.c
deleted file mode 100644
index 20ecdad63f..0000000000
--- a/widgets/table/e-tree-sorted.c
+++ /dev/null
@@ -1,1390 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-sorted.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- *
- * Adapted from the gtree code and ETableModel.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-/* FIXME: Overall e-tree-sorted.c needs to be made more efficient. */
-
-
-#include <config.h>
-
-#include "e-tree-sorted.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include "e-table-sorting-utils.h"
-
-/* maximum insertions between an idle event that we will do without scheduling an idle sort */
-#define ETS_INSERT_MAX (4)
-
-#define TREEPATH_CHUNK_AREA_SIZE (30 * sizeof (ETreeSortedPath))
-
-#define d(x)
-
-static ETreeModel *parent_class;
-static GMemChunk *node_chunk;
-
-enum {
- NODE_RESORTED,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = {0, };
-
-typedef struct ETreeSortedPath ETreeSortedPath;
-
-struct ETreeSortedPath {
- ETreePath corresponding;
-
- /* parent/child/sibling pointers */
- ETreeSortedPath *parent;
- gint num_children;
- ETreeSortedPath **children;
- int position;
- int orig_position;
-
- guint needs_resort : 1;
- guint child_needs_resort : 1;
- guint resort_all_children : 1;
- guint needs_regen_to_sort : 1;
-};
-
-struct ETreeSortedPriv {
- ETreeModel *source;
- ETreeSortedPath *root;
-
- ETableSortInfo *sort_info;
- ETableHeader *full_header;
-
- ETreeSortedPath *last_access;
-
- int tree_model_pre_change_id;
- int tree_model_no_change_id;
- int tree_model_node_changed_id;
- int tree_model_node_data_changed_id;
- int tree_model_node_col_changed_id;
- int tree_model_node_inserted_id;
- int tree_model_node_removed_id;
- int tree_model_node_deleted_id;
- int tree_model_node_request_collapse_id;
-
- int sort_info_changed_id;
- int sort_idle_id;
- int insert_idle_id;
- int insert_count;
-
- guint in_resort_idle : 1;
- guint nested_resort_idle : 1;
-};
-
-enum {
- ARG_0,
-
- ARG_SORT_INFO
-};
-
-static void ets_sort_info_changed (ETableSortInfo *sort_info, ETreeSorted *ets);
-static void resort_node (ETreeSorted *ets, ETreeSortedPath *path, gboolean resort_all_children, gboolean needs_regen, gboolean send_signals);
-static void mark_path_needs_resort (ETreeSorted *ets, ETreeSortedPath *path, gboolean needs_rebuild, gboolean resort_all_children);
-static void schedule_resort (ETreeSorted *ets, ETreeSortedPath *path, gboolean needs_regen, gboolean resort_all_children);
-static void free_path (ETreeSortedPath *path);
-static void generate_children(ETreeSorted *ets, ETreeSortedPath *path);
-static void regenerate_children(ETreeSorted *ets, ETreeSortedPath *path);
-
-
-
-/* idle callbacks */
-
-static gboolean
-ets_sort_idle(gpointer user_data)
-{
- ETreeSorted *ets = user_data;
- if (ets->priv->in_resort_idle) {
- ets->priv->nested_resort_idle = TRUE;
- return FALSE;
- }
- ets->priv->in_resort_idle = TRUE;
- if (ets->priv->root) {
- do {
- ets->priv->nested_resort_idle = FALSE;
- resort_node (ets, ets->priv->root, FALSE, FALSE, TRUE);
- } while (ets->priv->nested_resort_idle);
- }
- ets->priv->in_resort_idle = FALSE;
- ets->priv->sort_idle_id = 0;
- return FALSE;
-}
-
-#define ETS_SORT_IDLE_ACTIVATED(ets) ((ets)->priv->sort_idle_id != 0)
-
-inline static void
-ets_stop_sort_idle (ETreeSorted *ets)
-{
- if (ets->priv->sort_idle_id) {
- g_source_remove(ets->priv->sort_idle_id);
- ets->priv->sort_idle_id = 0;
- }
-}
-
-static gboolean
-ets_insert_idle(ETreeSorted *ets)
-{
- ets->priv->insert_count = 0;
- ets->priv->insert_idle_id = 0;
- return FALSE;
-}
-
-
-
-/* Helper functions */
-
-#define CHECK_AROUND_LAST_ACCESS
-
-static inline ETreeSortedPath *
-check_last_access (ETreeSorted *ets, ETreePath corresponding)
-{
-#ifdef CHECK_AROUND_LAST_ACCESS
- ETreeSortedPath *parent;
-#endif
-
- if (ets->priv->last_access == NULL)
- return NULL;
-
- if (ets->priv->last_access == corresponding) {
- d(g_print("Found last access %p at %p.", ets->priv->last_access, ets->priv->last_access));
- return ets->priv->last_access;
- }
-
-#ifdef CHECK_AROUND_LAST_ACCESS
- parent = ets->priv->last_access->parent;
- if (parent && parent->children) {
- int position = ets->priv->last_access->position;
- int end = MIN(parent->num_children, position + 10);
- int start = MAX(0, position - 10);
- int initial = MAX (MIN (position, end), start);
- int i;
-
- for (i = initial; i < end; i++) {
- if (parent->children[i] && parent->children[i]->corresponding == corresponding) {
- d(g_print("Found last access %p at %p.", ets->priv->last_access, parent->children[i]));
- return parent->children[i];
- }
- }
-
- for (i = initial - 1; i >= start; i--) {
- if (parent->children[i] && parent->children[i]->corresponding == corresponding) {
- d(g_print("Found last access %p at %p.", ets->priv->last_access, parent->children[i]));
- return parent->children[i];
- }
- }
- }
-#endif
- return NULL;
-}
-
-static ETreeSortedPath *
-find_path(ETreeSorted *ets, ETreePath corresponding)
-{
- int depth;
- ETreePath *sequence;
- int i;
- ETreeSortedPath *path;
- ETreeSortedPath *check_last;
-
- if (corresponding == NULL)
- return NULL;
-
- check_last = check_last_access (ets, corresponding);
- if (check_last) {
- d(g_print(" (find_path)\n"));
- return check_last;
- }
-
- depth = e_tree_model_node_depth(ets->priv->source, corresponding);
-
- sequence = g_new(ETreePath, depth + 1);
-
- sequence[0] = corresponding;
-
- for (i = 0; i < depth; i++)
- sequence[i + 1] = e_tree_model_node_get_parent(ets->priv->source, sequence[i]);
-
- path = ets->priv->root;
-
- for (i = depth - 1; i >= 0 && path != NULL; i --) {
- int j;
-
- if (path->num_children == -1) {
- path = NULL;
- break;
- }
-
- for (j = 0; j < path->num_children; j++) {
- if (path->children[j]->corresponding == sequence[i]) {
- break;
- }
- }
-
- if (j < path->num_children) {
- path = path->children[j];
- } else {
- path = NULL;
- }
- }
- g_free (sequence);
-
- d(g_print("Didn't find last access %p. Setting to %p. (find_path)\n", ets->priv->last_access, path));
- ets->priv->last_access = path;
-
- return path;
-}
-
-static ETreeSortedPath *
-find_child_path(ETreeSorted *ets, ETreeSortedPath *parent, ETreePath corresponding)
-{
- int i;
-
- if (corresponding == NULL)
- return NULL;
-
- if (parent->num_children == -1) {
- return NULL;
- }
-
- for (i = 0; i < parent->num_children; i++)
- if (parent->children[i]->corresponding == corresponding)
- return parent->children[i];
-
- return NULL;
-}
-
-static ETreeSortedPath *
-find_or_create_path(ETreeSorted *ets, ETreePath corresponding)
-{
- int depth;
- ETreePath *sequence;
- int i;
- ETreeSortedPath *path;
- ETreeSortedPath *check_last;
-
- if (corresponding == NULL)
- return NULL;
-
- check_last = check_last_access (ets, corresponding);
- if (check_last) {
- d(g_print(" (find_or_create_path)\n"));
- return check_last;
- }
-
- depth = e_tree_model_node_depth(ets->priv->source, corresponding);
-
- sequence = g_new(ETreePath, depth + 1);
-
- sequence[0] = corresponding;
-
- for (i = 0; i < depth; i++)
- sequence[i + 1] = e_tree_model_node_get_parent(ets->priv->source, sequence[i]);
-
- path = ets->priv->root;
-
- for (i = depth - 1; i >= 0 && path != NULL; i --) {
- int j;
-
- if (path->num_children == -1) {
- generate_children(ets, path);
- }
-
- for (j = 0; j < path->num_children; j++) {
- if (path->children[j]->corresponding == sequence[i]) {
- break;
- }
- }
-
- if (j < path->num_children) {
- path = path->children[j];
- } else {
- path = NULL;
- }
- }
- g_free (sequence);
-
- d(g_print("Didn't find last access %p. Setting to %p. (find_or_create_path)\n", ets->priv->last_access, path));
- ets->priv->last_access = path;
-
- return path;
-}
-
-static void
-free_children (ETreeSortedPath *path)
-{
- int i;
-
- if (path == NULL)
- return;
-
- for (i = 0; i < path->num_children; i++) {
- free_path(path->children[i]);
- }
-
- g_free(path->children);
- path->children = NULL;
- path->num_children = -1;
-}
-
-static void
-free_path (ETreeSortedPath *path)
-{
- free_children(path);
- g_chunk_free(path, node_chunk);
-}
-
-static ETreeSortedPath *
-new_path (ETreeSortedPath *parent, ETreePath corresponding)
-{
- ETreeSortedPath *path;
-
- path = g_chunk_new0 (ETreeSortedPath, node_chunk);
-
- path->corresponding = corresponding;
- path->parent = parent;
- path->num_children = -1;
- path->children = NULL;
- path->position = -1;
- path->orig_position = -1;
- path->child_needs_resort = 0;
- path->resort_all_children = 0;
- path->needs_resort = 0;
- path->needs_regen_to_sort = 0;
-
- return path;
-}
-
-static gboolean
-reposition_path (ETreeSorted *ets, ETreeSortedPath *path)
-{
- int new_index;
- int old_index = path->position;
- ETreeSortedPath *parent = path->parent;
- gboolean changed = FALSE;
- if (parent) {
- if (ets->priv->sort_idle_id == 0) {
- if (ets->priv->insert_count > ETS_INSERT_MAX) {
- /* schedule a sort, and append instead */
- schedule_resort(ets, parent, TRUE, FALSE);
- } else {
- /* make sure we have an idle handler to reset the count every now and then */
- if (ets->priv->insert_idle_id == 0) {
- ets->priv->insert_idle_id = g_idle_add_full(40, (GSourceFunc) ets_insert_idle, ets, NULL);
- }
-
- new_index = e_table_sorting_utils_tree_check_position
- (E_TREE_MODEL(ets),
- ets->priv->sort_info,
- ets->priv->full_header,
- (ETreePath *) parent->children,
- parent->num_children,
- old_index);
-
- if (new_index > old_index) {
- int i;
- ets->priv->insert_count++;
- memmove(parent->children + old_index, parent->children + old_index + 1, sizeof (ETreePath) * (new_index - old_index));
- parent->children[new_index] = path;
- for (i = old_index; i <= new_index; i++)
- parent->children[i]->position = i;
- changed = TRUE;
- e_tree_model_node_changed(E_TREE_MODEL(ets), parent);
- e_tree_sorted_node_resorted(ets, parent);
- } else if (new_index < old_index) {
- int i;
- ets->priv->insert_count++;
- memmove(parent->children + new_index + 1, parent->children + new_index, sizeof (ETreePath) * (old_index - new_index));
- parent->children[new_index] = path;
- for (i = new_index; i <= old_index; i++)
- parent->children[i]->position = i;
- changed = TRUE;
- e_tree_model_node_changed(E_TREE_MODEL(ets), parent);
- e_tree_sorted_node_resorted(ets, parent);
- }
- }
- } else
- mark_path_needs_resort(ets, parent, TRUE, FALSE);
- }
- return changed;
-}
-
-static void
-regenerate_children(ETreeSorted *ets, ETreeSortedPath *path)
-{
- ETreeSortedPath **children;
- int i;
-
- children = g_new(ETreeSortedPath *, path->num_children);
- for (i = 0; i < path->num_children; i++)
- children[path->children[i]->orig_position] = path->children[i];
- g_free(path->children);
- path->children = children;
-}
-
-static void
-generate_children(ETreeSorted *ets, ETreeSortedPath *path)
-{
- ETreePath child;
- int i;
- int count;
-
- free_children(path);
-
- count = 0;
- for (child = e_tree_model_node_get_first_child(ets->priv->source, path->corresponding);
- child;
- child = e_tree_model_node_get_next(ets->priv->source, child)) {
- count ++;
- }
-
- path->num_children = count;
- path->children = g_new(ETreeSortedPath *, count);
- for (child = e_tree_model_node_get_first_child(ets->priv->source, path->corresponding), i = 0;
- child;
- child = e_tree_model_node_get_next(ets->priv->source, child), i++) {
- path->children[i] = new_path(path, child);
- path->children[i]->position = i;
- path->children[i]->orig_position = i;
- }
- if (path->num_children > 0)
- schedule_resort (ets, path, FALSE, TRUE);
-}
-
-static void
-resort_node (ETreeSorted *ets, ETreeSortedPath *path, gboolean resort_all_children, gboolean needs_regen, gboolean send_signals)
-{
- gboolean needs_resort;
- if (path) {
- needs_resort = path->needs_resort || resort_all_children;
- needs_regen = path->needs_regen_to_sort || needs_regen;
- if (path->num_children > 0) {
- if (needs_resort && send_signals)
- e_tree_model_pre_change(E_TREE_MODEL(ets));
- if (needs_resort) {
- int i;
- d(g_print("Start sort of node %p\n", path));
- if (needs_regen)
- regenerate_children(ets, path);
- d(g_print("Regened sort of node %p\n", path));
- e_table_sorting_utils_tree_sort (E_TREE_MODEL(ets),
- ets->priv->sort_info,
- ets->priv->full_header,
- (ETreePath *) path->children,
- path->num_children);
- d(g_print("Renumbering sort of node %p\n", path));
- for (i = 0; i < path->num_children; i++) {
- path->children[i]->position = i;
- }
- d(g_print("End sort of node %p\n", path));
- }
- if (path->resort_all_children)
- resort_all_children = TRUE;
- if ((resort_all_children || path->child_needs_resort) && path->num_children >= 0) {
- int i;
- for (i = 0; i < path->num_children; i++) {
- resort_node(ets, path->children[i], resort_all_children, needs_regen, send_signals && !needs_resort);
- }
- path->child_needs_resort = 0;
- }
- }
- path->needs_resort = 0;
- path->child_needs_resort = 0;
- path->needs_regen_to_sort = 0;
- path->resort_all_children = 0;
- if (needs_resort && send_signals && path->num_children > 0) {
- e_tree_model_node_changed(E_TREE_MODEL(ets), path);
- e_tree_sorted_node_resorted(ets, path);
- }
- }
-}
-
-static void
-mark_path_child_needs_resort (ETreeSorted *ets, ETreeSortedPath *path)
-{
- if (path == NULL)
- return;
- if (!path->child_needs_resort) {
- path->child_needs_resort = 1;
- mark_path_child_needs_resort (ets, path->parent);
- }
-}
-
-static void
-mark_path_needs_resort (ETreeSorted *ets, ETreeSortedPath *path, gboolean needs_regen, gboolean resort_all_children)
-{
- if (path == NULL)
- return;
- if (path->num_children == 0)
- return;
- path->needs_resort = 1;
- path->needs_regen_to_sort = needs_regen;
- path->resort_all_children = resort_all_children;
- mark_path_child_needs_resort(ets, path->parent);
-}
-
-static void
-schedule_resort (ETreeSorted *ets, ETreeSortedPath *path, gboolean needs_regen, gboolean resort_all_children)
-{
- ets->priv->insert_count = 0;
- if (ets->priv->insert_idle_id != 0) {
- g_source_remove(ets->priv->insert_idle_id);
- ets->priv->insert_idle_id = 0;
- }
-
- if (path == NULL)
- return;
- if (path->num_children == 0)
- return;
-
- mark_path_needs_resort(ets, path, needs_regen, resort_all_children);
- if (ets->priv->sort_idle_id == 0) {
- ets->priv->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, ets, NULL);
- } else if (ets->priv->in_resort_idle) {
- ets->priv->nested_resort_idle = TRUE;
- }
-}
-
-
-
-/* virtual methods */
-
-static void
-ets_dispose (GObject *object)
-{
- ETreeSorted *ets = E_TREE_SORTED (object);
- ETreeSortedPriv *priv = ets->priv;
-
- /* FIXME lots of stuff to free here */
- if (!priv) {
- G_OBJECT_CLASS (parent_class)->dispose (object);
- return;
- }
-
- if (priv->source) {
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_pre_change_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_no_change_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_node_changed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_node_data_changed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_node_col_changed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_node_inserted_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_node_removed_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_node_deleted_id);
- g_signal_handler_disconnect (G_OBJECT (priv->source),
- priv->tree_model_node_request_collapse_id);
-
- g_object_unref (priv->source);
- priv->source = NULL;
-
- priv->tree_model_pre_change_id = 0;
- priv->tree_model_no_change_id = 0;
- priv->tree_model_node_changed_id = 0;
- priv->tree_model_node_data_changed_id = 0;
- priv->tree_model_node_col_changed_id = 0;
- priv->tree_model_node_inserted_id = 0;
- priv->tree_model_node_removed_id = 0;
- priv->tree_model_node_deleted_id = 0;
- priv->tree_model_node_request_collapse_id = 0;
- }
-
- if (priv->sort_info) {
- g_signal_handler_disconnect (G_OBJECT (priv->sort_info),
- priv->sort_info_changed_id);
- priv->sort_info_changed_id = 0;
-
- g_object_unref (priv->sort_info);
- priv->sort_info = NULL;
- }
-
- ets_stop_sort_idle (ets);
- if (ets->priv->insert_idle_id) {
- g_source_remove(ets->priv->insert_idle_id);
- ets->priv->insert_idle_id = 0;
- }
-
- if (priv->full_header)
- g_object_unref(priv->full_header);
-
-}
-
-static void
-ets_finalize (GObject *object)
-{
- ETreeSorted *ets = (ETreeSorted *) object;
-
- if (ets->priv->root)
- free_path(ets->priv->root);
-
- g_free (ets->priv);
- ets->priv = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static ETreePath
-ets_get_root (ETreeModel *etm)
-{
- ETreeSortedPriv *priv = E_TREE_SORTED(etm)->priv;
- if (priv->root == NULL) {
- ETreeSorted *ets = E_TREE_SORTED(etm);
- ETreePath corresponding = e_tree_model_get_root(ets->priv->source);
-
- if (corresponding) {
- priv->root = new_path(NULL, corresponding);
- }
- }
- if (priv->root && priv->root->num_children == -1) {
- generate_children(E_TREE_SORTED(etm), priv->root);
- }
-
- return priv->root;
-}
-
-static ETreePath
-ets_get_parent (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- return path->parent;
-}
-
-static ETreePath
-ets_get_first_child (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- if (path->num_children == -1)
- generate_children(ets, path);
-
- if (path->num_children > 0)
- return path->children[0];
- else
- return NULL;
-}
-
-static ETreePath
-ets_get_last_child (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- if (path->num_children == -1)
- generate_children(ets, path);
-
- if (path->num_children > 0)
- return path->children[path->num_children - 1];
- else
- return NULL;
-}
-
-static ETreePath
-ets_get_next (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSortedPath *parent = path->parent;
- if (parent) {
- if (parent->num_children > path->position + 1)
- return parent->children[path->position + 1];
- else
- return NULL;
- } else
- return NULL;
-}
-
-static ETreePath
-ets_get_prev (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSortedPath *parent = path->parent;
- if (parent) {
- if (path->position - 1 >= 0)
- return parent->children[path->position - 1];
- else
- return NULL;
- } else
- return NULL;
-}
-
-static gboolean
-ets_is_root (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_node_is_root (ets->priv->source, path->corresponding);
-}
-
-static gboolean
-ets_is_expandable (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSorted *ets = E_TREE_SORTED(etm);
- gboolean expandable = e_tree_model_node_is_expandable (ets->priv->source, path->corresponding);
-
- if (path->num_children == -1) {
- generate_children(ets, node);
- }
-
- return expandable;
-}
-
-static guint
-ets_get_children (ETreeModel *etm, ETreePath node, ETreePath **nodes)
-{
- ETreeSortedPath *path = node;
- guint n_children;
-
- if (path->num_children == -1) {
- generate_children(E_TREE_SORTED(etm), node);
- }
-
- n_children = path->num_children;
-
- if (nodes) {
- int i;
-
- (*nodes) = g_malloc (sizeof (ETreePath) * n_children);
- for (i = 0; i < n_children; i ++) {
- (*nodes)[i] = path->children[i];
- }
- }
-
- return n_children;
-}
-
-static guint
-ets_depth (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_node_depth(ets->priv->source, path->corresponding);
-}
-
-static GdkPixbuf *
-ets_icon_at (ETreeModel *etm, ETreePath node)
-{
- ETreeSortedPath *path = node;
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_icon_at(ets->priv->source, path->corresponding);
-}
-
-static gboolean
-ets_get_expanded_default (ETreeModel *etm)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_get_expanded_default(ets->priv->source);
-}
-
-static gint
-ets_column_count (ETreeModel *etm)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_column_count(ets->priv->source);
-}
-
-
-static gboolean
-ets_has_save_id (ETreeModel *etm)
-{
- return TRUE;
-}
-
-static gchar *
-ets_get_save_id (ETreeModel *etm, ETreePath node)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
- ETreeSortedPath *path = node;
-
- if (e_tree_model_has_save_id(ets->priv->source))
- return e_tree_model_get_save_id(ets->priv->source, path->corresponding);
- else
- return g_strdup_printf("%p", path->corresponding);
-}
-
-static gboolean
-ets_has_get_node_by_id (ETreeModel *etm)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
- return e_tree_model_has_get_node_by_id(ets->priv->source);
-}
-
-static ETreePath
-ets_get_node_by_id (ETreeModel *etm, const char *save_id)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
- ETreePath node;
-
- node = e_tree_model_get_node_by_id (ets->priv->source, save_id);
-
- return find_path(ets, node);
-}
-
-static gboolean
-ets_has_change_pending (ETreeModel *etm)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return ets->priv->sort_idle_id != 0;
-}
-
-
-static void *
-ets_value_at (ETreeModel *etm, ETreePath node, int col)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
- ETreeSortedPath *path = node;
-
- return e_tree_model_value_at(ets->priv->source, path->corresponding, col);
-}
-
-static void
-ets_set_value_at (ETreeModel *etm, ETreePath node, int col, const void *val)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
- ETreeSortedPath *path = node;
-
- e_tree_model_set_value_at (ets->priv->source, path->corresponding, col, val);
-}
-
-static gboolean
-ets_is_editable (ETreeModel *etm, ETreePath node, int col)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
- ETreeSortedPath *path = node;
-
- return e_tree_model_node_is_editable (ets->priv->source, path->corresponding, col);
-}
-
-
-/* The default for ets_duplicate_value is to return the raw value. */
-static void *
-ets_duplicate_value (ETreeModel *etm, int col, const void *value)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_duplicate_value (ets->priv->source, col, value);
-}
-
-static void
-ets_free_value (ETreeModel *etm, int col, void *value)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- e_tree_model_free_value (ets->priv->source, col, value);
-}
-
-static void *
-ets_initialize_value (ETreeModel *etm, int col)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_initialize_value (ets->priv->source, col);
-}
-
-static gboolean
-ets_value_is_empty (ETreeModel *etm, int col, const void *value)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_value_is_empty (ets->priv->source, col, value);
-}
-
-static char *
-ets_value_to_string (ETreeModel *etm, int col, const void *value)
-{
- ETreeSorted *ets = E_TREE_SORTED(etm);
-
- return e_tree_model_value_to_string (ets->priv->source, col, value);
-}
-
-/* Proxy functions */
-
-static void
-ets_proxy_pre_change (ETreeModel *etm, ETreeSorted *ets)
-{
- e_tree_model_pre_change(E_TREE_MODEL(ets));
-}
-
-static void
-ets_proxy_no_change (ETreeModel *etm, ETreeSorted *ets)
-{
- e_tree_model_no_change(E_TREE_MODEL(ets));
-}
-
-static void
-ets_proxy_node_changed (ETreeModel *etm, ETreePath node, ETreeSorted *ets)
-{
- ets->priv->last_access = NULL;
- d(g_print("Setting last access %p. (ets_proxy_node_changed)\n", ets->priv->last_access));
-
- if (e_tree_model_node_is_root(ets->priv->source, node)) {
- ets_stop_sort_idle (ets);
-
- if (ets->priv->root) {
- free_path(ets->priv->root);
- }
- ets->priv->root = new_path(NULL, node);
- e_tree_model_node_changed(E_TREE_MODEL(ets), ets->priv->root);
- return;
- } else {
- ETreeSortedPath *path = find_path(ets, node);
-
- if (path) {
- free_children(path);
- if (!reposition_path(ets, path)) {
- e_tree_model_node_changed(E_TREE_MODEL(ets), path);
- } else {
- e_tree_model_no_change(E_TREE_MODEL(ets));
- }
- } else {
- e_tree_model_no_change(E_TREE_MODEL(ets));
- }
- }
-}
-
-static void
-ets_proxy_node_data_changed (ETreeModel *etm, ETreePath node, ETreeSorted *ets)
-{
- ETreeSortedPath *path = find_path(ets, node);
-
- if (path) {
- if (!reposition_path(ets, path))
- e_tree_model_node_data_changed(E_TREE_MODEL(ets), path);
- else
- e_tree_model_no_change(E_TREE_MODEL(ets));
- } else
- e_tree_model_no_change(E_TREE_MODEL(ets));
-}
-
-static void
-ets_proxy_node_col_changed (ETreeModel *etm, ETreePath node, int col, ETreeSorted *ets)
-{
- ETreeSortedPath *path = find_path(ets, node);
-
- if (path) {
- gboolean changed = FALSE;
- if (e_table_sorting_utils_affects_sort(ets->priv->sort_info, ets->priv->full_header, col))
- changed = reposition_path(ets, path);
- if (!changed)
- e_tree_model_node_col_changed(E_TREE_MODEL(ets), path, col);
- else
- e_tree_model_no_change(E_TREE_MODEL(ets));
- } else
- e_tree_model_no_change(E_TREE_MODEL(ets));
-}
-
-static void
-ets_proxy_node_inserted (ETreeModel *etm, ETreePath parent, ETreePath child, ETreeSorted *ets)
-{
- ETreeSortedPath *parent_path = find_path(ets, parent);
-
- if (parent_path && parent_path->num_children != -1) {
- int i;
- int j;
- ETreeSortedPath *path;
- int position = parent_path->num_children;
- ETreePath counter;
-
- for (counter = e_tree_model_node_get_next(etm, child);
- counter;
- counter = e_tree_model_node_get_next(etm, counter))
- position --;
-
- if (position != parent_path->num_children) {
- for (i = 0; i < parent_path->num_children; i++) {
- if (parent_path->children[i]->orig_position >= position)
- parent_path->children[i]->orig_position++;
- }
- }
-
- i = parent_path->num_children;
- path = new_path(parent_path, child);
- path->orig_position = position;
- if (!ETS_SORT_IDLE_ACTIVATED (ets)) {
- ets->priv->insert_count++;
- if (ets->priv->insert_count > ETS_INSERT_MAX) {
- /* schedule a sort, and append instead */
- schedule_resort(ets, parent_path, TRUE, FALSE);
- } else {
- /* make sure we have an idle handler to reset the count every now and then */
- if (ets->priv->insert_idle_id == 0) {
- ets->priv->insert_idle_id = g_idle_add_full(40, (GSourceFunc) ets_insert_idle, ets, NULL);
- }
- i = e_table_sorting_utils_tree_insert
- (ets->priv->source,
- ets->priv->sort_info,
- ets->priv->full_header,
- (ETreePath *) parent_path->children,
- parent_path->num_children,
- path);
- }
- } else {
- mark_path_needs_resort(ets, parent_path, TRUE, FALSE);
- }
- parent_path->num_children ++;
- parent_path->children = g_renew(ETreeSortedPath *, parent_path->children, parent_path->num_children);
- memmove(parent_path->children + i + 1, parent_path->children + i, (parent_path->num_children - 1 - i) * sizeof(int));
- parent_path->children[i] = path;
- for (j = i; j < parent_path->num_children; j++) {
- parent_path->children[j]->position = j;
- }
- e_tree_model_node_inserted(E_TREE_MODEL(ets), parent_path, parent_path->children[i]);
- } else if (ets->priv->root == NULL && parent == NULL) {
- if (child) {
- ets->priv->root = new_path(NULL, child);
- e_tree_model_node_inserted(E_TREE_MODEL(ets), NULL, ets->priv->root);
- } else {
- e_tree_model_no_change(E_TREE_MODEL(ets));
- }
- } else {
- e_tree_model_no_change(E_TREE_MODEL(ets));
- }
-}
-
-static void
-ets_proxy_node_removed (ETreeModel *etm, ETreePath parent, ETreePath child, int old_position, ETreeSorted *ets)
-{
- ETreeSortedPath *parent_path = find_path(ets, parent);
- ETreeSortedPath *path;
-
- if (parent_path)
- path = find_child_path(ets, parent_path, child);
- else
- path = find_path(ets, child);
-
- d(g_print("Setting last access %p. (ets_proxy_node_removed)\n ", ets->priv->last_access));
- ets->priv->last_access = NULL;
-
- if (path && parent_path && parent_path->num_children != -1) {
- int i;
- for (i = 0; i < parent_path->num_children; i++) {
- if (parent_path->children[i]->orig_position > old_position)
- parent_path->children[i]->orig_position --;
- }
-
- i = path->position;
-
- parent_path->num_children --;
- memmove(parent_path->children + i, parent_path->children + i + 1, sizeof(ETreeSortedPath *) * (parent_path->num_children - i));
- for (; i < parent_path->num_children; i++) {
- parent_path->children[i]->position = i;
- }
- e_tree_model_node_removed(E_TREE_MODEL(ets), parent_path, path, path->position);
- free_path(path);
- } else if (path && path == ets->priv->root) {
- ets->priv->root = NULL;
- e_tree_model_node_removed(E_TREE_MODEL(ets), NULL, path, -1);
- free_path(path);
- }
-}
-
-static void
-ets_proxy_node_deleted (ETreeModel *etm, ETreePath child, ETreeSorted *ets)
-{
- e_tree_model_node_deleted(E_TREE_MODEL(ets), NULL);
-}
-
-static void
-ets_proxy_node_request_collapse (ETreeModel *etm, ETreePath node, ETreeSorted *ets)
-{
- ETreeSortedPath *path = find_path(ets, node);
- if (path) {
- e_tree_model_node_request_collapse(E_TREE_MODEL(ets), path);
- }
-}
-
-static void
-ets_sort_info_changed (ETableSortInfo *sort_info, ETreeSorted *ets)
-{
- schedule_resort(ets, ets->priv->root, TRUE, TRUE);
-}
-
-
-
-/* Initialization and creation */
-
-static void
-e_tree_sorted_class_init (ETreeSortedClass *klass)
-{
- ETreeModelClass *tree_class = E_TREE_MODEL_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- node_chunk = g_mem_chunk_create (ETreeSortedPath, TREEPATH_CHUNK_AREA_SIZE, G_ALLOC_AND_FREE);
-
- klass->node_resorted = NULL;
-
- object_class->dispose = ets_dispose;
- object_class->finalize = ets_finalize;
-
- tree_class->get_root = ets_get_root;
- tree_class->get_parent = ets_get_parent;
- tree_class->get_first_child = ets_get_first_child;
- tree_class->get_last_child = ets_get_last_child;
- tree_class->get_prev = ets_get_prev;
- tree_class->get_next = ets_get_next;
-
- tree_class->is_root = ets_is_root;
- tree_class->is_expandable = ets_is_expandable;
- tree_class->get_children = ets_get_children;
- tree_class->depth = ets_depth;
-
- tree_class->icon_at = ets_icon_at;
-
- tree_class->get_expanded_default = ets_get_expanded_default;
- tree_class->column_count = ets_column_count;
-
- tree_class->has_save_id = ets_has_save_id;
- tree_class->get_save_id = ets_get_save_id;
-
- tree_class->has_get_node_by_id = ets_has_get_node_by_id;
- tree_class->get_node_by_id = ets_get_node_by_id;
-
- tree_class->has_change_pending = ets_has_change_pending;
-
- tree_class->value_at = ets_value_at;
- tree_class->set_value_at = ets_set_value_at;
- tree_class->is_editable = ets_is_editable;
-
- tree_class->duplicate_value = ets_duplicate_value;
- tree_class->free_value = ets_free_value;
- tree_class->initialize_value = ets_initialize_value;
- tree_class->value_is_empty = ets_value_is_empty;
- tree_class->value_to_string = ets_value_to_string;
-
- signals [NODE_RESORTED] =
- g_signal_new ("node_resorted",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeSortedClass, node_resorted),
- (GSignalAccumulator) NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-}
-
-static void
-e_tree_sorted_init (GObject *object)
-{
- ETreeSorted *ets = (ETreeSorted *)object;
-
- ETreeSortedPriv *priv;
-
- priv = g_new0 (ETreeSortedPriv, 1);
- ets->priv = priv;
-
- priv->root = NULL;
- priv->source = NULL;
-
- priv->sort_info = NULL;
- priv->full_header = NULL;
-
- priv->last_access = NULL;
-
- priv->tree_model_pre_change_id = 0;
- priv->tree_model_no_change_id = 0;
- priv->tree_model_node_changed_id = 0;
- priv->tree_model_node_data_changed_id = 0;
- priv->tree_model_node_col_changed_id = 0;
- priv->tree_model_node_inserted_id = 0;
- priv->tree_model_node_removed_id = 0;
- priv->tree_model_node_deleted_id = 0;
- priv->tree_model_node_request_collapse_id = 0;
-
- priv->sort_info_changed_id = 0;
- priv->sort_idle_id = 0;
- priv->insert_idle_id = 0;
- priv->insert_count = 0;
-
- priv->in_resort_idle = 0;
- priv->nested_resort_idle = 0;
-}
-
-E_MAKE_TYPE(e_tree_sorted, "ETreeSorted", ETreeSorted, e_tree_sorted_class_init, e_tree_sorted_init, E_TREE_MODEL_TYPE)
-
-/**
- * e_tree_sorted_construct:
- * @etree:
- *
- *
- **/
-void
-e_tree_sorted_construct (ETreeSorted *ets, ETreeModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
-{
- ets->priv->source = source;
- if (source)
- g_object_ref(source);
-
- ets->priv->full_header = full_header;
- if (full_header)
- g_object_ref(full_header);
-
- e_tree_sorted_set_sort_info (ets, sort_info);
-
- ets->priv->tree_model_pre_change_id = g_signal_connect (G_OBJECT (source), "pre_change",
- G_CALLBACK (ets_proxy_pre_change), ets);
- ets->priv->tree_model_no_change_id = g_signal_connect (G_OBJECT (source), "no_change",
- G_CALLBACK (ets_proxy_no_change), ets);
- ets->priv->tree_model_node_changed_id = g_signal_connect (G_OBJECT (source), "node_changed",
- G_CALLBACK (ets_proxy_node_changed), ets);
- ets->priv->tree_model_node_data_changed_id = g_signal_connect (G_OBJECT (source), "node_data_changed",
- G_CALLBACK (ets_proxy_node_data_changed), ets);
- ets->priv->tree_model_node_col_changed_id = g_signal_connect (G_OBJECT (source), "node_col_changed",
- G_CALLBACK (ets_proxy_node_col_changed), ets);
- ets->priv->tree_model_node_inserted_id = g_signal_connect (G_OBJECT (source), "node_inserted",
- G_CALLBACK (ets_proxy_node_inserted), ets);
- ets->priv->tree_model_node_removed_id = g_signal_connect (G_OBJECT (source), "node_removed",
- G_CALLBACK (ets_proxy_node_removed), ets);
- ets->priv->tree_model_node_deleted_id = g_signal_connect (G_OBJECT (source), "node_deleted",
- G_CALLBACK (ets_proxy_node_deleted), ets);
- ets->priv->tree_model_node_request_collapse_id = g_signal_connect (G_OBJECT (source), "node_request_collapse",
- G_CALLBACK (ets_proxy_node_request_collapse), ets);
-
-}
-
-/**
- * e_tree_sorted_new
- *
- * FIXME docs here.
- *
- * return values: a newly constructed ETreeSorted.
- */
-ETreeSorted *
-e_tree_sorted_new (ETreeModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
-{
- ETreeSorted *ets = g_object_new (E_TREE_SORTED_TYPE, NULL);
-
- e_tree_sorted_construct(ets, source, full_header, sort_info);
-
- return ets;
-}
-
-ETreePath
-e_tree_sorted_view_to_model_path (ETreeSorted *ets,
- ETreePath view_path)
-{
- ETreeSortedPath *path = view_path;
- if (path) {
- ets->priv->last_access = path;
- d(g_print("Setting last access %p. (e_tree_sorted_view_to_model_path)\n", ets->priv->last_access));
- return path->corresponding;
- } else
- return NULL;
-}
-
-ETreePath
-e_tree_sorted_model_to_view_path (ETreeSorted *ets,
- ETreePath model_path)
-{
- return find_or_create_path(ets, model_path);
-}
-
-int
-e_tree_sorted_orig_position (ETreeSorted *ets,
- ETreePath path)
-{
- ETreeSortedPath *sorted_path = path;
- return sorted_path->orig_position;
-}
-
-int
-e_tree_sorted_node_num_children (ETreeSorted *ets,
- ETreePath path)
-{
- ETreeSortedPath *sorted_path = path;
-
- if (sorted_path->num_children == -1) {
- generate_children(ets, sorted_path);
- }
-
- return sorted_path->num_children;
-}
-
-void
-e_tree_sorted_node_resorted (ETreeSorted *sorted, ETreePath node)
-{
- g_return_if_fail (sorted != NULL);
- g_return_if_fail (E_IS_TREE_SORTED (sorted));
-
- g_signal_emit (G_OBJECT (sorted), signals [NODE_RESORTED], 0, node);
-}
-
-void
-e_tree_sorted_set_sort_info (ETreeSorted *ets, ETableSortInfo *sort_info)
-{
-
- g_return_if_fail (ets != NULL);
-
-
- if (ets->priv->sort_info) {
- if (ets->priv->sort_info_changed_id != 0)
- g_signal_handler_disconnect (G_OBJECT (ets->priv->sort_info),
- ets->priv->sort_info_changed_id);
- ets->priv->sort_info_changed_id = 0;
- g_object_unref (ets->priv->sort_info);
- }
-
- ets->priv->sort_info = sort_info;
- if (sort_info) {
- g_object_ref(sort_info);
- ets->priv->sort_info_changed_id = g_signal_connect (G_OBJECT (ets->priv->sort_info), "sort_info_changed",
- G_CALLBACK (ets_sort_info_changed), ets);
- }
-
- if (ets->priv->root)
- schedule_resort (ets, ets->priv->root, TRUE, TRUE);
-}
-
-ETableSortInfo*
-e_tree_sorted_get_sort_info (ETreeSorted *ets)
-{
- return ets->priv->sort_info;
-}
-
diff --git a/widgets/table/e-tree-sorted.h b/widgets/table/e-tree-sorted.h
deleted file mode 100644
index 41f123dc0b..0000000000
--- a/widgets/table/e-tree-sorted.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-sorted.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_SORTED_H_
-#define _E_TREE_SORTED_H_
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gal/e-table/e-tree-model.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-#define E_TREE_SORTED_TYPE (e_tree_sorted_get_type ())
-#define E_TREE_SORTED(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_SORTED_TYPE, ETreeSorted))
-#define E_TREE_SORTED_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_SORTED_TYPE, ETreeSortedClass))
-#define E_IS_TREE_SORTED(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_SORTED_TYPE))
-#define E_IS_TREE_SORTED_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_SORTED_TYPE))
-#define E_TREE_SORTED_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TREE_SORTED_TYPE, ETreeSortedClass))
-
-typedef struct ETreeSorted ETreeSorted;
-typedef struct ETreeSortedPriv ETreeSortedPriv;
-typedef struct ETreeSortedClass ETreeSortedClass;
-
-struct ETreeSorted {
- ETreeModel base;
-
- ETreeSortedPriv *priv;
-};
-
-struct ETreeSortedClass {
- ETreeModelClass parent_class;
-
- /* Signals */
- void (*node_resorted) (ETreeSorted *etm, ETreePath node);
-};
-
-
-GType e_tree_sorted_get_type (void);
-void e_tree_sorted_construct (ETreeSorted *etree,
- ETreeModel *source,
- ETableHeader *full_header,
- ETableSortInfo *sort_info);
-ETreeSorted *e_tree_sorted_new (ETreeModel *source,
- ETableHeader *full_header,
- ETableSortInfo *sort_info);
-
-ETreePath e_tree_sorted_view_to_model_path (ETreeSorted *ets,
- ETreePath view_path);
-ETreePath e_tree_sorted_model_to_view_path (ETreeSorted *ets,
- ETreePath model_path);
-int e_tree_sorted_orig_position (ETreeSorted *ets,
- ETreePath path);
-int e_tree_sorted_node_num_children (ETreeSorted *ets,
- ETreePath path);
-
-void e_tree_sorted_node_resorted (ETreeSorted *tree_model,
- ETreePath node);
-
-ETableSortInfo* e_tree_sorted_get_sort_info (ETreeSorted *tree_model);
-void e_tree_sorted_set_sort_info (ETreeSorted *tree_model,
- ETableSortInfo *sort_info);
-
-G_END_DECLS
-
-#endif /* _E_TREE_SORTED_H */
diff --git a/widgets/table/e-tree-table-adapter.c b/widgets/table/e-tree-table-adapter.c
deleted file mode 100644
index e1bda25eba..0000000000
--- a/widgets/table/e-tree-table-adapter.c
+++ /dev/null
@@ -1,1174 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-table-adapter.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include "gal/util/e-util.h"
-#include "gal/util/e-xml-utils.h"
-#include "e-tree-table-adapter.h"
-#include "e-table-sorting-utils.h"
-
-#define PARENT_TYPE E_TABLE_MODEL_TYPE
-#define d(x)
-
-#define INCREMENT_AMOUNT 100
-
-static ETableModelClass *parent_class;
-
-typedef struct {
- ETreePath path;
- guint32 num_visible_children;
- guint32 index;
-
- guint expanded : 1;
- guint expandable : 1;
- guint expandable_set : 1;
-} node_t;
-
-struct ETreeTableAdapterPriv {
- ETreeModel *source;
- ETableSortInfo *sort_info;
- ETableHeader *header;
-
- int n_map;
- int n_vals_allocated;
- node_t **map_table;
- GHashTable *nodes;
- GNode *root;
-
- guint root_visible : 1;
- guint remap_needed : 1;
-
- int last_access;
-
- int pre_change_id;
- int no_change_id;
- int node_changed_id;
- int node_data_changed_id;
- int node_col_changed_id;
- int node_inserted_id;
- int node_removed_id;
- int node_request_collapse_id;
- int sort_info_changed_id;
-};
-
-static GNode *
-lookup_gnode(ETreeTableAdapter *etta, ETreePath path)
-{
- GNode *gnode;
-
- if (!path)
- return NULL;
-
- gnode = g_hash_table_lookup(etta->priv->nodes, path);
-
- return gnode;
-}
-
-static void
-resize_map(ETreeTableAdapter *etta, int size)
-{
- if (size > etta->priv->n_vals_allocated) {
- etta->priv->n_vals_allocated = MAX(etta->priv->n_vals_allocated + INCREMENT_AMOUNT, size);
- etta->priv->map_table = g_renew (node_t *, etta->priv->map_table, etta->priv->n_vals_allocated);
- }
-
- etta->priv->n_map = size;
-}
-
-static void
-move_map_elements(ETreeTableAdapter *etta, int to, int from, int count)
-{
- if (count <= 0 || from >= etta->priv->n_map)
- return;
- memmove(etta->priv->map_table + to, etta->priv->map_table + from, count * sizeof (node_t *));
- etta->priv->remap_needed = TRUE;
-}
-
-static gint
-fill_map(ETreeTableAdapter *etta, gint index, GNode *gnode)
-{
- GNode *p;
-
- if ((gnode != etta->priv->root) || etta->priv->root_visible)
- etta->priv->map_table[index++] = gnode->data;
-
- for (p = gnode->children; p; p = p->next)
- index = fill_map(etta, index, p);
-
- etta->priv->remap_needed = TRUE;
- return index;
-}
-
-static void
-remap_indices(ETreeTableAdapter *etta)
-{
- int i;
- for (i = 0; i < etta->priv->n_map; i++)
- etta->priv->map_table[i]->index = i;
- etta->priv->remap_needed = FALSE;
-}
-
-static node_t *
-get_node(ETreeTableAdapter *etta, ETreePath path)
-{
- GNode *gnode = lookup_gnode(etta, path);
-
- if (!gnode)
- return NULL;
-
- return (node_t *)gnode->data;
-}
-
-static void
-resort_node(ETreeTableAdapter *etta, GNode *gnode, gboolean recurse)
-{
- node_t *node = (node_t *)gnode->data;
- ETreePath *paths, path;
- GNode *prev, *curr;
- int i, count;
- gboolean sort_needed;
-
- if (node->num_visible_children == 0)
- return;
-
- sort_needed = etta->priv->sort_info && e_table_sort_info_sorting_get_count (etta->priv->sort_info) > 0;
-
- for (i = 0, path = e_tree_model_node_get_first_child(etta->priv->source, node->path); path;
- path = e_tree_model_node_get_next(etta->priv->source, path), i++);
-
- count = i;
- if (count <= 1)
- return;
-
- paths = g_new0(ETreePath, count);
-
- for (i = 0, path = e_tree_model_node_get_first_child(etta->priv->source, node->path); path;
- path = e_tree_model_node_get_next(etta->priv->source, path), i++)
- paths[i] = path;
-
- if (count > 1 && sort_needed)
- e_table_sorting_utils_tree_sort(etta->priv->source, etta->priv->sort_info, etta->priv->header, paths, count);
-
- prev = NULL;
- for (i = 0; i < count; i++) {
- curr = lookup_gnode(etta, paths[i]);
- if (!curr)
- continue;
-
- if (prev)
- prev->next = curr;
- else
- gnode->children = curr;
-
- curr->prev = prev;
- curr->next = NULL;
- prev = curr;
- if (recurse)
- resort_node(etta, curr, recurse);
- }
-
- g_free(paths);
-}
-
-static gint
-get_row(ETreeTableAdapter *etta, ETreePath path)
-{
- node_t *node = get_node(etta, path);
- if (!node)
- return -1;
-
- if (etta->priv->remap_needed)
- remap_indices(etta);
-
- return node->index;
-}
-
-static ETreePath
-get_path (ETreeTableAdapter *etta, int row)
-{
- if (row == -1 && etta->priv->n_map > 0)
- row = etta->priv->n_map - 1;
- else if (row < 0 || row >= etta->priv->n_map)
- return NULL;
-
- return etta->priv->map_table [row]->path;
-}
-
-static void
-kill_gnode(GNode *node, ETreeTableAdapter *etta)
-{
- g_hash_table_remove(etta->priv->nodes, ((node_t *)node->data)->path);
-
- while (node->children) {
- GNode *next = node->children->next;
- kill_gnode(node->children, etta);
- node->children = next;
- }
-
- g_free(node->data);
- if (node == etta->priv->root)
- etta->priv->root = NULL;
- g_node_destroy(node);
-}
-
-static void
-update_child_counts(GNode *gnode, gint delta)
-{
- while (gnode) {
- node_t *node = (node_t *) gnode->data;
- node->num_visible_children += delta;
- gnode = gnode->parent;
- }
-}
-
-static int
-delete_children(ETreeTableAdapter *etta, GNode *gnode)
-{
- node_t *node = (node_t *)gnode->data;
- int to_remove = node ? node->num_visible_children : 0;
-
- if (to_remove == 0)
- return 0;
-
- while (gnode->children) {
- GNode *next = gnode->children->next;
- kill_gnode(gnode->children, etta);
- gnode->children = next;
- }
-
- return to_remove;
-}
-
-static void
-delete_node(ETreeTableAdapter *etta, ETreePath parent, ETreePath path)
-{
- int to_remove = 1;
- int parent_row = get_row(etta, parent);
- int row = get_row(etta, path);
- GNode *gnode = lookup_gnode(etta, path);
- GNode *parent_gnode = lookup_gnode(etta, parent);
-
- e_table_model_pre_change(E_TABLE_MODEL(etta));
-
- if (row == -1) {
- e_table_model_no_change(E_TABLE_MODEL(etta));
- return;
- }
-
- to_remove += delete_children(etta, gnode);
- kill_gnode(gnode, etta);
-
- move_map_elements(etta, row, row + to_remove, etta->priv->n_map - row - to_remove);
- resize_map(etta, etta->priv->n_map - to_remove);
-
- if (parent_gnode != NULL) {
- node_t *parent_node = parent_gnode->data;
- gboolean expandable = e_tree_model_node_is_expandable(etta->priv->source, parent);
-
- update_child_counts(parent_gnode, - to_remove);
- if (parent_node->expandable != expandable) {
- e_table_model_pre_change(E_TABLE_MODEL(etta));
- parent_node->expandable = expandable;
- e_table_model_row_changed(E_TABLE_MODEL(etta), parent_row);
- }
-
- resort_node (etta, parent_gnode, FALSE);
- }
-
- e_table_model_rows_deleted(E_TABLE_MODEL(etta), row, to_remove);
-}
-
-static GNode *
-create_gnode(ETreeTableAdapter *etta, ETreePath path)
-{
- GNode *gnode;
- node_t *node;
-
- node = g_new0(node_t, 1);
- node->path = path;
- node->index = -1;
- node->expanded = e_tree_model_get_expanded_default(etta->priv->source);
- node->expandable = e_tree_model_node_is_expandable(etta->priv->source, path);
- node->expandable_set = 1;
- node->num_visible_children = 0;
- gnode = g_node_new(node);
- g_hash_table_insert(etta->priv->nodes, path, gnode);
- return gnode;
-}
-
-static gint
-insert_children(ETreeTableAdapter *etta, GNode *gnode)
-{
- ETreePath path, tmp;
- int count = 0;
- int pos = 0;
-
- path = ((node_t *)gnode->data)->path;
- for (tmp = e_tree_model_node_get_first_child(etta->priv->source, path);
- tmp;
- tmp = e_tree_model_node_get_next(etta->priv->source, tmp), pos++) {
- GNode *child = create_gnode(etta, tmp);
- node_t *node = (node_t *) child->data;
- if (node->expanded)
- node->num_visible_children = insert_children(etta, child);
- g_node_prepend(gnode, child);
- count += node->num_visible_children + 1;
- }
- g_node_reverse_children(gnode);
- return count;
-}
-
-static void
-generate_tree(ETreeTableAdapter *etta, ETreePath path)
-{
- GNode *gnode;
- node_t *node;
- int size;
-
- e_table_model_pre_change(E_TABLE_MODEL(etta));
-
- g_assert(e_tree_model_node_is_root(etta->priv->source, path));
-
- if (etta->priv->root)
- kill_gnode(etta->priv->root, etta);
- resize_map(etta, 0);
-
- gnode = create_gnode(etta, path);
- node = (node_t *) gnode->data;
- node->expanded = TRUE;
- node->num_visible_children = insert_children(etta, gnode);
- if (etta->priv->sort_info && e_table_sort_info_sorting_get_count(etta->priv->sort_info) > 0)
- resort_node(etta, gnode, TRUE);
-
- etta->priv->root = gnode;
- size = etta->priv->root_visible ? node->num_visible_children + 1 : node->num_visible_children;
- resize_map(etta, size);
- fill_map(etta, 0, gnode);
- e_table_model_changed(E_TABLE_MODEL(etta));
-}
-
-static void
-insert_node(ETreeTableAdapter *etta, ETreePath parent, ETreePath path)
-{
- GNode *gnode, *parent_gnode;
- node_t *node, *parent_node;
- gboolean expandable;
- int size, row;
-
- e_table_model_pre_change(E_TABLE_MODEL(etta));
-
- if (get_node(etta, path)) {
- e_table_model_no_change(E_TABLE_MODEL(etta));
- return;
- }
-
- parent_gnode = lookup_gnode(etta, parent);
- if (!parent_gnode) {
- ETreePath grandparent = e_tree_model_node_get_parent(etta->priv->source, parent);
- if (e_tree_model_node_is_root(etta->priv->source, parent))
- generate_tree(etta, parent);
- else
- insert_node(etta, grandparent, parent);
- e_table_model_changed(E_TABLE_MODEL(etta));
- return;
- }
-
- parent_node = (node_t *) parent_gnode->data;
-
- if (parent_gnode != etta->priv->root) {
- expandable = e_tree_model_node_is_expandable(etta->priv->source, parent);
- if (parent_node->expandable != expandable) {
- e_table_model_pre_change(E_TABLE_MODEL(etta));
- parent_node->expandable = expandable;
- parent_node->expandable_set = 1;
- e_table_model_row_changed(E_TABLE_MODEL(etta), parent_node->index);
- }
- }
-
- if (!e_tree_table_adapter_node_is_expanded (etta, parent)) {
- e_table_model_no_change(E_TABLE_MODEL(etta));
- return;
- }
-
- gnode = create_gnode(etta, path);
- node = (node_t *) gnode->data;
-
- if (node->expanded)
- node->num_visible_children = insert_children(etta, gnode);
-
- g_node_append(parent_gnode, gnode);
- update_child_counts(parent_gnode, node->num_visible_children + 1);
- resort_node(etta, parent_gnode, FALSE);
- resort_node(etta, gnode, TRUE);
-
- size = node->num_visible_children + 1;
- resize_map(etta, etta->priv->n_map + size);
- if (parent_gnode == etta->priv->root)
- row = 0;
- else {
- gint new_size = parent_node->num_visible_children + 1;
- gint old_size = new_size - size;
- row = parent_node->index;
- move_map_elements(etta, row + new_size, row + old_size, etta->priv->n_map - row - new_size);
- }
- fill_map(etta, row, parent_gnode);
- e_table_model_rows_inserted(E_TABLE_MODEL(etta), get_row(etta, path), size);
-}
-
-typedef struct {
- GSList *paths;
- gboolean expanded;
-} check_expanded_closure;
-
-static gboolean
-check_expanded(GNode *gnode, gpointer data)
-{
- check_expanded_closure *closure = (check_expanded_closure *) data;
- node_t *node = (node_t *) gnode->data;
-
- if (node->expanded != closure->expanded)
- closure->paths = g_slist_prepend(closure->paths, node->path);
-
- return FALSE;
-}
-
-static void
-update_node(ETreeTableAdapter *etta, ETreePath path)
-{
- check_expanded_closure closure;
- ETreePath parent = e_tree_model_node_get_parent(etta->priv->source, path);
- GNode *gnode = lookup_gnode(etta, path);
- GSList *l;
-
- closure.expanded = e_tree_model_get_expanded_default (etta->priv->source);
- closure.paths = NULL;
-
- if (gnode)
- g_node_traverse(gnode, G_POST_ORDER, G_TRAVERSE_ALL, -1, check_expanded, &closure);
-
- if (e_tree_model_node_is_root(etta->priv->source, path))
- generate_tree(etta, path);
- else {
- delete_node(etta, parent, path);
- insert_node(etta, parent, path);
- }
-
- for (l = closure.paths; l; l = l->next)
- if (lookup_gnode(etta, l->data))
- e_tree_table_adapter_node_set_expanded (etta, l->data, !closure.expanded);
-
- g_slist_free(closure.paths);
-}
-
-static void
-etta_finalize (GObject *object)
-{
- ETreeTableAdapter *etta = E_TREE_TABLE_ADAPTER (object);
-
- if (etta->priv->root) {
- kill_gnode(etta->priv->root, etta);
- etta->priv->root = NULL;
- }
-
- g_hash_table_destroy (etta->priv->nodes);
-
- g_free (etta->priv->map_table);
-
- g_free (etta->priv);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-etta_dispose (GObject *object)
-{
- ETreeTableAdapter *etta = E_TREE_TABLE_ADAPTER (object);
-
- if (etta->priv->sort_info) {
- g_signal_handler_disconnect(G_OBJECT (etta->priv->sort_info),
- etta->priv->sort_info_changed_id);
- g_object_unref(etta->priv->sort_info);
- etta->priv->sort_info = NULL;
- }
-
- if (etta->priv->header) {
- g_object_unref(etta->priv->header);
- etta->priv->header = NULL;
- }
-
- if (etta->priv->source) {
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->pre_change_id);
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->no_change_id);
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->node_changed_id);
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->node_data_changed_id);
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->node_col_changed_id);
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->node_inserted_id);
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->node_removed_id);
- g_signal_handler_disconnect (G_OBJECT (etta->priv->source),
- etta->priv->node_request_collapse_id);
-
- g_object_unref (etta->priv->source);
- etta->priv->source = NULL;
- }
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static int
-etta_column_count (ETableModel *etm)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_column_count (etta->priv->source);
-}
-
-static gboolean
-etta_has_save_id (ETableModel *etm)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_has_save_id (etta->priv->source);
-}
-
-static gchar *
-etta_get_save_id (ETableModel *etm, int row)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_get_save_id (etta->priv->source, get_path(etta, row));
-}
-
-static gboolean
-etta_has_change_pending (ETableModel *etm)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_has_change_pending (etta->priv->source);
-}
-
-
-static int
-etta_row_count (ETableModel *etm)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return etta->priv->n_map;
-}
-
-static void *
-etta_value_at (ETableModel *etm, int col, int row)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- switch (col) {
- case -1:
- if (row == -1)
- return NULL;
- return get_path (etta, row);
- case -2:
- return etta->priv->source;
- case -3:
- return etta;
- default:
- return e_tree_model_value_at (etta->priv->source, get_path (etta, row), col);
- }
-}
-
-static void
-etta_set_value_at (ETableModel *etm, int col, int row, const void *val)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- e_tree_model_set_value_at (etta->priv->source, get_path (etta, row), col, val);
-}
-
-static gboolean
-etta_is_cell_editable (ETableModel *etm, int col, int row)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_node_is_editable (etta->priv->source, get_path (etta, row), col);
-}
-
-static void
-etta_append_row (ETableModel *etm, ETableModel *source, int row)
-{
-}
-
-static void *
-etta_duplicate_value (ETableModel *etm, int col, const void *value)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_duplicate_value (etta->priv->source, col, value);
-}
-
-static void
-etta_free_value (ETableModel *etm, int col, void *value)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- e_tree_model_free_value (etta->priv->source, col, value);
-}
-
-static void *
-etta_initialize_value (ETableModel *etm, int col)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_initialize_value (etta->priv->source, col);
-}
-
-static gboolean
-etta_value_is_empty (ETableModel *etm, int col, const void *value)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_value_is_empty (etta->priv->source, col, value);
-}
-
-static char *
-etta_value_to_string (ETableModel *etm, int col, const void *value)
-{
- ETreeTableAdapter *etta = (ETreeTableAdapter *)etm;
-
- return e_tree_model_value_to_string (etta->priv->source, col, value);
-}
-
-static void
-etta_class_init (ETreeTableAdapterClass *klass)
-{
- ETableModelClass *table_class = (ETableModelClass *) klass;
- GObjectClass *object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->dispose = etta_dispose;
- object_class->finalize = etta_finalize;
-
- table_class->column_count = etta_column_count;
- table_class->row_count = etta_row_count;
- table_class->append_row = etta_append_row;
-
- table_class->value_at = etta_value_at;
- table_class->set_value_at = etta_set_value_at;
- table_class->is_cell_editable = etta_is_cell_editable;
-
- table_class->has_save_id = etta_has_save_id;
- table_class->get_save_id = etta_get_save_id;
-
- table_class->has_change_pending = etta_has_change_pending;
- table_class->duplicate_value = etta_duplicate_value;
- table_class->free_value = etta_free_value;
- table_class->initialize_value = etta_initialize_value;
- table_class->value_is_empty = etta_value_is_empty;
- table_class->value_to_string = etta_value_to_string;
-}
-
-static void
-etta_init (ETreeTableAdapter *etta)
-{
- etta->priv = g_new(ETreeTableAdapterPriv, 1);
-
- etta->priv->source = NULL;
- etta->priv->sort_info = NULL;
-
- etta->priv->n_map = 0;
- etta->priv->n_vals_allocated = 0;
- etta->priv->map_table = NULL;
- etta->priv->nodes = NULL;
- etta->priv->root = NULL;
-
- etta->priv->root_visible = TRUE;
- etta->priv->remap_needed = TRUE;
-
- etta->priv->pre_change_id = 0;
- etta->priv->no_change_id = 0;
- etta->priv->node_changed_id = 0;
- etta->priv->node_data_changed_id = 0;
- etta->priv->node_col_changed_id = 0;
- etta->priv->node_inserted_id = 0;
- etta->priv->node_removed_id = 0;
- etta->priv->node_request_collapse_id = 0;
-}
-
-E_MAKE_TYPE(e_tree_table_adapter, "ETreeTableAdapter", ETreeTableAdapter, etta_class_init, etta_init, PARENT_TYPE)
-
-static void
-etta_proxy_pre_change (ETreeModel *etm, ETreeTableAdapter *etta)
-{
- e_table_model_pre_change(E_TABLE_MODEL(etta));
-}
-
-static void
-etta_proxy_no_change (ETreeModel *etm, ETreeTableAdapter *etta)
-{
- e_table_model_no_change(E_TABLE_MODEL(etta));
-}
-
-static void
-etta_proxy_node_changed (ETreeModel *etm, ETreePath path, ETreeTableAdapter *etta)
-{
- update_node(etta, path);
-
- e_table_model_changed(E_TABLE_MODEL(etta));
-}
-
-static void
-etta_proxy_node_data_changed (ETreeModel *etm, ETreePath path, ETreeTableAdapter *etta)
-{
- int row = get_row(etta, path);
-
- if (row == -1) {
- e_table_model_no_change(E_TABLE_MODEL(etta));
- return;
- }
-
- e_table_model_row_changed(E_TABLE_MODEL(etta), row);
-}
-
-static void
-etta_proxy_node_col_changed (ETreeModel *etm, ETreePath path, int col, ETreeTableAdapter *etta)
-{
- int row = get_row(etta, path);
-
- if (row == -1) {
- e_table_model_no_change(E_TABLE_MODEL(etta));
- return;
- }
-
- e_table_model_cell_changed(E_TABLE_MODEL(etta), col, row);
-}
-
-static void
-etta_proxy_node_inserted (ETreeModel *etm, ETreePath parent, ETreePath child, ETreeTableAdapter *etta)
-{
- if (e_tree_model_node_is_root(etm, child))
- generate_tree(etta, child);
- else
- insert_node(etta, parent, child);
-
- e_table_model_changed(E_TABLE_MODEL(etta));
-}
-
-static void
-etta_proxy_node_removed (ETreeModel *etm, ETreePath parent, ETreePath child, int old_position, ETreeTableAdapter *etta)
-{
- delete_node(etta, parent, child);
- e_table_model_changed(E_TABLE_MODEL(etta));
-}
-
-static void
-etta_proxy_node_request_collapse (ETreeModel *etm, ETreePath node, ETreeTableAdapter *etta)
-{
- e_tree_table_adapter_node_set_expanded(etta, node, FALSE);
-}
-
-static void
-etta_sort_info_changed (ETableSortInfo *sort_info, ETreeTableAdapter *etta)
-{
- if (!etta->priv->root)
- return;
-
- e_table_model_pre_change(E_TABLE_MODEL(etta));
- resort_node(etta, etta->priv->root, TRUE);
- fill_map(etta, 0, etta->priv->root);
- e_table_model_changed(E_TABLE_MODEL(etta));
-}
-
-ETableModel *
-e_tree_table_adapter_construct (ETreeTableAdapter *etta, ETreeModel *source, ETableSortInfo *sort_info, ETableHeader *header)
-{
- ETreePath root;
-
- etta->priv->source = source;
- g_object_ref (source);
-
- etta->priv->sort_info = sort_info;
- if (sort_info) {
- g_object_ref(sort_info);
- etta->priv->sort_info_changed_id = g_signal_connect (G_OBJECT (sort_info), "sort_info_changed",
- G_CALLBACK (etta_sort_info_changed), etta);
- }
-
- etta->priv->header = header;
- if (header)
- g_object_ref(header);
-
- etta->priv->nodes = g_hash_table_new(NULL, NULL);
-
- root = e_tree_model_get_root (source);
-
- if (root)
- generate_tree(etta, root);
-
- etta->priv->pre_change_id = g_signal_connect(G_OBJECT(source), "pre_change",
- G_CALLBACK (etta_proxy_pre_change), etta);
- etta->priv->no_change_id = g_signal_connect (G_OBJECT (source), "no_change",
- G_CALLBACK (etta_proxy_no_change), etta);
- etta->priv->node_changed_id = g_signal_connect (G_OBJECT (source), "node_changed",
- G_CALLBACK (etta_proxy_node_changed), etta);
- etta->priv->node_data_changed_id = g_signal_connect (G_OBJECT (source), "node_data_changed",
- G_CALLBACK (etta_proxy_node_data_changed), etta);
- etta->priv->node_col_changed_id = g_signal_connect (G_OBJECT (source), "node_col_changed",
- G_CALLBACK (etta_proxy_node_col_changed), etta);
- etta->priv->node_inserted_id = g_signal_connect (G_OBJECT (source), "node_inserted",
- G_CALLBACK (etta_proxy_node_inserted), etta);
- etta->priv->node_removed_id = g_signal_connect (G_OBJECT (source), "node_removed",
- G_CALLBACK (etta_proxy_node_removed), etta);
- etta->priv->node_request_collapse_id = g_signal_connect (G_OBJECT (source), "node_request_collapse",
- G_CALLBACK (etta_proxy_node_request_collapse), etta);
-
- return E_TABLE_MODEL (etta);
-}
-
-ETableModel *
-e_tree_table_adapter_new (ETreeModel *source, ETableSortInfo *sort_info, ETableHeader *header)
-{
- ETreeTableAdapter *etta = g_object_new (E_TREE_TABLE_ADAPTER_TYPE, NULL);
-
- e_tree_table_adapter_construct (etta, source, sort_info, header);
-
- return (ETableModel *) etta;
-}
-
-typedef struct {
- xmlNode *root;
- gboolean expanded_default;
- ETreeModel *model;
-} TreeAndRoot;
-
-static void
-save_expanded_state_func (gpointer keyp, gpointer value, gpointer data)
-{
- ETreePath path = keyp;
- node_t *node = ((GNode *)value)->data;
- TreeAndRoot *tar = data;
- xmlNode *xmlnode;
-
- if (node->expanded != tar->expanded_default) {
- gchar *save_id = e_tree_model_get_save_id(tar->model, path);
- xmlnode = xmlNewChild (tar->root, NULL, "node", NULL);
- e_xml_set_string_prop_by_name(xmlnode, "id", save_id);
- g_free(save_id);
- }
-}
-
-void
-e_tree_table_adapter_save_expanded_state (ETreeTableAdapter *etta, const char *filename)
-{
- TreeAndRoot tar;
- xmlDocPtr doc;
- xmlNode *root;
-
- g_return_if_fail(etta != NULL);
-
- doc = xmlNewDoc ("1.0");
- root = xmlNewDocNode (doc, NULL, (xmlChar *) "expanded_state", NULL);
- xmlDocSetRootElement (doc, root);
-
- tar.model = etta->priv->source;
- tar.root = root;
- tar.expanded_default = e_tree_model_get_expanded_default(etta->priv->source);
-
- e_xml_set_integer_prop_by_name (root, "vers", 2);
- e_xml_set_bool_prop_by_name (root, "default", tar.expanded_default);
-
- g_hash_table_foreach (etta->priv->nodes, save_expanded_state_func, &tar);
-
- e_xml_save_file (filename, doc);
- xmlFreeDoc (doc);
-}
-
-static xmlDoc *
-open_file (ETreeTableAdapter *etta, const char *filename)
-{
- xmlDoc *doc;
- xmlNode *root;
- int vers;
- gboolean model_default, saved_default;
-
- if (!g_file_test (filename, G_FILE_TEST_EXISTS))
- return NULL;
-
- doc = xmlParseFile (filename);
- if (!doc)
- return NULL;
-
- root = xmlDocGetRootElement (doc);
- if (root == NULL || strcmp (root->name, "expanded_state")) {
- xmlFreeDoc (doc);
- return NULL;
- }
-
- vers = e_xml_get_integer_prop_by_name_with_default (root, "vers", 0);
- if (vers > 2) {
- xmlFreeDoc (doc);
- return NULL;
- }
- model_default = e_tree_model_get_expanded_default (etta->priv->source);
- saved_default = e_xml_get_bool_prop_by_name_with_default (root, "default", !model_default);
- if (saved_default != model_default) {
- xmlFreeDoc (doc);
- return NULL;
- }
-
- return doc;
-}
-
-void
-e_tree_table_adapter_load_expanded_state (ETreeTableAdapter *etta, const char *filename)
-{
- xmlDoc *doc;
- xmlNode *root, *child;
- gboolean model_default;
-
- g_return_if_fail(etta != NULL);
-
- doc = open_file(etta, filename);
- if (!doc)
- return;
-
- root = xmlDocGetRootElement (doc);
-
- e_table_model_pre_change(E_TABLE_MODEL(etta));
-
- model_default = e_tree_model_get_expanded_default(etta->priv->source);
-
- for (child = root->xmlChildrenNode; child; child = child->next) {
- char *id;
- ETreePath path;
-
- if (strcmp (child->name, "node")) {
- d(g_warning ("unknown node '%s' in %s", child->name, filename));
- continue;
- }
-
- id = e_xml_get_string_prop_by_name_with_default (child, "id", "");
-
- if (!strcmp(id, "")) {
- g_free(id);
- continue;
- }
-
- path = e_tree_model_get_node_by_id(etta->priv->source, id);
- if (path)
- e_tree_table_adapter_node_set_expanded(etta, path, !model_default);
-
- g_free (id);
- }
-
- xmlFreeDoc (doc);
-
- e_table_model_changed (E_TABLE_MODEL (etta));
-}
-
-void
-e_tree_table_adapter_root_node_set_visible (ETreeTableAdapter *etta, gboolean visible)
-{
- int size;
-
- if (etta->priv->root_visible == visible)
- return;
-
- e_table_model_pre_change (E_TABLE_MODEL(etta));
-
- etta->priv->root_visible = visible;
- if (!visible) {
- ETreePath root = e_tree_model_get_root(etta->priv->source);
- if (root)
- e_tree_table_adapter_node_set_expanded(etta, root, TRUE);
- }
- size = (visible ? 1 : 0) + (etta->priv->root ? ((node_t *)etta->priv->root->data)->num_visible_children : 0);
- resize_map(etta, size);
- if (etta->priv->root)
- fill_map(etta, 0, etta->priv->root);
- e_table_model_changed(E_TABLE_MODEL(etta));
-}
-
-void
-e_tree_table_adapter_node_set_expanded (ETreeTableAdapter *etta, ETreePath path, gboolean expanded)
-{
- GNode *gnode = lookup_gnode(etta, path);
- node_t *node;
- int row;
-
- if (!expanded && (!gnode || (e_tree_model_node_is_root (etta->priv->source, path) && !etta->priv->root_visible)))
- return;
-
- if (!gnode && expanded) {
- ETreePath parent = e_tree_model_node_get_parent(etta->priv->source, path);
- g_return_if_fail(parent != NULL);
- e_tree_table_adapter_node_set_expanded(etta, parent, expanded);
- gnode = lookup_gnode(etta, path);
- }
- g_return_if_fail(gnode != NULL);
-
- node = (node_t *) gnode->data;
-
- if (expanded == node->expanded)
- return;
-
- node->expanded = expanded;
-
- row = get_row(etta, path);
- if (row == -1)
- return;
-
- e_table_model_pre_change (E_TABLE_MODEL(etta));
- e_table_model_pre_change (E_TABLE_MODEL(etta));
- e_table_model_row_changed(E_TABLE_MODEL(etta), row);
-
-
- if (expanded) {
- int num_children = insert_children(etta, gnode);
- update_child_counts(gnode, num_children);
- if (etta->priv->sort_info && e_table_sort_info_sorting_get_count(etta->priv->sort_info) > 0)
- resort_node(etta, gnode, TRUE);
- resize_map(etta, etta->priv->n_map + num_children);
- move_map_elements(etta, row + 1 + num_children, row + 1, etta->priv->n_map - row - 1 - num_children);
- fill_map(etta, row, gnode);
- if (num_children != 0) {
- e_table_model_rows_inserted(E_TABLE_MODEL(etta), row + 1, num_children);
- } else
- e_table_model_no_change(E_TABLE_MODEL(etta));
- } else {
- int num_children = delete_children(etta, gnode);
- if (num_children == 0) {
- e_table_model_no_change(E_TABLE_MODEL(etta));
- return;
- }
- move_map_elements(etta, row + 1, row + 1 + num_children, etta->priv->n_map - row - 1 - num_children);
- update_child_counts(gnode, - num_children);
- resize_map(etta, etta->priv->n_map - num_children);
- e_table_model_rows_deleted(E_TABLE_MODEL(etta), row + 1, num_children);
- }
-}
-
-void
-e_tree_table_adapter_node_set_expanded_recurse (ETreeTableAdapter *etta, ETreePath path, gboolean expanded)
-{
- ETreePath children;
-
- e_tree_table_adapter_node_set_expanded(etta, path, expanded);
-
- for (children = e_tree_model_node_get_first_child(etta->priv->source, path);
- children;
- children = e_tree_model_node_get_next(etta->priv->source, children)) {
- e_tree_table_adapter_node_set_expanded_recurse(etta, children, expanded);
- }
-}
-
-ETreePath
-e_tree_table_adapter_node_at_row (ETreeTableAdapter *etta, int row)
-{
- return get_path(etta, row);
-}
-
-int
-e_tree_table_adapter_row_of_node (ETreeTableAdapter *etta, ETreePath path)
-{
- return get_row(etta, path);
-}
-
-gboolean
-e_tree_table_adapter_root_node_is_visible(ETreeTableAdapter *etta)
-{
- return etta->priv->root_visible;
-}
-
-void
-e_tree_table_adapter_show_node (ETreeTableAdapter *etta, ETreePath path)
-{
- ETreePath parent;
-
- parent = e_tree_model_node_get_parent(etta->priv->source, path);
-
- while (parent) {
- e_tree_table_adapter_node_set_expanded(etta, parent, TRUE);
- parent = e_tree_model_node_get_parent(etta->priv->source, parent);
- }
-}
-
-gboolean
-e_tree_table_adapter_node_is_expanded (ETreeTableAdapter *etta, ETreePath path)
-{
- node_t *node = get_node(etta, path);
- if (!e_tree_model_node_is_expandable (etta->priv->source, path) || !node)
- return FALSE;
-
- return node->expanded;
-}
-
-void
-e_tree_table_adapter_set_sort_info (ETreeTableAdapter *etta, ETableSortInfo *sort_info)
-{
- if (etta->priv->sort_info) {
- g_signal_handler_disconnect(G_OBJECT(etta->priv->sort_info),
- etta->priv->sort_info_changed_id);
- g_object_unref(etta->priv->sort_info);
- }
-
- etta->priv->sort_info = sort_info;
- if (sort_info) {
- g_object_ref(sort_info);
- etta->priv->sort_info_changed_id = g_signal_connect(G_OBJECT(sort_info), "sort_info_changed",
- G_CALLBACK(etta_sort_info_changed), etta);
- }
-
- if (!etta->priv->root)
- return;
-
- e_table_model_pre_change(E_TABLE_MODEL(etta));
- resort_node(etta, etta->priv->root, TRUE);
- fill_map(etta, 0, etta->priv->root);
- e_table_model_changed(E_TABLE_MODEL(etta));
-}
-
-ETreePath
-e_tree_table_adapter_node_get_next (ETreeTableAdapter *etta, ETreePath path)
-{
- GNode *node = lookup_gnode (etta, path);
-
- if (node && node->next)
- return ((node_t *)node->next->data)->path;
-
- return NULL;
-}
diff --git a/widgets/table/e-tree-table-adapter.h b/widgets/table/e-tree-table-adapter.h
deleted file mode 100644
index 8ce1c78097..0000000000
--- a/widgets/table/e-tree-table-adapter.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree-table-adapter.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_TABLE_ADAPTER_H_
-#define _E_TREE_TABLE_ADAPTER_H_
-
-#include <glib-object.h>
-#include <gal/e-table/e-table-model.h>
-#include <gal/e-table/e-tree-model.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-header.h>
-
-G_BEGIN_DECLS
-
-#define E_TREE_TABLE_ADAPTER_TYPE (e_tree_table_adapter_get_type ())
-#define E_TREE_TABLE_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_TABLE_ADAPTER_TYPE, ETreeTableAdapter))
-#define E_TREE_TABLE_ADAPTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_TABLE_ADAPTER_TYPE, ETreeTableAdapterClass))
-#define E_IS_TREE_TABLE_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_TABLE_ADAPTER_TYPE))
-#define E_IS_TREE_TABLE_ADAPTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_TABLE_ADAPTER_TYPE))
-#define E_TREE_TABLE_ADAPTER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TREE_TABLE_ADAPTER_TYPE, ETreeTableAdapterClass))
-
-typedef struct ETreeTableAdapterPriv ETreeTableAdapterPriv;
-
-typedef struct {
- ETableModel base;
-
- ETreeTableAdapterPriv *priv;
-} ETreeTableAdapter;
-
-typedef struct {
- ETableModelClass parent_class;
-} ETreeTableAdapterClass;
-
-GType e_tree_table_adapter_get_type (void);
-ETableModel *e_tree_table_adapter_new (ETreeModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *header);
-ETableModel *e_tree_table_adapter_construct (ETreeTableAdapter *ets,
- ETreeModel *source,
- ETableSortInfo *sort_info,
- ETableHeader *header);
-
-ETreePath e_tree_table_adapter_node_get_next (ETreeTableAdapter *etta,
- ETreePath path);
-gboolean e_tree_table_adapter_node_is_expanded (ETreeTableAdapter *etta,
- ETreePath path);
-void e_tree_table_adapter_node_set_expanded (ETreeTableAdapter *etta,
- ETreePath path,
- gboolean expanded);
-void e_tree_table_adapter_node_set_expanded_recurse (ETreeTableAdapter *etta,
- ETreePath path,
- gboolean expanded);
-void e_tree_table_adapter_root_node_set_visible (ETreeTableAdapter *etta,
- gboolean visible);
-ETreePath e_tree_table_adapter_node_at_row (ETreeTableAdapter *etta,
- int row);
-int e_tree_table_adapter_row_of_node (ETreeTableAdapter *etta,
- ETreePath path);
-gboolean e_tree_table_adapter_root_node_is_visible (ETreeTableAdapter *etta);
-
-void e_tree_table_adapter_show_node (ETreeTableAdapter *etta,
- ETreePath path);
-
-void e_tree_table_adapter_save_expanded_state (ETreeTableAdapter *etta,
- const char *filename);
-void e_tree_table_adapter_load_expanded_state (ETreeTableAdapter *etta,
- const char *filename);
-
-void e_tree_table_adapter_set_sort_info (ETreeTableAdapter *etta,
- ETableSortInfo *sort_info);
-
-G_END_DECLS
-
-#endif /* _E_TREE_TABLE_ADAPTER_H_ */
diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c
deleted file mode 100644
index 83fe8ad9a6..0000000000
--- a/widgets/table/e-tree.c
+++ /dev/null
@@ -1,3327 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdio.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtksignal.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include <atk/atkregistry.h>
-
-#include <gal/util/e-i18n.h>
-#include <gal/util/e-util.h>
-#include <gal/util/e-marshal.h>
-#include <gal/widgets/e-canvas.h>
-#include <gal/widgets/e-canvas-background.h>
-
-#include <gal/e-table/e-table-column-specification.h>
-#include <gal/e-table/e-table-header-item.h>
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-table-sort-info.h>
-#include <gal/e-table/e-table-utils.h>
-
-#ifdef E_TREE_USE_TREE_SELECTION
-#include <gal/e-table/e-tree-selection-model.h>
-#else
-#include <gal/e-table/e-table-selection-model.h>
-#endif
-
-#include <gal/e-table/e-tree-table-adapter.h>
-
-#include "e-tree.h"
-#include "gal/util/e-marshal.h"
-#include "gal/a11y/e-table/gal-a11y-e-tree-factory.h"
-
-#define COLUMN_HEADER_HEIGHT 16
-
-#define PARENT_TYPE gtk_table_get_type ()
-
-static GtkObjectClass *parent_class;
-
-#define d(x)
-
-#if d(!)0
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)), g_print ("%s: e_table_item_leave_edit\n", __FUNCTION__))
-#else
-#define e_table_item_leave_edit_(x) (e_table_item_leave_edit((x)))
-#endif
-
-enum {
- CURSOR_CHANGE,
- CURSOR_ACTIVATED,
- SELECTION_CHANGE,
- DOUBLE_CLICK,
- RIGHT_CLICK,
- CLICK,
- KEY_PRESS,
- START_DRAG,
- STATE_CHANGE,
- WHITE_SPACE_EVENT,
-
- TREE_DRAG_BEGIN,
- TREE_DRAG_END,
- TREE_DRAG_DATA_GET,
- TREE_DRAG_DATA_DELETE,
-
- TREE_DRAG_LEAVE,
- TREE_DRAG_MOTION,
- TREE_DRAG_DROP,
- TREE_DRAG_DATA_RECEIVED,
-
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_LENGTH_THRESHOLD,
- PROP_HORIZONTAL_DRAW_GRID,
- PROP_VERTICAL_DRAW_GRID,
- PROP_DRAW_FOCUS,
- PROP_ETTA,
- PROP_UNIFORM_ROW_HEIGHT,
- PROP_ALWAYS_SEARCH
-};
-
-enum {
- ET_SCROLL_UP = 1 << 0,
- ET_SCROLL_DOWN = 1 << 1,
- ET_SCROLL_LEFT = 1 << 2,
- ET_SCROLL_RIGHT = 1 << 3
-};
-
-struct ETreePriv {
- ETreeModel *model;
- ETreeTableAdapter *etta;
-
- ETableHeader *full_header, *header;
-
- guint structure_change_id, expansion_change_id;
-
- ETableSortInfo *sort_info;
- ESorter *sorter;
-
- guint sort_info_change_id, group_info_change_id;
-
- ESelectionModel *selection;
- ETableSpecification *spec;
-
- ETableSearch *search;
-
- ETableCol *current_search_col;
-
- guint search_search_id;
- guint search_accept_id;
-
- int reflow_idle_id;
- int scroll_idle_id;
- int hover_idle_id;
-
- int table_model_change_id;
- int table_row_change_id;
- int table_cell_change_id;
-
- GnomeCanvas *header_canvas, *table_canvas;
-
- GnomeCanvasItem *header_item, *root;
-
- GnomeCanvasItem *white_item;
- GnomeCanvasItem *item;
-
- gint length_threshold;
-
- /*
- * Configuration settings
- */
- guint alternating_row_colors : 1;
- guint horizontal_draw_grid : 1;
- guint vertical_draw_grid : 1;
- guint draw_focus : 1;
- guint row_selection_active : 1;
-
- guint horizontal_scrolling : 1;
-
- guint scroll_direction : 4;
-
- guint do_drag : 1;
-
- guint uniform_row_height : 1;
-
- guint search_col_set : 1;
- guint always_search : 1;
-
- ECursorMode cursor_mode;
-
- int drop_row;
- ETreePath drop_path;
- int drop_col;
-
- GnomeCanvasItem *drop_highlight;
- int last_drop_x;
- int last_drop_y;
- int last_drop_time;
- GdkDragContext *last_drop_context;
-
- int hover_x;
- int hover_y;
-
- int drag_row;
- ETreePath drag_path;
- int drag_col;
- ETreeDragSourceSite *site;
-
- GList *expanded_list;
-};
-
-static guint et_signals [LAST_SIGNAL] = { 0, };
-
-static void et_grab_focus (GtkWidget *widget);
-
-static void et_drag_begin (GtkWidget *widget,
- GdkDragContext *context,
- ETree *et);
-static void et_drag_end (GtkWidget *widget,
- GdkDragContext *context,
- ETree *et);
-static void et_drag_data_get(GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETree *et);
-static void et_drag_data_delete(GtkWidget *widget,
- GdkDragContext *context,
- ETree *et);
-
-static void et_drag_leave(GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- ETree *et);
-static gboolean et_drag_motion(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETree *et);
-static gboolean et_drag_drop(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETree *et);
-static void et_drag_data_received(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETree *et);
-
-
-static void scroll_off (ETree *et);
-static void scroll_on (ETree *et, guint scroll_direction);
-static void hover_off (ETree *et);
-static void hover_on (ETree *et, int x, int y);
-static void context_destroyed (gpointer data, GObject *ctx);
-
-static void
-et_disconnect_from_etta (ETree *et)
-{
- if (et->priv->table_model_change_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->priv->etta),
- et->priv->table_model_change_id);
- if (et->priv->table_row_change_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->priv->etta),
- et->priv->table_row_change_id);
- if (et->priv->table_cell_change_id != 0)
- g_signal_handler_disconnect (G_OBJECT (et->priv->etta),
- et->priv->table_cell_change_id);
-
- et->priv->table_model_change_id = 0;
- et->priv->table_row_change_id = 0;
- et->priv->table_cell_change_id = 0;
-}
-
-static void
-clear_current_search_col (ETree *et)
-{
- et->priv->search_col_set = FALSE;
-}
-
-static ETableCol *
-current_search_col (ETree *et)
-{
- if (!et->priv->search_col_set) {
- et->priv->current_search_col =
- e_table_util_calculate_current_search_col (et->priv->header,
- et->priv->full_header,
- et->priv->sort_info,
- et->priv->always_search);
- et->priv->search_col_set = TRUE;
- }
-
- return et->priv->current_search_col;
-}
-
-static void
-e_tree_state_change (ETree *et)
-{
- g_signal_emit (G_OBJECT (et), et_signals [STATE_CHANGE], 0);
-}
-
-static void
-change_trigger (GtkObject *object, ETree *et)
-{
- e_tree_state_change (et);
-}
-
-static void
-search_col_change_trigger (GtkObject *object, ETree *et)
-{
- clear_current_search_col (et);
- e_tree_state_change (et);
-}
-
-static void
-disconnect_header (ETree *e_tree)
-{
- if (e_tree->priv->header == NULL)
- return;
-
- if (e_tree->priv->structure_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_tree->priv->header),
- e_tree->priv->structure_change_id);
- if (e_tree->priv->expansion_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_tree->priv->header),
- e_tree->priv->expansion_change_id);
- if (e_tree->priv->sort_info) {
- if (e_tree->priv->sort_info_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_tree->priv->sort_info),
- e_tree->priv->sort_info_change_id);
- if (e_tree->priv->group_info_change_id)
- g_signal_handler_disconnect (G_OBJECT (e_tree->priv->sort_info),
- e_tree->priv->group_info_change_id);
-
- g_object_unref(e_tree->priv->sort_info);
- }
- g_object_unref(e_tree->priv->header);
- e_tree->priv->header = NULL;
- e_tree->priv->sort_info = NULL;
-}
-
-static void
-connect_header (ETree *e_tree, ETableState *state)
-{
- GValue *val = g_new0 (GValue, 1);
-
- if (e_tree->priv->header != NULL)
- disconnect_header (e_tree);
-
- e_tree->priv->header = e_table_state_to_header (GTK_WIDGET(e_tree), e_tree->priv->full_header, state);
-
- e_tree->priv->structure_change_id =
- g_signal_connect (G_OBJECT (e_tree->priv->header), "structure_change",
- G_CALLBACK (search_col_change_trigger), e_tree);
- e_tree->priv->expansion_change_id =
- g_signal_connect (G_OBJECT (e_tree->priv->header), "expansion_change",
- G_CALLBACK (change_trigger), e_tree);
-
- if (state->sort_info) {
- e_tree->priv->sort_info = e_table_sort_info_duplicate(state->sort_info);
- e_table_sort_info_set_can_group (e_tree->priv->sort_info, FALSE);
- e_tree->priv->sort_info_change_id =
- g_signal_connect (G_OBJECT (e_tree->priv->sort_info), "sort_info_changed",
- G_CALLBACK (search_col_change_trigger), e_tree);
- e_tree->priv->group_info_change_id =
- g_signal_connect (G_OBJECT (e_tree->priv->sort_info), "group_info_changed",
- G_CALLBACK (search_col_change_trigger), e_tree);
- } else
- e_tree->priv->sort_info = NULL;
-
- g_value_init (val, G_TYPE_OBJECT);
- g_value_set_object (val, e_tree->priv->sort_info);
- g_object_set_property (G_OBJECT(e_tree->priv->header), "sort_info", val);
- g_free (val);
-}
-
-static void
-et_dispose (GObject *object)
-{
- ETree *et = E_TREE (object);
-
- if (et->priv) {
-
- if (et->priv->search) {
- if (et->priv->search_search_id)
- g_signal_handler_disconnect (et->priv->search,
- et->priv->search_search_id);
- if (et->priv->search_accept_id)
- g_signal_handler_disconnect (et->priv->search,
- et->priv->search_accept_id);
- g_object_unref (et->priv->search);
- }
-
- if (et->priv->reflow_idle_id)
- g_source_remove(et->priv->reflow_idle_id);
- et->priv->reflow_idle_id = 0;
-
- scroll_off (et);
- hover_off (et);
- e_free_string_list (et->priv->expanded_list);
-
- et_disconnect_from_etta (et);
-
- g_object_unref (et->priv->etta);
- g_object_unref (et->priv->model);
- g_object_unref (et->priv->full_header);
- disconnect_header (et);
- g_object_unref (et->priv->selection);
- if (et->priv->spec)
- g_object_unref (et->priv->spec);
- et->priv->spec = NULL;
-
- if (et->priv->sorter)
- g_object_unref (et->priv->sorter);
- et->priv->sorter = NULL;
-
- if (et->priv->header_canvas)
- gtk_widget_destroy (GTK_WIDGET (et->priv->header_canvas));
- et->priv->header_canvas = NULL;
-
- if (et->priv->site)
- e_tree_drag_source_unset (et);
-
- if (et->priv->last_drop_context)
- g_object_weak_unref (G_OBJECT(et->priv->last_drop_context), context_destroyed, et);
- et->priv->last_drop_context = NULL;
-
- gtk_widget_destroy (GTK_WIDGET (et->priv->table_canvas));
-
- g_free(et->priv);
- et->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-et_unrealize (GtkWidget *widget)
-{
- scroll_off (E_TREE (widget));
- hover_off (E_TREE (widget));
-
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
-}
-
-typedef struct {
- ETree *et;
- char *string;
-} SearchSearchStruct;
-
-static gboolean
-search_search_callback (ETreeModel *model, ETreePath path, gpointer data)
-{
- SearchSearchStruct *cb_data = data;
- const void *value;
- ETableCol *col = current_search_col (cb_data->et);
-
- value = e_tree_model_value_at (model, path, cb_data->et->priv->current_search_col->col_idx);
-
- return col->search (value, cb_data->string);
-}
-
-static gboolean
-et_search_search (ETableSearch *search, char *string, ETableSearchFlags flags, ETree *et)
-{
- ETreePath cursor;
- ETreePath found;
- SearchSearchStruct cb_data;
- ETableCol *col = current_search_col (et);
-
- if (col == NULL)
- return FALSE;
-
- cb_data.et = et;
- cb_data.string = string;
-
- cursor = e_tree_get_cursor (et);
-
- if (cursor && (flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST)) {
- const void *value;
-
- value = e_tree_model_value_at (et->priv->model, cursor, col->col_idx);
-
- if (col->search (value, string)) {
- return TRUE;
- }
- }
-
- found = e_tree_model_node_find (et->priv->model, cursor, NULL, E_TREE_FIND_NEXT_FORWARD, search_search_callback, &cb_data);
- if (found == NULL)
- found = e_tree_model_node_find (et->priv->model, NULL, cursor, E_TREE_FIND_NEXT_FORWARD, search_search_callback, &cb_data);
-
- if (found && found != cursor) {
- int model_row;
-
- e_tree_table_adapter_show_node (et->priv->etta, found);
- model_row = e_tree_table_adapter_row_of_node (et->priv->etta, found);
-
- cursor = found;
-
- e_selection_model_select_as_key_press(E_SELECTION_MODEL (et->priv->selection), model_row, col->col_idx, GDK_CONTROL_MASK);
- return TRUE;
- } else if (cursor && !(flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST)) {
- const void *value;
-
- value = e_tree_model_value_at (et->priv->model, cursor, col->col_idx);
-
- return col->search (value, string);
- } else
- return FALSE;
-}
-
-static void
-et_search_accept (ETableSearch *search, ETree *et)
-{
- ETableCol *col = current_search_col (et);
- int cursor;
-
- if (col == NULL)
- return;
-
- g_object_get(et->priv->selection,
- "cursor_row", &cursor,
- NULL);
- e_selection_model_select_as_key_press(E_SELECTION_MODEL (et->priv->selection), cursor, col->col_idx, 0);
-}
-
-static void
-e_tree_init (GtkObject *object)
-{
- ETree *e_tree = E_TREE (object);
- GtkTable *gtk_table = GTK_TABLE (object);
-
- GTK_WIDGET_SET_FLAGS (e_tree, GTK_CAN_FOCUS);
-
- gtk_table->homogeneous = FALSE;
-
- e_tree->priv = g_new(ETreePriv, 1);
-
- e_tree->priv->model = NULL;
- e_tree->priv->etta = NULL;
-
- e_tree->priv->full_header = NULL;
- e_tree->priv->header = NULL;
-
- e_tree->priv->structure_change_id = 0;
- e_tree->priv->expansion_change_id = 0;
- e_tree->priv->sort_info_change_id = 0;
- e_tree->priv->group_info_change_id = 0;
-
- e_tree->priv->sort_info = NULL;
- e_tree->priv->sorter = NULL;
- e_tree->priv->reflow_idle_id = 0;
- e_tree->priv->scroll_idle_id = 0;
- e_tree->priv->hover_idle_id = 0;
-
- e_tree->priv->table_model_change_id = 0;
- e_tree->priv->table_row_change_id = 0;
- e_tree->priv->table_cell_change_id = 0;
-
- e_tree->priv->alternating_row_colors = 1;
- e_tree->priv->horizontal_draw_grid = 1;
- e_tree->priv->vertical_draw_grid = 1;
- e_tree->priv->draw_focus = 1;
- e_tree->priv->cursor_mode = E_CURSOR_SIMPLE;
- e_tree->priv->length_threshold = 200;
- e_tree->priv->uniform_row_height = FALSE;
-
- e_tree->priv->row_selection_active = FALSE;
- e_tree->priv->horizontal_scrolling = FALSE;
- e_tree->priv->scroll_direction = 0;
-
- e_tree->priv->drop_row = -1;
- e_tree->priv->drop_path = NULL;
- e_tree->priv->drop_col = -1;
- e_tree->priv->drop_highlight = NULL;
-
- e_tree->priv->last_drop_x = 0;
- e_tree->priv->last_drop_y = 0;
- e_tree->priv->last_drop_time = 0;
- e_tree->priv->last_drop_context = NULL;
-
- e_tree->priv->hover_x = 0;
- e_tree->priv->hover_y = 0;
-
- e_tree->priv->drag_row = -1;
- e_tree->priv->drag_path = NULL;
- e_tree->priv->drag_col = -1;
-
- e_tree->priv->expanded_list = NULL;
-
- e_tree->priv->site = NULL;
- e_tree->priv->do_drag = FALSE;
-
-#ifdef E_TREE_USE_TREE_SELECTION
- e_tree->priv->selection = E_SELECTION_MODEL(e_tree_selection_model_new());
-#else
- e_tree->priv->selection = E_SELECTION_MODEL(e_table_selection_model_new());
-#endif
- e_tree->priv->spec = NULL;
-
- e_tree->priv->header_canvas = NULL;
- e_tree->priv->table_canvas = NULL;
-
- e_tree->priv->header_item = NULL;
- e_tree->priv->root = NULL;
-
- e_tree->priv->white_item = NULL;
- e_tree->priv->item = NULL;
-
- e_tree->priv->search = e_table_search_new();
-
- e_tree->priv->search_search_id =
- g_signal_connect (G_OBJECT (e_tree->priv->search), "search",
- G_CALLBACK (et_search_search), e_tree);
- e_tree->priv->search_accept_id =
- g_signal_connect (G_OBJECT (e_tree->priv->search), "accept",
- G_CALLBACK (et_search_accept), e_tree);
-
- e_tree->priv->current_search_col = NULL;
- e_tree->priv->search_col_set = FALSE;
- e_tree->priv->always_search = g_getenv ("GAL_ALWAYS_SEARCH") ? TRUE : FALSE;
-}
-
-/* Grab_focus handler for the ETree */
-static void
-et_grab_focus (GtkWidget *widget)
-{
- ETree *e_tree;
-
- e_tree = E_TREE (widget);
-
- gtk_widget_grab_focus (GTK_WIDGET (e_tree->priv->table_canvas));
-}
-
-/* Focus handler for the ETree */
-static gint
-et_focus (GtkWidget *container, GtkDirectionType direction)
-{
- ETree *e_tree;
-
- e_tree = E_TREE (container);
-
- if (GTK_CONTAINER (container)->focus_child) {
- gtk_container_set_focus_child (GTK_CONTAINER (container), NULL);
- return FALSE;
- }
-
- return gtk_widget_child_focus (GTK_WIDGET (e_tree->priv->table_canvas), direction);
-}
-
-static void
-set_header_canvas_width (ETree *e_tree)
-{
- double oldwidth, oldheight, width;
-
- if (!(e_tree->priv->header_item && e_tree->priv->header_canvas && e_tree->priv->table_canvas))
- return;
-
- gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->priv->table_canvas),
- NULL, NULL, &width, NULL);
- gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->priv->header_canvas),
- NULL, NULL, &oldwidth, &oldheight);
-
- if (oldwidth != width ||
- oldheight != E_TABLE_HEADER_ITEM (e_tree->priv->header_item)->height - 1)
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_tree->priv->header_canvas),
- 0, 0, width, /* COLUMN_HEADER_HEIGHT - 1 */
- E_TABLE_HEADER_ITEM (e_tree->priv->header_item)->height - 1);
-
-}
-
-static void
-header_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc, ETree *e_tree)
-{
- set_header_canvas_width (e_tree);
-
- /* When the header item is created ->height == 0,
- as the font is only created when everything is realized.
- So we set the usize here as well, so that the size of the
- header is correct */
- if (GTK_WIDGET (e_tree->priv->header_canvas)->allocation.height !=
- E_TABLE_HEADER_ITEM (e_tree->priv->header_item)->height)
- gtk_widget_set_usize (GTK_WIDGET (e_tree->priv->header_canvas), -1,
- E_TABLE_HEADER_ITEM (e_tree->priv->header_item)->height);
-}
-
-static void
-e_tree_setup_header (ETree *e_tree)
-{
- char *pointer;
- e_tree->priv->header_canvas = GNOME_CANVAS (e_canvas_new ());
- GTK_WIDGET_UNSET_FLAGS (e_tree->priv->header_canvas, GTK_CAN_FOCUS);
-
- gtk_widget_show (GTK_WIDGET (e_tree->priv->header_canvas));
-
- pointer = g_strdup_printf("%p", e_tree);
-
- e_tree->priv->header_item = gnome_canvas_item_new (
- gnome_canvas_root (e_tree->priv->header_canvas),
- e_table_header_item_get_type (),
- "ETableHeader", e_tree->priv->header,
- "full_header", e_tree->priv->full_header,
- "sort_info", e_tree->priv->sort_info,
- "dnd_code", pointer,
- "tree", e_tree,
- NULL);
-
- g_free(pointer);
-
- g_signal_connect (
- e_tree->priv->header_canvas, "size_allocate",
- G_CALLBACK (header_canvas_size_allocate), e_tree);
-
- gtk_widget_set_usize (GTK_WIDGET (e_tree->priv->header_canvas), -1,
- E_TABLE_HEADER_ITEM (e_tree->priv->header_item)->height);
-}
-
-static gboolean
-tree_canvas_reflow_idle (ETree *e_tree)
-{
- gdouble height, width;
- gdouble item_height;
- gdouble oldheight, oldwidth;
- GtkAllocation *alloc = &(GTK_WIDGET (e_tree->priv->table_canvas)->allocation);
-
- g_object_get (e_tree->priv->item,
- "height", &height,
- "width", &width,
- NULL);
- item_height = height;
- height = MAX ((int)height, alloc->height);
- width = MAX((int)width, alloc->width);
- /* I have no idea why this needs to be -1, but it works. */
- gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->priv->table_canvas),
- NULL, NULL, &oldwidth, &oldheight);
-
- if (oldwidth != width - 1 ||
- oldheight != height - 1) {
- gnome_canvas_set_scroll_region (GNOME_CANVAS (e_tree->priv->table_canvas),
- 0, 0, width - 1, height - 1);
- set_header_canvas_width (e_tree);
- }
- e_tree->priv->reflow_idle_id = 0;
- return FALSE;
-}
-
-static void
-tree_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc,
- ETree *e_tree)
-{
- gdouble width;
- gdouble height;
- gdouble item_height;
- GtkAdjustment *adj = GTK_LAYOUT(e_tree->priv->table_canvas)->vadjustment;
- ETreePath path = e_tree_get_cursor (e_tree);
- gint x, y, w, h;
- GValue *val = g_new0 (GValue, 1);
- g_value_init (val, G_TYPE_DOUBLE);
-
- width = alloc->width;
- g_value_set_double (val, width);
- g_object_get (e_tree->priv->item,
- "height", &height,
- NULL);
- item_height = height;
- height = MAX ((int)height, alloc->height);
-
- g_object_set (e_tree->priv->item,
- "width", width,
- NULL);
- g_object_set_property (G_OBJECT (e_tree->priv->header), "width", val);
- g_free (val);
-
- if (e_tree->priv->reflow_idle_id)
- g_source_remove(e_tree->priv->reflow_idle_id);
- tree_canvas_reflow_idle(e_tree);
-
- x = y = w = h = 0;
- if (path) {
- int row = e_tree_row_of_node(e_tree, path);
- int col = 0;
-
- if (row >= 0)
- e_table_item_get_cell_geometry (E_TABLE_ITEM (e_tree->priv->item),
- &row, &col, &x, &y, &w, &h);
- }
-
- if (y < adj->value || y + h > adj->value + adj->page_size)
- gtk_adjustment_set_value(adj, CLAMP(y - adj->page_size / 2, adj->lower, adj->upper - adj->page_size));
-}
-
-static void
-tree_canvas_reflow (GnomeCanvas *canvas, ETree *e_tree)
-{
- if (!e_tree->priv->reflow_idle_id)
- e_tree->priv->reflow_idle_id = g_idle_add_full (400, (GSourceFunc) tree_canvas_reflow_idle, e_tree, NULL);
-}
-
-static void
-item_cursor_change (ETableItem *eti, int row, ETree *et)
-{
- ETreePath path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- g_signal_emit (et,
- et_signals [CURSOR_CHANGE], 0,
- row, path);
-}
-
-static void
-item_cursor_activated (ETableItem *eti, int row, ETree *et)
-{
- ETreePath path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- g_signal_emit (et,
- et_signals [CURSOR_ACTIVATED], 0,
- row, path);
- d(g_print("%s: Emitted CURSOR_ACTIVATED signal on row: %d and path: 0x%p\n", __FUNCTION__, row, path));
-}
-
-static void
-item_double_click (ETableItem *eti, int row, int col, GdkEvent *event, ETree *et)
-{
- ETreePath path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- g_signal_emit (et,
- et_signals [DOUBLE_CLICK], 0,
- row, path, col, event);
-}
-
-static gint
-item_right_click (ETableItem *eti, int row, int col, GdkEvent *event, ETree *et)
-{
- int return_val = 0;
- ETreePath path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- g_signal_emit (et,
- et_signals [RIGHT_CLICK], 0,
- row, path, col, event, &return_val);
- return return_val;
-}
-
-static gint
-item_click (ETableItem *eti, int row, int col, GdkEvent *event, ETree *et)
-{
- int return_val = 0;
- ETreePath path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- g_signal_emit (et,
- et_signals [CLICK], 0,
- row, path, col, event, &return_val);
- return return_val;
-}
-
-static gint
-item_key_press (ETableItem *eti, int row, int col, GdkEvent *event, ETree *et)
-{
- int return_val = 0;
- GdkEventKey *key = (GdkEventKey *) event;
- ETreePath path;
- int y, row_local, col_local;
- GtkAdjustment *vadj;
-
- switch (key->keyval) {
- case GDK_Page_Down:
- case GDK_KP_Page_Down:
- vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (et->priv->table_canvas));
- y = CLAMP(vadj->value + (2 * vadj->page_size - 50), 0, vadj->upper);
- y -= vadj->value;
- e_tree_get_cell_at (et, 30, y, &row_local, &col_local);
-
- if (row_local == -1)
- row_local = e_table_model_row_count (E_TABLE_MODEL(et->priv->etta)) - 1;
-
- row_local = e_tree_view_to_model_row (et, row_local);
- col_local = e_selection_model_cursor_col (E_SELECTION_MODEL (et->priv->selection));
- e_selection_model_select_as_key_press (E_SELECTION_MODEL (et->priv->selection), row_local, col_local, key->state);
-
- return_val = 1;
- break;
- case GDK_Page_Up:
- case GDK_KP_Page_Up:
- vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (et->priv->table_canvas));
- y = CLAMP(vadj->value - (vadj->page_size - 50), 0, vadj->upper);
- y -= vadj->value;
- e_tree_get_cell_at (et, 30, y, &row_local, &col_local);
-
- if (row_local == -1)
- row_local = e_table_model_row_count (E_TABLE_MODEL(et->priv->etta)) - 1;
-
- row_local = e_tree_view_to_model_row (et, row_local);
- col_local = e_selection_model_cursor_col (E_SELECTION_MODEL (et->priv->selection));
- e_selection_model_select_as_key_press (E_SELECTION_MODEL (et->priv->selection), row_local, col_local, key->state);
-
- return_val = 1;
- break;
- case '=':
- case GDK_Right:
- case GDK_KP_Right:
- /* Only allow if the Shift modifier is used -- eg. Ctrl-Equal shouldn't be handled. */
- if (key->state & ~(GDK_SHIFT_MASK | GDK_LOCK_MASK))
- break;
- if (row != -1) {
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- if (path)
- e_tree_table_adapter_node_set_expanded (et->priv->etta, path, TRUE);
- }
- return_val = 1;
- break;
- case '-':
- case GDK_Left:
- case GDK_KP_Left:
- /* Only allow if the Shift modifier is used -- eg. Ctrl-Minus shouldn't be handled. */
- if (key->state & ~(GDK_SHIFT_MASK | GDK_LOCK_MASK))
- break;
- if (row != -1) {
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- if (path)
- e_tree_table_adapter_node_set_expanded (et->priv->etta, path, FALSE);
- }
- return_val = 1;
- break;
- case GDK_BackSpace:
- if (e_table_search_backspace (et->priv->search))
- return TRUE;
- /* Fallthrough */
- default:
- if ((key->state & ~(GDK_SHIFT_MASK | GDK_LOCK_MASK)) == 0
- && ((key->keyval >= GDK_a && key->keyval <= GDK_z) ||
- (key->keyval >= GDK_A && key->keyval <= GDK_Z) ||
- (key->keyval >= GDK_0 && key->keyval <= GDK_9))) {
- e_table_search_input_character (et->priv->search, key->keyval);
- }
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- g_signal_emit (et,
- et_signals [KEY_PRESS], 0,
- row, path, col, event, &return_val);
- break;
- }
- return return_val;
-}
-
-static gint
-item_start_drag (ETableItem *eti, int row, int col, GdkEvent *event, ETree *et)
-{
- ETreePath path;
- gint return_val = 0;
-
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
-
- g_signal_emit (et,
- et_signals [START_DRAG], 0,
- row, path, col, event, &return_val);
-
- return return_val;
-}
-
-static void
-et_selection_model_selection_changed (ETableSelectionModel *etsm, ETree *et)
-{
- g_signal_emit (et,
- et_signals [SELECTION_CHANGE], 0);
-}
-
-static void
-et_selection_model_selection_row_changed (ETableSelectionModel *etsm, int row, ETree *et)
-{
- g_signal_emit (et,
- et_signals [SELECTION_CHANGE], 0);
-}
-
-static void
-et_build_item (ETree *et)
-{
- et->priv->item = gnome_canvas_item_new(GNOME_CANVAS_GROUP (gnome_canvas_root(et->priv->table_canvas)),
- e_table_item_get_type(),
- "ETableHeader", et->priv->header,
- "ETableModel", et->priv->etta,
- "selection_model", et->priv->selection,
- "alternating_row_colors", et->priv->alternating_row_colors,
- "horizontal_draw_grid", et->priv->horizontal_draw_grid,
- "vertical_draw_grid", et->priv->vertical_draw_grid,
- "drawfocus", et->priv->draw_focus,
- "cursor_mode", et->priv->cursor_mode,
- "length_threshold", et->priv->length_threshold,
- "uniform_row_height", et->priv->uniform_row_height,
- NULL);
-
- g_signal_connect (et->priv->item, "cursor_change",
- G_CALLBACK (item_cursor_change), et);
- g_signal_connect (et->priv->item, "cursor_activated",
- G_CALLBACK (item_cursor_activated), et);
- g_signal_connect (et->priv->item, "double_click",
- G_CALLBACK (item_double_click), et);
- g_signal_connect (et->priv->item, "right_click",
- G_CALLBACK (item_right_click), et);
- g_signal_connect (et->priv->item, "click",
- G_CALLBACK (item_click), et);
- g_signal_connect (et->priv->item, "key_press",
- G_CALLBACK (item_key_press), et);
- g_signal_connect (et->priv->item, "start_drag",
- G_CALLBACK (item_start_drag), et);
-}
-
-static void
-et_canvas_style_set (GtkWidget *widget, GtkStyle *prev_style)
-{
- gnome_canvas_item_set(
- E_TREE(widget)->priv->white_item,
- "fill_color_gdk", &widget->style->base[GTK_STATE_NORMAL],
- NULL);
-}
-
-static gint
-white_item_event (GnomeCanvasItem *white_item, GdkEvent *event, ETree *e_tree)
-{
- int return_val = 0;
- g_signal_emit (e_tree,
- et_signals [WHITE_SPACE_EVENT], 0,
- event, &return_val);
- return return_val;
-}
-
-static gint
-et_canvas_root_event (GnomeCanvasItem *root, GdkEvent *event, ETree *e_tree)
-{
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- case GDK_2BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- if (event->button.button != 4 && event->button.button != 5) {
- if (GTK_WIDGET_HAS_FOCUS(root->canvas)) {
- GnomeCanvasItem *item = GNOME_CANVAS(root->canvas)->focused_item;
-
- if (E_IS_TABLE_ITEM(item)) {
- e_table_item_leave_edit_(E_TABLE_ITEM(item));
- return TRUE;
- }
- }
- }
- break;
- default:
- break;
- }
-
- return FALSE;
-}
-
-/* Handler for focus events in the table_canvas; we have to repaint ourselves
- * and give the focus to some ETableItem.
- */
-static gint
-table_canvas_focus_event_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
- GnomeCanvas *canvas;
- ETree *tree;
-
- gtk_widget_queue_draw (widget);
-
- if (!event->in)
- return TRUE;
-
- canvas = GNOME_CANVAS (widget);
- tree = E_TREE (data);
-
- if (!canvas->focused_item) {
- e_table_item_set_cursor (E_TABLE_ITEM (tree->priv->item), 0, 0);
- gnome_canvas_item_grab_focus (tree->priv->item);
- }
-
- return TRUE;
-}
-
-static void
-e_tree_setup_table (ETree *e_tree)
-{
- e_tree->priv->table_canvas = GNOME_CANVAS (e_canvas_new ());
- g_signal_connect (
- e_tree->priv->table_canvas, "size_allocate",
- G_CALLBACK (tree_canvas_size_allocate), e_tree);
- g_signal_connect (
- e_tree->priv->table_canvas, "focus_in_event",
- G_CALLBACK (table_canvas_focus_event_cb), e_tree);
- g_signal_connect (
- e_tree->priv->table_canvas, "focus_out_event",
- G_CALLBACK (table_canvas_focus_event_cb), e_tree);
-
- g_signal_connect (
- e_tree->priv->table_canvas, "drag_begin",
- G_CALLBACK (et_drag_begin), e_tree);
- g_signal_connect (
- e_tree->priv->table_canvas, "drag_end",
- G_CALLBACK (et_drag_end), e_tree);
- g_signal_connect (
- e_tree->priv->table_canvas, "drag_data_get",
- G_CALLBACK (et_drag_data_get), e_tree);
- g_signal_connect (
- e_tree->priv->table_canvas, "drag_data_delete",
- G_CALLBACK (et_drag_data_delete), e_tree);
- g_signal_connect (
- e_tree, "drag_motion",
- G_CALLBACK (et_drag_motion), e_tree);
- g_signal_connect (
- e_tree, "drag_leave",
- G_CALLBACK (et_drag_leave), e_tree);
- g_signal_connect (
- e_tree, "drag_drop",
- G_CALLBACK (et_drag_drop), e_tree);
- g_signal_connect (
- e_tree, "drag_data_received",
- G_CALLBACK (et_drag_data_received), e_tree);
-
- g_signal_connect (e_tree->priv->table_canvas, "reflow",
- G_CALLBACK (tree_canvas_reflow), e_tree);
-
- gtk_widget_show (GTK_WIDGET (e_tree->priv->table_canvas));
-
- e_tree->priv->white_item = gnome_canvas_item_new(
- gnome_canvas_root(e_tree->priv->table_canvas),
- e_canvas_background_get_type(),
- "fill_color_gdk", &GTK_WIDGET(e_tree->priv->table_canvas)->style->base[GTK_STATE_NORMAL],
- NULL);
-
- g_signal_connect (e_tree->priv->white_item, "event",
- G_CALLBACK (white_item_event), e_tree);
- g_signal_connect (
- gnome_canvas_root (e_tree->priv->table_canvas), "event",
- G_CALLBACK(et_canvas_root_event), e_tree);
-
- et_build_item(e_tree);
-}
-
-/**
- * e_tree_set_search_column:
- * @e_tree: #ETree object that will be modified
- * @col: Column index to use for searches
- *
- * This routine sets the current search column to be used for keypress
- * searches of the #ETree. If -1 is passed in for column, the current
- * search column is cleared.
- */
-void
-e_tree_set_search_column (ETree *e_tree, gint col)
-{
- if (col == -1) {
- clear_current_search_col (e_tree);
- return;
- }
-
- e_tree->priv->search_col_set = TRUE;
- e_tree->priv->current_search_col = e_table_header_get_column (e_tree->priv->full_header, col);
-}
-
-void
-e_tree_set_state_object(ETree *e_tree, ETableState *state)
-{
- GValue *val = g_new0 (GValue, 1);
- g_value_init (val, G_TYPE_DOUBLE);
-
- connect_header (e_tree, state);
-
- g_value_set_double (val, (double) (GTK_WIDGET(e_tree->priv->table_canvas)->allocation.width));
- g_object_set_property (G_OBJECT (e_tree->priv->header), "width", val);
- g_free (val);
-
- if (e_tree->priv->header_item)
- g_object_set(e_tree->priv->header_item,
- "ETableHeader", e_tree->priv->header,
- "sort_info", e_tree->priv->sort_info,
- NULL);
-
- if (e_tree->priv->item)
- g_object_set(e_tree->priv->item,
- "ETableHeader", e_tree->priv->header,
- NULL);
-
- if (e_tree->priv->etta)
- e_tree_table_adapter_set_sort_info (e_tree->priv->etta, e_tree->priv->sort_info);
-
- e_tree_state_change (e_tree);
-}
-
-/**
- * e_tree_set_state:
- * @e_tree: #ETree object that will be modified
- * @state_str: a string with the XML representation of the #ETableState.
- *
- * This routine sets the state (as described by #ETableState) of the
- * #ETree object.
- */
-void
-e_tree_set_state (ETree *e_tree,
- const gchar *state_str)
-{
- ETableState *state;
-
- g_return_if_fail(e_tree != NULL);
- g_return_if_fail(E_IS_TREE(e_tree));
- g_return_if_fail(state_str != NULL);
-
- state = e_table_state_new();
- e_table_state_load_from_string(state, state_str);
-
- if (state->col_count > 0)
- e_tree_set_state_object(e_tree, state);
-
- g_object_unref(state);
-}
-
-/**
- * e_tree_load_state:
- * @e_tree: #ETree object that will be modified
- * @filename: name of the file containing the state to be loaded into the #ETree
- *
- * An #ETableState will be loaded form the file pointed by @filename into the
- * @e_tree object.
- */
-void
-e_tree_load_state (ETree *e_tree,
- const gchar *filename)
-{
- ETableState *state;
-
- g_return_if_fail(e_tree != NULL);
- g_return_if_fail(E_IS_TREE(e_tree));
- g_return_if_fail(filename != NULL);
-
- state = e_table_state_new();
- e_table_state_load_from_file(state, filename);
-
- if (state->col_count > 0)
- e_tree_set_state_object(e_tree, state);
-
- g_object_unref(state);
-}
-
-/**
- * e_tree_get_state_object:
- * @e_tree: #ETree object to act on
- *
- * Builds an #ETableState corresponding to the current state of the
- * #ETree.
- *
- * Return value:
- * The %ETableState object generated.
- **/
-ETableState *
-e_tree_get_state_object (ETree *e_tree)
-{
- ETableState *state;
- int full_col_count;
- int i, j;
-
- state = e_table_state_new();
- state->sort_info = e_tree->priv->sort_info;
- if (state->sort_info)
- g_object_ref(state->sort_info);
-
- state->col_count = e_table_header_count (e_tree->priv->header);
- full_col_count = e_table_header_count (e_tree->priv->full_header);
- state->columns = g_new(int, state->col_count);
- state->expansions = g_new(double, state->col_count);
- for (i = 0; i < state->col_count; i++) {
- ETableCol *col = e_table_header_get_column(e_tree->priv->header, i);
- state->columns[i] = -1;
- for (j = 0; j < full_col_count; j++) {
- if (col->col_idx == e_table_header_index(e_tree->priv->full_header, j)) {
- state->columns[i] = j;
- break;
- }
- }
- state->expansions[i] = col->expansion;
- }
-
- return state;
-}
-
-/**
- * e_tree_get_state:
- * @e_tree: The #ETree to act on
- *
- * Builds a state object based on the current state and returns the
- * string corresponding to that state.
- *
- * Return value:
- * A string describing the current state of the #ETree.
- **/
-gchar *
-e_tree_get_state (ETree *e_tree)
-{
- ETableState *state;
- gchar *string;
-
- state = e_tree_get_state_object(e_tree);
- string = e_table_state_save_to_string(state);
- g_object_unref(state);
- return string;
-}
-
-/**
- * e_tree_save_state:
- * @e_tree: The #ETree to act on
- * @filename: name of the file to save to
- *
- * Saves the state of the @e_tree object into the file pointed by
- * @filename.
- **/
-void
-e_tree_save_state (ETree *e_tree,
- const gchar *filename)
-{
- ETableState *state;
-
- state = e_tree_get_state_object(e_tree);
- e_table_state_save_to_file(state, filename);
- g_object_unref(state);
-}
-
-/**
- * e_tree_get_spec:
- * @e_tree: The #ETree to query
- *
- * Returns the specification object.
- *
- * Return value:
- **/
-ETableSpecification *
-e_tree_get_spec (ETree *e_tree)
-{
- return e_tree->priv->spec;
-}
-
-static void
-et_table_model_changed (ETableModel *model, ETree *et)
-{
- if (et->priv->horizontal_scrolling)
- e_table_header_update_horizontal(et->priv->header);
-}
-
-static void
-et_table_row_changed (ETableModel *table_model, int row, ETree *et)
-{
- et_table_model_changed (table_model, et);
-}
-
-static void
-et_table_cell_changed (ETableModel *table_model, int view_col, int row, ETree *et)
-{
- et_table_model_changed (table_model, et);
-}
-
-static void
-et_connect_to_etta (ETree *et)
-{
- et->priv->table_model_change_id = g_signal_connect (et->priv->etta, "model_changed",
- G_CALLBACK (et_table_model_changed), et);
-
- et->priv->table_row_change_id = g_signal_connect (et->priv->etta, "model_row_changed",
- G_CALLBACK (et_table_row_changed), et);
-
- et->priv->table_cell_change_id = g_signal_connect (et->priv->etta, "model_cell_changed",
- G_CALLBACK (et_table_cell_changed), et);
-
-}
-
-static ETree *
-et_real_construct (ETree *e_tree, ETreeModel *etm, ETableExtras *ete,
- ETableSpecification *specification, ETableState *state)
-{
- int row = 0;
-
- if (ete)
- g_object_ref(ete);
- else
- ete = e_table_extras_new();
-
- e_tree->priv->alternating_row_colors = specification->alternating_row_colors;
- e_tree->priv->horizontal_draw_grid = specification->horizontal_draw_grid;
- e_tree->priv->vertical_draw_grid = specification->vertical_draw_grid;
- e_tree->priv->draw_focus = specification->draw_focus;
- e_tree->priv->cursor_mode = specification->cursor_mode;
- e_tree->priv->full_header = e_table_spec_to_full_header(specification, ete);
-
- connect_header (e_tree, state);
-
- e_tree->priv->horizontal_scrolling = specification->horizontal_scrolling;
-
- e_tree->priv->model = etm;
- g_object_ref (etm);
-
- e_tree->priv->etta = E_TREE_TABLE_ADAPTER(e_tree_table_adapter_new(e_tree->priv->model, e_tree->priv->sort_info, e_tree->priv->full_header));
-
- et_connect_to_etta (e_tree);
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
- e_tree->priv->sorter = e_sorter_new();
-
- g_object_set (e_tree->priv->selection,
- "sorter", e_tree->priv->sorter,
-#ifdef E_TREE_USE_TREE_SELECTION
- "model", e_tree->priv->model,
- "etta", e_tree->priv->etta,
-#else
- "model", e_tree->priv->etta,
-#endif
- "selection_mode", specification->selection_mode,
- "cursor_mode", specification->cursor_mode,
- NULL);
-
- g_signal_connect(e_tree->priv->selection, "selection_changed",
- G_CALLBACK (et_selection_model_selection_changed), e_tree);
- g_signal_connect(e_tree->priv->selection, "selection_row_changed",
- G_CALLBACK (et_selection_model_selection_row_changed), e_tree);
-
- if (!specification->no_headers) {
- e_tree_setup_header (e_tree);
- }
- e_tree_setup_table (e_tree);
-
- gtk_layout_get_vadjustment (GTK_LAYOUT (e_tree->priv->table_canvas))->step_increment = 20;
- gtk_adjustment_changed(gtk_layout_get_vadjustment (GTK_LAYOUT (e_tree->priv->table_canvas)));
- gtk_layout_get_hadjustment (GTK_LAYOUT (e_tree->priv->table_canvas))->step_increment = 20;
- gtk_adjustment_changed(gtk_layout_get_hadjustment (GTK_LAYOUT (e_tree->priv->table_canvas)));
-
- if (!specification->no_headers) {
- /*
- * The header
- */
- gtk_table_attach (GTK_TABLE (e_tree), GTK_WIDGET (e_tree->priv->header_canvas),
- 0, 1, 0 + row, 1 + row,
- GTK_FILL | GTK_EXPAND,
- GTK_FILL, 0, 0);
- row ++;
- }
- gtk_table_attach (GTK_TABLE (e_tree), GTK_WIDGET (e_tree->priv->table_canvas),
- 0, 1, 0 + row, 1 + row,
- GTK_FILL | GTK_EXPAND,
- GTK_FILL | GTK_EXPAND,
- 0, 0);
-
- gtk_widget_pop_colormap ();
-
- g_object_unref(ete);
-
- return e_tree;
-}
-
-/**
- * e_tree_construct:
- * @e_tree: The newly created #ETree object.
- * @etm: The model for this table.
- * @ete: An optional #ETableExtras. (%NULL is valid.)
- * @spec_str: The spec.
- * @state_str: An optional state. (%NULL is valid.)
- *
- * This is the internal implementation of e_tree_new() for use by
- * subclasses or language bindings. See e_tree_new() for details.
- *
- * Return value:
- * The passed in value @e_tree or %NULL if there's an error.
- **/
-ETree *
-e_tree_construct (ETree *e_tree, ETreeModel *etm, ETableExtras *ete,
- const char *spec_str, const char *state_str)
-{
- ETableSpecification *specification;
- ETableState *state;
-
- g_return_val_if_fail(e_tree != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE(e_tree), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_str != NULL, NULL);
-
- specification = e_table_specification_new();
- e_table_specification_load_from_string(specification, spec_str);
- if (state_str) {
- state = e_table_state_new();
- e_table_state_load_from_string(state, state_str);
- if (state->col_count <= 0) {
- g_object_unref(state);
- state = specification->state;
- g_object_ref(state);
- }
- } else {
- state = specification->state;
- g_object_ref(state);
- }
-
- e_tree = et_real_construct (e_tree, etm, ete, specification, state);
-
- e_tree->priv->spec = specification;
- g_object_unref(state);
-
- return e_tree;
-}
-
-/**
- * e_tree_construct_from_spec_file:
- * @e_tree: The newly created #ETree object.
- * @etm: The model for this tree
- * @ete: An optional #ETableExtras (%NULL is valid.)
- * @spec_fn: The filename of the spec
- * @state_fn: An optional state file (%NULL is valid.)
- *
- * This is the internal implementation of e_tree_new_from_spec_file()
- * for use by subclasses or language bindings. See
- * e_tree_new_from_spec_file() for details.
- *
- * Return value:
- * The passed in value @e_tree or %NULL if there's an error.
- **/
-ETree *
-e_tree_construct_from_spec_file (ETree *e_tree, ETreeModel *etm, ETableExtras *ete,
- const char *spec_fn, const char *state_fn)
-{
- ETableSpecification *specification;
- ETableState *state;
-
- g_return_val_if_fail(e_tree != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE(e_tree), NULL);
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- specification = e_table_specification_new();
- if (!e_table_specification_load_from_file(specification, spec_fn)) {
- g_object_unref(specification);
- return NULL;
- }
-
- if (state_fn) {
- state = e_table_state_new();
- if (!e_table_state_load_from_file(state, state_fn)) {
- g_object_unref(state);
- state = specification->state;
- g_object_ref(state);
- }
- if (state->col_count <= 0) {
- g_object_unref(state);
- state = specification->state;
- g_object_ref(state);
- }
- } else {
- state = specification->state;
- g_object_ref(state);
- }
-
- e_tree = et_real_construct (e_tree, etm, ete, specification, state);
-
- e_tree->priv->spec = specification;
- g_object_unref(state);
-
- return e_tree;
-}
-
-/**
- * e_tree_new:
- * @etm: The model for this tree
- * @ete: An optional #ETableExtras (%NULL is valid.)
- * @spec: The spec
- * @state: An optional state (%NULL is valid.)
- *
- * This function creates an #ETree from the given parameters. The
- * #ETreeModel is a tree model to be represented. The #ETableExtras
- * is an optional set of pixbufs, cells, and sorting functions to be
- * used when interpreting the spec. If you pass in %NULL it uses the
- * default #ETableExtras. (See e_table_extras_new()).
- *
- * @spec is the specification of the set of viewable columns and the
- * default sorting state and such. @state is an optional string
- * specifying the current sorting state and such. If @state is NULL,
- * then the default state from the spec will be used.
- *
- * Return value:
- * The newly created #ETree or %NULL if there's an error.
- **/
-GtkWidget *
-e_tree_new (ETreeModel *etm, ETableExtras *ete, const char *spec, const char *state)
-{
- ETree *e_tree, *ret_val;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec != NULL, NULL);
-
- e_tree = g_object_new (E_TREE_TYPE, NULL);
-
- ret_val = e_tree_construct (e_tree, etm, ete, spec, state);
-
- if (ret_val == NULL) {
- g_object_unref (e_tree);
- }
-
- return (GtkWidget *) ret_val;
-}
-
-/**
- * e_tree_new_from_spec_file:
- * @etm: The model for this tree.
- * @ete: An optional #ETableExtras. (%NULL is valid.)
- * @spec_fn: The filename of the spec.
- * @state_fn: An optional state file. (%NULL is valid.)
- *
- * This is very similar to e_tree_new(), except instead of passing in
- * strings you pass in the file names of the spec and state to load.
- *
- * @spec_fn is the filename of the spec to load. If this file doesn't
- * exist, e_tree_new_from_spec_file will return %NULL.
- *
- * @state_fn is the filename of the initial state to load. If this is
- * %NULL or if the specified file doesn't exist, the default state
- * from the spec file is used.
- *
- * Return value:
- * The newly created #ETree or %NULL if there's an error.
- **/
-GtkWidget *
-e_tree_new_from_spec_file (ETreeModel *etm, ETableExtras *ete, const char *spec_fn, const char *state_fn)
-{
- ETree *e_tree, *ret_val;
-
- g_return_val_if_fail(etm != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE_MODEL(etm), NULL);
- g_return_val_if_fail(ete == NULL || E_IS_TABLE_EXTRAS(ete), NULL);
- g_return_val_if_fail(spec_fn != NULL, NULL);
-
- e_tree = g_object_new (E_TREE_TYPE, NULL);
-
- ret_val = e_tree_construct_from_spec_file (e_tree, etm, ete, spec_fn, state_fn);
-
- if (ret_val == NULL) {
- g_object_unref (e_tree);
- }
-
- return (GtkWidget *) ret_val;
-}
-
-void
-e_tree_set_cursor (ETree *e_tree, ETreePath path)
-{
-#ifndef E_TREE_USE_TREE_SELECTION
- int row;
-#endif
- g_return_if_fail(e_tree != NULL);
- g_return_if_fail(E_IS_TREE(e_tree));
- g_return_if_fail(path != NULL);
-
-#ifdef E_TREE_USE_TREE_SELECTION
- e_tree_selection_model_select_single_path (E_TREE_SELECTION_MODEL(e_tree->priv->selection), path);
- e_tree_selection_model_change_cursor (E_TREE_SELECTION_MODEL(e_tree->priv->selection), path);
-#else
- row = e_tree_table_adapter_row_of_node(E_TREE_TABLE_ADAPTER(e_tree->priv->etta), path);
-
- if (row == -1)
- return;
-
- g_object_set(e_tree->priv->selection,
- "cursor_row", row,
- NULL);
-#endif
-}
-
-ETreePath
-e_tree_get_cursor (ETree *e_tree)
-{
-#ifdef E_TREE_USE_TREE_SELECTION
- return e_tree_selection_model_get_cursor (E_TREE_SELECTION_MODEL(e_tree->priv->selection));
-#else
- int row;
- ETreePath path;
- g_return_val_if_fail(e_tree != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE(e_tree), NULL);
-
- g_object_get(e_tree->priv->selection,
- "cursor_row", &row,
- NULL);
- if (row == -1)
- return NULL;
- path = e_tree_table_adapter_node_at_row(E_TREE_TABLE_ADAPTER(e_tree->priv->etta), row);
- return path;
-#endif
-}
-
-void
-e_tree_selected_row_foreach (ETree *e_tree,
- EForeachFunc callback,
- gpointer closure)
-{
- g_return_if_fail(e_tree != NULL);
- g_return_if_fail(E_IS_TREE(e_tree));
-
- e_selection_model_foreach(e_tree->priv->selection,
- callback,
- closure);
-}
-
-#ifdef E_TREE_USE_TREE_SELECTION
-void
-e_tree_selected_path_foreach (ETree *e_tree,
- ETreeForeachFunc callback,
- gpointer closure)
-{
- g_return_if_fail(e_tree != NULL);
- g_return_if_fail(E_IS_TREE(e_tree));
-
- e_tree_selection_model_foreach(E_TREE_SELECTION_MODEL (e_tree->priv->selection),
- callback,
- closure);
-}
-
-/* Standard functions */
-static void
-et_foreach_recurse (ETreeModel *model,
- ETreePath path,
- ETreeForeachFunc callback,
- gpointer closure)
-{
- ETreePath child;
-
- callback(path, closure);
-
- child = e_tree_model_node_get_first_child(E_TREE_MODEL(model), path);
- for ( ; child; child = e_tree_model_node_get_next(E_TREE_MODEL(model), child))
- if (child)
- et_foreach_recurse (model, child, callback, closure);
-}
-
-void
-e_tree_path_foreach (ETree *e_tree,
- ETreeForeachFunc callback,
- gpointer closure)
-{
- ETreePath root;
-
- g_return_if_fail(e_tree != NULL);
- g_return_if_fail(E_IS_TREE(e_tree));
-
- root = e_tree_model_get_root (e_tree->priv->model);
-
- if (root)
- et_foreach_recurse (e_tree->priv->model,
- root,
- callback,
- closure);
-}
-#endif
-
-EPrintable *
-e_tree_get_printable (ETree *e_tree)
-{
- g_return_val_if_fail(e_tree != NULL, NULL);
- g_return_val_if_fail(E_IS_TREE(e_tree), NULL);
-
- return e_table_item_get_printable(E_TABLE_ITEM(e_tree->priv->item));
-}
-
-static void
-et_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ETree *etree = E_TREE (object);
-
- switch (prop_id){
- case PROP_ETTA:
- g_value_set_object (value, etree->priv->etta);
- break;
- case PROP_UNIFORM_ROW_HEIGHT:
- g_value_set_boolean (value, etree->priv->uniform_row_height);
- break;
- case PROP_ALWAYS_SEARCH:
- g_value_set_boolean (value, etree->priv->always_search);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-typedef struct {
- char *arg;
- gboolean setting;
-} bool_closure;
-
-static void
-et_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- ETree *etree = E_TREE (object);
-
- switch (prop_id){
- case PROP_LENGTH_THRESHOLD:
- etree->priv->length_threshold = g_value_get_int (value);
- if (etree->priv->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
- "length_threshold", etree->priv->length_threshold,
- NULL);
- }
- break;
-
- case PROP_HORIZONTAL_DRAW_GRID:
- etree->priv->horizontal_draw_grid = g_value_get_boolean (value);
- if (etree->priv->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
- "horizontal_draw_grid", etree->priv->horizontal_draw_grid,
- NULL);
- }
- break;
-
- case PROP_VERTICAL_DRAW_GRID:
- etree->priv->vertical_draw_grid = g_value_get_boolean (value);
- if (etree->priv->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
- "vertical_draw_grid", etree->priv->vertical_draw_grid,
- NULL);
- }
- break;
-
- case PROP_DRAW_FOCUS:
- etree->priv->draw_focus = g_value_get_boolean (value);
- if (etree->priv->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
- "drawfocus", etree->priv->draw_focus,
- NULL);
- }
- break;
-
- case PROP_UNIFORM_ROW_HEIGHT:
- etree->priv->uniform_row_height = g_value_get_boolean (value);
- if (etree->priv->item) {
- gnome_canvas_item_set (GNOME_CANVAS_ITEM(etree->priv->item),
- "uniform_row_height", etree->priv->uniform_row_height,
- NULL);
- }
- break;
-
- case PROP_ALWAYS_SEARCH:
- if (etree->priv->always_search == g_value_get_boolean (value))
- return;
- etree->priv->always_search = g_value_get_boolean (value);
- clear_current_search_col (etree);
- break;
- }
-}
-
-static void
-set_scroll_adjustments (ETree *tree,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment)
-{
- if (vadjustment != NULL) {
- vadjustment->step_increment = 20;
- gtk_adjustment_changed(vadjustment);
- }
- if (hadjustment != NULL) {
- hadjustment->step_increment = 20;
- gtk_adjustment_changed(hadjustment);
- }
-
- if (tree->priv) {
- gtk_layout_set_hadjustment (GTK_LAYOUT(tree->priv->table_canvas),
- hadjustment);
- gtk_layout_set_vadjustment (GTK_LAYOUT(tree->priv->table_canvas),
- vadjustment);
-
- if (tree->priv->header_canvas != NULL)
- gtk_layout_set_hadjustment (GTK_LAYOUT(tree->priv->header_canvas),
- hadjustment);
- }
-}
-
-gint
-e_tree_get_next_row (ETree *e_tree,
- gint model_row)
-{
- g_return_val_if_fail(e_tree != NULL, -1);
- g_return_val_if_fail(E_IS_TREE(e_tree), -1);
-
- if (e_tree->priv->sorter) {
- int i;
- i = e_sorter_model_to_sorted(E_SORTER (e_tree->priv->sorter), model_row);
- i++;
- if (i < e_table_model_row_count(E_TABLE_MODEL(e_tree->priv->etta))) {
- return e_sorter_sorted_to_model(E_SORTER (e_tree->priv->sorter), i);
- } else
- return -1;
- } else
- if (model_row < e_table_model_row_count(E_TABLE_MODEL(e_tree->priv->etta)) - 1)
- return model_row + 1;
- else
- return -1;
-}
-
-gint
-e_tree_get_prev_row (ETree *e_tree,
- gint model_row)
-{
- g_return_val_if_fail(e_tree != NULL, -1);
- g_return_val_if_fail(E_IS_TREE(e_tree), -1);
-
- if (e_tree->priv->sorter) {
- int i;
- i = e_sorter_model_to_sorted(E_SORTER (e_tree->priv->sorter), model_row);
- i--;
- if (i >= 0)
- return e_sorter_sorted_to_model(E_SORTER (e_tree->priv->sorter), i);
- else
- return -1;
- } else
- return model_row - 1;
-}
-
-gint
-e_tree_model_to_view_row (ETree *e_tree,
- gint model_row)
-{
- g_return_val_if_fail(e_tree != NULL, -1);
- g_return_val_if_fail(E_IS_TREE(e_tree), -1);
-
- if (e_tree->priv->sorter)
- return e_sorter_model_to_sorted(E_SORTER (e_tree->priv->sorter), model_row);
- else
- return model_row;
-}
-
-gint
-e_tree_view_to_model_row (ETree *e_tree,
- gint view_row)
-{
- g_return_val_if_fail(e_tree != NULL, -1);
- g_return_val_if_fail(E_IS_TREE(e_tree), -1);
-
- if (e_tree->priv->sorter)
- return e_sorter_sorted_to_model (E_SORTER (e_tree->priv->sorter), view_row);
- else
- return view_row;
-}
-
-
-gboolean
-e_tree_node_is_expanded (ETree *et, ETreePath path)
-{
- g_return_val_if_fail(path, FALSE);
-
- return e_tree_table_adapter_node_is_expanded (et->priv->etta, path);
-}
-
-void
-e_tree_node_set_expanded (ETree *et, ETreePath path, gboolean expanded)
-{
- g_return_if_fail (et != NULL);
- g_return_if_fail (E_IS_TREE(et));
-
- e_tree_table_adapter_node_set_expanded (et->priv->etta, path, expanded);
-}
-
-void
-e_tree_node_set_expanded_recurse (ETree *et, ETreePath path, gboolean expanded)
-{
- g_return_if_fail (et != NULL);
- g_return_if_fail (E_IS_TREE(et));
-
- e_tree_table_adapter_node_set_expanded_recurse (et->priv->etta, path, expanded);
-}
-
-void
-e_tree_root_node_set_visible (ETree *et, gboolean visible)
-{
- g_return_if_fail (et != NULL);
- g_return_if_fail (E_IS_TREE(et));
-
- e_tree_table_adapter_root_node_set_visible (et->priv->etta, visible);
-}
-
-ETreePath
-e_tree_node_at_row (ETree *et, int row)
-{
- ETreePath path;
-
- path = e_tree_table_adapter_node_at_row (et->priv->etta, row);
-
- return path;
-}
-
-int
-e_tree_row_of_node (ETree *et, ETreePath path)
-{
- return e_tree_table_adapter_row_of_node (et->priv->etta, path);
-}
-
-gboolean
-e_tree_root_node_is_visible(ETree *et)
-{
- return e_tree_table_adapter_root_node_is_visible (et->priv->etta);
-}
-
-void
-e_tree_show_node (ETree *et, ETreePath path)
-{
- g_return_if_fail (et != NULL);
- g_return_if_fail (E_IS_TREE(et));
-
- e_tree_table_adapter_show_node (et->priv->etta, path);
-}
-
-void
-e_tree_save_expanded_state (ETree *et, char *filename)
-{
- g_return_if_fail (et != NULL);
- g_return_if_fail (E_IS_TREE(et));
-
- e_tree_table_adapter_save_expanded_state (et->priv->etta, filename);
-}
-
-void
-e_tree_load_expanded_state (ETree *et, char *filename)
-{
- e_tree_table_adapter_load_expanded_state (et->priv->etta, filename);
-}
-
-gint
-e_tree_row_count (ETree *et)
-{
- return e_table_model_row_count (E_TABLE_MODEL(et->priv->etta));
-}
-
-GtkWidget *
-e_tree_get_tooltip (ETree *et)
-{
- return E_CANVAS(et->priv->table_canvas)->tooltip_window;
-}
-
-static ETreePath
-find_next_in_range (ETree *et, gint start, gint end, ETreePathFunc func, gpointer data)
-{
- ETreePath path;
- gint row;
-
- for (row = start; row <= end; row++) {
- path = e_tree_table_adapter_node_at_row (et->priv->etta, row);
- if (path && func (et->priv->model, path, data))
- return path;
- }
-
- return NULL;
-}
-
-static ETreePath
-find_prev_in_range (ETree *et, gint start, gint end, ETreePathFunc func, gpointer data)
-{
- ETreePath path;
- gint row;
-
- for (row = start; row >= end; row--) {
- path = e_tree_table_adapter_node_at_row (et->priv->etta, row);
- if (path && func (et->priv->model, path, data))
- return path;
- }
-
- return NULL;
-}
-
-gboolean
-e_tree_find_next (ETree *et, ETreeFindNextParams params, ETreePathFunc func, gpointer data)
-{
- ETreePath cursor, found;
- gint row, row_count;
-
- cursor = e_tree_get_cursor (et);
- row = e_tree_table_adapter_row_of_node (et->priv->etta, cursor);
- row_count = e_table_model_row_count (E_TABLE_MODEL (et->priv->etta));
-
- if (params & E_TREE_FIND_NEXT_FORWARD)
- found = find_next_in_range (et, row + 1, row_count - 1, func, data);
- else
- found = find_prev_in_range (et, row == -1 ? -1 : row - 1, 0, func, data);
-
- if (found) {
- e_tree_table_adapter_show_node (et->priv->etta, found);
- e_tree_set_cursor (et, found);
- return TRUE;
- }
-
- if (params & E_TREE_FIND_NEXT_WRAP) {
- if (params & E_TREE_FIND_NEXT_FORWARD)
- found = find_next_in_range (et, 0, row, func, data);
- else
- found = find_prev_in_range (et, row_count - 1, row, func, data);
-
- if (found && found != cursor) {
- e_tree_table_adapter_show_node (et->priv->etta, found);
- e_tree_set_cursor (et, found);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-void
-e_tree_right_click_up (ETree *et)
-{
- e_selection_model_right_click_up(et->priv->selection);
-}
-
-/**
- * e_tree_get_model:
- * @et: the ETree
- *
- * Returns the model upon which this ETree is based.
- *
- * Returns: the model
- **/
-ETreeModel *
-e_tree_get_model (ETree *et)
-{
- g_return_val_if_fail (et != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE (et), NULL);
-
- return et->priv->model;
-}
-
-/**
- * e_tree_get_selection_model:
- * @et: the ETree
- *
- * Returns the selection model of this ETree.
- *
- * Returns: the selection model
- **/
-ESelectionModel *
-e_tree_get_selection_model (ETree *et)
-{
- g_return_val_if_fail (et != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE (et), NULL);
-
- return et->priv->selection;
-}
-
-/**
- * e_tree_get_table_adapter:
- * @et: the ETree
- *
- * Returns the table adapter this ETree uses.
- *
- * Returns: the model
- **/
-ETreeTableAdapter *
-e_tree_get_table_adapter (ETree *et)
-{
- g_return_val_if_fail (et != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE (et), NULL);
-
- return et->priv->etta;
-}
-
-ETableItem *
-e_tree_get_item(ETree * et)
-{
- g_return_val_if_fail (et != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE (et), NULL);
-
- return E_TABLE_ITEM (et->priv->item);
-}
-
-
-struct _ETreeDragSourceSite
-{
- GdkModifierType start_button_mask;
- GtkTargetList *target_list; /* Targets for drag data */
- GdkDragAction actions; /* Possible actions */
- GdkColormap *colormap; /* Colormap for drag icon */
- GdkPixmap *pixmap; /* Icon for drag data */
- GdkBitmap *mask;
-
- /* Stored button press information to detect drag beginning */
- gint state;
- gint x, y;
- gint row, col;
-};
-
-typedef enum
-{
- GTK_DRAG_STATUS_DRAG,
- GTK_DRAG_STATUS_WAIT,
- GTK_DRAG_STATUS_DROP
-} GtkDragStatus;
-
-typedef struct _GtkDragDestInfo GtkDragDestInfo;
-typedef struct _GtkDragSourceInfo GtkDragSourceInfo;
-
-struct _GtkDragDestInfo
-{
- GtkWidget *widget; /* Widget in which drag is in */
- GdkDragContext *context; /* Drag context */
- GtkDragSourceInfo *proxy_source; /* Set if this is a proxy drag */
- GtkSelectionData *proxy_data; /* Set while retrieving proxied data */
- gboolean dropped : 1; /* Set after we receive a drop */
- guint32 proxy_drop_time; /* Timestamp for proxied drop */
- gboolean proxy_drop_wait : 1; /* Set if we are waiting for a
- * status reply before sending
- * a proxied drop on.
- */
- gint drop_x, drop_y; /* Position of drop */
-};
-
-struct _GtkDragSourceInfo
-{
- GtkWidget *widget;
- GtkTargetList *target_list; /* Targets for drag data */
- GdkDragAction possible_actions; /* Actions allowed by source */
- GdkDragContext *context; /* drag context */
- GtkWidget *icon_window; /* Window for drag */
- GtkWidget *ipc_widget; /* GtkInvisible for grab, message passing */
- GdkCursor *cursor; /* Cursor for drag */
- gint hot_x, hot_y; /* Hot spot for drag */
- gint button; /* mouse button starting drag */
-
- GtkDragStatus status; /* drag status */
- GdkEvent *last_event; /* motion event waiting for response */
-
- gint start_x, start_y; /* Initial position */
- gint cur_x, cur_y; /* Current Position */
-
- GList *selections; /* selections we've claimed */
-
- GtkDragDestInfo *proxy_dest; /* Set if this is a proxy drag */
-
- guint drop_timeout; /* Timeout for aborting drop */
- guint destroy_icon : 1; /* If true, destroy icon_window
- */
-};
-
-/* Drag & drop stuff. */
-/* Target */
-
-void
-e_tree_drag_get_data (ETree *tree,
- int row,
- int col,
- GdkDragContext *context,
- GdkAtom target,
- guint32 time)
-{
- ETreePath path;
- g_return_if_fail(tree != NULL);
- g_return_if_fail(E_IS_TREE(tree));
-
- path = e_tree_table_adapter_node_at_row(tree->priv->etta, row);
-
- gtk_drag_get_data(GTK_WIDGET(tree),
- context,
- target,
- time);
-
-}
-
-/**
- * e_tree_drag_highlight:
- * @tree:
- * @row:
- * @col:
- *
- * Set col to -1 to highlight the entire row.
- * Set row to -1 to turn off the highlight.
- */
-void
-e_tree_drag_highlight (ETree *tree,
- int row,
- int col)
-{
- g_return_if_fail(tree != NULL);
- g_return_if_fail(E_IS_TREE(tree));
-
- if (row != -1) {
- int x, y, width, height;
- if (col == -1) {
- e_tree_get_cell_geometry (tree, row, 0, &x, &y, &width, &height);
- x = 0;
- width = GTK_WIDGET (tree->priv->table_canvas)->allocation.width;
- } else {
- e_tree_get_cell_geometry (tree, row, col, &x, &y, &width, &height);
- x += GTK_LAYOUT(tree->priv->table_canvas)->hadjustment->value;
- }
- y += GTK_LAYOUT(tree->priv->table_canvas)->vadjustment->value;
-
- if (tree->priv->drop_highlight == NULL) {
- tree->priv->drop_highlight =
- gnome_canvas_item_new (gnome_canvas_root (tree->priv->table_canvas),
- gnome_canvas_rect_get_type (),
- "fill_color", NULL,
- /* "outline_color", "black",
- "width_pixels", 1,*/
- "outline_color_gdk", &(GTK_WIDGET (tree)->style->fg[GTK_STATE_NORMAL]),
- NULL);
- }
- gnome_canvas_item_set (tree->priv->drop_highlight,
- "x1", (double) x,
- "x2", (double) x + width - 1,
- "y1", (double) y,
- "y2", (double) y + height - 1,
- NULL);
- } else {
- gtk_object_destroy (GTK_OBJECT (tree->priv->drop_highlight));
- tree->priv->drop_highlight = NULL;
- }
-}
-
-void
-e_tree_drag_unhighlight (ETree *tree)
-{
- g_return_if_fail(tree != NULL);
- g_return_if_fail(E_IS_TREE(tree));
-
- if (tree->priv->drop_highlight) {
- gtk_object_destroy (GTK_OBJECT (tree->priv->drop_highlight));
- tree->priv->drop_highlight = NULL;
- }
-}
-
-void e_tree_drag_dest_set (ETree *tree,
- GtkDestDefaults flags,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions)
-{
- g_return_if_fail(tree != NULL);
- g_return_if_fail(E_IS_TREE(tree));
-
- gtk_drag_dest_set(GTK_WIDGET(tree),
- flags,
- targets,
- n_targets,
- actions);
-}
-
-void e_tree_drag_dest_set_proxy (ETree *tree,
- GdkWindow *proxy_window,
- GdkDragProtocol protocol,
- gboolean use_coordinates)
-{
- g_return_if_fail(tree != NULL);
- g_return_if_fail(E_IS_TREE(tree));
-
- gtk_drag_dest_set_proxy(GTK_WIDGET(tree),
- proxy_window,
- protocol,
- use_coordinates);
-}
-
-/*
- * There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-
-void
-e_tree_drag_dest_unset (GtkWidget *widget)
-{
- g_return_if_fail(widget != NULL);
- g_return_if_fail(E_IS_TREE(widget));
-
- gtk_drag_dest_unset(widget);
-}
-
-/* Source side */
-
-static gint
-et_real_start_drag (ETree *tree, int row, ETreePath path, int col, GdkEvent *event)
-{
- GtkDragSourceInfo *info;
- GdkDragContext *context;
- ETreeDragSourceSite *site;
-
- if (tree->priv->do_drag) {
- site = tree->priv->site;
-
- site->state = 0;
- context = e_tree_drag_begin (tree, row, col,
- site->target_list,
- site->actions,
- 1, event);
-
- if (context) {
- info = g_dataset_get_data (context, "gtk-info");
-
- if (info && !info->icon_window) {
- if (site->pixmap)
- gtk_drag_set_icon_pixmap (context,
- site->colormap,
- site->pixmap,
- site->mask, -2, -2);
- else
- gtk_drag_set_icon_default (context);
- }
- }
- return TRUE;
- }
- return FALSE;
-}
-
-void
-e_tree_drag_source_set (ETree *tree,
- GdkModifierType start_button_mask,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions)
-{
- ETreeDragSourceSite *site;
- GtkWidget *canvas;
-
- g_return_if_fail(tree != NULL);
- g_return_if_fail(E_IS_TREE(tree));
-
- canvas = GTK_WIDGET(tree->priv->table_canvas);
- site = tree->priv->site;
-
- tree->priv->do_drag = TRUE;
-
- gtk_widget_add_events (canvas,
- gtk_widget_get_events (canvas) |
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON_MOTION_MASK | GDK_STRUCTURE_MASK);
-
- if (site) {
- if (site->target_list)
- gtk_target_list_unref (site->target_list);
- } else {
- site = g_new0 (ETreeDragSourceSite, 1);
- tree->priv->site = site;
- }
-
- site->start_button_mask = start_button_mask;
-
- if (targets)
- site->target_list = gtk_target_list_new (targets, n_targets);
- else
- site->target_list = NULL;
-
- site->actions = actions;
-}
-
-void
-e_tree_drag_source_unset (ETree *tree)
-{
- ETreeDragSourceSite *site;
-
- g_return_if_fail (tree != NULL);
- g_return_if_fail (E_IS_TREE(tree));
-
- site = tree->priv->site;
-
- if (site) {
- if (site->target_list)
- gtk_target_list_unref (site->target_list);
- g_free (site);
- tree->priv->site = NULL;
- }
-}
-
-/* There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-
-GdkDragContext *
-e_tree_drag_begin (ETree *tree,
- int row,
- int col,
- GtkTargetList *targets,
- GdkDragAction actions,
- gint button,
- GdkEvent *event)
-{
- ETreePath path;
- g_return_val_if_fail (tree != NULL, NULL);
- g_return_val_if_fail (E_IS_TREE(tree), NULL);
-
- path = e_tree_table_adapter_node_at_row(tree->priv->etta, row);
-
- tree->priv->drag_row = row;
- tree->priv->drag_path = path;
- tree->priv->drag_col = col;
-
- return gtk_drag_begin(GTK_WIDGET (tree->priv->table_canvas),
- targets,
- actions,
- button,
- event);
-}
-
-/**
- * e_tree_get_cell_at:
- * @tree: An ETree widget
- * @x: X coordinate for the pixel
- * @y: Y coordinate for the pixel
- * @row_return: Pointer to return the row value
- * @col_return: Pointer to return the column value
- *
- * Return the row and column for the cell in which the pixel at (@x, @y) is
- * contained.
- **/
-void
-e_tree_get_cell_at (ETree *tree,
- int x, int y,
- int *row_return, int *col_return)
-{
- g_return_if_fail (tree != NULL);
- g_return_if_fail (E_IS_TREE (tree));
- g_return_if_fail (row_return != NULL);
- g_return_if_fail (col_return != NULL);
-
- /* FIXME it would be nice if it could handle a NULL row_return or
- * col_return gracefully. */
-
- if (row_return)
- *row_return = -1;
- if (col_return)
- *col_return = -1;
-
- x += GTK_LAYOUT(tree->priv->table_canvas)->hadjustment->value;
- y += GTK_LAYOUT(tree->priv->table_canvas)->vadjustment->value;
- e_table_item_compute_location(E_TABLE_ITEM(tree->priv->item), &x, &y, row_return, col_return);
-}
-
-/**
- * e_tree_get_cell_geometry:
- * @tree: The tree.
- * @row: The row to get the geometry of.
- * @col: The col to get the geometry of.
- * @x_return: Returns the x coordinate of the upper right hand corner of the cell with respect to the widget.
- * @y_return: Returns the y coordinate of the upper right hand corner of the cell with respect to the widget.
- * @width_return: Returns the width of the cell.
- * @height_return: Returns the height of the cell.
- *
- * Computes the data about this cell.
- **/
-void
-e_tree_get_cell_geometry (ETree *tree,
- int row, int col,
- int *x_return, int *y_return,
- int *width_return, int *height_return)
-{
- g_return_if_fail (tree != NULL);
- g_return_if_fail (E_IS_TREE (tree));
- g_return_if_fail (row >= 0);
- g_return_if_fail (col >= 0);
-
- /* FIXME it would be nice if it could handle a NULL row_return or
- * col_return gracefully. */
-
- e_table_item_get_cell_geometry(E_TABLE_ITEM(tree->priv->item), &row, &col, x_return, y_return, width_return, height_return);
-
- if (x_return)
- (*x_return) -= GTK_LAYOUT(tree->priv->table_canvas)->hadjustment->value;
- if (y_return)
- (*y_return) -= GTK_LAYOUT(tree->priv->table_canvas)->vadjustment->value;
-}
-
-static void
-et_drag_begin (GtkWidget *widget,
- GdkDragContext *context,
- ETree *et)
-{
- g_signal_emit (et,
- et_signals [TREE_DRAG_BEGIN], 0,
- et->priv->drag_row,
- et->priv->drag_path,
- et->priv->drag_col,
- context);
-}
-
-static void
-et_drag_end (GtkWidget *widget,
- GdkDragContext *context,
- ETree *et)
-{
- g_signal_emit (et,
- et_signals [TREE_DRAG_END], 0,
- et->priv->drag_row,
- et->priv->drag_path,
- et->priv->drag_col,
- context);
-}
-
-static void
-et_drag_data_get(GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETree *et)
-{
- g_signal_emit (et,
- et_signals [TREE_DRAG_DATA_GET], 0,
- et->priv->drag_row,
- et->priv->drag_path,
- et->priv->drag_col,
- context,
- selection_data,
- info,
- time);
-}
-
-static void
-et_drag_data_delete(GtkWidget *widget,
- GdkDragContext *context,
- ETree *et)
-{
- g_signal_emit (et,
- et_signals [TREE_DRAG_DATA_DELETE], 0,
- et->priv->drag_row,
- et->priv->drag_path,
- et->priv->drag_col,
- context);
-}
-
-static gboolean
-do_drag_motion(ETree *et,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time)
-{
- gboolean ret_val = FALSE;
- int row, col;
- ETreePath path;
- GtkWidget *widget;
-
- widget = GTK_WIDGET (et);
-
- e_tree_get_cell_at (et,
- x,
- y,
- &row,
- &col);
- if (row != et->priv->drop_row && col != et->priv->drop_col) {
- g_signal_emit (et,
- et_signals [TREE_DRAG_LEAVE], 0,
- et->priv->drop_row,
- et->priv->drop_path,
- et->priv->drop_col,
- context,
- time);
- }
-
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
-
- et->priv->drop_row = row;
- et->priv->drop_path = path;
- et->priv->drop_col = col;
- g_signal_emit (et,
- et_signals [TREE_DRAG_MOTION], 0,
- et->priv->drop_row,
- et->priv->drop_path,
- et->priv->drop_col,
- context,
- x,
- y,
- time,
- &ret_val);
-
- return ret_val;
-}
-
-static gboolean
-scroll_timeout (gpointer data)
-{
- ETree *et = data;
- int dx = 0, dy = 0;
- GtkAdjustment *v, *h;
- double vvalue, hvalue;
-
- if (et->priv->scroll_direction & ET_SCROLL_DOWN)
- dy += 20;
- if (et->priv->scroll_direction & ET_SCROLL_UP)
- dy -= 20;
-
- if (et->priv->scroll_direction & ET_SCROLL_RIGHT)
- dx += 20;
- if (et->priv->scroll_direction & ET_SCROLL_LEFT)
- dx -= 20;
-
- h = GTK_LAYOUT(et->priv->table_canvas)->hadjustment;
- v = GTK_LAYOUT(et->priv->table_canvas)->vadjustment;
-
- hvalue = h->value;
- vvalue = v->value;
-
- gtk_adjustment_set_value(h, CLAMP(h->value + dx, h->lower, h->upper - h->page_size));
- gtk_adjustment_set_value(v, CLAMP(v->value + dy, v->lower, v->upper - v->page_size));
-
- if (h->value != hvalue ||
- v->value != vvalue)
- do_drag_motion(et,
- et->priv->last_drop_context,
- et->priv->last_drop_x,
- et->priv->last_drop_y,
- et->priv->last_drop_time);
-
-
- return TRUE;
-}
-
-static void
-scroll_on (ETree *et, guint scroll_direction)
-{
- if (et->priv->scroll_idle_id == 0 || scroll_direction != et->priv->scroll_direction) {
- if (et->priv->scroll_idle_id != 0)
- g_source_remove (et->priv->scroll_idle_id);
- et->priv->scroll_direction = scroll_direction;
- et->priv->scroll_idle_id = g_timeout_add (100, scroll_timeout, et);
- }
-}
-
-static void
-scroll_off (ETree *et)
-{
- if (et->priv->scroll_idle_id) {
- g_source_remove (et->priv->scroll_idle_id);
- et->priv->scroll_idle_id = 0;
- }
-}
-
-static gboolean
-hover_timeout (gpointer data)
-{
- ETree *et = data;
- int x = et->priv->hover_x;
- int y = et->priv->hover_y;
- int row, col;
- ETreePath path;
-
- e_tree_get_cell_at (et,
- x,
- y,
- &row,
- &col);
-
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- if (path && e_tree_model_node_is_expandable (et->priv->model, path)) {
- if (!e_tree_table_adapter_node_is_expanded (et->priv->etta, path)) {
- if (e_tree_model_has_save_id (et->priv->model) && e_tree_model_has_get_node_by_id (et->priv->model))
- et->priv->expanded_list = g_list_prepend (et->priv->expanded_list, e_tree_model_get_save_id (et->priv->model, path));
- e_tree_table_adapter_node_set_expanded (et->priv->etta, path, TRUE);
- }
- }
-
- return TRUE;
-}
-
-static void
-hover_on (ETree *et, int x, int y)
-{
- et->priv->hover_x = x;
- et->priv->hover_y = y;
- if (et->priv->hover_idle_id != 0)
- g_source_remove (et->priv->hover_idle_id);
- et->priv->hover_idle_id = g_timeout_add (500, hover_timeout, et);
-}
-
-static void
-hover_off (ETree *et)
-{
- if (et->priv->hover_idle_id) {
- g_source_remove (et->priv->hover_idle_id);
- et->priv->hover_idle_id = 0;
- }
-}
-
-static void
-collapse_drag (ETree *et, ETreePath drop)
-{
- GList *list;
-
- /* We only want to leave open parents of the node dropped in. Not the node itself. */
- if (drop) {
- drop = e_tree_model_node_get_parent (et->priv->model, drop);
- }
-
- for (list = et->priv->expanded_list; list; list = list->next) {
- char *save_id = list->data;
- ETreePath path;
-
- path = e_tree_model_get_node_by_id (et->priv->model, save_id);
- if (path) {
- ETreePath search;
- gboolean found = FALSE;
-
- for (search = drop; search; search = e_tree_model_node_get_parent (et->priv->model, search)) {
- if (path == search) {
- found = TRUE;
- break;
- }
- }
-
- if (!found)
- e_tree_table_adapter_node_set_expanded (et->priv->etta, path, FALSE);
- }
- g_free (save_id);
- }
- g_list_free (et->priv->expanded_list);
- et->priv->expanded_list = NULL;
-}
-
-static void
-context_destroyed (gpointer data, GObject *ctx)
-{
- ETree *et = data;
- if (et->priv) {
- et->priv->last_drop_x = 0;
- et->priv->last_drop_y = 0;
- et->priv->last_drop_time = 0;
- et->priv->last_drop_context = NULL;
- collapse_drag (et, NULL);
- scroll_off (et);
- hover_off (et);
- }
- g_object_unref (et);
-}
-
-static void
-context_connect (ETree *et, GdkDragContext *context)
-{
- if (context == et->priv->last_drop_context)
- return;
-
- if (et->priv->last_drop_context)
- g_object_weak_unref (G_OBJECT(et->priv->last_drop_context), context_destroyed, et);
- else
- g_object_ref (et);
-
- g_object_weak_ref (G_OBJECT(context), context_destroyed, et);
-}
-
-static void
-et_drag_leave(GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- ETree *et)
-{
- g_signal_emit (et,
- et_signals [TREE_DRAG_LEAVE], 0,
- et->priv->drop_row,
- et->priv->drop_path,
- et->priv->drop_col,
- context,
- time);
- et->priv->drop_row = -1;
- et->priv->drop_col = -1;
-
- scroll_off (et);
- hover_off (et);
-}
-
-static gboolean
-et_drag_motion(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETree *et)
-{
- int ret_val;
- guint direction = 0;
-
- et->priv->last_drop_x = x;
- et->priv->last_drop_y = y;
- et->priv->last_drop_time = time;
- context_connect (et, context);
- et->priv->last_drop_context = context;
-
- if (et->priv->hover_idle_id != 0) {
- if (abs (et->priv->hover_x - x) > 3 ||
- abs (et->priv->hover_y - y) > 3) {
- hover_on (et, x, y);
- }
- } else {
- hover_on (et, x, y);
- }
-
- ret_val = do_drag_motion (et,
- context,
- x,
- y,
- time);
-
- if (y < 20)
- direction |= ET_SCROLL_UP;
- if (y > widget->allocation.height - 20)
- direction |= ET_SCROLL_DOWN;
- if (x < 20)
- direction |= ET_SCROLL_LEFT;
- if (x > widget->allocation.width - 20)
- direction |= ET_SCROLL_RIGHT;
-
- if (direction != 0)
- scroll_on (et, direction);
- else
- scroll_off (et);
-
- return ret_val;
-}
-
-static gboolean
-et_drag_drop(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- ETree *et)
-{
- gboolean ret_val = FALSE;
- int row, col;
- ETreePath path;
- e_tree_get_cell_at(et,
- x,
- y,
- &row,
- &col);
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
-
- if (row != et->priv->drop_row && col != et->priv->drop_row) {
- g_signal_emit (et,
- et_signals [TREE_DRAG_LEAVE], 0,
- et->priv->drop_row,
- et->priv->drop_path,
- et->priv->drop_col,
- context,
- time);
- g_signal_emit (et,
- et_signals [TREE_DRAG_MOTION], 0,
- row,
- path,
- col,
- context,
- x,
- y,
- time,
- &ret_val);
- }
- et->priv->drop_row = row;
- et->priv->drop_path = path;
- et->priv->drop_col = col;
-
- g_signal_emit (et,
- et_signals [TREE_DRAG_DROP], 0,
- et->priv->drop_row,
- et->priv->drop_path,
- et->priv->drop_col,
- context,
- x,
- y,
- time,
- &ret_val);
-
- et->priv->drop_row = -1;
- et->priv->drop_path = NULL;
- et->priv->drop_col = -1;
-
- collapse_drag (et, path);
-
- scroll_off (et);
- return ret_val;
-}
-
-static void
-et_drag_data_received(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ETree *et)
-{
- int row, col;
- ETreePath path;
- e_tree_get_cell_at(et,
- x,
- y,
- &row,
- &col);
- path = e_tree_table_adapter_node_at_row(et->priv->etta, row);
- g_signal_emit (et,
- et_signals [TREE_DRAG_DATA_RECEIVED], 0,
- row,
- path,
- col,
- context,
- x,
- y,
- selection_data,
- info,
- time);
-}
-
-static void
-e_tree_class_init (ETreeClass *class)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
- GtkContainerClass *container_class;
-
- object_class = (GObjectClass *) class;
- widget_class = (GtkWidgetClass *) class;
- container_class = (GtkContainerClass *) class;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = et_dispose;
- object_class->set_property = et_set_property;
- object_class->get_property = et_get_property;
-
- widget_class->grab_focus = et_grab_focus;
- widget_class->unrealize = et_unrealize;
- widget_class->style_set = et_canvas_style_set;
- widget_class->focus = et_focus;
-
- class->cursor_change = NULL;
- class->cursor_activated = NULL;
- class->selection_change = NULL;
- class->double_click = NULL;
- class->right_click = NULL;
- class->click = NULL;
- class->key_press = NULL;
- class->start_drag = et_real_start_drag;
- class->state_change = NULL;
- class->white_space_event = NULL;
-
- class->tree_drag_begin = NULL;
- class->tree_drag_end = NULL;
- class->tree_drag_data_get = NULL;
- class->tree_drag_data_delete = NULL;
-
- class->tree_drag_leave = NULL;
- class->tree_drag_motion = NULL;
- class->tree_drag_drop = NULL;
- class->tree_drag_data_received = NULL;
-
- et_signals [CURSOR_CHANGE] =
- g_signal_new ("cursor_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, cursor_change),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER);
-
- et_signals [CURSOR_ACTIVATED] =
- g_signal_new ("cursor_activated",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, cursor_activated),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER);
-
- et_signals [SELECTION_CHANGE] =
- g_signal_new ("selection_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, selection_change),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- et_signals [DOUBLE_CLICK] =
- g_signal_new ("double_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, double_click),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_BOXED,
- G_TYPE_NONE, 4, G_TYPE_INT,
- G_TYPE_POINTER, G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [RIGHT_CLICK] =
- g_signal_new ("right_click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, right_click),
- NULL, NULL,
- e_marshal_INT__INT_POINTER_INT_BOXED,
- G_TYPE_INT, 4, G_TYPE_INT, G_TYPE_POINTER,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [CLICK] =
- g_signal_new ("click",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, click),
- NULL, NULL,
- e_marshal_INT__INT_POINTER_INT_BOXED,
- G_TYPE_INT, 4, G_TYPE_INT, G_TYPE_POINTER,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [KEY_PRESS] =
- g_signal_new ("key_press",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, key_press),
- NULL, NULL,
- e_marshal_INT__INT_POINTER_INT_BOXED,
- G_TYPE_INT, 4, G_TYPE_INT, G_TYPE_POINTER,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [START_DRAG] =
- g_signal_new ("start_drag",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, start_drag),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_BOXED,
- G_TYPE_NONE, 4, G_TYPE_INT, G_TYPE_POINTER,
- G_TYPE_INT, GDK_TYPE_EVENT);
-
- et_signals [STATE_CHANGE] =
- g_signal_new ("state_change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, state_change),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- et_signals [WHITE_SPACE_EVENT] =
- g_signal_new ("white_space_event",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, white_space_event),
- NULL, NULL,
- e_marshal_INT__POINTER,
- G_TYPE_INT, 1, GDK_TYPE_EVENT);
-
- et_signals[TREE_DRAG_BEGIN] =
- g_signal_new ("tree_drag_begin",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_begin),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_BOXED,
- G_TYPE_NONE, 4,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT);
- et_signals[TREE_DRAG_END] =
- g_signal_new ("tree_drag_end",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_end),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_BOXED,
- G_TYPE_NONE, 4,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT);
- et_signals[TREE_DRAG_DATA_GET] =
- g_signal_new ("tree_drag_data_get",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_data_get),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_OBJECT_BOXED_UINT_UINT,
- G_TYPE_NONE, 7,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- GTK_TYPE_SELECTION_DATA | G_SIGNAL_TYPE_STATIC_SCOPE,
- G_TYPE_UINT,
- G_TYPE_UINT);
- et_signals[TREE_DRAG_DATA_DELETE] =
- g_signal_new ("tree_drag_data_delete",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_data_delete),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_OBJECT,
- G_TYPE_NONE, 4,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT);
-
- et_signals[TREE_DRAG_LEAVE] =
- g_signal_new ("tree_drag_leave",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_leave),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_OBJECT_UINT,
- G_TYPE_NONE, 5,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_UINT);
- et_signals[TREE_DRAG_MOTION] =
- g_signal_new ("tree_drag_motion",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_motion),
- NULL, NULL,
- e_marshal_BOOLEAN__INT_POINTER_INT_OBJECT_INT_INT_UINT,
- G_TYPE_BOOLEAN, 7,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_INT,
- G_TYPE_INT,
- G_TYPE_UINT);
- et_signals[TREE_DRAG_DROP] =
- g_signal_new ("tree_drag_drop",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_drop),
- NULL, NULL,
- e_marshal_BOOLEAN__INT_POINTER_INT_OBJECT_INT_INT_UINT,
- G_TYPE_BOOLEAN, 7,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_INT,
- G_TYPE_INT,
- G_TYPE_UINT);
- et_signals[TREE_DRAG_DATA_RECEIVED] =
- g_signal_new ("tree_drag_data_received",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, tree_drag_data_received),
- NULL, NULL,
- e_marshal_NONE__INT_POINTER_INT_OBJECT_INT_INT_BOXED_UINT_UINT,
- G_TYPE_NONE, 9,
- G_TYPE_INT,
- G_TYPE_POINTER,
- G_TYPE_INT,
- GDK_TYPE_DRAG_CONTEXT,
- G_TYPE_INT,
- G_TYPE_INT,
- GTK_TYPE_SELECTION_DATA,
- G_TYPE_UINT,
- G_TYPE_UINT);
-
- class->set_scroll_adjustments = set_scroll_adjustments;
-
- widget_class->set_scroll_adjustments_signal =
- g_signal_new ("set_scroll_adjustments",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETreeClass, set_scroll_adjustments),
- NULL, NULL,
- e_marshal_NONE__POINTER_POINTER,
- G_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT,
- GTK_TYPE_ADJUSTMENT);
-
- g_object_class_install_property (object_class, PROP_LENGTH_THRESHOLD,
- g_param_spec_int ("length_threshold",
- _( "Length Threshold" ),
- _( "Length Threshold" ),
- 0, G_MAXINT, 0,
- G_PARAM_WRITABLE));
- g_object_class_install_property (object_class, PROP_HORIZONTAL_DRAW_GRID,
- g_param_spec_boolean ("horizontal_draw_grid",
- _( "Horizontal Draw Grid" ),
- _( "Horizontal Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
- g_object_class_install_property (object_class, PROP_VERTICAL_DRAW_GRID,
- g_param_spec_boolean ("vertical_draw_grid",
- _( "Vertical Draw Grid" ),
- _( "Vertical Draw Grid" ),
- FALSE,
- G_PARAM_WRITABLE));
- g_object_class_install_property (object_class, PROP_DRAW_FOCUS,
- g_param_spec_boolean ("drawfocus",
- _( "Draw focus" ),
- _( "Draw focus" ),
- FALSE,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_ETTA,
- g_param_spec_object ("ETreeTableAdapter",
- _( "ETree table adapter" ),
- _( "ETree table adapter" ),
- E_TREE_TABLE_ADAPTER_TYPE,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_UNIFORM_ROW_HEIGHT,
- g_param_spec_boolean ("uniform_row_height",
- _( "Uniform row height" ),
- _( "Uniform row height" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ALWAYS_SEARCH,
- g_param_spec_boolean ("always_search",
- _( "Always search" ),
- _( "Always search" ),
- FALSE,
- G_PARAM_READWRITE));
-
- gtk_widget_class_install_style_property (widget_class,
- g_param_spec_boolean ("retro_look",
- _("Retro Look"),
- _("Draw lines and +/- expanders."),
- FALSE,
- G_PARAM_READABLE));
-
- gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("expander_size",
- _("Expander Size"),
- _("Size of the expander arrow"),
- 0,
- G_MAXINT,
- 10,
- G_PARAM_READABLE));
-
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TREE_TYPE,
- gal_a11y_e_tree_factory_get_type ());
-
-}
-
-E_MAKE_TYPE(e_tree, "ETree", ETree, e_tree_class_init, e_tree_init, PARENT_TYPE)
diff --git a/widgets/table/e-tree.h b/widgets/table/e-tree.h
deleted file mode 100644
index 197ef05fef..0000000000
--- a/widgets/table/e-tree.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-tree.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_TREE_H_
-#define _E_TREE_H_
-
-#include <gtk/gtkdnd.h>
-#include <gtk/gtktable.h>
-#include <libxml/tree.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gal/widgets/e-printable.h>
-
-#include <gal/e-table/e-table-extras.h>
-#include <gal/e-table/e-table-specification.h>
-#include <gal/e-table/e-table-state.h>
-#include <gal/e-table/e-tree-model.h>
-#include <gal/e-table/e-tree-table-adapter.h>
-#include <gal/e-table/e-table-item.h>
-
-#define E_TREE_USE_TREE_SELECTION
-
-#ifdef E_TREE_USE_TREE_SELECTION
-#include <gal/e-table/e-tree-selection-model.h>
-#endif
-
-G_BEGIN_DECLS
-
-#define E_TREE_TYPE (e_tree_get_type ())
-#define E_TREE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_TYPE, ETree))
-#define E_TREE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_TYPE, ETreeClass))
-#define E_IS_TREE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_TYPE))
-#define E_IS_TREE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_TYPE))
-typedef struct _ETreeDragSourceSite ETreeDragSourceSite;
-typedef struct ETreePriv ETreePriv;
-
-typedef struct {
- GtkTable parent;
-
- ETreePriv *priv;
-} ETree;
-
-typedef struct {
- GtkTableClass parent_class;
-
- void (*cursor_change) (ETree *et, int row, ETreePath path);
- void (*cursor_activated) (ETree *et, int row, ETreePath path);
- void (*selection_change) (ETree *et);
- void (*double_click) (ETree *et, int row, ETreePath path, int col, GdkEvent *event);
- gint (*right_click) (ETree *et, int row, ETreePath path, int col, GdkEvent *event);
- gint (*click) (ETree *et, int row, ETreePath path, int col, GdkEvent *event);
- gint (*key_press) (ETree *et, int row, ETreePath path, int col, GdkEvent *event);
- gint (*start_drag) (ETree *et, int row, ETreePath path, int col, GdkEvent *event);
- gint (*state_change) (ETree *et);
- gint (*white_space_event) (ETree *et, GdkEvent *event);
-
- void (*set_scroll_adjustments) (ETree *tree,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment);
-
- /* Source side drag signals */
- void (* tree_drag_begin) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context);
- void (* tree_drag_end) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context);
- void (* tree_drag_data_get) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time);
- void (* tree_drag_data_delete) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context);
-
- /* Target side drag signals */
- void (* tree_drag_leave) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- guint time);
- gboolean (* tree_drag_motion) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time);
- gboolean (* tree_drag_drop) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time);
- void (* tree_drag_data_received) (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time);
-} ETreeClass;
-
-GType e_tree_get_type (void);
-ETree *e_tree_construct (ETree *e_tree,
- ETreeModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-GtkWidget *e_tree_new (ETreeModel *etm,
- ETableExtras *ete,
- const char *spec,
- const char *state);
-
-/* Create an ETree using files. */
-ETree *e_tree_construct_from_spec_file (ETree *e_tree,
- ETreeModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-GtkWidget *e_tree_new_from_spec_file (ETreeModel *etm,
- ETableExtras *ete,
- const char *spec_fn,
- const char *state_fn);
-
-/* To save the state */
-gchar *e_tree_get_state (ETree *e_tree);
-void e_tree_save_state (ETree *e_tree,
- const gchar *filename);
-ETableState *e_tree_get_state_object (ETree *e_tree);
-ETableSpecification *e_tree_get_spec (ETree *e_tree);
-
-/* note that it is more efficient to provide the state at creation time */
-void e_tree_set_search_column (ETree *e_tree,
- gint col);
-void e_tree_set_state (ETree *e_tree,
- const gchar *state);
-void e_tree_set_state_object (ETree *e_tree,
- ETableState *state);
-void e_tree_load_state (ETree *e_tree,
- const gchar *filename);
-void e_tree_set_cursor (ETree *e_tree,
- ETreePath path);
-
-/* NULL means we don't have the cursor. */
-ETreePath e_tree_get_cursor (ETree *e_tree);
-void e_tree_selected_row_foreach (ETree *e_tree,
- EForeachFunc callback,
- gpointer closure);
-#ifdef E_TREE_USE_TREE_SELECTION
-void e_tree_selected_path_foreach (ETree *e_tree,
- ETreeForeachFunc callback,
- gpointer closure);
-void e_tree_path_foreach (ETree *e_tree,
- ETreeForeachFunc callback,
- gpointer closure);
-#endif
-gint e_tree_selected_count (ETree *e_tree);
-EPrintable *e_tree_get_printable (ETree *e_tree);
-gint e_tree_get_next_row (ETree *e_tree,
- gint model_row);
-gint e_tree_get_prev_row (ETree *e_tree,
- gint model_row);
-gint e_tree_model_to_view_row (ETree *e_tree,
- gint model_row);
-gint e_tree_view_to_model_row (ETree *e_tree,
- gint view_row);
-void e_tree_get_cell_at (ETree *tree,
- int x,
- int y,
- int *row_return,
- int *col_return);
-void e_tree_get_cell_geometry (ETree *tree,
- int row,
- int col,
- int *x_return,
- int *y_return,
- int *width_return,
- int *height_return);
-
-/* Useful accessors */
-ETreeModel * e_tree_get_model (ETree *et);
-ESelectionModel *e_tree_get_selection_model (ETree *et);
-ETreeTableAdapter *e_tree_get_table_adapter (ETree *et);
-
-/* Drag & drop stuff. */
-/* Target */
-void e_tree_drag_get_data (ETree *tree,
- int row,
- int col,
- GdkDragContext *context,
- GdkAtom target,
- guint32 time);
-void e_tree_drag_highlight (ETree *tree,
- int row,
- int col); /* col == -1 to highlight entire row. */
-void e_tree_drag_unhighlight (ETree *tree);
-void e_tree_drag_dest_set (ETree *tree,
- GtkDestDefaults flags,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions);
-void e_tree_drag_dest_set_proxy (ETree *tree,
- GdkWindow *proxy_window,
- GdkDragProtocol protocol,
- gboolean use_coordinates);
-
-/* There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-void e_tree_drag_dest_unset (GtkWidget *widget);
-
-/* Source side */
-void e_tree_drag_source_set (ETree *tree,
- GdkModifierType start_button_mask,
- const GtkTargetEntry *targets,
- gint n_targets,
- GdkDragAction actions);
-void e_tree_drag_source_unset (ETree *tree);
-
-/* There probably should be functions for setting the targets
- * as a GtkTargetList
- */
-GdkDragContext *e_tree_drag_begin (ETree *tree,
- int row,
- int col,
- GtkTargetList *targets,
- GdkDragAction actions,
- gint button,
- GdkEvent *event);
-
-/* Adapter functions */
-gboolean e_tree_node_is_expanded (ETree *et,
- ETreePath path);
-void e_tree_node_set_expanded (ETree *et,
- ETreePath path,
- gboolean expanded);
-void e_tree_node_set_expanded_recurse (ETree *et,
- ETreePath path,
- gboolean expanded);
-void e_tree_root_node_set_visible (ETree *et,
- gboolean visible);
-ETreePath e_tree_node_at_row (ETree *et,
- int row);
-int e_tree_row_of_node (ETree *et,
- ETreePath path);
-gboolean e_tree_root_node_is_visible (ETree *et);
-void e_tree_show_node (ETree *et,
- ETreePath path);
-void e_tree_save_expanded_state (ETree *et,
- char *filename);
-void e_tree_load_expanded_state (ETree *et,
- char *filename);
-int e_tree_row_count (ETree *et);
-GtkWidget *e_tree_get_tooltip (ETree *et);
-
-typedef enum {
- E_TREE_FIND_NEXT_BACKWARD = 0,
- E_TREE_FIND_NEXT_FORWARD = 1 << 0,
- E_TREE_FIND_NEXT_WRAP = 1 << 1
-} ETreeFindNextParams;
-
-gboolean e_tree_find_next (ETree *et,
- ETreeFindNextParams params,
- ETreePathFunc func,
- gpointer data);
-
-/* This function is only needed in single_selection_mode. */
-void e_tree_right_click_up (ETree *et);
-
-ETableItem * e_tree_get_item(ETree * et);
-
-G_END_DECLS
-
-#endif /* _E_TREE_H_ */
-
diff --git a/widgets/table/image1.png b/widgets/table/image1.png
deleted file mode 100644
index 8326ac241f..0000000000
--- a/widgets/table/image1.png
+++ /dev/null
Binary files differ
diff --git a/widgets/table/image2.png b/widgets/table/image2.png
deleted file mode 100644
index e6a4c75dbe..0000000000
--- a/widgets/table/image2.png
+++ /dev/null
Binary files differ
diff --git a/widgets/table/image3.png b/widgets/table/image3.png
deleted file mode 100644
index 50e16e8620..0000000000
--- a/widgets/table/image3.png
+++ /dev/null
Binary files differ
diff --git a/widgets/table/remove-col.xpm b/widgets/table/remove-col.xpm
deleted file mode 100644
index ff1024f0c9..0000000000
--- a/widgets/table/remove-col.xpm
+++ /dev/null
@@ -1,22 +0,0 @@
-/* XPM */
-static char * remove_col_xpm[] = {
-"16 16 3 1",
-" c None",
-". c #000000",
-"+ c #FF0000",
-"... ...",
-".++. .++.",
-".+++. .+++.",
-" .+++. .+++. ",
-" .+++. .+++. ",
-" .+++..+++. ",
-" .++++++. ",
-" .++++. ",
-" .++++. ",
-" .++++++. ",
-" .+++..+++. ",
-" .+++. .+++. ",
-" .+++. .+++. ",
-".+++. .+++.",
-".++. .++.",
-"... ..."};
diff --git a/widgets/table/sample.table b/widgets/table/sample.table
deleted file mode 100644
index e1909a2bf7..0000000000
--- a/widgets/table/sample.table
+++ /dev/null
@@ -1,45 +0,0 @@
-Col1 Col2 Address Title Dorks
-c1.a c2.a a.a tit-1 DorkA
-c1.b c2.b a.b tit-2 DDork
-c1.c c2.c a.c tit-1 DorkB
-c1.d c2.d a.d tit-2 ADork
-c1.e c2.e a.e tit-1 DorkC
-c1.f c2.f a.f tit-2 UDork
-c1.g c2.g a.g tit-3 Dork---
-j k k tit-1 DorkA
-aaa1 bbb ccc ddd eee
-aaa2 bbb ccc ddd eee
-aaa3 bbb ccc ddd eee
-aaa4 bbb ccc ddd eee
-aaa5 bbb ccc ddd eee
-aaa6 bbb ccc ddd eee
-aaa7 bbb ccc ddd eee
-aaa8 bbb ccc ddd eee
-aaa9 bbb ccc ddd eee
-aaa10 bbb ccc ddd eee
-aaa11 bbb ccc ddd eee
-aaa12 bbb ccc ddd eee
-aaa13 bbb ccc ddd eee
-aaa14 bbb ccc ddd eee
-aaa15 bbb ccc ddd eee
-aaa16 bbb ccc ddd eee
-aaa17 bbb ccc ddd eee
-aaa18 bbb ccc ddd eee
-aaa19 bbb ccc ddd eee
-aaa20 bbb ccc ddd eee
-aaa21 bbb ccc ddd eee
-aaa22 bbb ccc ddd eee
-aaa23 bbb ccc ddd eee
-aaa24 bbb ccc ddd eee
-aaa25 bbb ccc ddd eee
-aaa26 bbb ccc ddd eee
-aaa27 bbb ccc ddd eee
-aaa28 bbb ccc ddd eee
-aaa29 bbb ccc ddd eee
-aaa30 bbb ccc ddd eee
-aaa31 bbb ccc ddd eee
-aaa32 bbb ccc ddd eee
-aaa33 bbb ccc ddd eee
-aaa34 bbb ccc ddd eee
-aaa35 bbb ccc ddd eee
-aaa36 bbb ccc ddd eee
diff --git a/widgets/table/spec.xml b/widgets/table/spec.xml
deleted file mode 100644
index a8e524484c..0000000000
--- a/widgets/table/spec.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<ETableSpecification no-headers="false" click-to-add="false"
- draw-grid="true" cursor-mode="simple"
- _click-to-add-message="">
- <ETableColumn model_col="0" _title="Email" expansion="1.0" minimum_width="20" resizable="true" cell="cell_left_just" compare="string"/>
- <ETableColumn model_col="1" _title="Full Name" expansion="1.0" minimum_width="20" resizable="true" cell="cell_left_just" compare="string"/>
- <ETableColumn model_col="2" _title="Address" expansion="1.0" minimum_width="20" resizable="true" cell="cell_left_just" compare="string"/>
- <ETableColumn model_col="3" _title="Phone" expansion="1.0" minimum_width="20" resizable="true" cell="cell_left_just" compare="string"/>
- <ETableState>
- <column source="0"/>
- <column source="3"/>
- <column source="1"/>
- <column source="2"/>
- <grouping>
- <group column="2" ascending="true">
- <leaf column="1" ascending="true"/>
- </group>
- </grouping>
- <!-- Column that's been added by hand. Not implemented yet.
- <ETableColumn model_col="custom-string" _title="Custom" expansion="1.0" minimum_widgth="20" resizable="true" cell="string" compare="string"/> -->
- </ETableState>
-</ETableSpecification>
diff --git a/widgets/table/table-test.c b/widgets/table/table-test.c
deleted file mode 100644
index fe211e9d21..0000000000
--- a/widgets/table/table-test.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * table-test.c
- * Copyright 1999, 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <fcntl.h>
-#include <gnome.h>
-#include "gal/widgets/e-cursors.h"
-#include "table-test.h"
-
-int
-main (int argc, char *argv [])
-{
-
- if (isatty (0)){
- int fd;
-
- close (0);
- fd = open ("sample.table", O_RDONLY);
- if (fd == -1){
- fprintf (stderr, "Could not find sample.table, try feeding a table on stdin");
- exit (1);
- }
- dup2 (fd, 0);
- }
-
- gnome_init ("TableTest", "TableTest", argc, argv);
- e_cursors_init ();
-
-
-/* table_browser_test (); */
-/* multi_cols_test (); */
-/* check_test (); */
-
- e_table_test ();
-
- gtk_main ();
-
- e_cursors_shutdown ();
- return 0;
-}
diff --git a/widgets/table/table-test.h b/widgets/table/table-test.h
deleted file mode 100644
index d0442ca64b..0000000000
--- a/widgets/table/table-test.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * table-test.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-void table_browser_test (void);
-void multi_cols_test (void);
-void check_test (void);
-void e_table_test (void);
diff --git a/widgets/table/test-check.c b/widgets/table/test-check.c
deleted file mode 100644
index 7fe4c126e6..0000000000
--- a/widgets/table/test-check.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * test-check.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <gnome.h>
-#include "e-table-simple.h"
-#include "e-table-header.h"
-#include "e-table-header-item.h"
-#include "e-table-item.h"
-#include "gal/widgets/e-cursors.h"
-#include "gal/widgets/e-canvas-utils.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/util/e-util.h"
-#include "e-cell-text.h"
-#include "e-cell-checkbox.h"
-
-#include "table-test.h"
-
-#define LINES 4
-
-static struct {
- int value;
- char *string;
-} my_table [LINES] = {
- { 0, "Buy food" },
- { 1, "Breathe " },
- { 0, "Cancel gdb session with shrink" },
- { 1, "Make screenshots" },
-};
-/*
- * ETableSimple callbacks
- */
-static int
-col_count (ETableModel *etc, void *data)
-{
- return 2;
-}
-
-static int
-row_count (ETableModel *etc, void *data)
-{
- return LINES;
-}
-
-static void *
-value_at (ETableModel *etc, int col, int row, void *data)
-{
- g_assert (col < 2);
- g_assert (row < LINES);
-
- if (col == 0)
- return GINT_TO_POINTER (my_table [row].value);
- else
- return my_table [row].string;
-
-}
-
-static void
-set_value_at (ETableModel *etc, int col, int row, const void *val, void *data)
-{
- g_assert (col < 2);
- g_assert (row < LINES);
-
- if (col == 0) {
- my_table [row].value = GPOINTER_TO_INT (val);
- printf ("Value at %d,%d set to %d\n", col, row, GPOINTER_TO_INT (val));
- } else {
- my_table [row].string = g_strdup (val);
- printf ("Value at %d,%d set to %s\n", col, row, (char *) val);
- }
-}
-
-static gboolean
-is_cell_editable (ETableModel *etc, int col, int row, void *data)
-{
- return TRUE;
-}
-
-static void *
-duplicate_value (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == 0) {
- return (void *) value;
- } else {
- return g_strdup (value);
- }
-}
-
-static void
-free_value (ETableModel *etc, int col, void *value, void *data)
-{
- if (col != 0) {
- g_free (value);
- }
-}
-
-static void *
-initialize_value (ETableModel *etc, int col, void *data)
-{
- if (col == 0)
- return NULL;
- else
- return g_strdup ("");
-}
-
-static gboolean
-value_is_empty (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == 0)
- return value == NULL;
- else
- return !(value && *(char *)value);
-}
-
-static char *
-value_to_string (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == 0)
- return g_strdup_printf("%d", (int) value);
- else
- return g_strdup(value);
-}
-
-static void
-set_canvas_size (GnomeCanvas *canvas, GtkAllocation *alloc)
-{
- gnome_canvas_set_scroll_region (canvas, 0, 0, alloc->width, alloc->height);
-}
-
-void
-check_test (void)
-{
- GtkWidget *canvas, *window;
- ETableModel *e_table_model;
- ETableHeader *e_table_header;
- ETableCol *col_0, *col_1;
- ECell *cell_left_just, *cell_image_check;
- GdkPixbuf *pixbuf;
- GnomeCanvasItem *item;
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
- e_table_model = e_table_simple_new (
- col_count, row_count, value_at,
- set_value_at, is_cell_editable,
- duplicate_value, free_value,
- initialize_value, value_is_empty,
- value_to_string,
- NULL);
-
- /*
- * Header
- */
- e_table_header = e_table_header_new ();
-
- cell_left_just = e_cell_text_new (e_table_model, NULL, GTK_JUSTIFY_LEFT);
-
- cell_image_check = e_cell_checkbox_new ();
- pixbuf = gdk_pixbuf_new_from_file ("clip.png");
- col_0 = e_table_col_new_with_pixbuf (0, pixbuf, 0.0, 18, cell_image_check, g_int_compare, TRUE);
- gdk_pixbuf_unref (pixbuf);
- e_table_header_add_column (e_table_header, col_0, 0);
-
- col_1 = e_table_col_new (1, "Item Name", 1.0, 20, cell_left_just, g_str_compare, TRUE);
- e_table_header_add_column (e_table_header, col_1, 1);
- e_table_col_set_arrow (col_1, E_TABLE_COL_ARROW_DOWN);
-
- /*
- * GUI
- */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- canvas = e_canvas_new ();
-
- g_signal_connect (canvas, "size_allocate",
- G_CALLBACK (set_canvas_size), NULL);
-
- gtk_container_add (GTK_CONTAINER (window), canvas);
- gtk_widget_show_all (window);
- gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_table_header_item_get_type (),
- "ETableHeader", e_table_header,
- NULL);
-
- item = gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_table_item_get_type (),
- "ETableHeader", e_table_header,
- "ETableModel", e_table_model,
- "drawgrid", TRUE,
- "drawfocus", TRUE,
-#if 0
- "spreadsheet", TRUE,
-#endif
- "cursor_mode", E_TABLE_CURSOR_SIMPLE,
- NULL);
- e_canvas_item_move_absolute (item, 0, 30);
-}
-
diff --git a/widgets/table/test-cols.c b/widgets/table/test-cols.c
deleted file mode 100644
index e4873633e5..0000000000
--- a/widgets/table/test-cols.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * test-cols.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <gnome.h>
-#include "gal/widgets/e-canvas-utils.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-cursors.h"
-#include "gal/util/e-util.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-toggle.h"
-
-#include "table-test.h"
-
-#define LINES 4
-
-static struct {
- int value;
- char *string;
-} my_table [LINES] = {
- { 0, "You are not" },
- { 1, "A beautiful and unique " },
- { 0, "Snowflake" },
- { 2, "You are not your wallet" },
-};
-/*
- * ETableSimple callbacks
- */
-static int
-col_count (ETableModel *etc, void *data)
-{
- return 2;
-}
-
-static int
-row_count (ETableModel *etc, void *data)
-{
- return LINES;
-}
-
-static void *
-value_at (ETableModel *etc, int col, int row, void *data)
-{
- g_assert (col < 2);
- g_assert (row < LINES);
-
- if (col == 0)
- return GINT_TO_POINTER (my_table [row].value);
- else
- return my_table [row].string;
-
-}
-
-static void
-set_value_at (ETableModel *etc, int col, int row, const void *val, void *data)
-{
- g_assert (col < 2);
- g_assert (row < LINES);
-
- if (col == 0){
- my_table [row].value = GPOINTER_TO_INT (val);
- printf ("Value at %d,%d set to %d\n", col, row, GPOINTER_TO_INT (val));
- } else {
- my_table [row].string = g_strdup (val);
- printf ("Value at %d,%d set to %s\n", col, row, (char *) val);
- }
-}
-
-static gboolean
-is_cell_editable (ETableModel *etc, int col, int row, void *data)
-{
- return TRUE;
-}
-
-static void *
-duplicate_value (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == 0){
- return (void *)value;
- } else {
- return g_strdup (value);
- }
-}
-
-static void
-free_value (ETableModel *etc, int col, void *value, void *data)
-{
- if (col != 0){
- g_free (value);
- }
-}
-
-static void *
-initialize_value (ETableModel *etc, int col, void *data)
-{
- if (col == 0)
- return NULL;
- else
- return g_strdup ("");
-}
-
-static gboolean
-value_is_empty (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == 0)
- return value == NULL;
- else
- return !(value && *(char *)value);
-}
-
-static char *
-value_to_string (ETableModel *etc, int col, const void *value, void *data)
-{
- if (col == 0)
- return g_strdup_printf("%d", (int) value);
- else
- return g_strdup(value);
-}
-
-static void
-set_canvas_size (GnomeCanvas *canvas, GtkAllocation *alloc)
-{
- gnome_canvas_set_scroll_region (canvas, 0, 0, alloc->width, alloc->height);
-}
-
-void
-multi_cols_test (void)
-{
- GtkWidget *canvas, *window;
- ETableModel *e_table_model;
- ETableHeader *e_table_header, *e_table_header_multiple;
- ETableCol *col_0, *col_1;
- ECell *cell_left_just, *cell_image_toggle;
- GnomeCanvasItem *item;
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
- e_table_model = e_table_simple_new (
- col_count, row_count, value_at,
- set_value_at, is_cell_editable,
- duplicate_value, free_value,
- initialize_value, value_is_empty,
- value_to_string,
- NULL);
-
- /*
- * Header
- */
- e_table_header = e_table_header_new ();
-
- cell_left_just = e_cell_text_new (e_table_model, NULL, GTK_JUSTIFY_LEFT);
-
- {
- GdkPixbuf **images = g_new (GdkPixbuf *, 3);
- int i;
-
- images [0] = gdk_pixbuf_new_from_file ("image1.png");
- images [1] = gdk_pixbuf_new_from_file ("image2.png");
- images [2] = gdk_pixbuf_new_from_file ("image3.png");
-
- cell_image_toggle = e_cell_toggle_new (0, 3, images);
-
- for (i = 0; i < 3; i++)
- gdk_pixbuf_unref (images [i]);
-
- g_free (images);
- }
-
- col_1 = e_table_col_new (1, "Item Name", 1.0, 20, cell_left_just, g_str_compare, TRUE);
- e_table_header_add_column (e_table_header, col_1, 0);
-
- col_0 = e_table_col_new (0, "A", 0.0, 48, cell_image_toggle, g_int_compare, TRUE);
- e_table_header_add_column (e_table_header, col_0, 1);
-
- /*
- * Second test
- */
- e_table_header_multiple = e_table_header_new ();
- e_table_header_add_column (e_table_header_multiple, col_0, 0);
- e_table_header_add_column (e_table_header_multiple, col_1, 1);
- e_table_header_add_column (e_table_header_multiple, col_1, 2);
-
- /*
- * GUI
- */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- canvas = e_canvas_new ();
-
- g_signal_connect (canvas, "size_allocate",
- G_CALLBACK (set_canvas_size), NULL);
-
- gtk_container_add (GTK_CONTAINER (window), canvas);
- gtk_widget_show_all (window);
-
- gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_table_header_item_get_type (),
- "ETableHeader", e_table_header,
- NULL);
-
- item = gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_table_item_get_type (),
- "ETableHeader", e_table_header,
- "ETableModel", e_table_model,
- "drawgrid", TRUE,
- "drawfocus", TRUE,
- "cursor_mode", E_TABLE_CURSOR_SIMPLE,
-#if 0
- "spreadsheet", TRUE,
-#endif
- NULL);
-
- e_canvas_item_move_absolute (item, 0, 30);
-
- gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_table_header_item_get_type (),
- "ETableHeader", e_table_header_multiple,
- NULL);
- item = gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_table_item_get_type (),
- "ETableHeader", e_table_header_multiple,
- "ETableModel", e_table_model,
- "drawgrid", TRUE,
- "drawfocus", TRUE,
-#if 0
- "spreadsheet", TRUE,
-#endif
- "cursor_mode", E_TABLE_CURSOR_SIMPLE,
- NULL);
- e_canvas_item_move_absolute (item, 300, 30);
-}
-
-
-
-
-
diff --git a/widgets/table/test-table.c b/widgets/table/test-table.c
deleted file mode 100644
index b44b62bf42..0000000000
--- a/widgets/table/test-table.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * test-table.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza (miguel@gnu.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <gnome.h>
-#include "gal/widgets/e-cursors.h"
-#include "gal/widgets/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-table.h"
-#include "e-table-config.h"
-
-#include "table-test.h"
-
-
-
-char buffer [1024];
-char **column_labels;
-char ***table_data;
-int cols = 0;
-int lines = 0;
-int lines_alloc = 0;
-
-static void
-parse_headers (void)
-{
- char *p, *s;
- int in_value = 0, i;
-
- fgets (buffer, sizeof (buffer)-1, stdin);
-
- for (p = buffer; *p; p++){
- if (*p == ' ' || *p == '\t'){
- if (in_value){
- cols++;
- in_value = 0;
- }
- } else
- in_value = 1;
- }
- if (in_value)
- cols++;
-
- if (!cols){
- fprintf (stderr, "No columns in first row\n");
- exit (1);
- }
-
- column_labels = g_new0 (char *, cols);
-
- p = buffer;
- for (i = 0; (s = strtok (p, " \t")) != NULL; i++){
- column_labels [i] = g_strdup (s);
- if (strchr (column_labels [i], '\n'))
- *strchr (column_labels [i], '\n') = 0;
- p = NULL;
- }
-
- printf ("%d headers:\n", cols);
- for (i = 0; i < cols; i++){
- printf ("header %d: %s\n", i, column_labels [i]);
- }
-}
-
-static char **
-load_line (char *buffer, int cols)
-{
- char **line = g_new0 (char *, cols);
- char *p;
- int i;
-
- for (i = 0; i < cols; i++){
- p = strtok (buffer, " \t\n");
- if (p == NULL){
- for (; i < cols; i++)
- line [i] = g_strdup ("");
- return line;
- } else
- line [i] = g_strdup (p);
- buffer = NULL;
- }
- return line;
-}
-
-static void
-append_line (char **line)
-{
- if (lines <= lines_alloc){
- lines_alloc = lines + 50;
- table_data = g_renew (char **, table_data, lines_alloc);
- }
- table_data [lines] = line;
- lines++;
-}
-
-static void
-load_data (void)
-{
- int i;
-
- {
- static int loaded;
-
- if (loaded)
- return;
-
- loaded = TRUE;
- }
-
-
- parse_headers ();
-
- while (fgets (buffer, sizeof (buffer)-1, stdin) != NULL){
- char **line;
-
- if (buffer [0] == '\n')
- continue;
- line = load_line (buffer, cols);
- append_line (line);
- }
-
- for (i = 0; i < lines; i++){
- int j;
-
- printf ("Line %d: ", i);
- for (j = 0; j < cols; j++)
- printf ("[%s] ", table_data [i][j]);
- printf ("\n");
- }
-}
-
-/*
- * ETableSimple callbacks
- */
-static int
-col_count (ETableModel *etc, void *data)
-{
- return cols;
-}
-
-static int
-row_count (ETableModel *etc, void *data)
-{
- return lines;
-}
-
-static void
-append_row (ETableModel *etm, ETableModel *model, int row, void *data)
-{
- abort ();
-}
-
-static void *
-value_at (ETableModel *etc, int col, int row, void *data)
-{
- g_assert (col < cols);
- g_assert (row < lines);
-
- fprintf (stderr, "value_at[%d,%d]\n", col, row);
-
- return (void *) table_data [row][col];
-}
-
-static void
-set_value_at (ETableModel *etc, int col, int row, const void *val, void *data)
-{
- g_assert (col < cols);
- g_assert (row < lines);
-
- g_free (table_data [row][col]);
- table_data [row][col] = g_strdup (val);
-
- printf ("Value at %d,%d set to %s\n", col, row, (char *) val);
-}
-
-static gboolean
-is_cell_editable (ETableModel *etc, int col, int row, void *data)
-{
- return TRUE;
-}
-
-static gboolean
-has_save_id (ETableModel *etm, void *data)
-{
- return FALSE;
-}
-
-static char *
-get_save_id (ETableModel *etm, int row, void *data)
-{
- abort ();
-}
-
-static void *
-duplicate_value (ETableModel *etc, int col, const void *value, void *data)
-{
- return g_strdup (value);
-}
-
-static void
-free_value (ETableModel *etc, int col, void *value, void *data)
-{
- g_free (value);
-}
-
-static void *
-initialize_value (ETableModel *etc, int col, void *data)
-{
- return g_strdup ("");
-}
-
-static gboolean
-value_is_empty (ETableModel *etc, int col, const void *value, void *data)
-{
- return !(value && *(char *)value);
-}
-
-static char *
-value_to_string (ETableModel *etc, int col, const void *value, void *data)
-{
- return g_strdup(value);
-}
-
-#ifdef BIT_ROT
-static void
-set_canvas_size (GnomeCanvas *canvas, GtkAllocation *alloc)
-{
- gnome_canvas_set_scroll_region (canvas, 0, 0, alloc->width, alloc->height);
-}
-
-void
-table_browser_test (void)
-{
- GtkWidget *canvas, *window;
- ETableModel *e_table_model;
- ETableHeader *e_table_header;
- ECell *cell_left_just;
- GnomeCanvasItem *group;
- int i;
- int priority = 20;
-
- load_data ();
-
- /*
- * Data model
- */
- e_table_model = e_table_simple_new (
- col_count, row_count, append_row,
-
- value_at, set_value_at, is_cell_editable,
-
- has_save_id, get_save_id,
-
- duplicate_value, free_value,
- initialize_value, value_is_empty,
- value_to_string,
- NULL);
-
- /*
- * Header
- */
- e_table_header = e_table_header_new ();
- cell_left_just = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT);
-
- for (i = 0; i < cols; i++){
- ETableCol *ecol = e_table_col_new (
- i, column_labels [i],
- 1.0, 20, cell_left_just,
- g_str_compare, TRUE,
- priority);
-
- e_table_header_add_column (e_table_header, ecol, i);
- }
-
- /*
- * Setup GUI
- */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- canvas = e_canvas_new ();
-
- g_signal_connect (canvas, "size_allocate",
- G_CALLBACK (set_canvas_size), NULL);
-
- gtk_container_add (GTK_CONTAINER (window), canvas);
- gtk_widget_show_all (window);
- gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_table_header_item_get_type (),
- "ETableHeader", e_table_header,
- NULL);
-
- group = gnome_canvas_item_new (
- gnome_canvas_root (GNOME_CANVAS (canvas)),
- gnome_canvas_group_get_type (),
- "x", 30.0,
- "y", 30.0,
- NULL);
-
- gnome_canvas_item_new (
- GNOME_CANVAS_GROUP (group),
- e_table_item_get_type (),
- "ETableHeader", e_table_header,
- "ETableModel", e_table_model,
- "drawgrid", TRUE,
- "drawfocus", TRUE,
-#if 0
- "spreadsheet", TRUE,
-#endif
- NULL);
-}
-#endif
-
-static void
-save_spec (GtkWidget *button, ETable *e_table)
-{
-#ifdef BIT_ROT
- e_table_save_specification (e_table, "e-table-test.xml");
-#endif
-}
-
-#ifdef BIT_ROT
-static void
-row_selection_test (ETable *table, int row, gboolean selected)
-{
- if (selected)
- g_print ("Row %d selected\n", row);
- else
- g_print ("Row %d unselected\n", row);
-}
-#endif
-
-static void
-toggle_grid (void *nothing, ETable *etable)
-{
- static gboolean shown;
-
- g_object_get (etable, "drawgrid", &shown, NULL);
- g_object_set (etable, "drawgrid", !shown, NULL);
-}
-
-static void
-do_e_table_demo (const char *state)
-{
- GtkWidget *e_table, *window, *frame, *vbox, *button, *bhide;
- ECell *cell_left_just;
- ETableHeader *full_header;
- int i;
- GString *spec;
-
- /*
- * Data model
- */
- static ETableModel *e_table_model = NULL;
-
- if (e_table_model == NULL)
- e_table_model =
- e_table_simple_new (col_count, row_count, append_row,
- value_at, set_value_at, is_cell_editable,
- has_save_id, get_save_id,
- duplicate_value, free_value,
- initialize_value, value_is_empty,
- value_to_string,
- NULL);
-
- full_header = e_table_header_new ();
- cell_left_just = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT);
-
- spec = g_string_new ("\
-<ETableSpecification \
-cursor-mode=\"line\" \
-selection-mode=\"browse\" \
-draw-focus=\"true\">");
- for (i = 0; i < cols; i++) {
- char *colspec =
- g_strdup_printf ("\
- <ETableColumn model_col=\"%d\" \
-_title=\"%s\" \
-minimum_width=\"20\" \
-resizable=\"true\" \
-cell=\"string\" \
-compare=\"string\"/>\n", i, column_labels[i]);
- g_string_append (spec, colspec);
- g_free (colspec);
- }
- g_string_append (spec, "</ETableSpecification>");
- e_table = e_table_new (e_table_model, NULL, spec->str, state);
-
- /* This makes value_at not called just to determine row height. */
- g_object_set (e_table,
- "uniform_row_height", 1,
- NULL);
-
- g_string_free (spec, TRUE);
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- frame = gtk_frame_new (NULL);
-#ifdef BIT_ROT
- g_signal_connect (e_table, "row_selection",
- G_CALLBACK(row_selection_test), NULL);
-#endif
-
- vbox = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), e_table, TRUE, TRUE, 0);
- gtk_container_add (GTK_CONTAINER (frame), vbox);
- gtk_container_add (GTK_CONTAINER (window), frame);
-
-#if 0
- /*
- * gadgets
- */
- button = gtk_button_new_with_label ("Save spec");
- g_signal_connect (button, "clicked",
- G_CALLBACK (save_spec), e_table);
- gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-
- bhide = gtk_button_new_with_label ("Toggle Grid");
- g_signal_connect (bhide, "clicked",
- G_CALLBACk (toggle_grid), e_table);
- gtk_box_pack_start (GTK_BOX (vbox), bhide, FALSE, FALSE, 0);
-#endif
-
- gtk_widget_set_usize (window, 400, 200);
- gtk_widget_show_all (window);
-
-#ifdef BIT_ROT
- if (getenv ("TEST")){
- e_table_do_gui_config (NULL, E_TABLE(e_table));
- }
-#endif
-}
-
-void
-e_table_test (void)
-{
- load_data ();
-
- if (1){/*getenv ("DO")){*/
- do_e_table_demo ("\
-<ETableState>\n\
- <column source=\"0\"/>\n\
- <column source=\"1\"/>\n\
- <column source=\"2\"/>\n\
- <column source=\"3\"/>\n\
- <column source=\"4\"/>\n\
- <grouping></grouping>\n\
-</ETableState>");
-#if 0
- do_e_table_demo ("<ETableSpecification> <columns-shown> <column> 0 </column> <column> 0 </column> <column> 1 </column> <column> 2 </column> <column> 3 </column> <column> 4 </column> </columns-shown> <grouping> <group column=\"3\" ascending=\"true\"> <group column=\"4\" ascending=\"false\"> <leaf column=\"2\" ascending=\"true\"/> </group> </group> </grouping> </ETableSpecification>");
- do_e_table_demo ("<ETableSpecification> <columns-shown> <column> 0 </column> <column> 1 </column> <column> 2 </column> <column> 3 </column> <column> 4 </column> </columns-shown> <grouping> <group column=\"4\" ascending=\"true\"> <leaf column=\"2\" ascending=\"true\"/> </group> </grouping> </ETableSpecification>");
- do_e_table_demo ("<ETableSpecification> <columns-shown> <column> 0 </column> <column> 1 </column> <column> 2 </column> <column> 3 </column> <column> 4 </column> </columns-shown> <grouping> <group column=\"3\" ascending=\"true\"> <leaf column=\"2\" ascending=\"true\"/> </group> </grouping> </ETableSpecification>");
-#endif
- }
-}
diff --git a/widgets/table/tree-expanded.xpm b/widgets/table/tree-expanded.xpm
deleted file mode 100644
index d9bda3694d..0000000000
--- a/widgets/table/tree-expanded.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * tree_expanded_xpm[] = {
-"16 16 4 1",
-" c None",
-". c #FFFFFF",
-"* c #000000",
-"+ c #666666",
-" ",
-" ",
-" ",
-" ",
-" +++++++++ ",
-" +.......+ ",
-" +.......+ ",
-" +.......+ ",
-" +.*****.+ ",
-" +.......+ ",
-" +.......+ ",
-" +.......+ ",
-" +++++++++ ",
-" ",
-" ",
-" "};
diff --git a/widgets/table/tree-unexpanded.xpm b/widgets/table/tree-unexpanded.xpm
deleted file mode 100644
index e1b48448ba..0000000000
--- a/widgets/table/tree-unexpanded.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * tree_unexpanded_xpm[] = {
-"16 16 4 1",
-" c None",
-". c #FFFFFF",
-"* c #000000",
-"+ c #666666",
-" ",
-" ",
-" ",
-" ",
-" +++++++++ ",
-" +.......+ ",
-" +...*...+ ",
-" +...*...+ ",
-" +.*****.+ ",
-" +...*...+ ",
-" +...*...+ ",
-" +.......+ ",
-" +++++++++ ",
-" ",
-" ",
-" "};
diff --git a/widgets/text/.cvsignore b/widgets/text/.cvsignore
deleted file mode 100644
index 792b9f5af2..0000000000
--- a/widgets/text/.cvsignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.libs
-.pure
-Makefile
-Makefile.in
-*.lo
-*.la
-e-text-test
-e-entry-test
-e-text-model-test
-e-completion-test \ No newline at end of file
diff --git a/widgets/text/e-completion-callbacks.c b/widgets/text/e-completion-callbacks.c
deleted file mode 100644
index bccc400fab..0000000000
--- a/widgets/text/e-completion-callbacks.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion-callbacks.c - A callback based ECompletion.
- * Copyright 2003
- *
- * Authors:
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include <stdio.h>
-#include <gtk/gtk.h>
-#include "gal/util/e-util.h"
-#include "e-completion-callbacks.h"
-
-static void e_completion_callbacks_class_init (ECompletionCallbacksClass *klass);
-static void e_completion_callbacks_init (ECompletionCallbacks *complete);
-
-static void callbacks_request_completion (ECompletion *comp, const gchar *search_text, gint pos, gint limit);
-static void callbacks_end_completion (ECompletion *comp);
-
-#define PARENT_TYPE E_COMPLETION_TYPE
-static ECompletionClass *parent_class;
-
-
-
-E_MAKE_TYPE (e_completion_callbacks,
- "ECompletionCallbacks",
- ECompletionCallbacks,
- e_completion_callbacks_class_init,
- e_completion_callbacks_init,
- PARENT_TYPE)
-
-static void
-e_completion_callbacks_class_init (ECompletionCallbacksClass *klass)
-{
- ECompletionClass *comp_class = (ECompletionClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- comp_class->request_completion = callbacks_request_completion;
- comp_class->end_completion = callbacks_end_completion;
-}
-
-static void
-e_completion_callbacks_init (ECompletionCallbacks *complete)
-{
-}
-
-static void
-callbacks_request_completion (ECompletion *comp, const gchar *search_text, gint pos, gint limit)
-{
- ECompletionCallbacks *cc = E_COMPLETION_CALLBACKS (comp);
-
- cc->request_completion (cc, search_text, pos, limit, cc->data);
-}
-
-static void
-callbacks_end_completion (ECompletion *comp)
-{
- ECompletionCallbacks *cc = E_COMPLETION_CALLBACKS (comp);
-
- cc->end_completion (cc, cc->data);
-}
-
-ECompletionCallbacks*
-e_completion_callbacks_new (ECompletionCallbacksRequestCompletionFn request_completion,
- ECompletionCallbacksEndCompletionFn end_completion,
- gpointer data)
-{
- ECompletionCallbacks *cc;
-
- g_return_val_if_fail (request_completion != NULL, NULL);
- g_return_val_if_fail (end_completion != NULL, NULL);
-
- cc = gtk_type_new (E_COMPLETION_CALLBACKS_TYPE);
-
- cc->request_completion = request_completion;
- cc->end_completion = end_completion;
- cc->data = data;
-
- return cc;
-}
diff --git a/widgets/text/e-completion-callbacks.h b/widgets/text/e-completion-callbacks.h
deleted file mode 100644
index 2661c16022..0000000000
--- a/widgets/text/e-completion-callbacks.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion-callback.h - A callback based completion object.
- * Copyright 2003, Ximian, Inc.
- *
- * Authors:
- * Chris Toshok <toshok@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_COMPLETION_CALLBACKS_H
-#define E_COMPLETION_CALLBACKS_H
-
-#include <gtk/gtkobject.h>
-#include "e-completion.h"
-
-G_BEGIN_DECLS
-
-#define E_COMPLETION_CALLBACKS_TYPE (e_completion_callbacks_get_type ())
-#define E_COMPLETION_CALLBACKS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_COMPLETION_CALLBACKS_TYPE, ECompletionCallbacks))
-#define E_COMPLETION_CALLBACKS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), E_COMPLETION_CALLBACKS_TYPE, ECompletionCallbacksClass))
-#define E_IS_COMPLETION_CALLBACKS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_COMPLETION_CALLBACKS_TYPE))
-#define E_IS_COMPLETION_CALLBACKS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_COMPLETION_CALLBACKS_TYPE))
-
-typedef struct _ECompletionCallbacks ECompletionCallbacks;
-typedef struct _ECompletionCallbacksClass ECompletionCallbacksClass;
-struct _ECompletionCallbacksPrivate;
-
-typedef void (*ECompletionCallbacksRequestCompletionFn) (ECompletionCallbacks *comp, const gchar *search_text, gint pos, gint limit, gpointer data);
-typedef void (*ECompletionCallbacksEndCompletionFn) (ECompletionCallbacks *comp, gpointer data);
-
-struct _ECompletionCallbacks {
- ECompletion parent;
-
- ECompletionCallbacksRequestCompletionFn request_completion;
- ECompletionCallbacksEndCompletionFn end_completion;
-
- gpointer data;
-};
-
-struct _ECompletionCallbacksClass {
- ECompletionClass parent_class;
-};
-
-GtkType e_completion_callbacks_get_type (void);
-
-ECompletionCallbacks* e_completion_callbacks_new (ECompletionCallbacksRequestCompletionFn request_completion,
- ECompletionCallbacksEndCompletionFn end_completion,
- gpointer data);
-
-G_END_DECLS
-
-
-#endif /* E_COMPLETION_CALLBACKS_H */
-
diff --git a/widgets/text/e-completion-match.c b/widgets/text/e-completion-match.c
deleted file mode 100644
index d13ba15973..0000000000
--- a/widgets/text/e-completion-match.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion-match.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include <gal/widgets/e-unicode.h>
-#include "e-completion-match.h"
-
-static void
-e_completion_match_destroy (ECompletionMatch *match)
-{
- if (match) {
- g_free (match->match_text);
- g_free (match->menu_text);
- if (match->destroy)
- match->destroy (match);
- g_free (match);
- }
-}
-
-void
-e_completion_match_construct (ECompletionMatch *match)
-{
- g_return_if_fail (match != NULL);
-
- match->match_text = NULL;
- match->menu_text = NULL;
- match->score = 0;
- match->sort_major = 0;
- match->sort_minor = 0;
- match->user_data = NULL;
- match->ref = 1;
- match->destroy = NULL;
-}
-
-void
-e_completion_match_ref (ECompletionMatch *match)
-{
- g_return_if_fail (match != NULL);
- g_return_if_fail (match->ref > 0);
-
- ++match->ref;
-}
-
-void
-e_completion_match_unref (ECompletionMatch *match)
-{
- if (match) {
- g_return_if_fail (match->ref > 0);
-
- --match->ref;
- if (match->ref == 0) {
- e_completion_match_destroy (match);
- }
- }
-}
-
-void
-e_completion_match_set_text (ECompletionMatch *match,
- const gchar *match_text,
- const gchar *menu_text)
-{
- g_return_if_fail (match != NULL);
-
- /* We silently drop any entries w/ invalid utf8.
- This is not optimal behavior. */
-
- if (match_text && ! g_utf8_validate (match_text, -1, NULL)) {
- match_text = NULL;
- }
-
- if (menu_text && ! g_utf8_validate (menu_text, -1, NULL)) {
- menu_text = NULL;
- }
-
- if (match->match_text && match->match_text != match_text) {
- g_free (match->match_text);
- }
- match->match_text = g_strdup (match_text);
-
- if (match->menu_text && match->menu_text != menu_text) {
- g_free (match->menu_text);
- }
- match->menu_text = g_strdup (menu_text);
-}
-
-const gchar *
-e_completion_match_get_match_text (ECompletionMatch *match)
-{
- g_return_val_if_fail (match != NULL, NULL);
- return match->match_text;
-}
-
-const gchar *
-e_completion_match_get_menu_text (ECompletionMatch *match)
-{
- g_return_val_if_fail (match != NULL, NULL);
- return match->menu_text;
-}
-
-gint
-e_completion_match_compare (const ECompletionMatch *a, const ECompletionMatch *b)
-{
- gint rv;
-
- /* Deal with NULL arguments. */
- if (!(a || b)) {
- if (!(a && b))
- return 0;
- return a ? -1 : 1;
- }
-
- if ( (rv = (b->sort_major < a->sort_major) - (a->sort_major < b->sort_major)) )
- return rv;
-
- /* Sort the scores high->low. */
- if ( (rv = (b->score > a->score) - (a->score > b->score)) )
- return rv;
-
- if ( (rv = (b->sort_minor < a->sort_minor) - (a->sort_minor < b->sort_minor)) )
- return rv;
-
- return 0;
-}
-
-gint
-e_completion_match_compare_alpha (const ECompletionMatch *a, const ECompletionMatch *b)
-{
- gint rv, rv2;
-
- /* Deal with NULL arguments. */
- if (!(a || b)) {
- if (!(a && b))
- return 0;
- return a ? -1 : 1;
- }
-
- /* The sort_major trumps everything. */
- if ( (rv = (b->sort_major < a->sort_major) - (a->sort_major < b->sort_major)) )
- return rv;
-
- /* Sort the scores high->low. */
- if ( (rv = (b->score > a->score) - (a->score > b->score)) )
- return rv;
-
- /* When the match text is the same, we use the minor fields */
- rv2 = strcmp (a->match_text, b->match_text);
- if ( !rv2 && (rv = (b->sort_minor < a->sort_minor) - (a->sort_minor < b->sort_minor)) )
- return rv;
-
- return strcmp (a->menu_text, b->menu_text);
-}
-
-ECompletionMatch *
-e_completion_match_new (const gchar *match_text, const gchar *menu_text, double score)
-{
- ECompletionMatch *match = g_new0 (ECompletionMatch, 1);
-
- e_completion_match_construct (match);
- e_completion_match_set_text (match, match_text, menu_text);
- match->score = score;
-
- return match;
-}
diff --git a/widgets/text/e-completion-match.h b/widgets/text/e-completion-match.h
deleted file mode 100644
index 162373add4..0000000000
--- a/widgets/text/e-completion-match.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion-match.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_COMPLETION_MATCH_H__
-#define __E_COMPLETION_MATCH_H__
-
-#include <glib.h>
-#include <gtk/gtkwidget.h>
-
-G_BEGIN_DECLS
-
-typedef struct _ECompletionMatch ECompletionMatch;
-
-struct _ECompletionMatch {
- gchar *match_text; /* in utf8 */
- gchar *menu_text; /* in utf8 */
- double score;
- gint sort_major;
- gint sort_minor;
- gpointer user_data;
-
- gint ref;
- void (*destroy) (ECompletionMatch *);
-};
-
-typedef void (*ECompletionMatchFn) (ECompletionMatch *, gpointer closure);
-
-void e_completion_match_construct (ECompletionMatch *);
-void e_completion_match_ref (ECompletionMatch *);
-void e_completion_match_unref (ECompletionMatch *);
-
-void e_completion_match_set_text (ECompletionMatch *, const gchar *match_text, const gchar *label_text);
-const gchar *e_completion_match_get_match_text (ECompletionMatch *);
-const gchar *e_completion_match_get_menu_text (ECompletionMatch *);
-
-gint e_completion_match_compare (const ECompletionMatch *, const ECompletionMatch *);
-gint e_completion_match_compare_alpha (const ECompletionMatch *, const ECompletionMatch *);
-
-ECompletionMatch *e_completion_match_new (const gchar *match_text, const gchar *menu_text, double score);
-
-
-
-
-G_END_DECLS
-
-#endif /* __E_COMPLETION_MATCH_H__ */
-
diff --git a/widgets/text/e-completion-view.c b/widgets/text/e-completion-view.c
deleted file mode 100644
index f9728de60c..0000000000
--- a/widgets/text/e-completion-view.c
+++ /dev/null
@@ -1,859 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion-view.c - A text completion selection widget
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Adapted by Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-completion-view.h"
-
-#include <math.h>
-#include <gdk/gdkkeysyms.h>
-#include <gal/e-table/e-table-simple.h>
-#include <gal/e-table/e-table-scrolled.h>
-#include <gal/util/e-i18n.h>
-#include "gal/util/e-marshal.h"
-
-enum {
- E_COMPLETION_VIEW_NONEMPTY,
- E_COMPLETION_VIEW_ADDED,
- E_COMPLETION_VIEW_FULL,
- E_COMPLETION_VIEW_BROWSE,
- E_COMPLETION_VIEW_UNBROWSE,
- E_COMPLETION_VIEW_ACTIVATE,
- E_COMPLETION_VIEW_LAST_SIGNAL
-};
-
-static guint e_completion_view_signals[E_COMPLETION_VIEW_LAST_SIGNAL] = { 0 };
-
-static void e_completion_view_disconnect (ECompletionView *cv);
-static ETable *e_completion_view_table (ECompletionView *cv);
-static void e_completion_view_clear_choices (ECompletionView *cv);
-static void e_completion_view_set_cursor_row (ECompletionView *cv, gint r);
-static void e_completion_view_select (ECompletionView *cv, gint r);
-
-static gint e_completion_view_key_press_handler (GtkWidget *w, GdkEventKey *key_event, gpointer user_data);
-
-static void e_completion_view_class_init (ECompletionViewClass *klass);
-static void e_completion_view_init (ECompletionView *completion);
-static void e_completion_view_dispose (GObject *object);
-
-#define PARENT_TYPE GTK_TYPE_EVENT_BOX
-static GtkObjectClass *parent_class;
-
-
-
-static gint
-e_completion_view_local_key_press_handler (GtkWidget *w, GdkEventKey *ev)
-{
- return e_completion_view_key_press_handler (w, ev, w);
-}
-
-static void
-e_completion_view_paint (GtkWidget *widget, GdkRectangle *area)
-{
- gint i;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (widget));
- g_return_if_fail (area != NULL);
-
- if (!GTK_WIDGET_DRAWABLE (widget))
- return;
-
- for (i = 0; i < E_COMPLETION_VIEW (widget)->border_width; ++i) {
-
- gdk_draw_rectangle (widget->window,
- widget->style->black_gc,
- FALSE, i, i,
- widget->allocation.width-1-2*i,
- widget->allocation.height-1-2*i);
-
- }
-
-}
-
-#if 0
-static void
-e_completion_view_draw (GtkWidget *widget, GdkRectangle *area)
-{
- GtkBin *bin;
- GdkRectangle child_area;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (widget));
- g_return_if_fail (area != NULL);
-
- if (GTK_WIDGET_DRAWABLE (widget)) {
- bin = GTK_BIN (widget);
-
- e_completion_view_paint (widget, area);
-
- if (bin->child && gtk_widget_intersect (bin->child, area, &child_area))
- gtk_widget_draw (bin->child, &child_area);
- }
-}
-#endif
-
-static gint
-e_completion_view_expose_event (GtkWidget *widget, GdkEventExpose *event)
-{
- GtkBin *bin;
- GdkEventExpose child_event;
-
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (E_IS_COMPLETION_VIEW (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- if (GTK_WIDGET_DRAWABLE (widget)) {
- bin = GTK_BIN (widget);
-
- e_completion_view_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_send_expose (bin->child, (GdkEvent*) &child_event);
- }
-
- return FALSE;
-}
-
-static void
-e_completion_view_size_request (GtkWidget *widget, GtkRequisition *requisition)
-{
- GtkBin *bin;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (widget));
- g_return_if_fail (requisition != NULL);
-
- bin = GTK_BIN (widget);
-
- requisition->width = 2 * E_COMPLETION_VIEW (widget)->border_width;
- requisition->height = 2 * E_COMPLETION_VIEW (widget)->border_width;
-
- if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) {
- GtkRequisition child_requisition;
-
- gtk_widget_size_request (bin->child, &child_requisition);
-
- requisition->width += child_requisition.width;
- requisition->height += child_requisition.height;
- }
-
- requisition->height = MAX (100, requisition->height);
-}
-
-static void
-e_completion_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-{
- GtkBin *bin;
- GtkAllocation child_allocation;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (widget));
- g_return_if_fail (allocation != NULL);
-
- bin = GTK_BIN (widget);
- widget->allocation = *allocation;
-
- child_allocation.x = E_COMPLETION_VIEW (widget)->border_width;
- child_allocation.width = MAX(0, (gint)allocation->width - child_allocation.x * 2);
-
- child_allocation.y = E_COMPLETION_VIEW (widget)->border_width;
- child_allocation.height = MAX (0, (gint)allocation->height - child_allocation.y * 2);
-
- if (GTK_WIDGET_REALIZED (widget)) {
- gdk_window_move_resize (widget->window,
- allocation->x,
- allocation->y,
- allocation->width,
- allocation->height);
- }
-
- if (bin->child) {
- gtk_widget_size_allocate (bin->child, &child_allocation);
- }
-}
-
-E_MAKE_TYPE (e_completion_view,
- "ECompletionView",
- ECompletionView,
- e_completion_view_class_init,
- e_completion_view_init,
- PARENT_TYPE)
-
-static void
-e_completion_view_class_init (ECompletionViewClass *klass)
-{
- GObjectClass *object_class = (GObjectClass *) klass;
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- e_completion_view_signals[E_COMPLETION_VIEW_NONEMPTY] =
- g_signal_new ("nonempty",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionViewClass, nonempty),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_completion_view_signals[E_COMPLETION_VIEW_ADDED] =
- g_signal_new ("added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionViewClass, added),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_completion_view_signals[E_COMPLETION_VIEW_FULL] =
- g_signal_new ("full",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionViewClass, full),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_completion_view_signals[E_COMPLETION_VIEW_BROWSE] =
- g_signal_new ("browse",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionViewClass, browse),
- NULL, NULL,
- e_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- e_completion_view_signals[E_COMPLETION_VIEW_UNBROWSE] =
- g_signal_new ("unbrowse",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionViewClass, unbrowse),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_completion_view_signals[E_COMPLETION_VIEW_ACTIVATE] =
- g_signal_new ("activate",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionViewClass, activate),
- NULL, NULL,
- e_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- object_class->dispose = e_completion_view_dispose;
-
- widget_class->key_press_event = e_completion_view_local_key_press_handler;
- widget_class->expose_event = e_completion_view_expose_event;
- widget_class->size_request = e_completion_view_size_request;
- widget_class->size_allocate = e_completion_view_size_allocate;
-}
-
-static void
-e_completion_view_init (ECompletionView *completion)
-{
- completion->border_width = 2;
- completion->choices = g_ptr_array_new ();
-}
-
-static void
-e_completion_view_dispose (GObject *object)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (object);
-
- e_completion_view_disconnect (cv);
-
- if (cv->choices) {
- e_completion_view_clear_choices (cv);
-
- g_ptr_array_free (cv->choices, TRUE);
- cv->choices = NULL;
- }
-
- if (cv->key_widget) {
- g_signal_handler_disconnect (cv->key_widget, cv->key_signal_id);
- g_object_unref (cv->key_widget);
- cv->key_widget = NULL;
- }
-
- if (cv->completion)
- g_object_unref (cv->completion);
- cv->completion = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-e_completion_view_disconnect (ECompletionView *cv)
-{
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
-
- if (cv->begin_signal_id)
- g_signal_handler_disconnect (cv->completion, cv->begin_signal_id);
- if (cv->comp_signal_id)
- g_signal_handler_disconnect (cv->completion, cv->comp_signal_id);
- if (cv->end_signal_id)
- g_signal_handler_disconnect (cv->completion, cv->end_signal_id);
-
- cv->begin_signal_id = 0;
- cv->comp_signal_id = 0;
- cv->end_signal_id = 0;
-}
-
-static ETable *
-e_completion_view_table (ECompletionView *cv)
-{
- return e_table_scrolled_get_table (E_TABLE_SCROLLED (cv->table));
-}
-
-static void
-e_completion_view_clear_choices (ECompletionView *cv)
-{
- ECompletionMatch *match;
- GPtrArray *m;
- int i;
-
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
-
- m = cv->choices;
- for (i = 0; i < m->len; i++) {
- match = g_ptr_array_index (m, i);
- e_completion_match_unref (match);
- }
- g_ptr_array_set_size (m, 0);
-}
-
-static void
-e_completion_view_set_cursor_row (ECompletionView *cv, gint r)
-{
- ETable *table;
- GtkAdjustment *adj;
- gint x, y1, y2, r1, r2, c;
- double fracline;
- gint iteration_count=0;
-
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
-#ifndef G_DISABLE_CHECKS
- /* choices->len is unsigned, but it is reasonable for r to be
- * < 0 */
- if (r > 0) {
- g_return_if_fail (r < cv->choices->len);
- }
-#endif
-
- adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (cv->table));
-
- table = e_completion_view_table (cv);
-
- if (r < 0) {
- e_selection_model_clear (E_SELECTION_MODEL(table->selection));
-
- /* Move back to the top when we clear the selection */
- gtk_adjustment_set_value (adj, adj->lower);
- return;
- }
-
- e_table_set_cursor_row (table, r);
-
- /* OK, now the tricky bit. We try to insure that this row is
- visible. */
-
- /* If we are selecting the first or last row, then it is easy. We just
- cram the vadjustment all the way up/down. */
- if (r == 0) {
- gtk_adjustment_set_value (adj, adj->lower);
- return;
- } else if (r == cv->choices->len - 1) {
- gtk_adjustment_set_value (adj, adj->upper - adj->page_size);
- return;
- }
-
- fracline = ((adj->upper - adj->lower - adj->page_size) / (gint)cv->choices->len) / 4;
-
- while (iteration_count < 100) {
- x = GTK_LAYOUT(table->table_canvas)->hadjustment->value;
- y1 = GTK_LAYOUT(table->table_canvas)->vadjustment->value;
-
- y2 = y1 + cv->table->allocation.height;
-
- e_table_group_compute_location (e_completion_view_table (cv)->group, &x, &y1, &r1, &c);
- e_table_group_compute_location (e_completion_view_table (cv)->group, &x, &y2, &r2, &c);
-
- if (r <= r1) {
- gtk_adjustment_set_value (adj, adj->value - fracline);
- } else if (r >= r2) {
- gtk_adjustment_set_value (adj, adj->value + fracline);
- } else
- return;
-
- ++iteration_count;
- }
-
- g_assert_not_reached ();
-}
-
-static void
-e_completion_view_select (ECompletionView *cv, gint r)
-{
- ECompletionMatch *match;
-
- match = g_ptr_array_index (cv->choices, r);
-
- cv->selection = r;
- e_completion_view_set_cursor_row (cv, r);
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_ACTIVATE], 0, match);
-}
-
-static gint
-e_completion_view_key_press_handler (GtkWidget *w, GdkEventKey *key_event, gpointer user_data)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (user_data);
- gint dir = 0;
- gboolean key_handled = TRUE, complete_key = FALSE, uncomplete_key = FALSE, is_space = FALSE;
-
- /* FIXME: This is totally lame.
- The ECompletionView should be able to specify multiple completion/uncompletion keys, or just
- have sensible defaults. */
-
- if ((cv->complete_key && key_event->keyval == cv->complete_key)
- || ((key_event->keyval == GDK_n || key_event->keyval == GDK_N) && (key_event->state & GDK_CONTROL_MASK)))
- complete_key = TRUE;
-
- if ((cv->uncomplete_key && key_event->keyval == cv->uncomplete_key)
- || ((key_event->keyval == GDK_p || key_event->keyval == GDK_P) && (key_event->state & GDK_CONTROL_MASK)))
- uncomplete_key = TRUE;
-
- /* Start up a completion.*/
- if (complete_key && !cv->editable) {
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_BROWSE], 0, NULL);
- goto stop_emission;
- }
-
- /* Stop our completion. */
- if (uncomplete_key && cv->editable && cv->selection < 0) {
- e_completion_view_set_cursor_row (cv, -1);
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_UNBROWSE], 0);
- goto stop_emission;
- }
-
- if (!cv->editable)
- return FALSE;
-
- switch (key_event->keyval) {
-
- case GDK_n:
- case GDK_N:
- /* We (heart) emacs: treat ctrl-n as down */
- if (! (key_event->state & GDK_CONTROL_MASK))
- return FALSE;
-
- case GDK_Down:
- case GDK_KP_Down:
- dir = 1;
- break;
-
- case GDK_p:
- case GDK_P:
- /* Treat ctrl-p as up */
- if (! (key_event->state & GDK_CONTROL_MASK))
- return FALSE;
-
- case GDK_Up:
- case GDK_KP_Up:
- dir = -1;
- break;
-
- case GDK_Tab:
- /* If our cursor is still up in the entry, move down into
- the popup. Otherwise unbrowse. */
- if (cv->choices->len > 0) {
- if (cv->selection < 0) {
- cv->selection = 0;
- dir = 0;
- } else {
- cv->selection = -1;
- dir = 0;
- key_handled = FALSE;
- }
- }
- break;
-
- case GDK_space:
- case GDK_KP_Space:
- is_space = TRUE;
-
- case GDK_Return:
- case GDK_KP_Enter:
- if (cv->selection < 0) {
- /* We don't have a selection yet, move to the first selection if there is
- more than one option. If there is only one option, select it automatically. */
-
- /* Let space pass through. */
- if (is_space)
- return FALSE;
-
- if (cv->choices->len == 1) {
- e_completion_view_select (cv, 0);
- goto stop_emission;
- } else {
- cv->selection = 0;
- dir = 0;
- }
-
- } else {
- /* Our cursor is down in the pop-up, so we make our selection. */
- e_completion_view_select (cv, cv->selection);
- goto stop_emission;
- }
- break;
-
- case GDK_Escape:
- /* Unbrowse hack */
- cv->selection = -1;
- dir = 0;
- break;
-
- default:
- return FALSE;
- }
-
- cv->selection += dir;
-
- if (cv->selection >= (int)cv->choices->len) {
- cv->selection = cv->choices->len - 1;
- /* Don't re-emit the browse signal */
- goto stop_emission;
- }
-
- e_completion_view_set_cursor_row (cv, cv->selection);
-
- if (cv->selection >= 0)
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_BROWSE], 0,
- g_ptr_array_index (cv->choices, cv->selection));
- else
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_UNBROWSE], 0);
-
- stop_emission:
-
- if (key_handled)
- g_signal_stop_emission_by_name (w, "key_press_event");
-
- return key_handled;
-}
-
-static void
-begin_completion_cb (ECompletion *completion, const gchar *txt, gint pos, gint limit, gpointer user_data)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (user_data);
-
- e_table_model_pre_change (cv->model);
- e_completion_view_clear_choices (cv);
- cv->have_all_choices = FALSE;
-
- e_table_model_changed (cv->model);
-}
-
-static void
-completion_cb (ECompletion *completion, ECompletionMatch *match, gpointer user_data)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (user_data);
- gint r = cv->choices->len;
- gboolean first = (cv->choices->len == 0);
-
- e_table_model_pre_change (cv->model);
-
- e_completion_match_ref (match);
- g_ptr_array_add (cv->choices, match);
-
- e_table_model_row_inserted (cv->model, r);
-
- if (first)
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_NONEMPTY], 0);
-
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_ADDED], 0);
-}
-
-static void
-end_completion_cb (ECompletion *completion, gpointer user_data)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (user_data);
-
- /* Do a final refresh of the table. */
- e_table_model_pre_change (cv->model);
- e_table_model_changed (cv->model);
-
- cv->have_all_choices = TRUE;
- g_signal_emit (cv, e_completion_view_signals[E_COMPLETION_VIEW_FULL], 0);
-}
-
-/*** Table Callbacks ***/
-
-/* XXX toshok - we need to add sorting to this etable, through the use
- of undisplayed fields of all the sort keys we want to use */
-static char *simple_spec =
-"<ETableSpecification no-headers=\"true\" draw-grid=\"false\" cursor-mode=\"line\" alternating-row-colors=\"false\" gettext-domain=\"" E_I18N_DOMAIN "\">"
-" <ETableColumn model_col=\"0\" _title=\"Node\" expansion=\"1.0\" "
-" minimum_width=\"16\" resizable=\"true\" cell=\"string\" "
-" compare=\"string\"/> "
-" <ETableState> "
-" <column source=\"0\"/> "
-" <grouping></grouping> "
-" </ETableState> "
-"</ETableSpecification>";
-
-static gint
-table_col_count (ETableModel *etm, gpointer data)
-{
- return 1;
-}
-
-static gint
-table_row_count (ETableModel *etm, gpointer data)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (data);
- return cv->choices->len;
-}
-
-static gboolean
-table_is_cell_editable (ETableModel *etm, gint c, gint r, gpointer data)
-{
- return FALSE;
-}
-
-static gpointer
-table_value_at (ETableModel *etm, gint c, gint r, gpointer data)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (data);
- ECompletionMatch *match;
-
- match = g_ptr_array_index (cv->choices, r);
-
- return (gpointer) e_completion_match_get_menu_text (match);
-}
-
-static gchar *
-table_value_to_string (ETableModel *em, gint col, gconstpointer val, gpointer data)
-{
- return (gchar *) val;
-}
-
-static void
-table_click_cb (ETable *et, gint r, gint c, GdkEvent *ev, gpointer data)
-{
- ECompletionView *cv = E_COMPLETION_VIEW (data);
-
- e_completion_view_select (cv, r);
-}
-
-void
-e_completion_view_construct (ECompletionView *cv, ECompletion *completion)
-{
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
- g_return_if_fail (completion != NULL);
- g_return_if_fail (E_IS_COMPLETION (completion));
-
- /* Make sure we don't call construct twice. */
- g_return_if_fail (cv->completion == NULL);
-
- GTK_WIDGET_SET_FLAGS (GTK_WIDGET (cv), GTK_CAN_FOCUS);
-
- cv->completion = completion;
- g_object_ref (completion);
-
- cv->begin_signal_id = g_signal_connect (completion,
- "completion_started",
- G_CALLBACK (begin_completion_cb),
- cv);
- cv->comp_signal_id = g_signal_connect (completion,
- "completion_found",
- G_CALLBACK (completion_cb),
- cv);
- cv->end_signal_id = g_signal_connect (completion,
- "completion_finished",
- G_CALLBACK (end_completion_cb),
- cv);
-
- cv->model = e_table_simple_new (table_col_count,
- table_row_count,
- NULL,
-
- table_value_at,
- NULL,
- table_is_cell_editable,
-
- NULL, NULL,
-
- NULL, NULL, NULL, NULL,
- table_value_to_string,
- cv);
-
- cv->table = e_table_scrolled_new (cv->model, NULL, simple_spec, NULL);
- g_object_unref (cv->model);
-
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (cv->table), GTK_SHADOW_NONE);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (cv->table), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (cv), cv->table);
- gtk_widget_show_all (cv->table);
-
- g_signal_connect (e_completion_view_table (cv),
- "click",
- G_CALLBACK (table_click_cb),
- cv);
-
- cv->selection = -1;
-}
-
-GtkWidget *
-e_completion_view_new (ECompletion *completion)
-{
- gpointer p;
-
- g_return_val_if_fail (completion != NULL, NULL);
- g_return_val_if_fail (E_IS_COMPLETION (completion), NULL);
-
- p = g_object_new (E_COMPLETION_VIEW_TYPE, NULL);
-
- e_completion_view_construct (E_COMPLETION_VIEW (p), completion);
-
- return GTK_WIDGET (p);
-}
-
-void
-e_completion_view_connect_keys (ECompletionView *cv, GtkWidget *w)
-{
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
- g_return_if_fail (w == NULL || GTK_IS_WIDGET (w));
-
- if (cv->key_widget) {
- g_signal_handler_disconnect (cv->key_widget, cv->key_signal_id);
- g_object_unref (cv->key_widget);
- }
-
- if (w) {
- cv->key_widget = w;
- g_object_ref (w);
-
- cv->key_signal_id = g_signal_connect (w,
- "key_press_event",
- G_CALLBACK (e_completion_view_key_press_handler),
- cv);
- } else {
- cv->key_widget = NULL;
- cv->key_signal_id = 0;
- }
-}
-
-void
-e_completion_view_set_complete_key (ECompletionView *cv, gint keyval)
-{
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
-
- cv->complete_key = keyval;
-}
-
-void
-e_completion_view_set_uncomplete_key (ECompletionView *cv, gint keyval)
-{
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
-
- cv->uncomplete_key = keyval;
-}
-
-void
-e_completion_view_set_width (ECompletionView *cv, gint width)
-{
- GtkWidget *w;
- gint y, r, dummy, line_height, final_height;
- double drop_room, lines;
-
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
- g_return_if_fail (width > 0);
-
- w = GTK_WIDGET (cv);
-
- if (! GTK_WIDGET_REALIZED (w)) {
- gtk_widget_set_usize (w, width, -1);
- return;
- }
-
- /* A Horrible Hack(tm) to figure out the height of a single table row */
-
- for (line_height=5, r=0; r == 0 && line_height < 1000; line_height += 2) {
- dummy = 0;
- e_table_group_compute_location (e_completion_view_table (cv)->group,
- &dummy, &line_height, &r, &dummy);
- }
-
- if (line_height >= 1000) {
- /* Something went wrong, so we make a (possibly very lame) guess */
- line_height = 30;
- }
-
-
- gdk_window_get_origin (w->window, NULL, &y);
- y += w->allocation.y;
-
- lines = 5; /* default maximum */
- lines = MIN (lines, cv->choices->len);
-
- drop_room = (gdk_screen_height () - y) / (double)line_height;
- drop_room = MAX (drop_room, 1);
-
- lines = MIN (lines, drop_room);
-
- /* We reduce the total height by a bit; in practice, this seems to work out well. */
- final_height = (gint) floor (line_height * (0.5 + (float)lines) * 0.97);
- gtk_widget_set_usize (w, width, final_height);
-}
-
-void
-e_completion_view_set_editable (ECompletionView *cv, gboolean x)
-{
- g_return_if_fail (cv != NULL);
- g_return_if_fail (E_IS_COMPLETION_VIEW (cv));
-
- if (x == cv->editable)
- return;
-
- cv->editable = x;
- cv->selection = -1;
- e_completion_view_set_cursor_row (cv, -1);
-}
-
-
diff --git a/widgets/text/e-completion-view.h b/widgets/text/e-completion-view.h
deleted file mode 100644
index 25b2eff645..0000000000
--- a/widgets/text/e-completion-view.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion-view.h - A text completion selection widget
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Adapted by Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_COMPLETION_VIEW_H
-#define E_COMPLETION_VIEW_H
-
-#include <gtk/gtk.h>
-#include <gal/e-table/e-table.h>
-#include "e-completion.h"
-
-G_BEGIN_DECLS
-
-#define E_COMPLETION_VIEW_TYPE (e_completion_view_get_type ())
-#define E_COMPLETION_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_COMPLETION_VIEW_TYPE, ECompletionView))
-#define E_COMPLETION_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), E_COMPLETION_VIEW_TYPE, ECompletionViewClass))
-#define E_IS_COMPLETION_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_COMPLETION_VIEW_TYPE))
-#define E_IS_COMPLETION_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_COMPLETION_VIEW_TYPE))
-
-typedef struct _ECompletionView ECompletionView;
-typedef struct _ECompletionViewClass ECompletionViewClass;
-
-struct _ECompletionView {
- GtkEventBox parent;
-
- ETableModel *model;
- GtkWidget *table;
-
- GPtrArray *choices;
-
- ECompletion *completion;
- guint begin_signal_id;
- guint comp_signal_id;
- guint end_signal_id;
-
- GtkWidget *key_widget;
- guint key_signal_id;
-
- gint complete_key;
- gint uncomplete_key;
-
- gboolean have_all_choices;
-
- gboolean editable;
- gint selection;
-
- gint border_width;
-};
-
-struct _ECompletionViewClass {
- GtkEventBoxClass parent_class;
-
- /* Signals */
- void (*nonempty) (ECompletionView *cv);
- void (*added) (ECompletionView *cv);
- void (*full) (ECompletionView *cv);
- void (*browse) (ECompletionView *cv, ECompletionMatch *match);
- void (*unbrowse) (ECompletionView *cv);
- void (*activate) (ECompletionView *cv, ECompletionMatch *match);
-};
-
-GtkType e_completion_view_get_type (void);
-
-void e_completion_view_construct (ECompletionView *cv, ECompletion *completion);
-GtkWidget *e_completion_view_new (ECompletion *completion);
-
-void e_completion_view_connect_keys (ECompletionView *cv, GtkWidget *w);
-
-void e_completion_view_set_complete_key (ECompletionView *cv, gint keyval);
-void e_completion_view_set_uncomplete_key (ECompletionView *cv, gint keyval);
-
-void e_completion_view_set_width (ECompletionView *cv, gint width);
-void e_completion_view_set_editable (ECompletionView *cv, gboolean);
-
-G_END_DECLS
-
-
-#endif /* E_COMPLETION_H */
diff --git a/widgets/text/e-completion.c b/widgets/text/e-completion.c
deleted file mode 100644
index 6e455cb619..0000000000
--- a/widgets/text/e-completion.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion.c - A base class for text completion.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Adapted by Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <string.h>
-#include <stdio.h>
-#include <gtk/gtk.h>
-#include "e-completion.h"
-#include "gal/util/e-util.h"
-#include "gal/util/e-marshal.h"
-
-enum {
- COMPLETION_STARTED,
- COMPLETION_FOUND,
- COMPLETION_CANCELED,
- COMPLETION_FINISHED,
- LAST_SIGNAL
-};
-
-static guint e_completion_signals[LAST_SIGNAL] = { 0 };
-
-struct _ECompletionPrivate {
- gboolean searching;
- gboolean done_search;
- gchar *search_text;
- GPtrArray *matches;
- gint pos;
- gint limit;
- double min_score, max_score;
-};
-
-static void e_completion_class_init (ECompletionClass *klass);
-static void e_completion_init (ECompletion *complete);
-static void e_completion_dispose (GObject *object);
-
-static void e_completion_add_match (ECompletion *complete, ECompletionMatch *);
-static void e_completion_clear_matches (ECompletion *complete);
-#if 0
-static gboolean e_completion_sort (ECompletion *complete);
-#endif
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class;
-
-
-
-E_MAKE_TYPE (e_completion,
- "ECompletion",
- ECompletion,
- e_completion_class_init,
- e_completion_init,
- PARENT_TYPE)
-
-static void
-e_completion_class_init (ECompletionClass *klass)
-{
- GObjectClass *object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- e_completion_signals[COMPLETION_STARTED] =
- g_signal_new ("completion_started",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionClass, completion_started),
- NULL, NULL,
- e_marshal_NONE__POINTER_INT_INT,
- G_TYPE_NONE, 3,
- G_TYPE_POINTER, G_TYPE_INT, G_TYPE_INT);
-
- e_completion_signals[COMPLETION_FOUND] =
- g_signal_new ("completion_found",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionClass, completion_found),
- NULL, NULL,
- e_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- e_completion_signals[COMPLETION_FINISHED] =
- g_signal_new ("completion_finished",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECompletionClass, completion_finished),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- object_class->dispose = e_completion_dispose;
-}
-
-static void
-e_completion_init (ECompletion *complete)
-{
- complete->priv = g_new0 (struct _ECompletionPrivate, 1);
- complete->priv->matches = g_ptr_array_new ();
-}
-
-static void
-e_completion_dispose (GObject *object)
-{
- ECompletion *complete = E_COMPLETION (object);
-
- if (complete->priv) {
- g_free (complete->priv->search_text);
- complete->priv->search_text = NULL;
-
- e_completion_clear_matches (complete);
-
- g_ptr_array_free (complete->priv->matches, TRUE);
- complete->priv->matches = NULL;
-
- g_free (complete->priv);
- complete->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-e_completion_add_match (ECompletion *complete, ECompletionMatch *match)
-{
- g_return_if_fail (complete && E_IS_COMPLETION (complete));
- g_return_if_fail (match != NULL);
-
- g_ptr_array_add (complete->priv->matches, match);
-
- if (complete->priv->matches->len == 1) {
-
- complete->priv->min_score = complete->priv->max_score = match->score;
-
- } else {
-
- complete->priv->min_score = MIN (complete->priv->min_score, match->score);
- complete->priv->max_score = MAX (complete->priv->max_score, match->score);
-
- }
-}
-
-static void
-e_completion_clear_matches (ECompletion *complete)
-{
- ECompletionMatch *match;
- GPtrArray *m;
- int i;
-
- g_return_if_fail (E_IS_COMPLETION (complete));
-
- m = complete->priv->matches;
- for (i = 0; i < m->len; i++) {
- match = g_ptr_array_index (m, i);
- e_completion_match_unref (match);
- }
- g_ptr_array_set_size (m, 0);
-
- complete->priv->min_score = 0;
- complete->priv->max_score = 0;
-}
-
-void
-e_completion_begin_search (ECompletion *complete, const gchar *text, gint pos, gint limit)
-{
- ECompletionClass *klass;
-
- g_return_if_fail (complete != NULL);
- g_return_if_fail (E_IS_COMPLETION (complete));
- g_return_if_fail (text != NULL);
-
- klass = E_COMPLETION_CLASS (GTK_OBJECT_GET_CLASS (complete));
-
- g_free (complete->priv->search_text);
- complete->priv->search_text = g_strdup (text);
-
- complete->priv->pos = pos;
- complete->priv->searching = TRUE;
- complete->priv->done_search = FALSE;
-
- e_completion_clear_matches (complete);
-
- complete->priv->limit = limit > 0 ? limit : G_MAXINT;
-
- g_signal_emit (complete, e_completion_signals[COMPLETION_STARTED], 0, text, pos, limit);
- if (klass->request_completion)
- klass->request_completion (complete, text, pos, limit);
-}
-
-gboolean
-e_completion_searching (ECompletion *complete)
-{
- g_return_val_if_fail (complete != NULL, FALSE);
- g_return_val_if_fail (E_IS_COMPLETION (complete), FALSE);
-
- return complete->priv->searching;
-}
-
-const gchar *
-e_completion_search_text (ECompletion *complete)
-{
- g_return_val_if_fail (complete != NULL, NULL);
- g_return_val_if_fail (E_IS_COMPLETION (complete), NULL);
-
- return complete->priv->search_text;
-}
-
-gint
-e_completion_search_text_pos (ECompletion *complete)
-{
- g_return_val_if_fail (complete != NULL, -1);
- g_return_val_if_fail (E_IS_COMPLETION (complete), -1);
-
- return complete->priv->pos;
-}
-
-gint
-e_completion_match_count (ECompletion *complete)
-{
- g_return_val_if_fail (complete != NULL, 0);
- g_return_val_if_fail (E_IS_COMPLETION (complete), 0);
-
- return complete->priv->matches->len;
-}
-
-void
-e_completion_foreach_match (ECompletion *complete, ECompletionMatchFn fn, gpointer closure)
-{
- GPtrArray *m;
- int i;
-
- g_return_if_fail (complete != NULL);
- g_return_if_fail (E_IS_COMPLETION (complete));
-
- if (fn == NULL)
- return;
-
- m = complete->priv->matches;
- for (i = 0; i < m->len; i++) {
- ECompletionMatch *match = g_ptr_array_index (m, i);
- fn (match, closure);
- }
-}
-
-ECompletion *
-e_completion_new (void)
-{
- return E_COMPLETION (g_object_new (E_COMPLETION_TYPE, NULL));
-}
-
-#if 0
-static gboolean
-e_completion_sort (ECompletion *complete)
-{
- GPtrArray *m;
- int i;
- GList *sort_list = NULL, *j;
- gboolean diff;
-
- m = complete->priv->matches;
-
- for (i = 0; i < m->len; i++)
- sort_list = g_list_append (sort_list,
- g_ptr_array_index (m, i));
-
- sort_list = g_list_sort (sort_list, (GCompareFunc) e_completion_match_compare_alpha);
-
- diff = FALSE;
-
- for (i=0, j=sort_list; i < m->len; i++, j = g_list_next (j)) {
- if (g_ptr_array_index (m, i) == j->data)
- continue;
-
- diff = TRUE;
- g_ptr_array_index (m, i) = j->data;
- }
-
- g_list_free (sort_list);
-
- return diff;
-}
-#endif
-
-void
-e_completion_found_match (ECompletion *complete, ECompletionMatch *match)
-{
- g_return_if_fail (complete);
- g_return_if_fail (E_IS_COMPLETION (complete));
- g_return_if_fail (match != NULL);
-
- if (! complete->priv->searching) {
- g_warning ("e_completion_found_match(...,\"%s\",...) called outside of a search", match->match_text);
- return;
- }
-
- /* For now, do nothing when we hit the limit --- just don't
- * announce the incoming matches. */
- if (complete->priv->matches->len >= complete->priv->limit) {
- e_completion_match_unref (match);
- return;
- }
-
- e_completion_add_match (complete, match);
-
- g_signal_emit (complete, e_completion_signals[COMPLETION_FOUND], 0, match);
-}
-
-void
-e_completion_end_search (ECompletion *comp)
-{
- g_return_if_fail (comp != NULL);
- g_return_if_fail (E_IS_COMPLETION (comp));
- g_return_if_fail (comp->priv->searching);
-
- if (E_COMPLETION_CLASS (GTK_OBJECT_GET_CLASS (comp))->end_completion) {
- E_COMPLETION_CLASS (GTK_OBJECT_GET_CLASS (comp))->end_completion (comp);
- }
- g_signal_emit (comp, e_completion_signals[COMPLETION_FINISHED], 0);
-
- comp->priv->searching = FALSE;
- comp->priv->done_search = TRUE;
-}
-
diff --git a/widgets/text/e-completion.h b/widgets/text/e-completion.h
deleted file mode 100644
index 74976e579c..0000000000
--- a/widgets/text/e-completion.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-completion.h - A base class for text completion.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Miguel de Icaza <miguel@ximian.com>
- * Adapted by Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_COMPLETION_H
-#define E_COMPLETION_H
-
-#include <gtk/gtkobject.h>
-#include "e-completion-match.h"
-
-G_BEGIN_DECLS
-
-#define E_COMPLETION_TYPE (e_completion_get_type ())
-#define E_COMPLETION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_COMPLETION_TYPE, ECompletion))
-#define E_COMPLETION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), E_COMPLETION_TYPE, ECompletionClass))
-#define E_IS_COMPLETION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_COMPLETION_TYPE))
-#define E_IS_COMPLETION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_COMPLETION_TYPE))
-
-typedef struct _ECompletion ECompletion;
-typedef struct _ECompletionClass ECompletionClass;
-struct _ECompletionPrivate;
-
-typedef gboolean (*ECompletionRefineFn) (ECompletion *, ECompletionMatch *, const gchar *search_text, gint pos);
-
-struct _ECompletion {
- GtkObject parent;
-
- struct _ECompletionPrivate *priv;
-};
-
-struct _ECompletionClass {
- GtkObjectClass parent_class;
-
- /* virtual functions */
- void (*request_completion) (ECompletion *comp, const gchar *search_text, gint pos, gint limit);
- void (*end_completion) (ECompletion *comp);
-
- /* Signals */
- void (*completion_started) (ECompletion *comp, const gchar *search_text, gint pos, gint limit);
-
- void (*completion_found) (ECompletion *comp, ECompletionMatch *match);
-
- void (*completion_finished) (ECompletion *comp);
-};
-
-GtkType e_completion_get_type (void);
-
-void e_completion_begin_search (ECompletion *comp, const gchar *text, gint pos, gint limit);
-
-gboolean e_completion_searching (ECompletion *comp);
-gboolean e_completion_refining (ECompletion *comp);
-const gchar *e_completion_search_text (ECompletion *comp);
-gint e_completion_search_text_pos (ECompletion *comp);
-gint e_completion_match_count (ECompletion *comp);
-void e_completion_foreach_match (ECompletion *comp, ECompletionMatchFn fn, gpointer user_data);
-
-ECompletion *e_completion_new (void);
-
-
-
-/* These functions should only be called by derived classes or search callbacks,
- or very bad things might happen. */
-
-void e_completion_found_match (ECompletion *comp, ECompletionMatch *);
-void e_completion_end_search (ECompletion *comp);
-
-G_END_DECLS
-
-
-#endif /* E_COMPLETION_H */
-
diff --git a/widgets/text/e-entry-test.c b/widgets/text/e-entry-test.c
deleted file mode 100644
index d30ba20a9f..0000000000
--- a/widgets/text/e-entry-test.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-entry-test.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <gnome.h>
-#include "e-entry.h"
-#include <gal/util/e-i18n.h>
-
-static void destroy_callback(gpointer data, GObject *where_object_was)
-{
- exit(0);
-}
-
-#if 0
-static void about_callback( GtkWidget *widget, gpointer data )
-{
-
- const gchar *authors[] =
- {
- "Christopher James Lahey <clahey@umich.edu>",
- 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 *entry;
-
- /* bindtextdomain (PACKAGE, GNOMELOCALEDIR);
- textdomain (PACKAGE);*/
-
- gnome_init( "EEntry Test", VERSION, argc, argv);
- app = gnome_app_new("EEntry Test", NULL);
-
- entry = e_entry_new();
- g_object_set(entry,
- "editable", TRUE,
- "use_ellipsis", TRUE,
- NULL);
- gnome_app_set_contents( GNOME_APP( app ), entry );
-
- /* Connect the signals */
- g_object_weak_ref (G_OBJECT (app),
- destroy_callback, app);
-
- gtk_widget_show_all( app );
-
- gtk_main();
-
- /* Not reached. */
- return 0;
-}
diff --git a/widgets/text/e-entry.c b/widgets/text/e-entry.c
deleted file mode 100644
index f66a066921..0000000000
--- a/widgets/text/e-entry.c
+++ /dev/null
@@ -1,1392 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-entry.c - An EText-based entry widget
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <math.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktypebuiltins.h>
-#include <libxml/parser.h>
-#include <libgnomecanvas/gnome-canvas.h>
-#include "gal/util/e-util.h"
-#include "gal/util/e-i18n.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-canvas-utils.h"
-#include "e-completion-view.h"
-#include "e-text.h"
-#include "e-entry.h"
-
-#define MIN_ENTRY_WIDTH 150
-#define INNER_BORDER 2
-
-#define d(x)
-
-#define PARENT_TYPE gtk_table_get_type ()
-
-static GtkObjectClass *parent_class;
-
-enum {
- E_ENTRY_CHANGED,
- E_ENTRY_ACTIVATE,
- E_ENTRY_POPULATE_POPUP,
- E_ENTRY_COMPLETION_POPUP,
- E_ENTRY_LAST_SIGNAL
-};
-
-static guint e_entry_signals[E_ENTRY_LAST_SIGNAL] = { 0 };
-
-/* Object argument IDs */
-enum {
- PROP_0,
- PROP_MODEL,
- PROP_EVENT_PROCESSOR,
- PROP_TEXT,
- PROP_FONT,
- PROP_FONTSET,
- PROP_FONT_GDK,
- PROP_ANCHOR,
- PROP_JUSTIFICATION,
- PROP_X_OFFSET,
- PROP_Y_OFFSET,
- PROP_FILL_COLOR,
- PROP_FILL_COLOR_GDK,
- PROP_FILL_COLOR_RGBA,
- PROP_FILL_STIPPLE,
- PROP_EDITABLE,
- PROP_USE_ELLIPSIS,
- PROP_ELLIPSIS,
- PROP_LINE_WRAP,
- PROP_BREAK_CHARACTERS,
- PROP_MAX_LINES,
- PROP_ALLOW_NEWLINES,
- PROP_DRAW_BORDERS,
- PROP_DRAW_BACKGROUND,
- PROP_DRAW_BUTTON,
- PROP_EMULATE_LABEL_RESIZE,
- PROP_CURSOR_POS
-};
-
-typedef struct _EEntryPrivate EEntryPrivate;
-struct _EEntryPrivate {
- GtkJustification justification;
-
- guint changed_proxy_tag;
- guint activate_proxy_tag;
- guint populate_popup_proxy_tag;
- /* Data related to completions */
- ECompletion *completion;
- EEntryCompletionHandler handler;
- GtkWidget *completion_view;
- guint nonempty_signal_id;
- guint added_signal_id;
- guint full_signal_id;
- guint browse_signal_id;
- guint unbrowse_signal_id;
- guint activate_signal_id;
- GtkWidget *completion_view_popup;
- gboolean popup_is_visible;
- gchar *pre_browse_text;
- gint completion_delay;
- guint completion_delay_tag;
- gboolean ptr_grab;
- gboolean changed_since_keypress;
- guint changed_since_keypress_tag;
- gint last_completion_pos;
-
- guint draw_borders : 1;
- guint emulate_label_resize : 1;
- guint have_set_transient : 1;
- guint item_chosen : 1;
- gint last_width;
-};
-
-static gboolean e_entry_is_empty (EEntry *entry);
-static void e_entry_show_popup (EEntry *entry, gboolean x);
-static void e_entry_start_completion (EEntry *entry);
-static void e_entry_start_delayed_completion (EEntry *entry, gint delay);
-static void e_entry_cancel_delayed_completion (EEntry *entry);
-
-static void
-canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc,
- EEntry *entry)
-{
- gnome_canvas_set_scroll_region (entry->canvas,
- 0, 0, alloc->width, alloc->height);
- g_object_set (entry->item,
- "clip_width", (double) (alloc->width),
- "clip_height", (double) (alloc->height),
- NULL);
-
- switch (entry->priv->justification) {
- case GTK_JUSTIFY_RIGHT:
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(entry->item),
- alloc->width, 0);
- break;
- case GTK_JUSTIFY_CENTER:
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(entry->item),
- alloc->width / 2, 0);
- break;
- default:
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(entry->item),
- 0, 0);
- break;
- }
-}
-
-#if 0
-static void
-get_borders (EEntry *entry,
- gint *xborder,
- gint *yborder)
-{
- GtkWidget *widget = GTK_WIDGET (entry);
- gint focus_width;
- gboolean interior_focus;
-
- gtk_widget_style_get (widget,
- "interior-focus", &interior_focus,
- "focus-line-width", &focus_width,
- NULL);
-
- *xborder = widget->style->xthickness;
- *yborder = widget->style->ythickness;
-
- if (!interior_focus)
- {
- *xborder += focus_width;
- *yborder += focus_width;
- }
-}
-#endif
-
-static void
-canvas_size_request (GtkWidget *widget, GtkRequisition *requisition,
- EEntry *entry)
-{
- int xthick, ythick;
- PangoContext *context;
- PangoFontMetrics *metrics;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (GNOME_IS_CANVAS (widget));
- g_return_if_fail (requisition != NULL);
-
- if (entry->priv->draw_borders) {
- /* get_borders (entry, &xthick, &ythick); */
- xthick = ythick = 3;
- } else {
- xthick = ythick = 0;
- }
-
- if (entry->priv->emulate_label_resize) {
- gdouble width;
- g_object_get (entry->item,
- "text_width", &width,
- NULL);
- requisition->width = 2*xthick + width;
- } else {
- requisition->width = MIN_ENTRY_WIDTH + 2*xthick;
- }
- if (entry->priv->last_width != requisition->width)
- gtk_widget_queue_resize (widget);
- entry->priv->last_width = requisition->width;
-
- d(g_print("%s: width = %d\n", __FUNCTION__, requisition->width));
-
- context = gtk_widget_get_pango_context (widget);
- metrics = pango_context_get_metrics (context, gtk_widget_get_style (widget)->font_desc,
- pango_context_get_language (context));
-
- requisition->height = (PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) +
- pango_font_metrics_get_descent (metrics)) +
- 2 * ythick);
-
- pango_font_metrics_unref (metrics);
-}
-
-static gint
-canvas_focus_in_event (GtkWidget *widget, GdkEventFocus *focus, EEntry *entry)
-{
- if (entry->canvas->focused_item != GNOME_CANVAS_ITEM(entry->item))
- gnome_canvas_item_grab_focus(GNOME_CANVAS_ITEM(entry->item));
-
- return FALSE;
-}
-
-static void
-e_entry_text_keypress (EText *text, guint keyval, guint state, EEntry *entry)
-{
- if (entry->priv->changed_since_keypress_tag) {
- gtk_timeout_remove (entry->priv->changed_since_keypress_tag);
- entry->priv->changed_since_keypress_tag = 0;
- }
-
- if (entry->priv->changed_since_keypress
- || (entry->priv->popup_is_visible && e_entry_get_position (entry) != entry->priv->last_completion_pos)) {
- if (e_entry_is_empty (entry)) {
- e_entry_cancel_delayed_completion (entry);
- e_entry_show_popup (entry, FALSE);
- } else if (entry->priv->completion_delay >= 0) {
- int delay;
- delay = entry->priv->popup_is_visible
- ? 1
- : entry->priv->completion_delay;
- e_entry_start_delayed_completion (entry, delay);
- }
- }
- entry->priv->changed_since_keypress = FALSE;
-}
-
-static gint
-changed_since_keypress_timeout_fn (gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
- entry->priv->changed_since_keypress = FALSE;
- entry->priv->changed_since_keypress_tag = 0;
- return FALSE;
-}
-
-static void
-proxy_changed (EText *text, EEntry *entry)
-{
- if (entry->priv->changed_since_keypress_tag)
- gtk_timeout_remove (entry->priv->changed_since_keypress_tag);
- entry->priv->changed_since_keypress = TRUE;
- entry->priv->changed_since_keypress_tag = gtk_timeout_add (20, changed_since_keypress_timeout_fn, entry);
-
- g_signal_emit (entry, e_entry_signals [E_ENTRY_CHANGED], 0);
-}
-
-static void
-proxy_activate (EText *text, EEntry *entry)
-{
- g_signal_emit (entry, e_entry_signals [E_ENTRY_ACTIVATE], 0);
-}
-
-static void
-proxy_populate_popup (EText *text, GdkEventButton *ev, gint pos, GtkWidget *menu, EEntry *entry)
-{
- g_signal_emit (entry, e_entry_signals [E_ENTRY_POPULATE_POPUP], 0, ev, pos, menu);
-}
-
-static void
-e_entry_init (GtkObject *object)
-{
- EEntry *entry = E_ENTRY (object);
- GtkTable *gtk_table = GTK_TABLE (object);
-
- entry->priv = g_new0 (EEntryPrivate, 1);
-
- entry->priv->emulate_label_resize = FALSE;
-
- entry->canvas = GNOME_CANVAS (e_canvas_new ());
-
- g_signal_connect (entry->canvas,
- "size_allocate",
- G_CALLBACK (canvas_size_allocate),
- entry);
-
- g_signal_connect (entry->canvas,
- "size_request",
- G_CALLBACK (canvas_size_request),
- entry);
-
- g_signal_connect (entry->canvas,
- "focus_in_event",
- G_CALLBACK(canvas_focus_in_event),
- entry);
-
- entry->priv->draw_borders = TRUE;
- entry->priv->last_width = -1;
-
- entry->item = E_TEXT(gnome_canvas_item_new(
- gnome_canvas_root (entry->canvas),
- e_text_get_type(),
- "clip", TRUE,
- "fill_clip_rectangle", TRUE,
- "anchor", GTK_ANCHOR_NW,
- "draw_borders", TRUE,
- "draw_background", TRUE,
- "draw_button", FALSE,
- "max_lines", 1,
- "editable", TRUE,
- "allow_newlines", FALSE,
- "im_context", E_CANVAS (entry->canvas)->im_context,
- "handle_popup", TRUE,
- NULL));
-
- g_signal_connect (entry->item,
- "keypress",
- G_CALLBACK (e_entry_text_keypress),
- entry);
-
- entry->priv->justification = GTK_JUSTIFY_LEFT;
- gtk_table_attach (gtk_table, GTK_WIDGET (entry->canvas),
- 0, 1, 0, 1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK,
- 0, 0);
- gtk_widget_show (GTK_WIDGET (entry->canvas));
-
- /*
- * Proxy functions: we proxy the changed and activate signals
- * from the item to ourselves
- */
- entry->priv->changed_proxy_tag = g_signal_connect (entry->item,
- "changed",
- G_CALLBACK (proxy_changed),
- entry);
- entry->priv->activate_proxy_tag = g_signal_connect (entry->item,
- "activate",
- G_CALLBACK (proxy_activate),
- entry);
- entry->priv->populate_popup_proxy_tag = g_signal_connect (entry->item,
- "populate_popup",
- G_CALLBACK (proxy_populate_popup),
- entry);
-
- entry->priv->completion_delay = 1;
-}
-
-/**
- * e_entry_construct
- *
- * Constructs the given EEntry.
- *
- **/
-void
-e_entry_construct (EEntry *entry)
-{
- /* Do nothing */
-}
-
-
-/**
- * e_entry_new
- *
- * Creates a new EEntry.
- *
- * Returns: The new EEntry
- **/
-GtkWidget *
-e_entry_new (void)
-{
- EEntry *entry;
- entry = g_object_new (E_ENTRY_TYPE, NULL);
- e_entry_construct (entry);
-
- return GTK_WIDGET (entry);
-}
-
-const gchar *
-e_entry_get_text (EEntry *entry)
-{
- g_return_val_if_fail (entry != NULL && E_IS_ENTRY (entry), NULL);
-
- return e_text_model_get_text (entry->item->model);
-}
-
-void
-e_entry_set_text (EEntry *entry, const gchar *txt)
-{
- g_return_if_fail (entry != NULL && E_IS_ENTRY (entry));
-
- e_text_model_set_text (entry->item->model, txt);
-}
-
-static void
-e_entry_set_text_quiet (EEntry *entry, const gchar *txt)
-{
- g_return_if_fail (entry != NULL && E_IS_ENTRY (entry));
-
- g_signal_handler_block (entry->item, entry->priv->changed_proxy_tag);
- e_entry_set_text (entry, txt);
- g_signal_handler_unblock (entry->item, entry->priv->changed_proxy_tag);
-}
-
-
-void
-e_entry_set_editable (EEntry *entry, gboolean am_i_editable)
-{
- g_return_if_fail (entry != NULL && E_IS_ENTRY (entry));
-
- g_object_set (entry->item, "editable", am_i_editable, NULL);
-}
-
-gint
-e_entry_get_position (EEntry *entry)
-{
- g_return_val_if_fail (entry != NULL && E_IS_ENTRY (entry), -1);
-
- return entry->item->selection_start;
-}
-
-void
-e_entry_set_position (EEntry *entry, gint pos)
-{
- g_return_if_fail (entry != NULL && E_IS_ENTRY (entry));
- if (pos < 0)
- pos = 0;
- else if (pos > e_text_model_get_text_length (entry->item->model))
- pos = e_text_model_get_text_length (entry->item->model);
-
- entry->item->selection_start = entry->item->selection_end = pos;
-}
-
-void
-e_entry_select_region (EEntry *entry, gint pos1, gint pos2)
-{
- gint len;
-
- g_return_if_fail (entry != NULL && E_IS_ENTRY (entry));
-
- len = e_text_model_get_text_length (entry->item->model);
- pos1 = CLAMP (pos1, 0, len);
- pos2 = CLAMP (pos2, 0, len);
-
- entry->item->selection_start = MIN (pos1, pos2);
- entry->item->selection_end = MAX (pos1, pos2);
-}
-
-/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
-
-/*** Completion-related code ***/
-
-static gboolean
-e_entry_is_empty (EEntry *entry)
-{
- const gchar *txt = e_entry_get_text (entry);
-
- if (txt == NULL)
- return TRUE;
-
- while (*txt) {
- if (!isspace ((gint) *txt))
- return FALSE;
- ++txt;
- }
-
- return TRUE;
-}
-
-static void
-e_entry_show_popup (EEntry *entry, gboolean visible)
-{
- GtkWidget *pop = entry->priv->completion_view_popup;
-
- if (pop == NULL)
- return;
-
- /* The async query can give us a result after the focus was
- lost by the widget. In that case, we don't want to show
- the pop-up.
-
- but only return early if we're popping *up* the completion
- view. If we're trying to pop down the view, continue on
- regardless of whether or not the canvas has focus. */
- if (/*visible && */! GTK_WIDGET_HAS_FOCUS (entry->canvas))
- return;
-
- if (visible) {
- GtkAllocation *dim = &(GTK_WIDGET (entry)->allocation);
- gint x, y, xo, yo, fudge;
- const GdkEventMask grab_mask = (GdkEventMask)GDK_BUTTON_PRESS_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_RELEASE_MASK;
-
- /* Figure out where to put our popup. */
- gdk_window_get_origin (GTK_WIDGET (entry)->window, &xo, &yo);
- x = xo + dim->x;
- y = yo + dim->height + dim->y;
-
- fudge = 1;
- y -= fudge;
-
- gtk_widget_set_uposition (pop, x, y);
- e_completion_view_set_width (E_COMPLETION_VIEW (entry->priv->completion_view), dim->width);
-
- gtk_widget_set_sensitive(pop, TRUE);
- gtk_widget_show (pop);
-
-
- if (getenv ("GAL_E_ENTRY_NO_GRABS_HACK") == NULL && !entry->priv->ptr_grab) {
- entry->priv->ptr_grab = (0 == gdk_pointer_grab (GTK_WIDGET (entry->priv->completion_view)->window, TRUE,
- grab_mask, NULL, NULL, GDK_CURRENT_TIME));
- if (entry->priv->ptr_grab) {
- gtk_grab_add (GTK_WIDGET (entry->priv->completion_view));
- }
- }
-
-
- } else {
-
- gtk_widget_hide (pop);
- /* hack to force the popup to lose focus, which it gets if you click on it */
- gtk_widget_set_sensitive(pop, FALSE);
-
- if (entry->priv->ptr_grab) {
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gtk_grab_remove (GTK_WIDGET (entry->priv->completion_view));
- }
-
- entry->priv->ptr_grab = FALSE;
-
- entry->priv->last_completion_pos = -1;
- }
-
- e_completion_view_set_editable (E_COMPLETION_VIEW (entry->priv->completion_view), visible);
-
- if (entry->priv->popup_is_visible != visible) {
- entry->priv->popup_is_visible = visible;
- g_signal_emit (entry, e_entry_signals[E_ENTRY_COMPLETION_POPUP], 0, (gint) visible);
- }
-}
-
-static void
-e_entry_start_completion (EEntry *entry)
-{
- if (entry->priv->completion == NULL)
- return;
-
- if (e_entry_is_empty (entry))
- return;
-
- entry->priv->item_chosen = FALSE;
-
- e_completion_begin_search (entry->priv->completion,
- e_entry_get_text (entry),
- entry->priv->last_completion_pos = e_entry_get_position (entry),
- 0); /* No limit. Probably a bad idea. */
-}
-
-static gboolean
-start_delayed_cb (gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
- entry->priv->completion_delay_tag = 0;
- e_entry_start_completion (entry);
- return FALSE;
-}
-
-static void
-e_entry_start_delayed_completion (EEntry *entry, gint delay)
-{
- if (delay < 0)
- return;
-
- e_entry_cancel_delayed_completion (entry);
- entry->priv->completion_delay_tag = gtk_timeout_add (MAX (delay, 1), start_delayed_cb, entry);
-}
-
-static void
-e_entry_cancel_delayed_completion (EEntry *entry)
-{
- if (entry->priv->completion == NULL)
- return;
-
- if (entry->priv->completion_delay_tag) {
- gtk_timeout_remove (entry->priv->completion_delay_tag);
- entry->priv->completion_delay_tag = 0;
- }
-}
-
-static void
-nonempty_cb (ECompletionView *view, gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
-
- e_entry_show_popup (entry, TRUE);
-}
-
-static void
-full_cb (ECompletionView *view, gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
- gboolean show;
-
- show = GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (entry->canvas)) && view->choices->len > 0 && !entry->priv->item_chosen;
- e_entry_show_popup (entry, show);
-}
-
-static void
-browse_cb (ECompletionView *view, ECompletionMatch *match, gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
-
- if (match == NULL) {
- /* Requesting a completion. */
- e_entry_start_completion (entry);
- return;
- }
-
- if (entry->priv->pre_browse_text == NULL)
- entry->priv->pre_browse_text = g_strdup (e_entry_get_text (entry));
-
- /* If there is no other handler in place, echo the selected completion in
- the entry. */
- if (entry->priv->handler == NULL)
- e_entry_set_text_quiet (entry, e_completion_match_get_match_text (match));
-}
-
-static void
-unbrowse_cb (ECompletionView *view, gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
-
- if (entry->priv->pre_browse_text) {
-
- if (entry->priv->handler == NULL)
- e_entry_set_text_quiet (entry, entry->priv->pre_browse_text);
-
- g_free (entry->priv->pre_browse_text);
- entry->priv->pre_browse_text = NULL;
- }
-
- e_entry_show_popup (entry, FALSE);
-}
-
-static void
-activate_cb (ECompletionView *view, ECompletionMatch *match, gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
-
- e_entry_cancel_delayed_completion (entry);
-
- g_free (entry->priv->pre_browse_text);
- entry->priv->pre_browse_text = NULL;
- e_entry_show_popup (entry, FALSE);
-
- if (entry->priv->handler)
- entry->priv->handler (entry, match);
- else
- e_entry_set_text (entry, match->match_text);
-
- entry->priv->item_chosen = TRUE;
-
- e_entry_cancel_delayed_completion (entry);
-}
-
-void
-e_entry_enable_completion (EEntry *entry, ECompletion *completion)
-{
- g_return_if_fail (entry != NULL && E_IS_ENTRY (entry));
- g_return_if_fail (completion != NULL && E_IS_COMPLETION (completion));
-
- e_entry_enable_completion_full (entry, completion, -1, NULL);
-}
-
-static void
-button_press_cb (GtkWidget *w, GdkEvent *ev, gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
- GtkWidget *child;
-
- /* Bail out if our click happened inside of our widget. */
- child = gtk_get_event_widget (ev);
- if (child != w) {
- while (child) {
- if (child == w)
- return;
- child = child->parent;
- }
- }
-
- /* Treat this as an unbrowse */
- unbrowse_cb (E_COMPLETION_VIEW (w), entry);
-}
-
-static void
-cancel_completion_cb (ETextModel *model, gpointer user_data)
-{
- EEntry *entry = E_ENTRY (user_data);
-
- /* If we get the signal from the underlying text model, unbrowse.
- This usually means that the text model itself has done some
- sort of completion, or has otherwise transformed its contents
- in some way that would render any previous completion invalid. */
- unbrowse_cb (E_COMPLETION_VIEW (entry->priv->completion_view), entry);
-}
-
-static gint
-key_press_cb (GtkWidget *w, GdkEventKey *ev, gpointer user_data)
-{
- gint rv = 0;
- /* Forward signal */
- g_signal_emit_by_name (user_data, "key_press_event", ev, &rv);
- return rv;
-}
-
-static gint
-key_release_cb (GtkWidget *w, GdkEventKey *ev, gpointer user_data)
-{
- gint rv = 0;
- /* Forward signal */
- g_signal_emit_by_name (user_data, "key_release_event", ev, &rv);
- return rv;
-}
-
-static void
-e_entry_make_completion_window_transient (EEntry *entry)
-{
- GtkWidget *w;
-
- if (entry->priv->have_set_transient || entry->priv->completion_view_popup == NULL)
- return;
-
- w = GTK_WIDGET (entry)->parent;
- while (w && ! GTK_IS_WINDOW (w))
- w = w->parent;
-
- if (w) {
- gtk_window_set_transient_for (GTK_WINDOW (entry->priv->completion_view_popup),
- GTK_WINDOW (w));
- entry->priv->have_set_transient = 1;
- }
-}
-
-void
-e_entry_enable_completion_full (EEntry *entry, ECompletion *completion, gint delay, EEntryCompletionHandler handler)
-{
- g_return_if_fail (entry != NULL && E_IS_ENTRY (entry));
- g_return_if_fail (completion != NULL && E_IS_COMPLETION (completion));
-
- /* For now, completion can't be changed mid-stream. */
- g_return_if_fail (entry->priv->completion == NULL);
-
- entry->priv->completion = completion;
- g_object_ref (completion);
- gtk_object_sink (GTK_OBJECT (completion));
-
- entry->priv->completion_delay = delay;
- entry->priv->handler = handler;
-
- entry->priv->completion_view = e_completion_view_new (completion);
- /* Make the up and down keys enable and disable completions. */
- e_completion_view_set_complete_key (E_COMPLETION_VIEW (entry->priv->completion_view), GDK_Down);
- e_completion_view_set_uncomplete_key (E_COMPLETION_VIEW (entry->priv->completion_view), GDK_Up);
-
- g_signal_connect_after (entry->priv->completion_view,
- "button_press_event",
- G_CALLBACK (button_press_cb),
- entry);
-
- entry->priv->nonempty_signal_id = g_signal_connect (entry->priv->completion_view,
- "nonempty",
- G_CALLBACK (nonempty_cb),
- entry);
-
- entry->priv->full_signal_id = g_signal_connect (entry->priv->completion_view,
- "full",
- G_CALLBACK (full_cb),
- entry);
-
- entry->priv->browse_signal_id = g_signal_connect (entry->priv->completion_view,
- "browse",
- G_CALLBACK (browse_cb),
- entry);
-
- entry->priv->unbrowse_signal_id = g_signal_connect (entry->priv->completion_view,
- "unbrowse",
- G_CALLBACK (unbrowse_cb),
- entry);
-
- entry->priv->activate_signal_id = g_signal_connect (entry->priv->completion_view,
- "activate",
- G_CALLBACK (activate_cb),
- entry);
-
- entry->priv->completion_view_popup = gtk_window_new (GTK_WINDOW_POPUP);
-
- e_entry_make_completion_window_transient (entry);
-
- g_signal_connect (entry->item->model,
- "cancel_completion",
- G_CALLBACK (cancel_completion_cb),
- entry);
-
- g_signal_connect (entry->priv->completion_view_popup,
- "key_press_event",
- G_CALLBACK (key_press_cb),
- entry->canvas);
- g_signal_connect (entry->priv->completion_view_popup,
- "key_release_event",
- G_CALLBACK (key_release_cb),
- entry->canvas);
-
- e_completion_view_connect_keys (E_COMPLETION_VIEW (entry->priv->completion_view),
- GTK_WIDGET (entry->canvas));
-
- g_object_ref (entry->priv->completion_view_popup);
- gtk_object_sink (GTK_OBJECT (entry->priv->completion_view_popup));
- gtk_window_set_policy (GTK_WINDOW (entry->priv->completion_view_popup), TRUE, TRUE, TRUE);
- gtk_container_add (GTK_CONTAINER (entry->priv->completion_view_popup), entry->priv->completion_view);
- gtk_widget_show (entry->priv->completion_view);
-}
-
-gboolean
-e_entry_completion_popup_is_visible (EEntry *entry)
-{
- g_return_val_if_fail (E_IS_ENTRY (entry), FALSE);
-
- return entry->priv->popup_is_visible;
-}
-
-/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
-
-static void
-et_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EEntry *entry = E_ENTRY (object);
- GtkObject *item = GTK_OBJECT (entry->item);
-
- switch (prop_id){
- case PROP_MODEL:
- g_object_get_property (G_OBJECT (item), "model", value);
- break;
- case PROP_EVENT_PROCESSOR:
- g_object_get_property (G_OBJECT (item), "event_processor", value);
- break;
- case PROP_TEXT:
- g_object_get_property (G_OBJECT (item), "text", value);
- break;
-
- case PROP_FONT_GDK:
- g_object_get_property (G_OBJECT (item), "font_gdk", value);
- break;
-
- case PROP_JUSTIFICATION:
- g_object_get_property (G_OBJECT (item), "justification", value);
- break;
-
- case PROP_FILL_COLOR_GDK:
- g_object_get_property (G_OBJECT (item), "fill_color_gdk", value);
- break;
-
- case PROP_FILL_COLOR_RGBA:
- g_object_get_property (G_OBJECT (item), "fill_color_rgba", value);
- break;
-
- case PROP_FILL_STIPPLE:
- g_object_get_property (G_OBJECT (item), "fill_stiple", value);
- break;
-
- case PROP_EDITABLE:
- g_object_get_property (G_OBJECT (item), "editable", value);
- break;
-
- case PROP_USE_ELLIPSIS:
- g_object_get_property (G_OBJECT (item), "use_ellipsis", value);
- break;
-
- case PROP_ELLIPSIS:
- g_object_get_property (G_OBJECT (item), "ellipsis", value);
- break;
-
- case PROP_LINE_WRAP:
- g_object_get_property (G_OBJECT (item), "line_wrap", value);
- break;
-
- case PROP_BREAK_CHARACTERS:
- g_object_get_property (G_OBJECT (item), "break_characters", value);
- break;
-
- case PROP_MAX_LINES:
- g_object_get_property (G_OBJECT (item), "max_lines", value);
- break;
- case PROP_ALLOW_NEWLINES:
- g_object_get_property (G_OBJECT (item), "allow_newlines", value);
- break;
-
- case PROP_DRAW_BORDERS:
- g_value_set_boolean (value, entry->priv->draw_borders);
- break;
-
- case PROP_DRAW_BACKGROUND:
- g_object_get_property (G_OBJECT (item), "draw_background", value);
- break;
-
- case PROP_DRAW_BUTTON:
- g_object_get_property (G_OBJECT (item), "draw_button", value);
- break;
-
- case PROP_EMULATE_LABEL_RESIZE:
- g_value_set_boolean (value, entry->priv->emulate_label_resize);
- break;
-
- case PROP_CURSOR_POS:
- g_object_get_property (G_OBJECT (item), "cursor_pos", value);
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-et_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EEntry *entry = E_ENTRY (object);
- GtkObject *item = GTK_OBJECT (entry->item);
- GtkAnchorType anchor;
- double width, height;
- gint xthick;
- gint ythick;
- GtkWidget *widget = GTK_WIDGET(entry->canvas);
-
- d(g_print("%s: prop_id: %d\n", __FUNCTION__, prop_id));
-
- switch (prop_id){
- case PROP_MODEL:
- g_object_set_property (G_OBJECT (item), "model", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_EVENT_PROCESSOR:
- g_object_set_property (G_OBJECT (item), "event_processor", value);
- break;
-
- case PROP_TEXT:
- g_object_set_property (G_OBJECT (item), "text", value);
- d(g_print("%s: text: %s\n", __FUNCTION__, g_value_get_string (value)));
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_FONT:
- g_object_set_property (G_OBJECT (item), "font", value);
- d(g_print("%s: font: %s\n", __FUNCTION__, g_value_get_string (value)));
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_FONTSET:
- g_object_set_property (G_OBJECT (item), "fontset", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_FONT_GDK:
- g_object_set_property (G_OBJECT (item), "font_gdk", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_JUSTIFICATION:
- entry->priv->justification = g_value_get_enum (value);
- g_object_get(item,
- "clip_width", &width,
- "clip_height", &height,
- NULL);
-
- if (entry->priv->draw_borders) {
- xthick = 0;
- ythick = 0;
- } else {
- xthick = widget->style->xthickness;
- ythick = widget->style->ythickness;
- }
-
- switch (entry->priv->justification) {
- case GTK_JUSTIFY_CENTER:
- anchor = GTK_ANCHOR_N;
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(entry->item), width / 2, ythick);
- break;
- case GTK_JUSTIFY_RIGHT:
- anchor = GTK_ANCHOR_NE;
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(entry->item), width - xthick, ythick);
- break;
- default:
- anchor = GTK_ANCHOR_NW;
- e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(entry->item), xthick, ythick);
- break;
- }
- g_object_set(item,
- "justification", entry->priv->justification,
- "anchor", anchor,
- NULL);
- break;
-
- case PROP_FILL_COLOR:
- g_object_set_property (G_OBJECT (item), "fill_color", value);
- break;
-
- case PROP_FILL_COLOR_GDK:
- g_object_set_property (G_OBJECT (item), "fill_color_gdk", value);
- break;
-
- case PROP_FILL_COLOR_RGBA:
- g_object_set_property (G_OBJECT (item), "fill_color_rgba", value);
- break;
-
- case PROP_FILL_STIPPLE:
- g_object_set_property (G_OBJECT (item), "fill_stiple", value);
- break;
-
- case PROP_EDITABLE:
- g_object_set_property (G_OBJECT (item), "editable", value);
- break;
-
- case PROP_USE_ELLIPSIS:
- g_object_set_property (G_OBJECT (item), "use_ellipsis", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_ELLIPSIS:
- g_object_set_property (G_OBJECT (item), "ellipsis", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_LINE_WRAP:
- g_object_set_property (G_OBJECT (item), "line_wrap", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_BREAK_CHARACTERS:
- g_object_set_property (G_OBJECT (item), "break_characters", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_MAX_LINES:
- g_object_set_property (G_OBJECT (item), "max_lines", value);
- if (entry->priv->emulate_label_resize)
- gtk_widget_queue_resize (widget);
- break;
-
- case PROP_ALLOW_NEWLINES:
- g_object_set_property (G_OBJECT (item), "allow_newlines", value);
- break;
-
- case PROP_DRAW_BORDERS:
- if (entry->priv->draw_borders != g_value_get_boolean (value)) {
- entry->priv->draw_borders = g_value_get_boolean (value);
- g_object_set (item,
- "draw_borders", entry->priv->draw_borders,
- NULL);
- gtk_widget_queue_resize (GTK_WIDGET (entry));
- }
- break;
-
- case PROP_CURSOR_POS:
- g_object_set_property (G_OBJECT (item), "cursor_pos", value);
- break;
-
- case PROP_DRAW_BACKGROUND:
- g_object_set_property (G_OBJECT (item), "draw_background", value);
- break;
-
- case PROP_DRAW_BUTTON:
- g_object_set_property (G_OBJECT (item), "draw_button", value);
- break;
-
- case PROP_EMULATE_LABEL_RESIZE:
- if (entry->priv->emulate_label_resize != g_value_get_boolean (value)) {
- entry->priv->emulate_label_resize = g_value_get_boolean (value);
- gtk_widget_queue_resize (widget);
- }
- break;
- }
-}
-
-static void
-e_entry_dispose (GObject *object)
-{
- EEntry *entry = E_ENTRY (object);
-
- if (entry->priv) {
- if (entry->priv->completion_delay_tag)
- gtk_timeout_remove (entry->priv->completion_delay_tag);
-
- if (entry->priv->completion)
- g_object_unref (entry->priv->completion);
-
- if (entry->priv->ptr_grab) {
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gtk_grab_remove (GTK_WIDGET (entry->priv->completion_view));
- }
-
- if (entry->priv->completion_view_popup) {
- gtk_widget_destroy (GTK_WIDGET (entry->priv->completion_view_popup));
- g_object_unref (entry->priv->completion_view_popup);
- }
- g_free (entry->priv->pre_browse_text);
-
- if (entry->priv->changed_since_keypress_tag)
- gtk_timeout_remove (entry->priv->changed_since_keypress_tag);
-
- g_free (entry->priv);
- entry->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-e_entry_realize (GtkWidget *widget)
-{
- EEntry *entry;
-
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-
- entry = E_ENTRY (widget);
-
- e_entry_make_completion_window_transient (entry);
-
- if (entry->priv->emulate_label_resize) {
- d(g_print("%s: queue_resize\n", __FUNCTION__));
- gtk_widget_queue_resize (GTK_WIDGET (entry->canvas));
- }
-}
-
-static void
-e_entry_class_init (GObjectClass *object_class)
-{
- EEntryClass *klass = E_ENTRY_CLASS(object_class);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(object_class);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->set_property = et_set_property;
- object_class->get_property = et_get_property;
- object_class->dispose = e_entry_dispose;
-
- widget_class->realize = e_entry_realize;
-
- klass->changed = NULL;
- klass->activate = NULL;
-
- e_entry_signals[E_ENTRY_CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EEntryClass, changed),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_entry_signals[E_ENTRY_ACTIVATE] =
- g_signal_new ("activate",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EEntryClass, activate),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_entry_signals[E_ENTRY_POPULATE_POPUP] =
- g_signal_new ("populate_popup",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EEntryClass, populate_popup),
- NULL, NULL,
- e_marshal_NONE__POINTER_INT_OBJECT,
- G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_INT, GTK_TYPE_MENU);
-
- e_entry_signals[E_ENTRY_COMPLETION_POPUP] =
- g_signal_new ("completion_popup",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EEntryClass, completion_popup),
- NULL, NULL,
- gtk_marshal_NONE__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-
- g_object_class_install_property (object_class, PROP_MODEL,
- g_param_spec_object ("model",
- _( "Model" ),
- _( "Model" ),
- E_TYPE_TEXT_MODEL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_EVENT_PROCESSOR,
- g_param_spec_object ("event_processor",
- _( "Event Processor" ),
- _( "Event Processor" ),
- E_TEXT_EVENT_PROCESSOR_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_TEXT,
- g_param_spec_string ("text",
- _( "Text" ),
- _( "Text" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FONT,
- g_param_spec_string ("font",
- _( "Font" ),
- _( "Font" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FONTSET,
- g_param_spec_string ("fontset",
- _( "Fontset" ),
- _( "Fontset" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FONT_GDK,
- g_param_spec_boxed ("font_gdk",
- _( "GDKFont" ),
- _( "GDKFont" ),
- GDK_TYPE_FONT,
- G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class, PROP_JUSTIFICATION,
- g_param_spec_enum ("justification",
- _( "Justification" ),
- _( "Justification" ),
- GTK_TYPE_JUSTIFICATION, GTK_JUSTIFY_LEFT,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FILL_COLOR,
- g_param_spec_string ("fill_color",
- _( "Fill color" ),
- _( "Fill color" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FILL_COLOR_GDK,
- g_param_spec_boxed ("fill_color_gdk",
- _( "GDK fill color" ),
- _( "GDK fill color" ),
- GDK_TYPE_COLOR,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FILL_COLOR_RGBA,
- g_param_spec_uint ("fill_color_rgba",
- _( "GDK fill color" ),
- _( "GDK fill color" ),
- 0, G_MAXUINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_FILL_STIPPLE,
- g_param_spec_object ("fill_stipple",
- _( "Fill stipple" ),
- _( "FIll stipple" ),
- GDK_TYPE_WINDOW,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_EDITABLE,
- g_param_spec_boolean ("editable",
- _( "Editable" ),
- _( "Editable" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_USE_ELLIPSIS,
- g_param_spec_boolean ("use_ellipsis",
- _( "Use ellipsis" ),
- _( "Use ellipsis" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ELLIPSIS,
- g_param_spec_string ("ellipsis",
- _( "Ellipsis" ),
- _( "Ellipsis" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_LINE_WRAP,
- g_param_spec_boolean ("line_wrap",
- _( "Line wrap" ),
- _( "Line wrap" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_BREAK_CHARACTERS,
- g_param_spec_string ("break_characters",
- _( "Break characters" ),
- _( "Break characters" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_MAX_LINES,
- g_param_spec_int ("max_lines",
- _( "Max lines" ),
- _( "Max lines" ),
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_ALLOW_NEWLINES,
- g_param_spec_boolean ("allow_newlines",
- _( "Allow newlines" ),
- _( "Allow newlines" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_DRAW_BORDERS,
- g_param_spec_boolean ("draw_borders",
- _( "Draw borders" ),
- _( "Draw borders" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_DRAW_BACKGROUND,
- g_param_spec_boolean ("draw_background",
- _( "Draw background" ),
- _( "Draw background" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_DRAW_BUTTON,
- g_param_spec_boolean ("draw_button",
- _( "Draw button" ),
- _( "Draw button" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_CURSOR_POS,
- g_param_spec_int ("cursor_pos",
- _( "Cursor position" ),
- _( "Cursor position" ),
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class, PROP_EMULATE_LABEL_RESIZE,
- g_param_spec_boolean ("emulate_label_resize",
- _( "Emulate label resize" ),
- _( "Emulate label resize" ),
- FALSE,
- G_PARAM_READWRITE));
-}
-
-E_MAKE_TYPE(e_entry, "EEntry", EEntry, e_entry_class_init, e_entry_init, PARENT_TYPE)
diff --git a/widgets/text/e-entry.h b/widgets/text/e-entry.h
deleted file mode 100644
index 6e71364ee1..0000000000
--- a/widgets/text/e-entry.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-entry.h - An EText-based entry widget
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef _E_ENTRY_H_
-#define _E_ENTRY_H_
-
-#include <libgnomecanvas/gnome-canvas.h>
-#include <gtk/gtktable.h>
-#include <libxml/tree.h>
-#include <gal/e-text/e-text.h>
-#include "e-completion.h"
-
-G_BEGIN_DECLS
-
-#define E_ENTRY_TYPE (e_entry_get_type ())
-#define E_ENTRY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_ENTRY_TYPE, EEntry))
-#define E_ENTRY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_ENTRY_TYPE, EEntryClass))
-#define E_IS_ENTRY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_ENTRY_TYPE))
-#define E_IS_ENTRY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_ENTRY_TYPE))
-
-typedef struct _EEntry EEntry;
-typedef struct _EEntryClass EEntryClass;
-struct _EEntryPrivate;
-
-typedef void (*EEntryCompletionHandler) (EEntry *entry, ECompletionMatch *match);
-
-struct _EEntry {
- GtkTable parent;
-
- GnomeCanvas *canvas;
- EText *item;
-
- struct _EEntryPrivate *priv;
-};
-
-struct _EEntryClass {
- GtkTableClass parent_class;
-
- void (* changed) (EEntry *entry);
- void (* activate) (EEntry *entry);
- void (* populate_popup) (EEntry *entry, GdkEventButton *ev, gint pos, GtkMenu *menu);
- void (* completion_popup) (EEntry *entry, gint visible);
-};
-
-GtkType e_entry_get_type (void);
-
-void e_entry_construct (EEntry *entry);
-GtkWidget *e_entry_new (void);
-
-const gchar *e_entry_get_text (EEntry *entry);
-void e_entry_set_text (EEntry *entry, const gchar *text);
-
-gint e_entry_get_position (EEntry *entry);
-void e_entry_set_position (EEntry *entry, gint);
-void e_entry_select_region (EEntry *entry, gint start, gint end);
-
-void e_entry_set_editable (EEntry *entry, gboolean editable);
-
-void e_entry_enable_completion (EEntry *entry, ECompletion *completion);
-void e_entry_enable_completion_full (EEntry *entry, ECompletion *completion, gint autocomplete_delay,
- EEntryCompletionHandler handler);
-gboolean e_entry_completion_popup_is_visible (EEntry *entry);
-
-G_END_DECLS
-
-#endif /* _E_ENTRY_H_ */
diff --git a/widgets/text/e-table-text-model.c b/widgets/text/e-table-text-model.c
deleted file mode 100644
index 909a982528..0000000000
--- a/widgets/text/e-table-text-model.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-text-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <ctype.h>
-#include <gtk/gtksignal.h>
-#include <gal/util/e-util.h>
-#include "e-table-text-model.h"
-
-static void e_table_text_model_class_init (ETableTextModelClass *class);
-static void e_table_text_model_init (ETableTextModel *model);
-static void e_table_text_model_dispose (GObject *object);
-
-static const gchar *e_table_text_model_get_text (ETextModel *model);
-static void e_table_text_model_set_text (ETextModel *model, const gchar *text);
-static void e_table_text_model_insert (ETextModel *model, gint postion, const gchar *text);
-static void e_table_text_model_insert_length (ETextModel *model, gint postion, const gchar *text, gint length);
-static void e_table_text_model_delete (ETextModel *model, gint postion, gint length);
-
-#define PARENT_TYPE E_TYPE_TEXT_MODEL
-static GtkObject *parent_class;
-
-
-
-/**
- * e_table_text_model_get_type:
- * @void:
- *
- * Registers the &ETableTextModel class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &ETableTextModel class.
- **/
-E_MAKE_TYPE (e_table_text_model,
- "ETableTextModel",
- ETableTextModel,
- e_table_text_model_class_init,
- e_table_text_model_init,
- PARENT_TYPE)
-
-/* Class initialization function for the text item */
-static void
-e_table_text_model_class_init (ETableTextModelClass *klass)
-{
- GObjectClass *object_class;
- ETextModelClass *model_class;
-
- object_class = (GObjectClass *) klass;
- model_class = (ETextModelClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- model_class->get_text = e_table_text_model_get_text;
- model_class->set_text = e_table_text_model_set_text;
- model_class->insert = e_table_text_model_insert;
- model_class->insert_length = e_table_text_model_insert_length;
- model_class->delete = e_table_text_model_delete;
-
- object_class->dispose = e_table_text_model_dispose;
-}
-
-/* Object initialization function for the text item */
-static void
-e_table_text_model_init (ETableTextModel *model)
-{
- model->model = NULL;
- model->row = 0;
- model->model_col = 0;
- model->cell_changed_signal_id = 0;
- model->row_changed_signal_id = 0;
-}
-
-/* Dispose handler for the text item */
-static void
-e_table_text_model_dispose (GObject *object)
-{
- ETableTextModel *model;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (E_IS_TABLE_TEXT_MODEL (object));
-
- model = E_TABLE_TEXT_MODEL (object);
-
- if (model->model)
- g_assert (GTK_IS_OBJECT (model->model));
-
- if (model->cell_changed_signal_id)
- g_signal_handler_disconnect (model->model,
- model->cell_changed_signal_id);
- model->cell_changed_signal_id = 0;
-
- if (model->row_changed_signal_id)
- g_signal_handler_disconnect (model->model,
- model->row_changed_signal_id);
- model->row_changed_signal_id = 0;
-
- if (model->model)
- g_object_unref (model->model);
- model->model = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-static const gchar *
-e_table_text_model_get_text (ETextModel *text_model)
-{
- ETableTextModel *model = E_TABLE_TEXT_MODEL(text_model);
- if (model->model)
- return (gchar *)e_table_model_value_at (model->model, model->model_col, model->row);
- else
- return "";
-}
-
-static void
-e_table_text_model_set_text (ETextModel *text_model, const gchar *text)
-{
- ETableTextModel *model = E_TABLE_TEXT_MODEL(text_model);
- if (model->model)
- e_table_model_set_value_at (model->model, model->model_col, model->row, (void *) text);
-}
-
-static void
-e_table_text_model_insert (ETextModel *text_model, gint position, const gchar *text)
-{
- ETableTextModel *model = E_TABLE_TEXT_MODEL(text_model);
- if (model->model){
- gchar *temp = (gchar *)e_table_model_value_at (model->model, model->model_col, model->row);
- /* Can't use g_strdup_printf here because on some
- systems printf ("%.*s"); is locale dependent. */
- temp = e_strdup_append_strings (temp, position,
- text, -1,
- temp + position, -1,
- NULL);
- e_table_model_set_value_at (model->model, model->model_col, model->row, temp);
- g_free (temp);
- }
-}
-
-static void
-e_table_text_model_insert_length (ETextModel *text_model, gint position, const gchar *text, gint length)
-{
- ETableTextModel *model = E_TABLE_TEXT_MODEL(text_model);
- if (model->model){
- gchar *temp = (gchar *)e_table_model_value_at (model->model, model->model_col, model->row);
- /* Can't use g_strdup_printf here because on some
- systems printf ("%.*s"); is locale dependent. */
- temp = e_strdup_append_strings (temp, position,
- text, length,
- temp + position, -1,
- NULL);
- e_table_model_set_value_at (model->model, model->model_col, model->row, temp);
- g_free (temp);
- }
-}
-
-static void
-e_table_text_model_delete (ETextModel *text_model, gint position, gint length)
-{
- ETableTextModel *model = E_TABLE_TEXT_MODEL(text_model);
- if (model->model){
- gchar *temp = (gchar *)e_table_model_value_at (model->model, model->model_col, model->row);
- /* Can't use g_strdup_printf here because on some
- systems printf ("%.*s"); is locale dependent. */
- temp = e_strdup_append_strings (temp, position,
- temp + position + length, -1,
- NULL);
- e_table_model_set_value_at (model->model, model->model_col, model->row, temp);
- g_free (temp);
- }
-}
-
-static void
-cell_changed (ETableModel *table_model, int model_col, int row, ETableTextModel *model)
-{
- if (model->model_col == model_col &&
- model->row == row)
- e_text_model_changed (E_TEXT_MODEL(model));
-}
-
-static void
-row_changed (ETableModel *table_model, int row, ETableTextModel *model)
-{
- if (model->row == row)
- e_text_model_changed (E_TEXT_MODEL(model));
-}
-
-ETableTextModel *
-e_table_text_model_new (ETableModel *table_model, int row, int model_col)
-{
- ETableTextModel *model;
-
- g_return_val_if_fail(table_model != NULL, NULL);
- g_return_val_if_fail(E_IS_TABLE_MODEL(table_model), NULL);
-
- model = g_object_new (E_TYPE_TABLE_TEXT_MODEL, NULL);
- model->model = table_model;
- if (model->model){
- g_object_ref (model->model);
- model->cell_changed_signal_id =
- g_signal_connect (model->model,
- "model_cell_changed",
- G_CALLBACK(cell_changed),
- model);
- model->row_changed_signal_id =
- g_signal_connect (model->model,
- "model_row_changed",
- G_CALLBACK(row_changed),
- model);
- }
- model->row = row;
- model->model_col = model_col;
- return model;
-}
-
diff --git a/widgets/text/e-table-text-model.h b/widgets/text/e-table-text-model.h
deleted file mode 100644
index 46e82de1c4..0000000000
--- a/widgets/text/e-table-text-model.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-table-text-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_TABLE_TEXT_MODEL_H
-#define E_TABLE_TEXT_MODEL_H
-
-#include <gal/e-text/e-text-model.h>
-#include <gal/e-table/e-table-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TYPE_TABLE_TEXT_MODEL (e_table_text_model_get_type ())
-#define E_TABLE_TEXT_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_TABLE_TEXT_MODEL, ETableTextModel))
-#define E_TABLE_TEXT_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_TABLE_TEXT_MODEL, ETableTextModelClass))
-#define E_IS_TABLE_TEXT_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_TABLE_TEXT_MODEL))
-#define E_IS_TABLE_TEXT_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_TABLE_TEXT_MODEL))
-
-typedef struct _ETableTextModel ETableTextModel;
-typedef struct _ETableTextModelClass ETableTextModelClass;
-
-struct _ETableTextModel {
- ETextModel parent;
-
- ETableModel *model;
- int row;
- int model_col;
-
- int cell_changed_signal_id;
- int row_changed_signal_id;
-};
-
-struct _ETableTextModelClass {
- ETextModelClass parent_class;
-
-};
-
-
-/* Standard Gtk function */
-GtkType e_table_text_model_get_type (void);
-ETableTextModel *e_table_text_model_new (ETableModel *table_model, int row, int model_col);
-
-G_END_DECLS
-
-#endif
diff --git a/widgets/text/e-text-model-repos.c b/widgets/text/e-text-model-repos.c
deleted file mode 100644
index 17ffe07578..0000000000
--- a/widgets/text/e-text-model-repos.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-model-repos.c - Standard ETextModelReposFn definitions
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include "e-text-model-repos.h"
-
-#define MODEL_CLAMP(model, pos) (CLAMP((pos), 0, strlen((model)->text)))
-
-gint
-e_repos_shift (gint pos, gpointer data)
-{
- EReposShift *info = (EReposShift *) data;
- g_return_val_if_fail (data, -1);
-
- return e_text_model_validate_position (info->model, pos + info->change);
-}
-
-gint
-e_repos_absolute (gint pos, gpointer data)
-{
- EReposAbsolute *info = (EReposAbsolute *) data;
- g_return_val_if_fail (data, -1);
-
- pos = info->pos;
- if (pos < 0) {
- gint len = e_text_model_get_text_length (info->model);
- pos += len + 1;
- }
-
- return e_text_model_validate_position (info->model, pos);
-}
-
-gint
-e_repos_insert_shift (gint pos, gpointer data)
-{
- EReposInsertShift *info = (EReposInsertShift *) data;
- g_return_val_if_fail (data, -1);
-
- if (pos >= info->pos)
- pos += info->len;
-
- return e_text_model_validate_position (info->model, pos);
-}
-
-gint
-e_repos_delete_shift (gint pos, gpointer data)
-{
- EReposDeleteShift *info = (EReposDeleteShift *) data;
- g_return_val_if_fail (data, -1);
-
- if (pos > info->pos + info->len)
- pos -= info->len;
- else if (pos > info->pos)
- pos = info->pos;
-
- return e_text_model_validate_position (info->model, pos);
-}
-
-gint
-e_repos_clamp (gint pos, gpointer data)
-{
- ETextModel *model;
-
- g_return_val_if_fail (data != NULL && E_IS_TEXT_MODEL (data), -1);
- model = E_TEXT_MODEL (data);
-
- return e_text_model_validate_position (model, pos);
-}
diff --git a/widgets/text/e-text-model-repos.h b/widgets/text/e-text-model-repos.h
deleted file mode 100644
index 5f0c93ee6a..0000000000
--- a/widgets/text/e-text-model-repos.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-model-repos.h - Standard ETextModelReposFn definitions
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_TEXT_MODEL_REPOS_H
-#define E_TEXT_MODEL_REPOS_H
-
-#include "e-text-model.h"
-
-typedef struct {
- ETextModel *model;
- gint change; /* Relative change to position. */
-} EReposShift;
-
-gint e_repos_shift (gint pos, gpointer data);
-
-
-typedef struct {
- ETextModel *model;
- gint pos; /* Position to move to. Negative values count from the end buffer.
- (i.e. -1 puts cursor at the end, -2 one character from end, etc.) */
-} EReposAbsolute;
-
-gint e_repos_absolute (gint pos, gpointer data);
-
-
-typedef struct {
- ETextModel *model;
- gint pos; /* Location of first inserted character. */
- gint len; /* Number of characters inserted. */
-} EReposInsertShift;
-
-gint e_repos_insert_shift (gint pos, gpointer data);
-
-
-typedef struct {
- ETextModel *model;
- gint pos; /* Location of first deleted character. */
- gint len; /* Number of characters deleted. */
-} EReposDeleteShift;
-
-gint e_repos_delete_shift (gint pos, gpointer data);
-
-
-/* For e_repos_clamp, data is a pointer to an ETextModel. The only repositioning
- that occurs is to avoid buffer overruns. */
-
-gint e_repos_clamp (gint pos, gpointer data);
-
-#endif
diff --git a/widgets/text/e-text-model-test.c b/widgets/text/e-text-model-test.c
deleted file mode 100644
index 4913b7774e..0000000000
--- a/widgets/text/e-text-model-test.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-model-test.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <gnome.h>
-#include <gal/widgets/e-canvas.h>
-#include "e-text-model.h"
-#include "e-text-model-uri.h"
-#include "e-text.h"
-#include <gal/util/e-util.h>
-
-#if 0
-static void
-describe_model (ETextModel *model)
-{
- gint i, N;
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- N = e_text_model_object_count (model);
-
- g_print ("text: %s\n", e_text_model_get_text (model));
- g_print ("objs: %d\n", N);
-
- for (i=0; i<N; ++i) {
- gchar *s = e_text_model_strdup_nth_object (model, i);
- g_print ("obj%d: %s\n", i, s);
- g_free (s);
- }
-}
-#endif
-
-int
-main (int argc, gchar **argv)
-{
- GtkWidget *win[2], *canvas[2];
- GnomeCanvasItem *item[2];
- ETextModel *model;
- gint i;
-
- gnome_init ("ETextModelTest", "0.0", argc, argv);
-
- model = e_text_model_uri_new ();
-
- e_text_model_set_text (model, "My favorite website is http://www.ximian.com. My next favorite www.assbarn.com.");
-
- // describe_model (model);
-
- for (i=0; i<2; ++i) {
- win[i] = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
- canvas[i] = e_canvas_new ();
- gtk_widget_pop_colormap ();
-
- item[i] = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas[i])),
- e_text_get_type (),
- "model", model,
- "font", "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1",
- "anchor", GTK_ANCHOR_NORTH,
- "line_wrap", TRUE,
- "width", 150.0,
- "editable", TRUE,
- NULL);
-
- gtk_container_add (GTK_CONTAINER (win[i]), canvas[i]);
- gtk_widget_show_all (win[i]);
- }
-
- gtk_main ();
-
- return 0;
-}
diff --git a/widgets/text/e-text-model-uri.c b/widgets/text/e-text-model-uri.c
deleted file mode 100644
index 858771b481..0000000000
--- a/widgets/text/e-text-model-uri.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-model-uri.c - a text model w/ clickable URIs
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-text-model-uri.h"
-
-#include <ctype.h>
-#include <sys/types.h>
-#include <regex.h>
-#include <gtk/gtkmain.h>
-#include <libgnome/gnome-url.h>
-#include <gal/util/e-util.h>
-
-static void e_text_model_uri_class_init (ETextModelURIClass *class);
-static void e_text_model_uri_init (ETextModelURI *model);
-static void e_text_model_uri_dispose (GObject *object);
-
-static void objectify_uris (ETextModelURI *model);
-
-static void e_text_model_uri_objectify (ETextModel *model);
-static gint e_text_model_uri_validate_pos (ETextModel *model, gint pos);
-static gint e_text_model_uri_get_obj_count (ETextModel *model);
-static const gchar *e_text_model_uri_get_nth_object (ETextModel *model, gint i, gint *len);
-static void e_text_model_uri_activate_nth_object (ETextModel *model, gint);
-
-typedef struct _ObjInfo ObjInfo;
-struct _ObjInfo {
- gint offset, len;
-};
-
-#define PARENT_TYPE E_TYPE_TEXT_MODEL
-static GtkObject *parent_class;
-
-E_MAKE_TYPE (e_text_model_uri,
- "ETextModelURI",
- ETextModelURI,
- e_text_model_uri_class_init,
- e_text_model_uri_init,
- PARENT_TYPE)
-
-static void
-e_text_model_uri_class_init (ETextModelURIClass *klass)
-{
- GObjectClass *object_class;
- ETextModelClass *model_class;
-
- object_class = (GObjectClass *) klass;
- model_class = E_TEXT_MODEL_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = e_text_model_uri_dispose;
-
- model_class->object_activated = e_text_model_uri_activate_nth_object;
-
- model_class->objectify = e_text_model_uri_objectify;
- model_class->validate_pos = e_text_model_uri_validate_pos;
- model_class->obj_count = e_text_model_uri_get_obj_count;
- model_class->get_nth_obj = e_text_model_uri_get_nth_object;
-
-}
-
-static void
-e_text_model_uri_init (ETextModelURI *model)
-{
-
-}
-
-static void
-e_text_model_uri_dispose (GObject *object)
-{
- ETextModelURI *model_uri = E_TEXT_MODEL_URI (object);
- GList *iter;
-
- if (model_uri->objectify_idle) {
- gtk_idle_remove (model_uri->objectify_idle);
- model_uri->objectify_idle = 0;
- }
-
- for (iter = model_uri->uris; iter != NULL; iter = g_list_next (iter))
- g_free (iter->data);
- g_list_free (model_uri->uris);
- model_uri->uris = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-
-}
-
-static const gchar *uri_regex[] = {
- "(((news|telnet|nttp|file|http|ftp|https)://)|(www|ftp))[-A-Za-z0-9\\.]+(:[0-9]*)?/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*[^]'\\.}>\\) ,\\\"]",
- "(((news|telnet|nttp|file|http|ftp|https)://)|(www|ftp))[-A-Za-z0-9\\.]+[-A-Za-z0-9](:[0-9]*)?",
- "mailto:[A-Za-z0-9_]+@[-A-Za-z0-9_]+\\.[-A-Za-z0-9\\.]+[-A-Za-z0-9]",
- NULL
-};
-static gint regex_count = 0;
-static regex_t *regex_compiled = NULL;
-
-static void
-regex_init (void)
-{
- gint i;
-
- if (regex_count != 0)
- return;
-
- while (uri_regex[regex_count]) ++regex_count;
-
- regex_compiled = g_new0 (regex_t, regex_count);
-
- for (i=0; i<regex_count; ++i) {
- if (regcomp (&regex_compiled[i], uri_regex[i], REG_EXTENDED))
- g_error ("Bad regex?: %s", uri_regex[i]);
- }
-}
-
-
-static void
-objectify_uris (ETextModelURI *model_uri)
-{
- static gboolean objectifying = FALSE;
-
- ETextModel *model = E_TEXT_MODEL (model_uri);
- const gchar *txt;
- GList *iter, *old_uris;
- gint offset, len;
- gboolean found_match;
- regmatch_t match;
- gboolean changed;
-
- if (objectifying)
- return;
-
- objectifying = TRUE;
-
- if (regex_count == 0)
- regex_init ();
-
- txt = e_text_model_get_text (model);
- len = e_text_model_get_text_length (model);
-
- old_uris = model_uri->uris;
- model_uri->uris = NULL;
-
- if (txt) {
- offset = 0;
- found_match = TRUE;
-
- while (offset < len && found_match) {
-
- gint i, so=-1, eo=-1;
-
- found_match = FALSE;
-
- for (i=0; i<regex_count; ++i) {
-
- if (regexec (&regex_compiled[i], txt+offset, 1, &match, 0) == 0) {
-
- /* Take earliest match possible. In case of a tie, take the
- largest possible match. */
- if (!found_match
- || match.rm_so < so
- || (match.rm_so == so && match.rm_eo > eo)) {
- so = match.rm_so;
- eo = match.rm_eo;
- }
- found_match = TRUE;
- }
- }
-
- if (found_match) {
-
- ObjInfo *info = g_new0 (ObjInfo, 1);
- info->offset = offset + so;
- info->len = eo - so;
-
- model_uri->uris = g_list_append (model_uri->uris, info);
-
- offset += eo;
- }
- }
- }
-
- changed = (g_list_length (old_uris) != g_list_length (model_uri->uris));
-
- if (!changed) {
- /* Check that there is a 1-1 correspondence between object positions. */
- GList *jter;
-
- for (iter = model_uri->uris; iter != NULL && !changed; iter = g_list_next (iter)) {
- ObjInfo *info = (ObjInfo *) iter->data;
- found_match = FALSE;
- for (jter = old_uris; jter != NULL && !found_match; jter = g_list_next (jter)) {
- ObjInfo *jnfo = (ObjInfo *) jter->data;
-
- if (info->offset == jnfo->offset && info->len == jnfo->len)
- found_match = TRUE;
- }
- changed = !found_match;
- }
- }
-
- if (changed)
- e_text_model_changed (model);
-
- /* Free old uris */
- for (iter = old_uris; iter != NULL; iter = g_list_next (iter))
- g_free (iter->data);
- g_list_free (old_uris);
-
- objectifying = FALSE;
-}
-
-static gboolean
-objectify_idle_cb (gpointer ptr)
-{
- ETextModelURI *model_uri = E_TEXT_MODEL_URI (ptr);
-
- g_assert (model_uri->objectify_idle);
- objectify_uris (model_uri);
- model_uri->objectify_idle = 0;
-
- return FALSE;
-}
-
-static void
-e_text_model_uri_objectify (ETextModel *model)
-{
- ETextModelURI *model_uri = E_TEXT_MODEL_URI (model);
-
- if (model_uri->objectify_idle == 0)
- model_uri->objectify_idle = gtk_idle_add (objectify_idle_cb, model);
-
- if (E_TEXT_MODEL_CLASS(parent_class)->objectify)
- E_TEXT_MODEL_CLASS(parent_class)->objectify (model);
-}
-
-static void
-objectify_idle_flush (ETextModelURI *model_uri)
-{
- if (model_uri->objectify_idle) {
- gtk_idle_remove (model_uri->objectify_idle);
- model_uri->objectify_idle = 0;
- objectify_uris (model_uri);
- }
-}
-
-static gint
-e_text_model_uri_validate_pos (ETextModel *model, gint pos)
-{
- gint obj_num;
-
- /* Cause us to skip over objects */
-
- obj_num = e_text_model_get_object_at_offset (model, pos);
- if (obj_num != -1) {
- gint pos0, pos1, mp;
- e_text_model_get_nth_object_bounds (model, obj_num, &pos0, &pos1);
- mp = (pos0 + pos1)/2;
- if (pos0 < pos && pos < mp)
- pos = pos1;
- else if (mp <= pos && pos < pos1)
- pos = pos0;
- }
-
-
-
- if (E_TEXT_MODEL_CLASS (parent_class)->validate_pos)
- pos = E_TEXT_MODEL_CLASS (parent_class)->validate_pos (model, pos);
-
- return pos;
-}
-
-static gint
-e_text_model_uri_get_obj_count (ETextModel *model)
-{
- ETextModelURI *model_uri = E_TEXT_MODEL_URI (model);
-
- objectify_idle_flush (model_uri);
-
- return g_list_length (model_uri->uris);
-}
-
-static const gchar *
-e_text_model_uri_get_nth_object (ETextModel *model, gint i, gint *len)
-{
- ETextModelURI *model_uri = E_TEXT_MODEL_URI (model);
- ObjInfo *info;
- const gchar *txt;
-
- objectify_idle_flush (model_uri);
-
- txt = e_text_model_get_text (model);
-
- info = (ObjInfo *) g_list_nth_data (model_uri->uris, i);
- g_return_val_if_fail (info != NULL, NULL);
-
-
- if (len)
- *len = info->len;
- return txt + info->offset;
-}
-
-static void
-e_text_model_uri_activate_nth_object (ETextModel *model, gint i)
-{
- gchar *obj_str;
-
- objectify_idle_flush (E_TEXT_MODEL_URI (model));
-
- obj_str = e_text_model_strdup_nth_object (model, i);
- gnome_url_show (obj_str, NULL);
- g_free (obj_str);
-}
-
-ETextModel *
-e_text_model_uri_new (void)
-{
- return E_TEXT_MODEL (g_object_new (E_TYPE_TEXT_MODEL_URI, NULL));
-}
-
-
-/* $Id$ */
diff --git a/widgets/text/e-text-model-uri.h b/widgets/text/e-text-model-uri.h
deleted file mode 100644
index 64cd7b2a57..0000000000
--- a/widgets/text/e-text-model-uri.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-model-uri.h - a text model w/ clickable URIs
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Jon Trowbridge <trow@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_TEXT_MODEL_URI_H
-#define E_TEXT_MODEL_URI_H
-
-#include <gal/e-text/e-text-model.h>
-
-G_BEGIN_DECLS
-
-#define E_TYPE_TEXT_MODEL_URI (e_text_model_uri_get_type ())
-#define E_TEXT_MODEL_URI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_TEXT_MODEL_URI, ETextModelURI))
-#define E_TEXT_MODEL_URI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_TEXT_MODEL_URI, ETextModelURIClass))
-#define E_IS_TEXT_MODEL_URI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_TEXT_MODEL_URI))
-#define E_IS_TEXT_MODEL_URI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_TEXT_MODEL_URI))
-
-typedef struct _ETextModelURI ETextModelURI;
-typedef struct _ETextModelURIClass ETextModelURIClass;
-
-struct _ETextModelURI {
- ETextModel item;
- GList *uris;
-
- guint objectify_idle;
-};
-
-struct _ETextModelURIClass {
- ETextModelClass parent_class;
-};
-
-GtkType e_text_model_uri_get_type (void);
-ETextModel *e_text_model_uri_new (void);
-
-G_END_DECLS
-
-#endif
diff --git a/widgets/text/e-text-model.c b/widgets/text/e-text-model.c
deleted file mode 100644
index ed6be10672..0000000000
--- a/widgets/text/e-text-model.c
+++ /dev/null
@@ -1,600 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-model.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#undef PARANOID_DEBUGGING
-
-#include <config.h>
-#include <ctype.h>
-#include <string.h>
-#include <gtk/gtksignal.h>
-#include <gal/util/e-util.h>
-#include "e-text-model-repos.h"
-#include "e-text-model.h"
-#include "gal/util/e-util.h"
-
-enum {
- E_TEXT_MODEL_CHANGED,
- E_TEXT_MODEL_REPOSITION,
- E_TEXT_MODEL_OBJECT_ACTIVATED,
- E_TEXT_MODEL_CANCEL_COMPLETION,
- E_TEXT_MODEL_LAST_SIGNAL
-};
-
-static guint e_text_model_signals[E_TEXT_MODEL_LAST_SIGNAL] = { 0 };
-
-struct _ETextModelPrivate {
- GString *text;
-};
-
-static void e_text_model_class_init (ETextModelClass *class);
-static void e_text_model_init (ETextModel *model);
-static void e_text_model_dispose (GObject *object);
-
-static gint e_text_model_real_validate_position (ETextModel *, gint pos);
-static const gchar *e_text_model_real_get_text (ETextModel *model);
-static gint e_text_model_real_get_text_length (ETextModel *model);
-static void e_text_model_real_set_text (ETextModel *model, const gchar *text);
-static void e_text_model_real_insert (ETextModel *model, gint postion, const gchar *text);
-static void e_text_model_real_insert_length (ETextModel *model, gint postion, const gchar *text, gint length);
-static void e_text_model_real_delete (ETextModel *model, gint postion, gint length);
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObject *parent_class;
-
-
-
-/**
- * e_text_model_get_type:
- * @void:
- *
- * Registers the &ETextModel class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &ETextModel class.
- **/
-E_MAKE_TYPE (e_text_model,
- "ETextModel",
- ETextModel,
- e_text_model_class_init,
- e_text_model_init,
- PARENT_TYPE)
-
-/* Class initialization function for the text item */
-static void
-e_text_model_class_init (ETextModelClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- e_text_model_signals[E_TEXT_MODEL_CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextModelClass, changed),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_text_model_signals[E_TEXT_MODEL_REPOSITION] =
- g_signal_new ("reposition",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextModelClass, reposition),
- NULL, NULL,
- e_marshal_NONE__POINTER_POINTER,
- G_TYPE_NONE, 2,
- G_TYPE_POINTER, G_TYPE_POINTER);
-
- e_text_model_signals[E_TEXT_MODEL_OBJECT_ACTIVATED] =
- g_signal_new ("object_activated",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextModelClass, object_activated),
- NULL, NULL,
- e_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- e_text_model_signals[E_TEXT_MODEL_CANCEL_COMPLETION] =
- g_signal_new ("cancel_completion",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextModelClass, cancel_completion),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- /* No default signal handlers. */
- klass->changed = NULL;
- klass->reposition = NULL;
- klass->object_activated = NULL;
-
- klass->validate_pos = e_text_model_real_validate_position;
-
- klass->get_text = e_text_model_real_get_text;
- klass->get_text_len = e_text_model_real_get_text_length;
- klass->set_text = e_text_model_real_set_text;
- klass->insert = e_text_model_real_insert;
- klass->insert_length = e_text_model_real_insert_length;
- klass->delete = e_text_model_real_delete;
-
- /* We explicitly don't define default handlers for these. */
- klass->objectify = NULL;
- klass->obj_count = NULL;
- klass->get_nth_obj = NULL;
-
- object_class->dispose = e_text_model_dispose;
-}
-
-/* Object initialization function for the text item */
-static void
-e_text_model_init (ETextModel *model)
-{
- model->priv = g_new0 (struct _ETextModelPrivate, 1);
- model->priv->text = g_string_new ("");
-}
-
-/* Dispose handler for the text item */
-static void
-e_text_model_dispose (GObject *object)
-{
- ETextModel *model;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (object));
-
- model = E_TEXT_MODEL (object);
-
- if (model->priv) {
- g_string_free (model->priv->text, TRUE);
-
- g_free (model->priv);
- model->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static gint
-e_text_model_real_validate_position (ETextModel *model, gint pos)
-{
- gint len = e_text_model_get_text_length (model);
-
- if (pos < 0)
- pos = 0;
- else if (pos > len)
- pos = len;
-
- return pos;
-}
-
-static const gchar *
-e_text_model_real_get_text (ETextModel *model)
-{
- if (model->priv->text)
- return model->priv->text->str;
- else
- return "";
-}
-
-static gint
-e_text_model_real_get_text_length (ETextModel *model)
-{
- return g_utf8_strlen (model->priv->text->str, -1);
-}
-
-static void
-e_text_model_real_set_text (ETextModel *model, const gchar *text)
-{
- EReposAbsolute repos;
- gboolean changed = FALSE;
-
- if (text == NULL) {
- changed = (*model->priv->text->str != '\0');
-
- g_string_set_size (model->priv->text, 0);
-
- } else if (*model->priv->text->str == '\0' || strcmp (model->priv->text->str, text)) {
-
- g_string_assign (model->priv->text, text);
-
- changed = TRUE;
- }
-
- if (changed) {
- e_text_model_changed (model);
- repos.model = model;
- repos.pos = -1;
- e_text_model_reposition (model, e_repos_absolute, &repos);
- }
-}
-
-static void
-e_text_model_real_insert (ETextModel *model, gint position, const gchar *text)
-{
- e_text_model_insert_length (model, position, text, strlen (text));
-}
-
-static void
-e_text_model_real_insert_length (ETextModel *model, gint position, const gchar *text, gint length)
-{
- EReposInsertShift repos;
- int model_len = e_text_model_real_get_text_length (model);
- char *offs;
- const char *p;
- int byte_length, l;
-
- if (position > model_len)
- return;
-
- offs = g_utf8_offset_to_pointer (model->priv->text->str, position);
-
- for (p = text, l = 0;
- l < length;
- p = g_utf8_next_char (p), l ++) ;
-
- byte_length = p - text;
-
- g_string_insert_len (model->priv->text,
- offs - model->priv->text->str,
- text, byte_length);
-
- e_text_model_changed (model);
-
- repos.model = model;
- repos.pos = position;
- repos.len = length;
-
- e_text_model_reposition (model, e_repos_insert_shift, &repos);
-}
-
-static void
-e_text_model_real_delete (ETextModel *model, gint position, gint length)
-{
- EReposDeleteShift repos;
- int byte_position, byte_length;
- char *offs, *p;
- int l;
-
- offs = g_utf8_offset_to_pointer (model->priv->text->str, position);
- byte_position = offs - model->priv->text->str;
-
- for (p = offs, l = 0;
- l < length;
- p = g_utf8_next_char (p), l ++) ;
-
- byte_length = p - offs;
-
- g_string_erase (model->priv->text,
- byte_position, byte_length);
-
- e_text_model_changed (model);
-
- repos.model = model;
- repos.pos = position;
- repos.len = length;
-
- e_text_model_reposition (model, e_repos_delete_shift, &repos);
-}
-
-void
-e_text_model_changed (ETextModel *model)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- /*
- Objectify before emitting any signal.
- While this method could, in theory, do pretty much anything, it is meant
- for scanning objects and converting substrings into embedded objects.
- */
- if (E_TEXT_MODEL_GET_CLASS (model)->objectify)
- E_TEXT_MODEL_GET_CLASS (model)->objectify (model);
-
- g_signal_emit (model,
- e_text_model_signals[E_TEXT_MODEL_CHANGED], 0);
-}
-
-void
-e_text_model_cancel_completion (ETextModel *model)
-{
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- g_signal_emit (model, e_text_model_signals[E_TEXT_MODEL_CANCEL_COMPLETION], 0);
-}
-
-void
-e_text_model_reposition (ETextModel *model, ETextModelReposFn fn, gpointer repos_data)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
- g_return_if_fail (fn != NULL);
-
- g_signal_emit (model,
- e_text_model_signals[E_TEXT_MODEL_REPOSITION], 0,
- fn, repos_data);
-}
-
-gint
-e_text_model_validate_position (ETextModel *model, gint pos)
-{
- g_return_val_if_fail (model != NULL, 0);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), 0);
-
- if (E_TEXT_MODEL_GET_CLASS (model)->validate_pos)
- pos = E_TEXT_MODEL_GET_CLASS (model)->validate_pos (model, pos);
-
- return pos;
-}
-
-const gchar *
-e_text_model_get_text (ETextModel *model)
-{
- g_return_val_if_fail (model != NULL, NULL);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), NULL);
-
- if (E_TEXT_MODEL_GET_CLASS (model)->get_text)
- return E_TEXT_MODEL_GET_CLASS (model)->get_text (model);
-
- return "";
-}
-
-gint
-e_text_model_get_text_length (ETextModel *model)
-{
- g_return_val_if_fail (model != NULL, 0);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), 0);
-
- if (E_TEXT_MODEL_GET_CLASS (model)->get_text_len (model)) {
-
- gint len = E_TEXT_MODEL_GET_CLASS (model)->get_text_len (model);
-
-#ifdef PARANOID_DEBUGGING
- const gchar *str = e_text_model_get_text (model);
- gint len2 = str ? g_utf8_strlen (str, -1) : 0;
- if (len != len)
- g_error ("\"%s\" length reported as %d, not %d.", str, len, len2);
-#endif
-
- return len;
-
- } else {
- /* Calculate length the old-fashioned way... */
- const gchar *str = e_text_model_get_text (model);
- return str ? g_utf8_strlen (str, -1) : 0;
- }
-}
-
-void
-e_text_model_set_text (ETextModel *model, const gchar *text)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- if (E_TEXT_MODEL_GET_CLASS (model)->set_text)
- E_TEXT_MODEL_GET_CLASS (model)->set_text (model, text);
-}
-
-void
-e_text_model_insert (ETextModel *model, gint position, const gchar *text)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- if (text == NULL)
- return;
-
- if (E_TEXT_MODEL_GET_CLASS (model)->insert)
- E_TEXT_MODEL_GET_CLASS (model)->insert (model, position, text);
-}
-
-void
-e_text_model_insert_length (ETextModel *model, gint position, const gchar *text, gint length)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
- g_return_if_fail (length >= 0);
-
-
- if (text == NULL || length == 0)
- return;
-
- if (E_TEXT_MODEL_GET_CLASS (model)->insert_length)
- E_TEXT_MODEL_GET_CLASS (model)->insert_length (model, position, text, length);
-}
-
-void
-e_text_model_prepend (ETextModel *model, const gchar *text)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- if (text == NULL)
- return;
-
- e_text_model_insert (model, 0, text);
-}
-
-void
-e_text_model_append (ETextModel *model, const gchar *text)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- if (text == NULL)
- return;
-
- e_text_model_insert (model, e_text_model_get_text_length (model), text);
-}
-
-void
-e_text_model_delete (ETextModel *model, gint position, gint length)
-{
- gint txt_len;
-
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
- g_return_if_fail (length >= 0);
-
- txt_len = e_text_model_get_text_length (model);
- if (position + length > txt_len)
- length = txt_len - position;
-
- if (length <= 0)
- return;
-
- if (E_TEXT_MODEL_GET_CLASS (model)->delete)
- E_TEXT_MODEL_GET_CLASS (model)->delete (model, position, length);
-}
-
-gint
-e_text_model_object_count (ETextModel *model)
-{
- g_return_val_if_fail (model != NULL, 0);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), 0);
-
- if (E_TEXT_MODEL_GET_CLASS (model)->obj_count)
- return E_TEXT_MODEL_GET_CLASS (model)->obj_count (model);
-
- return 0;
-}
-
-const gchar *
-e_text_model_get_nth_object (ETextModel *model, gint n, gint *len)
-{
- g_return_val_if_fail (model != NULL, NULL);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), NULL);
-
- if (n < 0 || n >= e_text_model_object_count (model))
- return NULL;
-
- if (E_TEXT_MODEL_GET_CLASS (model)->get_nth_obj)
- return E_TEXT_MODEL_GET_CLASS (model)->get_nth_obj (model, n, len);
-
- return NULL;
-}
-
-gchar *
-e_text_model_strdup_nth_object (ETextModel *model, gint n)
-{
- const gchar *obj;
- gint len = 0;
-
- g_return_val_if_fail (model != NULL, NULL);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), NULL);
-
- obj = e_text_model_get_nth_object (model, n, &len);
-
- if (obj) {
- gint byte_len;
- byte_len = g_utf8_offset_to_pointer (obj, len) - obj;
- return g_strndup (obj, byte_len);
- }
- else {
- return NULL;
- }
-}
-
-void
-e_text_model_get_nth_object_bounds (ETextModel *model, gint n, gint *start, gint *end)
-{
- const gchar *txt = NULL, *obj = NULL;
- gint len = 0;
-
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
-
- txt = e_text_model_get_text (model);
- obj = e_text_model_get_nth_object (model, n, &len);
-
- g_return_if_fail (obj != NULL);
-
- if (start)
- *start = g_utf8_pointer_to_offset (txt, obj);
- if (end)
- *end = *start + len;
-}
-
-gint
-e_text_model_get_object_at_offset (ETextModel *model, gint offset)
-{
- g_return_val_if_fail (model != NULL, -1);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), -1);
-
- if (offset < 0 || offset >= e_text_model_get_text_length (model))
- return -1;
-
- /* If an optimized version has been provided, we use it. */
- if (E_TEXT_MODEL_GET_CLASS (model)->obj_at_offset) {
-
- return E_TEXT_MODEL_GET_CLASS (model)->obj_at_offset (model, offset);
-
- } else {
- /* If not, we fake it.*/
-
- gint i, N, pos0, pos1;
-
- N = e_text_model_object_count (model);
-
- for (i = 0; i < N; ++i) {
- e_text_model_get_nth_object_bounds (model, i, &pos0, &pos1);
- if (pos0 <= offset && offset < pos1)
- return i;
- }
-
- }
-
- return -1;
-}
-
-gint
-e_text_model_get_object_at_pointer (ETextModel *model, const gchar *s)
-{
- g_return_val_if_fail (model != NULL, -1);
- g_return_val_if_fail (E_IS_TEXT_MODEL (model), -1);
- g_return_val_if_fail (s != NULL, -1);
-
- return e_text_model_get_object_at_offset (model, s - e_text_model_get_text (model));
-}
-
-void
-e_text_model_activate_nth_object (ETextModel *model, gint n)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_TEXT_MODEL (model));
- g_return_if_fail (n >= 0);
- g_return_if_fail (n < e_text_model_object_count (model));
-
- g_signal_emit (model, e_text_model_signals[E_TEXT_MODEL_OBJECT_ACTIVATED], 0, n);
-}
-
-ETextModel *
-e_text_model_new (void)
-{
- ETextModel *model = g_object_new (E_TYPE_TEXT_MODEL, NULL);
- return model;
-}
diff --git a/widgets/text/e-text-model.h b/widgets/text/e-text-model.h
deleted file mode 100644
index 2e472ead44..0000000000
--- a/widgets/text/e-text-model.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-model.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_TEXT_MODEL_H
-#define E_TEXT_MODEL_H
-
-#include <glib.h>
-#include <gtk/gtkobject.h>
-
-G_BEGIN_DECLS
-
-#define E_TYPE_TEXT_MODEL (e_text_model_get_type ())
-#define E_TEXT_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_TEXT_MODEL, ETextModel))
-#define E_TEXT_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_TEXT_MODEL, ETextModelClass))
-#define E_IS_TEXT_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_TEXT_MODEL))
-#define E_IS_TEXT_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_TEXT_MODEL))
-#define E_TEXT_MODEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_TYPE_TEXT_MODEL_TYPE, ETextModelClass))
-
-typedef struct _ETextModel ETextModel;
-typedef struct _ETextModelClass ETextModelClass;
-
-struct _ETextModelPrivate;
-
-typedef gint (*ETextModelReposFn) (gint, gpointer);
-
-struct _ETextModel {
- GObject item;
-
- struct _ETextModelPrivate *priv;
-};
-
-struct _ETextModelClass {
- GObjectClass parent_class;
-
- /* Signal */
- void (* changed) (ETextModel *model);
- void (* reposition) (ETextModel *model, ETextModelReposFn fn, gpointer repos_fn_data);
- void (* object_activated) (ETextModel *model, gint obj_num);
- void (* cancel_completion) (ETextModel *model);
-
- /* Virtual methods */
-
- gint (* validate_pos) (ETextModel *model, gint pos);
-
- const char *(* get_text) (ETextModel *model);
- gint (* get_text_len) (ETextModel *model);
- void (* set_text) (ETextModel *model, const gchar *text);
- void (* insert) (ETextModel *model, gint position, const gchar *text);
- void (* insert_length) (ETextModel *model, gint position, const gchar *text, gint length);
- void (* delete) (ETextModel *model, gint position, gint length);
-
- void (* objectify) (ETextModel *model);
- gint (* obj_count) (ETextModel *model);
- const gchar *(* get_nth_obj) (ETextModel *model, gint n, gint *len);
- gint (* obj_at_offset) (ETextModel *model, gint offset);
-};
-
-GType e_text_model_get_type (void);
-
-ETextModel *e_text_model_new (void);
-
-void e_text_model_changed (ETextModel *model);
-void e_text_model_cancel_completion (ETextModel *model);
-
-void e_text_model_reposition (ETextModel *model, ETextModelReposFn fn, gpointer repos_data);
-gint e_text_model_validate_position (ETextModel *model, gint pos);
-
-
-/* Functions for manipulating the underlying text. */
-
-const gchar *e_text_model_get_text (ETextModel *model);
-gint e_text_model_get_text_length (ETextModel *model);
-void e_text_model_set_text (ETextModel *model, const gchar *text);
-void e_text_model_insert (ETextModel *model, gint position, const gchar *text);
-void e_text_model_insert_length (ETextModel *model, gint position, const gchar *text, gint length);
-void e_text_model_prepend (ETextModel *model, const gchar *text);
-void e_text_model_append (ETextModel *model, const gchar *text);
-void e_text_model_delete (ETextModel *model, gint position, gint length);
-
-
-/* Functions for accessing embedded objects. */
-
-gint e_text_model_object_count (ETextModel *model);
-const gchar *e_text_model_get_nth_object (ETextModel *model, gint n, gint *len);
-gchar *e_text_model_strdup_nth_object (ETextModel *model, gint n);
-void e_text_model_get_nth_object_bounds (ETextModel *model, gint n, gint *start_pos, gint *end_pos);
-gint e_text_model_get_object_at_offset (ETextModel *model, gint offset);
-gint e_text_model_get_object_at_pointer (ETextModel *model, const gchar *c);
-void e_text_model_activate_nth_object (ETextModel *model, gint n);
-
-G_END_DECLS
-
-#endif
diff --git a/widgets/text/e-text-test.c b/widgets/text/e-text-test.c
deleted file mode 100644
index d10a745d85..0000000000
--- a/widgets/text/e-text-test.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text-test.c - E-Text item test program
- * Copyright 2000: Iain Holmes <ih@csd.abdn.ac.uk>
- *
- * Authors:
- * Iain Holmes <ih@csd.abdn.ac.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include "e-text.h"
-#include <gnome.h>
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-unicode.h"
-
-GnomeCanvasItem *rect;
-
-static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, GnomeCanvasItem *item)
-{
- double height;
- gnome_canvas_item_set( item,
- "width", (double) allocation->width,
- NULL );
- g_object_get(item,
- "height", &height,
- NULL);
- height = MAX(height, allocation->height);
- gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, allocation->width, height );
- gnome_canvas_item_set( rect,
- "x2", (double) allocation->width,
- "y2", (double) height,
- NULL );
-}
-
-static void
-reflow (GtkWidget *canvas, GnomeCanvasItem *item)
-{
- double height;
- g_object_get(item,
- "height", &height,
- NULL);
- height = MAX(height, canvas->allocation.height);
- gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, canvas->allocation.width, height );
- gnome_canvas_item_set( rect,
- "x2", (double) canvas->allocation.width,
- "y2", (double) height,
- NULL );
-}
-
-static void
-quit_cb (gpointer data, GObject *where_object_was)
-{
- gtk_main_quit ();
-}
-
-static void
-change_text_cb (GtkEntry *entry,
- EText *text)
-{
- gchar *str;
-
- str = e_utf8_gtk_entry_get_text (entry);
- gnome_canvas_item_set (GNOME_CANVAS_ITEM (text),
- "text", str,
- NULL);
-}
-
-static void
-change_font_cb (GtkEntry *entry,
- EText *text)
-{
- gchar *font;
-
- font = gtk_entry_get_text (entry);
- gnome_canvas_item_set (GNOME_CANVAS_ITEM (text),
- "font", font,
- NULL);
-}
-
-int
-main (int argc,
- char **argv)
-{
- GtkWidget *window, *canvas, *scroller, *vbox, *text, *font;
- GtkWidget *frame;
- GnomeCanvasItem *item;
-
- gnome_init ("ETextTest", "0.0.1", argc, argv);
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (window), "EText Test");
- g_object_weak_ref (G_OBJECT (window),
- quit_cb, NULL);
-
- gtk_widget_push_colormap (gdk_rgb_get_cmap ());
- canvas = e_canvas_new ();
- gtk_widget_pop_colormap ();
- scroller = gtk_scrolled_window_new (NULL, NULL);
- vbox = gtk_vbox_new (FALSE, 2);
-
- gtk_container_add (GTK_CONTAINER (window), vbox);
- gtk_box_pack_start (GTK_BOX (vbox), scroller, TRUE, TRUE, 2);
- gtk_container_add (GTK_CONTAINER (scroller), canvas);
-
- frame = gtk_frame_new ("Text");
- text = gtk_entry_new ();
- gtk_entry_set_text(GTK_ENTRY(text), "Hello World! This is a really long string to test out the ellipsis stuff.");
- gtk_container_add (GTK_CONTAINER (frame), text);
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
-
- frame = gtk_frame_new ("Font");
- font = gtk_entry_new ();
- gtk_entry_set_text(GTK_ENTRY(font), "fixed");
- gtk_container_add (GTK_CONTAINER (frame), font);
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
-
- 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 );
-
- item = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_text_get_type (),
- "text", "Hello World! This is a really long string to test out the ellipsis stuff.",
- "font", "fixed",
- "fill_color", "black",
- "anchor", GTK_ANCHOR_NW,
- "clip", TRUE,
- "use_ellipsis", TRUE,
- "editable", TRUE,
- "line_wrap", TRUE,
- "max_lines", 2,
- "width", 150.0,
- NULL);
-
- g_signal_connect (text, "activate",
- G_CALLBACK (change_text_cb), item);
- g_signal_connect (font, "activate",
- G_CALLBACK (change_font_cb), item);
-
- g_signal_connect (canvas , "size_allocate",
- G_CALLBACK (allocate_callback),
- item );
- g_signal_connect (canvas , "reflow",
- G_CALLBACK (reflow),
- item );
- gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0.0, 0.0, 400.0, 400.0);
- gtk_widget_show_all (window);
- gtk_main ();
-
- return 0;
-}
diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c
deleted file mode 100644
index 60b9c630a5..0000000000
--- a/widgets/text/e-text.c
+++ /dev/null
@@ -1,3871 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text.c - Text item for evolution.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Jon Trowbridge <trow@ximian.com>
- *
- * A majority of code taken from:
- *
- * Text item type for GnomeCanvas widget
- *
- * GnomeCanvas is basically a port of the Tk toolkit's most excellent
- * canvas widget. Tk is copyrighted by the Regents of the University
- * of California, Sun Microsystems, and other parties.
- *
- * Copyright (C) 1998 The Free Software Foundation
- *
- * Author: Federico Mena <federico@nuclecu.unam.mx>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include "e-text.h"
-
-#include <math.h>
-#include <ctype.h>
-#include <string.h>
-#include <glib-object.h>
-#include <gdk/gdkx.h> /* for BlackPixel */
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkclipboard.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkselection.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtktypebuiltins.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkimagemenuitem.h>
-#include <gtk/gtkimmulticontext.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkseparatormenuitem.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include <libgnome/gnome-i18n.h>
-#include "gal/util/e-util.h"
-#include "gal/widgets/e-canvas.h"
-#include "gal/widgets/e-canvas-utils.h"
-#include "gal/widgets/e-unicode.h"
-#include "gal/util/e-text-event-processor-emacs-like.h"
-#include "gal/util/e-util.h"
-#include <libart_lgpl/art_affine.h>
-#include <libart_lgpl/art_rgb.h>
-#include <libart_lgpl/art_rgb_bitmap_affine.h>
-
-#include <atk/atk.h>
-#include "gal/a11y/e-text/gal-a11y-e-text-factory.h"
-
-#define PARENT_TYPE (gnome_canvas_item_get_type())
-
-#define BORDER_INDENT 3
-#define d(x)
-
-enum {
- E_TEXT_CHANGED,
- E_TEXT_ACTIVATE,
- E_TEXT_KEYPRESS,
- E_TEXT_POPULATE_POPUP,
- E_TEXT_STYLE_SET,
- E_TEXT_LAST_SIGNAL
-};
-
-static GQuark e_text_signals[E_TEXT_LAST_SIGNAL] = { 0 };
-
-/* Object argument IDs */
-enum {
- PROP_0,
- PROP_MODEL,
- PROP_EVENT_PROCESSOR,
- PROP_TEXT,
- PROP_BOLD,
- PROP_STRIKEOUT,
- PROP_ANCHOR,
- PROP_JUSTIFICATION,
- PROP_CLIP_WIDTH,
- PROP_CLIP_HEIGHT,
- PROP_CLIP,
- PROP_FILL_CLIP_RECTANGLE,
- PROP_X_OFFSET,
- PROP_Y_OFFSET,
- PROP_FILL_COLOR,
- PROP_FILL_COLOR_GDK,
- PROP_FILL_COLOR_RGBA,
- PROP_FILL_STIPPLE,
- PROP_TEXT_WIDTH,
- PROP_TEXT_HEIGHT,
- PROP_EDITABLE,
- PROP_USE_ELLIPSIS,
- PROP_ELLIPSIS,
- PROP_LINE_WRAP,
- PROP_BREAK_CHARACTERS,
- PROP_MAX_LINES,
- PROP_WIDTH,
- PROP_HEIGHT,
- PROP_DRAW_BORDERS,
- PROP_ALLOW_NEWLINES,
- PROP_DRAW_BACKGROUND,
- PROP_DRAW_BUTTON,
- PROP_CURSOR_POS,
- PROP_IM_CONTEXT,
- PROP_HANDLE_POPUP
-};
-
-static void e_text_command(ETextEventProcessor *tep, ETextEventProcessorCommand *command, gpointer data);
-
-static void e_text_text_model_changed(ETextModel *model, EText *text);
-static void e_text_text_model_reposition (ETextModel *model, ETextModelReposFn fn, gpointer repos_data, gpointer data);
-
-static void _get_tep(EText *text);
-
-static void calc_height (EText *text);
-
-static gboolean show_pango_rectangle (EText *text, PangoRectangle rect);
-
-static void e_text_do_popup (EText *text, GdkEventButton *button, int position);
-
-static void e_text_update_primary_selection (EText *text);
-static void e_text_paste (EText *text, GdkAtom selection);
-static void e_text_insert(EText *text, const char *string);
-
-static void reset_layout_attrs (EText *text);
-
-#if 0
-/* GtkEditable Methods */
-static void e_text_editable_do_insert_text (GtkEditable *editable,
- const gchar *text,
- gint length,
- gint *position);
-static void e_text_editable_do_delete_text (GtkEditable *editable,
- gint start_pos,
- gint end_pos);
-static gchar* e_text_editable_get_chars (GtkEditable *editable,
- gint start_pos,
- gint end_pos);
-static void e_text_editable_set_selection_bounds (GtkEditable *editable,
- gint start_pos,
- gint end_pos);
-static gboolean e_text_editable_get_selection_bounds (GtkEditable *editable,
- gint *start_pos,
- gint *end_pos);
-static void e_text_editable_set_position (GtkEditable *editable,
- gint position);
-static gint e_text_editable_get_position (GtkEditable *editable);
-#endif
-
-/* IM Context Callbacks */
-static void e_text_commit_cb (GtkIMContext *context,
- const gchar *str,
- EText *text);
-static void e_text_preedit_changed_cb (GtkIMContext *context,
- EText *text);
-static gboolean e_text_retrieve_surrounding_cb (GtkIMContext *context,
- EText *text);
-static gboolean e_text_delete_surrounding_cb (GtkIMContext *context,
- gint offset,
- gint n_chars,
- EText *text);
-
-static GnomeCanvasItemClass *parent_class;
-static GdkAtom clipboard_atom = GDK_NONE;
-
-
-
-/* Dispose handler for the text item */
-
-#if 0
-static void
-e_text_style_set (EText *text, GtkStyle *previous_style)
-{
- if ( text->line_wrap ) {
- text->needs_split_into_lines = 1;
- } else {
- text->needs_calc_height = 1;
- }
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM (text));
-}
-#endif
-
-static void
-e_text_dispose (GObject *object)
-{
- EText *text;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (E_IS_TEXT (object));
-
- text = E_TEXT (object);
-
- if (text->tooltip_owner)
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(text)->canvas));
- text->tooltip_owner = 0;
-
- if (text->model_changed_signal_id)
- g_signal_handler_disconnect (text->model,
- text->model_changed_signal_id);
- text->model_changed_signal_id = 0;
-
- if (text->model_repos_signal_id)
- g_signal_handler_disconnect (text->model,
- text->model_repos_signal_id);
- text->model_repos_signal_id = 0;
-
- if (text->model)
- g_object_unref(text->model);
- text->model = NULL;
-
- if (text->tep_command_id)
- g_signal_handler_disconnect(text->tep,
- text->tep_command_id);
- text->tep_command_id = 0;
-
- if (text->tep)
- g_object_unref (text->tep);
- text->tep = NULL;
-
- g_free (text->revert);
- text->revert = NULL;
-
- if (text->stipple)
- gdk_bitmap_unref (text->stipple);
- text->stipple = NULL;
-
- if (text->timeout_id) {
- g_source_remove(text->timeout_id);
- text->timeout_id = 0;
- }
-
- if (text->timer) {
- g_timer_stop(text->timer);
- g_timer_destroy(text->timer);
- text->timer = NULL;
- }
-
- if ( text->tooltip_timeout ) {
- gtk_timeout_remove (text->tooltip_timeout);
- text->tooltip_timeout = 0;
- }
-
- if ( text->dbl_timeout ) {
- gtk_timeout_remove (text->dbl_timeout);
- text->dbl_timeout = 0;
- }
-
- if ( text->tpl_timeout ) {
- gtk_timeout_remove (text->tpl_timeout);
- text->tpl_timeout = 0;
- }
-
- if (text->layout) {
- g_object_unref (text->layout);
- text->layout = NULL;
- }
-
- if (text->im_context) {
- g_signal_handlers_disconnect_matched (text->im_context,
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- NULL, text);
- g_object_unref (text->im_context);
- text->im_context = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-insert_preedit_text (EText *text)
-{
- PangoAttrList *attrs = NULL;
- PangoAttrList *preedit_attrs = NULL;
- gchar *preedit_string = NULL;
- GString *tmp_string = g_string_new (NULL);
- gint length = 0, cpos = 0, preedit_length = 0;
- gboolean new_attrs = FALSE;
-
- if (text->layout == NULL || !GTK_IS_IM_CONTEXT (text->im_context))
- return;
-
- text->text = e_text_model_get_text(text->model);
- length = strlen (text->text);
-
- g_string_prepend_len (tmp_string, text->text,length);
-
- if (text->preedit_len)
- gtk_im_context_get_preedit_string (text->im_context,
- &preedit_string, &preedit_attrs,
- NULL);
-
- if (preedit_string && g_utf8_validate (preedit_string, -1, NULL))
- text->preedit_len = preedit_length = strlen (preedit_string);
- else
- text->preedit_len = preedit_length = 0;
-
- cpos = g_utf8_offset_to_pointer (text->text, text->selection_start) - text->text;
-
- if (preedit_length) {
- g_string_insert (tmp_string, cpos, preedit_string);
-
- reset_layout_attrs (text);
-
- attrs = pango_layout_get_attributes (text->layout);
- if (!attrs) {
- attrs = pango_attr_list_new ();
- new_attrs = TRUE;
- }
-
- pango_layout_set_text (text->layout, tmp_string->str, tmp_string->len);
-
- pango_attr_list_splice (attrs, preedit_attrs, cpos, preedit_length);
-
- if (new_attrs) {
- pango_layout_set_attributes (text->layout, attrs);
- pango_attr_list_unref (attrs);
- }
- }
-
- if (preedit_string)
- g_free (preedit_string);
- if (preedit_attrs)
- pango_attr_list_unref (preedit_attrs);
- if (tmp_string)
- g_string_free (tmp_string, TRUE);
-}
-
-static void
-reset_layout_attrs (EText *text)
-{
- PangoAttrList *attrs = NULL;
- int object_count;
-
- if (text->layout == NULL)
- return;
-
- object_count = e_text_model_object_count (text->model);
-
- if (text->bold || text->strikeout || object_count > 0) {
- int length = 0;
- int i;
-
- attrs = pango_attr_list_new ();
-
- for (i = 0; i < object_count; i++) {
- int start_pos, end_pos;
- PangoAttribute *attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
-
- e_text_model_get_nth_object_bounds (text->model, i, &start_pos, &end_pos);
-
- attr->start_index = g_utf8_offset_to_pointer (text->text, start_pos) - text->text;
- attr->end_index = g_utf8_offset_to_pointer (text->text, end_pos) - text->text;
-
- pango_attr_list_insert (attrs, attr);
- }
-
- if (text->bold || text->strikeout)
- length = strlen (text->text);
-
- if (text->bold) {
- PangoAttribute *attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
- attr->start_index = 0;
- attr->end_index = length;
-
- pango_attr_list_insert_before (attrs, attr);
- }
- if (text->strikeout) {
- PangoAttribute *attr = pango_attr_strikethrough_new (TRUE);
- attr->start_index = 0;
- attr->end_index = length;
-
- pango_attr_list_insert_before (attrs, attr);
- }
- }
- pango_layout_set_attributes (text->layout, attrs);
- if (attrs)
- pango_attr_list_unref (attrs);
- calc_height (text);
-}
-
-static void
-create_layout (EText *text)
-{
- GnomeCanvasItem *item = GNOME_CANVAS_ITEM (text);
-
- if (text->layout)
- return;
-
- text->layout = gtk_widget_create_pango_layout (GTK_WIDGET (item->canvas), text->text);
- if (text->line_wrap)
- pango_layout_set_width (text->layout, text->clip_width < 0 ? -1 : text->clip_width * PANGO_SCALE);
- reset_layout_attrs (text);
-}
-
-static void
-reset_layout (EText *text)
-{
- if (text->layout == NULL) {
- create_layout (text);
- }
- else {
- pango_layout_set_text (text->layout, text->text, -1);
- reset_layout_attrs (text);
- }
-
- if (!text->button_down) {
- PangoRectangle strong_pos, weak_pos;
- char *offs = g_utf8_offset_to_pointer (text->text, text->selection_start);
-
- pango_layout_get_cursor_pos (text->layout, offs - text->text, &strong_pos, &weak_pos);
-
- if (strong_pos.x != weak_pos.x ||
- strong_pos.y != weak_pos.y ||
- strong_pos.width != weak_pos.width ||
- strong_pos.height != weak_pos.height)
- show_pango_rectangle (text, weak_pos);
-
- show_pango_rectangle (text, strong_pos);
- }
-}
-
-static void
-e_text_text_model_changed (ETextModel *model, EText *text)
-{
- gint model_len = e_text_model_get_text_length (model);
- text->text = e_text_model_get_text(model);
-
- /* Make sure our selection doesn't extend past the bounds of our text. */
- text->selection_start = CLAMP (text->selection_start, 0, model_len);
- text->selection_end = CLAMP (text->selection_end, 0, model_len);
-
- text->needs_reset_layout = 1;
- text->needs_split_into_lines = 1;
- text->needs_redraw = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM(text));
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (text));
-
- g_signal_emit (text, e_text_signals[E_TEXT_CHANGED], 0);
-}
-
-static void
-e_text_text_model_reposition (ETextModel *model, ETextModelReposFn fn, gpointer repos_data, gpointer user_data)
-{
- EText *text = E_TEXT (user_data);
- gint model_len = e_text_model_get_text_length (model);
-
- text->selection_start = fn (text->selection_start, repos_data);
- text->selection_end = fn (text->selection_end, repos_data);
-
- /* Our repos function should make sure we don't overrun the buffer, but it never
- hurts to be paranoid. */
- text->selection_start = CLAMP (text->selection_start, 0, model_len);
- text->selection_end = CLAMP (text->selection_end, 0, model_len);
-
- if (text->selection_start > text->selection_end) {
- gint tmp = text->selection_start;
- text->selection_start = text->selection_end;
- text->selection_end = tmp;
- }
-}
-
-static void
-get_bounds (EText *text, double *px1, double *py1, double *px2, double *py2)
-{
- GnomeCanvasItem *item;
- double wx, wy, clip_width, clip_height;
-
- item = GNOME_CANVAS_ITEM (text);
-
- /* Get canvas pixel coordinates for text position */
-
- wx = 0;
- wy = 0;
- gnome_canvas_item_i2w (item, &wx, &wy);
- gnome_canvas_w2c (item->canvas, wx + text->xofs, wy + text->yofs, &text->cx, &text->cy);
- gnome_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
-
- if (text->clip_width < 0)
- clip_width = text->width;
- else
- clip_width = text->clip_width;
-
- if ( text->clip_height < 0 )
- clip_height = text->height;
- else
- clip_height = text->clip_height;
-
- /* Get canvas pixel coordinates for clip rectangle position */
- text->clip_cwidth = clip_width * item->canvas->pixels_per_unit;
- text->clip_cheight = clip_height * item->canvas->pixels_per_unit;
-
- /* Anchor text */
-
- switch (text->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:
- text->cx -= text->width / 2;
- text->clip_cx -= text->clip_cwidth / 2;
- break;
-
- case GTK_ANCHOR_NE:
- case GTK_ANCHOR_E:
- case GTK_ANCHOR_SE:
- text->cx -= text->width;
- text->clip_cx -= text->clip_cwidth;
- break;
- }
-
- switch (text->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:
- text->cy -= text->height / 2;
- text->clip_cy -= text->clip_cheight / 2;
- break;
-
- case GTK_ANCHOR_SW:
- case GTK_ANCHOR_S:
- case GTK_ANCHOR_SE:
- text->cy -= text->height;
- text->clip_cy -= text->clip_cheight;
- break;
- }
-
- text->text_cx = text->cx;
- text->text_cy = text->cy;
-
- if (text->draw_borders) {
- text->text_cx += BORDER_INDENT;
- text->text_cy += BORDER_INDENT;
- }
-
- /* Bounds */
-
- if (text->clip) {
- *px1 = text->clip_cx;
- *py1 = text->clip_cy;
- *px2 = text->clip_cx + text->clip_cwidth;
- *py2 = text->clip_cy + text->clip_cheight;
- } else {
- *px1 = text->cx;
- *py1 = text->cy;
- *px2 = text->cx + text->width;
- *py2 = text->cy + text->height;
- }
-}
-
-static void
-calc_height (EText *text)
-{
- GnomeCanvasItem *item;
- int old_height;
- int old_width;
- int width = 0;
- int height = 0;
-
- item = GNOME_CANVAS_ITEM (text);
-
- /* Calculate text dimensions */
-
- old_height = text->height;
- old_width = text->width;
-
- if (text->layout)
- pango_layout_get_pixel_size (text->layout, &width, &height);
-
- text->height = height;
- text->width = width;
-
- if (old_height != text->height || old_width != text->width)
- e_canvas_item_request_parent_reflow(item);
-}
-
-static void
-calc_ellipsis (EText *text)
-{
-#warning "AIEEEE FIX ME. a pango layout per calc_ellipsis sucks"
- int width;
- PangoLayout *layout = gtk_widget_create_pango_layout (GTK_WIDGET (GNOME_CANVAS_ITEM (text)->canvas),
- text->ellipsis ? text->ellipsis : "...");
- pango_layout_get_size (layout, &width, NULL);
-
- text->ellipsis_width = width;
-
- g_object_unref (layout);
-}
-
-static void
-split_into_lines (EText *text)
-{
- text->num_lines = pango_layout_get_line_count (text->layout);
-}
-
-/* Convenience function to set the text's GC's foreground color */
-static void
-set_text_gc_foreground (EText *text)
-{
- if (!text->gc)
- return;
-
- gdk_gc_set_foreground (text->gc, &text->color);
-}
-
-/* Sets the stipple pattern for the text */
-static void
-set_stipple (EText *text, GdkBitmap *stipple, int reconfigure)
-{
- if (text->stipple && !reconfigure)
- gdk_bitmap_unref (text->stipple);
-
- text->stipple = stipple;
- if (stipple && !reconfigure)
- gdk_bitmap_ref (stipple);
-
- if (text->gc) {
- if (stipple) {
- gdk_gc_set_stipple (text->gc, stipple);
- gdk_gc_set_fill (text->gc, GDK_STIPPLED);
- } else
- gdk_gc_set_fill (text->gc, GDK_SOLID);
- }
-}
-
-/* Set_arg handler for the text item */
-static void
-e_text_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GnomeCanvasItem *item;
- EText *text;
- GdkColor color = { 0, 0, 0, 0, };
- GdkColor *pcolor;
- gboolean color_changed;
- int have_pixel;
-
- gboolean needs_update = 0;
- gboolean needs_reflow = 0;
-
- item = GNOME_CANVAS_ITEM (object);
- text = E_TEXT (object);
-
- color_changed = FALSE;
- have_pixel = FALSE;
-
- switch (prop_id) {
- case PROP_MODEL:
-
- if ( text->model_changed_signal_id )
- g_signal_handler_disconnect (text->model,
- text->model_changed_signal_id);
-
- if ( text->model_repos_signal_id )
- g_signal_handler_disconnect (text->model,
- text->model_repos_signal_id);
-
- g_object_unref (text->model);
- text->model = E_TEXT_MODEL (g_value_get_object (value));
- g_object_ref (text->model);
-
- text->model_changed_signal_id =
- g_signal_connect (text->model,
- "changed",
- G_CALLBACK (e_text_text_model_changed),
- text);
-
- text->model_repos_signal_id =
- g_signal_connect (text->model,
- "reposition",
- G_CALLBACK (e_text_text_model_reposition),
- text);
-
- text->text = e_text_model_get_text(text->model);
- g_signal_emit (text, e_text_signals[E_TEXT_CHANGED], 0);
-
- text->needs_split_into_lines = 1;
- needs_reflow = 1;
- break;
-
- case PROP_EVENT_PROCESSOR:
- if ( text->tep && text->tep_command_id )
- g_signal_handler_disconnect(text->tep,
- text->tep_command_id);
- if ( text->tep ) {
- g_object_unref(text->tep);
- }
- text->tep = E_TEXT_EVENT_PROCESSOR(g_value_get_object (value));
- g_object_ref(text->tep);
- text->tep_command_id =
- g_signal_connect(text->tep,
- "command",
- G_CALLBACK(e_text_command),
- text);
- if (!text->allow_newlines)
- g_object_set (text->tep,
- "allow_newlines", FALSE,
- NULL);
- break;
-
- case PROP_TEXT:
- e_text_model_set_text(text->model, g_value_get_string (value));
- break;
-
- case PROP_BOLD:
- text->bold = g_value_get_boolean (value);
-
- text->needs_redraw = 1;
- text->needs_recalc_bounds = 1;
- if ( text->line_wrap )
- text->needs_split_into_lines = 1;
- else {
- text->needs_calc_height = 1;
- }
- needs_update = 1;
- needs_reflow = 1;
- break;
-
- case PROP_STRIKEOUT:
- text->strikeout = g_value_get_boolean (value);
- text->needs_redraw = 1;
- needs_update = 1;
- break;
-
- case PROP_ANCHOR:
- text->anchor = g_value_get_enum (value);
- text->needs_recalc_bounds = 1;
- needs_update = 1;
- break;
-
- case PROP_JUSTIFICATION:
- text->justification = g_value_get_enum (value);
- text->needs_redraw = 1;
- needs_update = 1;
- break;
-
- case PROP_CLIP_WIDTH:
- text->clip_width = fabs (g_value_get_double (value));
- calc_ellipsis (text);
- if ( text->line_wrap )
- text->needs_split_into_lines = 1;
- else {
- text->needs_calc_height = 1;
- }
- needs_reflow = 1;
- break;
-
- case PROP_CLIP_HEIGHT:
- text->clip_height = fabs (g_value_get_double (value));
- text->needs_recalc_bounds = 1;
- /* toshok: kind of a hack - set needs_reset_layout
- here so when something about the style/them
- changes, we redraw the text at the proper size/with
- the proper font. */
- text->needs_reset_layout = 1;
- needs_reflow = 1;
- break;
-
- case PROP_CLIP:
- text->clip = g_value_get_boolean (value);
- calc_ellipsis (text);
- if ( text->line_wrap )
- text->needs_split_into_lines = 1;
- else {
- text->needs_calc_height = 1;
- }
- needs_reflow = 1;
- break;
-
- case PROP_FILL_CLIP_RECTANGLE:
- text->fill_clip_rectangle = g_value_get_boolean (value);
- needs_update = 1;
- break;
-
- case PROP_X_OFFSET:
- text->xofs = g_value_get_double (value);
- text->needs_recalc_bounds = 1;
- needs_update = 1;
- break;
-
- case PROP_Y_OFFSET:
- text->yofs = g_value_get_double (value);
- text->needs_recalc_bounds = 1;
- needs_update = 1;
- break;
-
- case PROP_FILL_COLOR:
- if (g_value_get_string (value))
- gdk_color_parse (g_value_get_string (value), &color);
-
- text->rgba = ((color.red & 0xff00) << 16 |
- (color.green & 0xff00) << 8 |
- (color.blue & 0xff00) |
- 0xff);
- color_changed = TRUE;
- break;
-
- case PROP_FILL_COLOR_GDK:
- pcolor = g_value_get_boxed (value);
- if (pcolor) {
- color = *pcolor;
- }
-
- text->rgba = ((color.red & 0xff00) << 16 |
- (color.green & 0xff00) << 8 |
- (color.blue & 0xff00) |
- 0xff);
- color_changed = TRUE;
- break;
-
- case PROP_FILL_COLOR_RGBA:
- text->rgba = g_value_get_uint (value);
- color.red = ((text->rgba >> 24) & 0xff) * 0x101;
- color.green = ((text->rgba >> 16) & 0xff) * 0x101;
- color.blue = ((text->rgba >> 8) & 0xff) * 0x101;
- color_changed = TRUE;
- break;
-
- case PROP_FILL_STIPPLE:
- set_stipple (text, g_value_get_object (value), FALSE);
- text->needs_redraw = 1;
- needs_update = 1;
- break;
-
- case PROP_EDITABLE:
- text->editable = g_value_get_boolean (value);
- text->needs_redraw = 1;
- needs_update = 1;
- break;
-
- case PROP_USE_ELLIPSIS:
- text->use_ellipsis = g_value_get_boolean (value);
- needs_reflow = 1;
- break;
-
- case PROP_ELLIPSIS:
- if (text->ellipsis)
- g_free (text->ellipsis);
-
- text->ellipsis = g_strdup (g_value_get_string (value));
- calc_ellipsis (text);
- needs_reflow = 1;
- break;
-
- case PROP_LINE_WRAP:
- text->line_wrap = g_value_get_boolean (value);
- if (text->line_wrap) {
- if (text->layout) {
- pango_layout_set_width (text->layout, text->width < 0 ? -1 : text->width * PANGO_SCALE);
- }
- }
- text->needs_split_into_lines = 1;
- needs_reflow = 1;
- break;
-
- case PROP_BREAK_CHARACTERS:
- if ( text->break_characters ) {
- g_free(text->break_characters);
- text->break_characters = NULL;
- }
- if ( g_value_get_string (value) )
- text->break_characters = g_strdup( g_value_get_string (value) );
- text->needs_split_into_lines = 1;
- needs_reflow = 1;
- break;
-
- case PROP_MAX_LINES:
- text->max_lines = g_value_get_int (value);
- text->needs_split_into_lines = 1;
- needs_reflow = 1;
- break;
-
- case PROP_WIDTH:
- text->clip_width = fabs (g_value_get_double (value));
- calc_ellipsis (text);
- if ( text->line_wrap ) {
- if (text->layout) {
- pango_layout_set_width (text->layout, text->width < 0 ? -1 : text->width * PANGO_SCALE);
- }
- text->needs_split_into_lines = 1;
- }
- else {
- text->needs_calc_height = 1;
- }
- needs_reflow = 1;
- break;
-
- case PROP_DRAW_BORDERS:
- if (text->draw_borders != g_value_get_boolean (value)) {
- text->draw_borders = g_value_get_boolean (value);
- text->needs_calc_height = 1;
- text->needs_redraw = 1;
- needs_reflow = 1;
- needs_update = 1;
- }
- break;
-
- case PROP_DRAW_BACKGROUND:
- if (text->draw_background != g_value_get_boolean (value)) {
- text->draw_background = g_value_get_boolean (value);
- text->needs_redraw = 1;
- }
- break;
-
- case PROP_DRAW_BUTTON:
- if (text->draw_button != g_value_get_boolean (value)) {
- text->draw_button = g_value_get_boolean (value);
- text->needs_redraw = 1;
- }
- break;
-
- case PROP_ALLOW_NEWLINES:
- text->allow_newlines = g_value_get_boolean (value);
- _get_tep(text);
- g_object_set (text->tep,
- "allow_newlines", g_value_get_boolean (value),
- NULL);
- break;
-
- case PROP_CURSOR_POS: {
- ETextEventProcessorCommand command;
-
- command.action = E_TEP_MOVE;
- command.position = E_TEP_VALUE;
- command.value = g_value_get_int (value);
- command.time = GDK_CURRENT_TIME;
- e_text_command (text->tep, &command, text);
- break;
- }
-
- case PROP_IM_CONTEXT:
- if (text->im_context)
- g_object_unref (text->im_context);
-
- text->im_context = g_value_get_object (value);
- if (text->im_context)
- g_object_ref (text->im_context);
-
- text->need_im_reset = FALSE;
- break;
-
- case PROP_HANDLE_POPUP:
- text->handle_popup = g_value_get_boolean (value);
- break;
-
- default:
- return;
- }
-
- if (color_changed) {
- GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas));
-
- text->color = color;
- gdk_rgb_find_color (colormap, &text->color);
-
- if (!item->canvas->aa)
- set_text_gc_foreground (text);
-
- text->needs_redraw = 1;
- needs_update = 1;
- }
-
- if ( needs_reflow )
- e_canvas_item_request_reflow (item);
- if ( needs_update )
- gnome_canvas_item_request_update (item);
-}
-
-/* Get_arg handler for the text item */
-static void
-e_text_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EText *text;
-
- text = E_TEXT (object);
-
- switch (prop_id) {
- case PROP_MODEL:
- g_value_set_object (value, text->model);
- break;
-
- case PROP_EVENT_PROCESSOR:
- _get_tep(text);
- g_value_set_object (value, text->tep);
- break;
-
- case PROP_TEXT:
- g_value_set_string (value, g_strdup (text->text));
- break;
-
- case PROP_BOLD:
- g_value_set_boolean (value, text->bold);
- break;
-
- case PROP_STRIKEOUT:
- g_value_set_boolean (value, text->strikeout);
- break;
-
- case PROP_ANCHOR:
- g_value_set_enum (value, text->anchor);
- break;
-
- case PROP_JUSTIFICATION:
- g_value_set_enum (value, text->justification);
- break;
-
- case PROP_CLIP_WIDTH:
- g_value_set_double (value, text->clip_width);
- break;
-
- case PROP_CLIP_HEIGHT:
- g_value_set_double (value, text->clip_height);
- break;
-
- case PROP_CLIP:
- g_value_set_boolean (value, text->clip);
- break;
-
- case PROP_FILL_CLIP_RECTANGLE:
- g_value_set_boolean (value, text->fill_clip_rectangle);
- break;
-
- case PROP_X_OFFSET:
- g_value_set_double (value, text->xofs);
- break;
-
- case PROP_Y_OFFSET:
- g_value_set_double (value, text->yofs);
- break;
-
- case PROP_FILL_COLOR_GDK:
- g_value_set_boxed (value, &text->color);
- break;
-
- case PROP_FILL_COLOR_RGBA:
- g_value_set_uint (value, text->rgba);
- break;
-
- case PROP_FILL_STIPPLE:
- g_value_set_object (value, text->stipple);
- break;
-
- case PROP_TEXT_WIDTH:
- g_value_set_double (value, text->width / text->item.canvas->pixels_per_unit);
- break;
-
- case PROP_TEXT_HEIGHT:
- g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
- break;
-
- case PROP_EDITABLE:
- g_value_set_boolean (value, text->editable);
- break;
-
- case PROP_USE_ELLIPSIS:
- g_value_set_boolean (value, text->use_ellipsis);
- break;
-
- case PROP_ELLIPSIS:
- g_value_set_string (value, g_strdup (text->ellipsis));
- break;
-
- case PROP_LINE_WRAP:
- g_value_set_boolean (value, text->line_wrap);
- break;
-
- case PROP_BREAK_CHARACTERS:
- g_value_set_string (value, g_strdup (text->break_characters));
- break;
-
- case PROP_MAX_LINES:
- g_value_set_int (value, text->max_lines);
- break;
-
- case PROP_WIDTH:
- g_value_set_double (value, text->clip_width);
- break;
-
- case PROP_HEIGHT:
- g_value_set_double (value, text->clip && text->clip_height != -1 ? text->clip_height : text->height / text->item.canvas->pixels_per_unit);
- break;
-
- case PROP_DRAW_BORDERS:
- g_value_set_boolean (value, text->draw_borders);
- break;
-
- case PROP_DRAW_BACKGROUND:
- g_value_set_boolean (value, text->draw_background);
- break;
-
- case PROP_DRAW_BUTTON:
- g_value_set_boolean (value, text->draw_button);
- break;
-
- case PROP_ALLOW_NEWLINES:
- g_value_set_boolean (value, text->allow_newlines);
- break;
-
- case PROP_CURSOR_POS:
- g_value_set_int (value, text->selection_start);
- break;
-
- case PROP_IM_CONTEXT:
- g_value_set_object (value, text->im_context);
- break;
-
- case PROP_HANDLE_POPUP:
- g_value_set_boolean (value, text->handle_popup);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-/* Update handler for the text item */
-static void
-e_text_reflow (GnomeCanvasItem *item, int flags)
-{
- EText *text;
-
- text = E_TEXT (item);
-
- if (text->needs_reset_layout) {
- reset_layout (text);
- text->needs_reset_layout = 0;
- text->needs_calc_height = 1;
- }
-
- if (text->needs_split_into_lines) {
- split_into_lines (text);
-
- text->needs_split_into_lines = 0;
- text->needs_calc_height = 1;
- }
-
- if ( text->needs_calc_height ) {
- calc_height (text);
- gnome_canvas_item_request_update(item);
- text->needs_calc_height = 0;
- text->needs_recalc_bounds = 1;
- }
-}
-
-/* Update handler for the text item */
-static void
-e_text_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
-{
- EText *text;
- double x1, y1, x2, y2;
-
- text = E_TEXT (item);
-
- if (parent_class->update)
- (* parent_class->update) (item, affine, clip_path, flags);
-
- if ( text->needs_recalc_bounds
- || (flags & GNOME_CANVAS_UPDATE_AFFINE)) {
- if (!item->canvas->aa) {
- set_text_gc_foreground (text);
- set_stipple (text, text->stipple, TRUE);
- get_bounds (text, &x1, &y1, &x2, &y2);
- if ( item->x1 != x1 ||
- item->x2 != x2 ||
- item->y1 != y1 ||
- item->y2 != y2 ) {
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2);
- item->x1 = x1;
- item->y1 = y1;
- item->x2 = x2;
- item->y2 = y2;
- text->needs_redraw = 1;
- item->canvas->need_repick = TRUE;
- }
- if (!text->fill_clip_rectangle)
- item->canvas->need_repick = TRUE;
- }
- text->needs_recalc_bounds = 0;
- }
- if ( text->needs_redraw ) {
- gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2);
- text->needs_redraw = 0;
- }
-}
-
-/* Realize handler for the text item */
-static void
-e_text_realize (GnomeCanvasItem *item)
-{
- EText *text;
-
- text = E_TEXT (item);
-
- if (parent_class->realize)
- (* parent_class->realize) (item);
-
- create_layout (text);
-
- text->gc = gdk_gc_new (item->canvas->layout.bin_window);
-#ifndef NO_WARNINGS
-#warning Color brokenness ...
-#endif
-#if 0
- gdk_color_context_query_color (item->canvas->cc, &text->color);
- gdk_gc_set_foreground (text->gc, &text->color);
-#endif
-
- text->i_cursor = gdk_cursor_new (GDK_XTERM);
- text->default_cursor = gdk_cursor_new (GDK_LEFT_PTR);
-}
-
-/* Unrealize handler for the text item */
-static void
-e_text_unrealize (GnomeCanvasItem *item)
-{
- EText *text;
-
- text = E_TEXT (item);
-
- gdk_gc_unref (text->gc);
- text->gc = NULL;
-
- gdk_cursor_destroy (text->i_cursor);
- text->i_cursor = NULL;
- gdk_cursor_destroy (text->default_cursor);
- text->default_cursor = NULL;
-
- if (parent_class->unrealize)
- (* parent_class->unrealize) (item);
-}
-
-static void
-_get_tep(EText *text)
-{
- if (!text->tep) {
- text->tep = e_text_event_processor_emacs_like_new();
- text->tep_command_id =
- g_signal_connect(text->tep,
- "command",
- G_CALLBACK(e_text_command),
- text);
- }
-}
-
-static void
-draw_pango_rectangle (GdkDrawable *drawable, GdkGC *gc, int x1, int y1, PangoRectangle rect)
-{
- int width = rect.width / PANGO_SCALE;
- int height = rect.height / PANGO_SCALE;
- if (width <= 0)
- width = 1;
- if (height <= 0)
- height = 1;
- gdk_draw_rectangle (drawable, gc, TRUE,
- x1 + rect.x / PANGO_SCALE, y1 + rect.y / PANGO_SCALE, width, height);
-}
-
-static gboolean
-show_pango_rectangle (EText *text, PangoRectangle rect)
-{
- int x1 = rect.x / PANGO_SCALE;
- int x2 = (rect.x + rect.width) / PANGO_SCALE;
-
- int y1 = rect.y / PANGO_SCALE;
- int y2 = (rect.y + rect.height) / PANGO_SCALE;
-
- int new_xofs_edit = text->xofs_edit;
- int new_yofs_edit = text->yofs_edit;
-
- int clip_width, clip_height;
-
- clip_width = text->clip_width;
- if (clip_width >= 0 && text->draw_borders) {
- clip_width -= 6;
- if (clip_width < 0)
- clip_width = 0;
- }
-
- clip_height = text->clip_height;
-
- if (clip_height >= 0 && text->draw_borders) {
- clip_height -= 6;
- if (clip_height < 0)
- clip_height = 0;
- }
-
- if (x1 < new_xofs_edit)
- new_xofs_edit = x1;
-
- if (y1 < new_yofs_edit)
- new_yofs_edit = y1;
-
- if (clip_width >= 0) {
- if (2 + x2 - clip_width > new_xofs_edit)
- new_xofs_edit = 2 + x2 - clip_width;
- } else {
- new_xofs_edit = 0;
- }
-
- if (clip_height >= 0) {
- if (y2 - clip_height > new_yofs_edit)
- new_yofs_edit = y2 - clip_height;
- } else {
- new_yofs_edit = 0;
- }
-
- if (new_xofs_edit < 0)
- new_xofs_edit = 0;
- if (new_yofs_edit < 0)
- new_yofs_edit = 0;
-
- if (new_xofs_edit != text->xofs_edit ||
- new_yofs_edit != text->yofs_edit) {
- text->xofs_edit = new_xofs_edit;
- text->yofs_edit = new_yofs_edit;
- return TRUE;
- }
-
- return FALSE;
-}
-
-/* Draw handler for the text item */
-static void
-e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
- int x, int y, int width, int height)
-{
- EText *text;
- GdkRectangle rect, *clip_rect;
- int xpos, ypos;
- GdkGC *main_gc;
- GnomeCanvas *canvas;
- GtkWidget *widget;
-
- text = E_TEXT (item);
- canvas = GNOME_CANVAS_ITEM(text)->canvas;
- widget = GTK_WIDGET(canvas);
-
- if (text->draw_background || text->draw_button) {
- main_gc = widget->style->fg_gc[GTK_WIDGET_STATE (widget)];
- } else {
- main_gc = text->gc;
- }
-
- if (text->draw_borders || text->draw_background) {
- gdouble thisx = item->x1 - x;
- gdouble thisy = item->y1 - y;
- gdouble thiswidth, thisheight;
- GtkWidget *widget = GTK_WIDGET(item->canvas);
-
- g_object_get(text,
- "width", &thiswidth,
- "height", &thisheight,
- NULL);
-
- if (text->draw_borders){
-
- gtk_paint_shadow (widget->style, drawable,
- GTK_STATE_NORMAL, GTK_SHADOW_IN,
- NULL, widget, "entry",
- thisx, thisy, thiswidth, thisheight);
-
- }
-
- if (text->draw_background) {
- gtk_paint_flat_box (widget->style, drawable,
- GTK_WIDGET_STATE(widget), GTK_SHADOW_NONE,
- NULL, widget, "entry_bg",
- thisx + widget->style->xthickness,
- thisy + widget->style->ythickness,
- thiswidth - widget->style->xthickness * 2,
- thisheight - widget->style->ythickness * 2);
- }
- }
- if (text->draw_button) {
- GtkWidget *widget;
- int xoff = item->x1 - x;
- int yoff = item->y1 - y;
-
- widget = GTK_WIDGET (item->canvas);
-
- xoff -= widget->allocation.x;
- yoff -= widget->allocation.y;
-
- widget = widget->parent;
-
- while (widget && !GTK_IS_BUTTON(widget)) {
- if (!GTK_WIDGET_NO_WINDOW (widget)) {
- widget = NULL;
- break;
- }
- widget = widget->parent;
- }
- if (widget) {
- GtkButton *button = GTK_BUTTON (widget);
- GtkShadowType shadow_type;
- int thisx, thisy, thisheight, thiswidth;
- int default_spacing;
- GdkRectangle area;
- area.x = 0;
- area.y = 0;
- area.width = width;
- area.height = height;
-
-#define DEFAULT_SPACING 7
-#if 0
- default_spacing = gtk_style_get_prop_experimental (widget->style,
- "GtkButton::default_spacing",
- DEFAULT_SPACING);
-#endif
- default_spacing = 7;
-
- thisx = 0;
- thisy = 0;
- thiswidth = widget->allocation.width - GTK_CONTAINER (widget)->border_width * 2;
- thisheight = widget->allocation.height - GTK_CONTAINER (widget)->border_width * 2;
-
- if (GTK_WIDGET_HAS_DEFAULT (widget) &&
- GTK_BUTTON (widget)->relief == GTK_RELIEF_NORMAL)
- {
- gtk_paint_box (widget->style, drawable,
- GTK_STATE_NORMAL, GTK_SHADOW_IN,
- &area, widget, "buttondefault",
- thisx + xoff, thisy + yoff, thiswidth, thisheight);
- }
-
- if (GTK_WIDGET_CAN_DEFAULT (widget)) {
- thisx += widget->style->xthickness;
- thisy += widget->style->ythickness;
- thiswidth -= 2 * thisx + default_spacing;
- thisheight -= 2 * thisy + default_spacing;
- thisx += (1 + default_spacing) / 2;
- thisy += (1 + default_spacing) / 2;
- }
-
- if (GTK_WIDGET_HAS_FOCUS (widget)) {
- thisx += 1;
- thisy += 1;
- thiswidth -= 2;
- thisheight -= 2;
- }
-
- if (GTK_WIDGET_STATE (widget) == GTK_STATE_ACTIVE)
- shadow_type = GTK_SHADOW_IN;
- else
- shadow_type = GTK_SHADOW_OUT;
-
- if ((button->relief != GTK_RELIEF_NONE) ||
- ((GTK_WIDGET_STATE(widget) != GTK_STATE_NORMAL) &&
- (GTK_WIDGET_STATE(widget) != GTK_STATE_INSENSITIVE)))
- gtk_paint_box (widget->style, drawable,
- GTK_WIDGET_STATE (widget),
- shadow_type, &area, widget, "button",
- thisx + xoff, thisy + yoff, thiswidth, thisheight);
-
- if (GTK_WIDGET_HAS_FOCUS (widget)) {
- thisx -= 1;
- thisy -= 1;
- thiswidth += 2;
- thisheight += 2;
-
- gtk_paint_focus (widget->style, widget->window, GTK_WIDGET_STATE (widget),
- &area, widget, "button",
- thisx + xoff, thisy + yoff, thiswidth - 1, thisheight - 1);
- }
- }
- }
-
-
- insert_preedit_text (text);
-
- if (!pango_layout_get_text (text->layout))
- return;
-
- if (text->stipple)
- gnome_canvas_set_stipple_origin (item->canvas, main_gc);
-
- xpos = text->text_cx;
- ypos = text->text_cy;
-
- xpos -= x;
- ypos -= y;
-
- clip_rect = NULL;
- if (text->clip) {
- rect.x = xpos;
- rect.y = ypos;
- rect.width = text->clip_cwidth;
- rect.height = text->clip_cheight;
-
- gdk_gc_set_clip_rectangle (main_gc, &rect);
- clip_rect = &rect;
- }
-
- if (text->editing) {
- xpos -= text->xofs_edit;
- ypos -= text->yofs_edit;
- }
-
- gdk_draw_layout (drawable, main_gc,
- xpos, ypos,
- text->layout);
-
- if (text->editing) {
- if (text->selection_start != text->selection_end) {
- PangoLayoutIter *iter;
- GdkRegion *clip_region = gdk_region_new ();
- GdkGC *selection_gc;
- GdkGC *text_gc;
- int start_index, end_index;
-
- start_index = MIN (text->selection_start, text->selection_end);
- end_index = MAX (text->selection_start, text->selection_end);
-
- /* convert these into byte indices */
- start_index = g_utf8_offset_to_pointer(text->text, start_index) - text->text;
- end_index = g_utf8_offset_to_pointer(text->text, end_index) - text->text;
-
- if (text->has_selection) {
- selection_gc = widget->style->base_gc [GTK_STATE_SELECTED];
- text_gc = widget->style->text_gc[GTK_STATE_SELECTED];
- } else {
- selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE];
- text_gc = widget->style->text_gc[GTK_STATE_ACTIVE];
- }
-
- gdk_gc_set_clip_rectangle (selection_gc, clip_rect);
-
- iter = pango_layout_get_iter (text->layout);
-
- do {
- PangoLayoutLine *line = pango_layout_iter_get_line (iter);
- gint n_ranges, i;
- gint *ranges;
- int y0, y1;
- int s, e;
-
- if (start_index < line->start_index + line->length
- && end_index > line->start_index) {
-
- if (start_index <= line->start_index)
- s = line->start_index;
- else
- s = start_index;
-
- if (end_index > line->start_index + line->length)
- e = line->start_index + line->length;
- else
- e = end_index;
-
- pango_layout_line_get_x_ranges (line, s, e, &ranges, &n_ranges);
-
- pango_layout_iter_get_line_yrange (iter, &y0, &y1);
-
- for (i=0; i < n_ranges; i++) {
- GdkRectangle sel_rect;
-
- sel_rect.x = xpos + PANGO_PIXELS (ranges[2*i]);
- sel_rect.y = ypos + PANGO_PIXELS (y0);
- sel_rect.width = (ranges[2*i + 1] - ranges[2*i]) / PANGO_SCALE;
- sel_rect.height = (y1 - y0 + PANGO_SCALE / 2) / PANGO_SCALE;
-
- gdk_draw_rectangle (drawable, selection_gc, TRUE,
- sel_rect.x, sel_rect.y, sel_rect.width, sel_rect.height);
-
- gdk_region_union_with_rect (clip_region, &sel_rect);
- }
- g_free (ranges);
- }
- } while (pango_layout_iter_next_line (iter));
-
- pango_layout_iter_free (iter);
-
- if (clip_rect) {
- GdkRegion *rect_region = gdk_region_rectangle (clip_rect);
- gdk_region_intersect (clip_region, rect_region);
- gdk_region_destroy (rect_region);
- }
-
- gdk_gc_set_clip_region (text_gc, clip_region);
- gdk_draw_layout (drawable, text_gc,
- xpos, ypos,
- text->layout);
-
- gdk_gc_set_clip_region (text_gc, NULL);
- gdk_gc_set_clip_region (selection_gc, NULL);
-
- gdk_region_destroy (clip_region);
- } else {
- if (text->show_cursor) {
- PangoRectangle strong_pos, weak_pos;
- char *offs = g_utf8_offset_to_pointer (text->text, text->selection_start);
-
- pango_layout_get_cursor_pos (text->layout, offs - text->text + text->preedit_len, &strong_pos, &weak_pos);
- draw_pango_rectangle (drawable, main_gc, xpos, ypos, strong_pos);
- if (strong_pos.x != weak_pos.x ||
- strong_pos.y != weak_pos.y ||
- strong_pos.width != weak_pos.width ||
- strong_pos.height != weak_pos.height)
- draw_pango_rectangle (drawable, main_gc, xpos, ypos, weak_pos);
- }
- }
- }
-
-
- if (text->clip) {
- gdk_gc_set_clip_rectangle (main_gc, NULL);
- }
-}
-
-/* Point handler for the text item */
-static double
-e_text_point (GnomeCanvasItem *item, double x, double y,
- int cx, int cy, GnomeCanvasItem **actual_item)
-{
- EText *text;
- double clip_width;
- double clip_height;
-
- text = E_TEXT (item);
-
- *actual_item = item;
-
- /* The idea is to build bounding rectangles for each of the lines of
- * text (clipped by the clipping rectangle, if it is activated) and see
- * whether the point is inside any of these. If it is, we are done.
- * Otherwise, calculate the distance to the nearest rectangle.
- */
-
- if (text->clip_width < 0)
- clip_width = text->width;
- else
- clip_width = text->clip_width;
-
- if ( text->clip_height < 0 )
- clip_height = text->height;
- else
- clip_height = text->clip_height;
-
- /* Get canvas pixel coordinates for clip rectangle position */
- clip_width = clip_width * item->canvas->pixels_per_unit;
- clip_height = clip_height * item->canvas->pixels_per_unit;
-
- if (cx < text->clip_cx ||
- cx > text->clip_cx + clip_width ||
- cy < text->clip_cy ||
- cy > text->clip_cy + clip_height)
- return 1;
-
- if (text->fill_clip_rectangle)
- return 0;
-
- cx -= text->cx;
-
- if (pango_layout_xy_to_index (text->layout, cx, cy, NULL, NULL))
- return 0;
-
- return 1;
-}
-
-/* Bounds handler for the text item */
-static void
-e_text_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2)
-{
- EText *text;
- double width, height;
-
- text = E_TEXT (item);
-
- *x1 = 0;
- *y1 = 0;
-
- width = text->width;
- height = text->height;
-
- if (text->clip) {
- if (text->clip_width >= 0)
- width = text->clip_width;
- if ( text->clip_height >= 0 )
- height = text->clip_height;
- }
-
- width = width / item->canvas->pixels_per_unit;
- height = height / item->canvas->pixels_per_unit;
-
- switch (text->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:
- *x1 -= width / 2.0;
- break;
-
- case GTK_ANCHOR_NE:
- case GTK_ANCHOR_E:
- case GTK_ANCHOR_SE:
- *x1 -= width;
- break;
- }
-
- switch (text->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:
- *y1 -= height / 2.0;
- break;
-
- case GTK_ANCHOR_SW:
- case GTK_ANCHOR_S:
- case GTK_ANCHOR_SE:
- *y1 -= height;
- break;
- }
-
- *x2 = *x1 + width;
- *y2 = *y1 + height;
-}
-
-static gint
-get_position_from_xy (EText *text, gint x, gint y)
-{
- int index;
- int trailing;
-
- if (text->draw_borders) {
- x -= BORDER_INDENT;
- y -= BORDER_INDENT;
- }
-
- x -= text->xofs;
- y -= text->yofs;
-
- if (text->editing) {
- x += text->xofs_edit;
- y += text->yofs_edit;
- }
-
- x -= text->cx;
- y -= text->cy;
-
- pango_layout_xy_to_index (text->layout, x * PANGO_SCALE, y * PANGO_SCALE, &index, &trailing);
-
- return g_utf8_pointer_to_offset (text->text, text->text + index + trailing);
-}
-
-#define SCROLL_WAIT_TIME 30000
-
-static gboolean
-_blink_scroll_timeout (gpointer data)
-{
- EText *text = E_TEXT(data);
- gulong current_time;
- gboolean scroll = FALSE;
- gboolean redraw = FALSE;
-
- g_timer_elapsed(text->timer, &current_time);
-
- if (text->scroll_start + SCROLL_WAIT_TIME > 1000000) {
- if (current_time > text->scroll_start - (1000000 - SCROLL_WAIT_TIME) &&
- current_time < text->scroll_start)
- scroll = TRUE;
- } else {
- if (current_time > text->scroll_start + SCROLL_WAIT_TIME ||
- current_time < text->scroll_start)
- scroll = TRUE;
- }
- if (scroll && text->button_down && text->clip) {
- int old_xofs_edit = text->xofs_edit;
- int old_yofs_edit = text->yofs_edit;
-
- if (text->clip_cwidth >= 0 &&
- text->lastx - text->clip_cx > text->clip_cwidth &&
- text->xofs_edit < text->width - text->clip_cwidth) {
- text->xofs_edit += 4;
- if (text->xofs_edit > text->width - text->clip_cwidth + 1)
- text->xofs_edit = text->width - text->clip_cwidth + 1;
- }
- if (text->lastx - text->clip_cx < 0 &&
- text->xofs_edit > 0) {
- text->xofs_edit -= 4;
- if (text->xofs_edit < 0)
- text->xofs_edit = 0;
- }
-
- if (text->clip_cheight >= 0 &&
- text->lasty - text->clip_cy > text->clip_cheight &&
- text->yofs_edit < text->height - text->clip_cheight) {
- text->yofs_edit += 4;
- if (text->yofs_edit > text->height - text->clip_cheight + 1)
- text->yofs_edit = text->height - text->clip_cheight + 1;
- }
- if (text->lasty - text->clip_cy < 0 &&
- text->yofs_edit > 0) {
- text->yofs_edit -= 4;
- if (text->yofs_edit < 0)
- text->yofs_edit = 0;
- }
-
- if (old_xofs_edit != text->xofs_edit ||
- old_yofs_edit != text->yofs_edit) {
- ETextEventProcessorEvent e_tep_event;
- e_tep_event.type = GDK_MOTION_NOTIFY;
- e_tep_event.motion.state = text->last_state;
- e_tep_event.motion.time = 0;
- e_tep_event.motion.position = get_position_from_xy(text, text->lastx, text->lasty);
- _get_tep(text);
- e_text_event_processor_handle_event (text->tep,
- &e_tep_event);
- text->scroll_start = current_time;
- redraw = TRUE;
- }
- }
-
- if (!((current_time / 500000) % 2)) {
- if (!text->show_cursor)
- redraw = TRUE;
- text->show_cursor = TRUE;
- } else {
- if (text->show_cursor)
- redraw = TRUE;
- text->show_cursor = FALSE;
- }
- if (redraw) {
- text->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(text));
- }
- return TRUE;
-}
-
-static gboolean
-tooltip_event(GtkWidget *tooltip, GdkEvent *event, EText *text)
-{
- gint ret_val = FALSE;
-
- if (!text->model)
- return FALSE;
-
- switch (event->type) {
- case GDK_LEAVE_NOTIFY:
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(text)->canvas));
- break;
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- if (event->type == GDK_BUTTON_RELEASE) {
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(text)->canvas));
- }
- /* Forward events to the text item */
- g_signal_emit_by_name (text, "event", event,
- &ret_val);
- if (!ret_val)
- gtk_propagate_event (GTK_WIDGET(GNOME_CANVAS_ITEM(text)->canvas), event);
- ret_val = TRUE;
- default:
- break;
- }
- return ret_val;
-}
-
-static void
-tooltip_destroy(gpointer data, GObject *where_object_was)
-{
- EText *text = data;
- text->tooltip_owner = FALSE;
- g_object_unref (text);
-}
-
-static gboolean
-_do_tooltip (gpointer data)
-{
-#warning "need to sort out tooltip stuff."
- EText *text = E_TEXT (data);
- GtkWidget *canvas;
- int i;
- int max_width;
- gboolean cut_off;
- double i2c[6];
- ArtPoint origin = {0, 0};
- ArtPoint pixel_origin;
- int canvas_x, canvas_y;
- GnomeCanvasItem *tooltip_text;
- double tooltip_width;
- double tooltip_height;
- double tooltip_x;
- double tooltip_y;
-#if 0
- double x1, x2, y1, y2;
-#endif
- GnomeCanvasItem *rect;
- GtkWidget *tooltip_window; /* GtkWindow for displaying the tooltip */
-
- text->tooltip_count = 0;
-
- if (E_CANVAS(GNOME_CANVAS_ITEM(text)->canvas)->tooltip_window || text->editing || !text->num_lines) {
- text->tooltip_timeout = 0;
- return FALSE;
- }
-
- cut_off = FALSE;
- for ( i = 0; i < text->num_lines; i++ ) {
- PangoLayoutLine *line = pango_layout_get_line (text->layout, i);
- PangoRectangle rect;
-
- pango_layout_line_get_pixel_extents (line, &rect, NULL);
-
- if (rect.width > text->clip_width) {
- cut_off = TRUE;
- break;
- }
- }
- if ( ! cut_off ) {
- text->tooltip_timeout = 0;
- return FALSE;
- }
-
- gnome_canvas_item_i2c_affine(GNOME_CANVAS_ITEM(text), i2c);
- art_affine_point (&pixel_origin, &origin, i2c);
-
- gdk_window_get_origin (GTK_WIDGET(GNOME_CANVAS_ITEM(text)->canvas)->window, &canvas_x, &canvas_y);
- pixel_origin.x += canvas_x;
- pixel_origin.y += canvas_y;
- pixel_origin.x -= (int) gtk_layout_get_hadjustment(GTK_LAYOUT(GNOME_CANVAS_ITEM(text)->canvas))->value;
- pixel_origin.y -= (int) gtk_layout_get_vadjustment(GTK_LAYOUT(GNOME_CANVAS_ITEM(text)->canvas))->value;
-
- tooltip_window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_container_set_border_width (GTK_CONTAINER (tooltip_window), 1);
-
- canvas = e_canvas_new ();
-
- gtk_container_add (GTK_CONTAINER (tooltip_window), canvas);
-
- /* Get the longest line length */
- pango_layout_get_size (text->layout, &max_width, NULL);
-
- rect = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
- gnome_canvas_rect_get_type (),
- "x1", (double) 0,
- "y1", (double) 0,
- "x2", (double) max_width + 4,
- "y2", (double) text->height + 4,
- "fill_color", "light gray",
- NULL);
-
- tooltip_text = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)),
- e_text_get_type (),
- "anchor", GTK_ANCHOR_NW,
- "bold", text->bold,
- "strikeout", text->strikeout,
- "text", text->text,
- "editable", FALSE,
- "clip_width", text->max_lines != 1 ? text->clip_width : max_width,
- "clip_height", text->max_lines != 1 ? -1 : (double)text->height,
- "clip", TRUE,
- "line_wrap", text->line_wrap,
- "justification", text->justification,
- NULL);
-
-
-
- if (text->draw_borders)
- e_canvas_item_move_absolute(tooltip_text, 1 + BORDER_INDENT, 1 + BORDER_INDENT);
- else
- e_canvas_item_move_absolute(tooltip_text, 1, 1);
-
- create_layout (E_TEXT (tooltip_text));
-
- split_into_lines (E_TEXT(tooltip_text));
- calc_height (E_TEXT(tooltip_text));
-
- gnome_canvas_item_set (tooltip_text,
- "clip_height", (double) E_TEXT(tooltip_text)->height,
- "clip_width", (double) E_TEXT(tooltip_text)->width,
- NULL);
-
- tooltip_width = E_TEXT(tooltip_text)->width;
- tooltip_height = E_TEXT(tooltip_text)->height;
- tooltip_x = 0;
- tooltip_y = 0;
- switch(E_TEXT(tooltip_text)->justification) {
- case GTK_JUSTIFY_CENTER:
- tooltip_x = - tooltip_width / 2;
- break;
- case GTK_JUSTIFY_RIGHT:
- tooltip_x = tooltip_width / 2;
- break;
- case GTK_JUSTIFY_FILL:
- case GTK_JUSTIFY_LEFT:
- tooltip_x = 0;
- break;
- }
- switch(text->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:
- tooltip_y -= tooltip_height / 2.0;
- break;
-
- case GTK_ANCHOR_SW:
- case GTK_ANCHOR_S:
- case GTK_ANCHOR_SE:
- tooltip_y -= tooltip_height;
- break;
- }
- switch(E_TEXT(tooltip_text)->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:
- tooltip_x -= tooltip_width / 2.0;
- break;
-
- case GTK_ANCHOR_NE:
- case GTK_ANCHOR_E:
- case GTK_ANCHOR_SE:
- tooltip_x -= tooltip_width;
- break;
- }
-
- gnome_canvas_item_set(rect,
- "x2", (double) tooltip_width + 4 + (text->draw_borders ? BORDER_INDENT * 2 : 0),
- "y2", (double) tooltip_height + 4 + (text->draw_borders ? BORDER_INDENT * 2 : 0),
- NULL);
-
- gtk_widget_show (canvas);
- gtk_widget_realize (tooltip_window);
-
- gtk_widget_set_usize (tooltip_window,
- tooltip_width + 4 + (text->draw_borders ? BORDER_INDENT * 2 : 0),
- tooltip_height + 4 + (text->draw_borders ? BORDER_INDENT * 2 : 0));
- gnome_canvas_set_scroll_region (GNOME_CANVAS(canvas), 0.0, 0.0,
- tooltip_width + (text->draw_borders ? BORDER_INDENT * 2 : 0),
- (double)tooltip_height + (text->draw_borders ? BORDER_INDENT * 2 : 0));
- g_signal_connect (tooltip_window, "event",
- G_CALLBACK(tooltip_event), text);
- g_object_weak_ref (G_OBJECT (tooltip_window),
- tooltip_destroy, text);
- g_object_ref (text);
-
- e_canvas_popup_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(text)->canvas),
- tooltip_window,
- pixel_origin.x - 2 + tooltip_x,
- pixel_origin.y - 2 + tooltip_y);
- text->tooltip_owner = TRUE;
-
- text->tooltip_timeout = 0;
-
- return FALSE;
-}
-
-static void
-start_editing (EText *text)
-{
- if (text->editing)
- return;
-
- g_free (text->revert);
- text->revert = g_strdup (text->text);
-
- text->editing = TRUE;
- if (text->pointer_in) {
- if (text->default_cursor_shown && (!text->draw_borders)) {
- gdk_window_set_cursor (GTK_WIDGET (GNOME_CANVAS_ITEM (text)->canvas)->window, text->i_cursor);
- text->default_cursor_shown = FALSE;
- }
- }
- text->select_by_word = FALSE;
- text->xofs_edit = 0;
- text->yofs_edit = 0;
- if (text->timeout_id == 0)
- text->timeout_id = g_timeout_add(10, _blink_scroll_timeout, text);
- text->timer = g_timer_new();
- g_timer_elapsed(text->timer, &(text->scroll_start));
- g_timer_start(text->timer);
-}
-
-void
-e_text_stop_editing (EText *text)
-{
- if (!text->editing)
- return;
-
- g_free (text->revert);
- text->revert = NULL;
-
- text->editing = FALSE;
- if ( (!text->default_cursor_shown) && (!text->draw_borders) ) {
- gdk_window_set_cursor (GTK_WIDGET (GNOME_CANVAS_ITEM (text)->canvas)->window, text->default_cursor);
- text->default_cursor_shown = TRUE;
- }
- if (text->timer) {
- g_timer_stop(text->timer);
- g_timer_destroy(text->timer);
- text->timer = NULL;
- }
-}
-
-void
-e_text_cancel_editing (EText *text)
-{
- if (text->revert)
- e_text_model_set_text(text->model, text->revert);
- e_text_stop_editing (text);
-}
-
-static gboolean
-_click (gpointer data)
-{
- *(gint *)data = 0;
- return FALSE;
-}
-
-static gint
-e_text_event (GnomeCanvasItem *item, GdkEvent *event)
-{
- EText *text = E_TEXT(item);
- ETextEventProcessorEvent e_tep_event;
-
- static EText *save_text = NULL;
-
- gint return_val = 0;
-
- if (!text->model)
- return FALSE;
-
- e_tep_event.type = event->type;
- switch (event->type) {
- case GDK_FOCUS_CHANGE:
- if (text->editable) {
- GdkEventFocus *focus_event;
- focus_event = (GdkEventFocus *) event;
- if (focus_event->in) {
-
- /* Evil hack to disconnect the signal handlers for the previous Etext
- * which was not disconnected because of being in preedit mode.
- * In preedit mode the widget can go out of focus due to popups associated
- * with preedit.,but still the callbacks need to be connected.
- * Here when a new text widget comes into focus we can disconnect the
- * old one.Shouldn't hurt much, as in worst case, save_text which should
- * be disconnected will be overwritten and we will have signal
- * handlers connect to multiple e-texts but with subsequent commit these
- * should go away.
- */
-
- if (save_text && save_text->im_context) {
- g_signal_handlers_disconnect_matched (save_text->im_context,
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- NULL, save_text);
- save_text->im_context_signals_registered = FALSE;
- }
-
- if (text->im_context) {
- if (!text->im_context_signals_registered) {
- g_signal_connect (text->im_context, "commit",
- G_CALLBACK (e_text_commit_cb), text);
- g_signal_connect (text->im_context, "preedit_changed",
- G_CALLBACK (e_text_preedit_changed_cb), text);
- g_signal_connect (text->im_context, "retrieve_surrounding",
- G_CALLBACK (e_text_retrieve_surrounding_cb), text);
- g_signal_connect (text->im_context, "delete_surrounding",
- G_CALLBACK (e_text_delete_surrounding_cb), text);
- text->im_context_signals_registered = TRUE;
- }
- }
- start_editing (text);
- text->show_cursor = FALSE; /* so we'll redraw and the cursor will be shown */
- } else {
- /* Incase we are not disconnecting the signals
- * for text, we are saving text for
- * disconnecting in the next focus_in.
- */
- if (!text->preedit_len && text->im_context) {
- g_signal_handlers_disconnect_matched (text->im_context,
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- NULL, text);
- text->im_context_signals_registered = FALSE;
- } else {
- save_text = text;
- }
-
- e_text_stop_editing (text);
- if (text->timeout_id) {
- g_source_remove(text->timeout_id);
- text->timeout_id = 0;
- }
- if (text->show_cursor || text->draw_borders) {
- text->show_cursor = FALSE;
- text->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(text));
- }
- }
- if ( text->line_wrap )
- text->needs_split_into_lines = 1;
- e_canvas_item_request_reflow (GNOME_CANVAS_ITEM(text));
- }
- return_val = 0;
- break;
- case GDK_KEY_PRESS:
-
- /* Handle S-F10 key binding here. */
-
- if (event->key.keyval == GDK_F10
- && (event->key.state & GDK_SHIFT_MASK)
- && text->handle_popup ){
-
- /* Simulate a GdkEventButton here, so that we can call e_text_do_popup directly */
-
- GdkEventButton *button = (GdkEventButton *) gdk_event_new (GDK_BUTTON_PRESS);
- button->time = event->key.time;
- button->button = 0;
- e_text_do_popup (text, button, 0);
- return TRUE;
- }
-
- /* Fall Through */
-
- case GDK_KEY_RELEASE:
-
- if (text->editing) {
- GdkEventKey key;
- gint ret;
-
- if (text->im_context && gtk_im_context_filter_keypress (text->im_context, (GdkEventKey*)event)) {
- text->need_im_reset = TRUE;
- return 1;
- }
-
- key = event->key;
- e_tep_event.key.time = key.time;
- e_tep_event.key.state = key.state;
- e_tep_event.key.keyval = key.keyval;
-
- /* This is probably ugly hack, but we have to handle UTF-8 input somehow */
-#if 0
- e_tep_event.key.length = key.length;
- e_tep_event.key.string = key.string;
-#else
- e_tep_event.key.string = e_utf8_from_gtk_event_key (GTK_WIDGET (item->canvas), key.keyval, key.string);
- if (e_tep_event.key.string != NULL) {
- e_tep_event.key.length = strlen (e_tep_event.key.string);
- } else {
- e_tep_event.key.length = 0;
- }
-#endif
- _get_tep(text);
- ret = e_text_event_processor_handle_event (text->tep, &e_tep_event);
-
- if (event->type == GDK_KEY_PRESS)
- g_signal_emit (text, e_text_signals[E_TEXT_KEYPRESS], 0,
- e_tep_event.key.keyval, e_tep_event.key.state);
-
-
- if (e_tep_event.key.string)
- g_free (e_tep_event.key.string);
-
-
- return ret;
- }
- break;
- case GDK_BUTTON_PRESS: /* Fall Through */
- case GDK_BUTTON_RELEASE:
- if (text->tooltip_timeout) {
- gtk_timeout_remove (text->tooltip_timeout);
- text->tooltip_timeout = 0;
- }
- e_canvas_hide_tooltip (E_CANVAS(GNOME_CANVAS_ITEM(text)->canvas));
-#if 0
- if ((!text->editing)
- && text->editable
- && event->type == GDK_BUTTON_RELEASE
- && event->button.button == 1) {
- GdkEventButton button = event->button;
-
- e_canvas_item_grab_focus (item, TRUE);
-
- e_tep_event.type = GDK_BUTTON_RELEASE;
- e_tep_event.button.time = button.time;
- e_tep_event.button.state = button.state;
- e_tep_event.button.button = button.button;
- e_tep_event.button.position = get_position_from_xy(text, button.x, button.y);
- _get_tep(text);
- return_val = e_text_event_processor_handle_event (text->tep,
- &e_tep_event);
- e_tep_event.type = GDK_BUTTON_RELEASE;
- }
-#else
- if ((!text->editing)
- && text->editable
- && (event->button.button == 1 ||
- event->button.button == 2)) {
- e_canvas_item_grab_focus (item, TRUE);
- start_editing (text);
- }
-#endif
-
- /* We follow convention and emit popup events on right-clicks. */
- if (event->type == GDK_BUTTON_PRESS && event->button.button == 3) {
- if (text->handle_popup) {
- e_text_do_popup (text, &(event->button),
- get_position_from_xy (text, event->button.x, event->button.y));
- return TRUE;
- }
- else {
- break;
- }
- }
-
- /* Create our own double and triple click events,
- as gnome-canvas doesn't forward them to us */
- if (event->type == GDK_BUTTON_PRESS) {
- if (text->dbl_timeout == 0 &&
- text->tpl_timeout == 0) {
- text->dbl_timeout = gtk_timeout_add (200,
- _click,
- &(text->dbl_timeout));
- } else {
- if (text->tpl_timeout == 0) {
- e_tep_event.type = GDK_2BUTTON_PRESS;
- text->tpl_timeout = gtk_timeout_add (200, _click, &(text->tpl_timeout));
- } else {
- e_tep_event.type = GDK_3BUTTON_PRESS;
- }
- }
- }
-
- if (text->editing) {
- GdkEventButton button = event->button;
- e_tep_event.button.time = button.time;
- e_tep_event.button.state = button.state;
- e_tep_event.button.button = button.button;
- e_tep_event.button.position = get_position_from_xy(text, button.x, button.y);
- _get_tep(text);
- return_val = e_text_event_processor_handle_event (text->tep,
- &e_tep_event);
- if (event->button.button == 1) {
- if (event->type == GDK_BUTTON_PRESS)
- text->button_down = TRUE;
- else
- text->button_down = FALSE;
- }
- text->lastx = button.x;
- text->lasty = button.y;
- text->last_state = button.state;
- }
- break;
- case GDK_MOTION_NOTIFY:
- if (text->editing) {
- GdkEventMotion motion = event->motion;
- e_tep_event.motion.time = motion.time;
- e_tep_event.motion.state = motion.state;
- e_tep_event.motion.position = get_position_from_xy(text, motion.x, motion.y);
- _get_tep(text);
- return_val = e_text_event_processor_handle_event (text->tep,
- &e_tep_event);
- text->lastx = motion.x;
- text->lasty = motion.y;
- text->last_state = motion.state;
- }
- break;
- case GDK_ENTER_NOTIFY:
- {
- if ( text->tooltip_count == 0 && text->clip) {
- if (!text->tooltip_timeout)
- text->tooltip_timeout = gtk_timeout_add (1000, _do_tooltip, text);
- }
- text->tooltip_count ++;
- }
-
- text->pointer_in = TRUE;
- if (text->editing || text->draw_borders) {
- if ( text->default_cursor_shown ) {
- gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, text->i_cursor);
- text->default_cursor_shown = FALSE;
- }
- }
- break;
- case GDK_LEAVE_NOTIFY:
- if (text->tooltip_count > 0)
- text->tooltip_count --;
- if ( text->tooltip_count == 0 && text->clip) {
- if ( text->tooltip_timeout ) {
- gtk_timeout_remove (text->tooltip_timeout);
- text->tooltip_timeout = 0;
- }
- }
-
- text->pointer_in = FALSE;
- if (text->editing || text->draw_borders) {
- if ( ! text->default_cursor_shown ) {
- gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, text->default_cursor);
- text->default_cursor_shown = TRUE;
- }
- }
- break;
- default:
- break;
- }
- if (return_val)
- return return_val;
- if (GNOME_CANVAS_ITEM_CLASS(parent_class)->event)
- return GNOME_CANVAS_ITEM_CLASS(parent_class)->event(item, event);
- else
- return 0;
-}
-
-void
-e_text_copy_clipboard (EText *text)
-{
- gint selection_start_pos;
- gint selection_end_pos;
- char *str;
-
- selection_start_pos = MIN (text->selection_start, text->selection_end);
- selection_end_pos = MAX (text->selection_start, text->selection_end);
-
- /* convert sel_start/sel_end to byte indices */
- selection_start_pos = g_utf8_offset_to_pointer (text->text, selection_start_pos) - text->text;
- selection_end_pos = g_utf8_offset_to_pointer (text->text, selection_end_pos) - text->text;
-
- str = g_strndup (text->text + selection_start_pos,
- selection_end_pos - selection_start_pos);
-
- gtk_clipboard_set_text (
-#ifdef GTK_2_2
- gtk_widget_get_clipboard (GTK_WIDGET (GNOME_CANVAS_ITEM (text)->canvas),
- GDK_SELECTION_CLIPBOARD),
-#else
- gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
-#endif
- str, -1);
- g_free (str);
-}
-
-void
-e_text_delete_selection(EText *text)
-{
- int sel_start, sel_end;
-
- sel_start = MIN(text->selection_start, text->selection_end);
- sel_end = MAX(text->selection_start, text->selection_end);
-
- if (sel_start != sel_end)
- e_text_model_delete(text->model, sel_start, sel_end - sel_start);
-}
-
-void
-e_text_cut_clipboard (EText *text)
-{
- e_text_copy_clipboard (text);
- e_text_delete_selection (text);
-}
-
-void
-e_text_paste_clipboard (EText *text)
-{
- ETextEventProcessorCommand command;
-
- command.action = E_TEP_PASTE;
- command.position = E_TEP_SELECTION;
- command.string = "";
- command.value = 0;
- e_text_command(text->tep, &command, text);
-}
-
-void
-e_text_select_all (EText *text)
-{
- ETextEventProcessorCommand command;
-
- command.action = E_TEP_SELECT;
- command.position = E_TEP_SELECT_ALL;
- command.string = "";
- command.value = 0;
- e_text_command(text->tep, &command, text);
-}
-
-
-static void
-primary_get_cb (GtkClipboard *clipboard,
- GtkSelectionData *selection_data,
- guint info,
- gpointer data)
-{
- EText *text = E_TEXT (data);
- int sel_start, sel_end;
-
- sel_start = MIN(text->selection_start, text->selection_end);
- sel_end = MAX(text->selection_start, text->selection_end);
-
- /* convert sel_start/sel_end to byte indices */
- sel_start = g_utf8_offset_to_pointer (text->text, sel_start) - text->text;
- sel_end = g_utf8_offset_to_pointer (text->text, sel_end) - text->text;
-
- if (sel_start != sel_end) {
- gchar *str = g_strndup (text->text + sel_start,
- sel_end - sel_start);
- gtk_selection_data_set_text (selection_data, str, -1);
- g_free (str);
- }
-}
-
-static void
-primary_clear_cb (GtkClipboard *clipboard,
- gpointer data)
-{
-#if notyet
- /* XXX */
- gtk_editable_select_region (GTK_EDITABLE (entry), entry->current_pos, entry->current_pos);
-#endif
-}
-
-static void
-e_text_update_primary_selection (EText *text)
-{
- static const GtkTargetEntry targets[] = {
- { "UTF8_STRING", 0, 0 },
- { "UTF-8", 0, 0 },
- { "STRING", 0, 0 },
- { "TEXT", 0, 0 },
- { "COMPOUND_TEXT", 0, 0 }
- };
- GtkClipboard *clipboard;
-
-#ifdef GTK_2_2
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET (GNOME_CANVAS_ITEM (text)->canvas), GDK_SELECTION_PRIMARY);
-#else
- clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
-#endif
-
- if (text->selection_start != text->selection_end) {
- if (!gtk_clipboard_set_with_owner (clipboard, targets, G_N_ELEMENTS (targets),
- primary_get_cb, primary_clear_cb, G_OBJECT (text)))
- primary_clear_cb (clipboard, text);
- }
- else {
- if (gtk_clipboard_get_owner (clipboard) == G_OBJECT (text))
- gtk_clipboard_clear (clipboard);
- }
-}
-
-static void
-paste_received (GtkClipboard *clipboard,
- const gchar *text,
- gpointer data)
-{
- EText *etext = E_TEXT (data);
-
- if (text && g_utf8_validate (text, strlen (text), NULL)) {
- if (etext->selection_end != etext->selection_start)
- e_text_delete_selection (etext);
-
- e_text_insert (etext, text);
- }
-
- g_object_unref (etext);
-}
-
-static void
-e_text_paste (EText *text, GdkAtom selection)
-{
- g_object_ref (text);
- gtk_clipboard_request_text (
-#ifdef GTK_2_2
-
- gtk_widget_get_clipboard (GTK_WIDGET (GNOME_CANVAS_ITEM (text)->canvas),
- selection),
-#else
- gtk_clipboard_get (selection),
-#endif
- paste_received, text);
-}
-
-typedef struct {
- EText *text;
- GdkEventButton *button;
- int position;
-} PopupClosure;
-
-static void
-popup_menu_detach (GtkWidget *attach_widget,
- GtkMenu *menu)
-{
-}
-
-static void
-popup_menu_placement_cb (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data)
-{
- EText *text = E_TEXT(user_data);
- GnomeCanvasItem *item = &text->item;
- GnomeCanvas *parent = item->canvas;
-
- if (parent){
- gdk_window_get_origin (((GtkWidget*) parent)->window, x, y);
- *x += item->x1 + text->width / 2;
- *y += item->y1 + text->height / 2;
- }
-
- return;
-}
-
-static void
-popup_targets_received (GtkClipboard *clipboard,
- GtkSelectionData *data,
- gpointer user_data)
-{
- PopupClosure *closure = user_data;
- EText *text = closure->text;
- GdkEventButton *button = closure->button;
- int position = closure->position;
- GtkWidget *popup_menu = gtk_menu_new ();
- GtkWidget *menuitem, *submenu;
-
- g_free (closure);
-
- gtk_menu_attach_to_widget (GTK_MENU (popup_menu),
- GTK_WIDGET(GNOME_CANVAS_ITEM (text)->canvas),
- popup_menu_detach);
-
- /* cut menu item */
- menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_CUT, NULL);
- gtk_widget_show (menuitem);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), menuitem);
- g_signal_connect_swapped (menuitem, "activate",
- G_CALLBACK (e_text_cut_clipboard), text);
- gtk_widget_set_sensitive (menuitem, text->editable && (text->selection_start != text->selection_end));
-
- /* copy menu item */
- menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL);
- gtk_widget_show (menuitem);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), menuitem);
- g_signal_connect_swapped (menuitem, "activate",
- G_CALLBACK (e_text_copy_clipboard), text);
- gtk_widget_set_sensitive (menuitem, text->selection_start != text->selection_end);
-
- /* paste menu item */
- menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_PASTE, NULL);
- gtk_widget_show (menuitem);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), menuitem);
- g_signal_connect_swapped (menuitem, "activate",
- G_CALLBACK (e_text_paste_clipboard), text);
- gtk_widget_set_sensitive (menuitem, text->editable && gtk_selection_data_targets_include_text (data));
-
- menuitem = gtk_menu_item_new_with_label (_("Select All"));
- gtk_widget_show (menuitem);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), menuitem);
- g_signal_connect_swapped (menuitem, "activate",
- G_CALLBACK (e_text_select_all), text);
- gtk_widget_set_sensitive (menuitem, strlen (text->text) > 0);
-
- menuitem = gtk_separator_menu_item_new ();
- gtk_widget_show (menuitem);
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), menuitem);
-
- if (text->im_context && GTK_IS_IM_MULTICONTEXT (text->im_context)) {
- menuitem = gtk_menu_item_new_with_label (_("Input Methods"));
- gtk_widget_show (menuitem);
- submenu = gtk_menu_new ();
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), menuitem);
-
- gtk_im_multicontext_append_menuitems (GTK_IM_MULTICONTEXT (text->im_context),
- GTK_MENU_SHELL (submenu));
- }
-
- g_signal_emit (text,
- e_text_signals[E_TEXT_POPULATE_POPUP],
- 0,
- button, position,
- popup_menu);
-
- /* If invoked by S-F10 key binding, button will be 0. */
- if (button->button == 0){
- gtk_menu_popup (GTK_MENU (popup_menu), NULL, NULL,
- popup_menu_placement_cb, (gpointer)text,
- button->button, GDK_CURRENT_TIME);
- } else {
- gtk_menu_popup (GTK_MENU (popup_menu), NULL, NULL,
- NULL, NULL,
- button->button, button->time);
- }
-
- g_object_unref (text);
- gdk_event_free ((GdkEvent *)button);
-}
-
-static void
-e_text_do_popup (EText *text, GdkEventButton *button, int position)
-{
- PopupClosure *closure = g_new (PopupClosure, 1);
-
- closure->text = text;
- g_object_ref (closure->text);
- closure->button = (GdkEventButton *) gdk_event_copy ((GdkEvent *)button);
- closure->position = position;
-
- gtk_clipboard_request_contents (
-#ifdef GTK_2_2
-
- gtk_widget_get_clipboard (GTK_WIDGET (GNOME_CANVAS_ITEM (text)->canvas),
- GDK_SELECTION_CLIPBOARD),
-#else
- gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
-#endif
- gdk_atom_intern ("TARGETS", FALSE),
- popup_targets_received,
- closure);
-}
-
-#if 0
-static void
-e_text_reset_im_context (EText *text)
-{
- if (text->need_im_reset) {
- text->need_im_reset = 0;
- gtk_im_context_reset (text->im_context);
- }
-}
-#endif
-
-/* fixme: */
-
-static int
-next_word (EText *text, int start)
-{
- char *p = g_utf8_offset_to_pointer (text->text, start);
- int length;
-
- length = g_utf8_strlen (text->text, -1);
-
- if (start >= length) {
- return length;
- } else {
- p = g_utf8_next_char (p);
- start++;
-
- while (p && *p) {
- gunichar unival = g_utf8_get_char (p);
- if (g_unichar_isspace (unival)) {
- return start + 1;
- }
- else {
- p = g_utf8_next_char (p);
- start++;
- }
- }
- }
-
- return g_utf8_pointer_to_offset (text->text, p);
-}
-
-static int
-find_offset_into_line (EText *text, int offset_into_text, char **start_of_line)
-{
- char *p;
-
- p = g_utf8_offset_to_pointer (text->text, offset_into_text);
-
- if (p == text->text) {
- if (start_of_line)
- *start_of_line = (char*)text->text;
- return 0;
- }
- else {
- p = g_utf8_find_prev_char (text->text, p);
-
- while (p && p > text->text) {
- if (*p == '\n') {
- if (start_of_line)
- *start_of_line = p+1;
- return offset_into_text - g_utf8_pointer_to_offset (text->text, p + 1);
- }
- p = g_utf8_find_prev_char (text->text, p);
- }
-
- if (start_of_line)
- *start_of_line = (char*)text->text;
- return offset_into_text;
- }
-}
-
-static int
-_get_position(EText *text, ETextEventProcessorCommand *command)
-{
- int length, obj_num;
- gunichar unival;
- char *p = NULL;
- gint new_pos = 0;
-
- switch (command->position) {
-
- case E_TEP_VALUE:
- new_pos = command->value;
- break;
-
- case E_TEP_SELECTION:
- new_pos = text->selection_end;
- break;
-
- case E_TEP_START_OF_BUFFER:
- new_pos = 0;
- break;
-
- case E_TEP_END_OF_BUFFER:
- new_pos = strlen (text->text);
- break;
-
- case E_TEP_START_OF_LINE:
-
- if (text->selection_end >= 1) {
-
- p = g_utf8_offset_to_pointer (text->text, text->selection_end);
- if (p != text->text) {
- p = g_utf8_find_prev_char (text->text, p);
- while (p && p > text->text) {
- if (*p == '\n') {
- new_pos = g_utf8_pointer_to_offset (text->text, p) + 1;
- break;
- }
- p = g_utf8_find_prev_char (text->text, p);
- }
- }
- }
-
- break;
-
- case E_TEP_END_OF_LINE:
- new_pos = -1;
- length = g_utf8_strlen (text->text, -1);
-
- if (text->selection_end >= length) {
- new_pos = length;
- } else {
-
- p = g_utf8_offset_to_pointer (text->text, text->selection_end);
-
- while (p && *p) {
- if (*p == '\n') {
- new_pos = g_utf8_pointer_to_offset (text->text, p);
- p = NULL;
- } else
- p = g_utf8_next_char (p);
- }
- }
-
- if (new_pos == -1)
- new_pos = g_utf8_pointer_to_offset (text->text, p);
-
- break;
-
- case E_TEP_FORWARD_CHARACTER:
- length = g_utf8_strlen (text->text, -1);
-
- if (text->selection_end >= length)
- new_pos = length;
- else
- new_pos = text->selection_end + 1;
-
- break;
-
- case E_TEP_BACKWARD_CHARACTER:
- new_pos = 0;
- if (text->selection_end >= 1) {
- new_pos = text->selection_end - 1;
- }
-
- break;
-
- case E_TEP_FORWARD_WORD:
- new_pos = next_word (text, text->selection_end);
- break;
-
- case E_TEP_BACKWARD_WORD:
- new_pos = 0;
- if (text->selection_end >= 1) {
- int pos = text->selection_end;
-
- p = g_utf8_find_prev_char (text->text, g_utf8_offset_to_pointer (text->text, text->selection_end));
- pos --;
-
- if (p != text->text) {
- p = g_utf8_find_prev_char (text->text, p);
- pos --;
-
- while (p && p > text->text) {
- unival = g_utf8_get_char (p);
- if (g_unichar_isspace (unival)) {
- new_pos = pos + 1;
- p = NULL;
- }
- else {
- p = g_utf8_find_prev_char (text->text, p);
- pos --;
- }
- }
- }
- }
-
- break;
-
- case E_TEP_FORWARD_LINE: {
- int offset_into_line;
- char *p;
-
- offset_into_line = find_offset_into_line (text, text->selection_end, NULL);
- if (offset_into_line == -1)
- return text->selection_end;
-
- /* now we search forward til we hit a \n, and then
- offset_into_line more characters */
- p = g_utf8_offset_to_pointer (text->text, text->selection_end);
- while (p && *p) {
- if (*p == '\n')
- break;
- p = g_utf8_next_char (p);
- }
- if (p && *p == '\n') {
- /* now we loop forward offset_into_line
- characters, or until we hit \n or \0 */
-
- p = g_utf8_next_char (p);
- while (offset_into_line > 0 && p && *p != '\n' && *p != '\0') {
- p = g_utf8_next_char (p);
- offset_into_line --;
- }
- }
-
- /* at this point, p points to the new location,
- convert it to an offset and we're done */
- new_pos = g_utf8_pointer_to_offset (text->text, p);
- break;
- }
- case E_TEP_BACKWARD_LINE: {
- char *p;
- int offset_into_line = find_offset_into_line (text, text->selection_end, &p);
-
- if (offset_into_line == -1)
- return text->selection_end;
-
- /* p points to the first character on our line. if we
- have a \n before it, skip it and scan til we hit
- the next one */
- if (p != text->text) {
- p = g_utf8_find_prev_char (text->text, p);
- if (*p == '\n') {
- p = g_utf8_find_prev_char (text->text, p);
- while (p > text->text) {
- if (*p == '\n') {
- p ++;
- break;
- }
- p = g_utf8_find_prev_char (text->text, p);
- }
- }
- }
-
- /* at this point 'p' points to the start of the
- previous line, move forward 'offset_into_line'
- times. */
-
- while (offset_into_line > 0 && p && *p != '\n' && *p != '\0') {
- p = g_utf8_next_char (p);
- offset_into_line --;
- }
-
- /* at this point, p points to the new location,
- convert it to an offset and we're done */
- new_pos = g_utf8_pointer_to_offset (text->text, p);
- break;
- }
- case E_TEP_SELECT_WORD:
- /* This is a silly hack to cause double-clicking on an object
- to activate that object.
- (Normally, double click == select word, which is why this is here.) */
-
- obj_num = e_text_model_get_object_at_offset (text->model, text->selection_start);
- if (obj_num != -1) {
- e_text_model_activate_nth_object (text->model, obj_num);
- new_pos = text->selection_start;
- break;
- }
-
- if (text->selection_end < 1) {
- new_pos = 0;
- break;
- }
-
- p = g_utf8_offset_to_pointer (text->text, text->selection_end);
-
- p = g_utf8_find_prev_char (text->text, p);
-
- while (p && p > text->text) {
- unival = g_utf8_get_char (p);
- if (g_unichar_isspace (unival)) {
- p = g_utf8_next_char (p);
- break;
- }
- p = g_utf8_find_prev_char (text->text, p);
- }
-
- if (!p)
- text->selection_start = 0;
- else
- text->selection_start = g_utf8_pointer_to_offset (text->text, p);
-
-
- text->selection_start = e_text_model_validate_position (text->model, text->selection_start);
-
- length = g_utf8_strlen (text->text, -1);
- if (text->selection_end >= length) {
- new_pos = length;
- break;
- }
-
- p = g_utf8_offset_to_pointer (text->text, text->selection_end);
- while (p && *p) {
- unival = g_utf8_get_char (p);
- if (g_unichar_isspace (unival)) {
- new_pos = g_utf8_pointer_to_offset (text->text, p);
- break;
- } else
- p = g_utf8_next_char (p);
- }
-
- if (!new_pos)
- new_pos = g_utf8_strlen (text->text, -1);
-
- return new_pos;
-
- case E_TEP_SELECT_ALL:
- text->selection_start = 0;
- new_pos = g_utf8_strlen (text->text, -1);
- break;
-
- case E_TEP_FORWARD_PARAGRAPH:
- case E_TEP_BACKWARD_PARAGRAPH:
-
- case E_TEP_FORWARD_PAGE:
- case E_TEP_BACKWARD_PAGE:
- new_pos = text->selection_end;
- break;
-
- default:
- new_pos = text->selection_end;
- break;
- }
-
- new_pos = e_text_model_validate_position (text->model, new_pos);
-
- return new_pos;
-}
-
-static void
-e_text_insert(EText *text, const char *string)
-{
- int len = strlen (string);
-
- if (len > 0) {
- int utf8len = 0;
-
- if (!text->allow_newlines) {
- const char *i;
- char *new_string = g_malloc (len + 1);
- char *j = new_string;
-
- for (i = string; *i; i = g_utf8_next_char(i)) {
- if (*i != '\n') {
- gunichar c;
- int charlen;
-
- c = g_utf8_get_char (i);
- charlen = g_unichar_to_utf8 (c, j);
- j += charlen;
- utf8len++;
- }
- }
- *j = 0;
- e_text_model_insert_length(text->model, text->selection_start, new_string, utf8len);
- g_free (new_string);
- }
- else {
- utf8len = g_utf8_strlen (string, -1);
- e_text_model_insert_length(text->model, text->selection_start, string, utf8len);
- }
- }
-}
-
-static void
-capitalize (EText *text, int start, int end, ETextEventProcessorCaps type)
-{
- gboolean first = TRUE;
- const char *p = g_utf8_offset_to_pointer (text->text, start);
- const char *text_end = g_utf8_offset_to_pointer (text->text, end);
- int utf8len = text_end - p;
-
- if (utf8len > 0) {
- char *new_text = g_new0 (char, utf8len * 6);
- char *output = new_text;
-
- while (p && *p && p < text_end) {
- gunichar unival = g_utf8_get_char (p);
- gunichar newval = unival;
-
- switch (type) {
- case E_TEP_CAPS_UPPER:
- newval = g_unichar_toupper (unival);
- break;
- case E_TEP_CAPS_LOWER:
- newval = g_unichar_tolower (unival);
- break;
- case E_TEP_CAPS_TITLE:
- if (g_unichar_isalpha (unival)) {
- if (first)
- newval = g_unichar_totitle (unival);
- else
- newval = g_unichar_tolower (unival);
- first = FALSE;
- } else {
- first = TRUE;
- }
- break;
- }
- g_unichar_to_utf8 (newval, output);
- output = g_utf8_next_char (output);
-
- p = g_utf8_next_char (p);
- }
- *output = 0;
-
- e_text_model_delete (text->model, start, utf8len);
- e_text_model_insert_length (text->model, start, new_text, utf8len);
- g_free (new_text);
- }
-}
-
-static void
-e_text_command(ETextEventProcessor *tep, ETextEventProcessorCommand *command, gpointer data)
-{
- EText *text = E_TEXT(data);
- gboolean scroll = TRUE;
- gboolean use_start = TRUE;
-
- switch (command->action) {
- case E_TEP_MOVE:
- text->selection_start = _get_position(text, command);
- text->selection_end = text->selection_start;
- if (text->timer) {
- g_timer_reset(text->timer);
- }
-
- use_start = TRUE;
- break;
- case E_TEP_SELECT:
- text->selection_start = e_text_model_validate_position (text->model, text->selection_start); /* paranoia */
- text->selection_end = _get_position(text, command);
-
- e_text_update_primary_selection (text);
-
- use_start = FALSE;
-
- break;
- case E_TEP_DELETE:
- if (text->selection_end == text->selection_start) {
- text->selection_end = _get_position(text, command);
- }
- e_text_delete_selection(text);
- if (text->timer) {
- g_timer_reset(text->timer);
- }
-
- use_start = FALSE;
-
- break;
-
- case E_TEP_INSERT:
- if (g_utf8_validate (command->string, command->value, NULL)) {
- if (text->selection_end != text->selection_start) {
- e_text_delete_selection(text);
- }
- e_text_insert(text, command->string);
- if (text->timer) {
- g_timer_reset(text->timer);
- }
- }
- break;
- case E_TEP_COPY:
- e_text_copy_clipboard (text);
-
- if (text->timer) {
- g_timer_reset(text->timer);
- }
- scroll = FALSE;
- break;
- case E_TEP_PASTE:
- e_text_paste (text, GDK_NONE);
- if (text->timer) {
- g_timer_reset(text->timer);
- }
- break;
- case E_TEP_GET_SELECTION:
- e_text_paste (text, GDK_SELECTION_PRIMARY);
- break;
- case E_TEP_ACTIVATE:
- g_signal_emit (text, e_text_signals[E_TEXT_ACTIVATE], 0);
- if (text->timer) {
- g_timer_reset(text->timer);
- }
- break;
- case E_TEP_SET_SELECT_BY_WORD:
- text->select_by_word = command->value;
- break;
- case E_TEP_GRAB:
- e_canvas_item_grab (E_CANVAS (GNOME_CANVAS_ITEM(text)->canvas),
- GNOME_CANVAS_ITEM(text),
- GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK,
- text->i_cursor,
- command->time,
- NULL,
- NULL);
- scroll = FALSE;
- break;
- case E_TEP_UNGRAB:
- e_canvas_item_ungrab (E_CANVAS (GNOME_CANVAS_ITEM(text)->canvas),
- GNOME_CANVAS_ITEM(text),
- command->time);
- scroll = FALSE;
- break;
- case E_TEP_CAPS:
- if (text->selection_start == text->selection_end) {
- capitalize (text, text->selection_start, next_word (text, text->selection_start), command->value);
- } else {
- int selection_start = MIN (text->selection_start, text->selection_end);
- int selection_end = MAX (text->selection_start, text->selection_end);
- capitalize (text, selection_start, selection_end, command->value);
- }
- break;
- case E_TEP_NOP:
- scroll = FALSE;
- break;
- }
-
- /* it's possible to get here without ever having been realized
- by our canvas (if the e-text started completely obscured.)
- so let's create our layout object if we don't already have
- one. */
- if (!text->layout)
- create_layout (text);
-
- if (scroll && !text->button_down) {
- /* XXX do we really need the @trailing logic here? if
- we don't we can scrap the loop and just use
- pango_layout_index_to_pos */
- PangoLayoutLine *cur_line = NULL;
- int selection_index;
- PangoLayoutIter *iter = pango_layout_get_iter (text->layout);
-
- selection_index = use_start ? text->selection_start : text->selection_end;
- /* convert to a byte index */
- selection_index = g_utf8_offset_to_pointer (text->text, selection_index) - text->text;
-
- do {
- PangoLayoutLine *line = pango_layout_iter_get_line (iter);
-
- if (selection_index >= line->start_index && selection_index <= line->start_index + line->length) {
- /* found the line with the start of the selection */
- cur_line = line;
- break;
- }
-
- } while (pango_layout_iter_next_line (iter));
-
- if (cur_line) {
- int xpos, ypos;
- double clip_width, clip_height;
- gboolean trailing = FALSE;
- PangoRectangle pango_pos;
-
- if (selection_index > 0 && selection_index == cur_line->start_index + cur_line->length) {
- selection_index--;
- trailing = TRUE;
- }
-
- pango_layout_index_to_pos (text->layout, selection_index, &pango_pos);
-
- pango_pos.x = PANGO_PIXELS (pango_pos.x);
- pango_pos.y = PANGO_PIXELS (pango_pos.y);
- pango_pos.width = (pango_pos.width + PANGO_SCALE / 2) / PANGO_SCALE;
- pango_pos.height = (pango_pos.height + PANGO_SCALE / 2) / PANGO_SCALE;
-
- /* scroll for X */
- xpos = pango_pos.x; /* + (trailing ? 0 : pango_pos.width);*/
-
- if (xpos + 2 < text->xofs_edit) {
- text->xofs_edit = xpos;
- }
-
- clip_width = text->clip_width;
- if (clip_width >= 0 && text->draw_borders) {
- clip_width -= 6;
- if (clip_width < 0)
- clip_width = 0;
- }
-
- if (xpos + pango_pos.width - clip_width > text->xofs_edit) {
- text->xofs_edit = xpos + pango_pos.width - clip_width;
- }
-
- /* scroll for Y */
- if (pango_pos.y + 2 < text->yofs_edit) {
- ypos = pango_pos.y;
- text->yofs_edit = ypos;
- }
- else {
- ypos = pango_pos.y + pango_pos.height;
- }
-
- if ( text->clip_height < 0 )
- clip_height = text->height;
- else
- clip_height = text->clip_height;
-
- if (clip_height >= 0 && text->draw_borders) {
- clip_height -= 6;
- if (clip_height < 0)
- clip_height = 0;
- }
-
- if (ypos - clip_height > text->yofs_edit) {
- text->yofs_edit = ypos - clip_height;
- }
-
- }
-
- pango_layout_iter_free (iter);
- }
-
- text->needs_redraw = 1;
- gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(text));
-}
-
-
-/* Class initialization function for the text item */
-static void
-e_text_class_init (ETextClass *klass)
-{
- GObjectClass *gobject_class;
- GnomeCanvasItemClass *item_class;
-
- gobject_class = (GObjectClass *) klass;
- item_class = (GnomeCanvasItemClass *) klass;
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- gobject_class->dispose = e_text_dispose;
- gobject_class->set_property = e_text_set_property;
- gobject_class->get_property = e_text_get_property;
-
- item_class->update = e_text_update;
- item_class->realize = e_text_realize;
- item_class->unrealize = e_text_unrealize;
- item_class->draw = e_text_draw;
- item_class->point = e_text_point;
- item_class->bounds = e_text_bounds;
- item_class->event = e_text_event;
-
- klass->changed = NULL;
- klass->activate = NULL;
-
- e_text_signals[E_TEXT_CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextClass, changed),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_text_signals[E_TEXT_ACTIVATE] =
- g_signal_new ("activate",
- G_OBJECT_CLASS_TYPE (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextClass, activate),
- NULL, NULL,
- e_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- e_text_signals[E_TEXT_KEYPRESS] =
- g_signal_new ("keypress",
- G_OBJECT_CLASS_TYPE (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextClass, keypress),
- NULL, NULL,
- e_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
-
- e_text_signals[E_TEXT_POPULATE_POPUP] =
- g_signal_new ("populate_popup",
- G_OBJECT_CLASS_TYPE (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETextClass, populate_popup),
- NULL, NULL,
- e_marshal_NONE__POINTER_INT_OBJECT,
- G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_INT, GTK_TYPE_MENU);
-
- g_object_class_install_property (gobject_class, PROP_MODEL,
- g_param_spec_object ("model",
- _( "Model" ),
- _( "Model" ),
- E_TYPE_TEXT_MODEL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_EVENT_PROCESSOR,
- g_param_spec_object ("event_processor",
- _( "Event Processor" ),
- _( "Event Processor" ),
- E_TEXT_EVENT_PROCESSOR_TYPE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_TEXT,
- g_param_spec_string ("text",
- _( "Text" ),
- _( "Text" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_BOLD,
- g_param_spec_boolean ("bold",
- _( "Bold" ),
- _( "Bold" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_STRIKEOUT,
- g_param_spec_boolean ("strikeout",
- _( "Strikeout" ),
- _( "Strikeout" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_ANCHOR,
- g_param_spec_enum ("anchor",
- _( "Anchor" ),
- _( "Anchor" ),
- GTK_TYPE_ANCHOR_TYPE, GTK_ANCHOR_CENTER,
- G_PARAM_READWRITE));
-
-
- g_object_class_install_property (gobject_class, PROP_JUSTIFICATION,
- g_param_spec_enum ("justification",
- _( "Justification" ),
- _( "Justification" ),
- GTK_TYPE_JUSTIFICATION, GTK_JUSTIFY_LEFT,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_CLIP_WIDTH,
- g_param_spec_double ("clip_width",
- _( "Clip Width" ),
- _( "Clip Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_CLIP_HEIGHT,
- g_param_spec_double ("clip_height",
- _( "Clip Height" ),
- _( "Clip Height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_CLIP,
- g_param_spec_boolean ("clip",
- _( "Clip" ),
- _( "Clip" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_FILL_CLIP_RECTANGLE,
- g_param_spec_boolean ("fill_clip_rectangle",
- _( "Fill clip rectangle" ),
- _( "Fill clip rectangle" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_X_OFFSET,
- g_param_spec_double ("x_offset",
- _( "X Offset" ),
- _( "X Offset" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_Y_OFFSET,
- g_param_spec_double ("y_offset",
- _( "Y Offset" ),
- _( "Y Offset" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_FILL_COLOR,
- g_param_spec_string ("fill_color",
- _( "Fill color" ),
- _( "Fill color" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_FILL_COLOR_GDK,
- g_param_spec_boxed ("fill_color_gdk",
- _( "GDK fill color" ),
- _( "GDK fill color" ),
- GDK_TYPE_COLOR,
- G_PARAM_READWRITE));
-
-
- g_object_class_install_property (gobject_class, PROP_FILL_COLOR_RGBA,
- g_param_spec_uint ("fill_color_rgba",
- _( "GDK fill color" ),
- _( "GDK fill color" ),
- 0, G_MAXUINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_FILL_STIPPLE,
- g_param_spec_object ("fill_stipple",
- _( "Fill stipple" ),
- _( "Fill stipple" ),
- GDK_TYPE_DRAWABLE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_TEXT_WIDTH,
- g_param_spec_double ("text_width",
- _( "Text width" ),
- _( "Text width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class, PROP_TEXT_HEIGHT,
- g_param_spec_double ("text_height",
- _( "Text height" ),
- _( "Text height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READABLE));
-
-
- g_object_class_install_property (gobject_class, PROP_EDITABLE,
- g_param_spec_boolean ("editable",
- _( "Editable" ),
- _( "Editable" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_USE_ELLIPSIS,
- g_param_spec_boolean ("use_ellipsis",
- _( "Use ellipsis" ),
- _( "Use ellipsis" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_ELLIPSIS,
- g_param_spec_string ("ellipsis",
- _( "Ellipsis" ),
- _( "Ellipsis" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_LINE_WRAP,
- g_param_spec_boolean ("line_wrap",
- _( "Line wrap" ),
- _( "Line wrap" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_BREAK_CHARACTERS,
- g_param_spec_string ("break_characters",
- _( "Break characters" ),
- _( "Break characters" ),
- NULL,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_MAX_LINES,
- g_param_spec_int ("max_lines",
- _( "Max lines" ),
- _( "Max lines" ),
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_WIDTH,
- g_param_spec_double ("width",
- _( "Width" ),
- _( "Width" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
-
- g_object_class_install_property (gobject_class, PROP_HEIGHT,
- g_param_spec_double ("height",
- _( "Height" ),
- _( "Height" ),
- 0.0, G_MAXDOUBLE, 0.0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_DRAW_BORDERS,
- g_param_spec_boolean ("draw_borders",
- _( "Draw borders" ),
- _( "Draw borders" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_ALLOW_NEWLINES,
- g_param_spec_boolean ("allow_newlines",
- _( "Allow newlines" ),
- _( "Allow newlines" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_DRAW_BACKGROUND,
- g_param_spec_boolean ("draw_background",
- _( "Draw background" ),
- _( "Draw background" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_DRAW_BUTTON,
- g_param_spec_boolean ("draw_button",
- _( "Draw button" ),
- _( "Draw button" ),
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_CURSOR_POS,
- g_param_spec_int ("cursor_pos",
- _( "Cursor position" ),
- _( "Cursor position" ),
- 0, G_MAXINT, 0,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_IM_CONTEXT,
- g_param_spec_object ("im_context",
- _( "IM Context" ),
- _( "IM Context" ),
- GTK_TYPE_IM_CONTEXT,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_HANDLE_POPUP,
- g_param_spec_boolean ("handle_popup",
- _( "Handle Popup" ),
- _( "Handle Popup" ),
- FALSE,
- G_PARAM_READWRITE));
-
- if (!clipboard_atom)
- clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE);
-
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TYPE_TEXT,
- gal_a11y_e_text_factory_get_type ());
-
-}
-
-/* Object initialization function for the text item */
-static void
-e_text_init (EText *text)
-{
- text->model = e_text_model_new ();
- text->text = e_text_model_get_text (text->model);
- text->preedit_len = 0;
- text->layout = NULL;
-
- text->revert = NULL;
-
- text->model_changed_signal_id =
- g_signal_connect (text->model,
- "changed",
- G_CALLBACK (e_text_text_model_changed),
- text);
- text->model_repos_signal_id =
- g_signal_connect (text->model,
- "reposition",
- G_CALLBACK (e_text_text_model_reposition),
- text);
-
- text->anchor = GTK_ANCHOR_CENTER;
- text->justification = GTK_JUSTIFY_LEFT;
- text->clip_width = -1.0;
- text->clip_height = -1.0;
- text->xofs = 0.0;
- text->yofs = 0.0;
-
- text->ellipsis = NULL;
- text->use_ellipsis = FALSE;
- text->ellipsis_width = 0;
-
- text->editable = FALSE;
- text->editing = FALSE;
- text->xofs_edit = 0;
- text->yofs_edit = 0;
-
- text->selection_start = 0;
- text->selection_end = 0;
- text->select_by_word = FALSE;
-
- text->timeout_id = 0;
- text->timer = NULL;
-
- text->lastx = 0;
- text->lasty = 0;
- text->last_state = 0;
-
- text->scroll_start = 0;
- text->show_cursor = TRUE;
- text->button_down = FALSE;
-
- text->tep = NULL;
- text->tep_command_id = 0;
-
- text->has_selection = FALSE;
-
- text->pointer_in = FALSE;
- text->default_cursor_shown = TRUE;
- text->line_wrap = FALSE;
- text->break_characters = NULL;
- text->max_lines = -1;
- text->tooltip_timeout = 0;
- text->tooltip_count = 0;
- text->tooltip_owner = FALSE;
- text->dbl_timeout = 0;
- text->tpl_timeout = 0;
-
- text->draw_background = FALSE;
- text->draw_button = FALSE;
-
- text->bold = FALSE;
- text->strikeout = FALSE;
-
- text->allow_newlines = TRUE;
-
- text->last_type_request = -1;
- d(g_print ("Setting last_type_request to %d at line %d\n", text->last_type_request, __LINE__));
- text->last_time_request = 0;
- text->queued_requests = NULL;
-
- text->im_context = NULL;
- text->need_im_reset = FALSE;
- text->im_context_signals_registered = FALSE;
-
- text->handle_popup = FALSE;
-
-
- e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(text), e_text_reflow);
-}
-
-/**
- * e_text_get_type:
- * @void:
- *
- * Registers the &EText class if necessary, and returns the type ID
- * associated to it.
- *
- * Return value: The type ID of the &EText class.
- **/
-E_MAKE_TYPE (e_text,
- "EText",
- EText,
- e_text_class_init,
- e_text_init,
- PARENT_TYPE)
-
-
-
-/* IM Context Callbacks */
-static void
-e_text_commit_cb (GtkIMContext *context,
- const gchar *str,
- EText *text)
-{
- if (g_utf8_validate (str, strlen (str), NULL)) {
- if (text->selection_end != text->selection_start)
- e_text_delete_selection (text);
- e_text_insert (text, str);
- g_signal_emit (text, e_text_signals[E_TEXT_KEYPRESS], 0, 0, 0);
- }
-}
-
-static void
-e_text_preedit_changed_cb (GtkIMContext *context,
- EText *etext)
-{
- gchar *preedit_string = NULL;
-
- gtk_im_context_get_preedit_string (context, &preedit_string,
- NULL, NULL);
-
- etext->preedit_len = strlen (preedit_string);
-
- g_signal_emit (etext, e_text_signals[E_TEXT_KEYPRESS], 0, 0, 0);
-}
-
-static gboolean
-e_text_retrieve_surrounding_cb (GtkIMContext *context,
- EText *text)
-{
- gtk_im_context_set_surrounding (context,
- text->text,
- strlen (text->text),
- g_utf8_offset_to_pointer (text->text, text->selection_start) - text->text);
-
- return TRUE;
-}
-
-static gboolean
-e_text_delete_surrounding_cb (GtkIMContext *context,
- gint offset,
- gint n_chars,
- EText *text)
-{
- gtk_editable_delete_text (GTK_EDITABLE (text),
- text->selection_end + offset,
- text->selection_end + offset + n_chars);
-
- return TRUE;
-}
diff --git a/widgets/text/e-text.h b/widgets/text/e-text.h
deleted file mode 100644
index 4eb3fa830b..0000000000
--- a/widgets/text/e-text.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-text.h - Text item for evolution.
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- * Jon Trowbridge <trow@ximian.com>
- *
- * A majority of code taken from:
- *
- * Text item type for GnomeCanvas widget
- *
- * GnomeCanvas is basically a port of the Tk toolkit's most excellent
- * canvas widget. Tk is copyrighted by the Regents of the University
- * of California, Sun Microsystems, and other parties.
- *
- * Copyright (C) 1998 The Free Software Foundation
- *
- * Author: Federico Mena <federico@nuclecu.unam.mx>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef E_TEXT_H
-#define E_TEXT_H
-
-#include <gtk/gtkmenu.h>
-
-#include <gal/util/e-text-event-processor.h>
-#include <gal/e-text/e-text-model.h>
-#include <gal/widgets/e-canvas.h>
-
-G_BEGIN_DECLS
-
-
-/* Text item for the canvas. Text items are positioned by an anchor point and an anchor direction.
- *
- * A clipping rectangle may be specified for the text. The rectangle is anchored at the text's anchor
- * point, and is specified by clipping width and height parameters. If the clipping rectangle is
- * enabled, it will clip the text.
- *
- * In addition, x and y offset values may be specified. These specify an offset from the anchor
- * position. If used in conjunction with the clipping rectangle, these could be used to implement
- * simple scrolling of the text within the clipping rectangle.
- *
- * The following object arguments are available:
- *
- * name type read/write description
- * ------------------------------------------------------------------------------------------
- * text string RW The string of the text label
- * bold boolean RW Bold?
- * anchor GtkAnchorType RW Anchor side for the text
- * justification GtkJustification RW Justification for multiline text
- * fill_color string W X color specification for text
- * fill_color_gdk GdkColor* RW Pointer to an allocated GdkColor
- * fill_stipple GdkBitmap* RW Stipple pattern for filling the text
- * clip_width double RW Width of clip rectangle
- * clip_height double RW Height of clip rectangle
- * clip boolean RW Use clipping rectangle?
- * fill_clip_rect boolean RW Whether the text item represents itself as being the size of the clipping rectangle.
- * x_offset double RW Horizontal offset distance from anchor position
- * y_offset double RW Vertical offset distance from anchor position
- * text_width double R Used to query the width of the rendered text
- * text_height double R Used to query the rendered height of the text
- * width double RW A synonym for clip_width
- * height double R A synonym for text_height
- *
- * These are currently ignored in the AA version:
- * editable boolean RW Can this item be edited
- * use_ellipsis boolean RW Whether to use ellipsises if text gets cut off. Meaningless if clip == false.
- * ellipsis string RW The characters to use as ellipsis. NULL = "...".
- * line_wrap boolean RW Line wrap when not editing.
- * break_characters string RW List of characters to optionally break on.
- * max_lines int RW Number of lines possible when doing line wrap.
- * draw_borders boolean RW Whether to draw borders.
- * draw_background boolean RW Whether to draw the background.
- * draw_button boolean RW This makes EText handle being the child of a button properly and highlighting as it should.
- */
-
-#define E_TYPE_TEXT (e_text_get_type ())
-#define E_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_TEXT, EText))
-#define E_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_TEXT, ETextClass))
-#define E_IS_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_TEXT))
-#define E_IS_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_TEXT))
-
-
-typedef struct _EText EText;
-typedef struct _ETextClass ETextClass;
-
-struct _EText {
- GnomeCanvasItem item;
-
- ETextModel *model;
- gint model_changed_signal_id;
- gint model_repos_signal_id;
-
- const gchar *text; /* Text to display --- from the ETextModel */
- gint preedit_len; /* preedit length to display */
- PangoLayout *layout;
- int num_lines; /* Number of lines of text */
-
- gchar *revert; /* Text to revert to */
-
- GtkAnchorType anchor; /* Anchor side for text */
- GtkJustification justification; /* Justification for text */
-
- double clip_width; /* Width of optional clip rectangle */
- double clip_height; /* Height of optional clip rectangle */
-
- double xofs, yofs; /* Text offset distance from anchor position */
-
- GdkColor color; /* Fill color */
- GdkBitmap *stipple; /* Stipple for text */
- GdkGC *gc; /* GC for drawing text */
-
- int cx, cy; /* Top-left canvas coordinates for text */
- int text_cx, text_cy; /* Top-left canvas coordinates for text */
- int clip_cx, clip_cy; /* Top-left canvas coordinates for clip rectangle */
- int clip_cwidth, clip_cheight; /* Size of clip rectangle in pixels */
- int max_width; /* Maximum width of text lines */
- int width; /* Rendered text width in pixels */
- int height; /* Rendered text height in pixels */
-
- guint32 rgba; /* RGBA color for text */
- double affine[6]; /* The item -> canvas affine */
-
- char *ellipsis; /* The ellipsis characters. NULL = "...". */
- double ellipsis_width; /* The width of the ellipsis. */
-
- int xofs_edit; /* Offset because of editing */
- int yofs_edit; /* Offset because of editing */
-
- /* This needs to be reworked a bit once we get line wrapping. */
- int selection_start; /* Start of selection IN BYTES */
- int selection_end; /* End of selection IN BYTES */
- gboolean select_by_word; /* Current selection is by word */
-
- /* This section is for drag scrolling and blinking cursor. */
- gint timeout_id; /* Current timeout id for scrolling */
- GTimer *timer; /* Timer for blinking cursor and scrolling */
-
- gint lastx, lasty; /* Last x and y motion events */
- gint last_state; /* Last state */
- gulong scroll_start; /* Starting time for scroll (microseconds) */
-
- gint show_cursor; /* Is cursor currently shown */
- gboolean button_down; /* Is mouse button 1 down */
-
- ETextEventProcessor *tep; /* Text Event Processor */
- gint tep_command_id;
-
- gboolean has_selection; /* TRUE if we have the selection */
-
- guint clip : 1; /* Use clip rectangle? */
- guint fill_clip_rectangle : 1; /* Fill the clipping rectangle. */
-
- guint pointer_in : 1; /* Is the pointer currently over us? */
- guint default_cursor_shown : 1; /* Is the default cursor currently shown? */
- guint draw_borders : 1; /* Draw borders? */
- guint draw_background : 1; /* Draw background? */
- guint draw_button : 1; /* Draw button? */
-
- guint line_wrap : 1; /* Do line wrap */
-
- guint needs_redraw : 1; /* Needs redraw */
- guint needs_recalc_bounds : 1; /* Need recalc_bounds */
- guint needs_calc_height : 1; /* Need calc_height */
- guint needs_split_into_lines : 1; /* Needs split_into_lines */
- guint needs_reset_layout : 1; /* Needs split_into_lines */
-
- guint bold : 1;
- guint strikeout : 1;
-
- guint tooltip_owner : 1;
- guint allow_newlines : 1;
-
- guint use_ellipsis : 1; /* Whether to use the ellipsis. */
-
- guint editable : 1; /* Item is editable */
- guint editing : 1; /* Item is currently being edited */
-
- gchar *break_characters; /* Characters to optionally break after */
-
- gint max_lines; /* Max number of lines (-1 = infinite) */
-
- GdkCursor *default_cursor; /* Default cursor (arrow) */
- GdkCursor *i_cursor; /* I beam cursor */
-
- gint tooltip_timeout; /* Timeout for the tooltip */
- gint tooltip_count; /* GDK_ENTER_NOTIFY count. */
-
- gint dbl_timeout; /* Double click timeout */
- gint tpl_timeout; /* Triple click timeout */
-
- gint last_type_request; /* Last selection type requested. */
- guint32 last_time_request; /* The time of the last selection request. */
- GdkAtom last_selection_request; /* The time of the last selection request. */
- GList *queued_requests; /* Queued selection requests. */
-
- GtkIMContext *im_context;
- gboolean need_im_reset;
- gboolean im_context_signals_registered;
-
- gboolean handle_popup;
-};
-
-struct _ETextClass {
- GnomeCanvasItemClass parent_class;
-
- void (* changed) (EText *text);
- void (* activate) (EText *text);
- void (* keypress) (EText *text, guint keyval, guint state);
- void (* populate_popup) (EText *text, GdkEventButton *ev, gint pos, GtkMenu *menu);
- void (* style_set) (EText *text, GtkStyle *previous_style);
-};
-
-
-/* Standard Gtk function */
-GtkType e_text_get_type (void);
-void e_text_cancel_editing (EText *text);
-void e_text_stop_editing (EText *text);
-
-void e_text_delete_selection (EText *text);
-void e_text_cut_clipboard (EText *text);
-void e_text_copy_clipboard (EText *text);
-void e_text_paste_clipboard (EText *text);
-void e_text_select_all (EText *text);
-
-G_END_DECLS
-
-#endif