aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobody <nobody@localhost>2005-03-08 13:56:20 +0800
committernobody <nobody@localhost>2005-03-08 13:56:20 +0800
commite78770317cc3dbf975e1412b1e7b18c017ad5598 (patch)
tree065d5b78f7fe4a3aa05be7ab6747260702e135b9
parente2a45d8e0e1b2f644a5365e18dad0949e0bbc9a1 (diff)
downloadgsoc2013-evolution-e78770317cc3dbf975e1412b1e7b18c017ad5598.tar
gsoc2013-evolution-e78770317cc3dbf975e1412b1e7b18c017ad5598.tar.gz
gsoc2013-evolution-e78770317cc3dbf975e1412b1e7b18c017ad5598.tar.bz2
gsoc2013-evolution-e78770317cc3dbf975e1412b1e7b18c017ad5598.tar.lz
gsoc2013-evolution-e78770317cc3dbf975e1412b1e7b18c017ad5598.tar.xz
gsoc2013-evolution-e78770317cc3dbf975e1412b1e7b18c017ad5598.tar.zst
gsoc2013-evolution-e78770317cc3dbf975e1412b1e7b18c017ad5598.zip
This commit was manufactured by cvs2svn to create tagEVOLUTION_2_2_0
'EVOLUTION_2_2_0'. svn path=/tags/EVOLUTION_2_2_0/; revision=28978
-rw-r--r--ChangeLog4
-rw-r--r--NEWS28
-rw-r--r--a11y/e-table/.cvsignore4
-rw-r--r--a11y/e-table/gal-a11y-e-cell-popup.c145
-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.c721
-rw-r--r--a11y/e-table/gal-a11y-e-cell-text.h50
-rw-r--r--a11y/e-table/gal-a11y-e-cell-toggle.c169
-rw-r--r--a11y/e-table/gal-a11y-e-cell-toggle.h47
-rw-r--r--a11y/e-table/gal-a11y-e-cell-tree.c210
-rw-r--r--a11y/e-table/gal-a11y-e-cell-tree.h50
-rw-r--r--a11y/e-table/gal-a11y-e-cell-vbox.c214
-rw-r--r--a11y/e-table/gal-a11y-e-cell-vbox.h64
-rw-r--r--a11y/e-table/gal-a11y-e-cell.c628
-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.c327
-rw-r--r--a11y/e-table/gal-a11y-e-table-click-to-add.h36
-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.c1310
-rw-r--r--a11y/e-table/gal-a11y-e-table-item.h44
-rw-r--r--a11y/e-table/gal-a11y-e-table.c293
-rw-r--r--a11y/e-table/gal-a11y-e-table.h45
-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.c176
-rw-r--r--a11y/e-table/gal-a11y-e-tree.h43
-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.c1133
-rw-r--r--a11y/e-text/gal-a11y-e-text.h42
-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--calendar/ChangeLog4
-rw-r--r--calendar/calendar-errors.xml.h2
-rw-r--r--calendar/gui/alarm-notify/alarm-queue.c2
-rw-r--r--calendar/gui/calendar-component.c2
-rw-r--r--configure.in8
-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/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.list52
-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
-rw-r--r--help/C/evolution.xml3717
-rw-r--r--help/ChangeLog4
-rw-r--r--help/devel/executive-summary/evolution-services.hierarchy7
-rw-r--r--help/devel/importer/evolution-shell-importer.hierarchy7
-rw-r--r--plugins/exchange-account-setup/ChangeLog7
-rw-r--r--plugins/exchange-account-setup/org-gnome-exchange-account-setup.eplug.in11
-rw-r--r--po/ChangeLog35
-rw-r--r--po/bg.po321
-rw-r--r--po/hu.po30
-rw-r--r--po/ja.po943
-rw-r--r--po/lt.po928
-rw-r--r--po/nl.po2442
-rw-r--r--po/sq.po8983
-rw-r--r--po/sr.po9
-rw-r--r--po/sr@Latn.po9
-rw-r--r--po/vi.po265
-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/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.c1509
-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.c703
-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.c2854
-rw-r--r--widgets/table/e-cell-text.h129
-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.c486
-rw-r--r--widgets/table/e-cell-vbox.h72
-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.c601
-rw-r--r--widgets/table/e-table-click-to-add.h78
-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.glade2114
-rw-r--r--widgets/table/e-table-config.c1225
-rw-r--r--widgets/table/e-table-config.glade2183
-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.c1503
-rw-r--r--widgets/table/e-table-group-container.h108
-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.c1910
-rw-r--r--widgets/table/e-table-header-item.h119
-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.c3735
-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.c3349
-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.c3324
-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.c3867
-rw-r--r--widgets/text/e-text.h244
330 files changed, 8917 insertions, 102743 deletions
diff --git a/ChangeLog b/ChangeLog
index 9bbcf5c99b..381e930b62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-03-07 JP Rosevear <jpr@novell.com>
+
+ * configure.in: bump version, requires
+
2005-02-28 JP Rosevear <jpr@novell.com>
* configure.in: bump version, requires
diff --git a/NEWS b/NEWS
index a3866bbdbb..7b5d4b2d0e 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,31 @@
+Evolution 2.2.0, 2005-03-07
+---------------------------
+
+Bugzilla bugs fixed (see http://bugzilla.ximian.com/show_bug.cgi):
+
+ * Addressbook
+ #73152 - Assigning Color To Default Personal Contacts, Creates Duplicate (Siva)
+
+ * Calendar
+ #72835 - Alarm notify crashes always (Rodrigo)
+ #73152 - Assigning Color To Default Personal Calendar, Creates Duplicate (Siva)
+
+Other bugs
+
+ * Plugins
+ - Fix exchange plugin description for OOF (Sushma)
+
+Updated translations:
+ - pt_BR (Raphael Higino)
+ - hu (Laszlo Dvornik)
+ - sr (Danilo Segan, Igor Nestorovic)
+ - sr@Latn (Danilo Segan, Igor Nestorovic)
+ - nl (Tino Meinen)
+ - lt (Zygimantas Berucka)
+ - sq (Gintautas Miliauskas, Laurent Dhima)
+ - ja (Takeshi AIHANA)
+ - bg (Iassen Pramataro)
+
Evolution 2.1.6, 2005-02-28
---------------------------
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 15cae2effb..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-popup.c
+++ /dev/null
@@ -1,145 +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>
-#include <glib/gi18n.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 89c1b3a813..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-text.c
+++ /dev/null
@@ -1,721 +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>
-#include <atk/atkstateset.h>
-#include <glib/gi18n.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 void
-ect_dispose (GObject *object)
-{
- GObjectClass *g_class;
- GalA11yECell *gaec = GAL_A11Y_E_CELL (object);
- GalA11yECellText *gaet = GAL_A11Y_E_CELL_TEXT (object);
-
- if (gaet->inserted_id != 0) {
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
-
- if (ect) {
- g_signal_handler_disconnect (ect, gaet->inserted_id);
- g_signal_handler_disconnect (ect, gaet->deleted_id);
- }
-
- gaet->inserted_id = 0;
- gaet->deleted_id = 0;
- }
-
- g_class = (GObjectClass *)parent_class;
- if (g_class->dispose)
- g_class->dispose (object);
-
-}
-
-static gboolean
-ect_check (gpointer a11y)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
- ETableItem *item = gaec->item;
-
- g_return_val_if_fail ((gaec->item != NULL), FALSE);
- g_return_val_if_fail ((gaec->cell_view != NULL), FALSE);
- g_return_val_if_fail ((gaec->cell_view->ecell != NULL), FALSE);
-
- if (atk_state_set_contains_state (gaec->state_set, ATK_STATE_DEFUNCT))
- return FALSE;
-
- if (gaec->row < 0 || gaec->row >= item->rows
- || gaec->view_col <0 || gaec->view_col >= item->cols
- || gaec->model_col <0 || gaec->model_col >= e_table_model_column_count (item->table_model))
- return FALSE;
-
- if (!E_IS_CELL_TEXT (gaec->cell_view->ecell))
- return FALSE;
-
- return TRUE;
-}
-
-static G_CONST_RETURN gchar*
-ect_get_name (AtkObject * a11y)
-{
- GalA11yECell *gaec;
- char *name;
-
- if (!ect_check (a11y))
- return NULL;
-
- gaec = GAL_A11Y_E_CELL (a11y);
- name = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
- if (name != NULL) {
- ATK_OBJECT_CLASS (parent_class)->set_name (a11y, name);
- g_free (name);
- }
-
- if (a11y->name != NULL && strcmp (a11y->name, "")) {
- return a11y->name;
- } else {
- return parent_class->get_name (a11y);
- }
-}
-
-static gchar *
-ect_get_text (AtkText *text,
- gint start_offset,
- gint end_offset)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
- gchar *full_text;
- gchar *ret_val;
-
- if (!ect_check (text))
- return NULL;
-
- full_text = e_cell_text_get_text_by_view (gaec->cell_view, 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);
-
- g_free (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);
- gunichar ret_val;
- gchar *at_offset;
-
- if (!ect_check (text))
- return -1;
-
- gchar *full_text = e_cell_text_get_text_by_view (gaec->cell_view, 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);
- g_free (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);
- gint start, end;
-
- if (!ect_check (text))
- return -1;
-
- if (e_cell_text_get_selection (gaec->cell_view,
- gaec->view_col, gaec->row,
- &start, &end)) {
- gchar *full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
- end = g_utf8_pointer_to_offset (full_text, full_text + end);
- g_free (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);
- gint ret_val;
-
- if (!ect_check (text))
- return -1;
-
- gchar *full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
-
- ret_val = g_utf8_strlen (full_text, -1);
- g_free (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 (!ect_check (text))
- return 0;
-
- 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);
- 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_by_view (gaec->cell_view, 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;
- g_free (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);
-
- if (start_offset != end_offset) {
- gint real_start, real_end, len;
- gchar *full_text =
- e_cell_text_get_text_by_view (gaec->cell_view, 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;
- g_free (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);
- gchar *full_text;
- gint len;
-
- full_text = e_cell_text_get_text_by_view (gaec->cell_view, 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;
-
- g_free (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_by_view (gaec->cell_view, 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);
- g_free (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);
- ETableModel *e_table_model = a11y->item->table_model;
-
- if (e_table_model_is_cell_editable(e_table_model, a11y->model_col, a11y->row)) {
- e_table_item_enter_edit (a11y->item, a11y->view_col, a11y->row);
- }
-}
-
-/* text signal handlers */
-static void
-ect_text_inserted_cb (ECellText *text, ECellView *cell_view, int pos, int len, int row, int model_col, gpointer data)
-{
- GalA11yECellText *gaet;
- GalA11yECell *gaec;
-
- if (!ect_check (data))
- return;
- gaet = GAL_A11Y_E_CELL_TEXT (data);
- gaec = GAL_A11Y_E_CELL (data);
-
- if (cell_view == gaec->cell_view && row == gaec->row && model_col == gaec->model_col) {
- g_signal_emit_by_name (gaet, "text_changed::insert", pos, len);
-
- }
-}
-
-static void
-ect_text_deleted_cb (ECellText *text, ECellView *cell_view, int pos, int len, int row, int model_col, gpointer data)
-{
- GalA11yECellText *gaet;
- GalA11yECell *gaec;
- if (!ect_check (data))
- return;
- gaet = GAL_A11Y_E_CELL_TEXT (data);
- gaec = GAL_A11Y_E_CELL (data);
- if (cell_view == gaec->cell_view && row == gaec->row && model_col == gaec->model_col) {
- g_signal_emit_by_name (gaet, "text_changed::delete", pos, len);
- }
-}
-
-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);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
- a11y->get_name = ect_get_name;
- object_class->dispose = ect_dispose;
-}
-
-static void
-ect_action_init (GalA11yECellText *a11y)
-{
- GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
- ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
- if (ect->editable && e_table_model_is_cell_editable (gaec->cell_view->e_table_model, gaec->model_col, gaec->row))
- gal_a11y_e_cell_add_action (gaec,
- _("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) NULL,
- 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;
-}
-
-static void
-cell_text_destroyed (gpointer data)
-{
- g_return_if_fail (GAL_A11Y_IS_E_CELL_TEXT (data));
-
- g_object_unref (data);
-}
-
-AtkObject *
-gal_a11y_e_cell_text_new (ETableItem *item,
- ECellView *cell_view,
- AtkObject *parent,
- int model_col,
- int view_col,
- int row)
-{
- AtkObject *a11y;
- GalA11yECell *gaec;
- GalA11yECellText *gaet;
- ECellText *ect;
-
- 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);
- gaet = GAL_A11Y_E_CELL_TEXT (a11y);
-
- /* will be unrefed in cell_text_destroyed */
- g_object_ref (a11y);
-
- gaet->inserted_id = g_signal_connect (E_CELL_TEXT (((ECellView *)cell_view)->ecell),
- "text_inserted", G_CALLBACK (ect_text_inserted_cb), a11y);
- gaet->deleted_id = g_signal_connect (E_CELL_TEXT (((ECellView *)cell_view)->ecell),
- "text_deleted", G_CALLBACK (ect_text_deleted_cb), a11y);
-
- g_object_weak_ref (G_OBJECT (((ECellView *)cell_view)->ecell),
- (GWeakNotify) cell_text_destroyed,
- a11y);
-
- ect_action_init (gaet);
-
- ect = E_CELL_TEXT (cell_view->ecell);
- gaec = GAL_A11Y_E_CELL (a11y);
- if (ect->editable && e_table_model_is_cell_editable (gaec->cell_view->e_table_model, gaec->model_col, gaec->row))
- gal_a11y_e_cell_add_state (gaec, ATK_STATE_EDITABLE, FALSE);
- else
- gal_a11y_e_cell_remove_state (gaec, ATK_STATE_EDITABLE, FALSE);
-
- 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 50056476c3..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-text.h
+++ /dev/null
@@ -1,50 +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;
- gint inserted_id;
- gint deleted_id;
-};
-
-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 21f4955d1d..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-toggle.c
+++ /dev/null
@@ -1,169 +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>
-#include <atk/atkcomponent.h>
-#include <glib/gi18n.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 && a11y->model_id > 0) {
- g_signal_handler_disconnect (e_table_model, a11y->model_id);
- a11y->model_id = 0;
- }
-
- 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 col,
- gint row,
- 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));
- /* Cheat gnopernicus, or it will ignore the state change signal */
- atk_focus_tracker_notify (ATK_OBJECT (cell));
-
- 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 126bbcfbe5..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-tree.c
+++ /dev/null
@@ -1,210 +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"
-#include <glib/gi18n.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-vbox.c b/a11y/e-table/gal-a11y-e-cell-vbox.c
deleted file mode 100644
index 4f2c156da8..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-vbox.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* Evolution Accessibility: gal-a11y-e-cell-vbox.c
- *
- * Copyright (C) 2004 Sun Microsystem, 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: Eric Zhao <eric.zhao@sun.com> Sun Microsystem Inc., 2004
- *
- */
-#include "gal-a11y-e-cell-vbox.h"
-#include "gal-a11y-e-cell-registry.h"
-#include <gal/e-table/e-cell-vbox.h>
-#include <atk/atkcomponent.h>
-
-static GObjectClass *parent_class;
-static AtkComponentIface *component_parent_iface;
-#define PARENT_TYPE (gal_a11y_e_cell_get_type ())
-
-static gint
-ecv_get_n_children (AtkObject *a11y)
-{
- g_return_val_if_fail (GAL_A11Y_IS_E_CELL_VBOX (a11y), 0);
- GalA11yECellVbox *gaev = GAL_A11Y_E_CELL_VBOX (a11y);
- return (gaev->a11y_subcell_count);
-}
-
-static void
-subcell_destroyed (gpointer data)
-{
- GalA11yECell *cell;
- AtkObject *parent;
- GalA11yECellVbox *gaev;
-
- g_return_if_fail (GAL_A11Y_IS_E_CELL (data));
- cell = GAL_A11Y_E_CELL (data);
-
- parent = atk_object_get_parent (ATK_OBJECT (cell));
- g_return_if_fail (GAL_A11Y_IS_E_CELL_VBOX (parent));
- gaev = GAL_A11Y_E_CELL_VBOX (parent);
-
- if (cell->view_col < gaev->a11y_subcell_count)
- gaev->a11y_subcells[cell->view_col] = NULL;
-}
-
-static AtkObject*
-ecv_ref_child (AtkObject *a11y, gint i)
-{
- GalA11yECellVbox *gaev = GAL_A11Y_E_CELL_VBOX (a11y);
- GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
- ECellVboxView *ecvv = (ECellVboxView *) (gaec->cell_view);
- AtkObject *ret;
- if (i < gaev->a11y_subcell_count) {
- if (gaev->a11y_subcells[i] == NULL) {
- gint model_col, row;
- row = gaec->row;
- model_col = ecvv->model_cols[i];
- ECellView *subcell_view = ecvv->subcell_views[i];
- ret = gal_a11y_e_cell_registry_get_object (NULL,
- gaec->item,
- subcell_view,
- a11y,
- model_col,
- gaec->view_col, /* FIXME should the view column use a fake one or the same as its parent? */
- row);
- gaev->a11y_subcells[i] = ret;
- g_object_ref (ret);
- g_object_weak_ref (G_OBJECT (ret),
- (GWeakNotify) subcell_destroyed,
- ret);
- } else {
- ret = (AtkObject *) gaev->a11y_subcells[i];
- if (ATK_IS_OBJECT (ret))
- g_object_ref (ret);
- else
- ret = NULL;
- }
- } else {
- ret = NULL;
- }
-
- return ret;
-}
-
-static void
-ecv_dispose (GObject *object)
-{
- GalA11yECellVbox *gaev = GAL_A11Y_E_CELL_VBOX (object);
- if (gaev->a11y_subcells)
- g_free (gaev->a11y_subcells);
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
-
-/* AtkComponet interface */
-static AtkObject*
-ecv_ref_accessible_at_point (AtkComponent *component,
- gint x,
- gint y,
- AtkCoordType coord_type)
-{
- gint x0, y0, width, height;
- int subcell_height, i;
-
- GalA11yECell *gaec = GAL_A11Y_E_CELL (component);
- ECellVboxView *ecvv = (ECellVboxView *) (gaec->cell_view);
-
- atk_component_get_extents (component, &x0, &y0, &width, &height, coord_type);
- x -= x0;
- y -= y0;
- if (x < 0 || x > width || y < 0 || y > height)
- return NULL;
-
- for (i = 0; i < ecvv->subcell_view_count; i++) {
- subcell_height = e_cell_height (ecvv->subcell_views[i], ecvv->model_cols[i], gaec->view_col, gaec->row);
- if ( 0 <= y && y <= subcell_height) {
- return ecv_ref_child ((AtkObject *)component, i);
- } else
- y -= subcell_height;
- }
-
- return NULL;
-}
-
-static void
-ecv_class_init (GalA11yECellVboxClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- AtkObjectClass *a11y_class = ATK_OBJECT_CLASS (klass);
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->dispose = ecv_dispose;
-
- a11y_class->get_n_children = ecv_get_n_children;
- a11y_class->ref_child = ecv_ref_child;
-}
-
-static void
-ecv_init (GalA11yECellVbox *a11y)
-{
-}
-
-static void
-ecv_atk_component_iface_init (AtkComponentIface *iface)
-{
- component_parent_iface = g_type_interface_peek_parent (iface);
-
- iface->ref_accessible_at_point = ecv_ref_accessible_at_point;
-}
-
-GType
-gal_a11y_e_cell_vbox_get_type (void)
-{
- static GType type = 0;
- if (!type) {
- GTypeInfo info = {
- sizeof (GalA11yECellVboxClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) ecv_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yECellVbox),
- 0,
- (GInstanceInitFunc) ecv_init,
- NULL /* value_cell */
- };
-
- static const GInterfaceInfo atk_component_info = {
- (GInterfaceInitFunc) ecv_atk_component_iface_init,
- (GInterfaceFinalizeFunc) NULL,
- NULL
- };
-
- type = g_type_register_static (PARENT_TYPE, "GalA11yECellVbox", &info, 0);
- gal_a11y_e_cell_type_add_action_interface (type);
- g_type_add_interface_static (type, ATK_TYPE_COMPONENT, &atk_component_info);
- }
-
- return type;
-}
-
-AtkObject *gal_a11y_e_cell_vbox_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_vbox_get_type (), NULL);
-
- gal_a11y_e_cell_construct (a11y, item, cell_view, parent, model_col, view_col, row);
-
- GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
- GalA11yECellVbox *gaev = GAL_A11Y_E_CELL_VBOX (a11y);
- ECellVboxView *ecvv = (ECellVboxView *) (gaec->cell_view);
- gaev->a11y_subcell_count = ecvv->subcell_view_count;
- gaev->a11y_subcells = g_malloc0 (sizeof(AtkObject *)*gaev->a11y_subcell_count);
- return a11y;
-}
diff --git a/a11y/e-table/gal-a11y-e-cell-vbox.h b/a11y/e-table/gal-a11y-e-cell-vbox.h
deleted file mode 100644
index ea0c9d8dc9..0000000000
--- a/a11y/e-table/gal-a11y-e-cell-vbox.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Evolution Accessibility: gal-a11y-e-cell-vbox.h
- *
- * Copyright (C) 2004 Sun Microsystem, 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: Eric Zhao <eric.zhao@sun.com> Sun Microsystem Inc., 2004
- *
- */
-#ifndef __GAL_A11Y_E_CELL_VBOX_H__
-#define __GAL_A11Y_E_CELL_VBOX_H__
-
-#include "gal-a11y-e-cell.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define GAL_A11Y_TYPE_E_CELL_VBOX (gal_a11y_e_cell_vbox_get_type ())
-#define GAL_A11Y_E_CELL_VBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL_VBOX, GalA11yECellVbox))
-#define GAL_A11Y_E_CELL_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_E_CELL_VBOX, GalA11yECellVboxClass))
-#define GAL_A11Y_IS_E_CELL_VBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL_VBOX))
-#define GAL_A11Y_IS_E_CELL_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL_VBOX))
-#define GAL_A11Y_E_CELL_VBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAL_A11Y_TYPE_E_CELL_VBOX, GalA11yECellVboxClass))
-
-typedef struct _GalA11yECellVbox GalA11yECellVbox;
-typedef struct _GalA11yECellVboxClass GalA11yECellVboxClass;
-
-struct _GalA11yECellVbox
-{
- GalA11yECell object;
- int a11y_subcell_count;
- gpointer *a11y_subcells;
-};
-
-struct _GalA11yECellVboxClass
-{
- GalA11yECellClass parent_class;
-};
-
-GType gal_a11y_e_cell_vbox_get_type (void);
-AtkObject *gal_a11y_e_cell_vbox_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_VBOX_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 8718713a44..0000000000
--- a/a11y/e-table/gal-a11y-e-cell.c
+++ /dev/null
@@ -1,628 +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/e-table/e-table.h"
-#include "gal/e-table/e-tree.h"
-#include "gal-a11y-e-table-item.h"
-#include "gal-a11y-e-cell.h"
-#include "gal-a11y-e-cell-vbox.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>
-#include <glib/gi18n.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 gboolean
-is_valid (AtkObject *cell)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (cell);
- GalA11yETableItem *a11yItem = GAL_A11Y_E_TABLE_ITEM (a11y->parent);
- AtkStateSet *item_ss;
- gboolean ret = TRUE;
-
- item_ss = atk_object_ref_state_set (ATK_OBJECT (a11yItem));
- if (atk_state_set_contains_state (item_ss, ATK_STATE_DEFUNCT))
- ret = FALSE;
-
- g_object_unref (item_ss);
-
- if (ret && atk_state_set_contains_state (a11y->state_set, ATK_STATE_DEFUNCT))
- ret = FALSE;
-
- return ret;
-}
-
-static void
-gal_a11y_e_cell_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);
- a11y->state_set = NULL;
- }
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-
-}
-
-/* Static functions */
-static G_CONST_RETURN gchar*
-gal_a11y_e_cell_get_name (AtkObject * a11y)
-{
- GalA11yECell *cell = GAL_A11Y_E_CELL (a11y);
- ETableCol *ecol;
-
- if (a11y->name != NULL && strcmp (a11y->name, ""))
- return a11y->name;
-
- if (cell->item != NULL) {
- ecol = e_table_header_get_column (cell->item->header, cell->view_col);
- if (ecol != NULL)
- return ecol->text;
- }
-
- return _("Table Cell");
-}
-
-static AtkStateSet *
-gal_a11y_e_cell_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*
-gal_a11y_e_cell_get_parent (AtkObject *accessible)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (accessible);
- return a11y->parent;
-}
-
-static gint
-gal_a11y_e_cell_get_index_in_parent (AtkObject *accessible)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (accessible);
-
- if (!is_valid (accessible))
- return -1;
-
- return a11y->row * a11y->item->cols + a11y->view_col;
-}
-
-
-/* Component IFace */
-static void
-gal_a11y_e_cell_get_extents (AtkComponent *component,
- gint *x,
- gint *y,
- gint *width,
- gint *height,
- AtkCoordType coord_type)
-{
- GalA11yECell *a11y = GAL_A11Y_E_CELL (component);
- GtkWidget *tableOrTree;
- int row;
- int col;
- int xval;
- int yval;
-
- row = a11y->row;
- col = a11y->view_col;
-
- tableOrTree = gtk_widget_get_parent (GTK_WIDGET (a11y->item->parent.canvas));
- if (E_IS_TREE (tableOrTree)) {
- e_tree_get_cell_geometry (E_TREE (tableOrTree),
- row, col, &xval, &yval,
- width, height);
- } else {
- e_table_get_cell_geometry (E_TABLE (tableOrTree),
- 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
-gal_a11y_e_cell_grab_focus (AtkComponent *component)
-{
- GalA11yECell *a11y;
- gint index;
- GtkWidget *toplevel;
- GalA11yETableItem *a11yTableItem;
-
- a11y = GAL_A11Y_E_CELL (component);
-
- /* for e_cell_vbox's children, we just grab the e_cell_vbox */
- if (GAL_A11Y_IS_E_CELL_VBOX (a11y->parent)) {
- return atk_component_grab_focus (ATK_COMPONENT (a11y->parent));
- }
-
- a11yTableItem = GAL_A11Y_E_TABLE_ITEM (a11y->parent);
- index = atk_object_get_index_in_parent (ATK_OBJECT (a11y));
-
- atk_selection_clear_selection (ATK_SELECTION (a11yTableItem));
- atk_selection_add_selection (ATK_SELECTION (a11yTableItem), index);
-
- gtk_widget_grab_focus (GTK_WIDGET (GNOME_CANVAS_ITEM (a11y->item)->canvas));
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (GNOME_CANVAS_ITEM (a11y->item)->canvas));
- if (toplevel && GTK_WIDGET_TOPLEVEL (toplevel))
- gtk_window_present (GTK_WINDOW (toplevel));
-
- return TRUE;
-}
-
-/* Table IFace */
-
-static void
-gal_a11y_e_cell_atk_component_iface_init (AtkComponentIface *iface)
-{
- iface->get_extents = gal_a11y_e_cell_get_extents;
- iface->grab_focus = gal_a11y_e_cell_grab_focus;
-}
-
-static void
-gal_a11y_e_cell_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 = gal_a11y_e_cell_dispose;
-
- atk_object_class->get_parent = gal_a11y_e_cell_get_parent;
- atk_object_class->get_index_in_parent = gal_a11y_e_cell_get_index_in_parent;
- atk_object_class->ref_state_set = gal_a11y_e_cell_ref_state_set;
- atk_object_class->get_name = gal_a11y_e_cell_get_name;
-}
-
-static void
-gal_a11y_e_cell_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);
- atk_state_set_add_state (a11y->state_set, ATK_STATE_SENSITIVE);
- atk_state_set_add_state (a11y->state_set, ATK_STATE_SELECTABLE);
- atk_state_set_add_state (a11y->state_set, ATK_STATE_SHOWING);
- atk_state_set_add_state (a11y->state_set, ATK_STATE_FOCUSABLE);
- atk_state_set_add_state (a11y->state_set, ATK_STATE_VISIBLE);
-}
-
-
-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);
-
- if (!is_valid (ATK_OBJECT (cell)))
- return FALSE;
-
- 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 (!is_valid (ATK_OBJECT (action)))
- return FALSE;
-
- 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) gal_a11y_e_cell_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (GalA11yECell),
- 0,
- (GInstanceInitFunc) gal_a11y_e_cell_init,
- NULL /* value_cell */
- };
-
- static const GInterfaceInfo atk_component_info = {
- (GInterfaceInitFunc) gal_a11y_e_cell_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 (item)
- g_object_ref (G_OBJECT (item));
-
-#if 0
- if (parent)
- g_object_ref (parent);
-
- if (cell_view)
- g_object_ref (G_OBJECT (cell_view));
-
-
-#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 da4933e647..0000000000
--- a/a11y/e-table/gal-a11y-e-table-click-to-add.c
+++ /dev/null
@@ -1,327 +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-a11y-e-table-click-to-add-factory.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>
-#include <glib/gi18n.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)
-{
- ETableClickToAdd * etcta;
-
- g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD (obj), NULL);
-
- etcta = E_TABLE_CLICK_TO_ADD (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE(obj)));
- if (etcta && etcta->message != NULL)
- return etcta->message;
-
- 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 AtkStateSet *
-etcta_ref_state_set (AtkObject *accessible)
-{
- AtkStateSet * state_set = NULL;
-
- state_set = ATK_OBJECT_CLASS (parent_class)->ref_state_set (accessible);
- if (state_set != NULL) {
- atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE);
- atk_state_set_add_state (state_set, ATK_STATE_SHOWING);
- }
-
- return state_set;
-}
-
-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;
- atk_object_class->ref_state_set = etcta_ref_state_set;
-}
-
-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;
-}
-
-static void
-etcta_selection_cursor_changed (ESelectionModel *esm, gint row, gint col,
- GalA11yETableClickToAdd *a11y)
-{
- ETableClickToAdd *etcta;
- AtkObject *row_a11y;
-
- etcta = E_TABLE_CLICK_TO_ADD (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE(a11y)));
-
- if (etcta == NULL || etcta->row == NULL)
- return;
-
- row_a11y = atk_gobject_accessible_for_object (G_OBJECT(etcta->row));
- if (row_a11y) {
- AtkObject *cell_a11y = g_object_get_data (G_OBJECT(row_a11y), "gail-focus-object");
- if (cell_a11y) {
- atk_focus_tracker_notify (cell_a11y);
- }
- }
-}
-
-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);
-
- g_signal_connect (etcta->selection, "cursor_changed",
- G_CALLBACK (etcta_selection_cursor_changed), a11y);
-
- return ATK_OBJECT (a11y);
-}
-
-void
-gal_a11y_e_table_click_to_add_init (void)
-{
- if (atk_get_root ())
- 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 ());
-
-}
-
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 ea31ff6ef6..0000000000
--- a/a11y/e-table/gal-a11y-e-table-click-to-add.h
+++ /dev/null
@@ -1,36 +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);
-
-void gal_a11y_e_table_click_to_add_init (void);
-#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 3c8e60a4bb..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 (E_TABLE_ITEM (obj));
-
- 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 2b45bfeef7..0000000000
--- a/a11y/e-table/gal-a11y-e-table-item.c
+++ /dev/null
@@ -1,1310 +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-table-item-factory.h"
-#include "gal-a11y-e-table-click-to-add.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/widgets/e-selection-model.h>
-#include <gal/widgets/e-canvas.h>
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-table-click-to-add.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 {
- gint cols;
- gint rows;
- int selection_change_id;
- int cursor_change_id;
- ETableCol ** columns;
- ESelectionModel *selection;
- AtkStateSet *state_set;
- 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 AtkObject* eti_ref_at (AtkTable *table, gint row, gint column);
-
-static void
-item_destroyed (GtkObject *item, gpointer user_data)
-{
- GalA11yETableItem *a11y = GAL_A11Y_E_TABLE_ITEM (user_data);
- GalA11yETableItemPrivate *priv = GET_PRIVATE (a11y);
-
- atk_state_set_add_state (priv->state_set, ATK_STATE_DEFUNCT);
- atk_object_notify_state_change (ATK_OBJECT (a11y), ATK_STATE_DEFUNCT, TRUE);
-
- if (priv->selection)
- gal_a11y_e_table_item_unref_selection (a11y);
-
-}
-
-static AtkStateSet *
-eti_ref_state_set (AtkObject *accessible)
-{
- GalA11yETableItemPrivate *priv = GET_PRIVATE (accessible);
-
- g_object_ref(priv->state_set);
-
- return priv->state_set;
-}
-
-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);
-
- if (priv->columns) {
- g_free(priv->columns);
- priv->columns = NULL;
- }
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
-
-/* Static functions */
-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;
-
- /* don't support column header now */
-
- col = index % item->cols;
- row = index / item->cols;
-
- return eti_ref_at (ATK_TABLE (accessible), row, col);
-}
-
-static void
-eti_get_extents (AtkComponent *component,
- gint *x,
- gint *y,
- gint *width,
- gint *height,
- AtkCoordType coord_type)
-{
- ETableItem *item;
- AtkObject *parent;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (component)));
- if (!item)
- return;
-
- parent = ATK_OBJECT (component)->accessible_parent;
- if (parent && ATK_IS_COMPONENT (parent))
- atk_component_get_extents (ATK_COMPONENT (parent), x, y,
- width, height,
- coord_type);
-
- if (parent && GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD (parent)) {
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (parent)));
- if (etcta) {
- *width = etcta->width;
- *height = etcta->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;
- GtkWidget *tableOrTree;
-
- 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;
-
- tableOrTree = gtk_widget_get_parent (GTK_WIDGET (item->parent.canvas));
-
- if (E_IS_TREE(tableOrTree))
- e_tree_get_cell_at (E_TREE (tableOrTree), x, y, &row, &col);
- else
- e_table_get_cell_at (E_TABLE (tableOrTree), x, y, &row, &col);
-
- if (row != -1 && col != -1) {
- return eti_ref_at (ATK_TABLE (component), row, col);
- } else {
- return NULL;
- }
-}
-
-
-static void
-cell_destroyed (gpointer data)
-{
- GalA11yECell * cell;
-
- g_return_if_fail (GAL_A11Y_IS_E_CELL (data));
- cell = GAL_A11Y_E_CELL (data);
-
- g_return_if_fail (cell->item && G_IS_OBJECT (cell->item));
-
- if (cell->item) {
- g_object_unref (cell->item);
- cell->item = NULL;
- }
-
-}
-
-/* atk table */
-static AtkObject*
-eti_ref_at (AtkTable *table, gint row, gint column)
-{
- ETableItem *item;
- AtkObject* ret;
- GalA11yETableItemPrivate *priv = GET_PRIVATE (table);
-
- if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT))
- return NULL;
-
-
- 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);
- ret = gal_a11y_e_cell_registry_get_object (NULL,
- item,
- cell_view,
- ATK_OBJECT (table),
- ecol->col_idx,
- column,
- row);
- if (ATK_IS_OBJECT (ret)) {
- g_object_weak_ref (G_OBJECT (ret),
- (GWeakNotify) cell_destroyed,
- ret);
- /* if current cell is focused, add FOCUSED state */
- if (e_selection_model_cursor_row (item->selection) == GAL_A11Y_E_CELL (ret)->row &&
- e_selection_model_cursor_col (item->selection) == GAL_A11Y_E_CELL (ret)->model_col)
- gal_a11y_e_cell_add_state (GAL_A11Y_E_CELL (ret), ATK_STATE_FOCUSED, FALSE);
- } 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;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return NULL;
-
- ecol = e_table_header_get_column (item->header, column);
- if (ecol) {
- atk_obj = atk_gobject_accessible_for_object (G_OBJECT (ecol));
- if (atk_obj) {
- if (ecol->text)
- atk_object_set_name (atk_obj, ecol->text);
- atk_object_set_role (atk_obj, ATK_ROLE_TABLE_COLUMN_HEADER);
- }
- }
-
- 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;
- GalA11yETableItemPrivate *priv = GET_PRIVATE (table);
-
- if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT))
- return FALSE;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
- if (!item)
- return FALSE;
-
- return e_selection_model_is_row_selected(item->selection, view_to_model_row (item, 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;
- GalA11yETableItemPrivate *priv = GET_PRIVATE (table);
-
- if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT))
- return 0;
-
- 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;
- GalA11yETableItemPrivate *priv = GET_PRIVATE (table);
-
- if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT))
- return FALSE;
-
- 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, view_to_model_row (item, 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;
- 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);
-
- GET_PRIVATE(table_item)->rows = n_rows;
-
- 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");
-}
-
-static void
-eti_rows_deleted (ETableModel * model, int row, int count,
- AtkObject * table_item)
-{
- gint i,j, n_rows, n_cols, old_nrows;
-
- n_rows = atk_table_get_n_rows (ATK_TABLE(table_item));
- n_cols = atk_table_get_n_columns (ATK_TABLE(table_item));
-
- 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;
-
- 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 send out a signal ... */
- if (GET_PRIVATE (a11y)->rows > 0)
- g_signal_emit_by_name (a11y, "visible-data-changed");
-}
-
-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;
-
- a11y_item = GAL_A11Y_E_TABLE_ITEM (a11y);
- priv = GET_PRIVATE (a11y_item);
-
- /* 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;
-
- /* 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_n_children = eti_get_n_children;
- atk_object_class->ref_child = eti_ref_child;
- atk_object_class->initialize = eti_real_initialize;
- atk_object_class->ref_state_set = eti_ref_state_set;
-}
-
-static void
-eti_init (GalA11yETableItem *a11y)
-{
- GalA11yETableItemPrivate *priv;
-
- priv = GET_PRIVATE (a11y);
-
- 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 (ETableItem *item)
-{
- GalA11yETableItem *a11y;
- AtkObject *accessible;
- int n;
- ESelectionModel * esm;
- AtkObject * cell;
- AtkObject *parent;
- const char *name;
-
- 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)->state_set = atk_state_set_new ();
-
- atk_state_set_add_state (GET_PRIVATE(a11y)->state_set, ATK_STATE_TRANSIENT);
- atk_state_set_add_state (GET_PRIVATE(a11y)->state_set, ATK_STATE_ENABLED);
- atk_state_set_add_state (GET_PRIVATE(a11y)->state_set, ATK_STATE_SENSITIVE);
- atk_state_set_add_state (GET_PRIVATE(a11y)->state_set, ATK_STATE_SHOWING);
- atk_state_set_add_state (GET_PRIVATE(a11y)->state_set, ATK_STATE_VISIBLE);
-
-
- accessible = ATK_OBJECT(a11y);
-
- /* Initialize cell data. */
- n = item->cols * item->rows;
- GET_PRIVATE (a11y)->cols = item->cols;
- GET_PRIVATE (a11y)->rows = item->rows;
-
- 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));
- parent = gtk_widget_get_accessible (GET_PRIVATE (a11y)->widget);
- name = atk_object_get_name (parent);
- if (name)
- atk_object_set_name (accessible, name);
- atk_object_set_parent (accessible, parent);
-
- 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);
- accessible->role = ATK_ROLE_TREE_TABLE;
- } else if (E_IS_TABLE (GET_PRIVATE (a11y)->widget)) {
- accessible->role = ATK_ROLE_TABLE;
- }
- }
-
- if (item)
- g_signal_connect (G_OBJECT (item), "destroy",
- G_CALLBACK (item_destroyed),
- a11y);
- esm = item->selection;
-
- if (esm != NULL) {
- int cursor_row, cursor_col, view_row, view_col;
-
- cursor_row = e_selection_model_cursor_row(esm);
- cursor_col = e_selection_model_cursor_col(esm);
-
- view_row = model_to_view_row (item, cursor_row);
- view_col = model_to_view_col (item, cursor_col);
-
- if (view_row == -1)
- view_row = 0;
- if (view_col == -1)
- view_col = 0;
-
- cell = eti_ref_at (ATK_TABLE (a11y), view_row, view_col);
- if (cell != NULL) {
- g_object_set_data (G_OBJECT(a11y), "gail-focus-object", cell);
- gal_a11y_e_cell_add_state (GAL_A11Y_E_CELL (cell), ATK_STATE_FOCUSED, FALSE);
- }
- }
-
- 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)
-{
- GalA11yETableItemPrivate *priv = GET_PRIVATE (a11y);
-
- if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT))
- return;
-
- 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;
- GalA11yETableItemPrivate *priv = GET_PRIVATE (a11y);
-
- g_return_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (a11y));
-
- if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT))
- return;
-
- item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (a11y)));
-
- g_return_if_fail (item);
-
- if (row == -1 && col == -1)
- return;
-
- view_row = model_to_view_row (item, row);
- view_col = model_to_view_col (item, col);
-
- if (view_col == -1)
- view_col = 0;
- cell = eti_ref_at (ATK_TABLE (a11y), view_row, view_col);
- if (cell != NULL) {
- AtkObject *old_cell = (AtkObject *)g_object_get_data (G_OBJECT(a11y), "gail-focus-object");
- if (old_cell && GAL_A11Y_IS_E_CELL (old_cell))
- gal_a11y_e_cell_remove_state (GAL_A11Y_E_CELL (old_cell), ATK_STATE_FOCUSED, FALSE);
- if (old_cell)
- g_object_unref (old_cell);
-
- g_object_set_data (G_OBJECT(a11y), "gail-focus-object", cell);
-
- if (ATK_IS_OBJECT (cell))
- g_signal_emit_by_name (a11y,
- "active-descendant-changed",
- 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, cursor_row, cursor_col, model_row, model_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);
- col = atk_table_get_column_at_index (table, index);
-
- model_row = view_to_model_row (item, row);
- model_col = view_to_model_col (item, col);
-
- cursor_row = e_selection_model_cursor_row (item->selection);
- cursor_col = e_selection_model_cursor_col (item->selection);
-
- /* check whether is selected already */
- if (model_row == cursor_row && model_col == cursor_col)
- return TRUE;
-
- if (model_row != cursor_row) {
- /* we need to make the item get focus */
- e_canvas_item_grab_focus (GNOME_CANVAS_ITEM (item), TRUE);
-
- /* FIXME, currently we only support single row selection */
- atk_selection_clear_selection (selection);
- atk_table_add_row_selection (table, row);
- }
-
- e_selection_model_change_cursor (item->selection,
- model_row,
- model_col);
- e_selection_model_cursor_changed (item->selection,
- model_row,
- model_col);
- e_selection_model_cursor_activated (item->selection,
- model_row,
- model_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 eti_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);
-}
-
-void
-gal_a11y_e_table_item_init (void)
-{
- if (atk_get_root ())
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TABLE_ITEM_TYPE,
- gal_a11y_e_table_item_factory_get_type ());
-}
-
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 0317132804..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 (ETableItem *item);
-
-void gal_a11y_e_table_item_init (void);
-
-#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 b49a8a653a..0000000000
--- a/a11y/e-table/gal-a11y-e-table.c
+++ /dev/null
@@ -1,293 +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-factory.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-container.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 ETableItem *
-find_first_table_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))
- return find_first_table_item (E_TABLE_GROUP (i));
- else if (E_IS_TABLE_ITEM (i)) {
- return E_TABLE_ITEM (i);
- }
- }
-
- return NULL;
-}
-
-static AtkObject*
-eti_get_accessible (ETableItem *eti, AtkObject *parent)
-{
- AtkObject *a11y = NULL;
-
- g_return_val_if_fail (eti, NULL);
-
- a11y = atk_gobject_accessible_for_object (G_OBJECT (eti));
- g_return_val_if_fail (a11y, NULL);
-
- return a11y;
-}
-
-static gboolean
-init_child_item (GalA11yETable *a11y)
-{
- ETable *table;
-
- if (!a11y || !GTK_IS_ACCESSIBLE (a11y))
- return FALSE;
-
- table = E_TABLE (GTK_ACCESSIBLE (a11y)->widget);
- if (table && GTK_WIDGET_MAPPED (GTK_WIDGET (table)) && table->group && E_IS_TABLE_GROUP_CONTAINER(table->group)) {
- ETableGroupContainer *etgc = (ETableGroupContainer *)table->group;
- GList *list;
-
- for (list = etgc->children; list; list = g_list_next (list)) {
- ETableGroupContainerChildNode *child_node = list->data;
- ETableGroup *child = child_node->child;
- ETableItem *eti = find_first_table_item (child);
-
- eti_get_accessible (eti, ATK_OBJECT (a11y));
- }
- }
- g_object_unref (a11y);
- g_object_unref (table);
-
- return FALSE;
-}
-
-static AtkObject*
-et_ref_accessible_at_point (AtkComponent *component,
- gint x,
- gint y,
- AtkCoordType coord_type)
-{
- GalA11yETable *a11y = GAL_A11Y_E_TABLE (component);
- if (GET_PRIVATE (a11y)->child_item)
- g_object_ref (GET_PRIVATE (a11y)->child_item);
- return GET_PRIVATE (a11y)->child_item;
-}
-
-static gint
-et_get_n_children (AtkObject *accessible)
-{
- GalA11yETable *a11y = GAL_A11Y_E_TABLE (accessible);
- ETable * et;
- int n = 0;
-
- et = E_TABLE(GTK_ACCESSIBLE (a11y)->widget);
-
- if (et->group) {
- if (E_IS_TABLE_GROUP_LEAF (et->group))
- n = 1;
- else if (E_IS_TABLE_GROUP_CONTAINER (et->group)) {
- ETableGroupContainer *etgc = (ETableGroupContainer *)et->group;
- n = g_list_length (etgc->children);
- }
- }
-
- if (et && et->use_click_to_add && et->click_to_add) {
- n++;
- }
- return n;
-}
-
-static AtkObject*
-et_ref_child (AtkObject *accessible,
- gint i)
-{
- GalA11yETable *a11y = GAL_A11Y_E_TABLE (accessible);
- ETable * et;
- gint child_no;
-
- et = E_TABLE(GTK_ACCESSIBLE (a11y)->widget);
-
- child_no = et_get_n_children (accessible);
- if (i == 0 || i < child_no - 1) {
- if (E_IS_TABLE_GROUP_LEAF (et->group)) {
- ETableItem *eti = find_first_table_item (et->group);
- AtkObject *aeti = eti_get_accessible (eti, accessible);
- if (aeti)
- g_object_ref (aeti);
- return aeti;
-
- } else if (E_IS_TABLE_GROUP_CONTAINER (et->group)) {
- ETableGroupContainer *etgc = (ETableGroupContainer *) et->group;
- ETableGroupContainerChildNode *child_node = g_list_nth_data (etgc->children, i);
- if (child_node) {
- ETableGroup *child = child_node->child;
- ETableItem * eti = find_first_table_item (child);
- AtkObject *aeti = eti_get_accessible (eti, accessible);
- if (aeti)
- g_object_ref (aeti);
- return aeti;
- }
- }
- } else if (i == child_no -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);
- accessible = atk_gobject_accessible_for_object (G_OBJECT(etcta));
- if (accessible)
- g_object_ref (accessible);
- return accessible;
- }
- }
-
- return NULL;
-}
-
-static AtkLayer
-et_get_layer (AtkComponent *component)
-{
- return ATK_LAYER_WIDGET;
-}
-
-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;
- iface->get_layer = et_get_layer;
-}
-
-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);
-
- /* we need to init all the children for multiple table items */
- if (table && GTK_WIDGET_MAPPED (GTK_WIDGET (table)) && table->group && E_IS_TABLE_GROUP_CONTAINER (table->group)) {
- /* Ref it here so that it is still valid in the idle function */
- /* It will be unrefed in the idle function */
- g_object_ref (a11y);
- g_object_ref (widget);
-
- g_idle_add ((GSourceFunc)init_child_item, a11y);
- }
-
- return ATK_OBJECT (a11y);
-}
-
-void
-gal_a11y_e_table_init (void)
-{
- if (atk_get_root ())
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TABLE_TYPE,
- gal_a11y_e_table_factory_get_type ());
-
-}
-
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 780cff4509..0000000000
--- a/a11y/e-table/gal-a11y-e-table.h
+++ /dev/null
@@ -1,45 +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);
-
-void gal_a11y_e_table_init (void);
-
-#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 de468398ea..0000000000
--- a/a11y/e-table/gal-a11y-e-tree.c
+++ /dev/null
@@ -1,176 +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-e-tree-factory.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));
- }
-}
-
-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 AtkLayer
-et_get_layer (AtkComponent *component)
-{
- return ATK_LAYER_WIDGET;
-}
-
-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;
- iface->get_layer = et_get_layer;
-}
-
-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);
-}
-
-void
-gal_a11y_e_tree_init (void)
-{
- if (atk_get_root ())
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TREE_TYPE,
- gal_a11y_e_tree_factory_get_type ());
-
-}
-
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 a9468ced54..0000000000
--- a/a11y/e-table/gal-a11y-e-tree.h
+++ /dev/null
@@ -1,43 +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);
-
-void gal_a11y_e_tree_init (void);
-
-#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 2463126afa..0000000000
--- a/a11y/e-text/gal-a11y-e-text.c
+++ /dev/null
@@ -1,1133 +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-e-text-factory.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;
-}
-
-void
-gal_a11y_e_text_init (void)
-{
- if (atk_get_root ())
- atk_registry_set_factory_type (atk_get_default_registry (),
- E_TYPE_TEXT,
- gal_a11y_e_text_factory_get_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 a4b204d296..0000000000
--- a/a11y/e-text/gal-a11y-e-text.h
+++ /dev/null
@@ -1,42 +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);
-
-void gal_a11y_e_text_init (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/calendar/ChangeLog b/calendar/ChangeLog
index d12dd4e5a9..4ae69fa17b 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,7 @@
+2005-03-07 JP Rosevear <jpr@novell.com>
+
+ * gui/alarm-notify/alarm-queue.c: add remove_client_alarms prototype
+
2005-03-06 Rodrigo Moya <rodrigo@novell.com>
* gui/dialogs/recur-comp.c (recur_component_dialog): disable dialog for
diff --git a/calendar/calendar-errors.xml.h b/calendar/calendar-errors.xml.h
index 963f7d251d..926a2acf1b 100644
--- a/calendar/calendar-errors.xml.h
+++ b/calendar/calendar-errors.xml.h
@@ -143,4 +143,4 @@ char *s = N_("Server Version");
/* calendar:server-version primary */
char *s = N_("Your server needs to be updated");
/* calendar:server-version secondary */
-char *s = N_(" Some features may not work correctly with your current server version");
+char *s = N_(" Some features may not work correctly with your current server version ");
diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c
index da3028d37e..b1d430a700 100644
--- a/calendar/gui/alarm-notify/alarm-queue.c
+++ b/calendar/gui/alarm-notify/alarm-queue.c
@@ -131,6 +131,8 @@ static void procedure_notification (time_t trigger, CompQueuedAlarms *cqa, gpoin
static void query_objects_changed_cb (ECal *client, GList *objects, gpointer data);
static void query_objects_removed_cb (ECal *client, GList *objects, gpointer data);
+static void remove_client_alarms (ClientAlarms *ca);
+
/* Alarm queue engine */
diff --git a/calendar/gui/calendar-component.c b/calendar/gui/calendar-component.c
index fd838385d8..ea227f3211 100644
--- a/calendar/gui/calendar-component.c
+++ b/calendar/gui/calendar-component.c
@@ -559,7 +559,7 @@ popup_event_cb(ESourceSelector *selector, ESource *insource, GdkEventButton *eve
group = e_source_selector_get_primary_source_group (selector);
g_object_ref (group);
- ((EPopupItem) ecc_source_popups [0]).user_data = group;
+ ecc_source_popups [0].user_data = group;
menus = g_slist_prepend (menus, &ecc_source_popups [0]);
}
else {
diff --git a/configure.in b/configure.in
index 362a58bbdb..5dceebef26 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.6, http://bugzilla.ximian.com/enter_bug.cgi?product=Evolution)
+AC_INIT(evolution, 2.2.0, http://bugzilla.ximian.com/enter_bug.cgi?product=Evolution)
AC_CONFIG_SRCDIR(README)
AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
@@ -1098,11 +1098,11 @@ fi
dnl --- Required version numbers
-GAL_REQUIRED=2.3.5
+GAL_REQUIRED=2.4.0
GAL_PACKAGE=2.4
-GTKHTML_REQUIRED=3.5.7
+GTKHTML_REQUIRED=3.6.0
GTKHTML_PACKAGE=3.6
-EDS_REQUIRED=1.1.6
+EDS_REQUIRED=1.2.0
EDS_PACKAGE=1.2
BONOBOUI_REQUIRED=2.4.2
GNOME_VFS_REQUIRED=2.4
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/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 b478efb1ce..0000000000
--- a/e-util/e-marshal.list
+++ /dev/null
@@ -1,52 +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,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/evolution.xml b/help/C/evolution.xml
index e2b3578757..b4a5c55507 100644
--- a/help/C/evolution.xml
+++ b/help/C/evolution.xml
@@ -9,25 +9,26 @@
<!ENTITY z-nbspace " " >
] >
+<?yelp:chunk-depth 3?>
<book id="index" lang="en">
-<title>Evolution User Guide 2.0</title>
+<title>Evolution User Guide</title>
<bookinfo id="Front">
- <productname>Evolution&trade;</productname>
- <productnumber>2.0</productnumber>
- <invpartnumber>September 9, 2004</invpartnumber>
- <title>User guide</title>
+ <productname>Evolution</productname>
+ <productnumber>2.2</productnumber>
+ <invpartnumber>March 7, 2005</invpartnumber>
+ <title>User Guide</title>
</bookinfo>
<preface id="preface">
<title>About This Guide</title>
- <para>This guide describes how to use and manage Evolution&trade; 2.0.x client software. This guide is intended for users and is divided into the following sections:</para>
+ <para>This guide describes how to use and manage Evolution&trade; 2.2.x client software. This guide is intended for users and is divided into the following sections:</para>
<itemizedlist>
<listitem>
<para><link linkend="usage-mainwindow">Getting Started</link></para>
</listitem>
<listitem>
- <para><link linkend="usage-mail">Getting and Sending E-Mail</link></para>
+ <para><link linkend="usage-mail">Sending and Receiving E-Mail</link></para>
</listitem>
<listitem>
<para><link linkend="usage-mail-organize">Organizing Your E-Mail</link></para>
@@ -39,9 +40,6 @@
<para><link linkend="usage-calendar">Evolution Calendar</link></para>
</listitem>
<listitem>
- <para><link linkend="bs4tmzx">Connecting to GroupWise</link></para>
- </listitem>
- <listitem>
<para><link linkend="usage-exchange">Connecting to Exchange Servers</link></para>
</listitem>
<listitem>
@@ -60,7 +58,7 @@
<para><link linkend="bugs">Known Bugs and Limitations</link></para>
</listitem>
</itemizedlist>
- <bridgehead>Finding Help</bridgehead>
+ <bridgehead id="bt4ckdq">Additional Documentation</bridgehead>
<para>You can find additional help in three places. </para>
<itemizedlist>
<listitem>
@@ -73,447 +71,633 @@
<para>In the Evolution interface, click Help &gt; Contents.</para>
</listitem>
</itemizedlist>
- <bridgehead>Documentation Updates</bridgehead>
- <para>For the most recent version of the<citetitle> Evolution 2.0 User Guide</citetitle>, see the <ulink url="http://www.novell.com/documentation/ximian.html">Evolution Documentation Web site</ulink>.</para>
- <bridgehead>Documentation Conventions</bridgehead>
+ <bridgehead id="bt4ckdr">Documentation Updates</bridgehead>
+ <para>For the most recent version of the<citetitle> Evolution 2.2 User Guide</citetitle>, see the <ulink url="http://www.novell.com/documentation/ximian.html">Evolution Documentation Web site</ulink>.</para>
+ <bridgehead id="bt4ckds">Documentation Conventions</bridgehead>
<para>In Novell documentation, a greater-than symbol (&gt;) is used to separate actions within a step and items in a cross-reference path.</para>
<para>A trademark symbol (&reg;, &trade;, etc.) denotes a Novell trademark. An asterisk (*) denotes a third-party trademark.</para>
</preface>
<chapter id="usage-mainwindow">
<title>Getting Started</title>
- <para>Evolution&trade; makes the tasks of storing, organizing, and retrieving your personal information easier, so you can work and communicate more effectively with others. It&apos;s a highly evolved <link linkend="groupware">groupware</link> program, an integral part of the Internet-connected desktop.</para>
+ <para>Evolution&trade; makes the tasks of storing, organizing, and retrieving your personal information easy, so you can work and communicate more effectively with others. It&apos;s a highly evolved <link linkend="groupware">groupware</link> program, an integral part of the Internet-connected desktop.</para>
<para>Evolution can help you work in a group by handling e-mail, address, and other contact information, and one or more calendars. It can do that on one or several computers, connected directly or over a network, for one person or for large groups.</para>
- <para>With Evolution, you can accomplish your most common daily tasks faster. For example, it takes only one or two clicks to enter appointment or contact information sent to you by e-mail, or to send e-mail to a contact or appointment. Evolution makes displays faster and more efficient, so searches are faster and memory usage is lower. People who get lots of e-mail will appreciate advanced features like <link linkend="vfolder">vFolders</link>, which let you save searches as though they were ordinary e-mail folders.</para>
+ <para>With Evolution, you can accomplish your most common daily tasks quickly. For example, it takes only one or two clicks to enter appointment or contact information sent to you by e-mail, or to send e-mail to a contact or appointment. People who get lots of e-mail will appreciate advanced features like <link linkend="vfolder">vFolders</link>, which let you save searches as though they were ordinary e-mail folders.</para>
<itemizedlist>
<listitem>
<para><link linkend="usage-mainwindow-starting">Starting Evolution for the First Time</link></para>
</listitem>
<listitem>
- <para><link linkend="ui-intro">About the Evolution Main Window </link></para>
+ <para><link linkend="ui-intro">Using Evolution: An Overview</link></para>
</listitem>
</itemizedlist>
<section id="usage-mainwindow-starting">
<title>Starting Evolution for the First Time</title>
- <procedure>
- <step id="bs4u1a6">
- <para>Click the Applications Menu icon &gt; Office &gt; Evolution.</para>
- <para>or</para>
- <para>Enter <command>evolution</command> at the command line.</para>
- </step>
- </procedure>
+ <orderedlist>
+ <listitem id="bs4u1a6">
+ <para>Start the Evolution client.</para>
+ <informaltable>
+ <tgroup cols="2">
+ <colspec colwidth="1.219*" colname="1" colnum="1"/>
+ <colspec colwidth="4.188*" colname="2" colnum="2"/>
+ <tbody valign="top">
+ <row id="bsptywf">
+ <entry colname="1">
+ <para>GNOME:</para>
+ </entry>
+ <entry colname="2">
+ <para>Click Programs &gt; Evolution.</para>
+ </entry>
+ </row>
+ <row id="bsptywg">
+ <entry colname="1">
+ <para>KDE:</para>
+ </entry>
+ <entry colname="2">
+ <para>Click the red N at the bottom panel &gt; Office &gt; Evolution.</para>
+ </entry>
+ </row>
+ <row id="bsptywh">
+ <entry colname="1">
+ <para>Command Line:</para>
+ </entry>
+ <entry colname="2">
+ <para>Enter evolution.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </listitem>
+ </orderedlist>
<section id="bse54o0">
<title>Using the First-Run Assistant</title>
- <para>The first time you run Evolution, it creates a directory called evolution in your home directory, where it stores all of its local data. Then, it opens a first-run assistant to help you set up e-mail accounts and import data from other applications.</para>
- <para>Using the first-run assistant takes approximately two to five minutes.</para>
- <para>Later on, if you want to change this account, or if you want to create a new one, select Tools &gt; Settings, then click Mail Accounts. Select the account you want to change, then click Edit. Alternately, add a new account by clicking Add. See <link linkend="config-prefs-mail">Mail Preferences</link> for details.</para>
+ <para>The first time you run Evolution, it creates a directory called .evolution in your home directory, where it stores all of its local data. Then, it opens a First-Run Assistant to help you set up e-mail accounts and import data from other applications.</para>
+ <para>Using the first-run assistant takes two to five minutes.</para>
+ <para>Later on, if you want to change this account, or if you want to create a new one, click Edit &gt; Preferences, then click Mail Accounts. Select the account you want to change, then click Edit. Alternately, add a new account by clicking Add. See <link linkend="config-prefs-mail">Mail Preferences</link> for details.</para>
+ <para>The First-Run Assistant help you provide the information Evolution needs to get started.</para>
+ <itemizedlist>
+ <listitem>
+ <para><link linkend="first-step">Defining Your Identity</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="second-step">Receiving Mail</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="more-mail-options">Receiving Mail Options</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="third-step">Sending Mail</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="bsti1ty">Account Management</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="step-three-b">Timezone</link></para>
+ </listitem>
+ </itemizedlist>
<section id="first-step">
<title>Defining Your Identity</title>
- <informalfigure id="bsj8pww">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_identity_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <para>The Identity window is the first step in the assistant. Here, you will enter some basic personal information. You can define multiple identities later by clicking Tools &gt; Settings, then click Mail Accounts. </para>
- <para>In the Identity page, you need to provide the following information:</para>
- <formalpara id="bsj74dl">
- <title>Account Information:</title>
- <para> Type a name for Evolution to use for this account. This is used only for display within Evolution. Some good examples are &ldquo;Work E-mail&rdquo; or &ldquo;IMAP Server.&rdquo;</para>
- </formalpara>
- <formalpara id="bsj74dm">
- <title>Full Name: </title>
- <para>Your full name.</para>
- </formalpara>
- <formalpara id="bsj74dn">
- <title>E-Mail Address:</title>
- <para> Your e-mail address.</para>
- </formalpara>
- <formalpara id="bsj74do">
- <title>Make This My Default Account:</title>
- <para> Select this as the primary account. </para>
- </formalpara>
- <formalpara id="bsj74dp">
- <title> Reply-To:</title>
- <para> (Optional) If you want to have replies sent to another e-mail address, specify it in this space .</para>
- </formalpara>
- <formalpara id="bsj74dq">
- <title>Organization:</title>
- <para> (Optional) The company where you work, or the organization you represent when you send e-mail.</para>
- </formalpara>
+ <para>The Identity window is the first step in the assistant. </para>
+ <mediaobject id="bsj8pww"><imageobject><imagedata format="PNG" fileref="figures/evo_identity_a.png"/></imageobject></mediaobject>
+ <para>Here, you enter some basic personal information. You can define multiple identities later by clicking Edit &gt; Preferences, then click Mail Accounts.</para>
+ <para>When the First-Run Assistant starts, the Welcome page is displayed. Click Forward to proceed to the Identity window.</para>
+ <orderedlist>
+ <listitem id="bstfhex">
+ <para>Type your full name in the Full Name field.</para>
+ </listitem>
+ <listitem id="bstfipr">
+ <para>Type your e-mail address in the E-Mail Address field.</para>
+ </listitem>
+ <listitem id="bstfj3i">
+ <para>(Optional) Select if this account is your default account.</para>
+ </listitem>
+ <listitem id="bstfjgc">
+ <para>(Optional) Type a reply to address in the Reply-To field.</para>
+ <para>Use this field if you want replies to e-mails sent to a different address.</para>
+ </listitem>
+ <listitem id="bstfkcz">
+ <para>(Optional) Type your organization in the Organization field.</para>
+ <para>The company where you work, or the organization you represent when you send e-mail.</para>
+ </listitem>
+ <listitem id="bstfl19">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
</section>
<section id="second-step">
<title>Receiving Mail</title>
- <informalfigure id="bsj8qah">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_receive_setup_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <para>The Receiving E-mail option lets you determine where you get your e-mail. You need to specify the type of server you want to receive mail with. If you are unsure about the type of server to choose, ask your system administrator or ISP. The following is a list of server types:</para>
- <formalpara id="bsj74dr">
- <title>GroupWise:</title>
- <para> Select this option if you connect to GroupWise&reg;. GroupWise keeps e-mail, calendar, and contact information on the server.</para>
- </formalpara>
- <formalpara id="bsj74ds">
- <title>Microsoft Exchange:</title>
- <para> Available only if you have installed the Connector for Microsoft&z-3rdParty; Exchange. It allows you to connect to a Microsoft Exchange 2000 or 2003 server, which stores e-mail, calendar, and contact information on the server.</para>
- </formalpara>
- <formalpara id="bsj74dt">
- <title>IMAP:</title>
- <para> Keeps the e-mail on your server so you can access your e-mail from multiple systems.</para>
- </formalpara>
- <formalpara id="bsj74du">
- <title>POP:</title>
- <para> Downloads your e-mail to your hard disk for permanent storage, freeing up space on the e-mail server.</para>
- </formalpara>
- <formalpara id="bsj74dv">
- <title>Local Delivery:</title>
- <para> Choose this option if you want to move e-mail from the spool (the location where mail waits for delivery) and store it in your home directory. You need to provide the path to the mail spool you want to use. If you would rather leave e-mail in your system&apos;s spool files, choose the Standard Unix Mbox Spool option instead. </para>
- </formalpara>
- <formalpara id="bsj74dw">
- <title>MH Format Mail Directories:</title>
- <para> If you download your e-mail using mh or another MH-style program, you should use this option. You need to provide the path to the mail directory you want to use.</para>
- </formalpara>
- <formalpara id="bsj74dx">
- <title>Maildir Format Mail Directories:</title>
- <para> If you download your e-mail using Qmail or another maildir-style program, you should use this option. You need to provide the path to the mail directory you want to use.</para>
- </formalpara>
- <formalpara id="bsj74dy">
- <title>Standard Unix Mbox Spool or Directory:</title>
- <para> If you want to read and store e-mail in the mail spool on your local system, choose this option. You need to provide the path to the mail spool you want to use.</para>
- </formalpara>
- <formalpara id="bsj74dz">
- <title>None:</title>
- <para> Select this if you do not plan to check e-mail with this account.</para>
- </formalpara>
- <para>If you selected POP, IMAP, GroupWise, or Microsoft Exchange as your e-mail server, you&rsquo;ll need to specify additional information:</para>
+ <para>The Receiving E-mail option lets you determine where you get your e-mail. </para>
+ <mediaobject id="bsj8qah"><imageobject><imagedata format="PNG" fileref="figures/evo_receive_setup_a.png"/></imageobject></mediaobject>
+ <para>You need to specify the type of server you want to receive mail with. If you are unsure about the type of server to choose, ask your system administrator or ISP.</para>
+ <orderedlist>
+ <listitem id="bstflia">
+ <para>Select a server type in the Server Type list.</para>
+ <para>The following a list of server types that are available:</para>
+ <formalpara id="bsj74dr">
+ <title>Novell GroupWise:</title>
+ <para> Select this option if you connect to Novell GroupWise&reg;. Novell GroupWise keeps e-mail, calendar, and contact information on the server. For configuration instructions, see <link linkend="bstfw13">Remote Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74ds">
+ <title>Microsoft Exchange:</title>
+ <para> Available only if you have installed the Connector for Microsoft&z-3rdParty; Exchange. It allows you to connect to a Microsoft Exchange 2000 or 2003 server, which stores e-mail, calendar, and contact information on the server. For configuration instructions, see <link linkend="bstfw13">Remote Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74dt">
+ <title>IMAP:</title>
+ <para> Keeps the e-mail on your server so you can access your e-mail from multiple systems. For configuration instructions, see <link linkend="bstfw13">Remote Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74du">
+ <title>POP:</title>
+ <para> Downloads your e-mail to your hard disk for permanent storage, freeing up space on the e-mail server. For configuration instructions, see <link linkend="bstfw13">Remote Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bstgdhu">
+ <title>USENET News: </title>
+ <para>Connects to the news server and downloads a list of available news digests. For configuration instructions, see <link linkend="bstfw13">Remote Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74dv">
+ <title>Local Delivery:</title>
+ <para> Choose this option if you want to move e-mail from the spool (the location where mail waits for delivery) and store it in your home directory. You need to provide the path to the mail spool you want to use. If you would rather leave e-mail in your system&apos;s spool files, choose the Standard Unix Mbox Spool option instead. For configuration instructions, see <link linkend="bstgbqn">Local Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74dw">
+ <title>MH Format Mail Directories:</title>
+ <para> If you download your e-mail using mh or another MH-style program, you should use this option. You need to provide the path to the mail directory you want to use. For configuration instructions, see <link linkend="bstgbqn">Local Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74dx">
+ <title>Maildir Format Mail Directories:</title>
+ <para> If you download your e-mail using Qmail or another maildir-style program, you should use this option. You need to provide the path to the mail directory you want to use. For configuration instructions, see <link linkend="bstgbqn">Local Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74dy">
+ <title>Standard Unix Mbox Spool or Directory:</title>
+ <para> If you want to read and store e-mail in the mail spool on your local system, choose this option. You need to provide the path to the mail spool you want to use. For configuration instructions, see <link linkend="bstgbqn">Local Configuration Options</link>.</para>
+ </formalpara>
+ <formalpara id="bsj74dz">
+ <title>None:</title>
+ <para> Select this if you do not plan to check e-mail with this account. If you select this, there are no configuration options.</para>
+ </formalpara>
+ </listitem>
+ </orderedlist>
+
+ <section id="bstfw13">
+ <title>Remote Configuration Options</title>
+ <para>If you selected Novell GroupWise, IMAP, POP, or USENET News as your server, you&rsquo;ll need to specify additional information.</para>
+ <orderedlist>
+ <listitem id="bstg8f2">
+ <para>Type the hostname of your e-mail server in the Hostname field.</para>
+ <para>If you don&apos;t know the hostname, contact your administrator.</para>
+ </listitem>
+ <listitem id="bstg8sr">
+ <para>Type your username for the account in the Username field.</para>
+ </listitem>
+ <listitem id="bstg8yn">
+ <para>Select to use a secure (SSL) connection.</para>
+ <para>If your server supports secure connections, you should enable this security option. If you are unsure your server supports a secure connection, contact your system administrator.</para>
+ </listitem>
+ <listitem id="bstg9rc">
+ <para>Select your authentication type in the Authentication list.</para>
+ <para>or</para>
+ <para>Click Check for Supported Types to have Evolution check for supported types. Some servers do not announce the authentication mechanisms they support, so clicking this button is not a guarantee that available mechanisms actually work.</para>
+ <para>If you are unsure what authentication type you need, contact your system administrator.</para>
+ </listitem>
+ <listitem id="bstgaxb">
+ <para>Select if you want Evolution to remember your password.</para>
+ </listitem>
+ <listitem id="bstgb80">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="more-mail-options">Receiving Mail Options</link>.</para>
+ <para>If you chose Microsoft Exchange, provide your username in the Username field and your Outlook Web Access (OWA) URL in the OWA Url field.</para>
+ </section>
+
+ <section id="bstgbqn">
+ <title>Local Configuration Options</title>
+ <para>If you selected Local Delivery, MH-Format Mail Directories, Maildir-Format Mail Directories, or Standard Unix Mbox Spool or Directory, you must specify the path to the local files in the path field. Continue with <link linkend="more-mail-options">Receiving Mail Options</link>.</para>
+ </section>
+ </section>
+
+ <section id="more-mail-options">
+ <title>Receiving Mail Options</title>
+ <para>After you have selected a mail delivery mechanism, you can set some preferences for its behavior.</para>
<itemizedlist>
<listitem>
- <para>The hostname of your e-mail server. Ask your system administrator if you&apos;re not sure.</para>
+ <para><link linkend="bsthktw">Novell GroupWise Receiving Options</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="bstgjve">Microsoft Exchange Receiving Options</link></para>
</listitem>
<listitem>
- <para>The username for the account on that system. </para>
+ <para><link linkend="bstggh0">IMAP and IMAP4rev1 Receiving Options</link></para>
</listitem>
<listitem>
- <para>Whether you want to use a secure (SSL) connection. If your server supports it, you should enable this security option. </para>
+ <para><link linkend="bspcfg3">POP Receiving Options</link></para>
</listitem>
<listitem>
- <para>The authentication options supported by your server. If you&apos;re not sure, ask your system administrator. You can also click Check for Supported Types; when you have done so, the menu limits itself to options your server supports. Some servers do not announce the authentication mechanisms they support, so clicking this button is not a guarantee that available mechanisms actually work. </para>
+ <para><link linkend="bsthqql">USENET News Receiving Options</link></para>
</listitem>
<listitem>
- <para>Choose whether you want Evolution to remember your password. If you have selected this item, you can force Evolution to ask for a password again by clicking Actions &gt; Forget Passwords, or by returning to this section of the accounts tool, which you can find by clickiing Tools &gt; Settings. </para>
+ <para><link linkend="bsthseo">Local Delivery Receiving Options</link></para>
</listitem>
<listitem>
- <para>If you are connecting to GroupWise, you need your SOAP port number for accessing your Address Book and Calendar.</para>
+ <para><link linkend="bsthszn">MH-Format Mail Directories Receiving Options</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="bsthu34">Maildir-Format Mail Directories Receiving Options</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="bsthukq">Standard Unix Mbox Spool or Directory Receiving Options</link></para>
</listitem>
</itemizedlist>
- <tip>
- <para>Connecting to an Exchange Server</para>
- <para>If you have installed the Connector for Microsoft Exchange, you can access Microsoft Exchange 2000 servers natively. If you do not have the Connector, or if you use an older version of Microsoft Exchange, talk to your system administrator about access to standard protocol services like POP and IMAP.</para>
- </tip>
- </section>
- <section id="more-mail-options">
- <title>Receiving Mail Options</title>
- <para>After you have selected a mail delivery mechanism, you can set some preferences for its behavior:</para>
+ <section id="bsthktw">
+ <title>Novell GroupWise Receiving Options</title>
+ <para>If you select Novell GroupWise as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu28qf"><imageobject><imagedata format="PNG" fileref="figures/evo_gwreceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bv7wblf">
+ <para>Select if you want Evolution to automatically check for new mail.</para>
+ <para>If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bsthlfd">
+ <para>Select if you want to check for new messages in all folders.</para>
+ </listitem>
+ <listitem id="bsthlol">
+ <para>Select if you want to apply filters to new messages in the Inbox on the server.</para>
+ <para>For additional information on filtering, see <link linkend="usage-mail-org-filters-new">Creating New Filter Rules</link>.</para>
+ </listitem>
+ <listitem id="bsthlvl">
+ <para>Select if you want to check new messages for junk content.</para>
+ <para>For additional information on junk content, see <link linkend="mail-prefs-junk">Junk Mail Preferences</link>.</para>
+ </listitem>
+ <listitem id="bsthm9q">
+ <para>Select if you want to only check for junk messages in the Inbox folder.</para>
+ </listitem>
+ <listitem id="bsthmhx">
+ <para>Select if you want to automatically synchronize remote mail locally.</para>
+ </listitem>
+ <listitem id="bsthnab">
+ <para>Type your Post Office Agent SOAP port in the Post Office Agent SOAP Port field.</para>
+ <para>If you are unsure what your Post Office Agent SOAP port is, contact your system administrator.</para>
+ </listitem>
+ <listitem id="bsthnuq">
+ <para>Select if you want to use a secure (SSL) connection.</para>
+ </listitem>
+ <listitem id="bstho1w">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
+ </section>
+
+ <section id="bstgjve">
+ <title>Microsoft Exchange Receiving Options</title>
+ <para>If you select Microsoft Exchange as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu2c0q"><imageobject><imagedata format="PNG" fileref="figures/evo_mereceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bstgk36">
+ <para>Select if you want Evolution to automatically check for new mail.</para>
+ <para>If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bstgkvm">
+ <para>Specify the Global Catalog server name in the Global Catalog Server Name field.</para>
+ <para>The Global Catalog Server contains the user information for users. If you are unsure what your Global Catalog server name is, contact your system administrator.</para>
+ </listitem>
+ <listitem id="bstglhn">
+ <para>Select if you want to limit the number of Global Address Lists (GAL). </para>
+ <para>The GAL contains a list of all e-mail addresses. If you select this option, you need to specify the maximum number of responses.</para>
+ </listitem>
+ <listitem id="bstgsrp">
+ <para>Select if you want the password expire warning period.</para>
+ <para>If you select this option, you need to specify how often Evolution should send the password expire message.</para>
+ </listitem>
+ <listitem id="bv6uqm7">
+ <para>Select if you want to automatically synchronize remote mail locally.</para>
+ </listitem>
+ <listitem id="bstgtoj">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
+ </section>
+
+ <section id="bstggh0">
+ <title>IMAP and IMAP4rev1 Receiving Options</title>
+ <para>If you select IMAP or IMAP4rev1 as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu2dp4"><imageobject><imagedata format="PNG" fileref="figures/evo_imapreceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bstggly">
+ <para>Select if you want Evolution to automatically check for new mail.</para>
+ <para>If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bstgh57">
+ <para>Select if you want Evolution to use custom commands to connect to Evolution.</para>
+ <para>If you select this option, specify the custom command you want Evolution to use.</para>
+ </listitem>
+ <listitem id="bstgi0r">
+ <para>Select if you want Evolution to show only subscribed folders.</para>
+ <para>Subscribed folders are folders that you have chosen to receive mail from by subscribing to them.</para>
+ </listitem>
+ <listitem id="bstgi8n">
+ <para>Select if you want Evolution to override server-supplied folder namespaces.</para>
+ <para>By choosing this option you can rename the folders that the server provides. If you select this option, you need to specify the namespace to use.</para>
+ </listitem>
+ <listitem id="bstgip8">
+ <para>Select if you want to apply filters to new messages in the Inbox.</para>
+ <para>For additional information on filtering, see <link linkend="usage-mail-org-filters-new">Creating New Filter Rules</link>.</para>
+ </listitem>
+ <listitem id="bstgiv6">
+ <para>Select if you want to check new messages for junk content.</para>
+ <para>For additional information on junk content, see <link linkend="mail-prefs-junk">Junk Mail Preferences</link>.</para>
+ </listitem>
+ <listitem id="bstgj0g">
+ <para>Select if you want to check for junk messages in the Inbox folder.</para>
+ </listitem>
+ <listitem id="bstgje2">
+ <para>Select if you want to automatically synchronize remote mail locally.</para>
+ </listitem>
+ <listitem id="bstgjlq">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
+ </section>
<section id="bspcfg3">
- <title>POP Mail Preferences:</title>
- <formalpara id="bsj61c5">
- <title>Checking for New Mail:</title>
- <para> If you want Evolution to check for new e-mail automatically, select the box and specify a frequency in minutes.</para>
- </formalpara>
- <formalpara id="bsj61c6">
- <title>Message Storage:</title>
- <para> If you want to store copies of your e-mail on the server, select this option.</para>
- </formalpara>
+ <title>POP Receiving Options</title>
+ <para>If you select POP as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu2e8x"><imageobject><imagedata format="PNG" fileref="figures/evo_popreceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bsthozk">
+ <para>Select if you want Evolution to automatically check for new mail.If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bsthpck">
+ <para>Select if you want to leave messages on the server.</para>
+ </listitem>
+ <listitem id="bsthpn9">
+ <para>Select if you want to disable support for all POP3 extensions (support for POP3).</para>
+ </listitem>
+ <listitem id="bsthpur">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
</section>
- <section id="bspcfn3">
- <title>Microsoft Exchange Preferences:</title>
- <formalpara id="bsj61c7">
- <title>Checking for New Mail:</title>
- <para> If you want Evolution to check for new e-mail automatically, select the box and specify a frequency in minutes.</para>
- </formalpara>
- <formalpara id="bsj61c8">
- <title>Global Address List/Active Directory:</title>
- <para> Specify the name of your global catalog server. You can also choose to limit the server&apos;s responses and select a maximum number of results for an address search. Limiting the number of results limits the load on your system and on your network.</para>
- </formalpara>
- <formalpara id="bsj61c9">
- <title>Mailbox Name:</title>
- <para> If your Active Directory&z-3rdParty; user name is different from your Exchange mailbox name, specify the mailbox name here.</para>
- </formalpara>
- <formalpara id="bsj61ca">
- <title>Outlook Web Access (OWA) Path:</title>
- <para> In most cases, the URL for Web access is <varname>http://server.company.com/exchange</varname>, but some systems use a different path. </para>
- </formalpara>
- <formalpara id="bsj61cb">
- <title>Public Folder Server:</title>
- <para> Specify the name of your organization&apos;s public folder server, if any.</para>
- </formalpara>
- <formalpara id="bsj61cc">
- <title>Apply Filters to New Messages in Inbox on This Server:</title>
- <para> Select this option to use filters when you visit the Inbox for this account.</para>
- </formalpara>
+ <section id="bsthqql">
+ <title>USENET News Receiving Options</title>
+ <para>If you select USENET News as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu2evz"><imageobject><imagedata format="PNG" fileref="figures/evo_usereceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bsthqws">
+ <para>Select if you want Evolution to automatically check for new mail.If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bsthr47">
+ <para>Select if you want to show folders in short notation.</para>
+ <para>For example, comp.os.linux would appear as c.o.linux.</para>
+ </listitem>
+ <listitem id="bsthr8t">
+ <para>Select if you want to show relative folder names in the subscription dialog box.</para>
+ <para>If you select to show relative folder names in the subscription page, only the name of the folder is displayed. For example the folder evolution.mail would appear as evolution.</para>
+ </listitem>
+ <listitem id="bsthrut">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
</section>
- <section id="bspcfys">
- <title>IMAP Preferences</title>
- <formalpara id="bsj5y9b">
- <title>Automatically Check for New Mail Every &hellip; Minutes:</title>
- <para> If you want Evolution to check for new e-mail automatically, select the option and specify a frequency in minutes.</para>
- </formalpara>
- <formalpara id="bsj5y9c">
- <title>Check for New Messages in All Folders:</title>
- <para> If you want Evolution to check for new messages in all your IMAP folders, select the option. This option is normally selected in combination with server-side filtering tools like procmail. </para>
- </formalpara>
- <formalpara id="bsj5y9d">
- <title>Use Custom Command to Connect to Server:</title>
- <para> Some IMAP servers require a specific custom connection sequence. Custom commands are rare; if your server requires one, your system administrator should be able to tell you.</para>
- </formalpara>
- <formalpara id="bsj5y9e">
- <title>Show Only Subscribed Folders:</title>
- <para> Select this option if you have more folders in your IMAP view than you want to read. For more information about IMAP mail and folder subscriptions, see <link linkend="usage-mail-subscriptions">IMAP Subscriptions Manager</link>.</para>
- </formalpara>
- <formalpara id="bsj5y9f">
- <title>Override Server-Supplied Namespace: </title>
- <para>If you specify a specific directory where your server stores e-mail for you. The most common values are &ldquo;mail&rdquo; and &ldquo;Mail.&rdquo;</para>
- </formalpara>
- <formalpara id="bsj5y9g">
- <title>Apply Filters to New Messages in Inbox on This Server:</title>
- <para> If you want your filters to work on this account as well as on locally downloaded e-mail, select this option.</para>
- </formalpara>
- <formalpara id="bsj5y9h">
- <title>Check New Messages for Junk Contents:</title>
- <para> Select this option if you want your IMAP e-mail filtered for junk mail.</para>
- </formalpara>
- <formalpara id="bsj5y9i">
- <title>Only Check for Junk Messages in the Inbox Folder:</title>
- <para> If you have new messages arriving in multiple folders, as you would with server-side filters, Evolution can also filter them for junk mail. This can take extra time, so if you know that those messages are not likely to be junk mail, select this option.</para>
- </formalpara>
- <formalpara id="bsj5y9j">
- <title>Automatically Synchronizing Remote Mail Locally: </title>
- <para>Select this option to have Evolution cache mail locally for offline use.</para>
- </formalpara>
- <note>
- <para>For IMAP mail servers, your system administrator might provide you with a specific namespace, which is the directory where your server stores mail for you. If you check your IMAP mail and your folder list includes files that don&rsquo;t look like mail folders, you probably need to change your mail namespace. Typical values are "mail" and "Mail.&rdquo; If you prefer, you can choose to subscribe to individual mail folders one at a time. For more information about how to use IMAP mail, see <link linkend="usage-mail-subscriptions">IMAP Subscriptions Manager</link>.</para>
- </note>
+ <section id="bsthseo">
+ <title>Local Delivery Receiving Options</title>
+ <para>If you select Local Delivery as your receiving server type, you need to specify the following options.</para>
+ <orderedlist>
+ <listitem id="bsthsnr">
+ <para>Select if you want Evolution to automatically check for new mail.If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bsthsv1">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
</section>
- <section id="bspcge6">
- <title>GroupWise Preferences:</title>
- <informalfigure id="bsj8qhd">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_receive_setup2_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <formalpara id="bsj6zaj">
- <title>Automatically Check for New Mail Every &hellip; Minutes:</title>
- <para> If you want Evolution to check for new mail automatically, select the option and specify a frequency in minutes.</para>
- </formalpara>
- <formalpara id="bsj6zak">
- <title>Check for New Messages in All Folders:</title>
- <para> If you want Evolution to check for new messages in all your GroupWise folders, select this option. This option is normally selected by default.</para>
- </formalpara>
- <formalpara id="bsj6zal">
- <title>Apply Filters to New Messages in INBOX on This Server:</title>
- <para> If you want your filters to work on this account as well as on locally downloaded mail, select this option.</para>
- </formalpara>
- <formalpara id="bsj6zam">
- <title>Automatically Synchronize Remote Mail Locally:</title>
- <para> Select this option to have Evolution cache mail locally for offline use.</para>
- </formalpara>
- <formalpara id="bsj8r2s">
- <title>Post Ofice Agent: </title>
- <para>The address of the POA server.</para>
- </formalpara>
- <formalpara id="bsj6zan">
- <title>Post Office Agent SOAP Port:</title>
- <para> Type the port number for your SOAP server. If you do not know the port number, contact your system administrator. The default SOAP port is 7181.</para>
- </formalpara>
+ <section id="bsthszn">
+ <title>MH-Format Mail Directories Receiving Options</title>
+ <para>If you select MH-Format Mail Directories as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu2gk6"><imageobject><imagedata format="PNG" fileref="figures/evo_mhreceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bsthtg0">
+ <para>Select if you want Evolution to automatically check for new mail.If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bsthth2">
+ <para>Select if you want to user the .folders folder summary file.</para>
+ </listitem>
+ <listitem id="bsthtwt">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
+ </section>
+
+ <section id="bsthu34">
+ <title>Maildir-Format Mail Directories Receiving Options</title>
+ <para>If you select Maildir-Format Mail Directories as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu2had"><imageobject><imagedata format="PNG" fileref="figures/evo_maildirreceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bsthu9o">
+ <para>Select if you want Evolution to automatically check for new mail.If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bsthuah">
+ <para>Select if you want to apply filters to new messages in the Inbox.</para>
+ <para>For additional information on filtering, see <link linkend="usage-mail-org-filters-new">Creating New Filter Rules</link>.</para>
+ </listitem>
+ <listitem id="bsthuhd">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
+ </section>
+
+ <section id="bsthukq">
+ <title>Standard Unix Mbox Spool or Directory Receiving Options</title>
+ <para>If you select Standard Unix Mbox Spool or Directory as your receiving server type, you need to specify the following options.</para>
+ <mediaobject id="bsu2i12"><imageobject><imagedata format="PNG" fileref="figures/evo_mboxreceive_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bsthuto">
+ <para>Select if you want Evolution to automatically check for new mail.If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bsthuv9">
+ <para>Select if you want to apply filters to new messages in the Inbox.</para>
+ </listitem>
+ <listitem id="bsthv0m">
+ <para>Select if you want to store status headers in Elm, Pine, and Mutt formats.</para>
+ </listitem>
+ <listitem id="bsthv90">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>When you have finished, continue with <link linkend="third-step">Sending Mail</link>.</para>
</section>
</section>
<section id="third-step">
<title>Sending Mail</title>
- <para>Now that you have entered information about how you plan to get mail, Evolution needs to know about how you want to send it. The following is a list of types of servers you can use to send mail:</para>
- <informalfigure id="bsj8ujq">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_send_setup_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <formalpara id="bsj6zao">
- <title>SMTP:</title>
- <para> Sends mail using an outbound mail server. This is the most common choice for sending mail.</para>
- </formalpara>
- <formalpara id="bsj6zap">
- <title>Sendmail:</title>
- <para> Uses the Sendmail program to send mail from your system. Sendmail is more flexible, but is not as easy to configure, so you should select this option only if you know how to set up a Sendmail service.</para>
- </formalpara>
- <para>If you choose SMTP, there are a few additional items to enter:</para>
- <formalpara id="bsj6zaq">
- <title>Host:</title>
- <para> Specify your mail sending server&apos;s name or IP address.</para>
- </formalpara>
- <formalpara id="bsj6zar">
- <title>Server Requires Authentication:</title>
- <para> If your server requires you to enter a password to send mail, select this option.</para>
- </formalpara>
- <formalpara id="bsj6zas">
- <title>Authentication Type:</title>
- <para> Unless you&apos;ve been told otherwise, should leave this set to Password. If you&apos;re not sure, ask your system administrator, ISP, or have Evolution check for you by selecting Check for Supported Types.</para>
- </formalpara>
- <formalpara id="bsj6zat">
- <title>Username:</title>
- <para> The account name you use when you log in to check your e-mail. Normally, this is the part of your e-mail address before the @ character. For Exchange servers, it is the username you use to log in to a Windows workstation at your company.</para>
- </formalpara>
- <formalpara id="bsj6zau">
- <title>Remember Password:</title>
- <para> If you prefer to not enter your password every time you check e-mail, select this option.</para>
- </formalpara>
- <para>If you choose Sendmail or GroupWise, there is one additional item to enter:</para>
- <formalpara id="bsj6zav">
- <title>User Secure Connection (SSL):</title>
- <para> You can connect to your server securely. Select one of the following: Always, Whenever Possible, or Never.</para>
- </formalpara>
+ <para>Now that you have entered information about how you plan to get mail, Evolution needs to know about how you want to send it. </para>
+ <mediaobject id="bsj8ujq"><imageobject><imagedata format="PNG" fileref="figures/evo_send_setup_a.png"/></imageobject></mediaobject>
+ <orderedlist>
+ <listitem id="bsthwcj">
+ <para>Select a server type from the Server Type list.</para>
+ <para>The following server types are available:</para>
+ <formalpara id="bsj6zap">
+ <title>Sendmail:</title>
+ <para> Uses the Sendmail program to send mail from your system. Sendmail is more flexible, but is not as easy to configure, so you should select this option only if you know how to set up a Sendmail service. </para>
+ </formalpara>
+ <formalpara id="bsj6zao">
+ <title>SMTP:</title>
+ <para> Sends mail using an outbound mail server. This is the most common choice for sending mail. If you choose SMTP, there are additional configuration options. See <link linkend="bsthwzo">SMTP Configuration</link> for more information.</para>
+ </formalpara>
+ </listitem>
+ </orderedlist>
+
+ <section id="bsthwzo">
+ <title>SMTP Configuration</title>
+ <orderedlist>
+ <listitem id="bsthxta">
+ <para>Type the host address in the Host field.</para>
+ <para>If you are unsure what your host address is, contact your system administrator.</para>
+ </listitem>
+ <listitem id="bsthy6f">
+ <para>Select if your server requires authentication.</para>
+ <para>If you selected that your server requires authentication, you will need to provide the following information:</para>
+ <orderedlist>
+ <listitem id="bsw0acl">
+ <para>Select your authentication type in the Authentication list.</para>
+ <para>or</para>
+ <para>Click Check for Supported Types to have Evolution check for supported types. Some servers do not announce the authentication mechanisms they support, so clicking this button is not a guarantee that available mechanisms actually work. </para>
+ </listitem>
+ <listitem id="bsw0aqr">
+ <para>Type your username in the Username field.</para>
+ </listitem>
+ <listitem id="bsw0ato">
+ <para>Select if you want Evolution to remember your password.</para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+ <listitem id="bsthypm">
+ <para>Select if you use a secure connection (SSL).</para>
+ </listitem>
+ <listitem id="bsti1a0">
+ <para>Click Forward.</para>
+ </listitem>
+ </orderedlist>
+ <para>Continue with <link linkend="bsti1ty">Account Management</link>.</para>
+ </section>
+ </section>
+
+ <section id="bsti1ty">
+ <title>Account Management</title>
+ <para>Now that you have finished the e-mail configuration process you need to give the account a name. The name can be any name you prefer. Type your account name on the Name field, then click Forward.</para>
+ <para>Continue with <link linkend="step-three-b">Timezone</link>.</para>
</section>
<section id="step-three-b">
<title>Timezone</title>
<para>In this step, you need to select your time zone either on the map or select from the time zone drop-down list.</para>
- <informalfigure id="bsj8v15">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_timezone_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
+ <mediaobject id="bsj8v15"><imageobject><imagedata format="PNG" fileref="figures/evo_timezone_a.png"/></imageobject></mediaobject>
+ <para>When you have finished, click Forward, then Apply. Evolution will open with your new account created.</para>
+ <para>If you want to import e-mail from another e-mail client, continue with <link linkend="fourth-step">Importing Mail</link>. If not, skip to <link linkend="ui-intro">Using Evolution: An Overview</link>.</para>
</section>
<section id="fourth-step">
<title>Importing Mail (Optional)</title>
<para>If Evolution finds e-mail or address files from another application, it offers to import them. For a full description of the import feature, see <link linkend="importing-mail">Importing Single Files</link>.</para>
- <para>Microsoft Outlook, and versions of Outlook Express after version 4, use proprietary formats that Evolution cannot read or import. To import information, you may wish to use the Export tool under Windows. See the instructions in <link linkend="outlook-migration-mail">Migrating Local Outlook Mail Folders</link>.</para>
- <para>Before importing e-mail from Netscape, make sure you have selected File &gt; Compact All Folders. If you don&rsquo;t, Evolution will import and undelete the messages in your Trash folders.</para>
+ <para>Microsoft Outlook&z-3rdParty;, and versions of Outlook Express after version 4, use proprietary formats that Evolution cannot read or import. To import information, you may want to use the Export tool under Windows. See the instructions in <link linkend="outlook-migration-mail">Migrating Local Outlook Mail Folders</link>.</para>
+ <para>Before importing e-mail from Netscape&z-3rdParty;, make sure you have selected File &gt; Compact All Folders. If you don&rsquo;t, Evolution will import and undelete the messages in your Trash folders.</para>
<tip>
<para>Exporting Files From Evolution</para>
- <para>Evolution uses standard file types for e-mail and calendar information, so you can copy those files from your <command>~/.evolution</command> directory. The file formats used are <command>mbox</command> for e-mail and <command>iCal</command> for calendar information.</para>
- <para>Contacts files are stored in a database, but can be saved as a standard <command>VCard</command>. To export contact data, open your contacts tool and select the contacts you wish to export (press Ctrl+A to select them all). Click File &gt; Save as VCard. </para>
+ <para>Evolution uses standard file types for e-mail and calendar information, so you can copy those files from your <command>~/.evolution</command> directory. The file formats used are <command>mbox</command> for e-mail and iCal for calendar information.</para>
+ <para>Contacts files are stored in a database, but can be saved as a standard vCard&z-3rdParty;. To export contact data, open your contacts tool and select the contacts you want to export (press Ctrl+A to select them all). Click File &gt; Save as VCard. </para>
</tip>
</section>
</section>
</section>
- <section id="bsekq8r">
- <title>Command Line Options</title>
- <para>Evolution has a number of command line options that you can use. You can find the full list by typing the command <command>man evolution</command> or <command>evolution --help</command>. The most important command line options are: </para>
- <informaltable>
- <tgroup cols="2">
- <colspec colwidth="2.844in" colname="1" colnum="1"/>
- <colspec colwidth="2.844in" colname="2" colnum="2"/>
- <thead>
- <row id="bsl8i01">
- <entry colname="1">
- <para>Command</para>
- </entry>
- <entry colname="2">
- <para>Discription</para>
- </entry>
- </row>
- </thead>
- <tbody>
- <row id="bsl8i02">
- <entry colname="1">
- <para><command>evolution --offline</command></para>
- </entry>
- <entry colname="2">
- <para>Starts Evolution in offline mode.</para>
- </entry>
- </row>
- <row id="bsl8i03">
- <entry colname="1">
- <para>evolution mailto:<varname>joe@somewhere.net</varname></para>
- </entry>
- <entry colname="2">
- <para>Starts Evolution and begins composing a message to the e-mail address listed.</para>
- </entry>
- </row>
- <row id="bsl8i04">
- <entry colname="1">
- <para><command>evolution -c mail</command></para>
- </entry>
- <entry colname="2">
- <para>Starts Evolution in mail mode.</para>
- </entry>
- </row>
- <row id="bsl8i05">
- <entry colname="1">
- <para><command>evolution -c calendar</command></para>
- </entry>
- <entry colname="2">
- <para>Starts Evolution in calendar mode.</para>
- </entry>
- </row>
- <row id="bsl8i06">
- <entry colname="1">
- <para><command>evolution -c contacts</command></para>
- </entry>
- <entry colname="2">
- <para>Starts Evolution in contacts mode.</para>
- </entry>
- </row>
- <row id="bsl8i07">
- <entry colname="1">
- <para><command>evolution --force-shutdown</command></para>
- </entry>
- <entry colname="2">
- <para>Forces every part of Evolution to shutdown immediately. </para>
- </entry>
- </row>
- <row id="bsl8i08">
- <entry colname="1">
- <para><command>evolution&rdquo;%s&rdquo;</command></para>
- </entry>
- <entry colname="2">
- <para>Makes Evolution your default e-mail handler for your Web browser and in the GNOME Control Center.</para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
-
<section id="ui-intro">
- <title>About the Evolution Main Window </title>
- <para>Now that the first-run configuration has finished, you&apos;re ready to begin using Evolution. Here&apos;s a quick explanation of what&apos;s happening in your main Evolution window.</para>
- <informalfigure id="bsaelj0">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_mail_callout_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <para> <emphasis>Menu Bar</emphasis></para>
+ <title>Using Evolution: An Overview</title>
+ <para>Now that the first-run configuration has finished, you&apos;re ready to begin using Evolution. Here&apos;s a quick explanation of what&apos;s happening in your main Evolution window. </para>
+ <mediaobject id="bsaelj0"><imageobject><imagedata format="PNG" fileref="figures/evo_mail_callout_a.eps"/></imageobject></mediaobject>
+ <bridgehead id="bt4cke6">Menu bar</bridgehead>
<para>The menu bar gives you access to nearly all of Evolution features. For additional information, see <link linkend="usage-mainwindow-menubar">The Menu Bar</link>.</para>
- <para><emphasis>Toolbar</emphasis></para>
+ <bridgehead id="bt4cke7">Folder list</bridgehead>
+ <para>The folder list gives you a list of the available folders for each account. To see the contents of a folder, click on the folder name and the contents are displayed in the e-mail list.</para>
+ <bridgehead id="bt4cke8">Toolbar</bridgehead>
<para>The toolbar gives you fast and easy access to the frequently used features in each component.</para>
- <para><emphasis>Shortcut Bar</emphasis></para>
+ <bridgehead id="bt4cke9">Search tool</bridgehead>
+ <para>The search tool lets you search your e-mail, contacts, calendar, and tasks to easily find what you&rsquo;re looking for.</para>
+ <bridgehead id="bt4ckea">Message list</bridgehead>
+ <para>The message list displays a list of e-mails that you have received. To view an e-mail in the e-mail preview pane, click the e-mail in the e-mail list.</para>
+ <bridgehead id="bt4ckeb">Shortcut buttons</bridgehead>
<para>The shortcut bar lets you switch between folders and between Evolution tools. At the bottom of the shortcut bar there are buttons that let you switch tools, and above that is a list of all the available folders for the current tool. If you have the Evolution Connector for Microsoft Exchange installed, you have an Exchange button in addition to buttons for the other tools. For additional information, see <link linkend="usage-mainwindow-shortcutbar">The Shortcut Bar</link>.</para>
- <para><emphasis>Status Bar</emphasis></para>
- <para>The status bar periodically displays a message, or tells you the progress of a task. This most often happens when you&apos;re checking or sending e-mail. These progress queues are shown here, in the status bar. The Online/Offline indicator is here, too, in the lower left of the window.</para>
- <para><emphasis>Search Tool</emphasis></para>
- <para>The search tool lets you search through your e-mail to easily find what you&rsquo;re looking for.</para>
+ <bridgehead id="bt4ckec">Status bar</bridgehead>
+ <para>The status bar periodically displays a message, or tells you the progress of a task. This most often happens when you&apos;re checking or sending e-mail. These progress queues are shown in the figure above. The Online/Offline indicator is here, too, in the lower left of the window.</para>
+ <bridgehead id="bt4cked">Preview pane</bridgehead>
+ <para>The preview pane displays the contents of the e-mail that is selected in the e-mail list.</para>
+
+ <section id="usage-mainwindow-menubar">
+ <title>The Menu Bar</title>
+ <para>The menu bar&apos;s contents always provide all the possible actions for any given view of your data. If you&apos;re looking at your Inbox, most of the menu items relate to e-mail. Some content will relate to other components of Evolution and some, especially those in the File menu, relate to the application as a whole. </para>
+ <formalpara id="bs7g1fu">
+ <title>File: </title>
+ <para>Anything related to a file or to the operations of the application usually falls under this menu, such as creating things, saving them to disk, printing them, and quitting the program itself. </para>
+ </formalpara>
+ <formalpara id="bs7g25f">
+ <title>Edit: </title>
+ <para>Holds useful tools that help you edit text and move it around.</para>
+ </formalpara>
+ <formalpara id="bs7g2ew">
+ <title>View: </title>
+ <para>Lets you decide how Evolution should look. Some of the features control the appearance of Evolution as a whole, and others the way a particular kind of information appears. </para>
+ </formalpara>
+ <formalpara id="bs7g2jk">
+ <title>Actions: </title>
+ <para>Holds actions that can be applied to a message. If there is only one target for the action, such as replying to a message, you can normally find it in the Actions menu.</para>
+ </formalpara>
+ <formalpara id="bs7g2vh">
+ <title>Tools: </title>
+ <para>Lets you access the settings and configuration options in the Tools menu. You can also find things like filter settings and the Virtual Folder editor.</para>
+ </formalpara>
+ <formalpara id="bs7g3bu">
+ <title>Search: </title>
+ <para>Lets you search for messages, or for phrases within a message. You can also see previous searches you have made. In addition to the Search menu, there is a text entry box in the toolbar that you can use to search for messages.</para>
+ </formalpara>
+ <formalpara id="bs7g3gq">
+ <title>Help: </title>
+ <para>Opens the Evolution Help files.</para>
+ </formalpara>
+ </section>
<section id="usage-mainwindow-shortcutbar">
<title>The Shortcut Bar</title>
- <para>Evolution&apos;s most important job is to give you access to your information and help you use it quickly. One way it does that is through the shortcut bar, the column on the left side of the main window. The buttons, such as Mail and Contacts, are the shortcuts. Above them is a list of folders for the current Evolution tool.</para>
- <para>The folder list organizes your e-mail, calendars, contact lists, and task lists in a tree, similar to a <link linkend="filetree">file tree</link>. Most people will find one to four folders at the base of the tree, depending on the tool and their system configuration. Each Evolution tool has at least one, called On This Computer, for local information. For example, the folder list for the e-mail tool shows any remote e-mail storage you have set up, plus local folders and vFolders, or virtual folders, discussed in <link linkend="usage-mail-organize-vfolders">Using vFolders</link>. </para>
- <para>If you get large amounts of e-mail, you might want more folders than just your Inbox; you can also create multiple calendar, task, or contacts folders. </para>
+ <para>Evolution&apos;s most important job is to give you access to your information and help you use it quickly. One way it does that is through the shortcut bar, which is the column on the left side of the main window. The buttons, such as Mail and Contacts, are the shortcuts. Above them is a list of folders for the current Evolution tool.</para>
+ <para>The folder list organizes your e-mail, calendars, contact lists, and task lists in a tree, similar to a <link linkend="filetree">file tree</link>. Most people will find one to four folders at the base of the tree, depending on the tool and their system configuration. Each Evolution tool has at least one, called On This Computer, for local information. For example, the folder list for the e-mail tool shows any remote e-mail storage you have set up, plus local folders and vFolders, or virtual folders, which are discussed in <link linkend="usage-mail-organize-vfolders">Using vFolders</link>. </para>
+ <para>If you get large amounts of e-mail, you might want more folders than just your Inbox. You can create multiple calendar, task, or contacts folders. </para>
<para>To create a new folder:</para>
- <procedure>
- <step id="bs7fael">
- <para>Right-click on the list of folders, then click New Folder.</para>
- </step>
- <step id="bs7faof">
+ <orderedlist>
+ <listitem id="bs7fael">
+ <para>Right-click the list of folders, then click New Folder.</para>
+ </listitem>
+ <listitem id="bs7faof">
<para>Type the name of the folder in the Folder Name field.</para>
- </step>
- <step id="bs7faud">
+ </listitem>
+ <listitem id="bs7faud">
<para>Select the location of the new folder.</para>
- </step>
- </procedure>
+ </listitem>
+ <listitem id="bspunvq">
+ <para>Click OK.</para>
+ </listitem>
+ </orderedlist>
<section id="subfolders">
<title>Arranging Folders and Subfolders</title>
@@ -551,107 +735,144 @@
</section>
</section>
- <section id="usage-mainwindow-menubar">
- <title>The Menu Bar</title>
- <para>The menu bar&apos;s contents always provide all the possible actions for any given view of your data. If you&rsquo;re looking at your Inbox, most of the menu items relate to e-mail; some will relate to other components of Evolution and some, especially those in the File menu, relate to the application as a whole. </para>
- <formalpara id="bs7g1fu">
- <title>File: </title>
- <para>Anything related to a file or to the operations of the application usually falls under this menu, such as creating things, saving them to disk, printing them, and quitting the program itself. </para>
- </formalpara>
- <formalpara id="bs7g25f">
- <title>Edit: </title>
- <para>Holds useful tools that help you edit text and move it around.</para>
- </formalpara>
- <formalpara id="bs7g2ew">
- <title>View: </title>
- <para>Lets you decide how Evolution should look. Some of the features control the appearance of Evolution as a whole, and others the way a particular kind of information appears.</para>
- </formalpara>
- <formalpara id="bs7g2jk">
- <title>Actions: </title>
- <para>Holds actions that can be applied to a message. If there is only one target for the action, such as replying to a message, you can normally find it in the Actions menu.</para>
- </formalpara>
- <formalpara id="bs7g2vh">
- <title>Tools: </title>
- <para>Lets you access the settings and configuration options in the Tools menu. You can also find things like filter settings and the Virtual Folder editor.</para>
- </formalpara>
- <formalpara id="bs7g3bu">
- <title>Search: </title>
- <para>Lets you search for messages, or for phrases within a message. You can also see previous searches you have made. In addition to the Search menu, there is a text entry box in the toolbar that you can use to search for messages.</para>
- </formalpara>
- <formalpara id="bs7g3gq">
- <title>Help: </title>
- <para>Opens the Evolution Help files.</para>
- </formalpara>
- </section>
-
<section id="basics-mail">
- <title>Introducing E-Mail</title>
+ <title>E-Mail</title>
<para>Evolution e-mail is like other e-mail programs in several ways:</para>
<itemizedlist>
<listitem>
- <para>It can sort and organize your e-maile-mail in a wide variety of ways with folders, searches, and filters. </para>
- </listitem>
- <listitem>
<para>It can send and receive e-mail in HTML or as plain text, and makes it easy to send and receive multiple file attachments. </para>
</listitem>
<listitem>
<para>It supports multiple e-mail sources, including <link linkend="imap">IMAP</link>, <link linkend="pop">POP3</link>, and local mbox or mh spools and files created by other e-mail programs.</para>
</listitem>
<listitem>
+ <para>It can sort and organize your e-mail in a wide variety of ways with folders, searches, and filters. </para>
+ </listitem>
+ <listitem>
<para>It lets you guard your privacy with encryption.</para>
</listitem>
</itemizedlist>
- <para>However, Evolution has some important differences from other e-mail programs. First, it&rsquo;s built to handle very large amounts of e-mail. The <link linkend="usage-mail-organize-spam">junk e-mail</link>, message <link linkend="usage-mail-organize-filters">filtering</link> and <link linkend="usage-mail-organize-search">searching</link> functions were built for speed and efficiency on large volumes of e-mail. There&apos;s also the <link linkend="usage-mail-organize-vfolders">vFolder</link>, an advanced organizational feature not found in some e-mail clients. If you get a lot of e-mail, or if you keep every message you get in case you need to refer to it later, you&apos;ll find this feature especially useful. Here&apos;s a quick explanation of what&apos;s happening in your main Evolution e-mail window. </para>
- <informalfigure id="usage-mail-intro-fig">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/mail_mainwindow_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <para><emphasis>E-Mail List</emphasis></para>
+ <para>However, Evolution has some important differences from other e-mail programs. First, it&apos;s built to handle very large amounts of e-mail. The <link linkend="usage-mail-organize-spam">junk e-mail</link>, message <link linkend="usage-mail-organize-filters">filtering</link> and <link linkend="usage-mail-organize-search">searching</link> functions were built for speed and efficiency. There&apos;s also the <link linkend="usage-mail-organize-vfolders">vFolder</link>, an advanced organizational feature not found in some e-mail clients. If you get a lot of e-mail, or if you keep every message you get in case you need to refer to it later, you&apos;ll find this feature especially useful. Here&apos;s a quick explanation of what&apos;s happening in your main Evolution e-mail window. </para>
+ <mediaobject id="usage-mail-intro-fig"><imageobject><imagedata format="PNG" fileref="figures/evo_email_a.png"/></imageobject></mediaobject>
+ <bridgehead id="bt4ckee">Message list</bridgehead>
<para>The message list displays all the e-mails that you have. This includes all your read and unread messages, and e-mail that is flagged to be deleted.</para>
- <para><emphasis>E-Mail Preview</emphasis></para>
+ <bridgehead id="bt4ckef">Preview pane</bridgehead>
<para>This is where your e-mail is displayed.</para>
<para>If you find the view pane too small, you can resize the pane, enlarge the whole window, or double-click the message in the message list to have it open in a new window. To change the size of a pane, drag on the divider between the two panes. </para>
<para>As with folders, you can right-click messages in the message list and get a menu of possible actions, including moving or deleting them, creating filters or vFolders based on them, and marking them as junk mail.</para>
<para>Most of the e-mail-related actions you want to perform are listed in the Actions menu in the menu bar. The most frequently used ones, like Reply and Forward, also appear as buttons in the toolbar. Most of them are also located in the right-click menu and as keyboard shortcuts.</para>
- <para>For an in-depth guide to the e-mail capabilities of Evolution, read <link linkend="usage-mail">Getting and Sending E-Mail</link>.</para>
+ <para>For an in-depth guide to the e-mail capabilities of Evolution, read <link linkend="usage-mail">Sending and Receiving E-Mail</link>.</para>
</section>
<section id="basics-calendar">
- <title>Introducing the Calendar</title>
- <para>To begin using the calendar, click Calendar in the shortcut bar. By default, the calendar shows today&apos;s schedule on a ruled background. At the upper right, there&apos;s a monthly calendar you can use to switch days. Below that, there&rsquo;s a Task pad, where you can keep a list of tasks separate from your calendar appointments.</para>
- <informalfigure id="usage-calendar-fig">
- <mediaobject><imageobject><imagedata format="GIF" fileref="figures/evo_cal_callout_a.gif"/></imageobject></mediaobject>
-
- </informalfigure>
- <para><emphasis>Appointment List</emphasis></para>
+ <title>The Calendar</title>
+ <para>To begin using the calendar, click Calendar in the shortcut bar. By default, the calendar shows today&apos;s schedule on a ruled background. At the upper right, there&apos;s a monthly calendar you can use to switch days. Below that, there&rsquo;s a Task list, where you can keep a list of tasks separate from your calendar appointments.</para>
+ <mediaobject id="usage-calendar-fig"><imageobject><imagedata format="GIF" fileref="figures/evo_cal_callout_a.gif"/></imageobject></mediaobject>
+ <bridgehead id="bt4ckeg">Appointment list</bridgehead>
<para>The appointment list displays all your scheduled appointments.</para>
- <para><emphasis>Task List</emphasis></para>
- <para>Tasks are distinct from appointments because they generally don&rsquo;t have times associated with them. You can see a larger view of your task list by clicking Tasks in the shortcut bar.</para>
- <para><emphasis>Month Pane</emphasis></para>
+ <bridgehead id="bt4ckeh">Month pane</bridgehead>
<para>The month pane is a small view of a calendar month. To display additional months, drag the column border to the left. You can also select a range of days in the month pane to display a custom range of days in the appointment list.</para>
+ <bridgehead id="bt4ckei">Task list</bridgehead>
+ <para>Tasks are distinct from appointments because they generally don&apos;t have times associated with them. You can see a larger view of your task list by clicking Tasks in the shortcut bar.</para>
<para>For more information about the calendar, see <link linkend="usage-calendar">Evolution Calendar</link>.</para>
</section>
<section id="basics-contacts">
- <title>Using the Contacts Tool</title>
- <para>The Evolution contacts tool can handle all of the functions of an address book or phone book. However, it&rsquo;s easier to update Evolution than it is to change an actual paper book, in part because Evolution can synchronize with Palm OS devices and use <link linkend="ldap">LDAP</link> directories on a network.</para>
- <para>Another advantage of the Evolution contacts tool is its integration with the rest of the application. For example, you can right-click on an e-mail address in Evolution mail to create a contact entry instantly.</para>
- <para>To use the contacts tool, click Contacts in the shortcut bar. By default, the display shows all your contacts in alphabetical order, in a <link linkend="minicard">minicard</link> view. You can select other views from the View menu, and adjust the width of the columns by clicking and dragging the gray column dividers.</para>
+ <title>The Contacts Tool</title>
+ <para>The Evolution contacts tool can handle all of the functions of an address book or phone book. However, it&rsquo;s easier to update Evolution than it is to change an actual paper book, in part because Evolution can synchronize with Palm OS&z-3rdParty; devices and use <link linkend="ldap">LDAP</link> directories on a network.</para>
+ <para>Another advantage of the Evolution contacts tool is its integration with the rest of the application. For example, you can right-click on an e-mail address in Evolution mail to instantly create a contact entry.</para>
+ <para>To use the contacts tool, click Contacts in the shortcut bar. By default, the display shows all your contacts in alphabetical order, in a minicard view. You can select other views from the View menu, and adjust the width of the columns by clicking and dragging the gray column dividers.</para>
<para>The contacts tool looks like this:</para>
- <informalfigure id="usage-contact-fig">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/contacts_mainwindow_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <para><emphasis>Contact List</emphasis></para>
+ <mediaobject id="usage-contact-fig"><imageobject><imagedata format="PNG" fileref="figures/contacts_mainwindow_a.png"/></imageobject></mediaobject>
+ <para><emphasis>Contact list</emphasis></para>
<para>The largest section of the contacts display shows a list of individual contacts. You can also search the contacts in the same way that you search e-mail folders, using the search tool on the right side of the toolbar.</para>
- <para>For detailed instructions on how to use the address book, read <link linkend="usage-contact">Evolution Contacts: the Address Book</link></para>
+ <para>For detailed instructions on how to use the address book, read <link linkend="usage-contact">Evolution Contacts: the Address Book</link>.</para>
</section>
</section>
+
+ <section id="bsekq8r">
+ <title>Command Line Options</title>
+ <para>Evolution has a number of command line options that you can use. You can find the full list by entering the command <command>man evolution</command> or <command>evolution --help</command>. The most important command line options are: </para>
+ <informaltable>
+ <tgroup cols="2">
+ <colspec colwidth="2.844*" colname="1" colnum="1"/>
+ <colspec colwidth="2.844*" colname="2" colnum="2"/>
+ <thead valign="top">
+ <row id="bsl8i01">
+ <entry colname="1">
+ <para>Command</para>
+ </entry>
+ <entry colname="2">
+ <para>Description</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row id="bsl8i02">
+ <entry colname="1">
+ <para><command>evolution --offline</command></para>
+ </entry>
+ <entry colname="2">
+ <para>Starts Evolution in offline mode.</para>
+ </entry>
+ </row>
+ <row id="bsl8i03">
+ <entry colname="1">
+ <para><command>evolution mailto:<varname>joe@somewhere.net</varname></command></para>
+ </entry>
+ <entry colname="2">
+ <para>Starts Evolution and begins composing a message to the e-mail address listed.</para>
+ </entry>
+ </row>
+ <row id="bsl8i04">
+ <entry colname="1">
+ <para><command>evolution -c mail</command></para>
+ </entry>
+ <entry colname="2">
+ <para>Starts Evolution in mail mode.</para>
+ </entry>
+ </row>
+ <row id="bsl8i05">
+ <entry colname="1">
+ <para><command>evolution -c calendar</command></para>
+ </entry>
+ <entry colname="2">
+ <para>Starts Evolution in calendar mode.</para>
+ </entry>
+ </row>
+ <row id="bsl8i06">
+ <entry colname="1">
+ <para><command>evolution -c contacts</command></para>
+ </entry>
+ <entry colname="2">
+ <para>Starts Evolution in contacts mode.</para>
+ </entry>
+ </row>
+ <row id="bsl8i07">
+ <entry colname="1">
+ <para><command>evolution --force-shutdown</command></para>
+ </entry>
+ <entry colname="2">
+ <para>Forces every part of Evolution to shut down immediately. </para>
+ </entry>
+ </row>
+ <row id="bsl8i08">
+ <entry colname="1">
+ <para><command>evolution &rdquo;%s&rdquo;</command></para>
+ </entry>
+ <entry colname="2">
+ <para>Makes Evolution your default e-mail handler for your Web browser and in the GNOME Control Center.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
</chapter>
<chapter id="usage-mail">
- <title>Getting and Sending E-Mail</title>
- <para>This section, and <link linkend="usage-mail-organize">Organizing Your E-Mail</link>, provides you with an in-depth guide to the capabilities of Evolution&trade; as a mail client. For information about how to customize your mail account, see <link linkend="config-prefs-mail">Mail Preferences</link>.</para>
+ <title>Sending and Receiving E-Mail</title>
+ <para>This section, and <link linkend="usage-mail-organize">Organizing Your E-Mail</link>, provide you with an in-depth guide to the capabilities of Evolution&trade; as a mail client. For information about how to customize your mail account, see <link linkend="config-prefs-mail">Mail Preferences</link>.</para>
<itemizedlist>
<listitem>
<para><link linkend="usage-mail-getnsend-read">Reading Mail</link></para>
@@ -675,10 +896,10 @@
<section id="usage-mail-getnsend-read">
<title>Reading Mail</title>
- <para>If you are not already viewing mail, switch to the mail tool by clicking Mail in the shortcut bar. To read a message, select it in the message list; if you&apos;d like to see it in its own window, either double-click it, press Enter, or press Ctrl+O.</para>
+ <para>If you are not already viewing mail, switch to the mail tool by clicking the Mail shortcut button, or press Ctrl+F1. To read a message, select it in the message list; if you&apos;d like to see it in its own window, either double-click it, press Enter, or press Ctrl+O.</para>
<tip>
<para>To read mail with the keyboard, you can click the Spacebar to page down while you&rsquo;re reading an e-mail, and press Backspace to page up in an e-mail. </para>
- <para>Navigate the message list by using the arrow keys on the keyboard. To go to the next and previous unread messages, press the period (.) or comma (,) keys. On most keyboards, these keys are also marked with the &gt; and &lt; symbols, which is a convenient way to remember that they move you forward and backward in your message list. You can also use the close bracket (]) for the next unread message, and the open bracket ([) for the previous unread message.</para>
+ <para>Navigate the message list by using the arrow keys on the keyboard. To go to the next and previous unread messages, press the period (.) or comma (,) keys. On most keyboards, these keys are also marked with the &gt; and &lt; symbols, which is a convenient way to remember that they move you forward and backward in your message list. You can also use the close square bracket (]) for the next unread message, and the open square bracket ([) for the previous unread message.</para>
</tip>
<section id="usage-mail-listorder">
@@ -686,24 +907,22 @@
<para>Evolution helps you work by letting you sort your e-mail. To sort by sender, subject, or date, click on the bars with those labels at the top of the message list. The direction of the arrow next to the label indicates the direction of the sort. Click again, to sort them in reverse order. For example, click Date to sort messages by date from oldest to newest. Click again, and Evolution sorts the list from newest to oldest. You can also right-click the message header bars to get a set of sorting options, and to add or remove columns from the message list. You can find detailed instructions on how to customize your message display columns in <link linkend="usage-mail-organize-columns">Sorting Mail with Column Headers</link>.</para>
<para>To look at the complete headers for a message, click View &gt; Message Display &gt; Show Full Headers. To see all message data, click View &gt; Message Display &gt; Show E-Mail Source. </para>
<para>You can also choose a threaded message view. Click View &gt; Threaded Message List to turn the threaded view on or off. When you select this option, Evolution groups the replies to a message with the original, so you can follow the thread of a conversation from one message to the next.</para>
- <informalfigure id="bs4aw7h">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/mail-threaded.png"/></imageobject></mediaobject>
-
- </informalfigure>
+ <mediaobject id="bs4aw7h"><imageobject><imagedata format="PNG" fileref="figures/mail-threaded.png"/></imageobject></mediaobject>
+
</section>
<section id="usage-mail-getnsend-delete">
<title>Deleting Mail</title>
- <para>After you read your mail, you might want to delete it. To delete a message, select it and press the Delete key, click the Trash button, or right-click the message, then click Delete. </para>
+ <para>After you read your mail, you might want to delete it. To delete a message, select it and press the Delete key, click the Trash button, press Ctrl+D, or right-click the message, then click Delete. </para>
<para>When you press Delete or click the Trash button, your mail isn&rsquo;t actually deleted, but is marked for deletion. Your e-mail is recoverable until you have expunged your mail. When you expunge a folder, you remove all the mail that you have marked for deletion. To show deleted messages, click View &gt; Hide Deleted Messages. You can also find deleted messages in the your Trash folder. </para>
<para>To permanently erase all the deleted messages in a folder, click Actions &gt; Expunge or press Ctrl+E. To expunge all folders at once, click Actions &gt; Empty Trash.</para>
- <para>The trash is actually a vFolder.Both local and IMAP Trash folders are actually vFolders that display all messages you have marked for later deletion. For more information about vFolders, see <link linkend="usage-mail-organize-vfolders">Using vFolders</link>. Because emptying your trash expunges the messages in your Trash folder, emptying Trash is the same as expunging deleted mail from all your folders.</para>
- <para>This is not, however, true for the Trash folder on Exchange servers, which behaves just the same as it does in Outlook, it is a normal folder with actual messages in it.</para>
+ <para>Both local and IMAP Trash folders are actually vFolders that display all messages you have marked for later deletion. For more information about vFolders, see <link linkend="usage-mail-organize-vfolders">Using vFolders</link>. Because emptying your trash expunges the messages in your Trash folder, emptying Trash is the same as expunging deleted mail from all your folders.</para>
+ <para>However, this is not true for the Trash folder on Exchange servers, which behaves just the same as it does in Outlook. It is a normal folder with actual messages in it.</para>
</section>
<section id="usage-mail-getnsend-undelete">
<title>Undeleting Messages</title>
- <para>You can undelete a message that has been deleted but not expunged. To undelete a message, select the message, then Ctrl+U, or click Edit &gt; Undelete.</para>
+ <para>You can undelete a message that has been deleted but not expunged. To undelete a message, select the message, then press Ctrl+U, or click Edit &gt; Undelete.</para>
<para>If you have marked a message for deletion, undeleting it unmarks it, and the message is removed from the Trash folder. You cannot undelete messages that have been expunged. </para>
</section>
</section>
@@ -711,32 +930,44 @@
<section id="usage-mail-getnsend-get">
<title>Checking for New Mail</title>
<para>To check your mail, click Send/Receive in the toolbar. If you haven&apos;t created any mail accounts yet, the setup assistant asks you for the information it needs to check your e-mail. For information on creating mail accounts, see <link linkend="usage-mainwindow-starting">Starting Evolution for the First Time</link>.</para>
- <para>If this is your first time checking mail, or you haven&apos;t asked Evolution to store your password, you are prompted for the password. Enter your password download your e-mail.</para>
+ <para>If this is your first time checking mail, or you haven&apos;t asked Evolution to store your password, you are prompted for the password. Enter your password to download your e-mail.</para>
<para>If you get an error message instead of mail, you probably need to check your network settings. To learn how to do that, see <link linkend="config-prefs-mail">Mail Preferences</link>, or ask your system administrator. </para>
<section id="bsempjs">
<title>Sharing Mailboxes with Other Mail Programs</title>
<para>If you want to use Evolution and another e-mail client, such as Mutt, at the same time, use the following procedure:</para>
- <procedure>
- <step id="bsen3rq">
+ <orderedlist>
+ <listitem id="bsen3rq">
<para>Download your mail in the other application as you would normally.</para>
- </step>
- <step id="bsen3u8">
- <para>In Evolution, click Tools &gt; Settings then click Mail Accounts. Select the account you want to use to share mail and click Edit. You might want to create a new account just for this source of mail by clicking New.</para>
- </step>
- <step id="bsen3wh">
+ </listitem>
+ <listitem id="bsen3u8">
+ <para>In Evolution, click Edit &gt; Preferences, then click Mail Accounts. Select the account you want to use to share mail and click Edit. You might want to create a new account just for this source of mail by clicking New.</para>
+ </listitem>
+ <listitem id="bsen3wh">
<para>Under the Receiving Mail tab, select the type of mail file that your other mail application uses, then specify the full path to that location. A typical choice would be mbox files, with the path /home/<varname>username</varname>/Mail/.</para>
- </step>
- <step id="bsen3yh">
+ </listitem>
+ <listitem id="bsen3yh">
<para>Click OK.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
+ <para>You can only use one mail client at a time. The mail files are locked by the mail program that is currently using them, so the mail files can&apos;t be accessed by any other mail program.</para>
</section>
<section id="usage-mail-getnsend-get-news">
<title>Using Evolution for News</title>
<para>USENET newsgroups are similar to mail, so it&apos;s often convenient to read news and mail side by side. You can add a news source, called an NNTP server, the same way you would a new e-mail account, selecting USENET News as the source type. The news server appear as a remote mail server, and each news group works like an IMAP folder. When you click Send/Receive, Evolution also checks for news messages.</para>
- <para>To subscribe to a news group, click Tools &gt; Subscribe To Folders, select your NNTP account, then select the groups you want to subscribe to.</para>
+ <para>When you create a news group account, you are not subscribed to any groups. To subscribe to a news group:</para>
+ <orderedlist>
+ <listitem id="bsx1euy">
+ <para>Click Tools &gt; Subscribe To Folders.</para>
+ </listitem>
+ <listitem id="bsx1ezk">
+ <para>Select your NNTP account, select the groups you want to subscribe to, then click Subscribe.</para>
+ </listitem>
+ <listitem id="bsx1g1g">
+ <para>Click Close.</para>
+ </listitem>
+ </orderedlist>
</section>
<section id="usage-mail-getnsend-get-attach">
@@ -745,28 +976,31 @@
<section id="usage-mail-getnsend-get-attach-actions">
<title>Saving or Opening Attachments</title>
- <para>If you get an attachment with an e-mail message, Evolution can help you save it or open it with the appropriate applications.</para>
+ <para>If you get an e-mail message with an attachment, Evolution can help you save the attachment or open it with the appropriate applications.</para>
<para>To save an attachment to disk:</para>
- <procedure>
- <step id="bsen45z">
+ <orderedlist>
+ <listitem id="bsen45z">
<para>Click the down-arrow on the attachment icon, then click Save As.</para>
- </step>
- <step id="bsen4bg">
+ </listitem>
+ <listitem id="bsen4bg">
<para>Select a location and name for the file.</para>
- </step>
- <step id="bsen4do">
+ </listitem>
+ <listitem id="bsen4do">
<para>Click OK.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>To open an attachment using another application: </para>
- <procedure>
- <step id="bsen4ia">
+ <orderedlist>
+ <listitem id="bsen4ia">
<para>Click the down-arrow on the attachment icon.</para>
- </step>
- <step id="bsen4kb">
- <para>Select the program to open the attachment.</para>
- </step>
- </procedure>
+ </listitem>
+ <listitem id="bsen4kb">
+ <para>Select the application to open the attachment.</para>
+ </listitem>
+ <listitem id="bspur27">
+ <para>Click OK.</para>
+ </listitem>
+ </orderedlist>
<para>The options available for an attachment vary depending on the type of attachment and the applications your system has installed. For example, attached word processor files can be opened in OpenOffice.org or another word processor, while compressed archive files can be opened in the File Roller application.</para>
</section>
@@ -775,79 +1009,112 @@
<para>When someone sends you HTML mail that includes an image in the body of the message (for example, the welcome message in your Inbox), Evolution displays the image inside the message. You can create messages like this by using the Insert Image tool in the message composer. Alternately, just drag an image into the message composition area.</para>
<para>Some images are links in a message, rather than being part of the message. Evolution can download those images from the Internet, but does not do so unless you request it specifically. This is because remotely hosted images can be slow to load and display, and can even be used by spammers to track who reads the e-mail. Not loading images automatically helps protect your privacy.</para>
<para>To load the images for one message:</para>
- <procedure>
- <step id="bsen9jh">
+ <orderedlist>
+ <listitem id="bsen9jh">
<para>Click View &gt; Message Display &gt; Load Images.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>To set the default action for loading images:</para>
- <procedure>
- <step id="bsenabn">
- <para>Click Tools &gt; Settings, then click Mail Preference.</para>
- </step>
- <step id="bsenajw">
+ <orderedlist>
+ <listitem id="bsenabn">
+ <para>Click Edit &gt; Preferences, then click Mail Preference.</para>
+ </listitem>
+ <listitem id="bsenajw">
<para>Click the HTML Mail tab.</para>
- </step>
- <step id="bsenaou">
+ </listitem>
+ <listitem id="bsenaou">
<para>Select one of the items: Never Load Images Off the Net, Load Images in Mail From Contacts, or Always Load Images Off the Net.</para>
- </step>
- <step id="bsenb3x">
+ </listitem>
+ <listitem id="bsenb3x">
<para>Click Close.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>If you use an HTTP proxy (as in many large organizations), Evolution must be able to find it through the gnome-vfs subsystem before it can load images from the Internet.</para>
<para> To set your proxy in KDE:</para>
- <procedure>
- <step id="bsenco2">
+ <orderedlist>
+ <listitem id="bsenco2">
<para>Click the menu icon &gt; System &gt; Configuration &gt; Yast.</para>
- </step>
- <step id="bsendck">
+ </listitem>
+ <listitem id="bsendck">
<para>Click Network Services, then click Proxy.</para>
- </step>
- <step id="bsendfs">
+ </listitem>
+ <listitem id="bsendfs">
<para>Specify your proxy settings (if you don&apos;t know your proxy settings, contact your ISP or system administrator).</para>
- </step>
- <step id="bsfkfjy">
+ </listitem>
+ <listitem id="bsfkfjy">
<para>Click Finish, then click Close.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>To set your proxy in GNOME:</para>
- <procedure>
- <step id="bsfkg0z">
+ <orderedlist>
+ <listitem id="bsfkg0z">
<para>Click System &gt; Administrative Settings (enter your root password if needed).</para>
- </step>
- <step id="bsfkyen">
+ </listitem>
+ <listitem id="bsfkyen">
<para>Click Network Services, then click Proxy.</para>
- </step>
- <step id="bsfkhdi">
+ </listitem>
+ <listitem id="bsfkhdi">
<para>Specify your proxy settings (if you don&apos;t know your proxy settings, contact your ISP or system administrator).</para>
- </step>
- <step id="bsfkhio">
+ </listitem>
+ <listitem id="bsfkhio">
<para>Click Finish, then click Close.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
</section>
</section>
<section id="usage-mail-getnsend-send">
<title>Composing New E-Mail Messages</title>
- <para>You can start writing a new e-mail message by clicking File &gt; New &gt; Mail Message, or, while you are in the Mail tool, pressing Ctrl+N, or by clicking New in the toolbar.</para>
- <informalfigure id="usage-mail-newmsg-fig">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_newmess_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
+ <para>You can start writing a new e-mail message by clicking File &gt; New &gt; Mail Message, or press Ctrl+N when in the mailing tool, or by clicking New in the toolbar.</para>
+ <mediaobject id="usage-mail-newmsg-fig"><imageobject><imagedata format="PNG" fileref="figures/evo_newmess_a.png"/></imageobject></mediaobject>
<para>Enter an address in the To field. If you want, enter a subject in the Subject field, and a message in the box at the bottom of the window. After you have written your message, click Send.</para>
+ <para>This section contains the following topics:</para>
+ <itemizedlist>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-charsets">Unicode, ASCII, and Non-Latin Alphabets</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-delay">Sending Composed Messages Later</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-offline">Working Offline</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-compose">Attachments</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-to-types">Specifying Additional Recipients for E-Mail</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-to">Choosing Recipients Quickly</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-reply">Replying to E-Mail Messages</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-find">Searching and Replacing with the Composer</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-send-html">Enhancing Your E-Mail with HTML</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-fwd">Forwarding Mail</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-mail-getnsend-ettiquette">Tips for E-Mail Courtesy</link></para>
+ </listitem>
+ </itemizedlist>
<section id="usage-mail-getnsend-send-charsets">
<title>Unicode, ASCII, and Non-Latin Alphabets</title>
- <para>If you want to write in a non-Latin alphabet while using a Latin keyboard, try selecting a different input method in the message composer. Right-click in the message composition area and select from the Input Methods menu, then begin typing. The actual keys vary by language and input style. For example, the Cyrillic input method uses transliterated Latin keyboard combinations to get the Cyrillic alphabet, combining letters where necessary. &ldquo;Zh&rdquo; and &ldquo;ya&rdquo; produce the appropriate single Cyrillic letters, and the single-quote (&lsquo;) produces a soft-sign character.</para>
- <para>For greater language display capabilities, click Tools &gt; Settings, then select the character set choices in the Mail Preferences and Composer Preferences sections. If you aren&apos;t sure which one to use, select UTF-8, which offers the greatest range of character displays for the greatest range of languages.</para>
+ <para>If you want to write in a non-Latin alphabet while using a Latin keyboard, try selecting a different input method in the message composer. Right-click in the message composition area and select an input method from the Input Methods menu, then begin typing. The actual keys vary by language and input style. For example, the Cyrillic input method uses transliterated Latin keyboard combinations to get the Cyrillic alphabet, combining letters where necessary. &ldquo;Zh&rdquo; and &ldquo;ya&rdquo; produce the appropriate single Cyrillic letters, and the single-quote (&lsquo;) produces a soft-sign character.</para>
+ <para>For greater language display capabilities, click Edit &gt; Preferences, then select the character set choices in the Mail Preferences and Composer Preferences sections. If you aren&apos;t sure which one to use, select UTF-8, which offers the greatest range of character displays for the greatest range of languages.</para>
<section id="bsfnqkj">
<title>Using Character Sets</title>
- <para>A character set is a computer&apos;s version of an alphabet. In the past, the ASCII character set was used almost universally. However, it contains only 128 characters, meaning it is unable to display characters in Cyrillic, Kanjii, or other non-Latin alphabets. To work around language display problems, programmers developed a variety of methods, so many human languages now have their own specific character sets, and items written in other character sets display incorrectly. Eventually, standards organizations developed the Unicode character set UTF-8 to provide a single compatible set of codes for everyone.</para>
- <para>Most e-mail messages state in advance which character set they use, so Evolution usually knows what to display for a given binary number. However, if you find that messages are displayed as rows of incomprehensible characters, try selecting a different character set in the mail settings screen. If your recipients can&apos;t read your messages, try selecting a different character set in the composer options dialog. For some languages, such as Turkish or Korean, it might work best for you to select the language-specific character set. However, the best choice for most users is UTF-8, which offers the widest range of characters for the widest range of languages.</para>
+ <para>A character set is a computer&apos;s version of an alphabet. In the past, the ASCII character set was used almost universally. However, it contains only 128 characters, meaning it is unable to display characters in Cyrillic, Kanjii, or other non-Latin alphabets. To work around language display problems, programmers developed a variety of methods, so many human languages now have their own specific character sets, and items written in other character sets display incorrectly. Eventually, standards organizations developed the UTF-8 Unicode&z-3rdParty; character set to provide a single compatible set of codes for everyone.</para>
+ <para>Most e-mail messages state in advance which character set they use, so Evolution usually knows what to display for a given binary number. However, if you find that messages are displayed as rows of incomprehensible characters, try selecting a different character set in the mail settings screen. If your recipients can&apos;t read your messages, try selecting a different character set in the composer options dialog box. For some languages, such as Turkish or Korean, it might work best for you to select the language-specific character set. However, the best choice for most users is UTF-8, which offers the widest range of characters for the widest range of languages.</para>
</section>
</section>
@@ -879,51 +1146,51 @@
<section id="usage-mail-getnsend-send-compose">
<title>Attachments</title>
<para>To attach a file to your e-mail:</para>
- <procedure>
- <step id="bsfnwxr">
+ <orderedlist>
+ <listitem id="bsfnwxr">
<para>Click the Attach icon in the composer toolbar.</para>
- </step>
- <step id="bsfnx41">
+ </listitem>
+ <listitem id="bsfnx41">
<para>Select the file you want to attach.</para>
- </step>
- <step id="bsfnx93">
+ </listitem>
+ <listitem id="bsfnx93">
<para>Click OK.</para>
- </step>
- </procedure>
- <para>You can drag a file into the address area or to the attachment portion of the composer window. If you are attaching an image and want to send it inline rather than attached, drag the image into the text composition area of the composer window. Non-image files cannot be dragged into the text composition area.</para>
+ </listitem>
+ </orderedlist>
+ <para>You can also drag a file into the address area or to the attachment portion of the composer window. If you are attaching an image and want to send it inline rather than attached, drag the image into the text composition area of the composer window. Non-image files cannot be dragged into the text composition area.</para>
<para>The attachment display area is at the bottom of the composer window; you can expand or shrink it by clicking the small triangle in its upper right corner.</para>
<para>When you send the message, a copy of the attached file goes with it. Be aware that big attachments can take a long time to send and receive.</para>
</section>
<section id="usage-mail-getnsend-send-to-types">
- <title>Specifying Extra Recipients for E-Mail</title>
+ <title>Specifying Additional Recipients for E-Mail</title>
<para>Evolution, like most e-mail programs, recognizes three types of addressee: primary recipients, secondary recipients, and hidden (blind) recipients. The simplest way to direct a message is to put the e-mail address or addresses in the To: field, which denotes primary recipients. Use the Cc: field to send a message to secondary recipients.</para>
- <para>Addresses on the Bcc: list are hidden from the other recipients of the message. You can use it to send mail to large groups of people, especially if they don&rsquo;t know each other or if privacy is a concern. If your Bcc: field is absent, click View Bcc Field. </para>
+ <para>Addresses on the Bcc: list are hidden from the other recipients of the message. You can use it to send mail to large groups of people, especially if they don&rsquo;t know each other or if privacy is a concern. If your Bcc: field is absent, click View &gt; Bcc Field. </para>
<para>If you frequently write e-mail to the same groups of people, you can create address lists in the contacts tool, and then send them mail as though they have a single address. To learn how to do that, see <link linkend="usage-contact-organize-group-list">Creating a List of Contacts</link>.</para>
- <para>Evolution has the ability to let you specify the Reply-To in an e-mail. Using this, you can setup a special Reply-To for an e-mail. To do this:</para>
- <procedure>
- <step id="bsfnz55">
+ <para>Evolution has the ability to let you specify the Reply-To in an e-mail. Using this, you can set up a special Reply-To for an e-mail. To do this:</para>
+ <orderedlist>
+ <listitem id="bsfnz55">
<para>Open a compose window.</para>
- </step>
- <step id="bsfnz7w">
+ </listitem>
+ <listitem id="bsfnz7w">
<para>Open the Reply-To field by clicking View &gt; Reply To.</para>
- </step>
- <step id="bsfnziz">
+ </listitem>
+ <listitem id="bsfnziz">
<para>Specify the address you want as the Reply-To address in the new Reply-To field.</para>
- </step>
- <step id="bsfnzsp">
+ </listitem>
+ <listitem id="bsfnzsp">
<para>Complete the rest of your message. </para>
- </step>
- <step id="bsfo0mh">
+ </listitem>
+ <listitem id="bsfo0mh">
<para>Click Send.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
<section id="usage-mail-getnsend-send-to">
<title>Choosing Recipients Quickly</title>
<para>If you have created address cards in the contacts tool, you can also type nicknames or other portions of address data, and Evolution displays a drop-down list of possible address completions from your contacts. If you type a name or nickname that can go with more than one card, Evolution opens a dialog box to ask you which person you meant.</para>
- <para>If Evolution does not complete addresses automatically, click Tools &gt; Settings then click Autocompletion. There, select the groups of contacts you want to use for address autocompletion in the mailer. </para>
+ <para>If Evolution does not complete addresses automatically, click Edit &gt; Preferences, then click Autocompletion. There, select the groups of contacts you want to use for address autocompletion in the mailer. </para>
<para>Alternately, you can click the To:, Cc:, or Bcc: buttons to get a list of the e-mail addresses in your contacts. Select addresses and click the arrows to move them into the appropriate address columns.</para>
<para>For more information about using e-mail with the contact manager and the calendar, see <link linkend="contact-automation-basic">Send me a Card: Adding New Cards Quickly</link> and <link linkend="usage-calendar-apts">Scheduling With the Evolution Calendar</link>.</para>
</section>
@@ -949,7 +1216,7 @@
</formalpara>
<formalpara id="bsai5pj">
<title>Find Regex: </title>
- <para>You can search for a complex pattern of characters, called a <link linkend="regular-expression">regular expression</link> or &ldquo;regex&rdquo; in your composer window. If you&rsquo;re not sure what a regular expression is, you should ignore this feature.</para>
+ <para>You can search for a complex pattern of characters, called a <link linkend="regular-expression">regular expression</link> or &ldquo;regex&rdquo; in your composer window. If you&apos;re not sure what a regular expression is, you should ignore this feature.</para>
</formalpara>
<formalpara id="bsai5wk">
<title>Find Again: </title>
@@ -984,9 +1251,9 @@
</formalpara>
<informaltable>
<tgroup cols="2">
- <colspec colwidth="2.729in" colname="1" colnum="1"/>
- <colspec colwidth="2.729in" colname="2" colnum="2"/>
- <thead>
+ <colspec colwidth="2.729*" colname="1" colnum="1"/>
+ <colspec colwidth="2.729*" colname="2" colnum="2"/>
+ <thead valign="top">
<row id="bslahtr">
<entry colname="1">
<para>Button</para>
@@ -996,13 +1263,13 @@
</entry>
</row>
</thead>
- <tbody>
+ <tbody valign="top">
<row id="bslahts">
<entry colname="1">
<para>TT</para>
</entry>
<entry colname="2">
- <para>Typewriter text, which is approximately the same as the Courier monospace serif font.</para>
+ <para>Typewriter text, which is approximately the same as the Courier monospace font.</para>
</entry>
</row>
<row id="bslaiy5">
@@ -1018,7 +1285,7 @@
<para>Italic A</para>
</entry>
<entry colname="2">
- <para>Italizes the text.</para>
+ <para>Italisies the text.</para>
</entry>
</row>
<row id="bslaium">
@@ -1031,10 +1298,10 @@
</row>
<row id="bslahtt">
<entry colname="1">
- <para>Strikethrough A</para>
+ <para>Strike through A</para>
</entry>
<entry colname="2">
- <para>Strikesthrough the text.</para>
+ <para>Strikes through the text.</para>
</entry>
</row>
</tbody>
@@ -1042,7 +1309,7 @@
</informaltable>
<formalpara id="bsaia7u">
<title>Alignment: </title>
- <para>Located next to the text style buttons, these three paragraph icons should be familiar to users of most word processing software. The life most button aligns your text to the left, the center button centers text, and the right button aligns the text to the right. </para>
+ <para>Located next to the text style buttons, the three paragraph icons should be familiar to users of most word processing software. The leftmost button aligns your text to the left, the center button centers text, and the right button aligns the text to the right. </para>
</formalpara>
<formalpara id="bsaiagc">
<title>Indentation Rules: </title>
@@ -1061,77 +1328,77 @@
<section id="bsait2a">
<title>Inserting a Link</title>
<para>Use the Insert a Link tool to put hyperlinks in your HTML messages. If you don&apos;t want special link text, you can just enter the address directly, and Evolution recognizes it as a link. </para>
- <procedure>
- <step id="bsaimfe">
- <para>Select the text you wish to link from.</para>
- </step>
- <step id="bsaimoh">
+ <orderedlist>
+ <listitem id="bsaimfe">
+ <para>Select the text you want to link from.</para>
+ </listitem>
+ <listitem id="bsaimoh">
<para>Right-click in the text, then click Link.</para>
- </step>
- <step id="bsaims2">
+ </listitem>
+ <listitem id="bsaims2">
<para>Type the URL in the URL field.</para>
- </step>
- <step id="bsaimvh">
+ </listitem>
+ <listitem id="bsaimvh">
<para>Click Close.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
<section id="bsait2b">
<title>Inserting an Image</title>
- <procedure>
- <step id="bsainv6">
+ <orderedlist>
+ <listitem id="bsainv6">
<para>Click Image.</para>
- </step>
- <step id="bsaio4q">
+ </listitem>
+ <listitem id="bsaio4q">
<para>Browse to and select the image file.</para>
- </step>
- <step id="bsaioah">
+ </listitem>
+ <listitem id="bsaioah">
<para>Click OK.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
<section id="bsait2c">
<title>Inserting a Rule</title>
<para>You can insert a horizontal line into the text to help divide two sections: </para>
- <procedure>
- <step id="bsaiotf">
+ <orderedlist>
+ <listitem id="bsaiotf">
<para>Click Rule.</para>
- </step>
- <step id="bsaioxz">
+ </listitem>
+ <listitem id="bsaioxz">
<para>Select the length, thickness, and alignment.</para>
- </step>
- <step id="bsaipio">
+ </listitem>
+ <listitem id="bsaipio">
<para>Select Shaded if necessary.</para>
- </step>
- <step id="bsaiplo">
+ </listitem>
+ <listitem id="bsaiplo">
<para>Click Close.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
<section id="bsait2d">
<title>Inserting a Table</title>
<para>You can insert a table into the text: </para>
- <procedure>
- <step id="bsaiq2x">
+ <orderedlist>
+ <listitem id="bsaiq2x">
<para>Click Table.</para>
- </step>
- <step id="bsaiq6r">
+ </listitem>
+ <listitem id="bsaiq6r">
<para>Select the number of rows and columns.</para>
- </step>
- <step id="bsaiqkl">
+ </listitem>
+ <listitem id="bsaiqkl">
<para>Select the type of layout for the table.</para>
- </step>
- <step id="bsaiqp8">
+ </listitem>
+ <listitem id="bsaiqp8">
<para>Select a background for the table.</para>
<para>To insert a picture for the background, click Browse and select the desired image.</para>
- </step>
- <step id="bsaiqs5">
+ </listitem>
+ <listitem id="bsaiqs5">
<para>Click Close.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
</section>
</section>
@@ -1140,10 +1407,11 @@
<title>Forwarding Mail</title>
<para>When you receive an e-mail from someone, you can forward it to other individuals or groups that might be interested. You can forward a message as an attachment to a new message (this is the default) or you can send it <link linkend="inline">in line</link> as a quoted portion of the message you are sending. Attachment forwarding is best if you want to send the full, unaltered message to someone else. Inline forwarding is best if you want to send portions of a message, or if you have a large number of comments on different sections of the message you are forwarding. Remember to note from whom the message came, and whether you have removed or altered content.</para>
<para>To forward a message you are reading, click Forward on the toolbar, click Actions &gt; Forward, or press Ctrl+F. If you prefer to forward the message <link linkend="inline">inline</link> instead of attached, click Actions &gt; Forward Inline from the menu. Select an addressee as you would when sending a new message; the subject is already entered, although you can alter it if you want. Add your comments on the message in the composition frame, then click Send.</para>
+ <para>Attachments are only forwarded when you send the message as an attachment. Inline messages will not forward any attachments.</para>
</section>
<section id="usage-mail-getnsend-ettiquette">
- <title>Seven Tips for E-Mail Courtesy</title>
+ <title>Tips for E-Mail Courtesy</title>
<itemizedlist>
<listitem>
<para>Don&apos;t forward chain letters. If you must, watch out for hoaxes and urban legends, and make sure the message doesn&apos;t have multiple layers of greater-than signs, (&gt;) indicating multiple layers of careless in-line forwarding. </para>
@@ -1158,7 +1426,7 @@
<para>Check your spelling and use complete sentences. By default, Evolution puts a red line beneath words it doesn&apos;t recognize, as you type them. </para>
</listitem>
<listitem>
- <para>Don&apos;t send nasty e-mails (flames). If you get one, don&rsquo;t write back. </para>
+ <para>Don&apos;t send nasty e-mails (flames). If you get one, don&apos;t write back. </para>
</listitem>
<listitem>
<para>When you reply or forward, include enough of the previous message to provide context.</para>
@@ -1173,7 +1441,7 @@
<section id="rsvp-stuff">
<title>Sending Invitations by Mail</title>
<para>If you create an event in the calendar component, you can then send invitations to the attendee list through the Evolution e-mail tool. The invitation card is sent as an attachment in iCal format.</para>
- <para>When you receive an invitation, </para>
+ <para>When you receive an invitation, you have several options:</para>
<formalpara id="bsaizt9">
<title>Accept: </title>
<para>Indicates you will attend the meeting. When you click the OK button, the meeting is entered into your calendar.</para>
@@ -1184,7 +1452,7 @@
</formalpara>
<formalpara id="bsaj06a">
<title>Decline: </title>
- <para>Indicates you will be unable to attend the meeting. The meeting is not entered into your calendar when you click the OK, although your response will be sent to the meeting host if you have selected the RSVP option.</para>
+ <para>Indicates you will be unable to attend the meeting. The meeting is not entered into your calendar when you click OK, although your response is sent to the meeting host if you have selected the RSVP option.</para>
</formalpara>
<formalpara id="bsaj0dc">
<title>RSVP: </title>
@@ -1195,206 +1463,172 @@
<section id="usage-mail-subscriptions">
<title>IMAP Subscriptions Manager</title>
<para>Because IMAP folders exist on the server, and opening them or checking them takes time, you need fine-grained control over the way that you use IMAP folders. You use the IMAP subscriptions manager to do this. If you prefer to have every mail folder displayed, you can select that option as well. However, if you want to choose specific items in your mailbox, and exclude others, you can use the subscription management tool to do that.</para>
- <procedure>
- <step id="bsmqyfs">
+ <orderedlist>
+ <listitem id="bsmqyfs">
<para>Select Tools &gt; Subscribe to Folders.</para>
- </step>
- <step id="bsmqyid">
+ </listitem>
+ <listitem id="bsmqyid">
<para>If you have accounts on multiple IMAP servers, select the server where you want to manage your subscriptions. Evolution displays a list of available files and folders.</para>
- </step>
- <step id="bsmqyky">
+ </listitem>
+ <listitem id="bsmqyky">
<para>Select a file or folder by clicking it. You should select at least the Inbox folder. Depending upon the way your IMAP server is configured, the list of available files might include non-mail folders. If it does, you can ignore them.</para>
- </step>
- <step id="bsmqz9t">
+ </listitem>
+ <listitem id="bsmqz9t">
<para>Click Subscribe to add a folder to the subscribed list.</para>
- </step>
- <step id="bsmqzlz">
+ </listitem>
+ <listitem id="bsmqzlz">
<para>When you have subscribed to the folders you want, close the window.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
<section id="encryption">
<title>Encryption</title>
+ <para>To protect and encode your e-mail transmissions, Evolution offers two encryption methods:</para>
+ <itemizedlist>
+ <listitem>
+ <para>GPG Encryption</para>
+ </listitem>
+ <listitem>
+ <para>S/MIME Encryption</para>
+ </listitem>
+ </itemizedlist>
<para>Evolution helps you protect your privacy by using GNU Privacy Guard (GPG), an implementation of strong <link linkend="public-key-encryption">Public Key Encryption.</link></para>
<para>GPG uses two keys: public and private. You can give your public key to anyone you want to receive encrypted messages, or put it on a public key server so that people can look it up before contacting you. Your private key lets you decrypt any message encrypted with your public key. Never give your private key to anyone. </para>
<para>Using encryption takes a bit of forethought. When you send a message that is encrypted, you must encrypt it using your intended recipient&apos;s public key. To receive an encrypted message, you must make sure that the sender has your public key in advance. For signing messages, you encrypt the signature with your private key, so only your public key can unlock it. When you send the message, the recipient gets your public key and unlocks the signature, verifying your identity.</para>
+ <para>Evolution does not support older versions of PGP, such as OpenPGP and Inline PGP.</para>
<para>You can use encryption in two different ways:</para>
<itemizedlist>
<listitem>
<para>You can encrypt the entire message, so that nobody but the recipient can read it.</para>
</listitem>
<listitem>
- <para>You can attach an encrypted signature to a plain text message, so that the recipient can read the message without decrypting it, and only needs decrypting to verify the sender&rsquo;s identity.</para>
+ <para>You can attach an encrypted signature to a plain text message, so that the recipient can read the message without decrypting it, and needs decrypting only to verify the sender&rsquo;s identity.</para>
</listitem>
</itemizedlist>
- <para>For example, suppose that Kevin wants to send an encrypted message to his friend Rachel. He looks up her public key on a general key server, and then tells Evolution to encrypt the message. The message now reads "@#$23ui7yr87#@!48970fsd." When the information gets to Rachel, she decrypts it using her private key, and it appears as plain text for her to read.</para>
- <para>To encrypt a single message:</para>
- <procedure>
- <step id="bsg2p0a">
- <para>Open a Compose a Message window.</para>
- </step>
- <step id="bsg2p9i">
- <para>Click Security &gt; PGP Encrypt.</para>
- </step>
- <step id="bsg2prj">
- <para>Compose your message, then click Send.</para>
- </step>
- </procedure>
- <para>You can set Evolution to always sign your e-mail messages: </para>
- <procedure>
- <step id="bsaj12e">
- <para>Click Tools &gt; Settings, then select Mail Accounts.</para>
- </step>
- <step id="bsaj1aj">
- <para>Select the mail account to encrypt, then click Edit.</para>
- </step>
- <step id="bsaj1es">
- <para>Click the Security tab.</para>
- </step>
- <step id="bsaj1yt">
- <para>Select Always Sign Outgoing Messages When Using This Account.</para>
- </step>
- <step id="bsaj2e0">
- <para>Click OK.</para>
- </step>
- <step id="bsaj2et">
- <para>Click Close.</para>
- </step>
- </procedure>
-
- <section id="encryption-smime">
- <title>S/MIME Encryption</title>
- <para>S/MIME encryption also uses a key-based approach, but it has some significant advantages in convenience and security. S/MIME uses certificates, which are similar to keys. The public portion of each certificate is held by the sender of a message and by one of several certificate authorities, who are paid to guarantee the identity of the sender and the security of the message. Evolution already recognizes a large number of certificate authorities, so when you get a message with an S/MIME certificate, your system automatically receives the public portion of the certificate and decrypts or verifies the message.</para>
- <para>S/MIME is used most often in corporate settings. In these cases, administrators supply certificates that they have purchased from a certificate authority. In some cases, an organization can act as its own certificate authority, with or without a guarantee from a dedicated authority such as Verisign or Thawte. In either case, the system administrator provides you with a certificate file.</para>
- <para>If you want to use S/MIME independently, you can extract an identification certificate from your Mozilla or Netscape Web browser. See the Mozilla help for more information on security certificates.</para>
- <para>The certificate file is a password-protected file on your computer. To use it in Evolution:</para>
- <procedure>
- <step id="bsg2rkq">
- <para>Click Tools &gt; Settings, then click Certificate Tool.</para>
- </step>
- <step id="bsg2rra">
- <para>Click Import.</para>
- </step>
- <step id="bsg2rw3">
- <para>Select the file to import, then click OK.</para>
- </step>
- <step id="bsg2s8y">
- <para>Click Close.</para>
- </step>
- </procedure>
- <para>Similarly, you can add certificates that are sent to you independently of any authority by clicking the Contact Certificates tab and using the same Import tool. You can also add new certificate authorities, which have their own certificate files, in the same way.</para>
- <para>After you have added your certificate, you can sign or encrypt a message by clicking Security &gt; S/MIME Sign or S/MIMe Encrypt in the message composer. </para>
- <para>To have every message signed or encrypted:</para>
- <procedure>
- <step id="bsg2t55">
- <para>Click Tools &gt; Options, then select the account to encrypt the messages in.</para>
- </step>
- <step id="bsg2tam">
- <para>Click Edit, then click Security.</para>
- </step>
- <step id="bsg2tsx">
- <para>Click Select next to Signing Certificate and specify the path to your signing certificate.</para>
- <para>or</para>
- <para>Click Select next to Encryption Certificate and specify the path to your encryption certificate.</para>
- </step>
- <step id="bsg2uuc">
- <para>Select the appropriate options.</para>
- </step>
- <step id="bsg2vi6">
- <para>Click OK.</para>
- </step>
- <step id="bsg2uvy">
- <para>Click Close.</para>
- </step>
- </procedure>
- </section>
+ <para>For example, suppose that Kevin wants to send an encrypted message to his friend Rachel. He looks up her public key on a general key server, and then tells Evolution to encrypt the message. The message now reads &ldquo;@#$23ui7yr87#@!48970fsd.&rdquo; When the information gets to Rachel, she decrypts it using her private key, and it appears as plain text for her to read.</para>
<section id="encryption-keygen">
- <title>Making Encryption Keys</title>
- <para>Before you can get or send encrypted mail, you need to generate your public and private keys with GPG. This procedure covers version 1.2.4 of GPG. If your version is different, these steps may vary slightly. You can find out your version number by entering <command>gpg --version</command>.</para>
- <procedure>
- <step id="bsg2zuv">
+ <title>Making a GPG Encryption Key</title>
+ <para>Before you can get or send encrypted mail, you need to generate your public and private keys with GPG. This procedure covers version 1.2.4 of GPG. If your version is different, these steps might vary slightly. You can find out your version number by entering <command>gpg --version</command>.</para>
+ <orderedlist>
+ <listitem id="bsg2zuv">
<para>Open a terminal and enter <command>gpg --gen-key</command>.</para>
- </step>
- <step id="bsg2zxw">
+ </listitem>
+ <listitem id="bsg2zxw">
<para>Select an algorithm, then press Enter.</para>
<para>or</para>
<para>To accept the default algorithm of DSA and ElGamal, press Enter (recommended).</para>
- </step>
- <step id="bsg3011">
+ </listitem>
+ <listitem id="bsg3011">
<para>Select a key length, then press Enter. To accept the default, 1024 bits, press Enter.</para>
- </step>
- <step id="bsg3034">
+ </listitem>
+ <listitem id="bsg3034">
<para>Enter how long your key should be valid for. </para>
<para>or</para>
- <para>To accept the default of no expiration, press Enter, then press Y when you are prompted to verify the selection.</para>
- </step>
- <step id="bsg305l">
+ <para>To accept the default of no expiration, press Enter, then press Y when you are prompted to verify the selection.</para>
+ </listitem>
+ <listitem id="bsg305l">
<para>Type your real name, then press Enter.</para>
- </step>
- <step id="bsg30bg">
+ </listitem>
+ <listitem id="bsg30bg">
<para>Type your e-mail address, then press Enter.</para>
- </step>
- <step id="bsg30ec">
+ </listitem>
+ <listitem id="bsg30ec">
<para>(Optional) Type a comment, then press Enter.</para>
- </step>
- <step id="bsg30lp">
- <para>Review your selected user ID, if it is correct press O.</para>
- </step>
- <step id="bsg317u">
+ </listitem>
+ <listitem id="bsg30lp">
+ <para>Review your selected user ID. If it is correct, press O.</para>
+ </listitem>
+ <listitem id="bsg317u">
<para>Type a passphrase, then press Enter.</para>
- </step>
- <step id="bsg31c5">
+ </listitem>
+ <listitem id="bsg31c5">
<para>Move your mouse randomly to generate the keys.</para>
- </step>
- </procedure>
- <para>After the keys are generated, you can view your key information by entering <command>gpg --list-keys</command>. You should see something similar to this: <computeroutput> /home/you/.gnupg/pubring.gpg ---------------------------- pub 1024D/32j38dk2 2001-06-20 you &lt;you@your-address.com&gt; sub 1024g/289sklj3 2001-06-20 [expires: 2002-11-14] </computeroutput></para>
+ </listitem>
+ </orderedlist>
+ <para>After the keys are generated, you can view your key information by entering <command>gpg --list-keys</command>. You should see something similar to this: <computeroutput> /home/you/.gnupg/pubring.gpg ---------------------------- pub 1024D/32j38dk2 2001-06-20 you &lt;you@example.com&gt; sub 1024g/289sklj3 2001-06-20 [expires: 2002-11-14] </computeroutput></para>
<para>GPG creates one list, or keyring, for your public keys and one for your private keys. All the public keys you know are stored in the file ~/.gnupg/pubring.gpg. If you want to give other people your key, send them that file.</para>
<para>If you want, you can upload your keys to a key server.</para>
- <procedure>
- <step id="bsg3379">
+ <orderedlist>
+ <listitem id="bsg3379">
<para>Check your public key ID with gpg--list-keys. It will be the string after 1024D on the line beginning with pub. In the example above, it is 32j38dk2.</para>
- </step>
- <step id="bsg347p">
- <para>Enter the command <command>gpg --send-keys --keyserverwwwkeys.pgp.net <varname>32j38dk2</varname></command>. Substitute your key ID for <varname>32j38dk2</varname>. You need your password to do this.</para>
- </step>
- </procedure>
+ </listitem>
+ <listitem id="bsg347p">
+ <para>Enter the command <command>gpg --send-keys --keyserver wwwkeys.pgp.net <varname>32j38dk2</varname></command>. Substitute your key ID for <varname>32j38dk2</varname>. You need your password to do this.</para>
+ </listitem>
+ </orderedlist>
<para>Key servers store your public keys for you so that your friends can decrypt your messages. If you choose not to use a key server, you can manually send your public key, include it in your signature file, or put it on your own Web page. However, it&apos;s easier to publish a key once, and then let people download it from a central place when they want.</para>
<para>If you don&apos;t have a key to unlock or encrypt a message, you can set your encryption tool to look it up automatically. If it can&apos;t find the key, an error message appears.</para>
</section>
<section id="encrypt-getting-key">
- <title>Getting and Using Public Keys</title>
+ <title>Getting and Using GPG Public Keys</title>
<para>To send an encrypted message, you need to use the recipient&apos;s public key in combination with your private key. Evolution handles the encryption, but you need to get the public key and add it to your keyring.</para>
- <para>To get public keys from a public key server, enter the command<command> gpg --recv-keys --keyserver wwwkeys.pgp.net <varname>keyid</varname></command>, substituting <varname>keyid</varname> for your recipient&apos;s ID. You need to enter your password, and the ID is automatically added to your keyring..</para>
+ <para>To get public keys from a public key server, enter the command<command> gpg --recv-keys --keyserver wwwkeys.pgp.net <varname>keyid</varname></command>, substituting <varname>keyid</varname> for your recipient&apos;s ID. You need to enter your password, and the ID is automatically added to your keyring.</para>
<para>If someone sends you a public key directly, save it as a plain text file and enter the command <command>gpg <varname>filename</varname></command> to add it to your keyring.</para>
</section>
<section id="encrypt-evo-integ">
- <title>Setting up Evolution&rsquo;s Encryption</title>
- <procedure>
- <step id="bsg364h">
- <para>Click Tools &gt; Settings, then click Mail Accounts.</para>
- </step>
- <step id="bsg368f">
+ <title>Setting up GPG Encryption</title>
+ <orderedlist>
+ <listitem id="bsg364h">
+ <para>Click Edit &gt; Preferences, then click Mail Accounts.</para>
+ </listitem>
+ <listitem id="bsg368f">
<para>Select the account you want to use securely, then click Edit.</para>
- </step>
- <step id="bsg36hg">
+ </listitem>
+ <listitem id="bsg36hg">
<para>Click the Security tab.</para>
- </step>
- <step id="bsg36jw">
+ </listitem>
+ <listitem id="bsg36jw">
<para>Specify your key ID in the PGP/GPG Key ID field.</para>
- </step>
- <step id="bsg36pj">
+ </listitem>
+ <listitem id="bsg36pj">
<para>Click OK.</para>
- </step>
- <step id="bsg36qt">
+ </listitem>
+ <listitem id="bsg36qt">
+ <para>Click Close.</para>
+ </listitem>
+ </orderedlist>
+ <para>Evolution requires that you know your key ID. If you don&apos;t remember it, you can find it by typing <command>gpg --list-keys</command> in a console window. Your key ID is an eight-character string with random numbers and letters.</para>
+ </section>
+
+ <section id="bspya9p">
+ <title>Encrypting Messages</title>
+ <para>To encrypt a single message:</para>
+ <orderedlist>
+ <listitem id="bsg2p0a">
+ <para>Open a Compose a Message window.</para>
+ </listitem>
+ <listitem id="bsg2p9i">
+ <para>Click Security &gt; PGP Encrypt.</para>
+ </listitem>
+ <listitem id="bsg2prj">
+ <para>Compose your message, then click Send.</para>
+ </listitem>
+ </orderedlist>
+ <para>You can set Evolution to always sign your e-mail messages: </para>
+ <orderedlist>
+ <listitem id="bsaj12e">
+ <para>Click Edit &gt; Preferences, then select Mail Accounts.</para>
+ </listitem>
+ <listitem id="bsaj1aj">
+ <para>Select the mail account to encrypt, then click Edit.</para>
+ </listitem>
+ <listitem id="bsaj1es">
+ <para>Click the Security tab.</para>
+ </listitem>
+ <listitem id="bsaj1yt">
+ <para>Select Always Sign Outgoing Messages When Using This Account.</para>
+ </listitem>
+ <listitem id="bsaj2e0">
+ <para>Click OK.</para>
+ </listitem>
+ <listitem id="bsaj2et">
<para>Click Close.</para>
- </step>
- </procedure>
- <para>Click Tools &gt; Settings, then click Mail Accounts. Select the account you want to use securely, and click Edit. Click the Security tab. Enter your key ID in the PGP/GPG Key ID field, then click OK. Your key is now integrated into your identity in Evolution.</para>
- <para>Evolution requires that you know your key ID. If you don&rsquo;t remember it, you can find it by typing <command>gpg --list-keys</command> in a console window. Your key ID is an eight-character string with random numbers and letters.</para>
+ </listitem>
+ </orderedlist>
</section>
<section id="unencrypting">
@@ -1402,6 +1636,61 @@
<para>If you receive an encrypted message, you need to decrypt it before you read it. Remember, the sender must have your public key before they can send you an encrypted message.</para>
<para>When you view the message, Evolution prompts you for your PGP password. Enter it, and the unencrypted message is displayed. </para>
</section>
+
+ <section id="encryption-smime">
+ <title>S/MIME Encryption</title>
+ <para>S/MIME encryption also uses a key-based approach, but it has some significant advantages in convenience and security. S/MIME uses certificates, which are similar to keys. The public portion of each certificate is held by the sender of a message and by one of several certificate authorities, who are paid to guarantee the identity of the sender and the security of the message. Evolution already recognizes a large number of certificate authorities, so when you get a message with an S/MIME certificate, your system automatically receives the public portion of the certificate and decrypts or verifies the message.</para>
+ <para>S/MIME is used most often in corporate settings. In these cases, administrators supply certificates that they have purchased from a certificate authority. In some cases, an organization can act as its own certificate authority, with or without a guarantee from a dedicated authority such as Verisign or Thawte&z-3rdParty;. In either case, the system administrator provides you with a certificate file.</para>
+ <para>If you want to use S/MIME independently, you can extract an identification certificate from your Mozilla or Netscape Web browser. See the Mozilla help for more information on security certificates.</para>
+ <para>The certificate file is a password-protected file on your computer. To use it in Evolution:</para>
+
+ <section id="bspyee8">
+ <title>Adding a Signing Certificate</title>
+ <orderedlist>
+ <listitem id="bsg2rkq">
+ <para>Click Edit &gt; Preferences, then click Certificate Tool.</para>
+ </listitem>
+ <listitem id="bsg2rra">
+ <para>Click Import.</para>
+ </listitem>
+ <listitem id="bsg2rw3">
+ <para>Select the file to import, then click OK.</para>
+ </listitem>
+ <listitem id="bsg2s8y">
+ <para>Click Close.</para>
+ </listitem>
+ </orderedlist>
+ <para>Similarly, you can add certificates that are sent to you independently of any authority by clicking the Contact Certificates tab and using the same Import tool. You can also add new certificate authorities, which have their own certificate files, in the same way.</para>
+ </section>
+
+ <section id="bsqbdkv">
+ <title>Signing or Encrypting Every Message</title>
+ <para>After you have added your certificate, you can sign or encrypt a message by clicking Security &gt; S/MIME Sign or S/MIMe Encrypt in the message composer. </para>
+ <para>To have every message signed or encrypted:</para>
+ <orderedlist>
+ <listitem id="bsg2t55">
+ <para>Click Tools &gt; Options, then select the account to encrypt the messages in.</para>
+ </listitem>
+ <listitem id="bsg2tam">
+ <para>Click Edit, then click Security.</para>
+ </listitem>
+ <listitem id="bsg2tsx">
+ <para>Click Select next to Signing Certificate and specify the path to your signing certificate.</para>
+ <para>or</para>
+ <para>Click Select next to Encryption Certificate and specify the path to your encryption certificate.</para>
+ </listitem>
+ <listitem id="bsg2uuc">
+ <para>Select the appropriate options.</para>
+ </listitem>
+ <listitem id="bsg2vi6">
+ <para>Click OK.</para>
+ </listitem>
+ <listitem id="bsg2uvy">
+ <para>Click Close.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+ </section>
</section>
</chapter>
@@ -1411,7 +1700,7 @@
<section id="importing-mail-and-settings">
<title>Importing Your Old E-Mail</title>
- <para>Evolution allows you to import old e-mail and contacts so that you don&rsquo;t need to worry about losing your old information.</para>
+ <para>Evolution allows you to import old e-mail and contacts so that you don&apos;t need to worry about losing your old information.</para>
<section id="importing-mail">
<title>Importing Single Files</title>
@@ -1426,65 +1715,65 @@
</formalpara>
<formalpara id="bsawckg">
<title>Microsoft Outlook Express 4 (.mbx): </title>
- <para>E-Mail file format used by Microsoft Outlook Express 4. For other versions of Microsoft Outlook and Outlook Express, see the workaround described in <link linkend="bsawgkk">Step 1</link>. </para>
+ <para>The e-mail file format used by Microsoft Outlook Express 4. For other versions of Microsoft Outlook and Outlook Express, see the workaround described in <link linkend="bsawgkk">Step 1</link>. </para>
</formalpara>
<formalpara id="bsawdfx">
<title>LDAP Data Interchange Format (.LDIF):</title>
<para> A standard data format for contact cards. </para>
</formalpara>
<formalpara id="bsawdmw">
- <title>MBox (.mbox or null extension): </title>
- <para>The e-mail format used by Mozilla, Netscape, Evolution, Eudora, and many other e-mail clients. </para>
+ <title>Berkley Mailbox (.mbox or null extension): </title>
+ <para>The e-mail format used by Mozilla, Netscape, Evolution, Eudora&z-3rdParty;, and many other e-mail clients. </para>
</formalpara>
<para>To import your old e-mail: </para>
- <procedure>
- <step id="bsaweb1">
+ <orderedlist>
+ <listitem id="bsaweb1">
<para>Click File &gt; Import.</para>
- </step>
- <step id="bsaweiv">
+ </listitem>
+ <listitem id="bsaweiv">
<para>Click Forward.</para>
- </step>
- <step id="bsawely">
+ </listitem>
+ <listitem id="bsawely">
<para>Select Import a Single File, then click Forward.</para>
- </step>
- <step id="bsawey0">
+ </listitem>
+ <listitem id="bsawey0">
<para>Select the file to import, then click Forward.</para>
- </step>
- <step id="bsawf2t">
+ </listitem>
+ <listitem id="bsawf2t">
<para>Click Import.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
<section id="importing-preferences">
<title>Importing Multiple Files</title>
<para>Evolution automates the import process for several applications it can recognize. </para>
- <procedure>
- <step id="bsawfek">
+ <orderedlist>
+ <listitem id="bsawfek">
<para>Click File &gt; Import.</para>
- </step>
- <step id="bsawfhu">
+ </listitem>
+ <listitem id="bsawfhu">
<para>Click Forward.</para>
- </step>
- <step id="bsawfiy">
+ </listitem>
+ <listitem id="bsawfiy">
<para>Select Import Data and Settings From Older Programs, then click Forward.</para>
<para>Evolution searches for old mail programs and, if possible, import the data from them.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>Microsoft Outlook and versions of Outlook Express after version 4 use proprietary formats that Evolution cannot read or import. One migration method that works well is to use the Outport application. See <ulink url="http://outport.sourceforge.net">outport.sourceforge.net</ulink> for additional information. You can also import data into another Windows mail client such as Mozilla: </para>
- <procedure>
- <step id="bsawgkk">
+ <orderedlist>
+ <listitem id="bsawgkk">
<para>While in Windows, import your .pst files into Mozilla Mail (or another mail program such as Netscape or Eudora that uses the standard mbox format).</para>
<para>Mozilla and Netscape users need to click File &gt; Compact &gt; All Folders from within the Netscape or Mozilla mail tool. Otherwise, Evolution imports and undeletes the messages in your Trash folders.</para>
- </step>
- <step id="bsawh7h">
+ </listitem>
+ <listitem id="bsawh7h">
<para>Copy the files to the system or partition that Evolution is installed on.</para>
- </step>
- <step id="bsawhdw">
+ </listitem>
+ <listitem id="bsawhdw">
<para>Use the Evolution import tool to import the files.</para>
- </step>
- </procedure>
- <para>For POP mail, filters are applied as messages are downloaded. For IMAP mail, filters are applied to new messages when you enter the INBOX folder. On Exchange servers, filters are not applied until you select your Inbox folder and click Actions &gt; Apply Filters, or press Ctrl+Y. To force your filters to act on all messages in the folder, select the entire folder by pressing Ctrl+A, then apply the filters by pressing Ctrl+Y. </para>
+ </listitem>
+ </orderedlist>
+ <para>For POP mail, filters are applied as messages are downloaded. For IMAP mail, filters are applied to new messages when you open the Inbox folder. On Exchange servers, filters are not applied until you select your Inbox folder and click Actions &gt; Apply Filters, or press Ctrl+Y. To force your filters to act on all messages in the folder, select the entire folder by pressing Ctrl+A, then apply the filters by pressing Ctrl+Y. </para>
</section>
</section>
@@ -1515,10 +1804,22 @@
<section id="usage-mail-organize-columns-followup">
<title>Using the Follow Up Feature</title>
- <para>One way to make sure you don&apos;t forget about a message is with the Follow Up feature. To use it, select one or more messages, then right-click on one, then click Follow Up. A dialog box opens to allow you to set the type of flag and the due date.</para>
+ <para>One way to make sure you don&apos;t forget about a message is with the Follow Up feature. To use the follow up feature:</para>
+ <orderedlist>
+ <listitem id="bsqbrxl">
+ <para>Select one or more messages.</para>
+ </listitem>
+ <listitem id="bsqbs0y">
+ <para>Right-click on one of the messages.</para>
+ </listitem>
+ <listitem id="bsqbs6i">
+ <para>Click Follow Up.</para>
+ <para> A dialog box opens to allow you to set the type of flag and the due date.</para>
+ </listitem>
+ </orderedlist>
<para>The Flag itself is the action you want to remind yourself about. Several are provided for you, such as Call, Forward, and Reply, but you can enter your own note or action if you want. You can set a deadline for the flag as well.</para>
<para>After you have added a flag, you can mark it as complete or remove it entirely by right-clicking the message, then click either Flag Completed or Clear Flag.</para>
- <para>When you read a flagged message, its flag status is displayed at the top, before the message headers. An overdue message might tell you Overdue: Call by April 07, 2003, 5:00 PM.</para>
+ <para>When you read a flagged message, its flag status is displayed at the top, before the message headers. An overdue message might tell you &ldquo;Overdue: Call by April 07, 2003, 5:00 PM.&rdquo;</para>
<para>Flags can help you organize your work in a number of ways. For example, you might add a Flag Status column to your message list and sort that way. Alternately, you could create a vFolder that displays all your flagged messages, then clear the flags when you&apos;re done, so the vFolder contains only messages with upcoming deadlines.</para>
<para>If you prefer a simpler way to remind yourself about messages, you can mark them as Important by right-clicking the message, then click Mark Important.</para>
</section>
@@ -1526,7 +1827,7 @@
<section id="usage-mail-organize-folders">
<title>Getting Organized with Folders</title>
- <para>Evolution, like most other mail systems, stores mail in folders. You start out with a few mail folders, such as Inbox, Outbox, and Drafts, but you can create as many as you like. Create new folders by right clicking the folder list and selecting New Folder.</para>
+ <para>Evolution, like most other mail systems, stores mail in folders. You start out with a few mail folders, such as Inbox, Outbox, and Drafts, but you can create as many as you like. Create new folders by right-clicking the folder list and selecting New Folder.</para>
<para>When you click OK, your new folder appears in the folder view. You can then put messages in it by dragging and dropping them, or by using the Move button in the toolbar. If you want to move several messages at once, select the ones you want to move while holding down the Ctrl key, or use Shift to select a range of messages. If you create a filter with the filter assistant, you can have mail filed automatically.</para>
<note>
<para>The Inbox folder on most IMAP servers cannot contain both subfolders and messages. When you create additional folders on your IMAP mail server, branch them from the root of the IMAP account&apos;s folder tree, not from Inbox. If you create subfolders in your Inbox folder, you lose the ability to read messages that exist in your Inbox until you move the folders out of the way.</para>
@@ -1569,16 +1870,16 @@
<title>Message Contains: </title>
<para>Searches the message body and all headers for the specified text.</para>
</formalpara>
- <para>When you&rsquo;ve typed your search phrase, press Enter or click the Find Now button. Evolution will show your search results in the message list.</para>
+ <para>When you&apos;ve typed your search phrase, press Enter or click the Find Now button. Evolution will shows your search results in the message list.</para>
<para>For more complex search rules, select Advanced from the Search menu. You might want to create a vFolder instead; see <link linkend="usage-mail-organize-vfolders">Using vFolders</link> for more detail.</para>
- <para>When finish searching, go back to seeing all your messages by clicking the Clear button, or by entering a blank search.</para>
+ <para>When you have finished searching, go back to seeing all your messages by clicking the Clear button, or by entering a blank search.</para>
</section>
<section id="usage-mail-organize-spam">
<title>Stopping Junk Mail (Spam)</title>
<para>Evolution can check for junk mail for you. When the software detects mail that appears to be junk mail, it will flag it and hide it from your view. Messages that are flagged as junk mail are displayed only in the Junk folder.</para>
- <para>The junk mail filter can learn which kinds of mail are legitimate and which are not if you train it. When you first start using junk mail blocking, check the Junk folder to be sure that legitimate mail doesn&apos;t get flagged as junk mail. If good mail, also known as ham, is incorrectly flagged, remove it from the Junk folder by right-clicking it and selecting Mark as Not Junk. If Evolution misses junk mail, right-click the message, then click Mark as Junk. When you correct it, the filter will be able to recognize similar messages in the future, and will become more accurate as time goes on.</para>
- <para>To change your junk mail filtering preferences, click Tools &gt; Settings, then click Mail Preferences. In the mail preferences tool, click the Junk tab. Here, you have a couple of options: </para>
+ <para>The junk mail filter can learn which kinds of mail are legitimate and which are not if you train it. When you first start using junk mail blocking, check the Junk folder to be sure that legitimate mail doesn&apos;t get flagged as junk mail. If good mail, is incorrectly flagged, remove it from the Junk folder by right-clicking it and selecting Mark as Not Junk. If Evolution misses junk mail, right-click the message, then click Mark as Junk. When you correct it, the filter will be able to recognize similar messages in the future, and will become more accurate as time goes on.</para>
+ <para>To change your junk mail filtering preferences, click Edit &gt; Preferences, then click Mail Preferences. In the mail preferences tool, click the Junk tab for the following options: </para>
<formalpara id="bsaz9zd">
<title>Checking Incoming Mail for Junk: </title>
<para>This option turns automatic junk mail filtering on or off.</para>
@@ -1587,27 +1888,28 @@
<title>Include Remote Tests: </title>
<para>This option uses tests that require a network connection, such as checking to see if a message is in a list of known junk messages, or if the sender or gateway are blacklisted by anti-spam organizations. Remote tests add to the amount of time it takes to check for junk mail, but increase accuracy.</para>
</formalpara>
+ <para>For additional junk mail settings, see <link linkend="more-mail-options">Receiving Mail Options</link>.</para>
</section>
<section id="usage-mail-organize-filters">
<title>Create Rules to Automatically Organize Mail</title>
- <para>Filters work very much like the mail room in a large company. Their purpose is to bundle, sort, and distribute mail to the various folders. In addition, you can have multiple filters performing multiple actions that might effect the same message in several ways. For example, your filters could put copies of one message into multiple folders, or keep one copy and send one to another person, and it can do that quickly.</para>
+ <para>Filters work very much like the mail room in a large company. Their purpose is to bundle, sort, and distribute mail to the various folders. In addition, you can have multiple filters performing multiple actions that might effect the same message in several ways. For example, your filters could put copies of one message into multiple folders, or keep one copy and send one to another person.</para>
<section id="usage-mail-org-filters-new">
<title>Creating New Filter Rules</title>
- <procedure>
- <step id="bsazapz">
+ <orderedlist>
+ <listitem id="bsazapz">
<para>Click Tools &gt; Filters.</para>
- </step>
- <step id="bsazaxn">
+ </listitem>
+ <listitem id="bsazaxn">
<para>Click Add.</para>
- </step>
- <step id="bsazayr">
+ </listitem>
+ <listitem id="bsazayr">
<para>Type a name for the filter in the Rule name field.</para>
- </step>
- <step id="bsazb4y">
+ </listitem>
+ <listitem id="bsazb4y">
<para>Define the criteria for the filter in the If section.</para>
- <para>For each of the filter criterion, you must first select which parts of the message you want to filter:</para>
+ <para>For each of the filter criteria, you must first select which parts of the message you want to filter:</para>
<formalpara id="bsh25ic">
<title>Sender: </title>
<para>The sender&apos;s address.</para>
@@ -1624,14 +1926,14 @@
<title>Specific Header: </title>
<para>Any header including custom ones.</para>
</formalpara>
- <para>If a message uses a header more than once, Evolution pays attention only to the first instance, even if the message defines the header differently the second time. For example, if a message declares the Resent-From: header as &ldquo;engineering@rupertcorp.com&rdquo; and then restates it as &ldquo;marketing@rupertcorp.com&rdquo;, Evolution filters as though the second declaration did not occur. To filter on messages that use headers multiple times, use a regular expression. </para>
+ <para>If a message uses a header more than once, Evolution pays attention only to the first instance, even if the message defines the header differently the second time. For example, if a message declares the Resent-From: header as &ldquo;engineering@example.com&rdquo; and then restates it as &ldquo;marketing@example.com&rdquo;, Evolution filters as though the second declaration did not occur. To filter on messages that use headers multiple times, use a regular expression. </para>
<formalpara id="bshkazq">
<title>Message Body: </title>
<para>Searches in the actual text of the message.</para>
</formalpara>
<formalpara id="bshkb9x">
- <title>Expression (For programmers only):</title>
- <para> Match a message according to an expression you write in the Scheme language, used to define filters in Evolution.</para>
+ <title>Expression:</title>
+ <para> (For programmers only) Match a message according to an expression you write in the Scheme language, used to define filters in Evolution.</para>
</formalpara>
<formalpara id="bshkbvl">
<title>Date Sent: </title>
@@ -1697,13 +1999,13 @@
<listitem>
<formalpara id="bsmr5pj">
<title>Move to Folder: </title>
- <para>Moves the message into a folder you specify. Click Click Here to select the destination folder.</para>
+ <para>Moves the message into a folder you specify. Click Here to select the destination folder.</para>
</formalpara>
</listitem>
<listitem>
<formalpara id="bsmr9sg">
<title>Copy to Folder: </title>
- <para>Puts a copy of the message into a folder you specify. Click Click Here to select the destination folder.</para>
+ <para>Puts a copy of the message into a folder you specify. Click Here to select the destination folder.</para>
</formalpara>
</listitem>
<listitem>
@@ -1715,7 +2017,7 @@
<listitem>
<formalpara id="bsmr9zn">
<title>Stop Processing: </title>
- <para>Select this if you want to have all other filters to ignore this message.</para>
+ <para>Select this if you want to have all other filters ignore this message.</para>
</formalpara>
</listitem>
<listitem>
@@ -1769,97 +2071,88 @@
<listitem>
<formalpara id="bsmrdm5">
<title>Run Program: </title>
- <para>Evolution will run an application.</para>
+ <para>Evolution runs an application.</para>
</formalpara>
</listitem>
</itemizedlist>
- </step>
- <step id="bsazp1t">
+ </listitem>
+ <listitem id="bsazp1t">
<para>Click Add Action if you need multiple actions.</para>
- </step>
- <step id="bsazq81">
+ </listitem>
+ <listitem id="bsazq81">
<para>Click OK twice.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>There is an easy shortcut for fast filter or vFolder creation. </para>
- <procedure>
- <step id="bsh2232">
+ <orderedlist>
+ <listitem id="bsh2232">
<para>Right-click the message in the e-mail list.</para>
- </step>
- <step id="bsh22bz">
+ </listitem>
+ <listitem id="bsh22bz">
<para>Select one of the items under the Create Rule from the Message submenu.</para>
<para>Creating a rule based on a message opens the filter creation tool with some of the information about the message already filled in for your convenience.</para>
- </step>
- </procedure>
- <informalfigure id="usage-mail-filter-fig-createrule">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/filter-new-fig.png"/></imageobject></mediaobject>
-
- </informalfigure>
+ </listitem>
+ </orderedlist>
+ <mediaobject id="usage-mail-filter-fig-createrule"><imageobject><imagedata format="PNG" fileref="figures/filter-new-fig.png"/></imageobject></mediaobject>
<para>If you have several filters that match a single message, they are all applied to the message in order, unless one of the filters has the Stop Processing action. If you use that action in a filter, the messages that it affects are not touched by other filters. </para>
<para>When you first open the Filters dialog box, you are shown the list of filters sorted in the order in which they will be applied. You can move them up and down in the priority list by clicking the Up and Down buttons. </para>
</section>
<section id="filters-edit">
<title>Editing Filters</title>
- <procedure>
- <step id="bsazr7l">
+ <orderedlist>
+ <listitem id="bsazr7l">
<para>Click Tools &gt; Filters.</para>
- </step>
- <step id="bsazr9u">
- <para>Select the filter to edit and click Edit.</para>
- </step>
- <step id="bsazrhx">
- <para>Make the desired corrections and click OK twice.</para>
- </step>
- </procedure>
+ </listitem>
+ <listitem id="bsazr9u">
+ <para>Select the filter to edit, then click Edit.</para>
+ </listitem>
+ <listitem id="bsazrhx">
+ <para>Make the desired corrections, then click OK twice.</para>
+ </listitem>
+ </orderedlist>
</section>
<section id="filters-deleting">
<title>Deleting Filters</title>
- <procedure>
- <step id="bsazrrq">
+ <orderedlist>
+ <listitem id="bsazrrq">
<para>Click Tools &gt; Filters.</para>
- </step>
- <step id="bsazrvn">
- <para>Select the filter to remove and click Remove. </para>
- </step>
- <step id="bsazryx">
+ </listitem>
+ <listitem id="bsazrvn">
+ <para>Select the filter to remove, then click Remove. </para>
+ </listitem>
+ <listitem id="bsazryx">
<para>Click OK.</para>
- </step>
- </procedure>
- <note>
- <para>Changing Folder Names and Filters</para>
- <para>Incoming e-mail that your filters don&rsquo;t move goes into the Inbox; outgoing mail that they don&rsquo;t move ends up in the Sent folder. So be sure to change the filters that go with it.</para>
- </note>
+ </listitem>
+ </orderedlist>
</section>
</section>
<section id="usage-mail-organize-vfolders">
<title>Using vFolders</title>
- <para>If filters aren&rsquo;t flexible enough for you, or you find yourself performing the same search again and again, consider a vFolder. vFolders, or virtual folders, are an advanced way of viewing your e-mail messages within Evolution. If you get a lot of mail or often forget where you put messages, vFolders can help you keep things organized.</para>
+ <para>If filters aren&apos;t flexible enough, or you find yourself performing the same search again and again, consider a vFolder. vFolders, or virtual folders, are an advanced way of viewing your e-mail messages within Evolution. If you get a lot of mail or often forget where you put messages, vFolders can help you keep things organized.</para>
<para>A vFolder is really a hybrid of all the other organizational tools: it looks like a folder, it acts like a search, and you set it up like a filter. In other words, a conventional folder actually contains messages, but a vFolder is a view of messages that might be in several different folders. The messages it contains are determined on the fly using a set of criteria you choose in advance.</para>
<para>As messages that meet the vFolder criteria arrive or are deleted, Evolution automatically adjusts the vFolder contents. When you delete a message, it is erased from the folder in which it actually exists, as well as any vFolders that display it.</para>
<para>The Unmatched vFolder is the opposite of other vFolders: it displays all messages that do not appear in other vFolders.</para>
<para>If you use remote e-mail storage like IMAP or Microsoft Exchange, and have created vFolders to search through them, the Unmatched vFolder also searches the remote folders. If you do not create any vFolders that search remote mail stores, the Unmatched vFolder does not search in them either.</para>
- <para>As an example of using folders, searches, and vFolders, consider the following example: To organize his mailbox, Jim sets up a virtual folder for e-mails from his friend and co-worker Anna. He has another vFolder for messages that have novell.com in the address and Evolution in the subject line, so he can keep a record of what people from work send him about Evolution. If Anna sends him a message about anything other than Evolution, it only shows up in the &ldquo;Anna&rdquo; vFolder. When Anna sends him mail about the user interface for Evolution, he can see the message both in the &ldquo;Anna&rdquo; vFolder and in the &ldquo;Internal Evolution Discussion&rdquo; vFolder. </para>
+ <para>As an example of using folders, searches, and vFolders, consider the following: To organize his mailbox, Jim sets up a virtual folder for e-mail from his friend and co-worker Anna. He has another vFolder for messages that have novell.com in the address and Evolution in the subject line, so he can keep a record of what people from work send him about Evolution. If Anna sends him a message about anything other than Evolution, it only shows up in the &ldquo;Anna&rdquo; vFolder. When Anna sends him mail about the user interface for Evolution, he can see the message both in the &ldquo;Anna&rdquo; vFolder and in the &ldquo;Internal Evolution Discussion&rdquo; vFolder. </para>
<section id="vfolder-create">
- <title>Creating a vFolder</title>
- <procedure>
- <step id="bsazs7h">
+ <title>Creating A vFolder</title>
+ <orderedlist>
+ <listitem id="bsazs7h">
<para>Click Tools &gt; Virtual Folder Editor.</para>
- </step>
- <step id="bsazsav">
+ </listitem>
+ <listitem id="bsazsav">
<para>Click Add.</para>
- <informalfigure id="usage-mail-vfolder-fig-createrule">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_rule_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- </step>
- <step id="bsazsbo">
+ <mediaobject id="usage-mail-vfolder-fig-createrule"><imageobject><imagedata format="PNG" fileref="figures/evo_rule_a.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="bsazsbo">
<para>Type the name of the vFolder in the Rule Name field.</para>
- </step>
- <step id="bsazsjd">
+ </listitem>
+ <listitem id="bsazsjd">
<para>Select your search criteria. For each criterion, you must first select which of the following parts of the message you want the search to examine. The criteria are similar to those for filters.</para>
<formalpara id="bshkrpc">
<title>Sender: </title>
@@ -1878,8 +2171,8 @@
<para>Searches in the actual text of the message.</para>
</formalpara>
<formalpara id="bshkzum">
- <title>Expression (For programmers only):</title>
- <para> Match a message according to an expression you write in the Scheme language, used to define filters in Evolution.</para>
+ <title>Expression:</title>
+ <para> (For programmers only) Match a message according to an expression you write in the Scheme language used to define filters in Evolution.</para>
</formalpara>
<formalpara id="bshkzun">
<title>Date Sent: </title>
@@ -1891,7 +2184,7 @@
</formalpara>
<formalpara id="bshkzup">
<title>Label: </title>
- <para>Messages can have labels of Important, Work, Personal, To Do, or Later. You can set tables with other filters or by hand.</para>
+ <para>Messages can have labels of Important, Work, Personal, To Do, or Later. You can set labels with other filters or manually.</para>
</formalpara>
<formalpara id="bshkzuq">
<title>Score: </title>
@@ -1917,30 +2210,30 @@
<title>Mailing List: </title>
<para>Filters based on the mailing list the message came from. This filter might miss messages from some list servers, because it checks for the X-BeenThere header, which is used to identify mailing lists or other redistributors of mail. Mail from list servers that do not set X-BeenThere properly are not be caught by these filters.</para>
</formalpara>
- </step>
- <step id="bsazxjk">
- <para>Select the folders in which this vFolder will search. Your options are:</para>
+ </listitem>
+ <listitem id="bsazxjk">
+ <para>Select the folders where this vFolder will search. Your options are:</para>
<formalpara id="bsmr7jw">
<title>Specific Folders Only: </title>
<para>Uses individual folders for the vFolder source.</para>
</formalpara>
<formalpara id="bsmr82i">
<title>With All Local Folders: </title>
- <para>Uses all local folders for the vFolder source.</para>
+ <para>Uses all local folders for the vFolder source in addition to individual folders that are selected.</para>
</formalpara>
<formalpara id="bsmr8jg">
<title>With All Active Remote Folders: </title>
- <para>Remote folders are considered active if you are connected to the server; you must be connected to your mail server for the vFolder to include any messages from that source.</para>
+ <para>Remote folders are considered active if you are connected to the server; you must be connected to your mail server for the vFolder to include any messages from that source in addition to individual folders that are selected.</para>
</formalpara>
<formalpara id="bsmr8zu">
<title>With All Local and Active Remote Folders: </title>
- <para>Uses all local and active remote folders fo rthe vFolder source.</para>
+ <para>Uses all local and active remote folders for the vFolder source in addition to individual folders that are selected.</para>
</formalpara>
- </step>
- <step id="bsazxwc">
+ </listitem>
+ <listitem id="bsazxwc">
<para>Click OK.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
</section>
</chapter>
@@ -1950,7 +2243,7 @@
<para>This section shows you how to use the Evolution&trade; contacts tool to organize any amount of contact information, share addresses over a network, and indicates several ways to save time with everyday tasks.</para>
<itemizedlist>
<listitem>
- <para><link linkend="usage-contact-cards">The Contact Editor</link></para>
+ <para><link linkend="usage-contact-cards">Contacts and Cards</link></para>
</listitem>
<listitem>
<para><link linkend="contact-search">Searching for Contacts</link></para>
@@ -1965,85 +2258,100 @@
<para><link linkend="contact-automation-basic">Send me a Card: Adding New Cards Quickly</link></para>
</listitem>
</itemizedlist>
- <para> To learn about configuring the contacts tool, see <link linkend="config-prefs-contact">Directory Servers</link>. You can import contacts from other contact management tools with the Import tool by clicking File &gt; Import, or by mailing them to yourself as vCard attachments.</para>
- <para>A card contains the contact information for an individual in your address book. Double-click on a card to display all its details.</para>
+ <para> To learn about configuring the contacts tool, see <link linkend="config-prefs-contact">Contact Management</link>. </para>
<section id="usage-contact-cards">
- <title>The Contact Editor</title>
- <para>If you want to add or change cards, you&apos;ll use the contact editor. To change a card that already exists, double-click it to open the contact editor window. If you want to create a new card, click the New button in the toolbar to open the same window, with blank entry boxes for you to fill in.</para>
- <informalfigure id="usage-contact-editor-fig">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/evo_contacteditor_a.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <para>The contact editor window has three tabs:</para>
- <formalpara id="bshl614">
- <title>Contact: </title>
- <para>Contains basic contact information.</para>
- </formalpara>
- <formalpara id="bshl6pc">
- <title>Personal: </title>
- <para>Contains a more specific description of the person, including URLs for their calendar and free/busy information.</para>
- </formalpara>
- <formalpara id="bshl7iw">
- <title>Mailing Address: </title>
- <para>Contains the individuals mailing address. </para>
- </formalpara>
- <para>You can also use Actions menu to find Forward Contact, which opens a new message with the card already attached, and Send Message to Contact, which will opens a new message to the contact&apos;s e-mail address.</para>
- <para>From the Contact Editor toolbar, you can save and close, print, close, or delete the contact.</para>
- <para>You can add cards from within an e-mail message or calendar appointment. While looking at an e-mail, right-click any e-mail address or message, and click Create Card for this Address or Create Card for this Sender from the menu.</para>
- <para>Most of the items in the contact editor simply display the information you enter, but some of them have additional features:</para>
- <formalpara id="bsb02hn">
- <title>Full Name: </title>
- <para>Specify the name of your contact here. You can type a name into the Full Name field, but you can also click the Full Name button to bring up a small dialog box with text boxes for first and last names, titles like &ldquo;Mr.&rdquo; or &ldquo;Her Excellency,&rdquo; and suffixes like &ldquo;Jr.&rdquo; The Full Name field also interacts with the File Under box to help you organize your contacts and to handle multi-word surnames.To see how it works, type a name in the Full Name field. As an example, we&rsquo;ll use Miguel de Icaza. You&rsquo;ll notice that the File Under field also fills in, but in reverse: Icaza, Miguel de. If you had entered John Q. Doe, the contacts editor would have correctly guessed that the entry should be filed under &ldquo;Doe, John Q.&rdquo; However, Miguel&rsquo;s surname, &ldquo;de Icaza&rdquo;, has two words, and to sort it correctly you must enter de Icaza, Miguel in the File As entry.</para>
- </formalpara>
- <formalpara id="bsb03ok">
- <title>Where: </title>
- <para>Select one of your address books as the location for this contact. You might not be able to write to all available address books, especially those on a network.</para>
- </formalpara>
- <formalpara id="bsb03se">
- <title>Categories: </title>
- <para>Click the Categories button to select categories for this card. If you assign contact categories, you can then search for contacts using those categories. For more information on contact categories, see <link linkend="usage-contact-organize">Organizing your Contacts</link>.</para>
- </formalpara>
- <formalpara id="bsb042y">
- <title>Free/Busy and Calendar URLs: </title>
- <para>Click the Personal Information tab to enter Web addresses for the contact. If the contact publishes Free/Busy or calendar data online, using a server other than Exchange or GroupWise, you can specify the addresses for those servers here. After you do so, you can check their schedule when creating appointments in the calendar.</para>
- </formalpara>
+ <title>Contacts and Cards</title>
+ <para>Contacts are the individuals you have chosen to add to your address book so you can keep track of information about them and send e-mail to them. In Evolution, an individual contact is called a card.</para>
+
+ <section id="bsqchx3">
+ <title>The Contact Editor</title>
+ <para>If you want to add or change cards, you use the contact editor. To change a card that already exists, double-click it to open the contact editor window. If you want to create a new card, click the New button in the toolbar to open the same window, with blank entry boxes for you to fill in.</para>
+ <mediaobject id="usage-contact-editor-fig"><imageobject><imagedata format="PNG" fileref="figures/evo_contacteditor_a.png"/></imageobject></mediaobject>
+ <para>The contact editor window has three tabs:</para>
+ <formalpara id="bshl614">
+ <title>Contact: </title>
+ <para>Contains basic contact information.</para>
+ </formalpara>
+ <formalpara id="bshl6pc">
+ <title>Personal: </title>
+ <para>Contains a more specific description of the person, including URLs for calendar and free/busy information.</para>
+ </formalpara>
+ <formalpara id="bshl7iw">
+ <title>Mailing Address: </title>
+ <para>Contains the individual&apos;s mailing address. </para>
+ </formalpara>
+ <para>You can also use Actions menu to find Forward Contact, which opens a new message with the card already attached, and Send Message to Contact, which opens a new message to the contact&apos;s e-mail address.</para>
+ <para>From the Contact Editor toolbar, you can save and close, print, close, or delete the contact.</para>
+ <para>You can add cards from within an e-mail message or calendar appointment. In an open e-mail, right-click any e-mail address or message, and click Create Card for this Address or Create Card for this Sender from the menu.</para>
+ <para>Most of the items in the contact editor simply display the information you enter, but some of them have additional features:</para>
+ <formalpara id="bsb02hn">
+ <title>Full Name: </title>
+ <para>Specify the name of your contact here. You can type a name into the Full Name field, but you can also click the Full Name button to bring up a small dialog box with text boxes for first and last names, titles like &ldquo;Mr.&rdquo; or &ldquo;Her Excellency,&rdquo; and suffixes like &ldquo;Jr.&rdquo; The Full Name field also interacts with the File Under box to help you organize your contacts and to handle multi-word surnames.To see how it works, type a name in the Full Name field. As an example, we&rsquo;ll use Miguel de Icaza. You&rsquo;ll notice that the File Under field also fills in, but in reverse: Icaza, Miguel de. If you had entered John Q. Doe, the contacts editor would have correctly guessed that the entry should be filed under &ldquo;Doe, John Q.&rdquo; However, Miguel&rsquo;s surname, &ldquo;de Icaza&rdquo;, has two words, and to sort it correctly you must enter de Icaza, Miguel in the File As entry.</para>
+ </formalpara>
+ <formalpara id="bsb03ok">
+ <title>Where: </title>
+ <para>Select one of your address books as the location for this contact. You might not be able to write to all available address books, especially those on a network.</para>
+ </formalpara>
+ <formalpara id="bsb03se">
+ <title>Categories: </title>
+ <para>Click the Categories button to select categories for this card. If you assign contact categories, you can then search for contacts using those categories. For more information on contact categories, see <link linkend="usage-contact-organize">Organizing your Contacts</link>.</para>
+ </formalpara>
+ <formalpara id="bsb042y">
+ <title>Free/Busy and Calendar URLs: </title>
+ <para>Click the Personal Information tab to enter Web addresses for the contact. If the contact publishes Free/Busy or calendar data online, using a server other than Exchange or GroupWise, you can specify the addresses for those servers here. After you do so, you can check their schedules when creating appointments in the calendar.</para>
+ </formalpara>
+ </section>
</section>
<section id="contact-search">
<title>Searching for Contacts</title>
- <procedure>
- <step id="bsb04h7">
+ <orderedlist>
+ <listitem id="bsb04h7">
<para>Select your search type in the search bar.</para>
- </step>
- <step id="bsb04kf">
+ </listitem>
+ <listitem id="bsb04kf">
<para>Specify your query.</para>
- </step>
- <step id="bsb04m3">
+ </listitem>
+ <listitem id="bsb04m3">
<para>Press Enter to begin the search.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>For a more complex search, select Search Advanced and select criteria that describe your desired contact:</para>
- <procedure>
- <step id="bsb04xh">
+ <orderedlist>
+ <listitem id="bsb04xh">
<para>Name the rule in the Rule Name field.</para>
- </step>
- <step id="bsb050n">
+ </listitem>
+ <listitem id="bsb050n">
<para>Set up your criteria in the If field.</para>
- </step>
- <step id="bsb0546">
+ </listitem>
+ <listitem id="bsb0546">
<para>Click Add Criterion to add additional criteria.</para>
- </step>
- <step id="bsb05aw">
+ </listitem>
+ <listitem id="bsb05aw">
<para>Click Search.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>To show all your contacts, Click Clear in the search bar, press Shift+Ctrl+B, or search with an empty query.</para>
</section>
<section id="usage-contact-organize">
<title>Organizing your Contacts</title>
<para>Just as you can search mail, you can search contacts. You can also create several individual address books, or contact groups. Within a given contact group, you can have several categories of contacts. </para>
+ <itemizedlist>
+ <listitem>
+ <para><link linkend="usage-contact-organize-group">Contacts Groups</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-contact-organize-group-list">Creating a List of Contacts</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-contact-organize-group-category">Grouping with Categories</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="usage-contact-sharing-setup">Configuring Evolution to use LDAP</link></para>
+ </listitem>
+ </itemizedlist>
<section id="usage-contact-organize-group">
<title>Contacts Groups</title>
@@ -2054,66 +2362,86 @@
</note>
</section>
+ <section id="bsqcii0">
+ <title>Importing Contacts</title>
+ <para>You can import contacts from other contact management tools with the Import tool.</para>
+ <orderedlist>
+ <listitem id="bsqciqk">
+ <para>Click File &gt; Import.</para>
+ <para>or</para>
+ <para>Mail yourself a contact as vCard attachment.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+
<section id="usage-contact-organize-group-list">
<title>Creating a List of Contacts</title>
<para>A contact list is a set of contacts with a single nickname that you create. When you send e-mail to the nickname, it is sent to every member of the list. This differs from a network mailing list in that it exists only on your computer as a convenience to you, rather than as an actual e-mail address managed by a mailing list application on a server.</para>
<para>For example, you could create one card for each family member, then add those cards to a contact list called &ldquo;Family&rdquo;. Then, instead of entering each person&apos;s e-mail address individually, you can send e-mail to &ldquo;Family&rdquo; and the message would go to all of them.</para>
<para> To create a list of contacts: </para>
- <procedure>
- <step id="bshlf6r">
- <para>Open the list creation dialog box by clicking the New List button or click File &gt; New &gt; Contact List.</para>
- </step>
- <step id="bshlfal">
+ <orderedlist>
+ <listitem id="bshlf6r">
+ <para>Open the list creation dialog box by clicking the New List button.</para>
+ <para>or</para>
+ <para>Click File &gt; New &gt; Contact List.</para>
+ </listitem>
+ <listitem id="bshlfal">
<para>Specify a name for the list.</para>
- </step>
- <step id="bshlfcp">
- <para>Specify the names or e-mail addresses of contacts, or just drag contacts from the main window into the list.</para>
- </step>
- <step id="bshlfem">
- <para>Choose whether you want to hide the e-mail addresses when you send a message to the list. Unless it is a very small list, it is recommended that you leave the addresses hidden. This is the same thing as using the &ldquo;Bcc:&rdquo; feature discussed in <link linkend="usage-mail-getnsend-send-to-types">Specifying Extra Recipients for E-Mail</link>.</para>
- </step>
- <step id="bshlfgv">
+ </listitem>
+ <listitem id="bshlfcp">
+ <para>Specify the names or e-mail addresses of contacts.</para>
+ <para>or</para>
+ <para>Drag contacts from the main window into the list.</para>
+ </listitem>
+ <listitem id="bshlfem">
+ <para>Choose whether you want to hide the e-mail addresses when you send a message to the list. </para>
+ <para>Unless it is a very small list, it is recommended that you leave the addresses hidden. This is the same thing as using the &ldquo;Bcc:&rdquo; feature discussed in <link linkend="usage-mail-getnsend-send-to-types">Specifying Additional Recipients for E-Mail</link>.</para>
+ </listitem>
+ <listitem id="bshlfgv">
<para>When you are finished, click OK. </para>
- </step>
- </procedure>
- <para>The list appears as a contact card, which you can use as you would any other. That includes e-mailing the list to another person, and sending e-mail to the list.</para>
- <para>To mail the list, open a new e-mail and type the name you chose for the list. Evolution will address the message to the entire list when you send it. You can also right-click on the list&rsquo;s address card in the contacts tool and select Send Message to List.</para>
+ </listitem>
+ </orderedlist>
+ <para>The list appears as a contact card, which you can use as you would any other card. Including e-mailing the list to another person and sending e-mail to the list.</para>
+ <para>To mail the list, open a new e-mail and type the name you chose for the list. Evolution will address the message to the entire list when you send the message. You can also right-click on the list&apos;s address card in the contacts tool and select Send Message to List.</para>
<para>Evolution cannot store contact lists on Microsoft Exchange servers.</para>
</section>
<section id="usage-contact-organize-group-category">
<title>Grouping with Categories</title>
<para>Anther way to group cards is to mark them as belonging to different categories. You can mark a card as being in several categories or no category at all. For example, you put a friend&apos;s card in the &ldquo;Business&rdquo; category because he works with you, the &ldquo;Friends&rdquo; category because he&apos;s a friend, and the &ldquo;Frequent&rdquo; category because you call him often.</para>
- <para>To mark a card as belonging to a category, click the Categories button at the lower right. In the dialog box that appears, you can check as many or as few categories as you like.</para>
- <para>If the master list of categories doesn&rsquo;t suit you, you can add your own categories. Just specify the new category&apos;s name in the text box, then click Categories and select Edit Master Category List in the window that appears. </para>
+ <para>To mark a card as belonging to a category, click the Categories button at the lower right. In the dialog box that appears, you can select as many or as few categories as you like.</para>
+ <para>If the master list of categories doesn&apos;t suit you, you can add your own categories. Just specify the new category&apos;s name in the dialog box, then click Categories and select Edit Master Category List in the window that appears. </para>
</section>
</section>
<section id="usage-contact-sharing">
<title>LDAP: Shared Contact Groups on a Network</title>
<para>The <link linkend="ldap">LDAP</link> protocol was created to let users share contact information over a network by sharing access to a central directory. LDAP allows a company to maintain a shared set of contact information. Many companies keep a common LDAP address book for all their employees or for client contacts.</para>
- <para>To learn how to add a remote directory to your available contact folders, see <link linkend="config-prefs-contact">Directory Servers</link>. Remote groups of contacts appear under the On LDAP Servers item in the shortcut bar. They work like a local folder of cards, with the following exceptions: </para>
+ <para>To learn how to add a remote LDAP directory to your available contact folders, see <link linkend="config-prefs-contact">Contact Management</link>. Remote groups of contacts appear under the On LDAP Servers item in the shortcut bar. They work like a local folder of contact cards, with the following exceptions: </para>
<itemizedlist>
<listitem>
<para>Network folders are only available when you are connected to the network. If you use a laptop or have a modem connection, you might want to copy or cache some of the network directory. You do this by dragging and dropping your desired contacts into the local contacts list.</para>
</listitem>
<listitem>
- <para>To prevent excess network traffic, Evolution does not normally load data from the LDAP server immediately upon opening. You must click Display All before contacts are loaded from the network. You can change this behavior in the Contact Preferences window.</para>
+ <para>To prevent excess network traffic, Evolution does not normally load data from the LDAP server upon opening. You must click Display All before contacts are loaded from the network. You can change this behavior in the Contact Preferences window.</para>
</listitem>
<listitem>
<para>Depending on your server settings, you might not be able to edit all the fields in a contact stored on an LDAP server. Some servers prohibit some or all changes, and others use a smaller set of fields than Evolution allows. Check with your system administrator if you need different settings.</para>
</listitem>
+ <listitem>
+ <para>When synchronizing your offline LDAP address book, you must re-synchronize the entire address book every time.</para>
+ </listitem>
</itemizedlist>
<section id="usage-contact-sharing-setup">
<title>Configuring Evolution to use LDAP</title>
- <para>For information about setting up Evolution to use LDAP, refer to <link linkend="config-prefs-contact">Directory Servers</link>.</para>
+ <para>For information about setting up Evolution to use LDAP, refer to <link linkend="config-prefs-contact">Contact Management</link>.</para>
</section>
</section>
<section id="contact-automation-basic">
<title>Send me a Card: Adding New Cards Quickly</title>
- <para>As noted before, when you get information about a person in the mail or in a calendar entry, you can add it to an address card. To do so, right-click any e-mail address or e-mail message, and click Add Sender to Contacts on the menu that appears. Evolution can also add cards from a hand-held device during HotSync operation. For more information, see <link linkend="config-sync">Synchronizing Your Handheld Device</link>.</para>
+ <para>As noted before, when you get information about a person in the mail or in a calendar entry, you can add it to an address card. To do so, right-click any e-mail address or e-mail message, and click Add Sender to Contacts on the menu that appears. Evolution can also add cards from a hand-held device during HotSync&z-3rdParty; operation. For more information, see <link linkend="config-sync">Synchronizing Your Handheld Device</link>.</para>
</section>
</chapter>
@@ -2134,7 +2462,7 @@
<para><link linkend="usage-calendar-multiple">Multiple Calendars and Web Calendars</link></para>
</listitem>
<listitem>
- <para><link linkend="usage-calendar-todo">The Task Pad</link></para>
+ <para><link linkend="usage-calendar-todo">The Task List</link></para>
</listitem>
<listitem>
<para><link linkend="bshlzlu">Configuring Time Zones</link></para>
@@ -2143,9 +2471,9 @@
<section id="usage-calendar-view">
<title>Ways of Looking at your Calendar</title>
- <para>In Evolution&trade;, you can keep multiple calendars and overlay them one over the next. For example, you might have a schedule of events for work, one for home, and one for your favorite sports team. The shortcut bar lists those calendars, and you can select or deselect the boxes next to them to show and hide the appointments in your calendar view. By hiding and showing different sets of appointments, you can be sure to avoid conflicts, while keeping a minimum of clutter in your view at any one time.</para>
+ <para>In Evolution&trade;, you can keep multiple calendars and overlay them one over the next. For example, you might have a schedule of events for work, one for home, and one for your favorite sports team. The shortcut bar lists those calendars, and you can select or deselect the boxes next to them to show and hide the appointments in your calendar view. By hiding and showing different sets of appointments, you can be sure to avoid conflicts, while keeping a minimum of clutter in your view.</para>
<para>Appointments for each calendar appear as a different color.</para>
- <para>The toolbar offers you four different buttons that can show you different views of your calendar: </para>
+ <para>The toolbar offers you five different buttons that can show you different views of your calendar: </para>
<itemizedlist>
<listitem>
<para>Day </para>
@@ -2157,7 +2485,10 @@
<para>Week </para>
</listitem>
<listitem>
- <para>Month </para>
+ <para>Month</para>
+ </listitem>
+ <listitem>
+ <para>List</para>
</listitem>
</itemizedlist>
<para>You can also select an arbitrary range of days in the small calendar at the upper right. To do this, click and drag on the days that you want to view in your calendar.</para>
@@ -2167,7 +2498,7 @@
<section id="usage-calendar-apts">
<title>Scheduling With the Evolution Calendar</title>
- <para>There are two types of scheduling events with Evolution, appointments and meetings. An appointment is an event you schedule for yourself only. Where a meeting is an event that you schedule multiple people for. You can also use the busy/free search for meetings to determine peoples availability.</para>
+ <para>There are two types of scheduling events with Evolution, appointments and meetings. An appointment is an event you schedule for yourself only, and a meeting is an event that you schedule multiple people for. You can also use the busy/free search for meetings to determine the availability of invitees.</para>
<itemizedlist>
<listitem>
<para><link linkend="usage-calendar-apts-basic">Creating Appointments</link></para>
@@ -2176,7 +2507,7 @@
<para><link linkend="usage-calendar-rsvp">Sending a Meeting Invitation</link></para>
</listitem>
<listitem>
- <para><link linkend="replying-to-rsvp">Accepting and Replying to a Meeting Request</link></para>
+ <para><link linkend="replying-to-rsvp"> <br />Accepting and Replying to a Meeting Request</link></para>
</listitem>
<listitem>
<para><link linkend="receiving-rsvp-response">Reading Responses to Meeting Requests</link></para>
@@ -2197,107 +2528,123 @@
<section id="usage-calendar-apts-basic">
<title>Creating Appointments</title>
- <procedure>
- <step id="bshlods">
+ <para>In Evolution, an appointment is an event you schedule for yourself.</para>
+ <orderedlist>
+ <listitem id="bshlods">
<para>Click File &gt; New Appointment.</para>
<para>or</para>
<para>Click Calendars, then click New.</para>
<para>or</para>
<para>Double-click in a blank space in the calendar.</para>
- </step>
- <step id="bshlp2i">
+ </listitem>
+ <listitem id="bshlp2i">
<para>Type a brief summary of the appointment in the Summary field.</para>
- </step>
- <step id="bshlrup">
+ </listitem>
+ <listitem id="bshlrup">
<para>Type a location for the appointment in the Location field.</para>
- </step>
- <step id="bshlrzp">
+ </listitem>
+ <listitem id="bshlrzp">
<para>Select a classification in the Classification drop-down list.</para>
- </step>
- <step id="bshls74">
+ </listitem>
+ <listitem id="bshls74">
<para>Select a calendar in the Calendar drop-down list.</para>
- </step>
- <step id="bshlsdj">
+ </listitem>
+ <listitem id="bshlsdj">
<para>Type a category in the Categories field.</para>
- </step>
- <step id="bshlsib">
+ </listitem>
+ <listitem id="bshlsib">
<para>Type a description in the Descriptions field.</para>
- </step>
- <step id="bshlrir">
+ </listitem>
+ <listitem id="bshlrir">
<para>Specify a starting and ending date.</para>
- </step>
- <step id="bshlsv2">
+ </listitem>
+ <listitem id="bshlsv2">
<para>Select whether you want this appointment to be an all day event.</para>
- </step>
- <step id="bshlt0m">
+ </listitem>
+ <listitem id="bshlt0m">
<para>If the event is not an all day event, specify a starting and ending time.</para>
- </step>
- <step id="bshltfl">
+ </listitem>
+ <listitem id="bshltfl">
<para>Select whether you want to show the time as busy.</para>
- </step>
- <step id="bshlpwz">
- <para>Select if you want an alarm for this appointment. If you select an alarm specify when and how you want to the alarm to notify you.</para>
- </step>
- <step id="bshlu6p">
+ </listitem>
+ <listitem id="bshlpwz">
+ <para>Select if you want an alarm for this appointment. If you select an alarm, specify when and how you want to the alarm to notify you.</para>
+ </listitem>
+ <listitem id="bshlu6p">
<para>Click the Recurrence tab, and specify whether you want the appointment to reoccur and how often.</para>
- </step>
- </procedure>
- <para>An All Day event appears at the top of a day&apos;s appointment list, in the grey header under the date, rather than inside. That makes it easy to have appointments that overlap and fit inside each other. For example, a conference might be an All Day appointment, and the meetings at the conference could be timed appointments. Appointments with specific starting and ending times can also overlap. When they do they&apos;re displayed as multiple columns in the day view of the calendar.</para>
+ </listitem>
+ </orderedlist>
+ <para>An All Day event appears at the top of a day&apos;s appointment list, in the grey header under the date, rather than inside. That makes it easy to have appointments that overlap and fit inside each other. For example, a conference might be an All Day appointment, and the meetings at the conference could be timed appointments. Appointments with specific starting and ending times can also overlap. When they do they display as multiple columns in the day view of the calendar.</para>
<para>If you create calendar appointments that overlap, Evolution displays them side by side in your calendar. </para>
<section id="bshly4v">
<title>Reminders</title>
<para>You can have several Reminders for individual appointments, any time prior to the appointment you schedule. You can have one reminder of each of the following types: </para>
- <formalpara id="bsb097g">
- <title>Display: </title>
- <para>A window pops up on your screen to remind you of your appointment. </para>
- </formalpara>
- <formalpara id="bsb09dl">
- <title>Audio: </title>
- <para>Your computer delivers a sound alarm. </para>
- </formalpara>
- <formalpara id="bsb09hb">
- <title>Program: </title>
- <para>You can run a program as a reminder. You can enter its name in the text field, or find it with the Browse button. </para>
- </formalpara>
+ <itemizedlist>
+ <listitem>
+ <formalpara id="bsb097g">
+ <title>Display: </title>
+ <para>A window pops up on your screen to remind you of your appointment. </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="bsb09dl">
+ <title>Audio: </title>
+ <para>Your computer delivers a sound alarm. </para>
+ </formalpara>
+ </listitem>
+ <listitem>
+ <formalpara id="bsb09hb">
+ <title>Program: </title>
+ <para>You can run a program as a reminder. You can enter its name in the text field, or find it with the Browse button. </para>
+ </formalpara>
+ </listitem>
+ </itemizedlist>
<para>If you have stored reminders in a local calendar, they work from the moment you log in. However, for reminders stored on an Exchange server, you must run Evolution at least once after logging in. No matter where the reminders are stored, you can quit Evolution and still be reminded of an upcoming appointment. </para>
- <para>If you are using a a calendar on a GroupWise&reg; or Exchange server, select a Classification for the appointment, to determine who can view it. Public is the default category, and a public appointment can be viewed by anyone on the calendar sharing network. Private denotes one level of security, and Confidential an even higher level. The different levels vary depending on your server settings; check with your system administrator or adjust your delegation settings.</para>
- <para>If you are using a GroupWise or Exchange server, other people on the server can check your schedule to see if you are available at any given time. If you have an appointment that is flexible or that you want to designate as Free rather than Busy time, select the Free box in the Show Time As section. Normally, appointments display as Busy. </para>
- <para>You can categorize appointments in the same way you can categorize contacts. Click the Categories button to open a checklist. Select the check box next to each category that matches the appointment you are creating. </para>
+ <para>If you are using a a calendar on a Novell GroupWise&reg; or Microsoft Exchange server, select a Classification for the appointment to determine who can view it. Public is the default category, and a public appointment can be viewed by anyone on the calendar sharing network. Private denotes one level of security, and Confidential an even higher level. The different levels vary depending on your server settings; check with your system administrator or adjust your delegation settings.</para>
+ <para>If you are using a Novell GroupWise or Microsoft Exchange server, other people on the server can check your schedule to see if you are available at any given time. If you have an appointment that is flexible or that you want to designate as Free rather than Busy time, select the Free box in the Show Time As section. Normally, appointments display as Busy. </para>
+ <para>You can categorize appointments in the same way you can categorize contacts. </para>
+ <orderedlist>
+ <listitem id="bsqcyio">
+ <para>Click Categories.</para>
+ </listitem>
+ <listitem id="bsqcyli">
+ <para>Select the check box next to each category that matches the appointment you are creating.</para>
+ </listitem>
+ </orderedlist>
<tip>
- <para>Adding a New Appointment Category</para>
- <para>You can add a new category to your category list by clicking on Edit Master Category List and single-clicking on Click here to add a category.</para>
+ <para>You can add a new category to your category list by clicking Edit Master Category List, then click Click Here To Add A Category.</para>
</tip>
<para>After you&apos;ve selected your categories, click OK to assign these categories to the appointment. The categories you selected are now listed in the text box to the right of the Categories button.</para>
<para>Appointments with categories appear with icons in the calendar display, and you can also search for appointments by category. To display only the appointments in a particular category, select Category Is in the search bar at the top of the calendar, and select a category.</para>
- <para>The Recurrence tab lets you describe repetition in appointments ranging from once every day up to once every 100 years. You can then choose a time and date when the appointment stops recurring, and, under Exceptions, pick individual days when the appointment does not recur. Make your selections from left to right, and you form a sentence: &ldquo;Every two weeks on Monday and Friday until January 3, 2008&rdquo; or &ldquo;Every month on the first Friday for 12 occurrences&rdquo;.</para>
+ <para>The Recurrence tab lets you describe repetition in appointments ranging from once every day up to once every 100 years. You can then choose a time and date when the appointment stops recurring, and, under Exceptions, pick individual days when the appointment does not recur. Make your selections from left to right, and you form a sentence: &ldquo;Every two weeks on Monday and Friday until January 3, 2008&rdquo; or &ldquo;Every month on the first Friday for 12 occurrences.&rdquo;</para>
<para>After you have finished settings, click the disk icon in the toolbar to save and close the appointment editor window. If you want, you can alter an appointment summary in the calendar view by clicking on it and typing. You can change other settings by right-clicking on the appointment then choosing Open, or double-clicking the appointment.</para>
</section>
</section>
<section id="usage-calendar-rsvp">
<title>Sending a Meeting Invitation</title>
- <para>Evolution can be used to schedule group meetings and help you manage responses to meeting requests.</para>
+ <para>In Evolution, a meeting is an event you schedule for multiple people. Evolution can be used to schedule group meetings and help you manage responses to meeting requests.</para>
<para>When you create a meeting or group appointment, you can specify the attendees in several categories, such as &ldquo;chair&rdquo; or &ldquo;required&rdquo;. When you save the appointment listing, each attendee is sent an e-mail with the appointment information, which also gives them the option to respond.</para>
- <para>If you don&apos;t need to collect attendance information when you&apos;re scheduling an event, and would rather just announce it, click Actions &gt; Forward as iCalendar. This opens a new e-mail message with the event notification attached as an announcement. Recipients can add the event to their calendars with one click, but it won&apos;t automatically send you e-mail about whether they plan to attend.</para>
+ <para>If you don&apos;t need to collect attendance information when you&apos;re scheduling an event, and would rather just announce the event, click Actions &gt; Forward as iCalendar. This opens a new e-mail message with the event notification attached as an announcement. Recipients can add the event to their calendars with one click, but it won&apos;t automatically send you e-mail about whether they plan to attend.</para>
<para>To schedule a meeting: </para>
- <procedure>
- <step id="bsb0agm">
+ <orderedlist>
+ <listitem id="bsb0agm">
<para>Click File &gt; New &gt; Meeting, then click the Invitation tab.</para>
- </step>
- <step id="bsb0ao0">
+ </listitem>
+ <listitem id="bsb0ao0">
<para>If you have multiple e-mail accounts, select the one to use by selecting an item in the Organizer field.</para>
- </step>
- <step id="bsb0b04">
- <para>Click Add to add an attendee to enter the names and e-mail addresses of people you will invite.</para>
- </step>
- <step id="bsb0bjm">
+ </listitem>
+ <listitem id="bsb0b04">
+ <para>Click Add to add the names and e-mail addresses of people you will invite.</para>
+ </listitem>
+ <listitem id="bsb0bjm">
<para>Click OK.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>An e-mail is sent out to all the recipients, inviting them to your event.</para>
<note>
- <para>A meeting can have only one organizer, and only the organizer can add participants. You can designate yourself the organizer of the meeting, but unless you coordinate that action with the organizer you are replacing, you could create confusion in the scheduling process. If you want to invite additional people to a meeting without changing the organizer, it&rsquo;s best to forward the first organizer&rsquo;s message to the additional participants.</para>
+ <para>A meeting can have only one organizer, and only the organizer can add participants. You can designate yourself the organizer of the meeting, but unless you coordinate that action with the organizer you are replacing, you could create confusion in the scheduling process. If you want to invite additional people to a meeting without changing the organizer, it&apos;s best to forward the first organizer&apos;s message to the additional participants.</para>
</note>
</section>
@@ -2316,7 +2663,7 @@ Accepting and Replying to a Meeting Request</title>
<para>Decline</para>
</listitem>
</itemizedlist>
- <para>Click OK, an e-mail is sent to the organizer with your answer. The event will also be added to your calendar if you accept.</para>
+ <para>Click OK to send an e-mail to the organizer with your answer. The event is also added to your calendar if you accept.</para>
<para>After you add the meeting to your calendar, you can make changes to the information, but if the original organizer sends out another update, your changes might be overwritten.</para>
</section>
@@ -2327,33 +2674,31 @@ Accepting and Replying to a Meeting Request</title>
<section id="usage-calendar-freebusy">
<title>Using the Free/Busy View</title>
- <para>In addition to the standard meeting scheduling tools, you can use the Free/Busy view to check whether people are available in advance. The Free/Busy feature is normally a function of dedicated groupware servers such as Exchange and Groupwise. However, you can also publish Free/Busy information online, and access Free/Busy information published elsewhere. If not everyone you collaborate with publishes Free/Busy data, you can still use iCal event invitations to coordinate schedules with other people.</para>
+ <para>In addition to the standard meeting scheduling tools, you can use the Free/Busy view to check whether people are available in advance. The Free/Busy feature is normally a function of dedicated groupware servers such as Microsoft Exchange and Novell Groupwise. However, you can also publish Free/Busy information online, and access Free/Busy information published elsewhere. If not everyone you collaborate with publishes Free/Busy data, you can still use iCal event invitations to coordinate schedules with other people.</para>
<para>To access the free/busy view: </para>
- <procedure>
- <step id="bsbzmp5">
+ <orderedlist>
+ <listitem id="bsbzmp5">
<para>Click File &gt; New &gt; Meeting.</para>
- </step>
- <step id="bsb0c7x">
+ </listitem>
+ <listitem id="bsb0c7x">
<para>Click the Scheduling tab.</para>
- <informalfigure id="bs4aw7i">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/schedule.png"/></imageobject></mediaobject>
-
- </informalfigure>
- </step>
- </procedure>
+ <mediaobject id="bs4aw7i"><imageobject><imagedata format="PNG" fileref="figures/schedule.png"/></imageobject></mediaobject>
+
+ </listitem>
+ </orderedlist>
<formalpara id="bsb0cyw">
<title>Attendee List: </title>
<para>The Attendee List shows the people who have been invited to the appointment. It also shows their RSVP status.</para>
</formalpara>
<formalpara id="bsb0da3">
<title>Schedule Grid: </title>
- <para>The Schedule Grid shows the published Free/Busy information for the people you have invited. This is where you compare schedules to find free time to schedule the appointment. Individuals will only have visible scheduling information if they use the same GroupWise or Exchange server you do (that is, if they are in the same organization as you), or if they publish free/busy information at a URL you can reach and you have entered that URL into their contact cards using the contact editor.</para>
+ <para>The Schedule Grid shows the published Free/Busy information for the people you have invited. This is where you compare schedules to find free time to schedule the appointment. Individuals have visible scheduling information only if they use the same Novell GroupWise or Microsoft Exchange server you do (that is, if they are in the same organization as you), or if they publish free/busy information at a URL you can reach and you have entered that URL into their contact cards using the contact editor.</para>
</formalpara>
<section id="usage-calendar-freebusy-scheduling">
<title>Scheduling an Appointment</title>
- <para>To schedule an appointment, you first need people&apos;s Free/Busy information. If you&rsquo;re using the Evolution Connector for Microsoft Exchange, all of the information is already available to you in the Global Address List. Otherwise, each person needs to e-mail you their schedule files and you need to incorporate them into your calendar.</para>
- <para>Regardless of how you get the information, Evolution will display it in the Scheduling tab. The pending appointment time appears in white with bold black borders. Each attendee&rsquo;s free and busy times appear color-coded next to their names in the attendee list.</para>
+ <para>To schedule an appointment, you first need people&apos;s Free/Busy information. If you&apos;re using the Evolution Connector for Microsoft Exchange, all of the information is already available to you in the Global Address List. Otherwise, each person needs to e-mail you their schedule files and you need to incorporate them into your calendar.</para>
+ <para>Regardless of how you get the information, Evolution displays it in the Scheduling tab. The pending appointment time appears in white with bold black borders. Each attendee&apos;s free and busy times appear color-coded next to their names in the attendee list.</para>
<para>Adjust the meeting time, either by dragging the meeting borders or by using the Autopick buttons to choose a time automatically, then click Save and Close. Attendees on an Exchange server have the appointment updated automatically; others receive e-mail notification of any change in plans.</para>
<para>Read <link linkend="full-advantage">Scheduling Appointments with Free/Busy</link> to learn about how to use this feature with the Evolution Connector for Microsoft Exchange. </para>
</section>
@@ -2361,20 +2706,20 @@ Accepting and Replying to a Meeting Request</title>
<section id="publishing-freebusy">
<title>Publishing Free/Busy Data Without a Groupware Server</title>
<para>You can publish Free/Busy information to a WebDAV or other Web server with HTTP PUT support. Check with your system administrator if you are not sure you have this functionality.</para>
- <para>To set up Free/Busy publishing, select Tools &gt; Settings, then click Calendar and Tasks. In the Free/Busy Publishing tab, click Add, then specify the URL for your upload server. Select the frequency with which you wish to upload data, the calendars for which you wish to display data, your username and password, then click OK. </para>
+ <para>To set up Free/Busy publishing, select Edit &gt; Preferences, then click Calendar and Tasks. In the Free/Busy Publishing tab, click Add, then specify the URL for your upload server. Select the frequency with which you wish to upload data, the calendars for which you wish to display data, your username and password, then click OK. </para>
<para>To have Free/Busy data published immediately, go to the Calendar tool and click Actions &gt; Publish Free/Busy.</para>
</section>
<section id="accessing-freebusy-offserver">
<title>Accessing Free/Busy Data Without a Groupware Server</title>
- <para>If someone gives you a URL for Free/Busy data or for their Web calendar, you can enter it as part of the contact information in the Contacts tool. Then, when you schedule a meeting with them, Evolution looks up the schedule and display it in the meeting planner.</para>
+ <para>If someone gives you a URL for Free/Busy data or for their Web calendar, you can enter it as part of the contact information in the Contacts tool. Then, when you schedule a meeting with them, Evolution looks up the schedule and displays it in the meeting planner.</para>
</section>
</section>
</section>
<section id="bshm4dy">
<title>Deleting Old Appointments and Meetings</title>
- <para>Keeping a list of everything you did in the past will eventually slow down your calendar. To delete old events, click Actions &gt; Purge, then enter the number of days of past events you want to keep. </para>
+ <para>Keeping a list of everything you did in the past eventually slows down your calendar. To delete old events, click Actions &gt; Purge, then enter the number of days of past events you want to keep. </para>
</section>
<section id="usage-calendar-multiple">
@@ -2384,36 +2729,36 @@ Accepting and Replying to a Meeting Request</title>
</section>
<section id="usage-calendar-todo">
- <title>The Task Pad</title>
- <para>The Task Pad, located in the lower right corner of the calendar, lets you keep a list of tasks separate from your calendar appointments. You can use the list in a larger window by clicking the Tasks button in the shortcut bar or in the folder tree.</para>
+ <title>The Task List</title>
+ <para>The Task List, located in the lower right corner of the calendar, lets you keep a list of tasks separate from your calendar appointments. You can use the list in a larger window by clicking the Tasks button in the shortcut bar or in the folder tree.</para>
<para>To record a new task:</para>
- <procedure>
- <step id="bshmfan">
+ <orderedlist>
+ <listitem id="bshmfan">
<para>Click New.</para>
- </step>
- <step id="bshmlb7">
+ </listitem>
+ <listitem id="bshmlb7">
<para>Type a summary for the task.</para>
- </step>
- <step id="bshmlf2">
+ </listitem>
+ <listitem id="bshmlf2">
<para>Select a classification and group for the task.</para>
- </step>
- <step id="bshmlj7">
+ </listitem>
+ <listitem id="bshmlj7">
<para>Type a category for the task.</para>
- </step>
- <step id="bshmlnu">
+ </listitem>
+ <listitem id="bshmlnu">
<para>Type a description for the task.</para>
- </step>
- <step id="bshmlr5">
+ </listitem>
+ <listitem id="bshmlr5">
<para>(Optional) Specify a starting date and ending date for the task.</para>
- </step>
- <step id="bshmlv0">
+ </listitem>
+ <listitem id="bshmlv0">
<para>(Optional) Specify a starting time and ending time for the task.</para>
- </step>
- <step id="bshmmce">
+ </listitem>
+ <listitem id="bshmmce">
<para>(Optional) Click the Status tab, then specify a status for the task.</para>
- </step>
- </procedure>
- <para>After you&apos;ve added a task to your to-do list, its summary appears in the Summary section of the task list. To view or edit a detailed description of an item, double-click it, or right-click it and select Open. You can delete items by selecting them, then click Delete.</para>
+ </listitem>
+ </orderedlist>
+ <para>After you&apos;ve added a task to your to-do list, its summary appears in the Summary section of the task list. To view or edit a detailed description of an item, double-click it, or right-click it and select Open. You can delete items by selecting them, then clicking Delete.</para>
<para>The list of tasks is sorted in a similar way to the list of e-mail messages in Evolution Mail. Click once on the message headers to change the direction and type of sorting, or right-click to add or remove columns from the display.</para>
<section id="task-folders">
@@ -2425,115 +2770,19 @@ Accepting and Replying to a Meeting Request</title>
<section id="bshlzlu">
<title>Configuring Time Zones</title>
<para>Evolution supports the use of time zones. If you share calendar files with friends or co-workers, it is possible you will need to configure your time zone. To configure your time zone: </para>
- <procedure>
- <step id="bsb07m1">
- <para>Click Tools &gt; Settings, then click Calendar and Tasks.</para>
- </step>
- <step id="bsb07qx">
+ <orderedlist>
+ <listitem id="bsb07m1">
+ <para>Click Edit &gt; Preferences, then click Calendar and Tasks.</para>
+ </listitem>
+ <listitem id="bsb07qx">
<para>Click the icon next to the Time Zone field, then select your location.</para>
<para>Each red dot represents a major city.</para>
- </step>
- <step id="bsb08u5">
+ </listitem>
+ <listitem id="bsb08u5">
<para>Select a city, then click OK.</para>
- </step>
- </procedure>
- <para>You can also configure time zone information specific to the Start and End time in each appointment. To do that, simply create a new appointment and click on a globe to customize the time zone that the time exists in. For example, if you live in New York but have a telephone meeting set for noon with someone in California, you need to make sure that you&apos;re not calling each other at the worst time. Setting time zones on a per-appointment basis helps avoid that potential confusion.</para>
- </section>
- </chapter>
-
- <chapter id="bs4tmzx">
- <title>Connecting to GroupWise</title>
- <para>The GroupWise&reg; Connector enables you to connect Evolution&trade; to a GroupWise e-mail system. The following GroupWise features are supported in Evolution using the GroupWise Connector:</para>
- <itemizedlist>
- <listitem>
- <para>Creation of GroupWise accounts</para>
- </listitem>
- <listitem>
- <para>Access to GroupWise mailboxes</para>
- </listitem>
- <listitem>
- <para>Calendar</para>
- </listitem>
- <listitem>
- <para>Address Book</para>
- </listitem>
- <listitem>
- <para>Tasks</para>
- </listitem>
- <listitem>
- <para>Posted Calendar items</para>
- </listitem>
- <listitem>
- <para>Autocompletion of Contact names</para>
- </listitem>
- </itemizedlist>
-
- <section id="bs4tpft">
- <title>Configuring Evolution for GroupWise</title>
- <para>In order to have the best support for GroupWise in Evolution, you should immediately upgrade Evolution to 2.0.</para>
- <para>If this is your first time starting Evolution, the Evolution Account Assistant window appears. If the Evolution Account Assistant window does not appear, click Tools &gt; Settings, then click Mail Accounts. </para>
- <procedure>
- <step id="brugnl1">
- <para>Click Forward.</para>
- </step>
- <step id="brul5zm">
- <para>Type your full name and e-mail address in the appropriate fields.</para>
- </step>
- <step id="brul6x4">
- <para>(Optional) Type your Reply To address and your organization in the appropriate fields.</para>
- </step>
- <step id="brul75e">
- <para>Select your default signature.</para>
- <para>or</para>
- <para>Click Add New Signature to add a signature.</para>
- </step>
- <step id="brul7u4">
- <para>Select GroupWise as the server type.</para>
- </step>
- <step id="brul803">
- <para>Type your hostname and username in the appropriate fields.</para>
- </step>
- <step id="brul8hd">
- <para>Select your security and authentication options.</para>
- </step>
- <step id="brvz9su">
- <para>Click Forward.</para>
- </step>
- <step id="brvz9uz">
- <para>Select how to check for new mail.</para>
- </step>
- <step id="brvzaky">
- <para>Specify your Post Office Agent address.</para>
- </step>
- <step id="bsj58yl">
- <para>If your POA is configured to use a different port number, specify the correct port number in the appropriate field.</para>
- <para>The Post Office Agent SOAP field displays the port number on which the Evolution client communicates with the Post Office Agent (POA). This is the same port number that the POA uses for HTTP communication, which by default is 7181.</para>
- </step>
- <step id="brvzb06">
- <para>Click Forward.</para>
- </step>
- <step id="bsj5a77">
- <para>Select either SMTP or Sendmail as your sending method.</para>
- </step>
- <step id="bsj5az8">
- <para>If you selected SMTP, specify your host address, specify if your server requires authentication, and specify any security and authentication settings, then click Forward.</para>
- <para>or</para>
- <para>If you selected Sendmail, click Forward.</para>
- </step>
- <step id="brvzhi2">
- <para>Type your Account Name in the Name field.</para>
- </step>
- <step id="brvzhs5">
- <para>Click Forward.</para>
- </step>
- <step id="brvzhvz">
- <para>Click Apply. </para>
- <para>The account screen appears, displaying your new Novell GroupWise account.</para>
- </step>
- <step id="brw11e1">
- <para>Click Close to return to Evolution.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
+ <para>You can also configure time zone information specific to the Start and End time in each appointment. To do that, simply create a new appointment and click on a globe to customize the time zone that the time exists in. For example, if you live in New York but have a telephone meeting set for noon with someone in California, you need to make sure that you&apos;re not calling each other at a bad time. Setting time zones on a per-appointment basis helps avoid that potential confusion.</para>
</section>
</chapter>
@@ -2542,9 +2791,6 @@ Accepting and Replying to a Meeting Request</title>
<para>The Evolution&trade; Connector for Microsoft Exchange allows Evolution clients to access accounts on Microsoft Exchange 2000 servers. It is available through Red Carpet in its own channel. Like Evolution, it is free software and licensed under the GPL. </para>
<itemizedlist>
<listitem>
- <para><link linkend="new-in-connector">What's New in Connector 2.0</link></para>
- </listitem>
- <listitem>
<para><link linkend="features">Connector Features</link></para>
</listitem>
<listitem>
@@ -2557,7 +2803,7 @@ Accepting and Replying to a Meeting Request</title>
<para><link linkend="access">Accessing the Exchange Server</link></para>
</listitem>
<listitem>
- <para><link linkend="exchange-settings">Setting Exclusive to the Exchange Connector</link></para>
+ <para><link linkend="exchange-settings">Settings Exclusive to the Exchange Connector</link></para>
</listitem>
<listitem>
<para><link linkend="full-advantage">Scheduling Appointments with Free/Busy</link></para>
@@ -2597,7 +2843,7 @@ Accepting and Replying to a Meeting Request</title>
</listitem>
<listitem>
<para>Sending E-Mail via Exchange Protocols</para>
- <para>You might use the Microsoft Exchange mail transport protocol to send e-mail. Make sure that the address you have entered as your e-mail address is exactly the one that the Exchange server has on file. This may be &ldquo;yourname@exchange-server.your_domain.com&rdquo; rather than &ldquo;yourname@your_domain.com&rdquo;.</para>
+ <para>If you use the Microsoft Exchange mail transport protocol to send e-mail, make sure that the address you have entered as your e-mail address is exactly the one that the Exchange server has on file. This might be &ldquo;yourname@exchange-server.example.com&rdquo; rather than &ldquo;yourname@example.com&rdquo;.</para>
</listitem>
</itemizedlist>
</listitem>
@@ -2623,7 +2869,7 @@ Accepting and Replying to a Meeting Request</title>
</listitem>
<listitem>
<para>Adding vCards to the Address Book</para>
- <para>If you receive a VCard attachment and click Save in Address Book, it is saved to your Exchange address book.</para>
+ <para>If you receive a vCard attachment and click Save in Address Book, it is saved to your Exchange address book.</para>
<para>New Address Book entries can be created on Exchange from received e-mail messages with a single click</para>
</listitem>
</itemizedlist>
@@ -2642,12 +2888,43 @@ Accepting and Replying to a Meeting Request</title>
<section id="install">
<title>Installing the Connector</title>
- <para>To install the Evolution Connector, run Red Carpet by clicking System &gt; Get Software. Subscribe to the Evolution Connector for Microsoft Exchange channel, select the Evolution Connector for Microsoft Exchange 2000, then click the Install button. You can also install the Connector by downloading the individual packages from ftp.ximian.com if you wish.</para>
+ <para>To install the Evolution Connector, run Red Carpet.</para>
+ <orderedlist>
+ <listitem id="bsqdmqe">
+ <para>Click System &gt; Get Software.</para>
+ </listitem>
+ <listitem id="bsqdmun">
+ <para>Click Channels, then select Ximian Connector.</para>
+ </listitem>
+ <listitem id="bsqdoga">
+ <para>Click Close.</para>
+ </listitem>
+ <listitem id="bsqdoiw">
+ <para>Select ximian-connector, then click Run Now.</para>
+ </listitem>
+ </orderedlist>
</section>
<section id="exchange-configure">
<title>Adding your Exchange Account to Evolution</title>
<para>After you have installed the Connector, you need to set up access for your Exchange account on both the Exchange server and within Evolution.</para>
+ <itemizedlist>
+ <listitem>
+ <para><link linkend="config-server">Exchange Server Settings</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-client">Standard Configuration Tool for Evolution Connector</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-easy">Simple Configuration Tool for Evolution Connector</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-exchange-new-account">Creating a New Exchange Account</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-exchange-existing-account">Changing an Existing Account to Work with Exchange</link></para>
+ </listitem>
+ </itemizedlist>
<section id="config-server">
<title>Exchange Server Settings</title>
@@ -2669,82 +2946,97 @@ Accepting and Replying to a Meeting Request</title>
<section id="config-easy">
<title>Simple Configuration Tool for Evolution Connector</title>
- <para>Evolution Connector 1.4 comes with a simple account creation tool for some installations. Other installations require the standard account tool described in <link linkend="config-client">Standard Configuration Tool for Evolution Connector</link> below.</para>
+ <para>Evolution Connector 2.0 comes with a simple account creation tool for some installations. Other installations require the standard account tool described in <link linkend="config-client">Standard Configuration Tool for Evolution Connector</link> below.</para>
<para>If you have no accounts configured, the simple assistant starts when you start Evolution. It asks only for the name of your Outlook Web Access server, and your username and password. Evolution Connector determines the remaining information on its own.</para>
<para>If the simple account tool does not run automatically, create an account as described below.</para>
</section>
<section id="config-exchange-new-account">
<title>Creating a New Exchange Account</title>
- <para>If you would like to create a new account for your Exchange server:</para>
- <procedure>
- <step id="bshnbof">
+ <orderedlist>
+ <listitem id="bshnbof">
<para>Click Tools &gt; Mail Settings.</para>
- </step>
- <step id="bshnbsi">
+ </listitem>
+ <listitem id="bshnbsi">
<para>Click Accounts List, then click Add.</para>
- </step>
- <step id="bshnbxz">
+ </listitem>
+ <listitem id="bshnbxz">
<para>Create the account following the procedure in <link linkend="usage-mainwindow-starting">Starting Evolution for the First Time</link>.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
+ <para>Only one Microsoft Exchange account can be configured in Evolution at a time.</para>
</section>
<section id="config-exchange-existing-account">
<title>Changing an Existing Account to Work with Exchange</title>
- <para>If you have an existing e-mail account, and want to convert it to use for Exchange, select the account you want to convert and click Edit. </para>
- <procedure>
- <step id="bshngg7">
- <para>Click the Identity tab, change your e-mail address as needed.</para>
- <informalfigure id="bs4aw7j">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/exchange-identity.png"/></imageobject></mediaobject>
-
- </informalfigure>
- </step>
- <step id="bshngsm">
+ <para>If you have an existing e-mail account, and want to convert it to use for Exchange: </para>
+ <orderedlist>
+ <listitem id="bsqdqje">
+ <para>Click Edit &gt; Preferences, then click Mail Accounts.</para>
+ </listitem>
+ <listitem id="bsqdqvl">
+ <para>Select the account you want to convert, and click Edit.</para>
+ </listitem>
+ <listitem id="bshngg7">
+ <para>Click the Identity tab, then change your e-mail address as needed.</para>
+ <mediaobject id="bs4aw7j"><imageobject><imagedata format="PNG" fileref="figures/exchange-identity.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="bshngsm">
<para>Click the Receiving Mail tab, then select Microsoft Exchange as your server type. </para>
- </step>
- <step id="bshnh8h">
+ </listitem>
+ <listitem id="bshnh8h">
<para>Type the name of your mail server, your user name, and select whether to use SSL.</para>
- <informalfigure id="bs4aw7k">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/exchange-receive.png"/></imageobject></mediaobject>
-
- </informalfigure>
- </step>
- <step id="bshnhvg">
+ <mediaobject id="bs4aw7k"><imageobject><imagedata format="PNG" fileref="figures/exchange-receive.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="bshnhvg">
<para>Click the Receiving Options tab, then specify how often to check for new mail, your Global Catalog server name, your Exchange Mailbox name, your OWA path, your public folder server, and whether to apply filters to messages in your Inbox.</para>
- <informalfigure id="bs4aw7l">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/exchange-receive-options.png"/></imageobject></mediaobject>
-
- </informalfigure>
- </step>
- <step id="bshnjw0">
+ <mediaobject id="bs4aw7l"><imageobject><imagedata format="PNG" fileref="figures/exchange-receive-options.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="bshnjw0">
<para>Click the Sending Mail tab, then select Microsoft Exchange as your server type.</para>
- </step>
- <step id="bshnkd2">
+ </listitem>
+ <listitem id="bshnkd2">
<para>Specify the server name.</para>
- </step>
- <step id="bshnkk6">
+ </listitem>
+ <listitem id="bshnkk6">
<para>Click OK.</para>
- </step>
- <step id="bshnkmu">
- <para>Quit Evolution and start it up again. Changes to the Evolution Connector accounts configuration are not active until you have restarted the application.</para>
- </step>
- </procedure>
+ </listitem>
+ <listitem id="bshnkmu">
+ <para>Quit Evolution and start it again. Changes to the Evolution Connector accounts configuration are not active until you have restarted the application.</para>
+ </listitem>
+ </orderedlist>
</section>
</section>
</section>
<section id="access">
<title>Accessing the Exchange Server</title>
- <para>When you have installed the Connector, an Exchange button is available in the shortcut bar. The Exchange tool is used only to access public folders and to perform certain Exchange actions like delegation and password management. Use the regular Mail tool for mail, the Contacts tool for contacts, and the Calendar tool for your schedule.</para>
+ <para>When you have installed the Connector, an Exchange button is available in the shortcut buttons. The Exchange button is used only to access public folders and to perform certain Exchange actions like delegation and password management, subscribing to other user&apos;s calendars, tasks, and contact folders.As well as any folder related operations for calendars, tasks, and contact folders.These tasks include adding, deleting, renaming folders, and selecting folder permissions. Use the regular Mail tool for mail, the Contacts tool for contacts, and the Calendar tool for your schedule.</para>
<para>If you are using both an Exchange account and a local mail account, you should be aware that whenever you save an e-mail address or appointment from an e-mail message, it is saved in your Exchange contacts list or calendar, rather than in your local account. The same is true of synchronization with Palm OS devices; tasks, appointments, and addresses from your Palm OS device are synchronized with those in the Exchange folders rather than local folders. </para>
- <para>To avoid unnecessary strain on the server, the GAL will appear empty until you have searched for something in it. If you want to display all the cards in the list, click in the search box and press Enter. This enters a blank search, and every card appears.</para>
+ <para>To avoid unnecessary strain on the server, the Global Address List (GAL) appears empty until you have searched for something in it.</para>
+ <para>To access public folders, click the + next to All Public Folders, this expands the list to show all available public folders. Select the folder to access, then right-click the folder name. Select Add to Favorites.</para>
</section>
<section id="exchange-settings">
- <title>Setting Exclusive to the Exchange Connector</title>
- <para>There are two items in the Evolution preferences window that are available only with Evolution Connector. The first is delegation and permissions handling, and the second is the creation of &ldquo;Out of Office&rdquo; messages.</para>
+ <title>Settings Exclusive to the Exchange Connector</title>
+ <para>There are two items in the Evolution preferences window that are available only with Evolution Connector. The first is delegation and permissions handling, and the second is the creation of &ldquo;Out of Office&rdquo; messages.</para>
+ <itemizedlist>
+ <listitem>
+ <para><link linkend="exchange-delegate">Access Delegation</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="exchange-delegate-to-others">Delegating Access to Others</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="exchange-delegated-to-you">Acting as a Delegate for Others</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="exchange-out-of-office">Setting an Out of Office Message</link></para>
+ </listitem>
+ </itemizedlist>
<section id="exchange-delegate">
<title>Access Delegation</title>
@@ -2752,11 +3044,8 @@ Accepting and Replying to a Meeting Request</title>
<section id="exchange-delegate-to-others">
<title>Delegating Access to Others</title>
- <para>To add someone to your list of delegates, click Add and select them from the Global Address List. When delegating you can grant different levels of access to different types of data. You can also decide whether the access you grant applies to items marked Private, or only to public items.</para>
- <informalfigure id="bs4aw7m">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/exchange-delegation.png"/></imageobject></mediaobject>
-
- </informalfigure>
+ <para>To add someone to your list of delegates, click Add and select them from the Global Address List. When delegating, you can grant different levels of access to different types of data. You can also decide whether the access you grant applies to items marked Private, or only to public items.</para>
+ <mediaobject id="bs4aw7m"><imageobject><imagedata format="PNG" fileref="figures/exchange-delegation.png"/></imageobject></mediaobject>
<para>For each of the four types of folder, you can select one of the following levels of access:</para>
<formalpara id="bsbg9j6">
<title>None: </title>
@@ -2764,7 +3053,7 @@ Accepting and Replying to a Meeting Request</title>
</formalpara>
<formalpara id="bsbg9oa">
<title>Reviewer (read-only): </title>
- <para>Allow the person to see items in this type of folder, but not create new items or edit existing items.</para>
+ <para>Allows the person to see items in this type of folder, but not create new items or edit existing items.</para>
</formalpara>
<formalpara id="bsbg9ts">
<title>Author (read, create): </title>
@@ -2780,20 +3069,20 @@ Accepting and Replying to a Meeting Request</title>
<title>Acting as a Delegate for Others</title>
<para>To see the list of people who have granted you access to their folders, click the Acting as a Delegate tab in the Exchange Delegation settings window. If you plan to send e-mail on behalf of someone, select the check box next to the name, and an e-mail identity is created. You can then select that identity in the From list in your message composer.</para>
<para>To access the folders delegated to you: </para>
- <procedure>
- <step id="bshok43">
+ <orderedlist>
+ <listitem id="bshok43">
<para>Click File &gt; Open &gt; Other User&apos;s Folder.</para>
- </step>
- <step id="bshokwk">
+ </listitem>
+ <listitem id="bshokwk">
<para>Specify the e-mail address of the user who has delegated to you, or click User to select the user from your address book.</para>
- </step>
- <step id="bshol98">
+ </listitem>
+ <listitem id="bshol98">
<para>Select the folder you want to open.</para>
- </step>
- <step id="bsholc3">
+ </listitem>
+ <listitem id="bsholc3">
<para>Click OK.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>Folders delegated to you appear in your folder list inside a folder labeled with the name of its owner. For example, if Martha Thompson delegates folders to you, you will see a folder called Martha Thompson&apos;s Folders in the folder tree at the same level as your Personal Folders and Public Folders. </para>
<para>If the folder fails to open properly, check with the folder owner to make sure that you have been granted the correct access permissions.</para>
</section>
@@ -2801,280 +3090,500 @@ Accepting and Replying to a Meeting Request</title>
<section id="exchange-out-of-office">
<title>Setting an Out of Office Message</title>
- <para>An Out of Office message is an automatic reply that you can send as a reply to e-mails, explaining why you aren&apos;t immediately responding to their messages. For example, if you go on vacation for a week and will be away from e-mail, you can set an automatic reply so that people who write to you know that you aren&rsquo;t ignoring them.</para>
- <procedure>
- <step id="bsbgb7t">
- <para>Click Tools &gt; Settings, then click Out of Office.</para>
- </step>
- <step id="bsbgbe3">
+ <para>An Out of Office message is an automatic reply that you can send as a reply to e-mails, explaining why you aren&apos;t immediately responding to their messages. For example, if you go on vacation for a week and will be away from e-mail, you can set an automatic reply so that people know that you aren&apos;t ignoring them.</para>
+ <orderedlist>
+ <listitem id="bsbgb7t">
+ <para>Click Edit &gt; Preferences, then click Out of Office.</para>
+ </listitem>
+ <listitem id="bsbgbe3">
<para>Click I Am Currently Out of the Office. </para>
- </step>
- <step id="bsbgbi0">
+ </listitem>
+ <listitem id="bsbgbi0">
<para>Type a short message in the text field.</para>
- </step>
- <step id="bsbgbl5">
+ </listitem>
+ <listitem id="bsbgbl5">
<para>Click OK.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>Your message will be sent automatically to anyone who sends you mail until you return and click I Am Currently in the Office.</para>
</section>
</section>
<section id="full-advantage">
<title>Scheduling Appointments with Free/Busy</title>
- <para>When you schedule a meeting with your calendar on the Exchange server, you can check when other local Exchange users are busy according to their Exchange calendars. To do so:</para>
- <informalfigure id="bs4aw7n">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/schedule.png"/></imageobject></mediaobject>
-
- </informalfigure>
+ <para>When you schedule a meeting with your calendar on the Exchange server, you can check when other local Exchange users are busy according to their Exchange calendars.</para>
+ <mediaobject id="bs4aw7n"><imageobject><imagedata format="PNG" fileref="figures/schedule.png"/></imageobject></mediaobject>
<para>Reminders for appointments in your Exchange calendar do not work until you have run Evolution at least once after logging in. This is different from locally stored reminders, which work from the moment you log in, regardless of whether you have run Evolution in the session. </para>
- <procedure>
- <step id="bsbgc5a">
+ <orderedlist>
+ <listitem id="bsbgc5a">
<para>Open a new appointment in the calendar.</para>
- </step>
- <step id="bsbgc8b">
+ </listitem>
+ <listitem id="bsbgc8b">
<para>Click Actions &gt; Schedule Meeting.</para>
- </step>
- <step id="bsbgccj">
+ </listitem>
+ <listitem id="bsbgccj">
<para>Add attendees, either by entering their e-mail addresses into the list, or by clicking the Invite Others button. </para>
<para>If you choose to do this, it&apos;s best to use the Global Address List (GAL). Choose the GAL from the drop-down list of address sources at the top of the dialog box.</para>
- </step>
- <step id="bsbgcft">
+ </listitem>
+ <listitem id="bsbgcft">
<para>Click Options, then Update Free/Busy to check participant schedules and, if possible, update the meeting in all participants&apos; calendars.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>If meeting attendees are not available during the times you have scheduled a meeting, you can &ldquo;nudge&rdquo; the meeting forward or backward to the nearest available time. To do so, just click the arrows to the left or right of the Autopick button. The Autopick tool moves the meeting to the nearest time during which all attendees are available. If you aren&rsquo;t satisfied with those results, you can drag the edges of the meeting time to the hours that you want to select.</para>
</section>
</chapter>
- <chapter id="config-prefs">
- <title>Advanced Configuration</title>
- <para>Perhaps your mail server has changed names. Perhaps you&apos;ve grown tired of a certain layout for your appointments. Whatever the reason, you want to change your Evolution&trade; settings. This section will tell you how to do just that.</para>
+ <chapter id="usage-groupwise">
+ <title>Connecting to GroupWise</title>
+ <para>Evolution&trade; can access accounts on Novell&reg; GroupWise&reg; the next major release after GroupWise 6.5. It is installed by default with Evolution. </para>
<itemizedlist>
<listitem>
- <para><link linkend="config-prefs-mail-identity">Working with Mail Accounts</link></para>
- </listitem>
- <listitem>
- <para><link linkend="bshoq5l">Autocompletion</link></para>
- </listitem>
- <listitem>
- <para><link linkend="config-prefs-mail">Mail Preferences</link></para>
+ <para><link linkend="features">Connector Features</link></para>
</listitem>
<listitem>
- <para><link linkend="config-prefs-mail-composer">Composer Preferences</link></para>
+ <para><link linkend="bv3rax2">GroupWise Terminology vs. Evolution Terminology</link></para>
</listitem>
<listitem>
- <para><link linkend="config-prefs-cal">Calendar and Tasks Settings</link></para>
+ <para><link linkend="bv7wcei">Adding your GroupWise Account to Evolution</link></para>
</listitem>
<listitem>
- <para><link linkend="config-prefs-contact">Directory Servers</link></para>
+ <para><link linkend="bv7wck0">Scheduling Appointments with Free/Busy</link></para>
</listitem>
<listitem>
- <para><link linkend="bshoty0">Certificates</link></para>
+ <para><link linkend="Aaej55l">Managing Sent Items</link></para>
</listitem>
</itemizedlist>
- <para>You can reach the Evolution settings window by clicking Tools &gt; Settings, no matter where you are in Evolution. On the left half of the settings window is a column, similar to the Evolution shortcut bar, that lets you choose which portion of Evolution to customize. The right half of the window is where you&rsquo;ll make your actual changes.</para>
- <informalfigure id="config-prefs-mail-fig">
- <mediaobject><imageobject><imagedata format="PNG" fileref="figures/config-mail.png"/></imageobject></mediaobject>
-
- </informalfigure>
- <para>There are six items you can customize. From top to bottom, they are:</para>
- <variablelist>
- <varlistentry>
- <term><emphasis>Mail Accounts</emphasis></term>
- <listitem>
- <para>Add or change information about your e-mail accounts: the servers to which you connect, the way you download mail, your password authentication mode, and so forth. This is the most complex item in the list, and is covered in <link linkend="config-prefs-mail-identity">Working with Mail Accounts</link>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><emphasis>Autocompletion</emphasis></term>
- <listitem>
- <para>Set the contact groups to be used when completing e-mail addresses in the message composer. For more information, see <link linkend="bshoq5l">Autocompletion</link>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><emphasis>Mail Preferences</emphasis></term>
- <listitem>
- <para>These are overall mail reading preferences: display settings, notification options, security, and so forth. Settings that vary per account are in the Mail Accounts tool, described in <link linkend="config-prefs-mail-identity">Working with Mail Accounts</link>, but most of the mail settings are in <link linkend="config-prefs-mail">Mail Preferences</link>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><emphasis>Composer Preferences</emphasis></term>
- <listitem>
- <para>Settings for the way that you use the mail composer: shortcuts, signatures, spelling, and so forth. This includes the ability to substitute graphical smiley-faces for &ldquo;emoticons&rdquo; such as :) that many people use in e-mail. This tool is covered in <link linkend="config-prefs-mail-composer">Composer Preferences</link>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><emphasis>Calendar and Tasks</emphasis></term>
- <listitem>
- <para>Here, you can set the way the calendar behaves, including your time zone and the length of your work week. For more information, see <link linkend="config-prefs-cal">Calendar and Tasks Settings</link>. </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><emphasis>Certificates</emphasis></term>
- <listitem>
- <para>Certificate handling for S/MIME security systems. For more information, see <link linkend="bshoty0">Certificates</link>.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- <para>Previous versions of Evolution included directory servers, folder settings, and Exchange delegation in the settings tool. Directory servers can now be set up as contacts groups in the Contacts tool, you can change folder settings in the folder right-click menu, and Exchange delegation is available in the Actions menu of the Exchange tool. </para>
- <section id="config-prefs-mail-identity">
- <title>Working with Mail Accounts</title>
- <para>Evolution allows you to maintain multiple accounts, or identities. When you are writing an e-mail message, you can which account to use by selecting from the drop-down list next to the From entry in the message composer. </para>
- <para>Clicking Send/Receive checks all mail sources that are not disabled. If you don&apos;t want to check mail for a given account, select it in the Mail Accounts tab and click the Disable button. </para>
- <para>To add a new account, click Add to open the mail configuration assistant. To alter an existing account, select it in the Preferences window, and then click Edit to open the account editor dialog.</para>
- <para>The account editor dialog box has six sections:</para>
- <formalpara id="bsbhdwn">
- <title>Identity: </title>
- <para>Specify the name and e-mail address for this account. You can also choose a default signature to insert into messages sent from this account.</para>
- </formalpara>
- <formalpara id="bsbhe10">
- <title>Receiving Mail: </title>
- <para>Select the way you receive mail: you can download mail from a server (<link linkend="pop">POP</link>), read and keep it on the server (Microsoft Exchange, Novell GroupWise&reg;, or <link linkend="imap">IMAP</link>), or read it from files that already exist on your desktop computer. Your server require you to use a Secure Socket Layer (SSL) connection. You can select Always, Whenever Possible, or Never as your SSL choice. If one doesn&rsquo;t work, try another.</para>
- </formalpara>
- <para>Your system administrator might ask you to connect to a specific port on a mail server. To specify which port you use, just type a colon and the port number after the server name. For example, to connect to port 143 on the server smtp.omniport.com, specify smtp.omniport.com:143 as the server name.</para>
- <formalpara id="bsbhezv">
- <title>Receiving Options: </title>
- <para>Decide you want to check for mail automatically and how often, as well as setting other message retrieval options. </para>
- </formalpara>
- <para>If you select POP as your method of receiving mail:</para>
+ <section id="bv7wchf">
+ <title>GroupWise Features</title>
+ <para>Evolution connecting to GroupWise supports the following basic Novell GroupWise features: </para>
<itemizedlist>
<listitem>
- <formalpara id="bsbhg72">
- <title>Checking for New Mail: </title>
- <para>If you want Evolution to check for new mail automatically, select this option and specify a frequency in minutes.</para>
- </formalpara>
+ <para>Mail </para>
+ <itemizedlist>
+ <listitem>
+ <para>Viewing mail in folders</para>
+ <para>Mail stored on the GroupWise server is visible in Mail folders in Evolution. </para>
+ </listitem>
+ <listitem>
+ <para>Sending e-mail via SMTP</para>
+ </listitem>
+ <listitem>
+ <para>Converting to a task or meeting</para>
+ </listitem>
+ </itemizedlist>
</listitem>
<listitem>
- <formalpara id="bsbhgbi">
- <title>Leaving Messages on Server: </title>
- <para>If you want to store copies of your mail on the server, select this option.</para>
- </formalpara>
+ <para>Calendar </para>
+ <itemizedlist>
+ <listitem>
+ <para>Appointment/Meeting requests</para>
+ <para>Allows Evolution users to schedule meetings and view attendee availability for other users on GroupWise.</para>
+ </listitem>
+ <listitem>
+ <para>Adding iCalendar meeting requests to the Calendar</para>
+ <para>If you receive an iCalendar meeting request and add it to your calendar, it is saved to your GroupWise calendar.</para>
+ </listitem>
+ </itemizedlist>
</listitem>
<listitem>
- <formalpara id="bsbhgg1">
- <title>Disable Support for All POP3 Extensions: </title>
- <para>Some e-mail servers refuse to work with the extended POP3 command set; select this option to have Evolution use a more limited set of interactions with the server. If your server periodically drops your connection, this option may help.</para>
- </formalpara>
+ <para>Contacts </para>
+ <itemizedlist>
+ <listitem>
+ <para>Address completion</para>
+ <para>Supported for your GroupWise address books, including the corporate address book, the Frequent Contacts address book and your personal address book</para>
+ </listitem>
+ <listitem>
+ <para>Adding vCards to the Address Book</para>
+ <para>If you receive a vCard attachment and click Save in Address Book, it is saved to your personal address book.</para>
+ <para>New Address Book entries can be added to your Personal address book from received e-mail messages with a single click</para>
+ </listitem>
+ </itemizedlist>
</listitem>
</itemizedlist>
- <para>If you selected Microsoft Exchange as your method of receiving mail:</para>
+ <para>There are, however, some features that are not available:</para>
<itemizedlist>
<listitem>
- <formalpara id="bsbhis9">
- <title>Checking for New Mail: </title>
- <para>If you want Evolution to check for new mail automatically, select this option and specify a frequency in minutes.</para>
- </formalpara>
+ <para>Resending items</para>
</listitem>
<listitem>
- <formalpara id="bsbhivn">
- <title>Global Catalog Server Name: </title>
- <para>Specify the name of your Global Catalog server to create a folder for your organization&apos;s Global Address List.</para>
- </formalpara>
+ <para>Retracting items</para>
</listitem>
<listitem>
- <formalpara id="bsbhj13">
- <title>Limit Number of Responses: </title>
- <para>Select a maximum number of results for an address search. Lowering the maximum number decreases the load on your system and on your network. Most servers do not send more than 1000 results, regardless of the value you select here.</para>
- </formalpara>
+ <para>Delegating items</para>
</listitem>
<listitem>
- <formalpara id="bsbhj5l">
- <title>Mailbox Name: </title>
- <para>Specify your mailbox name.</para>
- </formalpara>
- </listitem>
- <listitem>
- <formalpara id="bsbhj9g">
- <title>OWA Path: </title>
- <para>Specify the path used with Outlook Web Access on your server.</para>
- </formalpara>
+ <para>Accepting appointments/meetings in offline mode</para>
</listitem>
<listitem>
- <formalpara id="bsbhjel">
- <title>Public Folder Server: </title>
- <para>Specify the name of your public folder server, if it differs from your Exchange server.</para>
- </formalpara>
+ <para>Proxy</para>
</listitem>
<listitem>
- <formalpara id="bsbhjj7">
- <title>Apply Filters to New Messages in Inbox on This Server: </title>
- <para>Select this option if you want to apply filters to this account.</para>
- </formalpara>
+ <para>Archive</para>
</listitem>
</itemizedlist>
- <para>If you selected IMAP as your method of receiving mail:</para>
+ </section>
+
+ <section id="bv3rax2">
+ <title>GroupWise Terminology vs. Evolution Terminology</title>
+ <para>GroupWise and Evolution sometimes uses different terminology for different types of items. The following table compares GroupWise terminology to Evolution terminology.</para>
+ <informaltable>
+ <tgroup cols="2">
+ <colspec colwidth="2.729*" colname="1" colnum="1"/>
+ <colspec colwidth="2.729*" colname="2" colnum="2"/>
+ <thead valign="top">
+ <row id="bv3rc30">
+ <entry colname="1">
+ <para>GroupWise</para>
+ </entry>
+ <entry colname="2">
+ <para>Evolution</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row id="bv3rc32">
+ <entry colname="1">
+ <para>Appointment</para>
+ </entry>
+ <entry colname="2">
+ <para>Meeting</para>
+ </entry>
+ </row>
+ <row id="bv3rc33">
+ <entry colname="1">
+ <para>Posted Appointment</para>
+ </entry>
+ <entry colname="2">
+ <para>Appointment</para>
+ </entry>
+ </row>
+ <row id="bv3rc34">
+ <entry colname="1">
+ <para>Reminder Note</para>
+ </entry>
+ <entry colname="2">
+ <para>None; use a task</para>
+ </entry>
+ </row>
+ <row id="bv3rc35">
+ <entry colname="1">
+ <para>Discussion Note</para>
+ </entry>
+ <entry colname="2">
+ <para>None; use a assigned task</para>
+ </entry>
+ </row>
+ <row id="bv3rc36">
+ <entry colname="1">
+ <para>Phone Message</para>
+ </entry>
+ <entry colname="2">
+ <para>None</para>
+ </entry>
+ </row>
+ <row id="bv3rldo">
+ <entry colname="1">
+ <para>Check List</para>
+ </entry>
+ <entry colname="2">
+ <para>None; use a task</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
+
+ <section id="bv7wcei">
+ <title>Adding your GroupWise Account to Evolution</title>
<itemizedlist>
<listitem>
- <formalpara id="bsbhjt4">
- <title>Checking for New Mail: </title>
- <para>If you want Evolution to check for new mail automatically, select this option and specify a frequency in minutes. </para>
- </formalpara>
+ <para><link linkend="bv7wcb5">Creating a New GroupWise Account</link></para>
</listitem>
<listitem>
- <formalpara id="bsbhjwx">
- <title>Check All IMAP Folders: </title>
- <para>If you want Evolution to check for new messages in all your IMAP folders, select Check for New Messages in All Folders.</para>
- </formalpara>
+ <para><link linkend="buw5x0k">Changing an Existing Account to Work with GroupWise</link></para>
</listitem>
- <listitem>
- <formalpara id="bsbhkee">
- <title>Show Only Subscribed Folders: </title>
- <para>Select this option if you have more folders in your IMAP view than you want to read.</para>
- </formalpara>
+ </itemizedlist>
+
+ <section id="bv7wcb5">
+ <title>Creating a New GroupWise Account</title>
+ <orderedlist>
+ <listitem id="bv7wb3t">
+ <para>Click Edit &gt; Preferences, then click Mail Accounts.</para>
+ </listitem>
+ <listitem id="bv7wbac">
+ <para>Click Add.</para>
+ </listitem>
+ <listitem id="bv7wbdi">
+ <para>Create the account following the procedure in <link linkend="usage-mainwindow-starting">Starting Evolution for the First Time</link>.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section id="buw5x0k">
+ <title>Changing an Existing Account to Work with GroupWise</title>
+ <para>If you have an existing e-mail account, and want to convert it to use with GroupWise: </para>
+ <orderedlist>
+ <listitem id="buw5x0l">
+ <para>Click Edit &gt; Preferences, then click Mail Accounts.</para>
+ </listitem>
+ <listitem id="buw5x0m">
+ <para>Select the account you want to convert, then click Edit.</para>
+ </listitem>
+ <listitem id="buw5x0n">
+ <para>Click the Identity tab, then change your e-mail address as needed.</para>
+ <mediaobject id="bv7wbfs"><imageobject><imagedata format="PNG" fileref="figures/evo_identityedit_a.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="buw5x0o">
+ <para>Click the Receiving Email tab, then select Novell GroupWise as your server type. </para>
+ </listitem>
+ <listitem id="buw5x0p">
+ <para>Type the name of your mail server, your user name, and select whether to use SSL.</para>
+ <mediaobject id="bv7wbhn"><imageobject><imagedata format="PNG" fileref="figures/evo_gwreceiveedit_a.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="bsthkyr">
+ <para>Click the Receive Options tab, then select if you want Evolution to automatically check for new mail.</para>
+ <para>If you select this option, you need to specify how often Evolution should check for new messages.</para>
+ </listitem>
+ <listitem id="bv7wbod">
+ <para>Select if you want to check for new messages in all folders.</para>
+ </listitem>
+ <listitem id="bv7wbr9">
+ <para>Select if you want to apply filters to new messages in the Inbox on the server.</para>
+ <para>For additional information on filtering, see <link linkend="usage-mail-org-filters-new">Creating New Filter Rules</link>.</para>
+ </listitem>
+ <listitem id="bv7wbto">
+ <para>Select if you want to check new messages for junk content.</para>
+ <para>For additional information on junk content, see <link linkend="mail-prefs-junk">Junk Mail Preferences</link>.</para>
+ </listitem>
+ <listitem id="bv7wbwf">
+ <para>Select if you want to only check for junk messages in the Inbox folder.</para>
+ </listitem>
+ <listitem id="bv7wc2w">
+ <para>Select if you want to automatically synchronize remote mail locally.</para>
+ </listitem>
+ <listitem id="bsthmp3">
+ <para>Type your Post Office Agent address in the Post Office Agent field.</para>
+ <para>If you are unsure what your Post Office Agent address is, contact your system administrator.</para>
+ </listitem>
+ <listitem id="bv7wn80">
+ <para>Type your Post Office Agent SOAP port in the Post Office Agent SOAP Port field.</para>
+ <para>If you are unsure what your Post Office Agent SOAP port is, contact your system administrator.</para>
+ <mediaobject id="bv7wc82"><imageobject><imagedata format="PNG" fileref="figures/evo_gwreceiveoptedit_a.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="buw5x0s">
+ <para>Click OK.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+ </section>
+
+ <section id="bv7wck0">
+ <title>Scheduling Appointments with Free/Busy</title>
+ <para>When you schedule a meeting with your calendar on GroupWise, you can check when other local GroupWise users are busy according to their GroupWise calendars.</para>
+ <mediaobject id="bv7wag5"><imageobject><imagedata format="PNG" fileref="figures/schedule.png"/></imageobject></mediaobject>
+ <para>Reminders for appointments in your GroupWise calendar do not work until you have run Evolution at least once after logging in. This is different from locally stored reminders, which work from the moment you log in, regardless of whether you have run Evolution in the session. </para>
+ <orderedlist>
+ <listitem id="bv7wal9">
+ <para>Open a new appointment in the calendar.</para>
</listitem>
- <listitem>
- <formalpara id="bsbhkj2">
- <title>Override Server-Supplied Namespace: </title>
- <para>You can specify a specific directory where your server stores mail for you. Typical values are &ldquo;mail&rdquo; and &ldquo;Mail&rdquo;. For more information about how to use IMAP mail, see <link linkend="usage-mail-subscriptions">IMAP Subscriptions Manager</link>.</para>
- </formalpara>
+ <listitem id="bv7wapb">
+ <para>Click Actions &gt; Schedule Meeting.</para>
</listitem>
- <listitem>
- <formalpara id="bsbhkpi">
- <title>Apply Filters to New Messages in the Inbox on This Server: </title>
- <para>You want your filters to work on this account, select this option.</para>
- </formalpara>
+ <listitem id="bv7wato">
+ <para>Add attendees, either by entering their e-mail addresses into the list, or by clicking the Invite Others button. </para>
</listitem>
- </itemizedlist>
- <para>If you chose GroupWise as your method of receiving mail:</para>
+ <listitem id="bv7wb0h">
+ <para>Click Options, then Update Free/Busy to check participant schedules and, if possible, update the meeting in all participants&apos; calendars.</para>
+ </listitem>
+ </orderedlist>
+ <para>If meeting attendees are not available during the times you have scheduled a meeting, you can &ldquo;nudge&rdquo; the meeting forward or backward to the nearest available time. To do so, just click the arrows to the left or right of the Autopick button. The Autopick tool moves the meeting to the nearest time during which all attendees are available. If you aren&rsquo;t satisfied with those results, you can drag the edges of the meeting time to the hours that you want to select.</para>
+ </section>
+
+ <section id="Aaej55l">
+ <title>Managing Sent Items</title>
+ <para>This section contains the following topics:</para>
<itemizedlist>
<listitem>
- <formalpara id="bsbhkxv">
- <title>Checking for New Mail: </title>
- <para>If you want Evolution to check for new mail automatically, select this option and specify a frequency in minutes. </para>
- </formalpara>
+ <para><link linkend="Aaez1x0">Confirming Delivery of Items You've Sent</link></para>
</listitem>
<listitem>
- <formalpara id="bsbhl3t">
- <title>Check all GroupWise folders: </title>
- <para>If you want Evolution to check for new messages in all your GroupWise folders, select Check for New Messages in All Folders.</para>
- </formalpara>
+ <para><link linkend="Aal4xf4">Displaying Sent Items</link></para>
</listitem>
<listitem>
- <formalpara id="bsbhl8n">
- <title>Apply Filters to New Messages in the Inbox on This Server: </title>
- <para>If you want your filters to work on this account, select this option.</para>
- </formalpara>
+ <para><link linkend="Aal54a9">Checking the Status of an Item</link></para>
</listitem>
<listitem>
- <formalpara id="bsbhljh">
- <title>Automatically Synchronize Remote Mail Locally: </title>
- <para>This setting downloads all mail immediately, instead of waiting until you try to open the message. This setting makes Evolution slower at first, but faster after the download. Not selecting it means that Evolution takes longer to display each additional message, but does not waste time trying to download every single message.</para>
- </formalpara>
+ <para><link linkend="Ak05onj">Receiving Notification About Items You Send</link></para>
</listitem>
<listitem>
- <formalpara id="bsbhlo0">
- <title>Post Office Agent SOAP Port: </title>
- <para>If your post office agent uses a SOAP port other than the default, specify it here. The SOAP port is what allows Evolution to access the GroupWise address book and calendar. Your system administrator knows the port. If there are not many Linux users in your organization, you might also need to request that the SOAP service be enabled.</para>
- </formalpara>
+ <para><link linkend="Ak05sv1">Requesting a Reply for Items You Send</link></para>
</listitem>
</itemizedlist>
+ <important>
+ <para>You can only manage your sent items for GroupWise e-mail, if the recipient is located on the same GroupWise system as you.</para>
+ </important>
+
+ <section id="Aaez1x0">
+ <title>Confirming Delivery of Items You&apos;ve Sent</title>
+ <para>Evolution provides several ways for you to confirm that your item was delivered.</para>
+ <bridgehead id="btafhoy">Track an Item You Sent</bridgehead>
+ <para>You can check the status in the Message Status window of an e-mail you&apos;ve sent. For information, see <link linkend="Aaezg4d">Checking the Status of Your Items</link>.</para>
+ <bridgehead id="btafhoz">Receive Notification When the Item is Opened or Deleted</bridgehead>
+ <para>You can receive notification when the recipient opens or deletes a message. For information, see <link linkend="Ak05onj">Receiving Notification About Items You Send</link>.</para>
+ <bridgehead id="btafhp0">Request a Reply</bridgehead>
+ <para>You can inform the recipient that you need a reply to an e-mail. Evolution adds a sentence to the item stating that a reply is requested and changes the icon in the recipient&apos;s Mailbox to a double arrow. For information, see <link linkend="Ak05sv1">Requesting a Reply for Items You Send</link>.</para>
+ </section>
+
+ <section id="Aal4xf4">
+ <title>Displaying Sent Items</title>
+ <para>You might want to display items you previously sent. For example, you can read a sent e-mail.</para>
+ <orderedlist>
+ <listitem id="Ak05v13">
+ <para>Click the Sent Items folder in the Folder List.</para>
+ </listitem>
+ </orderedlist>
+ <para>All sent items reside in this folder unless you select a different folder for sent e-mail in the account editor default settings.</para>
+ </section>
+
+ <section id="Aaezg4d">
+ <title>Checking the Status of Your Items</title>
+ <para>Track Message Status lets you check the status of any e-mail you&apos;ve sent. For example, you can see when an e-mail was delivered and when the recipient opened or deleted the e-mail.</para>
+
+ <section id="Aal54a9">
+ <title>Checking the Status of an Item</title>
+ <orderedlist>
+ <listitem id="Aaezj33">
+ <para>Right-click an e-mail in your Sent Items folder, then click Track Message Status.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+ </section>
+
+ <section id="Ak05onj">
+ <title>Receiving Notification About Items You Send</title>
+ <orderedlist>
+ <listitem id="Ak05ox9">
+ <para>In the Compose Message window, click Insert &gt; Send Options.</para>
+ <mediaobject id="Ak06ek0"><imageobject><imagedata format="PNG" fileref="figures/evo_sendstatus_a.png"/></imageobject></mediaobject>
+
+ </listitem>
+ <listitem id="Ak05p47">
+ <para>In the Return Notification group box, specify the type of return receipt you want.</para>
+ </listitem>
+ <listitem id="Ak05rec">
+ <para>Click OK.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section id="Ak05sv1">
+ <title>Requesting a Reply for Items You Send</title>
+ <orderedlist>
+ <listitem id="Ak05z6c">
+ <para>In the Compose Message window, click Insert &gt; Send Options.</para>
+ </listitem>
+ <listitem id="Ak05zcd">
+ <para>Click Reply Requested, then specify when you want to receive the reply.</para>
+ <para>If you select When Convenient, Reply Requested: When convenient appears at the top of the message. If you select Within x Days, Reply Requested: By <varname>day month numeric day time year</varname> appears at the top of the message.</para>
+ </listitem>
+ <listitem id="Ak060fu">
+ <para>Click OK.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section id="bv7v0t1">
+ <title>Changing the Priority of an E-Mail</title>
+ <orderedlist>
+ <listitem id="bv7vmrv">
+ <para>In the Compose Message window, click Insert &gt; Send Options.</para>
+ </listitem>
+ <listitem id="bv7vmrw">
+ <para> Select High Priority, Standard Priority, Low Priority, or Undefined.</para>
+ <para>The small icon next to an item in the Mailbox is red when the priority is high.</para>
+ </listitem>
+ <listitem id="bv7vmrx">
+ <para>Click OK.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+ </section>
+ </chapter>
+
+ <chapter id="config-prefs">
+ <title>Advanced Configuration</title>
+ <para>Perhaps your mail server has changed names. Perhaps you&apos;ve grown tired of a certain layout for your appointments. Whatever the reason, you can change your Evolution&trade; settings. This section will tell you how to do just that.</para>
+ <itemizedlist>
+ <listitem>
+ <para><link linkend="config-prefs-mail-identity">Working with Mail Accounts</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="bshoq5l">Autocompletion</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-prefs-mail">Mail Preferences</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-prefs-mail-composer">Composer Preferences</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-prefs-cal">Calendar and Tasks Settings</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="config-prefs-contact">Contact Management</link></para>
+ </listitem>
+ <listitem>
+ <para><link linkend="bshoty0">Certificates</link></para>
+ </listitem>
+ </itemizedlist>
+ <para>You can reach the Evolution settings window by clicking Edit &gt; Preferences. On the left half of the settings window is a column, similar to the Evolution shortcut bar, that lets you choose which portion of Evolution to customize. The right half of the window is where you&apos;ll make your actual changes.</para>
+ <mediaobject id="config-prefs-mail-fig"><imageobject><imagedata format="PNG" fileref="figures/config-mail.png"/></imageobject></mediaobject>
+ <para>There are six items you can customize. From top to bottom, they are:</para>
+ <bridgehead id="bt4ckfo">Mail Accounts</bridgehead>
+ <para>Add or change information about your e-mail accounts, such as the servers to which you connect, the way you download mail, and your password authentication mode. This is the most complex item in the list, and is covered in <link linkend="config-prefs-mail-identity">Working with Mail Accounts</link>.</para>
+ <bridgehead id="bt4ckfp">Autocompletion</bridgehead>
+ <para>Set the contact groups to be used when completing e-mail addresses in the message composer. For more information, see <link linkend="bshoq5l">Autocompletion</link>.</para>
+ <bridgehead id="bt4ckfq">Mail Preferences</bridgehead>
+ <para>These are overall mail reading preferences, such as display settings, notification options, and security. Settings that vary per account are in the Mail Accounts tool, described in <link linkend="config-prefs-mail-identity">Working with Mail Accounts</link>, but most of the mail settings are in <link linkend="config-prefs-mail">Mail Preferences</link>.</para>
+ <bridgehead id="bt4ckfr">Composer Preferences</bridgehead>
+ <para>These are settings for the way that you use the mail composer, such as shortcuts, signatures, and spelling. This includes the ability to substitute graphical smiley-faces for &ldquo;emoticons&rdquo; such as : ) that many people use in e-mail. This tool is covered in <link linkend="config-prefs-mail-composer">Composer Preferences</link>.</para>
+ <bridgehead id="bt4ckfs">Calendar and Tasks</bridgehead>
+ <para>Here, you can set the way the calendar behaves, including your time zone and the length of your work week. For more information, see <link linkend="config-prefs-cal">Calendar and Tasks Settings</link>. </para>
+ <bridgehead id="bt4ckft">Certificates</bridgehead>
+ <para>Information for certificate handling for S/MIME security systems. For more information, see <link linkend="bshoty0">Certificates</link>.</para>
+ <para>Previous versions of Evolution included directory servers, folder settings, and Exchange delegation in the settings tool. Directory servers can now be set up as contacts groups in the Contacts tool, you can change folder settings in the folder right-click menu, and Exchange delegation is available in the Actions menu of the Exchange tool. </para>
+
+ <section id="config-prefs-mail-identity">
+ <title>Working with Mail Accounts</title>
+ <para>Evolution allows you to maintain multiple accounts, or identities. When you are writing an e-mail message, you can which account to use by selecting from the drop-down list next to the From field in the message composer. </para>
+ <para>Click Send/Receive to select all mail sources that are not disabled. If you don&apos;t want to check mail for a given account, select the account in the Mail Accounts tab and click the Disable button. </para>
+ <para>To add a new account, click Add to open the mail configuration assistant. To alter an existing account, select it in the Preferences window, then click Edit to open the account editor dialog box.</para>
+ <para>The account editor dialog box has six sections. </para>
+ <formalpara id="bsbhdwn">
+ <title>Identity: </title>
+ <para>Specify the name and e-mail address for this account. You can also choose a default signature to insert into messages sent from this account.</para>
+ </formalpara>
+ <formalpara id="bsbhe10">
+ <title>Receiving Mail: </title>
+ <para>Select the way you receive mail. You can download mail from a server (<link linkend="pop">POP</link>), read and keep it on the server (Microsoft Exchange, Novell GroupWise&reg;, or <link linkend="imap">IMAP</link>), or read it from files that already exist on your desktop computer. Your server requires you to use a Secure Socket Layer (SSL) connection. You can select Always, Whenever Possible, or Never as your SSL choice. If one doesn&rsquo;t work, try another.</para>
+ </formalpara>
+ <para>Your system administrator might ask you to connect to a specific port on a mail server. To specify which port you use, just type a colon and the port number after the server name. For example, to connect to port 143 on the server smtp.example.com, specify smtp.example.com:143 as the server name.</para>
+ <para>For additional information, see <link linkend="second-step">Receiving Mail</link>.</para>
+ <formalpara id="bsbhezv">
+ <title>Receiving Options: </title>
+ <para>Decide if you want to check for mail automatically and how often, as well as setting other message retrieval options. </para>
+ </formalpara>
+ <para>For additional information, see <link linkend="more-mail-options">Receiving Mail Options</link>.</para>
<formalpara id="bsbhltb">
<title>Sending Mail: </title>
- <para>Use this section to choose and configure a method for sending mail. You can choose <link linkend="smtp">SMTP</link>, Microsoft Exchange (if you have installed the Evolution Connector for Microsoft Exchange) or <link linkend="sendmail">Sendmail</link>.</para>
+ <para>Use this section to choose and configure a method for sending mail. You can choose <link linkend="smtp">SMTP</link>, Microsoft Exchange (if you have installed the Evolution Connector for Microsoft Exchange), or <link linkend="sendmail">Sendmail</link>.</para>
</formalpara>
- <para>If you choose Exchange or Sendmail, you&apos;re done with this page. However, SMTP offers you a choice of hostname, connection security level, and authentication type, which you will recognize as similar to those for IMAP and POP servers in the Receiving Mail tab.</para>
+ <para>For additional information, see <link linkend="third-step">Sending Mail</link></para>
<formalpara id="bsbhn0t">
<title>Defaults: </title>
<para>Use this section to set where this account stores the messages that it has sent, and the messages that you save as drafts. If you want to revert to the default settings, click Restore Defaults.</para>
@@ -3088,7 +3597,7 @@ Accepting and Replying to a Meeting Request</title>
<section id="bshoq5l">
<title>Autocompletion</title>
- <para>The Autocompletion tool lets you choose address books will auto complete names for you. This fuctionality requires accessibility to each of the address books you want to use. To enable autocompletion, select each of the address books you want to have auto complete in the Autocompletion page.</para>
+ <para>The Autocompletion tool lets you choose address books will auto complete names for you. This fuctionality requires accessibility to each of the address books you want to use. To enable autocompletion, select each of the address books you want to have auto-complete in the Autocompletion page.</para>
</section>
<section id="config-prefs-mail">
@@ -3126,7 +3635,7 @@ Accepting and Replying to a Meeting Request</title>
</formalpara>
<formalpara id="bsbhq3y">
<title>Deleting Mail: </title>
- <para>Choose whether to delete messages automatically when quitting Evolution, and whether you wish to explicitly confirm the final deletion of messages. </para>
+ <para>Choose whether to delete messages automatically when quitting Evolution, and whether you want to explicitly confirm the final deletion of messages. </para>
</formalpara>
<formalpara id="bsbhq7t">
<title>New Mail Notifications: </title>
@@ -3139,7 +3648,7 @@ Accepting and Replying to a Meeting Request</title>
<para>The HTML Mail page has the following options:</para>
<formalpara id="bsbhqot">
<title>Show Animated Images: </title>
- <para>Turn animation on or off here. </para>
+ <para>Turns animation on or off. </para>
</formalpara>
<formalpara id="bsbhquu">
<title>Prompt When Sending HTML Messages to Contacts That Don&apos;t Want Them: </title>
@@ -3149,8 +3658,8 @@ Accepting and Replying to a Meeting Request</title>
<title>Loading Images: </title>
<para>You can embed a image in an e-mail and have it load only when the message arrives. However, spammers can use image loading patterns to confirm &ldquo;live&rdquo; addresses and invade your privacy. You can elect to never load images automatically, to load images only if the sender is in your contacts, or always load images. </para>
</formalpara>
- <para>If you have chosen not to load images automatically, you can choose to see the images in one message at a time by selecting View &gt; Message Display Load Images. </para>
- <para>The Colors tab lets you select different color labels for individual messages. You can return to the default settings by clicking Restore Defaults.</para>
+ <para>If you have chosen not to load images automatically, you can choose to see the images in one message at a time by selecting View &gt; Message Display &gt; Load Images. </para>
+ <para>The Colors tab lets you select different color labels for individual messages. Return to the default settings by clicking Restore Defaults.</para>
</section>
<section id="mail-prefs-colors">
@@ -3160,12 +3669,12 @@ Accepting and Replying to a Meeting Request</title>
<section id="mail-prefs-headers">
<title>Mail Header Preferences</title>
- <para>The headers on an incoming message are the information about the message that isn&apos;t the content of the message itself, such as the sender, the time it was sent. Select the options here to show or hide different amounts of information about the messages you read. </para>
+ <para>The headers on an incoming message are the information about the message that isn&apos;t the content of the message itself, such as the sender and the time it was sent. Select the options here to show or hide different amounts of information about the messages you read. </para>
</section>
<section id="mail-prefs-junk">
<title>Junk Mail Preferences</title>
- <para>There are only two items in this section: Check Incoming Mail for Junk and Include Remote Tests. Checking for junk mail uses the SpamAssassin tool with trainable Bayesian filters. It also includes online tests, like checking for blacklisted message senders and ISPs. Online tests can make filtering slower, but more accurate. Select the options here to choose your mail filtering method. </para>
+ <para>There are only two items in this section: Check Incoming Mail for Junk and Include Remote Tests. Checking for junk mail uses the SpamAssassin&z-3rdParty; tool with trainable Bayesian filters. It also includes online tests, like checking for blacklisted message senders and ISPs. Online tests can make filtering slower, but more accurate. Select the options here to choose your mail filtering method. </para>
</section>
</section>
@@ -3218,14 +3727,14 @@ Accepting and Replying to a Meeting Request</title>
<section id="bshpjuj">
<title>Spell Checking</title>
- <para>To choose a spell-checking language, select it here. You must install the gnome-spell package, available through Red Carpet, for spell-checking to be available in Evolution. Additional dictionaries are also available through Red Carpet and are detected automatically if you have installed them. To have the composer automatically check your spelling while you type, select Check Spelling While I Type.</para>
- <para>Check the spelling of messages by clicking Edit &gt; Spell Check Document. </para>
+ <para>To choose a spell-checking language, select it here. You must install the gnome-spell package, available through ZENworks Linux Management, for spell-checking to be available in Evolution. Additional dictionaries are also available through Red Carpet and are detected automatically if you have installed them. To have the composer automatically check your spelling while you type, select Check Spelling While I Type.</para>
+ <para>Check the spelling in messages by clicking Edit &gt; Spell Check Document. </para>
</section>
</section>
<section id="config-prefs-cal">
<title>Calendar and Tasks Settings</title>
- <para>The calendar configuration tool has two pages General and Display.</para>
+ <para>The calendar configuration tool has two pages:</para>
<itemizedlist>
<listitem>
<para><link linkend="bshpskx">General</link></para>
@@ -3240,7 +3749,7 @@ Accepting and Replying to a Meeting Request</title>
<para>The General page lets you set the following options:</para>
<formalpara id="bsbhukf">
<title>Time Zone: </title>
- <para>The city you&rsquo;re located in, to specify your time zone. </para>
+ <para>The city you&apos;re located in, to specify your time zone. </para>
</formalpara>
<formalpara id="bsbhup9">
<title>Time Format: </title>
@@ -3277,7 +3786,7 @@ Accepting and Replying to a Meeting Request</title>
</formalpara>
<formalpara id="bsbhw0r">
<title>Compress Weekends In Month View: </title>
- <para>Select this option to display weekends in one box, instead of one for each day in the month view. </para>
+ <para>Select this option to display weekends in one box instead of two in the month view. </para>
</formalpara>
<formalpara id="bsbhw7p">
<title>Show Week Numbers In Date Navigator: </title>
@@ -3299,34 +3808,34 @@ Accepting and Replying to a Meeting Request</title>
</section>
<section id="config-prefs-contact">
- <title>Directory Servers</title>
- <para>There are two main tasks for configuring contact information. Autocompletion settings are available in the main settings tool. The other major contact configuration task is creating new contact list. </para>
+ <title>Contact Management</title>
+ <para>There are two main tasks for configuring contact information. Autocompletion settings are available in the main settings tool. The other major contact configuration task is creating new contact lists. </para>
<para>To add a new contact list, either local or remote:</para>
- <procedure>
- <step id="bsbhwyr">
+ <orderedlist>
+ <listitem id="bsbhwyr">
<para>Click Contacts.</para>
- </step>
- <step id="bsbhx27">
+ </listitem>
+ <listitem id="bsbhx27">
<para>Click the down-arrow next to New.</para>
- </step>
- <step id="bsbhxhp">
+ </listitem>
+ <listitem id="bsbhxhp">
<para>Select Contact List.</para>
- </step>
- <step id="bsbhxk3">
+ </listitem>
+ <listitem id="bsbhxk3">
<para>Type a name and location for the contact group.</para>
- </step>
- <step id="bsbhxqx">
+ </listitem>
+ <listitem id="bsbhxqx">
<para>Click Forward.</para>
<para>If the contact group is stored locally, you do not need to provide any further information. Click OK.</para>
<para>or</para>
<para> If you are creating an <link linkend="ldap">LDAP</link> server, enter the server information as requested by the assistant:</para>
<formalpara id="bsbhyuo">
<title>Server Name: </title>
- <para>Internet address of the contact server you are using. </para>
+ <para>The Internet address of the contact server you are using. </para>
</formalpara>
<formalpara id="bsbhzhh">
<title>Login Method: </title>
- <para>Specify whether your login is anonymous, using an e-mail address, or a distinguished name. If the login is not anonymous, specify the e-mail address or distinguished name (DN) required by the server. </para>
+ <para>Specify whether your login is anonymous, uses an e-mail address, or uses a distinguished name. If the login is not anonymous, specify the e-mail address or distinguished name (DN) required by the server. </para>
</formalpara>
<formalpara id="bsbhznl">
<title>Port: </title>
@@ -3362,36 +3871,36 @@ Accepting and Replying to a Meeting Request</title>
</formalpara>
<formalpara id="bsbi1um">
<title>Display Name: </title>
- <para>The name to label this folder. It can be any name you choose. </para>
+ <para>The name you want to use as a label for this folder. It can be any name you choose. </para>
</formalpara>
- </step>
- <step id="bsbi2rh">
+ </listitem>
+ <listitem id="bsbi2rh">
<para>Click Apply.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
<section id="bshoty0">
<title>Certificates</title>
- <para>Evolution allows you to add certificates for yourself as well as for contacts. This allows you to communicate with others securely over an encryted connection, or sign a message confirming your identity to the contact. </para>
+ <para>Evolution allows you to add certificates for yourself as well as for contacts. This allows you to communicate with others securely over an encrypted connection, or sign a message confirming your identity to the contact. These settings only apply to S/MIME encryption.</para>
<formalpara id="bshov9m">
<title>Your Certificates: </title>
- <para>The Your Certificates tab displays a list of certificates that you own. You can import, view, backup and delete your certificates from this tab.</para>
+ <para>Click Your Certificates tab to display a list of certificates that you own. You can import, view, backup and delete your certificates from this page.</para>
</formalpara>
<formalpara id="bshovvp">
<title>Contact Certificates: </title>
- <para>The Contact Certificates tab displays a list of certificates that you have for contacts. These certificates allow you to decrypt messages as well verify signed messages. You can import, view, edit, and delete your contact certificates from this tab.</para>
+ <para>Click Contact Certificates tab to display a list of certificates that you have for contacts. These certificates allow you to decrypt messages as well verify signed messages. You can import, view, edit, and delete your contact certificates from this page.</para>
</formalpara>
<formalpara id="bshowu7">
<title>Authorities: </title>
- <para>The Authorities tab displays a list of trusted certificate authorities who verify that the certificate you have is valid. You can import, view, edit, and delete certificate authorities from this tab.</para>
+ <para>Click Authorities tab to display a list of trusted certificate authorities who verify that the certificate you have is valid. You can import, view, edit, and delete certificate authorities from this page.</para>
</formalpara>
</section>
</chapter>
<chapter id="config-sync">
<title>Synchronizing Your Handheld Device</title>
- <para>Synchronization presents you with two issues you need to address. First, your computer needs to recognize and access your handheld. At this time, Evolution&trade; only supports Palm OS devices like the PalmPilot and the Handspring Visor. Secondly, you should decide what sort of synchronization behavior you want.</para>
+ <para>Synchronization presents you with two issues you need to address. First, your computer needs to recognize and access your handheld. At this time, Evolution&trade; only supports Palm OS devices like the PalmPilot&z-3rdParty; and the Handspring Visor. Secondly, you should decide what sort of synchronization behavior you want.</para>
<itemizedlist>
<listitem>
<para><link linkend="bshq58g">Enabling Synchronization</link></para>
@@ -3411,8 +3920,8 @@ Accepting and Replying to a Meeting Request</title>
<section id="bshq7hl">
<title>Selecting Conduits</title>
- <para>Once your computer and your Palm OS device are communicating, select the <link linkend="conduit">conduits</link> you want under the Pilot Conduits section of the Control Center. You can use conduits to synchronize data with several applications; the Evolution conduits are labeled EAddress, for the contacts in your address book, ECalendar, for your calendar, and ETodo, for your task list.</para>
- <para>Click Enable, then click Settings to change what it does when activated. Your options may vary depending on the conduit, but typically they are as follows:</para>
+ <para>After your computer and your Palm OS device are communicating, select the <link linkend="conduit">conduits</link> you want under the Pilot Conduits section of the Control Center. You can use conduits to synchronize data with several applications; the Evolution conduits are labeled EAddress, for the contacts in your address book; ECalendar, for your calendar; and ETodo, for your task list.</para>
+ <para>Click Enable, then click Settings to change what the conduit does when activated. Your options can vary depending on the conduit, but typically they are as follows:</para>
<formalpara id="bsbi551">
<title>Disabled: </title>
<para>Do nothing.</para>
@@ -3437,22 +3946,22 @@ Accepting and Replying to a Meeting Request</title>
<title>Merge to Pilot: </title>
<para>Copy new data from the handheld to the computer, and remove any information from the computer that has been deleted on the handheld.</para>
</formalpara>
- <para>Select the behavior you want for each conduit you choose to use. If you&apos;re not sure, use with Synchronize.</para>
+ <para>Select the behavior you want for each conduit you choose to use. If you&apos;re not sure, use Synchronize.</para>
</section>
<section id="bshq2qn">
<title>Synchronizing Information</title>
<para>Use the following procedure to synchronize the data on your Palm OS device with the data you store in Evolution.</para>
- <para>If you want to backup your information before synchronizing, make a copy of the <command>evolution</command> directory inside your home directory.</para>
+ <para>If you want to back up your information before synchronizing, make a copy of the <command>evolution</command> directory inside your home directory.</para>
<section id="bshq3ip">
<title>Using HotSync</title>
- <procedure>
- <step id="bshq1vg">
+ <orderedlist>
+ <listitem id="bshq1vg">
<para>Put your handheld device in its cradle an press the HotSync button.</para>
- <para>If you use Palm OS v. 4.0 and have password protection turned on for your handheld device, you may encounter trouble synchronizing. If this happens, try turning off password protection on your handheld, synchronize it with your desktop computer, and then re-enable password protection on your handheld.</para>
- </step>
- </procedure>
+ <para>If you use Palm OS v. 4.0 and have password protection turned on for your handheld device, you might encounter trouble synchronizing. If this happens, try turning off password protection on your handheld, synchronize it with your desktop computer, and then re-enable password protection on your handheld.</para>
+ </listitem>
+ </orderedlist>
<para>If you have followed the setup instructions properly, your Palm OS device will synchronize data with Evolution.</para>
</section>
</section>
@@ -3466,59 +3975,59 @@ Accepting and Replying to a Meeting Request</title>
<title>Migrating Local Outlook Mail Folders</title>
<para>Exchange and IMAP mail is stored on the server, so you do not need to migrate it to your Linux partition. However, if you have stored mail on your computer, you might want to make it accessible to Evolution.</para>
<para>First, while using Windows, prepare your messages for import:</para>
- <procedure>
- <step id="bshqe24">
+ <orderedlist>
+ <listitem id="bshqe24">
<para>Clean up your mail. Delete messages and folders you do not need, and click File &gt; Folders &gt; Properties &gt; Advanced &gt; Compact to erase old, deleted messages from your PST file.</para>
- </step>
- <step id="bshqe4g">
+ </listitem>
+ <listitem id="bshqe4g">
<para>If you nest your folders one inside another, you might want to rename subfolders so that you can tell which folder they belong to. You must re-nest them after you load them into Evolution.</para>
- </step>
- <step id="bshqe6i">
+ </listitem>
+ <listitem id="bshqe6i">
<para>Import the files into Mozilla Mail (or another mailer, such as Netscape or Eudora, that uses the standard mbox format). Linux mailers cannot do this task, because it requires a library available only under Windows. In Mozilla, import by selecting Window Mail &amp; Newsgroups Tools Import.</para>
- </step>
- <step id="bshqe8a">
+ </listitem>
+ <listitem id="bshqe8a">
<para>Mozilla creates a set of files in the directory<command> Windows\Application_Data\Mozilla\Profiles\(UserName)\(Random Letters)\Mail\Local Folders\OutlookMail\</command>. The data files are those that have no file extension.</para>
- <para>If you are using Windows XP or Windows 2000, your Windows hard drive is probably in the NTFS format, which some Linux systems cannot read without additional software. You may find it simpler to copy the mail folders to a different drive or to burn a CD.</para>
- </step>
- </procedure>
- <para>To create new folders for your files.</para>
- <para>When you have your mail in a format Evolution can understand, reboot to Linux. Then continue with the following procedure:</para>
- <procedure>
- <step id="bshqeej">
+ <para>If you are using Windows XP or Windows 2000, your Windows hard drive is probably in the NTFS format, which some Linux systems cannot read without additional software. You might find it simpler to copy the mail folders to a different drive or to burn a CD.</para>
+ </listitem>
+ </orderedlist>
+ <para></para>
+ <para>When you have your mail in a format Evolution can understand, reboot to Linux. Then continue with the following procedure. To create new folders for your files:</para>
+ <orderedlist>
+ <listitem id="bshqeej">
<para>Mount your Windows drive or the disk where you saved the mail files.</para>
- </step>
- <step id="bshqegg">
+ </listitem>
+ <listitem id="bshqegg">
<para>Copy all the mail files into your home directory or another convenient place.</para>
- </step>
- <step id="bshqeia">
+ </listitem>
+ <listitem id="bshqeia">
<para>Start Evolution.</para>
- </step>
- <step id="bshqejx">
+ </listitem>
+ <listitem id="bshqejx">
<para>Press Shift+Ctrl+F or select File &gt; New Folder to create the folders you want.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
<para>To import the data files:</para>
- <procedure>
- <step id="bshqep7">
+ <orderedlist>
+ <listitem id="bshqep7">
<para>In Evolution, open the File Import assistant by clicking File &gt; Import.</para>
- </step>
- <step id="bshqera">
- <para>Click Next, then select Import a single file.</para>
- </step>
- <step id="bshqesz">
+ </listitem>
+ <listitem id="bshqera">
+ <para>Click Next, then select Import A Single File.</para>
+ </listitem>
+ <listitem id="bshqesz">
<para>Leave the file type as Automatic, then click Browse to select the data file. </para>
<para>Remember, the data files are the files that have no file extension.</para>
- </step>
- <step id="bshqeuv">
+ </listitem>
+ <listitem id="bshqeuv">
<para>Select the folder where you want to put the imported data file.</para>
- </step>
- <step id="bshqg85">
+ </listitem>
+ <listitem id="bshqg85">
<para>Click OK.</para>
- </step>
- <step id="bshqex9">
+ </listitem>
+ <listitem id="bshqex9">
<para>Repeat the import steps until you have imported all your mail.</para>
- </step>
- </procedure>
+ </listitem>
+ </orderedlist>
</section>
</appendix>
@@ -3542,320 +4051,294 @@ Accepting and Replying to a Meeting Request</title>
<section id="quickref-open">
<title>Opening or Creating Items</title>
- <bridgehead>New Item</bridgehead>
- <para>Press Ctrl+N to open a new item for whatever part of Evolution you&rsquo;re working in. In mail, this means you&rsquo;ll create a new message. If you&rsquo;re looking at your address book, Ctrl+N creates a new contact card, and in the calendar, a new appointment.</para>
- <bridgehead>Creating a New E-Mail Message</bridgehead>
+ <bridgehead id="bt4ckg2">New Item</bridgehead>
+ <para>Press Ctrl+N to open a new item for whatever part of Evolution you&apos;re working in. In mail, this means you create a new message. If you&apos;re looking at your address book, Ctrl+N creates a new contact card, and in the calendar, a new appointment.</para>
+ <bridgehead id="bt4ckg3">Creating a New E-Mail Message</bridgehead>
<para>Use File &gt; New &gt; Mail Message or Ctrl+Shift+M. </para>
- <bridgehead>Creating a New Appointment</bridgehead>
+ <bridgehead id="bt4ckg4">Creating a New Appointment</bridgehead>
<para>Use File &gt; New Appointment or Ctrl+Shift+A.</para>
- <bridgehead>Entering a New Contact </bridgehead>
+ <bridgehead id="bt4ckg5">Entering a New Contact </bridgehead>
<para> Double-click in any blank space in the contact manager to create a new address card. You can also use File &gt; New Contact or Ctrl+Shift+C. </para>
- <bridgehead>Creating a New Task</bridgehead>
+ <bridgehead id="bt4ckg6">Creating a New Task</bridgehead>
<para> File &gt; New Task or Ctrl+Shift+T. </para>
</section>
<section id="quickref-mail">
<title>Mail Tasks</title>
- <bridgehead>Send and Receive Mail</bridgehead>
- <para>Press F9, click the Send/Receive button in the toolbar, or choose Actions Send/Receive.</para>
- <bridgehead>Navigating the Message List with the Keyboard</bridgehead>
+ <bridgehead id="bt4ckg7">Send and Receive Mail</bridgehead>
+ <para>Press F9, click the Send/Receive button in the toolbar, or click Actions &gt; Send/Receive.</para>
+ <bridgehead id="bt4ckg8">Navigating the Message List with the Keyboard</bridgehead>
<para>Press (]) or (.) to jump to the next unread message. ([) or (,) goes to the previous unread message. Use the arrow keys to move up and down in the list of all messages.</para>
- <bridgehead>Moving the Display Up and Down in the Preview Pane</bridgehead>
- <para>Press the space bar to move down a page. Press Backspace to move up a page.</para>
- <bridgehead>Replying To a Message</bridgehead>
- <para>To reply to the sender of the message only, click Reply in the toolbar, or press Ctrl+R. </para>
+ <bridgehead id="bt4ckg9">Moving the Display Up and Down in the Preview Pane</bridgehead>
+ <para>Press the Spacebar to move down a page. Press Backspace to move up a page.</para>
+ <bridgehead id="bt4ckga">Replying To a Message</bridgehead>
+ <para>To reply only to the sender of the message, click Reply in the toolbar, or press Ctrl+R. </para>
<para>To reply to the sender and all the other visible recipients of the message, click Reply to All or select the message and press Shift+Ctrl+R. </para>
- <bridgehead>Forwarding a Message</bridgehead>
+ <bridgehead id="bt4ckgb">Forwarding a Message</bridgehead>
<para>Select the message or messages you want to forward, then click Forward in the toolbar, or press Ctrl+F.</para>
- <bridgehead>Opening a Message In a New Window</bridgehead>
+ <bridgehead id="bt4ckgc">Opening a Message In a New Window</bridgehead>
<para>Double-click the message you want to view, or select it and press Enter or Ctrl+O. </para>
- <bridgehead>Creating Filters and Virtual Folders</bridgehead>
+ <bridgehead id="bt4ckgd">Creating Filters and Virtual Folders</bridgehead>
<para>Right-click a message and select Create Rule From Message. You can also create filters and virtual folders in the Tools menu. </para>
- <bridgehead>Adding a Sender to the Address Book</bridgehead>
+ <bridgehead id="bt4ckge">Adding a Sender to the Address Book</bridgehead>
<para>Right-click a message and select Add Sender to Address Book. You can also right-click on any e-mail address to add it to your address book. </para>
</section>
<section id="quickref-cal">
<title>Calendar</title>
- <bridgehead>Creating a New Appointment</bridgehead>
+ <bridgehead id="bt4ckgf">Creating a New Appointment</bridgehead>
<para> Use File &gt; New Appointment or Ctrl+Shift+A. </para>
<para>You can also click on any blank spot in the calendar and start typing to create a new appointment entry.</para>
- <bridgehead>Creating a New Task</bridgehead>
+ <bridgehead id="bt4ckgg">Creating a New Task</bridgehead>
<para> Use File &gt; New Task or Ctrl+Shift+T. </para>
</section>
<section id="quickref-contact">
<title>Address Book</title>
- <bridgehead>Editing a Contact</bridgehead>
+ <bridgehead id="bt4ckgh">Editing a Contact</bridgehead>
<para>Double-click the contact&apos;s address card to change details. </para>
- <bridgehead>Deleting a Contact</bridgehead>
- <para>Right-click on a contact, then click Delete or select a contact, then click Delete on the toolbar. </para>
- <bridgehead>Sending E-Mail To a Contact</bridgehead>
+ <bridgehead id="bt4ckgi">Deleting a Contact</bridgehead>
+ <para>Right-click on a contact, then click Delete; or select a contact, then click Delete on the toolbar. </para>
+ <bridgehead id="bt4ckgj">Sending E-Mail To a Contact</bridgehead>
<para>Right-click a contact, then click Send Message to Contact.</para>
- <bridgehead>Creating a New Contact </bridgehead>
- <para>Double-click in any blank space in the contact manager to create a new address card, or right-click anywhere in the address book and select New Contact. You can also click File &gt; New Contact or press Ctrl+Shift+C </para>
+ <bridgehead id="bt4ckgk">Creating a New Contact </bridgehead>
+ <para>Double-click in any blank space in the contact manager to create a new address card, or right-click anywhere in the address book and select New Contact. You can also click File &gt; New Contact or press Ctrl+Shift+C. </para>
</section>
</appendix>
<appendix id="bugs">
<title>Known Bugs and Limitations</title>
+ <para>Evolution bug tracking is done at the <ulink url="http://bugzilla.ximian.com">Ximian bug tracking System</ulink>. You can use that, or the GNOME Bug Report Tool (known as bug-buddy at the command line) if you find bugs or would like to request new features.</para>
<para>A complete list of feature requests and other issues with Evolution&trade; is available online in the Ximian&reg; bug tracking system. You can learn more about the Evolution development process at <ulink url="http://developer.ximian.com">developer.ximian.com</ulink>. </para>
- <para>Evolution bug tracking is done at the <ulink url="http://bugzillaximian.com">Ximian&reg; bug tracking System</ulink>. You can use that, or the GNOME Bug Report Tool (known as bug-buddy at the command line) if you find bugs or would like to request new features.</para>
- <para>If you need additional help with Evolution, visit the Novell support site at <ulink url="http://support.novell.com">Novell support</ulink>.</para>
+ <para>If you need additional help with Evolution, visit the Novell support site at <ulink url="http://support.novell.com">Novell support</ulink>.. </para>
+ </appendix>
+
+ <appendix id="authors">
+ <title>Authors</title>
+ <para>Evolution was written by the Evolution team and numerous other dedicated GNOME programmers. You can see their names by selecting <emphasis>Help</emphasis> <emphasis>About</emphasis> from any Evolution window.</para>
+ <para>The Evolution code owes a great debt to the GNOME-pim and GNOME-Calendar applications, and to KHTMLW. The developers of Evolution acknowledge the efforts and contributions of all who worked on those projects.</para>
+ <para>For more information please visit the Evolution <ulink url="http://www.novell.com/products/desktop/features/evolution.html">Web page</ulink>. Please send all comments, suggestions, and bug reports to the <ulink url="http://bugzilla.ximian.com">bug tracking database</ulink>. Instructions for submitting bug reports can be found on-line at the same location. You can also use the GNOMe bug report tool, <command>bug-buddy</command>, to submit your defect reports.</para>
+ <para>This manual was written by Mark Moulder (mmoulder@novell.com), Aaron Weber (aaron@ximian.com), Kevin Breit (mrproper@ximian.com), Duncan Mak (duncan@ximian.com), and Ettore Perazzoli (ettore@ximian.com) with the help of the application programmers and the GNOME Documentation Project.</para>
+ <para>Please file comments and suggestions for this manual as bugs in the Ximian bug tracking system. If you contributed to this project but do not see your name here, please contact Mark Moulder (mmoulder@novell.com) and he&rsquo;ll list you.</para>
+ <para>Partial list of Documentation Translators (application translated to 36 additional languages): </para>
+ <itemizedlist>
+ <listitem>
+ <para>Daniel Persson for Swedish (.se)</para>
+ </listitem>
+ <listitem>
+ <para>Hector Garcia Alvarez for Spanish (.es)</para>
+ </listitem>
+ <listitem>
+ <para>Kjartan Maraas for Norwegian (.no)</para>
+ </listitem>
+ </itemizedlist>
</appendix>
<glossary id="apx-gloss">
<title>Glossary</title>
-
+ <para>This glossary contains terms that are frequently used in this guide as well as in Evolution.</para>
<glossentry id="assistant">
<glossterm>Assistant</glossterm>
<glossdef>
<para>A tool that guides a user through a series of steps, usually to configure or set up a program. Equivalent to Wizard and Druid.</para>
</glossdef>
</glossentry>
-
<glossentry id="attachment">
<glossterm>attachment</glossterm>
<glossdef>
<para>Any file sent with an e-mail. Attachments can be embedded in a message or appended to it.</para>
</glossdef>
</glossentry>
-
<glossentry id="automatic-indexing">
- <glossterm>Automatic indexing</glossterm>
+ <glossterm>automatic indexing</glossterm>
<glossdef>
- <para>Pre-downloading procedure that allows Evolution&trade; to quickly refer to data. It enables faster searches and decreases memory usage for data displays.</para>
+ <para>A pre-downloading procedure that allows Novell&reg; Evolution&trade; to quickly refer to data. It enables faster searches and decreases memory usage for data displays.</para>
</glossdef>
</glossentry>
-
<glossentry id="bsi89la">
<glossterm>Bcc (Blind Carbon Copy)</glossterm>
<glossdef>
- <para>Blind copy recipients (Bcc) receive a copy of an item. Other recipients receive no information about blind copies. Only the sender and the blind copy recipient know that a blind copy was sent. If a recipient replies and chooses Reply to All, the blind copy recipient will not receive the reply.</para>
+ <para>Blind copy recipients (Bcc) receive a copy of an item. Other recipients receive no information about blind copies. Only the sender and the blind copy recipient know that a blind copy was sent. If a recipient replies and chooses Reply to All, the blind copy recipient does not receive the reply.</para>
</glossdef>
</glossentry>
-
<glossentry id="cc">
<glossterm>Cc (Carbon Copy)</glossterm>
<glossdef>
<para>Carbon copy recipients (CC) receive a copy of an item. CC recipients are users who would benefit from the information in an item, but are not affected by or directly responsible for it. All recipients can see that a carbon copy was sent. They can also see the names of the CC recipients.</para>
</glossdef>
</glossentry>
-
<glossentry id="conduit">
<glossterm>conduit</glossterm>
<glossdef>
<para>A small application that controls the transfer of data between a handheld device and a desktop computer.</para>
</glossdef>
</glossentry>
-
<glossentry id="evolution">
<glossterm>Evolution</glossterm>
<glossdef>
<para>The GNOME groupware application.</para>
</glossdef>
</glossentry>
-
<glossentry id="execute">
<glossterm>execute</glossterm>
<glossdef>
<para>To run a program. Any file that can be run is called an executable. Evolution can download executable attachments, but before they can be run, the files must be marked as executable with a shell or file manager. This security precaution prevents the automatic or accidental execution of malicious programs. For more information on executables and file permissions, see the documentation for your file manager or shell.</para>
</glossdef>
</glossentry>
-
<glossentry id="expunge">
<glossterm>expunge</glossterm>
<glossdef>
<para>When messages are marked for deletion, they remain till they are expunged. When a message is expunged, it is permanently deleted, as long as it was marked for deletion.</para>
</glossdef>
</glossentry>
-
<glossentry id="filetree">
<glossterm>file tree</glossterm>
<glossdef>
- <para>A way of describing a group of files on a computer. The top of the tree is called the root directory, and denoted by <command>/</command>. The rest of the branches spread downward from the root. Don&apos;t confuse the root directory with the root account or root&apos;s home directory, normally <command>/root</command>.</para>
+ <para>A way of describing a group of files on a computer. The top of the tree is called the root directory, and is denoted by <command>/</command>. The rest of the branches spread downward from the root. Don&apos;t confuse the root directory with the root account or root&apos;s home directory, normally <command>/root</command>.</para>
</glossdef>
</glossentry>
-
<glossentry id="filter">
<glossterm>filter</glossterm>
<glossdef>
<para>Within Evolution, a filter is a method of sorting mail automatically when it&apos;s downloaded. You can create filters to perform one or more actions on a message that meets any (or all) of a wide range of criteria.</para>
</glossdef>
</glossentry>
-
<glossentry id="forward">
<glossterm>forward</glossterm>
<glossdef>
<para>Forwards a copy of the message and any additional comments to a different e-mail address. </para>
</glossdef>
</glossentry>
-
<glossentry id="groupware">
<glossterm>groupware</glossterm>
<glossdef>
<para>A term describing an application that helps groups of people work together. Typically, a groupware application has several productivity features built into one program, including e-mail, calendar, and address book tools.</para>
</glossdef>
</glossentry>
-
<glossentry id="html">
<glossterm>HTML</glossterm>
<glossdef>
<para>Hypertext Markup Language (HTML) is a language for describing page layout in electronic documents such as Web pages, help files, and e-mail messages. HTML can be used in e-mail and news posts to insert images and apply text treatments.</para>
</glossdef>
</glossentry>
-
- <glossentry id="hot-key">
- <glossterm>hot key</glossterm>
- <glossdef>
- <para>Hot keys, also called shortcut keys, are keyboard combinations used to do actions on a computer instead of using the mouse. Hot keys can speed up computer usage.</para>
- </glossdef>
- </glossentry>
-
<glossentry id="ical">
<glossterm>iCal</glossterm>
<glossdef>
- <para>iCal is the program which Evolution uses to manage the calendar section.</para>
+ <para>iCal is the program that Evolution uses to manage the calendar section.</para>
</glossdef>
</glossentry>
-
<glossentry id="imap">
<glossterm>IMAP</glossterm>
<glossdef>
- <para>Internet Mail Access Protocol. It allows access to e-mail which is typically (although not always) stored remotely on a server rather than on a local hard disk. Often contrasted with POP. </para>
+ <para>Internet Mail Access Protocol. It allows access to e-mail which is typically stored remotely on a server rather than on a local hard disk. Often contrasted with POP. </para>
</glossdef>
</glossentry>
-
<glossentry id="inline">
<glossterm>inline</glossterm>
<glossdef>
- <para>Displayed as part of a message or other document, rather than attached as a separate file. Contrast with <emphasis>Attachment</emphasis>.</para>
+ <para>Displayed as part of a message or other document, rather than attached as a separate file. Contrast with <emphasis>attachment</emphasis>.</para>
</glossdef>
</glossentry>
-
<glossentry id="ldap">
<glossterm>LDAP</glossterm>
<glossdef>
<para>Lightweight Directory Access Protocol. Allows a client to search through a large database of addresses, phone numbers, and people stored on a server.</para>
</glossdef>
</glossentry>
-
<glossentry id="mail-client">
<glossterm>mail client</glossterm>
<glossdef>
- <para>The application with which a person reads and sends e-mail. Its counterparts are the various types of mail servers, which handle user authentication and direct messages from sender to recipient.</para>
- </glossdef>
- </glossentry>
-
- <glossentry id="minicard">
- <glossterm>minicard</glossterm>
- <glossdef>
- <para>A format for the display of contact data. Similar in appearance to a small business card.</para>
+ <para>The application with which a person reads and sends e-mail. Its counterparts are the various types of mail servers, which handle user authentication and direct messages from the sender to the recipient.</para>
</glossdef>
</glossentry>
-
<glossentry id="pop">
<glossterm>POP</glossterm>
<glossdef>
<para>Post Office Protocol. A mechanism for e-mail transport. In contrast to IMAP, it is used only to get mail from a server and store it locally on your hard disk.</para>
</glossdef>
</glossentry>
-
<glossentry id="protocol">
<glossterm>protocol</glossterm>
<glossdef>
<para>An agreed-upon method of communication, especially one for sending particular types of information between computer systems. Examples include POP (Post Office Protocol), for e-mail, and HTTP (HypterText Transfer Protocol) for Web pages.</para>
</glossdef>
</glossentry>
-
<glossentry id="public-key-encryption">
<glossterm>public key encryption</glossterm>
<glossdef>
<para>A strong encryption method that uses a set of two keys, one of which is made public, and one of which is kept private. Data encrypted using the public key can only be decrypted using the private key. The longer the keys, the more difficult it is to break the encryption.</para>
</glossdef>
</glossentry>
-
<glossentry id="regular-expression">
<glossterm>regular expression</glossterm>
<glossdef>
- <para>A regular expression (regex) is a way of describing a string of text using metacharacters or wildcard symbols. For example, the statement fly.*so[au]p means any phrase beginning with &lsquo;fly&apos; and ending in oup&apos; or &lsquo;soap&apos;. If you searched for that expression, you&rsquo;d find both &ldquo;fly in my soup&rdquo; and &ldquo;fly in my soap&rdquo;. For more information, enter man grep from the command line.</para>
+ <para>A regular expression (regex) is a way of describing a string of text using metacharacters or wildcard symbols. For example, the statement fly.*so[au]p means any phrase beginning with &lsquo;fly&apos; and ending in oup&apos; or &lsquo;soap&apos;. If you searched for that expression, you&rsquo;d find both &ldquo;fly in my soup&rdquo; and &ldquo;fly in my soap.&rdquo; For more information, enter <command>man grep</command> from the command line.</para>
</glossdef>
</glossentry>
-
<glossentry id="script">
<glossterm>script</glossterm>
<glossdef>
- <para>A program written in an interpreted (rather than compiled) language. Often used as a synonym for macro, to denote a series of pre-recorded commands or actions within an application. Often times, accomplish repetitive and tedious tasks, to save the user time.</para>
+ <para>A program written in an interpreted (rather than compiled) language. Often used as a synonym for macro, to denote a series of pre-recorded commands or actions within an application. Scripts are used to accomplish repetitive and tedious tasks, to save the user time.</para>
</glossdef>
</glossentry>
-
<glossentry id="search-base">
<glossterm>Search Base</glossterm>
<glossdef>
- <para>LDAP can break contact lists into many groups. The Search Base tells LDAP the top group to use. How much of the Search Base that is searched is set by the Search Scope option.</para>
+ <para>LDAP can break contact lists into many groups. The Search Base tells LDAP the top group to use. How much of the Search Base to search is set by the Search Scope option.</para>
</glossdef>
</glossentry>
-
<glossentry id="search-scope">
<glossterm>Search Scope</glossterm>
<glossdef>
<para>Search Scope states how much of the Search Base to search.</para>
</glossdef>
</glossentry>
-
<glossentry id="sendmail">
<glossterm>Sendmail</glossterm>
<glossdef>
- <para>A program that sends mail. Evolution can use it instead of SMTP; some people prefer it because it offers more flexibility; however, it is more difficult to set up.</para>
+ <para>A program that sends mail. Evolution can use it instead of SMTP; some people prefer it because it offers more flexibility but it is more difficult to set up.</para>
</glossdef>
</glossentry>
-
<glossentry id="shortcut-bar">
<glossterm>shortcut bar</glossterm>
<glossdef>
<para>An area of Evolution that offers users fast access to the most frequently used features of the application.</para>
</glossdef>
</glossentry>
-
<glossentry id="signature">
<glossterm>signature</glossterm>
<glossdef>
<para>Text placed at the end of every e-mail sent, similar to a hand-written signature at the bottom of a written letter. A signature can be anything from a favorite quotation to a link to a Web page; courtesy dictates that it be fewer than four lines long.</para>
</glossdef>
</glossentry>
-
<glossentry id="smtp">
<glossterm>SMTP</glossterm>
<glossdef>
- <para>Simple Mail Transfer Protocol. The most common way of transporting mail messages your computer to the server.</para>
+ <para>Simple Mail Transfer Protocol. The most common way of transporting mail messages from your computer to the server.</para>
</glossdef>
</glossentry>
-
<glossentry id="tooltip">
<glossterm>tooltip</glossterm>
<glossdef>
<para>A small box of explanatory text that appears when the mouse pointer is held over a button or other interface element.</para>
</glossdef>
</glossentry>
-
<glossentry id="virus">
<glossterm>virus</glossterm>
<glossdef>
- <para>A program that inserts itself into other files or programs and which, when executed, spreads to more programs and other computers. A virus can cause substantial damage by clogging networks or disk drives, deleting files, or opening security holes.</para>
+ <para>A program that inserts itself into other files or programs. When executed, it spreads to more programs and other computers. A virus can cause substantial damage by clogging networks or disk drives, deleting files, or opening security holes.</para>
</glossdef>
</glossentry>
-
<glossentry id="vcard">
<glossterm>vCard</glossterm>
<glossdef>
- <para>A file format for the exchange of contact information. When you get an address card attached to an e-mail, it&rsquo;s probably in vCard format. Contrast with vFolder.</para>
+ <para>A file format for the exchange of contact information. When you get an address card attached to an e-mail, it&apos;s probably in vCard format. Contrast with vFolder.</para>
</glossdef>
</glossentry>
-
<glossentry id="vfolder">
<glossterm>vFolder</glossterm>
<glossdef>
- <para>An e-mail organization tool. vFolders allow you to create a folder that contains the results of a complex search. vFolder contents are are updated dynamically.</para>
+ <para>An e-mail organization tool. vFolders allow you to create a folder that contains the results of a complex search. vFolder contents are updated dynamically.</para>
</glossdef>
</glossentry>
</glossary>
@@ -3870,10 +4353,7 @@ Accepting and Replying to a Meeting Request</title>
<member>You may not use, export, or re-export this product in violation of any applicable laws or regulations including, without limitation, U.S. export regulations or the laws of the country in which you reside.</member>
</simplelist>
<simplelist>
- <member>Copyright &copy; 2004 Novell, Inc. All rights reserved. Permission is granted to copy, distribute, and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.2 or any later version, published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the GFDL can be found at http://www.fsf.org/licenses/fdl.html.</member>
- <member>THIS DOCUMENT AND MODIFIED VERSIONS OF THIS DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT:</member>
- <member>1. THE DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND</member>
- <member>2. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES.</member>
+ <member>Copyright &copy; 2004 Novell, Inc. All rights reserved. No part of this publication may be reproduced, photocopied, stored on a retrieval system, or transmitted without the express written consent of the publisher.</member>
</simplelist>
<simplelist>
<member>Novell, Inc.</member>
@@ -3882,20 +4362,17 @@ Accepting and Replying to a Meeting Request</title>
<member>U.S.A.</member>
<member>www.novell.com</member>
</simplelist>
- <para id="Bktitle">Evolution User Guide 2.0</para>
- <para>September 9, 2004</para>
+ <para id="Bktitle">Enter Book Title Here</para>
+ <para>March 7, 2005</para>
<simplelist>
<member>To access the online documentation for this and other Novell products, and to get updates, see www.novell.com/documentation.</member>
</simplelist>
<simplelist>
- <member>Evolution is a trademark of Novell, Inc.</member>
- <member>GroupWise is a registered trademark of Novell, Inc. in the United States and other countries.</member>
<member>Novell is a registered trademark of Novell, Inc. in the United States and other countries.</member>
- <member>SUSE is a registered trademark of SUSE AG, a Novell company.</member>
- <member>Ximian is a registered trademark of Novell, Inc. in the United States and other countries.</member>
+ <member>SUSE is a registered trademark of SUSE AG, a Novell business.</member>
</simplelist>
<simplelist>
<member>All third-party trademarks are the property of their respective owners.</member>
</simplelist>
</appendix>
-</book>
+</book> \ No newline at end of file
diff --git a/help/ChangeLog b/help/ChangeLog
index 5ffc9d2075..220dc5a4e7 100644
--- a/help/ChangeLog
+++ b/help/ChangeLog
@@ -1,3 +1,7 @@
+2005-03-06 JP Rosevear <jpr@novell.com>
+
+ * C/evolution.xml: Update documentation
+
2005-02-19 JP Rosevear <jpr@novell.com>
Fixes #71554
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/plugins/exchange-account-setup/ChangeLog b/plugins/exchange-account-setup/ChangeLog
index 1ae1722805..a4b3694bc2 100644
--- a/plugins/exchange-account-setup/ChangeLog
+++ b/plugins/exchange-account-setup/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-05 Sushma Rai <rsushma@novell.com>
+
+ * org-gnome-exchange-account-setup.eplug.in: Added the commit function
+ to save OOF data. This got missed in the previous commit. Also removed
+ duplicate accountWizard definition.
+
2005-02-28 JP Rosevear <jpr@novell.com>
* org-gnome-exchange-account-setup.eplug.in: add account wizard item
@@ -14,7 +20,6 @@
oof state and message to the file.
(destroy_oof_data): Frees OOFData.
-
2005-02-26 Sushma Rai <rsushma@novell.com>
* exchange-account-setup.c (org_gnome_exchange_check_options):
diff --git a/plugins/exchange-account-setup/org-gnome-exchange-account-setup.eplug.in b/plugins/exchange-account-setup/org-gnome-exchange-account-setup.eplug.in
index cd96e0b5c4..bdd783f7ea 100644
--- a/plugins/exchange-account-setup/org-gnome-exchange-account-setup.eplug.in
+++ b/plugins/exchange-account-setup/org-gnome-exchange-account-setup.eplug.in
@@ -13,7 +13,8 @@
<group
target="account"
id="org.gnome.evolution.mail.config.accountEditor"
- check="org_gnome_exchange_check_options">
+ check="org_gnome_exchange_check_options"
+ commit="org_gnome_exchange_commit">
<item type="page"
path="40.oof"
label="Exchange Settings"
@@ -44,14 +45,6 @@
factory="org_gnome_exchange_owa_url"/>
</group>
- <group
- target="account"
- id="org.gnome.evolution.mail.config.accountWizard"
- check="org_gnome_exchange_check_options">
- <item type="item_table"
- path="10.receive/10.config/20.owa"
- factory="org_gnome_exchange_owa_url"/>
- </group>
</hook>
</e-plugin>
diff --git a/po/ChangeLog b/po/ChangeLog
index ae286813f6..9e53e13c1b 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -7,22 +7,47 @@
* pt_BR.po: Updated Brazilian Portuguese translation.
-2005-03-04 Laszlo Dvornik <dvornik@gnome.hu>
+2005-03-05 Laszlo Dvornik <dvornik@gnome.hu>
* hu.po: Hungarian translation updated by Gabor Kelemen.
-2005-03-04 Ilkka Tuohela <hile@iki.fi>
+2005-03-05 Danilo Å egan <dsegan@gmx.net>
- * fi.po: Updated Finnish translation.
+ * sr.po, sr@Latn.po: Another update.
-2005-03-02 Laurent Dhima <laurenti@alblinux.net>
+2005-03-05 Danilo Å egan <dsegan@gmx.net>
+
+ * sr.po, sr@Latn.po: Updated Serbian translation by Igor
+ Nestorović.
+
+2005-03-05 Vincent van Adrighem <adrighem@gnome.org>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-03-04 Žygimantas BeruÄka <uid0@akl.lt>
+
+ * lt.po: Updated Lithuanian translation by Gintautas Miliauskas.
+
+2005-03-04 Laurent Dhima <laurenti@alblinux.net>
* sq.po: Updated Albanian translation.
-2005-03-01 Laurent Dhima <laurenti@alblinux.net>
+2005-03-04 Vincent van Adrighem <adrighem@gnome.org>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-03-02 Vincent van Adrighem <adrighem@gnome.org>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-03-02 Laurent Dhima <laurenti@alblinux.net>
* sq.po: Updated Albanian translation.
+2005-03-02 Takeshi AIHANA <aihana@jcom.home.ne.jp>
+
+ * ja.po: Updated Japanese translation.
+
2005-02-28 Marco Ciampa <ciampix@libero.it>
* it.po: Updated italian translation
diff --git a/po/bg.po b/po/bg.po
index 224bc2c06b..e81530d504 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: evolution 2.0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-03-07 18:22+0200\n"
+"POT-Creation-Date: 2005-03-07 17:45+0200\n"
"PO-Revision-Date: 2005-03-07 17:46+0200\n"
"Last-Translator: Iassen Pramatarov <turin@fsa-bg.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -655,7 +655,7 @@ msgstr "Опълномощаване"
#: ../addressbook/gui/component/addressbook-config.c:914
#: ../addressbook/gui/component/ldap-config.glade.h:18
-#: ../mail/mail-dialogs.glade.h:8 ../smime/gui/smime-ui.glade.h:19
+#: ../mail/mail-dialogs.glade.h:12 ../smime/gui/smime-ui.glade.h:19
msgid "Details"
msgstr "ПодробноÑти"
@@ -753,12 +753,12 @@ msgstr "Избиране на контакти"
msgid "Accessing LDAP Server anonymously"
msgstr "ДоÑтъп до LDAP Ñървъра анонимно"
-#: ../addressbook/gui/component/addressbook.c:194
+#: ../addressbook/gui/component/addressbook.c:193
#: ../plugins/groupwise-account-setup/camel-gw-listener.c:478
msgid "Failed to authenticate.\n"
msgstr "ÐеуÑпешно удоÑтоверÑване на идентичноÑтта.\n"
-#: ../addressbook/gui/component/addressbook.c:201
+#: ../addressbook/gui/component/addressbook.c:200
#: ../plugins/groupwise-account-setup/camel-gw-listener.c:461
#, c-format
msgid "Enter password for %s (user %s)"
@@ -828,7 +828,7 @@ msgstr "Показване на панела \"Предварителен пре
#: ../calendar/gui/dialogs/new-task-list.glade.h:1
#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:1
#: ../composer/e-msg-composer-attachment.glade.h:1
-#: ../mail/mail-dialogs.glade.h:2 ../mail/message-tags.glade.h:1
+#: ../mail/mail-dialogs.glade.h:6 ../mail/message-tags.glade.h:1
#: ../plugins/shared-folder/properties.glade.h:1
#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:1
msgid "*"
@@ -1089,7 +1089,7 @@ msgstr "карти"
#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:12
#: ../calendar/gui/dialogs/alarm-dialog.glade.h:26
#: ../calendar/gui/dialogs/calendar-setup.glade.h:14
-#: ../filter/filter.glade.h:16 ../mail/em-account-editor.c:1882
+#: ../filter/filter.glade.h:16 ../mail/em-account-editor.c:1885
#: ../plugins/calendar-http/calendar-http.c:263
#: ../plugins/calendar-weather/calendar-weather.c:564
msgid "minutes"
@@ -4946,7 +4946,7 @@ msgstr "%.0fG"
#: ../calendar/gui/dialogs/cal-attachment-bar.c:298
#: ../calendar/gui/dialogs/cal-attachment-bar.c:922
-#: ../composer/e-msg-composer-attachment-bar.c:295 ../mail/em-utils.c:438
+#: ../composer/e-msg-composer-attachment-bar.c:295 ../mail/em-utils.c:436
msgid "attachment"
msgstr "прикрепено"
@@ -5816,8 +5816,8 @@ msgstr "_Ðачало:"
#: ../calendar/gui/dialogs/meeting-page.glade.h:5
#: ../calendar/gui/e-cal-model-tasks.c:652
#: ../calendar/gui/e-itip-control.c:1104 ../composer/e-msg-composer.c:2117
-#: ../filter/filter-rule.c:878 ../mail/em-account-editor.c:683
-#: ../mail/em-account-editor.c:1288 ../mail/em-account-prefs.c:437
+#: ../filter/filter-rule.c:878 ../mail/em-account-editor.c:685
+#: ../mail/em-account-editor.c:1291 ../mail/em-account-prefs.c:437
#: ../mail/em-folder-view.c:993
#: ../plugins/calendar-weather/calendar-weather.c:371
#: ../plugins/calendar-weather/calendar-weather.c:425
@@ -5957,32 +5957,32 @@ msgstr "Група ÑпиÑъци ÑÑŠÑ Ð·Ð°Ð´Ð°Ñ‡Ð¸"
msgid "Task List Name"
msgstr "Име на ÑпиÑък ÑÑŠÑ Ð·Ð°Ð´Ð°Ñ‡Ð¸"
-#: ../calendar/gui/dialogs/recur-comp.c:52
+#: ../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:56
+#: ../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:60
+#: ../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:88
+#: ../calendar/gui/dialogs/recur-comp.c:87
msgid "This Instance Only"
msgstr "Само в този Ñлучай"
-#: ../calendar/gui/dialogs/recur-comp.c:92
+#: ../calendar/gui/dialogs/recur-comp.c:91
msgid "This and Prior Instances"
msgstr "Ð’ този и предишните Ñлучаи"
-#: ../calendar/gui/dialogs/recur-comp.c:98
+#: ../calendar/gui/dialogs/recur-comp.c:97
msgid "This and Future Instances"
msgstr "Ð’ този и бъдещите Ñлучаи"
-#: ../calendar/gui/dialogs/recur-comp.c:103
+#: ../calendar/gui/dialogs/recur-comp.c:102
msgid "All Instances"
msgstr "Ð’Ñички Ñлучаи"
@@ -6114,7 +6114,7 @@ msgstr "Завършено"
#: ../calendar/gui/dialogs/task-details-page.glade.h:5
#: ../calendar/gui/e-cal-component-preview.c:248
-#: ../calendar/gui/e-calendar-table.c:382 ../mail/message-list.c:1007
+#: ../calendar/gui/e-calendar-table.c:382 ../mail/message-list.c:1006
msgid "High"
msgstr "ВиÑоко"
@@ -6129,14 +6129,14 @@ msgstr "Ð’ прогреÑ"
#: ../calendar/gui/dialogs/task-details-page.glade.h:7
#: ../calendar/gui/e-cal-component-preview.c:252
-#: ../calendar/gui/e-calendar-table.c:384 ../mail/message-list.c:1005
+#: ../calendar/gui/e-calendar-table.c:384 ../mail/message-list.c:1004
msgid "Low"
msgstr "ÐиÑко"
#: ../calendar/gui/dialogs/task-details-page.glade.h:8
#: ../calendar/gui/e-cal-component-preview.c:250
#: ../calendar/gui/e-cal-model.c:899 ../calendar/gui/e-calendar-table.c:383
-#: ../mail/message-list.c:1006
+#: ../mail/message-list.c:1005
msgid "Normal"
msgstr "Ðормално"
@@ -6388,7 +6388,7 @@ msgstr "Ðачална дата"
#: ../calendar/gui/e-cal-list-view.etspec.h:5
#: ../calendar/gui/e-calendar-table.etspec.h:11
-#: ../mail/mail-dialogs.glade.h:17
+#: ../mail/mail-dialogs.glade.h:21
msgid "Summary"
msgstr "Резюме"
@@ -6448,7 +6448,7 @@ msgstr "Ðе"
#: ../calendar/gui/e-meeting-list-view.c:139
#: ../calendar/gui/e-meeting-list-view.c:153
#: ../calendar/gui/e-meeting-store.c:124 ../calendar/gui/e-meeting-store.c:159
-#: ../calendar/gui/e-meeting-store.c:224 ../mail/em-utils.c:1175
+#: ../calendar/gui/e-meeting-store.c:224 ../mail/em-utils.c:1173
#: ../plugins/itip-formatter/itip-formatter.c:251
#: ../plugins/itip-formatter/itip-formatter.c:1398
#: ../plugins/plugin-manager/plugin-manager.c:72
@@ -9475,15 +9475,15 @@ msgstr "Ð¢Ð¸Ñ…Ð¸Ñ Ð¾ÐºÐµÐ°Ð½/УолиÑ"
msgid "Pacific/Yap"
msgstr "Ð¢Ð¸Ñ…Ð¸Ñ Ð¾ÐºÐµÐ°Ð½/Яп"
-#: ../composer/e-msg-composer-hdrs.c:520
+#: ../composer/e-msg-composer-hdrs.c:519
msgid "Posting destination"
msgstr "Получател на пощата"
-#: ../composer/e-msg-composer-hdrs.c:521
+#: ../composer/e-msg-composer-hdrs.c:520
msgid "Choose folders to post the message to."
msgstr "Избор на папки, в които да бъде копирано пиÑмото."
-#: ../composer/e-msg-composer-hdrs.c:555
+#: ../composer/e-msg-composer-hdrs.c:554
msgid "Click here for the address book"
msgstr "ÐатиÑнете тук за адреÑника"
@@ -9494,45 +9494,45 @@ msgstr "ÐатиÑнете тук за адреÑника"
#. * because that causes from_changed to be called, which
#. * expects the reply_to fields to be initialized.
#.
-#: ../composer/e-msg-composer-hdrs.c:585
+#: ../composer/e-msg-composer-hdrs.c:584
msgid "_Reply-To:"
msgstr "_Отговор до:"
#.
#. * From
#.
-#: ../composer/e-msg-composer-hdrs.c:592
+#: ../composer/e-msg-composer-hdrs.c:591
msgid "Fr_om:"
msgstr "_От:"
#.
#. * Subject
#.
-#: ../composer/e-msg-composer-hdrs.c:599
+#: ../composer/e-msg-composer-hdrs.c:598
msgid "S_ubject:"
msgstr "_Тема:"
-#: ../composer/e-msg-composer-hdrs.c:609
+#: ../composer/e-msg-composer-hdrs.c:608
msgid "_To:"
msgstr "_До:"
-#: ../composer/e-msg-composer-hdrs.c:610
+#: ../composer/e-msg-composer-hdrs.c:609
msgid "Enter the recipients of the message"
msgstr "Въведете получател на Ñъобщението"
-#: ../composer/e-msg-composer-hdrs.c:613
+#: ../composer/e-msg-composer-hdrs.c:612
msgid "_Cc:"
msgstr "_Копие до:"
-#: ../composer/e-msg-composer-hdrs.c:614
+#: ../composer/e-msg-composer-hdrs.c:613
msgid "Enter the addresses that will receive a carbon copy of the message"
msgstr "Въведете адреÑа на Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° карбон копие за това Ñъобщение"
-#: ../composer/e-msg-composer-hdrs.c:617
+#: ../composer/e-msg-composer-hdrs.c:616
msgid "_Bcc:"
msgstr "_Скрито копие до:"
-#: ../composer/e-msg-composer-hdrs.c:618
+#: ../composer/e-msg-composer-hdrs.c:617
msgid ""
"Enter the addresses that will receive a carbon copy of the message without "
"appearing in the recipient list of the message."
@@ -9543,16 +9543,16 @@ msgstr ""
#.
#. * Post-To
#.
-#: ../composer/e-msg-composer-hdrs.c:625
+#: ../composer/e-msg-composer-hdrs.c:624
msgid "_Post To:"
msgstr "Копиране в _папка:"
-#: ../composer/e-msg-composer-hdrs.c:630
+#: ../composer/e-msg-composer-hdrs.c:629
msgid "Click here to select folders to post to"
msgstr ""
"ÐатиÑнете тук, за да въведете папки, в които да бъде копирано Ñъобщението"
-#: ../composer/e-msg-composer-hdrs.c:636
+#: ../composer/e-msg-composer-hdrs.c:635
msgid "Post To:"
msgstr "Копиране в папка:"
@@ -9593,7 +9593,7 @@ msgid "Open File"
msgstr "ОтварÑне на файл"
#: ../composer/e-msg-composer.c:2001 ../mail/em-account-editor.c:588
-#: ../mail/em-account-editor.c:633 ../mail/em-account-editor.c:698
+#: ../mail/em-account-editor.c:633 ../mail/em-account-editor.c:700
msgid "Autogenerated"
msgstr "Ðвтоматично генерирано"
@@ -9606,7 +9606,7 @@ msgstr "_ПодпиÑ:"
msgid "Compose a message"
msgstr "ПиÑане на пиÑмо"
-#: ../composer/e-msg-composer.c:4554
+#: ../composer/e-msg-composer.c:4542
msgid ""
"<b>(The composer contains a non-text message body, which cannot be edited.)"
"<b>"
@@ -10363,44 +10363,44 @@ msgstr ""
msgid "Select Folder"
msgstr "Избор на папка"
-#: ../mail/em-account-editor.c:1661 ../mail/mail-config.glade.h:89
+#: ../mail/em-account-editor.c:1664 ../mail/mail-config.glade.h:89
msgid "Identity"
msgstr "Потребител"
-#: ../mail/em-account-editor.c:1697 ../mail/mail-config.glade.h:114
+#: ../mail/em-account-editor.c:1700 ../mail/mail-config.glade.h:114
msgid "Receiving Email"
msgstr "Получаване на пощата"
-#: ../mail/em-account-editor.c:1874
+#: ../mail/em-account-editor.c:1877
msgid "Automatically check for _new mail every"
msgstr "_Ðвтоматична проверка за нова поща вÑеки"
-#: ../mail/em-account-editor.c:2042 ../mail/mail-config.glade.h:124
+#: ../mail/em-account-editor.c:2045 ../mail/mail-config.glade.h:124
msgid "Sending Email"
msgstr "Изпращане на пиÑмо"
-#: ../mail/em-account-editor.c:2086 ../mail/mail-config.glade.h:67
+#: ../mail/em-account-editor.c:2089 ../mail/mail-config.glade.h:67
msgid "Defaults"
msgstr "Стандартни"
-#: ../mail/em-account-editor.c:2145 ../mail/mail-config.glade.h:119
+#: ../mail/em-account-editor.c:2148 ../mail/mail-config.glade.h:119
msgid "Security"
msgstr "СигурноÑÑ‚"
#. Most sections for this is auto-generated fromt the camel config
-#: ../mail/em-account-editor.c:2182 ../mail/em-account-editor.c:2256
+#: ../mail/em-account-editor.c:2185 ../mail/em-account-editor.c:2260
msgid "Receiving Options"
msgstr "Получаване на наÑтройки"
-#: ../mail/em-account-editor.c:2183 ../mail/em-account-editor.c:2257
+#: ../mail/em-account-editor.c:2186 ../mail/em-account-editor.c:2261
msgid "Checking for New Mail"
msgstr "Проверка за нова поща"
-#: ../mail/em-account-editor.c:2581 ../mail/mail-config.glade.h:33
+#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:33
msgid "Account Editor"
msgstr "Редактор на абонаменти"
-#: ../mail/em-account-editor.c:2581 ../mail/mail-config.glade.h:79
+#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:79
msgid "Evolution Account Assistant"
msgstr "Помощник на Evolution за абонаментите"
@@ -10434,18 +10434,18 @@ msgstr "ДобавÑне на Ñкрипт за подпиÑ"
msgid "Signature(s)"
msgstr "ПодпиÑ(и)"
-#: ../mail/em-composer-utils.c:849
+#: ../mail/em-composer-utils.c:911
msgid "-------- Forwarded Message --------"
msgstr "-------- Препратено Ñъобщение --------"
-#: ../mail/em-composer-utils.c:1459
+#: ../mail/em-composer-utils.c:1521
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:1506
+#: ../mail/em-composer-utils.c:1568
msgid ""
"On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} "
"${TimeZone}, ${Sender} wrote:"
@@ -10700,7 +10700,7 @@ msgstr "започва Ñ"
msgid "Stop Processing"
msgstr "Спиране на обработването"
-#: ../mail/em-filter-i18n.h:65 ../mail/em-format-html.c:1532
+#: ../mail/em-filter-i18n.h:65 ../mail/em-format-html.c:1533
#: ../mail/em-format-quote.c:306 ../mail/em-format.c:853
#: ../mail/em-mailer-prefs.c:88 ../mail/message-list.etspec.h:13
#: ../mail/message-tag-followup.c:330
@@ -10828,7 +10828,7 @@ msgstr "_Копиране в папка"
msgid "_Move to Folder"
msgstr "ПремеÑтване в _папка"
-#: ../mail/em-folder-tree.c:1750 ../mail/mail-ops.c:1051
+#: ../mail/em-folder-tree.c:1750 ../mail/mail-ops.c:1026
#, c-format
msgid "Scanning folders in \"%s\""
msgstr "Сканиране на папки в \"%s\""
@@ -11240,28 +11240,28 @@ msgid "Bcc"
msgstr "Скрито копие до"
#. pseudo-header
-#: ../mail/em-format-html.c:1536 ../mail/em-format-quote.c:315
+#: ../mail/em-format-html.c:1537 ../mail/em-format-quote.c:315
#: ../mail/em-mailer-prefs.c:986
msgid "Mailer"
msgstr "ПощенÑка програма"
#. translators: strftime format for local time equivalent in Date header display, with day
-#: ../mail/em-format-html.c:1563
+#: ../mail/em-format-html.c:1564
msgid "<I> (%a, %R %Z)</I>"
msgstr "<I> (%a, %R %Z)</I>"
#. translators: strftime format for local time equivalent in Date header display, without day
-#: ../mail/em-format-html.c:1566
+#: ../mail/em-format-html.c:1567
msgid "<I> (%R %Z)</I>"
msgstr "<I> (%R %Z)</I>"
-#: ../mail/em-format-html.c:1576 ../mail/em-format-quote.c:322
+#: ../mail/em-format-html.c:1577 ../mail/em-format-quote.c:322
#: ../mail/em-format.c:854 ../mail/em-mailer-prefs.c:89
#: ../mail/message-list.etspec.h:2
msgid "Date"
msgstr "Дата"
-#: ../mail/em-format-html.c:1599 ../mail/em-format.c:855
+#: ../mail/em-format-html.c:1600 ../mail/em-format.c:855
#: ../mail/em-mailer-prefs.c:90
msgid "Newsgroups"
msgstr "ÐовинарÑки групи"
@@ -11442,20 +11442,20 @@ msgstr "Без да Ñе показва това Ñъобщение отново
msgid "Filters"
msgstr "Филтри"
-#: ../mail/em-utils.c:436
+#: ../mail/em-utils.c:434
msgid "message"
msgstr "Ñъобщение"
-#: ../mail/em-utils.c:545
+#: ../mail/em-utils.c:543
msgid "Save Message..."
msgstr "Запазване на Ñъобщение..."
-#: ../mail/em-utils.c:594
+#: ../mail/em-utils.c:592
msgid "Add address"
msgstr "ДобавÑне на адреÑ"
#. Drop filename for messages from a mailbox
-#: ../mail/em-utils.c:1073
+#: ../mail/em-utils.c:1071
#, c-format
msgid "Messages from %s"
msgstr "Ð¡ÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ %s"
@@ -12125,27 +12125,27 @@ msgstr ""
msgid "Pine"
msgstr "Pine"
-#: ../mail/mail-autofilter.c:75
+#: ../mail/mail-autofilter.c:74
#, c-format
msgid "Mail to %s"
msgstr "Поща до %s"
-#: ../mail/mail-autofilter.c:239 ../mail/mail-autofilter.c:278
+#: ../mail/mail-autofilter.c:238 ../mail/mail-autofilter.c:277
#, c-format
msgid "Mail from %s"
msgstr "Поща от %s"
-#: ../mail/mail-autofilter.c:262
+#: ../mail/mail-autofilter.c:261
#, c-format
msgid "Subject is %s"
msgstr "Темата е %s"
-#: ../mail/mail-autofilter.c:297
+#: ../mail/mail-autofilter.c:296
#, c-format
msgid "%s mailing list"
msgstr "%s пощенÑки ÑпиÑък"
-#: ../mail/mail-autofilter.c:366
+#: ../mail/mail-autofilter.c:365
msgid "Add Filter Rule"
msgstr "ДобавÑне на правило за филтър"
@@ -12226,7 +12226,7 @@ msgstr "Създаване на нова пощенÑка папка"
msgid "Failed upgrading Mail settings or folders."
msgstr "ÐеуÑпех при обновÑването на пощенÑките наÑтройки или папки."
-#: ../mail/mail-config.glade.h:1 ../mail/mail-dialogs.glade.h:1
+#: ../mail/mail-config.glade.h:1 ../mail/mail-dialogs.glade.h:5
msgid " "
msgstr " "
@@ -12835,62 +12835,72 @@ msgstr "цвÑÑ‚"
msgid "description"
msgstr "опиÑание"
-#: ../mail/mail-dialogs.glade.h:3
+#: ../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 ""
+"\n"
+" МолÑ, прочетете внимателно показаното лицензно Ñпоразумение\n"
+"по-долу и Ñложете тикче, ако приемате.\n"
+
+#: ../mail/mail-dialogs.glade.h:7
msgid "<b>vFolder Sources</b>"
msgstr "<b>vFolder източници</b>"
-#: ../mail/mail-dialogs.glade.h:4
+#: ../mail/mail-dialogs.glade.h:8
msgid "<span weight=\"bold\">Digital Signature</span>"
msgstr "<span weight=\"bold\">Цифров подпиÑ</span>"
-#: ../mail/mail-dialogs.glade.h:5
+#: ../mail/mail-dialogs.glade.h:9
msgid "<span weight=\"bold\">Encryption</span>"
msgstr "<span weight=\"bold\">Криптиране</span>"
-#: ../mail/mail-dialogs.glade.h:6
+#: ../mail/mail-dialogs.glade.h:10
msgid "Case _Sensitive"
msgstr "_Ð¡ÑŠÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ на малки/големи букви"
-#: ../mail/mail-dialogs.glade.h:7 ../mail/message-tags.glade.h:2
+#: ../mail/mail-dialogs.glade.h:11 ../mail/message-tags.glade.h:2
msgid "Co_mpleted"
msgstr "За_вършено"
-#: ../mail/mail-dialogs.glade.h:9
+#: ../mail/mail-dialogs.glade.h:13
msgid "F_ind:"
msgstr "_ТърÑене:"
-#: ../mail/mail-dialogs.glade.h:10
+#: ../mail/mail-dialogs.glade.h:14
msgid "Find in Message"
msgstr "ТърÑене в Ñъобщението"
-#: ../mail/mail-dialogs.glade.h:11 ../mail/message-tag-followup.c:295
+#: ../mail/mail-dialogs.glade.h:15 ../mail/message-tag-followup.c:295
#: ../mail/message-tags.glade.h:3
msgid "Flag to Follow Up"
msgstr ""
"ОтбелÑзване като Ñледващо\n"
"Ñъобщение от разговор"
-#: ../mail/mail-dialogs.glade.h:12
+#: ../mail/mail-dialogs.glade.h:16
msgid "Folder Subscriptions"
msgstr "Ðбонаменти за папки"
-#: ../mail/mail-dialogs.glade.h:13
+#: ../mail/mail-dialogs.glade.h:17
msgid "License Agreement"
msgstr "Лицензно Ñпоразумение"
-#: ../mail/mail-dialogs.glade.h:14
+#: ../mail/mail-dialogs.glade.h:18
msgid "None Selected"
msgstr "ÐÑма избрани"
-#: ../mail/mail-dialogs.glade.h:15
+#: ../mail/mail-dialogs.glade.h:19
msgid "S_erver:"
msgstr "С_ървър"
-#: ../mail/mail-dialogs.glade.h:16
+#: ../mail/mail-dialogs.glade.h:20
msgid "Security Information"
msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° ÑигурноÑтта"
-#: ../mail/mail-dialogs.glade.h:18 ../mail/message-tags.glade.h:4
+#: ../mail/mail-dialogs.glade.h:22 ../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."
@@ -12898,43 +12908,43 @@ msgstr ""
"ПиÑмата, които Ñте избрали като Ñледващи в разговор, Ñа изброени долу.\n"
"ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ подходÑщото дейÑтвие от менюто \"ОтбелÑзване\"."
-#: ../mail/mail-dialogs.glade.h:20
+#: ../mail/mail-dialogs.glade.h:24
msgid "_Accept License"
msgstr "_Приемане на лиценз"
-#: ../mail/mail-dialogs.glade.h:21 ../mail/message-tags.glade.h:6
+#: ../mail/mail-dialogs.glade.h:25 ../mail/message-tags.glade.h:6
msgid "_Due By:"
msgstr "Краен Ñрок:"
-#: ../mail/mail-dialogs.glade.h:22 ../mail/message-tags.glade.h:7
+#: ../mail/mail-dialogs.glade.h:26 ../mail/message-tags.glade.h:7
msgid "_Flag:"
msgstr "ОтбелÑзване:"
-#: ../mail/mail-dialogs.glade.h:23
+#: ../mail/mail-dialogs.glade.h:27
msgid "_Subscribe"
msgstr "_Ðбониране"
-#: ../mail/mail-dialogs.glade.h:24
+#: ../mail/mail-dialogs.glade.h:28
msgid "_Tick this to accept the license agreement"
msgstr "_Сложете отметка тук, за да Ñе ÑъглаÑите Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð½Ð¾Ñ‚Ð¾ Ñпоразумение"
-#: ../mail/mail-dialogs.glade.h:25
+#: ../mail/mail-dialogs.glade.h:29
msgid "_Unsubscribe"
msgstr "О_тпиÑване"
-#: ../mail/mail-dialogs.glade.h:26
+#: ../mail/mail-dialogs.glade.h:30
msgid "specific folders only"
msgstr "задаване Ñамо на папки"
-#: ../mail/mail-dialogs.glade.h:27
+#: ../mail/mail-dialogs.glade.h:31
msgid "with all active remote folders"
msgstr "Ñ Ð²Ñички активни отдалечени папки"
-#: ../mail/mail-dialogs.glade.h:28
+#: ../mail/mail-dialogs.glade.h:32
msgid "with all local and active remote folders"
msgstr "Ñ Ð²Ñички локални и активни отдалечени папки"
-#: ../mail/mail-dialogs.glade.h:29
+#: ../mail/mail-dialogs.glade.h:33
msgid "with all local folders"
msgstr "Ñ Ð²Ñички локални папки"
@@ -13547,7 +13557,7 @@ msgstr "Филтър върху папка"
msgid "Fetching Mail"
msgstr "Получаване на пощата"
-#: ../mail/mail-ops.c:556 ../mail/mail-ops.c:598
+#: ../mail/mail-ops.c:542 ../mail/mail-ops.c:585
#, c-format
msgid ""
"Failed to append to %s: %s\n"
@@ -13557,119 +13567,119 @@ msgstr ""
"ВмеÑто това пиÑмото е добавено към локалната папка \"Изпратени\"."
#. sending mail, filtering failed
-#: ../mail/mail-ops.c:577
+#: ../mail/mail-ops.c:564
#, c-format
msgid "Failed to apply outgoing filters: %s"
msgstr "ÐеуÑпех при прилагането на филтрите за изходÑщата поща: %s"
-#: ../mail/mail-ops.c:615
+#: ../mail/mail-ops.c:602
#, c-format
msgid "Failed to append to local `Sent' folder: %s"
msgstr "Грешка при добавÑнето към локалната папка \"Изпратени\": %s"
-#: ../mail/mail-ops.c:727
+#: ../mail/mail-ops.c:702
#, c-format
msgid "Sending message %d of %d"
msgstr "Изпращане на пиÑмо %d от %d"
-#: ../mail/mail-ops.c:752
+#: ../mail/mail-ops.c:727
#, c-format
msgid "Failed to send %d of %d messages"
msgstr "ÐеуÑпех при изпращането на %d от %d пиÑма"
-#: ../mail/mail-ops.c:754 ../mail/mail-send-recv.c:613
+#: ../mail/mail-ops.c:729 ../mail/mail-send-recv.c:613
msgid "Cancelled."
msgstr "Прекратено."
-#: ../mail/mail-ops.c:756
+#: ../mail/mail-ops.c:731
msgid "Complete."
msgstr "Приключено."
-#: ../mail/mail-ops.c:853
+#: ../mail/mail-ops.c:828
msgid "Saving message to folder"
msgstr "Запазване на пиÑмото в папка"
-#: ../mail/mail-ops.c:938
+#: ../mail/mail-ops.c:913
#, c-format
msgid "Moving messages to %s"
msgstr "ПремеÑтване на пиÑма в %s"
-#: ../mail/mail-ops.c:938
+#: ../mail/mail-ops.c:913
#, c-format
msgid "Copying messages to %s"
msgstr "Копиране на пиÑма в %s"
-#: ../mail/mail-ops.c:1164
+#: ../mail/mail-ops.c:1139
msgid "Forwarded messages"
msgstr "Препратени пиÑма"
-#: ../mail/mail-ops.c:1207
+#: ../mail/mail-ops.c:1182
#, c-format
msgid "Opening folder %s"
msgstr "ОтварÑне на папка %s"
-#: ../mail/mail-ops.c:1279
+#: ../mail/mail-ops.c:1254
#, c-format
msgid "Opening store %s"
msgstr "ОтварÑне на хранилище %s"
-#: ../mail/mail-ops.c:1357
+#: ../mail/mail-ops.c:1332
#, c-format
msgid "Removing folder %s"
msgstr "Изтриване на папка %s"
-#: ../mail/mail-ops.c:1451
+#: ../mail/mail-ops.c:1426
#, c-format
msgid "Storing folder '%s'"
msgstr "Запазване на папка %s"
-#: ../mail/mail-ops.c:1516
+#: ../mail/mail-ops.c:1491
#, c-format
msgid "Expunging and storing account '%s'"
msgstr "Зачеркване и ÑъхранÑване на абонамент \"%s\""
-#: ../mail/mail-ops.c:1517
+#: ../mail/mail-ops.c:1492
#, c-format
msgid "Storing account '%s'"
msgstr "Запазване на абонамент \"%s\""
-#: ../mail/mail-ops.c:1572
+#: ../mail/mail-ops.c:1547
msgid "Refreshing folder"
msgstr "ОÑвежаване на папка"
-#: ../mail/mail-ops.c:1608 ../mail/mail-ops.c:1659
+#: ../mail/mail-ops.c:1583 ../mail/mail-ops.c:1634
msgid "Expunging folder"
msgstr "Изтриване на папка"
-#: ../mail/mail-ops.c:1656
+#: ../mail/mail-ops.c:1631
#, c-format
msgid "Emptying trash in '%s'"
msgstr "Изпразване на кошчето в \"%s\""
-#: ../mail/mail-ops.c:1657
+#: ../mail/mail-ops.c:1632
msgid "Local Folders"
msgstr "Локални папки"
-#: ../mail/mail-ops.c:1740
+#: ../mail/mail-ops.c:1715
#, c-format
msgid "Retrieving message %s"
msgstr "Получаване на пиÑмо %s"
-#: ../mail/mail-ops.c:1812
+#: ../mail/mail-ops.c:1787
#, c-format
msgid "Retrieving %d message"
msgid_plural "Retrieving %d messages"
msgstr[0] "Получаване на %d пиÑмо"
msgstr[1] "Получаване на %d пиÑма"
-#: ../mail/mail-ops.c:1898
+#: ../mail/mail-ops.c:1873
#, c-format
msgid "Saving %d message"
msgid_plural "Saving %d messsages"
msgstr[0] "Запазване на %d пиÑмо"
msgstr[1] "Запазване на %d пиÑма"
-#: ../mail/mail-ops.c:1948
+#: ../mail/mail-ops.c:1923
#, c-format
msgid ""
"Unable to create output file: %s\n"
@@ -13678,7 +13688,7 @@ msgstr ""
"Ðе може да Ñе Ñъздаде изходен файл: %s\n"
" %s"
-#: ../mail/mail-ops.c:1976
+#: ../mail/mail-ops.c:1951
#, c-format
msgid ""
"Error saving messages to: %s:\n"
@@ -13687,11 +13697,11 @@ msgstr ""
"Грешка при запазване на пиÑма в: %s:\n"
" %s"
-#: ../mail/mail-ops.c:2047
+#: ../mail/mail-ops.c:2022
msgid "Saving attachment"
msgstr "Запазване на прикачен файл"
-#: ../mail/mail-ops.c:2059
+#: ../mail/mail-ops.c:2034
#, c-format
msgid ""
"Cannot create output file: %s:\n"
@@ -13700,22 +13710,22 @@ msgstr ""
"Ðе може да Ñе Ñъздаде изходен файл: %s:\n"
" %s"
-#: ../mail/mail-ops.c:2069
+#: ../mail/mail-ops.c:2044
#, c-format
msgid "Could not write data: %s"
msgstr "Ðе може да Ñе запишат данните: %s"
-#: ../mail/mail-ops.c:2219
+#: ../mail/mail-ops.c:2194
#, c-format
msgid "Disconnecting from %s"
msgstr "Разкачване от %s"
-#: ../mail/mail-ops.c:2219
+#: ../mail/mail-ops.c:2194
#, c-format
msgid "Reconnecting to %s"
msgstr "Отново връзка Ñ %s"
-#: ../mail/mail-ops.c:2335
+#: ../mail/mail-ops.c:2310
msgid "Checking Service"
msgstr "ПроверÑване на обÑлужване"
@@ -13790,16 +13800,16 @@ msgstr ""
msgid "Trying to movemail a non-mbox source `%s'"
msgstr ""
-#: ../mail/mail-tools.c:241
+#: ../mail/mail-tools.c:277
#, c-format
msgid "Forwarded message - %s"
msgstr "Препратено пиÑмо - %s"
-#: ../mail/mail-tools.c:243
+#: ../mail/mail-tools.c:279
msgid "Forwarded message"
msgstr "Препратени пиÑма"
-#: ../mail/mail-tools.c:283
+#: ../mail/mail-tools.c:320
#, c-format
msgid "Invalid folder: `%s'"
msgstr "Ðевалидна папка: \"%s\""
@@ -13827,65 +13837,65 @@ msgstr "Редактиране на VFolder"
msgid "New vFolder"
msgstr "Ðов VFolder"
-#: ../mail/message-list.c:995
+#: ../mail/message-list.c:994
msgid "Unseen"
msgstr "Ðепрегледано"
-#: ../mail/message-list.c:996
+#: ../mail/message-list.c:995
msgid "Seen"
msgstr "Прегледано"
-#: ../mail/message-list.c:997
+#: ../mail/message-list.c:996
msgid "Answered"
msgstr "Отговорено"
-#: ../mail/message-list.c:998
+#: ../mail/message-list.c:997
msgid "Multiple Unseen Messages"
msgstr "МножеÑтво невидÑни пиÑма"
-#: ../mail/message-list.c:999
+#: ../mail/message-list.c:998
msgid "Multiple Messages"
msgstr "МножеÑтво пиÑма"
-#: ../mail/message-list.c:1003
+#: ../mail/message-list.c:1002
msgid "Lowest"
msgstr "Ðай-ниÑка"
-#: ../mail/message-list.c:1004
+#: ../mail/message-list.c:1003
msgid "Lower"
msgstr "ÐиÑка"
-#: ../mail/message-list.c:1008
+#: ../mail/message-list.c:1007
msgid "Higher"
msgstr "ВиÑока"
-#: ../mail/message-list.c:1009
+#: ../mail/message-list.c:1008
msgid "Highest"
msgstr "Ðай-виÑока"
-#: ../mail/message-list.c:1337
+#: ../mail/message-list.c:1336
msgid "?"
msgstr "?"
#. strftime format of a time,
#. in 12-hour format, without seconds.
-#: ../mail/message-list.c:1344 ../plugins/itip-formatter/itip-view.c:189
+#: ../mail/message-list.c:1343 ../plugins/itip-formatter/itip-view.c:189
msgid "Today %l:%M %p"
msgstr "Ð”Ð½ÐµÑ %l:%M %p"
-#: ../mail/message-list.c:1353
+#: ../mail/message-list.c:1352
msgid "Yesterday %l:%M %p"
msgstr "Вчера %l:%M %p"
-#: ../mail/message-list.c:1365
+#: ../mail/message-list.c:1364
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
-#: ../mail/message-list.c:1373
+#: ../mail/message-list.c:1372
msgid "%b %d %l:%M %p"
msgstr "%b %d %l:%M %p"
-#: ../mail/message-list.c:1375
+#: ../mail/message-list.c:1374
msgid "%b %d %Y"
msgstr "%b %d %Y"
@@ -17848,39 +17858,39 @@ msgstr "Синхронизиране на категории:"
#. To translators: This is the accessibility name of
#. the search bar's text entry widget
-#: ../widgets/misc/e-search-bar.c:345
+#: ../widgets/misc/e-search-bar.c:343
msgid "Search Text Entry"
msgstr "Дума за Ñ‚ÑŠÑ€Ñене"
-#: ../widgets/misc/e-search-bar.c:549
+#: ../widgets/misc/e-search-bar.c:547
msgid "_Search"
msgstr "_ТърÑене"
-#: ../widgets/misc/e-search-bar.c:555
+#: ../widgets/misc/e-search-bar.c:553
msgid "_Find Now"
msgstr "_Ðамиране Ñега"
-#: ../widgets/misc/e-search-bar.c:556 ../widgets/misc/e-search-bar.c:943
+#: ../widgets/misc/e-search-bar.c:554 ../widgets/misc/e-search-bar.c:941
msgid "_Clear"
msgstr "_ИзчиÑтване"
-#: ../widgets/misc/e-search-bar.c:647
+#: ../widgets/misc/e-search-bar.c:645
msgid "Search Type"
msgstr "Тип Ñ‚ÑŠÑ€Ñене"
-#: ../widgets/misc/e-search-bar.c:851
+#: ../widgets/misc/e-search-bar.c:849
msgid "Item ID"
msgstr "ID на елемента"
-#: ../widgets/misc/e-search-bar.c:858
+#: ../widgets/misc/e-search-bar.c:856
msgid "Subitem ID"
msgstr ""
-#: ../widgets/misc/e-search-bar.c:865
+#: ../widgets/misc/e-search-bar.c:863
msgid "Text"
msgstr "ТекÑÑ‚"
-#: ../widgets/misc/e-search-bar.c:945
+#: ../widgets/misc/e-search-bar.c:943
msgid "Find _Now"
msgstr "ТърÑене Ñега"
@@ -18050,15 +18060,6 @@ msgstr "%s (%d%% приключено)"
msgid "click here to go to url"
msgstr "натиÑнете тук, за да отидете до url"
-#~ msgid ""
-#~ "\n"
-#~ " Please read carefully the license agreement displayed\n"
-#~ " below and tick the check box for accepting it\n"
-#~ msgstr ""
-#~ "\n"
-#~ " МолÑ, прочетете внимателно показаното лицензно Ñпоразумение\n"
-#~ "по-долу и Ñложете тикче, ако приемате.\n"
-
#~ msgid "_Remember this password"
#~ msgstr "_ЗапомнÑне на тази парола"
diff --git a/po/hu.po b/po/hu.po
index d28ba8096c..88cf48e9e6 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: evolution\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-03-01 14:11+0100\n"
-"PO-Revision-Date: 2005-03-04 14:07+0100\n"
+"POT-Creation-Date: 2005-03-05 04:16+0100\n"
+"PO-Revision-Date: 2005-03-05 10:47+0100\n"
"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
"Language-Team: Hungarian <gnome@gnome.hu>\n"
"MIME-Version: 1.0\n"
@@ -44,7 +44,7 @@ msgstr[0] "a jelenlegi címjegyzék-mappa %d kártyát tartalmaz"
msgstr[1] "a jelenlegi címjegyzék-mappa %d kártyát tartalmaz"
#: a11y/addressbook/ea-minicard.c:31
-#: calendar/gui/alarm-notify/alarm-queue.c:863
+#: calendar/gui/alarm-notify/alarm-queue.c:876
#: ui/evolution-message-composer.xml.h:10
msgid "Open"
msgstr "Megnyitás"
@@ -4257,28 +4257,28 @@ msgstr "hely"
msgid "start-time"
msgstr "kezdés időpontja"
-#: calendar/gui/alarm-notify/alarm-queue.c:864
+#: calendar/gui/alarm-notify/alarm-queue.c:877
msgid "Dismiss"
msgstr "Eltüntetés"
-#: calendar/gui/alarm-notify/alarm-queue.c:865
+#: calendar/gui/alarm-notify/alarm-queue.c:878
msgid "Dismiss All"
msgstr "Mindet eltünteti"
-#: calendar/gui/alarm-notify/alarm-queue.c:947
+#: calendar/gui/alarm-notify/alarm-queue.c:960
msgid "No summary available."
msgstr "Nem áll rendelkezésre összegzés."
-#: calendar/gui/alarm-notify/alarm-queue.c:956
-#: calendar/gui/alarm-notify/alarm-queue.c:958
+#: calendar/gui/alarm-notify/alarm-queue.c:969
+#: calendar/gui/alarm-notify/alarm-queue.c:971
msgid "No description available."
msgstr "Nem áll rendelkezésre leírás."
-#: calendar/gui/alarm-notify/alarm-queue.c:966
+#: calendar/gui/alarm-notify/alarm-queue.c:979
msgid "No location information available."
msgstr "Nem áll rendelkezésre hely információ."
-#: calendar/gui/alarm-notify/alarm-queue.c:982
+#: calendar/gui/alarm-notify/alarm-queue.c:995
#, c-format
msgid ""
"Alarm on %s\n"
@@ -4291,12 +4291,12 @@ msgstr ""
"Kezdődik: %s\n"
"Befejeződik: %s"
-#: calendar/gui/alarm-notify/alarm-queue.c:1084
-#: calendar/gui/alarm-notify/alarm-queue.c:1108
+#: calendar/gui/alarm-notify/alarm-queue.c:1097
+#: calendar/gui/alarm-notify/alarm-queue.c:1121
msgid "Warning"
msgstr "Figyelmeztetés"
-#: calendar/gui/alarm-notify/alarm-queue.c:1088
+#: calendar/gui/alarm-notify/alarm-queue.c:1101
msgid ""
"Evolution does not support calendar reminders with\n"
"email notifications yet, but this reminder was\n"
@@ -4308,7 +4308,7 @@ msgstr ""
"lett beállítva. Az Evolution a szokásos emlékeztető\n"
"párbeszédablakot fogja ehelyett megjeleníteni."
-#: calendar/gui/alarm-notify/alarm-queue.c:1114
+#: calendar/gui/alarm-notify/alarm-queue.c:1127
#, c-format
msgid ""
"An Evolution Calendar reminder is about to trigger. This reminder is "
@@ -4325,7 +4325,7 @@ msgstr ""
"\n"
"Biztosan futtatni szeretné ezt a programot?"
-#: calendar/gui/alarm-notify/alarm-queue.c:1128
+#: calendar/gui/alarm-notify/alarm-queue.c:1141
msgid "Do not ask me about this program again."
msgstr "Ne kérdezzen meg többet ezzel a programmal kapcsolatban."
diff --git a/po/ja.po b/po/ja.po
index 8ea5f471d9..979d16c92f 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,10 +7,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: evolution HEAD\n"
+"Project-Id-Version: evolution gnome-2-10\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-14 08:18+0900\n"
-"PO-Revision-Date: 2005-02-14 08:16+0900\n"
+"POT-Creation-Date: 2005-03-02 11:10+0900\n"
+"PO-Revision-Date: 2005-03-02 11:08+0900\n"
"Last-Translator: Takeshi AIHANA <aihana@gnome.gr.jp>\n"
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
"MIME-Version: 1.0\n"
@@ -25,12 +25,12 @@ msgid "evolution addressbook"
msgstr "evolution アドレス帳"
#: ../a11y/addressbook/ea-minicard-view.c:34
-#: ../addressbook/gui/component/addressbook-component.c:182
+#: ../addressbook/gui/component/addressbook-component.c:196
msgid "New Contact"
msgstr "æ–°ã—ã„連絡先"
#: ../a11y/addressbook/ea-minicard-view.c:35
-#: ../addressbook/gui/component/addressbook-component.c:190
+#: ../addressbook/gui/component/addressbook-component.c:204
msgid "New Contact List"
msgstr "æ–°ã—ã„連絡先ã®ä¸€è¦§"
@@ -143,7 +143,7 @@ msgid "calendar view for one or more days"
msgstr "一日以上ã®ã‚«ãƒ¬ãƒ³ãƒ€è¡¨ç¤º"
#: ../a11y/calendar/ea-gnome-calendar.c:187
-#: ../calendar/gui/calendar-component.c:520
+#: ../calendar/gui/calendar-component.c:660
msgid "%A %d %b %Y"
msgstr "%Yå¹´ %B%eæ—¥ %A"
@@ -154,7 +154,7 @@ msgstr "%Yå¹´ %B%eæ—¥ %A"
#. You can change the order but don't change the
#. specifiers or add anything.
#: ../a11y/calendar/ea-gnome-calendar.c:190
-#: ../calendar/gui/calendar-component.c:523
+#: ../calendar/gui/calendar-component.c:663
#: ../calendar/gui/e-day-view-top-item.c:719 ../calendar/gui/e-day-view.c:1511
#: ../calendar/gui/e-week-view-main-item.c:321
msgid "%a %d %b"
@@ -163,9 +163,9 @@ msgstr "%m/%d (%a)"
#: ../a11y/calendar/ea-gnome-calendar.c:192
#: ../a11y/calendar/ea-gnome-calendar.c:197
#: ../a11y/calendar/ea-gnome-calendar.c:199
-#: ../calendar/gui/calendar-component.c:525
-#: ../calendar/gui/calendar-component.c:530
-#: ../calendar/gui/calendar-component.c:532
+#: ../calendar/gui/calendar-component.c:665
+#: ../calendar/gui/calendar-component.c:670
+#: ../calendar/gui/calendar-component.c:672
msgid "%a %d %b %Y"
msgstr "%Y/%m/%d (%a)"
@@ -173,10 +173,10 @@ msgstr "%Y/%m/%d (%a)"
#: ../a11y/calendar/ea-gnome-calendar.c:222
#: ../a11y/calendar/ea-gnome-calendar.c:228
#: ../a11y/calendar/ea-gnome-calendar.c:230
-#: ../calendar/gui/calendar-component.c:544
-#: ../calendar/gui/calendar-component.c:551
-#: ../calendar/gui/calendar-component.c:557
-#: ../calendar/gui/calendar-component.c:559
+#: ../calendar/gui/calendar-component.c:684
+#: ../calendar/gui/calendar-component.c:691
+#: ../calendar/gui/calendar-component.c:697
+#: ../calendar/gui/calendar-component.c:699
msgid "%d %b %Y"
msgstr "%Yå¹´ %B%eæ—¥"
@@ -186,7 +186,7 @@ msgstr "%Yå¹´ %B%eæ—¥"
#. month name. You can change the order but don't
#. change the specifiers or add anything.
#: ../a11y/calendar/ea-gnome-calendar.c:220
-#: ../calendar/gui/calendar-component.c:549
+#: ../calendar/gui/calendar-component.c:689
#: ../calendar/gui/e-day-view-top-item.c:723 ../calendar/gui/e-day-view.c:1527
#: ../calendar/gui/e-week-view-main-item.c:335
msgid "%d %b"
@@ -232,17 +232,17 @@ msgstr "一ヶ月ã®ã‚«ãƒ¬ãƒ³ãƒ€è¡¨ç¤º"
msgid "calendar view for one or more weeks"
msgstr "一週間以上ã®ã‚«ãƒ¬ãƒ³ãƒ€è¡¨ç¤º"
-#: ../a11y/widgets/ea-calendar-item.c:290
#: ../a11y/widgets/ea-calendar-item.c:296
+#: ../a11y/widgets/ea-calendar-item.c:302
msgid "%d %B %Y"
msgstr "%Yå¹´ %B%eæ—¥"
-#: ../a11y/widgets/ea-calendar-item.c:298
+#: ../a11y/widgets/ea-calendar-item.c:304
#, c-format
msgid "Calendar: from %s to %s"
msgstr "カレンダ: %s 〜 %s"
-#: ../a11y/widgets/ea-calendar-item.c:333
+#: ../a11y/widgets/ea-calendar-item.c:339
msgid "evolution calendar item"
msgstr "Evolution カレンダã®ã‚¢ã‚¤ãƒ†ãƒ "
@@ -507,7 +507,7 @@ msgstr "ã“ã“ã§è‡ªå‹•è£œå®Œã‚’設定ã—ã¾ã™"
#. Create the contacts group
#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:5
#: ../addressbook/gui/component/addressbook-view.c:1119
-#: ../calendar/gui/migration.c:378
+#: ../calendar/gui/calendar-component.c:235 ../calendar/gui/migration.c:385
msgid "Contacts"
msgstr "連絡先"
@@ -545,64 +545,67 @@ msgstr "ã“ã“ã§ãŠä½¿ã„ã® S/MIME åž‹ã®è¨¼æ˜Žæ›¸ã‚’管ç†ã—ã¾ã™"
#. create the local source group
#. On This Computer is always first and vFolders is always last
-#: ../addressbook/gui/component/addressbook-component.c:120
+#: ../addressbook/gui/component/addressbook-component.c:133
#: ../addressbook/gui/component/addressbook-migrate.c:493
-#: ../calendar/gui/migration.c:452 ../calendar/gui/migration.c:545
+#: ../calendar/gui/calendar-component.c:208 ../calendar/gui/migration.c:459
+#: ../calendar/gui/migration.c:552 ../calendar/gui/tasks-component.c:188
#: ../mail/em-folder-tree-model.c:197 ../mail/em-folder-tree-model.c:199
-#: ../mail/mail-component.c:270 ../mail/mail-vfolder.c:222
+#: ../mail/mail-component.c:290 ../mail/mail-vfolder.c:222
msgid "On This Computer"
msgstr "ã“ã®ã‚³ãƒ³ãƒ”ュータ"
#. Create the default Person addressbook
#. Create the default Person calendar
#. Create the default Person task list
+#. Create the default Person addressbook
#. orange
-#: ../addressbook/gui/component/addressbook-component.c:128
+#: ../addressbook/gui/component/addressbook-component.c:141
#: ../addressbook/gui/component/addressbook-migrate.c:501
#: ../addressbook/gui/contact-editor/contact-editor.glade.h:20
-#: ../calendar/gui/migration.c:460 ../calendar/gui/migration.c:553
-#: ../filter/filter-label.c:123 ../mail/em-migrate.c:1013
-#: ../mail/mail-config.c:77 ../mail/mail-config.glade.h:101
+#: ../calendar/gui/calendar-component.c:216 ../calendar/gui/migration.c:467
+#: ../calendar/gui/migration.c:560 ../calendar/gui/tasks-component.c:196
+#: ../filter/filter-label.c:123 ../mail/em-migrate.c:1043
+#: ../mail/mail-config.c:78 ../mail/mail-config.glade.h:101
msgid "Personal"
msgstr "プライベート"
#. Create the LDAP source group
-#: ../addressbook/gui/component/addressbook-component.c:136
+#: ../addressbook/gui/component/addressbook-component.c:149
#: ../addressbook/gui/component/addressbook-migrate.c:509
msgid "On LDAP Servers"
msgstr "LDAP サーãƒ"
-#: ../addressbook/gui/component/addressbook-component.c:183
+#: ../addressbook/gui/component/addressbook-component.c:197
msgid "_Contact"
msgstr "連絡先(_C)"
-#: ../addressbook/gui/component/addressbook-component.c:184
+#: ../addressbook/gui/component/addressbook-component.c:198
msgid "Create a new contact"
msgstr "æ–°ã—ã„連絡先を作æˆã—ã¾ã™"
-#: ../addressbook/gui/component/addressbook-component.c:191
+#: ../addressbook/gui/component/addressbook-component.c:205
msgid "Contact _List"
msgstr "連絡先ã®ä¸€è¦§(_L)"
-#: ../addressbook/gui/component/addressbook-component.c:192
+#: ../addressbook/gui/component/addressbook-component.c:206
msgid "Create a new contact list"
msgstr "æ–°ã—ã„連絡先一覧を作æˆã—ã¾ã™"
-#: ../addressbook/gui/component/addressbook-component.c:198
-#: ../addressbook/gui/component/addressbook-config.c:1121
+#: ../addressbook/gui/component/addressbook-component.c:212
+#: ../addressbook/gui/component/addressbook-config.c:1120
#: ../addressbook/gui/component/addressbook-view.c:757
msgid "New Address Book"
msgstr "æ–°ã—ã„アドレス帳"
-#: ../addressbook/gui/component/addressbook-component.c:199
+#: ../addressbook/gui/component/addressbook-component.c:213
msgid "Address _Book"
msgstr "アドレス帳(_B)"
-#: ../addressbook/gui/component/addressbook-component.c:200
+#: ../addressbook/gui/component/addressbook-component.c:214
msgid "Create a new address book"
msgstr "æ–°ã—ã„アドレス帳を作æˆã—ã¾ã™"
-#: ../addressbook/gui/component/addressbook-component.c:273
+#: ../addressbook/gui/component/addressbook-component.c:287
msgid "Failed upgrading Addressbook settings or folders."
msgstr "アドレス帳ã®è¨­å®šã¾ãŸã¯é–¢é€£ãƒ•ã‚©ãƒ«ãƒ€ã®ã‚¢ãƒƒãƒ—グレードã«å¤±æ•—ã—ã¾ã—ãŸ"
@@ -657,18 +660,18 @@ msgstr "検索"
msgid "Downloading"
msgstr "ダウンロード"
-#: ../addressbook/gui/component/addressbook-config.c:1119
+#: ../addressbook/gui/component/addressbook-config.c:1118
#: ../addressbook/gui/component/ldap-config.glade.h:14
msgid "Address Book Properties"
msgstr "アドレス帳ã®ãƒ—ロパティ"
#: ../addressbook/gui/component/addressbook-migrate.c:72
-#: ../calendar/gui/migration.c:142 ../mail/em-migrate.c:1160
+#: ../calendar/gui/migration.c:142 ../mail/em-migrate.c:1190
msgid "Migrating..."
msgstr "移行中..."
#: ../addressbook/gui/component/addressbook-migrate.c:124
-#: ../calendar/gui/migration.c:189 ../mail/em-migrate.c:1201
+#: ../calendar/gui/migration.c:189 ../mail/em-migrate.c:1231
#, c-format
msgid "Migrating `%s':"
msgstr "'%s' ã®ç§»è¡Œä¸­:"
@@ -725,16 +728,16 @@ msgstr ""
#: ../addressbook/gui/component/addressbook-view.c:758
#: ../addressbook/gui/widgets/e-addressbook-view.c:935
-#: ../calendar/gui/calendar-component.c:386
-#: ../calendar/gui/tasks-component.c:330 ../mail/em-filter-i18n.h:11
+#: ../calendar/gui/calendar-component.c:526
+#: ../calendar/gui/tasks-component.c:430 ../mail/em-filter-i18n.h:11
#: ../ui/evolution-addressbook.xml.h:8 ../ui/evolution-calendar.xml.h:5
#: ../ui/evolution-mail-message.xml.h:24 ../ui/evolution-tasks.xml.h:6
msgid "Delete"
msgstr "削除ã™ã‚‹"
#: ../addressbook/gui/component/addressbook-view.c:760
-#: ../calendar/gui/calendar-component.c:387
-#: ../calendar/gui/tasks-component.c:331
+#: ../calendar/gui/calendar-component.c:527
+#: ../calendar/gui/tasks-component.c:431
msgid "Properties..."
msgstr "プロパティ..."
@@ -875,7 +878,7 @@ msgid "Add Address Book"
msgstr "アドレス帳ã®è¿½åŠ "
#: ../addressbook/gui/component/ldap-config.glade.h:15
-#: ../mail/em-account-editor.c:292
+#: ../mail/em-account-editor.c:302
msgid "Always"
msgstr "常ã«"
@@ -910,7 +913,7 @@ msgid "Lo_gin:"
msgstr "ログイン(_G):"
#: ../addressbook/gui/component/ldap-config.glade.h:25
-#: ../mail/em-account-editor.c:290
+#: ../mail/em-account-editor.c:300
msgid "Never"
msgstr "ã—ãªã„"
@@ -1032,7 +1035,7 @@ msgid "Using email address"
msgstr "使用ã™ã‚‹ E-メール・アドレス"
#: ../addressbook/gui/component/ldap-config.glade.h:42
-#: ../mail/em-account-editor.c:291
+#: ../mail/em-account-editor.c:301
msgid "Whenever Possible"
msgstr "å¯èƒ½ãªã‚‰ã°"
@@ -1087,7 +1090,7 @@ msgstr "カード"
#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:12
#: ../calendar/gui/dialogs/alarm-dialog.glade.h:26
#: ../calendar/gui/dialogs/calendar-setup.glade.h:14
-#: ../filter/filter.glade.h:16 ../mail/em-account-editor.c:1825
+#: ../filter/filter.glade.h:16 ../mail/em-account-editor.c:1885
#: ../plugins/calendar-http/calendar-http.c:263
#: ../plugins/calendar-weather/calendar-weather.c:564
msgid "minutes"
@@ -1186,8 +1189,8 @@ msgstr "電話"
#: ../addressbook/gui/contact-editor/contact-editor.glade.h:23
#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:235
#: ../addressbook/gui/contact-editor/e-contact-editor.c:199
-#: ../filter/filter-label.c:122 ../mail/em-migrate.c:1012
-#: ../mail/mail-config.c:76 ../mail/mail-config.glade.h:148
+#: ../filter/filter-label.c:122 ../mail/em-migrate.c:1042
+#: ../mail/mail-config.c:77 ../mail/mail-config.glade.h:148
msgid "Work"
msgstr "仕事"
@@ -2414,7 +2417,7 @@ msgstr "æ°å(_F):"
msgid "E-_mail:"
msgstr "E-メール(_M):"
-#: ../addressbook/gui/contact-editor/eab-editor.c:319
+#: ../addressbook/gui/contact-editor/eab-editor.c:326
msgid ""
"Are you sure you want\n"
"to delete these contacts?"
@@ -2422,7 +2425,7 @@ msgstr ""
"ã“ã®é€£çµ¡å…ˆã‚’\n"
"本当ã«å‰Šé™¤ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
-#: ../addressbook/gui/contact-editor/eab-editor.c:322
+#: ../addressbook/gui/contact-editor/eab-editor.c:329
msgid ""
"Are you sure you want\n"
"to delete this contact?"
@@ -2541,7 +2544,7 @@ msgid "Add an email to the List"
msgstr "E-メールを一覧ã¸è¿½åŠ ã™ã‚‹"
#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:5
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:820
+#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:817
msgid "Contact List Editor"
msgstr "連絡先一覧エディタ"
@@ -2587,11 +2590,11 @@ msgstr "書ç±"
msgid "Is New List"
msgstr "æ–°ã—ã„一覧ã§ã™"
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:710
+#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:707
msgid "_Members"
msgstr "メンãƒãƒ¼(_M)"
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:713
+#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:710
msgid "Contact List Members"
msgstr "連絡先一覧ã®ãƒ¡ãƒ³ãƒãƒ¼"
@@ -2700,7 +2703,7 @@ msgstr "情報ソース"
#: ../addressbook/gui/widgets/e-addressbook-view.c:244
#: ../calendar/gui/dialogs/meeting-page.etspec.h:11
#: ../calendar/gui/e-calendar-table.etspec.h:13
-#: ../calendar/gui/e-meeting-list-view.c:244
+#: ../calendar/gui/e-meeting-list-view.c:319
#: ../calendar/gui/e-meeting-time-sel.etspec.h:11
msgid "Type"
msgstr "種類"
@@ -2754,8 +2757,8 @@ msgid "Cut"
msgstr "切りå–ã‚Š"
#: ../addressbook/gui/widgets/e-addressbook-view.c:933
-#: ../calendar/gui/calendar-component.c:385
-#: ../calendar/gui/tasks-component.c:329 ../ui/evolution-addressbook.xml.h:2
+#: ../calendar/gui/calendar-component.c:525
+#: ../calendar/gui/tasks-component.c:429 ../ui/evolution-addressbook.xml.h:2
#: ../ui/evolution-mail-message.xml.h:9 ../ui/evolution-tasks.xml.h:2
msgid "Copy"
msgstr "コピー"
@@ -2911,7 +2914,7 @@ 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:251
+#: ../calendar/gui/e-meeting-list-view.c:326
#: ../calendar/gui/e-meeting-time-sel.etspec.h:9
msgid "Role"
msgstr "役割"
@@ -4123,7 +4126,7 @@ msgid "Calendar and Tasks"
msgstr "カレンダã¨ã‚¿ã‚¹ã‚¯"
#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:2
-#: ../calendar/gui/calendar-component.c:1150
+#: ../calendar/gui/calendar-component.c:1290
msgid "Calendars"
msgstr "カレンダ"
@@ -4157,7 +4160,7 @@ msgstr "Evolution タスクã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ"
#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:10
#: ../calendar/gui/e-tasks.c:1219 ../calendar/gui/print.c:1822
-#: ../calendar/gui/tasks-component.c:408 ../calendar/gui/tasks-component.c:881
+#: ../calendar/gui/tasks-component.c:508 ../calendar/gui/tasks-component.c:981
#: ../calendar/gui/tasks-control.c:408
#: ../calendar/importers/icalendar-importer.c:83
#: ../calendar/importers/icalendar-importer.c:701
@@ -4646,7 +4649,7 @@ msgid "Unmatched"
msgstr "該当ã—ãªã„ã‚‚ã®"
#: ../calendar/gui/calendar-commands.c:120
-#: ../calendar/gui/calendar-component.c:568
+#: ../calendar/gui/calendar-component.c:708
#: ../calendar/gui/dialogs/calendar-setup.c:362
#: ../calendar/gui/gnome-cal.c:1942
#: ../plugins/groupwise-account-setup/camel-gw-listener.c:382
@@ -4676,73 +4679,91 @@ msgstr "次よりå¤ã„イベントを抹消ã™ã‚‹"
msgid "days"
msgstr "æ—¥"
-#: ../calendar/gui/calendar-component.c:384
+#. Create the On the web source group
+#. Create the Webcal source group
+#. Create the LDAP source group
+#: ../calendar/gui/calendar-component.c:223 ../calendar/gui/migration.c:486
+#: ../calendar/gui/migration.c:579 ../calendar/gui/tasks-component.c:204
+msgid "On The Web"
+msgstr "ウェブ"
+
+#: ../calendar/gui/calendar-component.c:241 ../calendar/gui/migration.c:388
+msgid "Birthdays & Anniversaries"
+msgstr "誕生日ã¨è¨˜å¿µæ—¥"
+
+#. Create the weather group
+#: ../calendar/gui/calendar-component.c:247
+#: ../plugins/calendar-weather/calendar-weather.c:100
+msgid "Weather"
+msgstr "天気"
+
+#: ../calendar/gui/calendar-component.c:524
#: ../calendar/gui/dialogs/calendar-setup.c:442
msgid "New Calendar"
msgstr "æ–°ã—ã„カレンダ"
-#: ../calendar/gui/calendar-component.c:703
+#: ../calendar/gui/calendar-component.c:843
msgid "Failed upgrading calendars."
msgstr "カレンダã®ã‚¢ãƒƒãƒ—グレードã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../calendar/gui/calendar-component.c:999
+#: ../calendar/gui/calendar-component.c:1139
#, c-format
msgid "Unable to open the calendar '%s' for creating events and meetings"
msgstr "イベントã¨ä¼šè­°ã®ä½œæˆã«å¿…è¦ãªã‚«ãƒ¬ãƒ³ãƒ€ '%s' ã‚’é–‹ã‘ã¾ã›ã‚“"
-#: ../calendar/gui/calendar-component.c:1015
+#: ../calendar/gui/calendar-component.c:1155
msgid "There is no calendar available for creating events and meetings"
msgstr "イベントã¨ä¼šè­°ã®ä½œæˆã§åˆ©ç”¨å¯èƒ½ãªã‚«ãƒ¬ãƒ³ãƒ€ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../calendar/gui/calendar-component.c:1125
+#: ../calendar/gui/calendar-component.c:1265
msgid "Calendar Source Selector"
msgstr "カレンダã®æ ¼ç´å ´æ‰€ã®é¸æŠž"
-#: ../calendar/gui/calendar-component.c:1316
+#: ../calendar/gui/calendar-component.c:1456
msgid "New appointment"
msgstr "æ–°ã—ã„予定"
-#: ../calendar/gui/calendar-component.c:1317
+#: ../calendar/gui/calendar-component.c:1457
msgid "_Appointment"
msgstr "予定(_A)"
-#: ../calendar/gui/calendar-component.c:1318
+#: ../calendar/gui/calendar-component.c:1458
msgid "Create a new appointment"
msgstr "æ–°ã—ã„予定を作æˆã—ã¾ã™"
-#: ../calendar/gui/calendar-component.c:1324
+#: ../calendar/gui/calendar-component.c:1464
msgid "New meeting"
msgstr "æ–°è¦ã®ä¼šè­°"
-#: ../calendar/gui/calendar-component.c:1325
+#: ../calendar/gui/calendar-component.c:1465
msgid "M_eeting"
msgstr "会議(_E)"
-#: ../calendar/gui/calendar-component.c:1326
+#: ../calendar/gui/calendar-component.c:1466
msgid "Create a new meeting request"
msgstr "æ–°ã—ã„会議をå¬é›†ã—ã¾ã™"
-#: ../calendar/gui/calendar-component.c:1332
+#: ../calendar/gui/calendar-component.c:1472
msgid "New all day appointment"
msgstr "æ–°ã—ã„終日ã®äºˆå®š"
-#: ../calendar/gui/calendar-component.c:1333
+#: ../calendar/gui/calendar-component.c:1473
msgid "All Day A_ppointment"
msgstr "終日ã®äºˆå®š(_P)"
-#: ../calendar/gui/calendar-component.c:1334
+#: ../calendar/gui/calendar-component.c:1474
msgid "Create a new all-day appointment"
msgstr "æ–°ã—ã„終日ã®äºˆå®šã‚’作æˆã—ã¾ã™"
-#: ../calendar/gui/calendar-component.c:1340
+#: ../calendar/gui/calendar-component.c:1480
msgid "New calendar"
msgstr "æ–°ã—ã„カレンダ"
-#: ../calendar/gui/calendar-component.c:1341
+#: ../calendar/gui/calendar-component.c:1481
msgid "Cale_ndar"
msgstr "カレンダ(_N)"
-#: ../calendar/gui/calendar-component.c:1342
+#: ../calendar/gui/calendar-component.c:1482
msgid "Create a new calendar"
msgstr "æ–°ã—ã„カレンダを作æˆã—ã¾ã™"
@@ -4774,7 +4795,7 @@ msgstr "カレンダをオープンã™ã‚‹éš›ã®æ–¹æ³•ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„
msgid "Permission denied to open the calendar"
msgstr "カレンダをオープンã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../calendar/gui/comp-editor-factory.c:437 ../shell/e-shell.c:1259
+#: ../calendar/gui/comp-editor-factory.c:437 ../shell/e-shell.c:1264
msgid "Unknown error"
msgstr "特定ã§ããªã„エラー"
@@ -4917,7 +4938,7 @@ msgid "%.0fG"
msgstr "%.0fG"
#: ../calendar/gui/dialogs/cal-attachment-bar.c:298
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:913
+#: ../calendar/gui/dialogs/cal-attachment-bar.c:922
#: ../composer/e-msg-composer-attachment-bar.c:295 ../mail/em-utils.c:436
msgid "attachment"
msgstr "添付"
@@ -4941,6 +4962,7 @@ msgid "_Add attachment..."
msgstr "添付ã®è¿½åŠ (_A)..."
#: ../calendar/gui/dialogs/cal-attachment-bar.c:699
+#: ../composer/e-msg-composer-attachment-bar.c:703
msgid "Attachment Bar"
msgstr "添付ファイル・ãƒãƒ¼"
@@ -4954,7 +4976,7 @@ msgid "Suggest automatic display of attachment"
msgstr "添付ã—ãŸå†…容を自動的ã«è¡¨ç¤ºã™ã‚‹ã‹æ示ã™ã‚‹"
#: ../calendar/gui/dialogs/cal-attachment-select-file.c:190
-#: ../composer/e-msg-composer-select-file.c:230
+#: ../composer/e-msg-composer-select-file.c:231
msgid "Attach file(s)"
msgstr "ファイルã®æ·»ä»˜"
@@ -4998,7 +5020,7 @@ msgstr "MIME タイプ:"
#. g_object_set((GObject *)renderer, "activatable", TRUE, NULL);
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:576
-#: ../mail/em-account-prefs.c:460 ../mail/em-composer-prefs.c:888
+#: ../mail/em-account-prefs.c:476 ../mail/em-composer-prefs.c:888
#: ../plugins/plugin-manager/plugin-manager.c:213
msgid "Enabled"
msgstr "有効"
@@ -5018,16 +5040,16 @@ msgstr "削除ã—ãªã„"
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:787
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:820
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:853
-#: ../mail/em-account-prefs.c:307 ../mail/em-account-prefs.c:335
-#: ../mail/em-account-prefs.c:366
+#: ../mail/em-account-prefs.c:323 ../mail/em-account-prefs.c:351
+#: ../mail/em-account-prefs.c:382
msgid "Disable"
msgstr "無効"
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:787
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:820
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:855
-#: ../mail/em-account-prefs.c:307 ../mail/em-account-prefs.c:335
-#: ../mail/em-account-prefs.c:368
+#: ../mail/em-account-prefs.c:323 ../mail/em-account-prefs.c:351
+#: ../mail/em-account-prefs.c:384
msgid "Enable"
msgstr "有効"
@@ -5428,98 +5450,98 @@ msgstr[1] "添付ã•ã‚ŒãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
#: ../calendar/gui/dialogs/comp-editor.c:412
#: ../calendar/gui/e-calendar-table.c:1164
#: ../calendar/gui/e-calendar-view.c:1402 ../composer/e-msg-composer.c:2906
-#: ../mail/em-folder-tree.c:1046 ../mail/message-list.c:1712
-#: ../ui/evolution-addressbook.xml.h:31 ../ui/evolution-calendar.xml.h:39
-#: ../ui/evolution-composer-entries.xml.h:7
+#: ../mail/em-folder-tree.c:1046 ../mail/em-folder-view.c:966
+#: ../mail/message-list.c:1707 ../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:105 ../ui/evolution-tasks.xml.h:20
msgid "_Copy"
msgstr "コピー(_C)"
#: ../calendar/gui/dialogs/comp-editor.c:413 ../composer/e-msg-composer.c:2907
#: ../mail/em-folder-tree.c:1047 ../mail/em-folder-tree.c:2311
-#: ../mail/em-folder-view.c:860 ../mail/message-list.c:1713
+#: ../mail/em-folder-view.c:862 ../mail/message-list.c:1708
msgid "_Move"
msgstr "移動(_M)"
#: ../calendar/gui/dialogs/comp-editor.c:415 ../composer/e-msg-composer.c:2909
-#: ../mail/em-folder-tree.c:1049 ../mail/message-list.c:1715
+#: ../mail/em-folder-tree.c:1049 ../mail/message-list.c:1710
msgid "Cancel _Drag"
msgstr "ドラッグã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«(_D)"
-#: ../calendar/gui/dialogs/comp-editor.c:659
+#: ../calendar/gui/dialogs/comp-editor.c:682
msgid "Could not update object"
msgstr "オブジェクトを更新ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ../calendar/gui/dialogs/comp-editor.c:820 ../composer/e-msg-composer.c:2310
+#: ../calendar/gui/dialogs/comp-editor.c:843 ../composer/e-msg-composer.c:2310
#, c-format
msgid "<b>%d</b> File Attached"
msgid_plural "<b>%d</b> Files Attached"
msgstr[0] "添付ファイル㌠<b>%d</b> 個ã‚ã‚Šã¾ã™"
msgstr[1] "添付ファイル㌠<b>%d</b> 個ã‚ã‚Šã¾ã™"
-#: ../calendar/gui/dialogs/comp-editor.c:873 ../composer/e-msg-composer.c:2339
+#: ../calendar/gui/dialogs/comp-editor.c:900 ../composer/e-msg-composer.c:2339
msgid "Hide _Attachment Bar (drop attachments here)"
msgstr "添付ファイル・ãƒãƒ¼ã‚’éš ã™ (ã“ã“ã«æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ドロップã—ã¦ä¸‹ã•ã„)(_A)"
-#: ../calendar/gui/dialogs/comp-editor.c:876
-#: ../calendar/gui/dialogs/comp-editor.c:928 ../composer/e-msg-composer.c:2342
+#: ../calendar/gui/dialogs/comp-editor.c:903
+#: ../calendar/gui/dialogs/comp-editor.c:955 ../composer/e-msg-composer.c:2342
#: ../composer/e-msg-composer.c:3471
msgid "Show _Attachment Bar (drop attachments here)"
msgstr ""
"添付ファイル・ãƒãƒ¼ã‚’表示ã™ã‚‹ (ã“ã“ã«æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ドロップã—ã¦ä¸‹ã•ã„)(_A)"
-#: ../calendar/gui/dialogs/comp-editor.c:952
+#: ../calendar/gui/dialogs/comp-editor.c:979 ../composer/e-msg-composer.c:3493
msgid "Attachment Button: Press space key to toggle attachment bar"
msgstr ""
"添付ファイル・ボタン: [SPACE] キーを押下ã™ã‚‹ã¨ãƒãƒ¼ã®è¡¨ç¤ºã‚’ ON/OFF ã—ã¾ã™"
-#: ../calendar/gui/dialogs/comp-editor.c:1499
-#: ../calendar/gui/dialogs/comp-editor.c:1542
+#: ../calendar/gui/dialogs/comp-editor.c:1526
+#: ../calendar/gui/dialogs/comp-editor.c:1569
msgid "Edit Appointment"
msgstr "予定ã®ç·¨é›†"
-#: ../calendar/gui/dialogs/comp-editor.c:1505
-#: ../calendar/gui/dialogs/comp-editor.c:1548
+#: ../calendar/gui/dialogs/comp-editor.c:1532
+#: ../calendar/gui/dialogs/comp-editor.c:1575
#, c-format
msgid "Meeting - %s"
msgstr "会議 - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1507
-#: ../calendar/gui/dialogs/comp-editor.c:1550
+#: ../calendar/gui/dialogs/comp-editor.c:1534
+#: ../calendar/gui/dialogs/comp-editor.c:1577
#, c-format
msgid "Appointment - %s"
msgstr "予定 - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1511
-#: ../calendar/gui/dialogs/comp-editor.c:1554
+#: ../calendar/gui/dialogs/comp-editor.c:1538
+#: ../calendar/gui/dialogs/comp-editor.c:1581
#, c-format
msgid "Assigned Task - %s"
msgstr "タスクã®å‰²å½“㦠- %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1513
-#: ../calendar/gui/dialogs/comp-editor.c:1556
+#: ../calendar/gui/dialogs/comp-editor.c:1540
+#: ../calendar/gui/dialogs/comp-editor.c:1583
#, c-format
msgid "Task - %s"
msgstr "タスク - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1516
-#: ../calendar/gui/dialogs/comp-editor.c:1559
+#: ../calendar/gui/dialogs/comp-editor.c:1543
+#: ../calendar/gui/dialogs/comp-editor.c:1586
#, c-format
msgid "Journal entry - %s"
msgstr "ジャーナル・エントリ - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1527
-#: ../calendar/gui/dialogs/comp-editor.c:1569
+#: ../calendar/gui/dialogs/comp-editor.c:1554
+#: ../calendar/gui/dialogs/comp-editor.c:1596
msgid "No summary"
msgstr "サマリ無ã—"
-#: ../calendar/gui/dialogs/comp-editor.c:2001
-#: ../calendar/gui/dialogs/comp-editor.c:2034
-#: ../calendar/gui/dialogs/comp-editor.c:2058
+#: ../calendar/gui/dialogs/comp-editor.c:2030
+#: ../calendar/gui/dialogs/comp-editor.c:2063
+#: ../calendar/gui/dialogs/comp-editor.c:2087
msgid "Changes made to this item may be discarded if an update arrives"
msgstr "æ›´æ–°ãŒå±Šã„ãŸã‚‰ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’破棄ã™ã‚‹"
-#: ../calendar/gui/dialogs/comp-editor.c:2082
+#: ../calendar/gui/dialogs/comp-editor.c:2111
msgid "Unable to use current version!"
msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã§ãã¾ã›ã‚“ï¼"
@@ -5601,61 +5623,61 @@ msgstr "ç¹°ã‚Šè¿”ã—"
#: ../calendar/gui/dialogs/event-editor.c:161
#: ../calendar/gui/dialogs/event-editor.c:233
-#: ../calendar/gui/dialogs/event-editor.c:378
+#: ../calendar/gui/dialogs/event-editor.c:379
msgid "Scheduling"
msgstr "スケジュール"
#: ../calendar/gui/dialogs/event-editor.c:168
#: ../calendar/gui/dialogs/event-editor.c:236
-#: ../calendar/gui/dialogs/event-editor.c:381
+#: ../calendar/gui/dialogs/event-editor.c:382
msgid "Invitations"
msgstr "招待"
-#: ../calendar/gui/dialogs/event-page.c:716
+#: ../calendar/gui/dialogs/event-page.c:725
msgid "Event with no start date"
msgstr "開始日ã®ãªã„イベント"
-#: ../calendar/gui/dialogs/event-page.c:719
+#: ../calendar/gui/dialogs/event-page.c:728
msgid "Event with no end date"
msgstr "終了日ã®ãªã„イベント"
-#: ../calendar/gui/dialogs/event-page.c:885
-#: ../calendar/gui/dialogs/task-page.c:551
+#: ../calendar/gui/dialogs/event-page.c:894
+#: ../calendar/gui/dialogs/task-page.c:561
msgid "Start date is wrong"
msgstr "開始日ãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: ../calendar/gui/dialogs/event-page.c:895
+#: ../calendar/gui/dialogs/event-page.c:904
msgid "End date is wrong"
msgstr "終了日ãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: ../calendar/gui/dialogs/event-page.c:918
+#: ../calendar/gui/dialogs/event-page.c:927
msgid "Start time is wrong"
msgstr "開始時刻ãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: ../calendar/gui/dialogs/event-page.c:925
+#: ../calendar/gui/dialogs/event-page.c:934
msgid "End time is wrong"
msgstr "終了時刻ãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: ../calendar/gui/dialogs/event-page.c:1666
+#: ../calendar/gui/dialogs/event-page.c:1675
#, c-format
msgid "Unable to open the calendar '%s'."
msgstr "カレンダ '%s' ã‚’é–‹ã‘ã¾ã›ã‚“。"
-#: ../calendar/gui/dialogs/event-page.c:1872
+#: ../calendar/gui/dialogs/event-page.c:1881
#, c-format
msgid "%d day before appointment"
msgid_plural "%d days before appointment"
msgstr[0] "予定㮠%d æ—¥å‰"
msgstr[1] "予定㮠%d æ—¥å‰"
-#: ../calendar/gui/dialogs/event-page.c:1880
+#: ../calendar/gui/dialogs/event-page.c:1889
#, c-format
msgid "%d hour before appointment"
msgid_plural "%d hours before appointment"
msgstr[0] "予定㮠%d 時間å‰"
msgstr[1] "予定㮠%d 時間å‰"
-#: ../calendar/gui/dialogs/event-page.c:1888
+#: ../calendar/gui/dialogs/event-page.c:1897
#, c-format
msgid "%d minute before appointement"
msgid_plural "%d minutes before appointment"
@@ -5784,9 +5806,9 @@ msgstr "開始時刻(_S):"
#: ../calendar/gui/dialogs/meeting-page.glade.h:5
#: ../calendar/gui/e-cal-model-tasks.c:652
#: ../calendar/gui/e-itip-control.c:1104 ../composer/e-msg-composer.c:2117
-#: ../filter/filter-rule.c:878 ../mail/em-account-editor.c:675
-#: ../mail/em-account-editor.c:1273 ../mail/em-account-prefs.c:421
-#: ../mail/em-folder-view.c:998
+#: ../filter/filter-rule.c:878 ../mail/em-account-editor.c:685
+#: ../mail/em-account-editor.c:1291 ../mail/em-account-prefs.c:437
+#: ../mail/em-folder-view.c:993
#: ../plugins/calendar-weather/calendar-weather.c:371
#: ../plugins/calendar-weather/calendar-weather.c:425
#: ../plugins/itip-formatter/itip-formatter.c:1376
@@ -5813,7 +5835,7 @@ msgid "_Delegate To..."
msgstr "委任先(_D)..."
#: ../calendar/gui/dialogs/meeting-page.etspec.h:1
-#: ../calendar/gui/e-meeting-list-view.c:235
+#: ../calendar/gui/e-meeting-list-view.c:308
#: ../calendar/gui/e-meeting-time-sel.etspec.h:1
msgid "Attendee"
msgstr "出席者"
@@ -5849,7 +5871,7 @@ msgid "Member"
msgstr "メンãƒãƒ¼"
#: ../calendar/gui/dialogs/meeting-page.etspec.h:8
-#: ../calendar/gui/e-meeting-list-view.c:258
+#: ../calendar/gui/e-meeting-list-view.c:333
#: ../calendar/gui/e-meeting-time-sel.etspec.h:8
msgid "RSVP"
msgstr "返信ã®æœ‰ç„¡"
@@ -5857,7 +5879,7 @@ msgstr "返信ã®æœ‰ç„¡"
#: ../calendar/gui/dialogs/meeting-page.etspec.h:10
#: ../calendar/gui/dialogs/task-editor.c:146
#: ../calendar/gui/e-calendar-table.etspec.h:10
-#: ../calendar/gui/e-meeting-list-view.c:265
+#: ../calendar/gui/e-meeting-list-view.c:340
#: ../calendar/gui/e-meeting-time-sel.etspec.h:10 ../mail/em-filter-i18n.h:63
#: ../mail/message-list.etspec.h:12
msgid "Status"
@@ -6082,7 +6104,7 @@ msgstr "完了"
#: ../calendar/gui/dialogs/task-details-page.glade.h:5
#: ../calendar/gui/e-cal-component-preview.c:248
-#: ../calendar/gui/e-calendar-table.c:382 ../mail/message-list.c:1011
+#: ../calendar/gui/e-calendar-table.c:382 ../mail/message-list.c:1006
msgid "High"
msgstr "高ã„"
@@ -6097,14 +6119,14 @@ msgstr "進行中"
#: ../calendar/gui/dialogs/task-details-page.glade.h:7
#: ../calendar/gui/e-cal-component-preview.c:252
-#: ../calendar/gui/e-calendar-table.c:384 ../mail/message-list.c:1009
+#: ../calendar/gui/e-calendar-table.c:384 ../mail/message-list.c:1004
msgid "Low"
msgstr "低ã„"
#: ../calendar/gui/dialogs/task-details-page.glade.h:8
#: ../calendar/gui/e-cal-component-preview.c:250
#: ../calendar/gui/e-cal-model.c:899 ../calendar/gui/e-calendar-table.c:383
-#: ../mail/message-list.c:1010
+#: ../mail/message-list.c:1005
msgid "Normal"
msgstr "普通"
@@ -6148,15 +6170,15 @@ msgstr "タスク"
#: ../calendar/gui/dialogs/task-editor.c:157
#: ../calendar/gui/dialogs/task-editor.c:219
-#: ../calendar/gui/dialogs/task-editor.c:358
+#: ../calendar/gui/dialogs/task-editor.c:359
msgid "Assignment"
msgstr "割当ã¦"
-#: ../calendar/gui/dialogs/task-page.c:524
+#: ../calendar/gui/dialogs/task-page.c:534
msgid "Due date is wrong"
msgstr "期日ãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: ../calendar/gui/dialogs/task-page.c:868
+#: ../calendar/gui/dialogs/task-page.c:878
#, c-format
msgid "Unable to open tasks in '%s'."
msgstr "'%s' ã®ã‚¿ã‚¹ã‚¯ã‚’é–‹ã‘ã¾ã›ã‚“。"
@@ -6304,7 +6326,7 @@ msgstr "%2$sã®æ™‚点ã§%1$s"
msgid "%s for an unknown trigger type"
msgstr "トリガーã®ç¨®é¡žãŒä¸æ˜Žãª %s"
-#: ../calendar/gui/e-cal-component-preview.c:70 ../mail/em-folder-view.c:2520
+#: ../calendar/gui/e-cal-component-preview.c:70 ../mail/em-folder-view.c:2573
#, c-format
msgid "Click to open %s"
msgstr "クリックã™ã‚‹ã¨ %s ã‚’é–‹ãã¾ã™"
@@ -6333,7 +6355,7 @@ msgstr "期日:"
#. Status
#: ../calendar/gui/e-cal-component-preview.c:222
#: ../calendar/gui/e-itip-control.c:1132
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:129
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:209
#: ../plugins/itip-formatter/itip-view.c:884
msgid "Status:"
msgstr "ステータス:"
@@ -6416,7 +6438,7 @@ msgstr "ã„ã„ãˆ"
#: ../calendar/gui/e-meeting-list-view.c:139
#: ../calendar/gui/e-meeting-list-view.c:153
#: ../calendar/gui/e-meeting-store.c:124 ../calendar/gui/e-meeting-store.c:159
-#: ../calendar/gui/e-meeting-store.c:224 ../mail/em-utils.c:1157
+#: ../calendar/gui/e-meeting-store.c:224 ../mail/em-utils.c:1173
#: ../plugins/itip-formatter/itip-formatter.c:251
#: ../plugins/itip-formatter/itip-formatter.c:1398
#: ../plugins/plugin-manager/plugin-manager.c:72
@@ -6497,8 +6519,7 @@ msgid "Save as..."
msgstr "別åã§ä¿å­˜..."
#: ../calendar/gui/e-calendar-table.c:1156
-#: ../calendar/gui/e-calendar-view.c:1395 ../mail/em-folder-view.c:964
-#: ../ui/evolution-addressbook.xml.h:37
+#: ../calendar/gui/e-calendar-view.c:1395 ../ui/evolution-addressbook.xml.h:37
msgid "_Open"
msgstr "é–‹ã(_O)"
@@ -6507,8 +6528,8 @@ msgid "Open _Web Page"
msgstr "ウェブ・ページを開ã(_W)"
#: ../calendar/gui/e-calendar-table.c:1158
-#: ../calendar/gui/e-calendar-view.c:1396 ../mail/em-folder-view.c:966
-#: ../mail/em-popup.c:493 ../ui/evolution-mail-message.xml.h:124
+#: ../calendar/gui/e-calendar-view.c:1396 ../mail/em-folder-view.c:976
+#: ../mail/em-popup.c:494 ../ui/evolution-mail-message.xml.h:124
msgid "_Save As..."
msgstr "別åã§ä¿å­˜(_S)..."
@@ -6553,7 +6574,7 @@ msgstr "é¸æŠžã—ãŸã‚¿ã‚¹ã‚¯ã«å®Œäº†ãƒžãƒ¼ã‚¯ã‚’付与(_M)"
#. FIXME: need to disable for undeletable folders
#: ../calendar/gui/e-calendar-table.c:1176
#: ../calendar/gui/e-calendar-view.c:1414 ../mail/em-folder-tree.c:2814
-#: ../mail/em-folder-view.c:989 ../ui/evolution-addressbook.xml.h:33
+#: ../mail/em-folder-view.c:980 ../ui/evolution-addressbook.xml.h:33
#: ../ui/evolution-calendar.xml.h:40 ../ui/evolution-mail-message.xml.h:108
#: ../ui/evolution-tasks.xml.h:21
msgid "_Delete"
@@ -6828,12 +6849,12 @@ msgstr ""
#: ../calendar/gui/e-itip-control.c:1137
#: ../calendar/gui/e-meeting-list-view.c:175
#: ../calendar/gui/e-meeting-store.c:188 ../calendar/gui/e-meeting-store.c:211
-#: ../calendar/gui/itip-utils.c:422
+#: ../calendar/gui/itip-utils.c:421
#: ../plugins/itip-formatter/itip-formatter.c:1389
msgid "Accepted"
msgstr "å—諾済"
-#: ../calendar/gui/e-itip-control.c:1141 ../calendar/gui/itip-utils.c:425
+#: ../calendar/gui/e-itip-control.c:1141 ../calendar/gui/itip-utils.c:424
#: ../plugins/itip-formatter/itip-formatter.c:1392
msgid "Tentatively Accepted"
msgstr "暫定的ã«å—諾済"
@@ -6841,7 +6862,7 @@ msgstr "暫定的ã«å—諾済"
#: ../calendar/gui/e-itip-control.c:1145
#: ../calendar/gui/e-meeting-list-view.c:176
#: ../calendar/gui/e-meeting-store.c:190 ../calendar/gui/e-meeting-store.c:213
-#: ../calendar/gui/itip-utils.c:428 ../calendar/gui/itip-utils.c:454
+#: ../calendar/gui/itip-utils.c:427 ../calendar/gui/itip-utils.c:453
#: ../plugins/itip-formatter/itip-formatter.c:1395
msgid "Declined"
msgstr "辞退済"
@@ -7109,7 +7130,7 @@ msgstr "応答者ステータスã®æ›´æ–°"
msgid "Send Latest Information"
msgstr "最新情報ã®é€ä¿¡"
-#: ../calendar/gui/e-itip-control.c:2375 ../calendar/gui/itip-utils.c:442
+#: ../calendar/gui/e-itip-control.c:2375 ../calendar/gui/itip-utils.c:441
#: ../mail/mail-send-recv.c:414 ../mail/mail-send-recv.c:466
#: ../ui/evolution-mail-global.xml.h:1
msgid "Cancel"
@@ -7319,7 +7340,7 @@ msgstr "å¿…é ˆãªäººé”ã¨ã²ã¨ã¤ã®ãƒªã‚½ãƒ¼ã‚¹(_O)"
msgid "Enter the password for %s"
msgstr "%s ã®ãƒ‘スワードを入力ã—ã¦ä¸‹ã•ã„"
-#: ../calendar/gui/e-tasks.c:763 ../calendar/gui/gnome-cal.c:2373
+#: ../calendar/gui/e-tasks.c:763 ../calendar/gui/gnome-cal.c:2372
#, c-format
msgid ""
"Error on %s:\n"
@@ -7377,22 +7398,22 @@ msgstr "カスタム表示ã®ä¿å­˜"
msgid "Define Views..."
msgstr "ビューã®å®šç¾©..."
-#: ../calendar/gui/gnome-cal.c:2223
+#: ../calendar/gui/gnome-cal.c:2222
#, c-format
msgid "Loading appointments at %s"
msgstr "%s ã®äºˆå®šã®èª­ã¿è¾¼ã¿"
-#: ../calendar/gui/gnome-cal.c:2242
+#: ../calendar/gui/gnome-cal.c:2241
#, c-format
msgid "Loading tasks at %s"
msgstr "%s ã®ã‚¿ã‚¹ã‚¯ã®èª­ã¿è¾¼ã¿"
-#: ../calendar/gui/gnome-cal.c:2339
+#: ../calendar/gui/gnome-cal.c:2338
#, c-format
msgid "Opening %s"
msgstr "%s ã‚’é–‹ãã¾ã™"
-#: ../calendar/gui/gnome-cal.c:3229
+#: ../calendar/gui/gnome-cal.c:3228
msgid "Purging"
msgstr "抹消中"
@@ -7452,57 +7473,57 @@ msgstr "9 月"
msgid "_Select Today"
msgstr "今日ã«ã™ã‚‹(_S)"
-#: ../calendar/gui/itip-utils.c:271 ../calendar/gui/itip-utils.c:319
-#: ../calendar/gui/itip-utils.c:351
+#: ../calendar/gui/itip-utils.c:270 ../calendar/gui/itip-utils.c:318
+#: ../calendar/gui/itip-utils.c:350
msgid "An organizer must be set."
msgstr "主催者をセットã—ã¦ä¸‹ã•ã„"
-#: ../calendar/gui/itip-utils.c:306
+#: ../calendar/gui/itip-utils.c:305
msgid "At least one attendee is necessary"
msgstr "最低一åã®å‡ºå¸­è€…ãŒå¿…è¦ã§ã™"
-#: ../calendar/gui/itip-utils.c:394 ../calendar/gui/itip-utils.c:503
+#: ../calendar/gui/itip-utils.c:393 ../calendar/gui/itip-utils.c:502
msgid "Event information"
msgstr "イベント情報"
-#: ../calendar/gui/itip-utils.c:396 ../calendar/gui/itip-utils.c:505
+#: ../calendar/gui/itip-utils.c:395 ../calendar/gui/itip-utils.c:504
msgid "Task information"
msgstr "タスク情報"
-#: ../calendar/gui/itip-utils.c:398 ../calendar/gui/itip-utils.c:507
+#: ../calendar/gui/itip-utils.c:397 ../calendar/gui/itip-utils.c:506
msgid "Journal information"
msgstr "ジャーナル情報"
-#: ../calendar/gui/itip-utils.c:400 ../calendar/gui/itip-utils.c:525
+#: ../calendar/gui/itip-utils.c:399 ../calendar/gui/itip-utils.c:524
msgid "Free/Busy information"
msgstr "予定ã®æœ‰ç„¡"
-#: ../calendar/gui/itip-utils.c:402
+#: ../calendar/gui/itip-utils.c:401
msgid "Calendar information"
msgstr "カレンダ情報"
-#: ../calendar/gui/itip-utils.c:438
+#: ../calendar/gui/itip-utils.c:437
msgid "Updated"
msgstr "更新済"
-#: ../calendar/gui/itip-utils.c:446
+#: ../calendar/gui/itip-utils.c:445
msgid "Refresh"
msgstr "リフレッシュ"
-#: ../calendar/gui/itip-utils.c:450
+#: ../calendar/gui/itip-utils.c:449
msgid "Counter-proposal"
msgstr "カウンタープロãƒãƒ¼ã‚¶ãƒ«"
-#: ../calendar/gui/itip-utils.c:521
+#: ../calendar/gui/itip-utils.c:520
#, c-format
msgid "Free/Busy information (%s to %s)"
msgstr "予定ã®æœ‰ç„¡ (%s ã‹ã‚‰ %s)"
-#: ../calendar/gui/itip-utils.c:531
+#: ../calendar/gui/itip-utils.c:530
msgid "iCalendar information"
msgstr "iCalendar 情報"
-#: ../calendar/gui/itip-utils.c:673
+#: ../calendar/gui/itip-utils.c:672
msgid "You must be an attendee of the event."
msgstr "イベントã®å‡ºå¸­ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
@@ -7530,28 +7551,19 @@ msgstr ""
"\n"
"Evolution ãŒãŠä½¿ã„ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’移行ã—ã¦ã„ã‚‹é–“ã€å°‘々ãŠå¾…ã¡ä¸‹ã•ã„..."
-#: ../calendar/gui/migration.c:381
-msgid "Birthdays & Anniversaries"
-msgstr "誕生日ã¨è¨˜å¿µæ—¥"
-
-#. Create the Webcal source group
-#: ../calendar/gui/migration.c:479 ../calendar/gui/migration.c:572
-msgid "On The Web"
-msgstr "ウェブ"
-
#. FIXME: set proper domain/code
-#: ../calendar/gui/migration.c:738 ../calendar/gui/migration.c:905
+#: ../calendar/gui/migration.c:745 ../calendar/gui/migration.c:912
msgid "Unable to migrate old settings from evolution/config.xmldb"
msgstr "${HOME}/evolution/config.xmldb ã‹ã‚‰å¤ã„設定を移行ã§ãã¾ã›ã‚“"
#. FIXME: domain/code
-#: ../calendar/gui/migration.c:767
+#: ../calendar/gui/migration.c:774
#, c-format
msgid "Unable to migrate calendar `%s'"
msgstr "カレンダ '%s' を移行ã§ãã¾ã›ã‚“"
#. FIXME: domain/code
-#: ../calendar/gui/migration.c:934
+#: ../calendar/gui/migration.c:941
#, c-format
msgid "Unable to migrate tasks `%s'"
msgstr "タスク '%s' を移行ã§ãã¾ã›ã‚“"
@@ -7779,74 +7791,74 @@ msgstr "å°åˆ·ãƒ—レビュー"
msgid "Print Item"
msgstr "アイテムã®å°åˆ·"
-#: ../calendar/gui/tasks-component.c:328
+#: ../calendar/gui/tasks-component.c:428
msgid "New Task List"
msgstr "æ–°ã—ã„タスク一覧"
-#: ../calendar/gui/tasks-component.c:404
+#: ../calendar/gui/tasks-component.c:504
#, c-format
msgid "%d task"
msgid_plural "%d tasks"
msgstr[0] "%d 個ã®ã‚¿ã‚¹ã‚¯"
msgstr[1] "%d 個ã®ã‚¿ã‚¹ã‚¯"
-#: ../calendar/gui/tasks-component.c:406 ../mail/mail-component.c:523
+#: ../calendar/gui/tasks-component.c:506 ../mail/mail-component.c:544
#, c-format
msgid ", %d selected"
msgid_plural ", %d selected"
msgstr[0] ", é¸æŠžæ¸ˆ %d 個"
msgstr[1] ", é¸æŠžæ¸ˆ %d 個"
-#: ../calendar/gui/tasks-component.c:453
+#: ../calendar/gui/tasks-component.c:553
msgid "Failed upgrading tasks."
msgstr "タスクã®ç§»è¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../calendar/gui/tasks-component.c:747
+#: ../calendar/gui/tasks-component.c:847
#, c-format
msgid "Unable to open the task list '%s' for creating events and meetings"
msgstr "イベントã¨ä¼šè­°ã®ä½œæˆã«å¿…è¦ãªã‚¿ã‚¹ã‚¯ä¸€è¦§ '%s' ã‚’é–‹ã‘ã¾ã›ã‚“"
-#: ../calendar/gui/tasks-component.c:762
+#: ../calendar/gui/tasks-component.c:862
msgid "There is no calendar available for creating tasks"
msgstr "タスクを作æˆã§ãるカレンダãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../calendar/gui/tasks-component.c:856
+#: ../calendar/gui/tasks-component.c:956
msgid "Task Source Selector"
msgstr "タスクã®æ ¼ç´å ´æ‰€ã®é¸æŠž"
-#: ../calendar/gui/tasks-component.c:1039
+#: ../calendar/gui/tasks-component.c:1139
msgid "New task"
msgstr "æ–°è¦ã®ã‚¿ã‚¹ã‚¯"
-#: ../calendar/gui/tasks-component.c:1040
+#: ../calendar/gui/tasks-component.c:1140
msgid "_Task"
msgstr "タスク(_T)"
-#: ../calendar/gui/tasks-component.c:1041
+#: ../calendar/gui/tasks-component.c:1141
msgid "Create a new task"
msgstr "æ–°ã—ã„タスクを作æˆã—ã¾ã™"
-#: ../calendar/gui/tasks-component.c:1047
+#: ../calendar/gui/tasks-component.c:1147
msgid "New assigned task"
msgstr "æ–°ã—ã„タスクã®å‰²å½“ã¦"
-#: ../calendar/gui/tasks-component.c:1048
+#: ../calendar/gui/tasks-component.c:1148
msgid "Assigne_d Task"
msgstr "タスクã®å‰²å½“ã¦(_D)"
-#: ../calendar/gui/tasks-component.c:1049
+#: ../calendar/gui/tasks-component.c:1149
msgid "Create a new assigned task"
msgstr "æ–°ã—ã„タスクã®å‰²ã‚Šå½“ã¦ã‚’作æˆã—ã¾ã™"
-#: ../calendar/gui/tasks-component.c:1055
+#: ../calendar/gui/tasks-component.c:1155
msgid "New task list"
msgstr "æ–°ã—ã„タスク一覧"
-#: ../calendar/gui/tasks-component.c:1056
+#: ../calendar/gui/tasks-component.c:1156
msgid "Task l_ist"
msgstr "タスク一覧(_I)"
-#: ../calendar/gui/tasks-component.c:1057
+#: ../calendar/gui/tasks-component.c:1157
msgid "Create a new task list"
msgstr "æ–°ã—ã„タスク一覧を作æˆã—ã¾ã™"
@@ -9562,8 +9574,8 @@ msgstr "タイトルãªã—ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
msgid "Open File"
msgstr "ファイルを開ã"
-#: ../composer/e-msg-composer.c:2001 ../mail/em-account-editor.c:578
-#: ../mail/em-account-editor.c:623 ../mail/em-account-editor.c:690
+#: ../composer/e-msg-composer.c:2001 ../mail/em-account-editor.c:588
+#: ../mail/em-account-editor.c:633 ../mail/em-account-editor.c:700
msgid "Autogenerated"
msgstr "自動生æˆ"
@@ -9576,7 +9588,7 @@ msgstr "ç½²å(_G):"
msgid "Compose a message"
msgstr "メッセージã®ä½œæˆ"
-#: ../composer/e-msg-composer.c:4541
+#: ../composer/e-msg-composer.c:4542
msgid ""
"<b>(The composer contains a non-text message body, which cannot be edited.)"
"<b>"
@@ -9746,7 +9758,7 @@ msgstr ""
"æ­£ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® gtkhtml 㨠libgtkhml ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ä¸‹"
"ã•ã„。"
-#: ../data/evolution.desktop.in.in.h:1 ../shell/main.c:520
+#: ../data/evolution.desktop.in.in.h:1 ../shell/main.c:521
msgid "Evolution"
msgstr "Evolution-2.2"
@@ -9877,14 +9889,6 @@ msgstr ""
msgid "Overwrite file?"
msgstr "ファイルを上書ãã—ã¾ã™ã‹ï¼Ÿ"
-#: ../e-util/e-passwords.c:472
-msgid "_Remember this password"
-msgstr "ã“ã®ãƒ‘スワードを記憶ã™ã‚‹(_R)"
-
-#: ../e-util/e-passwords.c:473
-msgid "_Remember this password for the remainder of this session"
-msgstr "ã“ã®ãƒ‘スワードをã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ç”¨ã«ä¿å­˜ã™ã‚‹(_R)"
-
#. 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
@@ -10116,20 +10120,20 @@ 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:75
+#: ../mail/em-migrate.c:1041 ../mail/mail-config.c:76
#: ../mail/mail-config.glade.h:90
msgid "Important"
msgstr "é‡è¦"
#. forest green
-#: ../filter/filter-label.c:124 ../mail/em-migrate.c:1014
-#: ../mail/mail-config.c:78 ../mail/mail-config.glade.h:140
+#: ../filter/filter-label.c:124 ../mail/em-migrate.c:1044
+#: ../mail/mail-config.c:79 ../mail/mail-config.glade.h:140
msgid "To Do"
msgstr "ToDo"
#. blue
-#: ../filter/filter-label.c:125 ../mail/em-migrate.c:1015
-#: ../mail/mail-config.c:79 ../mail/mail-config.glade.h:93
+#: ../filter/filter-label.c:125 ../mail/em-migrate.c:1045
+#: ../mail/mail-config.c:80 ../mail/mail-config.glade.h:93
msgid "Later"
msgstr "ä¿ç•™"
@@ -10253,7 +10257,7 @@ msgstr "ルールã®è¿½åŠ "
msgid "Edit Rule"
msgstr "ルールã®ç·¨é›†"
-#: ../filter/rule-editor.c:685
+#: ../filter/rule-editor.c:693
msgid "Rule name"
msgstr "ルールå"
@@ -10298,11 +10302,11 @@ msgstr "Evolution メール・コンãƒãƒ¼ã‚¶è¨­å®šã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«"
msgid "Evolution Mail preferences control"
msgstr "Evolution メール設定コントロール"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:11 ../mail/em-folder-view.c:471
+#: ../mail/GNOME_Evolution_Mail.server.in.in.h:11 ../mail/em-folder-view.c:469
#: ../mail/importers/elm-importer.c:418
#: ../mail/importers/netscape-importer.c:1902
-#: ../mail/importers/pine-importer.c:474 ../mail/mail-component.c:536
-#: ../mail/mail-component.c:587
+#: ../mail/importers/pine-importer.c:474 ../mail/mail-component.c:557
+#: ../mail/mail-component.c:608
msgid "Mail"
msgstr "メール"
@@ -10319,12 +10323,12 @@ msgstr "メールã®è¨­å®š"
msgid "_Mail"
msgstr "メール(_M)"
-#: ../mail/em-account-editor.c:377
+#: ../mail/em-account-editor.c:387
#, c-format
msgid "%s License Agreement"
msgstr "%s ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹åŒæ„書"
-#: ../mail/em-account-editor.c:384
+#: ../mail/em-account-editor.c:394
#, c-format
msgid ""
"\n"
@@ -10337,47 +10341,67 @@ msgstr ""
"注æ„æ·±ã読んã§ã€åŒæ„ã™ã‚‹å ´åˆã¯\n"
"ãƒã‚§ãƒƒã‚¯ãƒ»ãƒœãƒƒã‚¯ã‚¹ã«ãƒã‚§ãƒƒã‚¯ã‚’入れã¦ä¸‹ã•ã„。\n"
-#: ../mail/em-account-editor.c:454 ../mail/em-filter-folder-element.c:237
+#: ../mail/em-account-editor.c:464 ../mail/em-filter-folder-element.c:237
#: ../mail/em-vfolder-rule.c:494
msgid "Select Folder"
msgstr "フォルダã®é¸æŠž"
-#: ../mail/em-account-editor.c:1817
+#: ../mail/em-account-editor.c:1664 ../mail/mail-config.glade.h:89
+msgid "Identity"
+msgstr "身元情報"
+
+#: ../mail/em-account-editor.c:1700 ../mail/mail-config.glade.h:114
+msgid "Receiving Email"
+msgstr "メールã®å—ä¿¡"
+
+#: ../mail/em-account-editor.c:1877
msgid "Automatically check for _new mail every"
msgstr "æ–°ç€ãƒ¡ãƒ¼ãƒ«ã‚’自動的ã«ãƒã‚§ãƒƒã‚¯ã™ã‚‹(_N)"
+#: ../mail/em-account-editor.c:2045 ../mail/mail-config.glade.h:124
+msgid "Sending Email"
+msgstr "メールã®é€ä¿¡"
+
+#: ../mail/em-account-editor.c:2089 ../mail/mail-config.glade.h:67
+msgid "Defaults"
+msgstr "デフォルト"
+
+#: ../mail/em-account-editor.c:2148 ../mail/mail-config.glade.h:119
+msgid "Security"
+msgstr "セキュリティ"
+
#. Most sections for this is auto-generated fromt the camel config
-#: ../mail/em-account-editor.c:2086 ../mail/em-account-editor.c:2164
+#: ../mail/em-account-editor.c:2185 ../mail/em-account-editor.c:2260
msgid "Receiving Options"
msgstr "返信オプション"
-#: ../mail/em-account-editor.c:2087 ../mail/em-account-editor.c:2165
+#: ../mail/em-account-editor.c:2186 ../mail/em-account-editor.c:2261
msgid "Checking for New Mail"
msgstr "æ–°ç€ãƒ¡ãƒ¼ãƒ«ã®ãƒã‚§ãƒƒã‚¯"
-#: ../mail/em-account-editor.c:2509 ../mail/mail-config.glade.h:33
+#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:33
msgid "Account Editor"
msgstr "アカウント・エディタ"
-#: ../mail/em-account-editor.c:2509 ../mail/mail-config.glade.h:79
+#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:79
msgid "Evolution Account Assistant"
msgstr "Evolution アカウント・アシスタント"
#. translators: default account indicator
-#: ../mail/em-account-prefs.c:412
+#: ../mail/em-account-prefs.c:428
msgid "[Default]"
msgstr "[デフォルト]"
-#: ../mail/em-account-prefs.c:466
+#: ../mail/em-account-prefs.c:482
msgid "Account name"
msgstr "アカウントå"
-#: ../mail/em-account-prefs.c:468
+#: ../mail/em-account-prefs.c:484
msgid "Protocol"
msgstr "プロトコル"
#: ../mail/em-composer-prefs.c:306 ../mail/em-composer-prefs.c:429
-#: ../mail/mail-config.c:934
+#: ../mail/mail-config.c:935
msgid "Unnamed"
msgstr "åå‰ãªã—"
@@ -10393,18 +10417,18 @@ msgstr "ç½²åスクリプトã®è¿½åŠ "
msgid "Signature(s)"
msgstr "ç½²å"
-#: ../mail/em-composer-utils.c:910
+#: ../mail/em-composer-utils.c:911
msgid "-------- Forwarded Message --------"
msgstr "-------- 転é€ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ --------"
-#: ../mail/em-composer-utils.c:1526
+#: ../mail/em-composer-utils.c:1521
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:1573
+#: ../mail/em-composer-utils.c:1568
msgid ""
"On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} "
"${TimeZone}, ${Sender} wrote:"
@@ -10550,7 +10574,7 @@ msgstr "ジャンク"
msgid "Junk Test"
msgstr "ジャンクã®ãƒ†ã‚¹ãƒˆ"
-#: ../mail/em-filter-i18n.h:37 ../mail/em-folder-view.c:997
+#: ../mail/em-filter-i18n.h:37 ../mail/em-folder-view.c:992
#: ../widgets/misc/e-expander.c:189
msgid "Label"
msgstr "ラベル"
@@ -10707,7 +10731,7 @@ msgid "Create New Folder"
msgstr "æ–°è¦ãƒ•ã‚©ãƒ«ãƒ€ã®ä½œæˆ"
#: ../mail/em-folder-selector.c:166 ../mail/em-folder-tree.c:2527
-#: ../mail/mail-component.c:739 ../plugins/shared-folder/install-shared.c:144
+#: ../mail/mail-component.c:770 ../plugins/shared-folder/install-shared.c:144
#: ../plugins/shared-folder/share-folder-common.c:345
msgid "Specify where to create the folder:"
msgstr "フォルダを作æˆã™ã‚‹å ´æ‰€ã‚’指定ã—ã¦ä¸‹ã•ã„:"
@@ -10730,20 +10754,20 @@ msgstr "仮想フォルダ"
msgid "UNMATCHED"
msgstr "該当ã—ãªã„ã‚‚ã®"
-#: ../mail/em-folder-tree-model.c:468 ../mail/mail-component.c:139
+#: ../mail/em-folder-tree-model.c:468 ../mail/mail-component.c:142
msgid "Drafts"
msgstr "è‰æ¡ˆ"
#. translators: standard local mailbox names
-#: ../mail/em-folder-tree-model.c:471 ../mail/mail-component.c:138
+#: ../mail/em-folder-tree-model.c:471 ../mail/mail-component.c:141
msgid "Inbox"
msgstr "å—ä¿¡ç®±"
-#: ../mail/em-folder-tree-model.c:474 ../mail/mail-component.c:140
+#: ../mail/em-folder-tree-model.c:474 ../mail/mail-component.c:143
msgid "Outbox"
msgstr "é€ä¿¡ãƒˆãƒ¬ã‚¤"
-#: ../mail/em-folder-tree-model.c:476 ../mail/mail-component.c:141
+#: ../mail/em-folder-tree-model.c:476 ../mail/mail-component.c:144
msgid "Sent"
msgstr "é€ä¿¡æ¸ˆã¿"
@@ -10765,12 +10789,12 @@ msgstr "フォルダ %s ã®ç§»å‹•ä¸­"
msgid "Copying folder %s"
msgstr "フォルダ %s ã®ã‚³ãƒ”ー中"
-#: ../mail/em-folder-tree.c:930 ../mail/message-list.c:1617
+#: ../mail/em-folder-tree.c:930 ../mail/message-list.c:1612
#, c-format
msgid "Moving messages into folder %s"
msgstr "フォルダ %s ã¸ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ç§»å‹•ä¸­"
-#: ../mail/em-folder-tree.c:932 ../mail/message-list.c:1619
+#: ../mail/em-folder-tree.c:932 ../mail/message-list.c:1614
#, c-format
msgid "Copying messages into folder %s"
msgstr "フォルダ %s ã¸ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ã‚³ãƒ”ー中"
@@ -10798,13 +10822,13 @@ msgid "Copying `%s' to `%s'"
msgstr "'%s' ã‚’ '%s' ã¸ã‚³ãƒ”ー中"
#: ../mail/em-folder-tree.c:2297 ../mail/em-folder-tree.c:2311
-#: ../mail/em-folder-view.c:860 ../mail/em-folder-view.c:875
+#: ../mail/em-folder-view.c:862 ../mail/em-folder-view.c:877
#: ../mail/importers/evolution-mbox-importer.c:120
#: ../mail/importers/evolution-outlook-importer.c:134
msgid "Select folder"
msgstr "フォルダã®é¸æŠž"
-#: ../mail/em-folder-tree.c:2297 ../mail/em-folder-view.c:875
+#: ../mail/em-folder-tree.c:2297 ../mail/em-folder-view.c:877
msgid "C_opy"
msgstr "コピー(_O)"
@@ -10814,7 +10838,7 @@ msgstr "コピー(_O)"
msgid "Creating folder `%s'"
msgstr "フォルダ '%s' ã®ä½œæˆä¸­"
-#: ../mail/em-folder-tree.c:2527 ../mail/mail-component.c:739
+#: ../mail/em-folder-tree.c:2527 ../mail/mail-component.c:770
#: ../plugins/shared-folder/install-shared.c:144
#: ../plugins/shared-folder/share-folder-common.c:345
msgid "Create folder"
@@ -10861,143 +10885,130 @@ msgstr "æ–°ã—ã„フォルダ(_N)"
msgid "_Rename..."
msgstr "åå‰ã®å¤‰æ›´(_R)..."
-#: ../mail/em-folder-view.c:965 ../ui/evolution-mail-message.xml.h:109
-msgid "_Edit as New Message..."
-msgstr "æ–°è¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨ã—ã¦ç·¨é›†(_E)..."
-
-#: ../mail/em-folder-view.c:967
-msgid "_Print"
-msgstr "å°åˆ·(_P)"
-
-#: ../mail/em-folder-view.c:970 ../ui/evolution-mail-message.xml.h:123
-msgid "_Reply to Sender"
-msgstr "差出人ã¸è¿”ä¿¡(_R)"
-
-#: ../mail/em-folder-view.c:971 ../mail/em-popup.c:497
-#: ../ui/evolution-mail-message.xml.h:88
-msgid "Reply to _List"
-msgstr "メーリング・リストã¸è¿”ä¿¡(_L)"
-
-#: ../mail/em-folder-view.c:972 ../mail/em-popup.c:498
+#: ../mail/em-folder-view.c:970 ../mail/em-popup.c:499
#: ../ui/evolution-mail-message.xml.h:87
msgid "Reply to _All"
msgstr "全員ã¸è¿”ä¿¡(_A)"
-#: ../mail/em-folder-view.c:973 ../mail/em-popup.c:500
+#: ../mail/em-folder-view.c:971 ../ui/evolution-mail-message.xml.h:123
+msgid "_Reply to Sender"
+msgstr "差出人ã¸è¿”ä¿¡(_R)"
+
+#: ../mail/em-folder-view.c:972 ../mail/em-popup.c:501
#: ../ui/evolution-mail-message.xml.h:110
msgid "_Forward"
msgstr "転é€(_F)"
-#: ../mail/em-folder-view.c:976
-msgid "Follo_w Up..."
-msgstr "フォロー・アップ(_W)..."
+#: ../mail/em-folder-view.c:975 ../ui/evolution-mail-message.xml.h:109
+msgid "_Edit as New Message..."
+msgstr "æ–°è¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨ã—ã¦ç·¨é›†(_E)..."
#: ../mail/em-folder-view.c:977
-msgid "Fla_g Completed"
-msgstr "完了フラグã®ä»˜ä¸Ž(_G)"
-
-#: ../mail/em-folder-view.c:978
-msgid "Cl_ear Flag"
-msgstr "フラグã®è§£é™¤(_E)"
+msgid "_Print"
+msgstr "å°åˆ·(_P)"
-#: ../mail/em-folder-view.c:981 ../ui/evolution-mail-message.xml.h:50
-msgid "Mar_k as Read"
-msgstr "既読ã¨ã—ã¦ãƒžãƒ¼ã‚¯(_K)"
+#: ../mail/em-folder-view.c:981
+msgid "U_ndelete"
+msgstr "削除ã®å–り消ã—(_N)"
#: ../mail/em-folder-view.c:982
-msgid "Mark as _Unread"
-msgstr "未読ã¨ã—ã¦ãƒžãƒ¼ã‚¯(_U)"
+msgid "Mo_ve to Folder..."
+msgstr "フォルダã¸ç§»å‹•(_V)..."
+
+#: ../mail/em-folder-view.c:983 ../ui/evolution-addressbook.xml.h:32
+msgid "_Copy to Folder..."
+msgstr "フォルダã¸ã‚³ãƒ”ー(_C)..."
-#: ../mail/em-folder-view.c:983
+#: ../mail/em-folder-view.c:986
msgid "Mark as _Important"
msgstr "é‡è¦ã¨ã—ã¦ãƒžãƒ¼ã‚¯(_I)"
-#: ../mail/em-folder-view.c:984
+#: ../mail/em-folder-view.c:987
msgid "_Mark as Unimportant"
msgstr "é‡è¦ã§ãªã„ã¨ã—ã¦ãƒžãƒ¼ã‚¯(_M)"
-#: ../mail/em-folder-view.c:985 ../ui/evolution-mail-message.xml.h:54
+#: ../mail/em-folder-view.c:988 ../ui/evolution-mail-message.xml.h:54
msgid "Mark as _Junk"
msgstr "ジャンクã¨ã—ã¦ãƒžãƒ¼ã‚¯(_J)"
-#: ../mail/em-folder-view.c:986 ../ui/evolution-mail-message.xml.h:55
+#: ../mail/em-folder-view.c:989 ../ui/evolution-mail-message.xml.h:55
msgid "Mark as _Not Junk"
msgstr "ジャンクã§ã¯ãªã„ã¨ã—ã¦ãƒžãƒ¼ã‚¯(_N)"
#: ../mail/em-folder-view.c:990
-msgid "U_ndelete"
-msgstr "削除ã®å–り消ã—(_N)"
+msgid "Mark for Follo_w Up..."
+msgstr "フォロー・アップã¨ã—ã¦ãƒžãƒ¼ã‚¯(_W)..."
-#: ../mail/em-folder-view.c:993
-msgid "Mo_ve to Folder..."
-msgstr "フォルダã¸ç§»å‹•(_V)..."
+#: ../mail/em-folder-view.c:998
+msgid "Fla_g Completed"
+msgstr "完了フラグã®ä»˜ä¸Ž(_G)"
-#: ../mail/em-folder-view.c:994 ../ui/evolution-addressbook.xml.h:32
-msgid "_Copy to Folder..."
-msgstr "フォルダã¸ã‚³ãƒ”ー(_C)..."
+#: ../mail/em-folder-view.c:999
+msgid "Cl_ear Flag"
+msgstr "フラグã®è§£é™¤(_E)"
#: ../mail/em-folder-view.c:1002
-msgid "Add Sender to Address_book"
-msgstr "差出人をアドレス帳ã«è¿½åŠ "
-
-#: ../mail/em-folder-view.c:1005
-msgid "Appl_y Filters"
-msgstr "フィルタã®é©ç”¨(_Y)"
-
-#: ../mail/em-folder-view.c:1006
-msgid "F_ilter Junk"
-msgstr "ジャンク・フィルタã®é©ç”¨(_I)"
-
-#: ../mail/em-folder-view.c:1009
msgid "Crea_te Rule From Message"
msgstr "メッセージã‹ã‚‰ãƒ«ãƒ¼ãƒ«ã®ä½œæˆ(_T)"
-#: ../mail/em-folder-view.c:1010
+#: ../mail/em-folder-view.c:1003
msgid "vFolder on _Subject"
msgstr "件åã®ä»®æƒ³ãƒ•ã‚©ãƒ«ãƒ€(_S)"
-#: ../mail/em-folder-view.c:1011
+#: ../mail/em-folder-view.c:1004
msgid "vFolder on Se_nder"
msgstr "差出人ã®ä»®æƒ³ãƒ•ã‚©ãƒ«ãƒ€(_N)"
-#: ../mail/em-folder-view.c:1012
+#: ../mail/em-folder-view.c:1005
msgid "vFolder on _Recipients"
msgstr "宛先ã®ä»®æƒ³ãƒ•ã‚©ãƒ«ãƒ€(_R)"
-#: ../mail/em-folder-view.c:1013
+#: ../mail/em-folder-view.c:1006
msgid "vFolder on Mailing _List"
msgstr "メーリング・リストã®ä»®æƒ³ãƒ•ã‚©ãƒ«ãƒ€(_L)"
-#: ../mail/em-folder-view.c:1017
+#: ../mail/em-folder-view.c:1010
msgid "Filter on Sub_ject"
msgstr "件åã®ãƒ•ã‚£ãƒ«ã‚¿(_J)"
-#: ../mail/em-folder-view.c:1018
+#: ../mail/em-folder-view.c:1011
msgid "Filter on Sen_der"
msgstr "差出人ã®ãƒ•ã‚£ãƒ«ã‚¿(_D)"
-#: ../mail/em-folder-view.c:1019
+#: ../mail/em-folder-view.c:1012
msgid "Filter on Re_cipients"
msgstr "宛先ã®ãƒ•ã‚£ãƒ«ã‚¿(_C)"
-#: ../mail/em-folder-view.c:1020
+#: ../mail/em-folder-view.c:1013
msgid "Filter on _Mailing List"
msgstr "メーリング・リストã®ãƒ•ã‚£ãƒ«ã‚¿(_M)"
#. default charset used in mail view
-#: ../mail/em-folder-view.c:1797 ../mail/em-folder-view.c:1841
+#: ../mail/em-folder-view.c:1844 ../mail/em-folder-view.c:1888
msgid "Default"
msgstr "デフォルト"
-#: ../mail/em-folder-view.c:1940
+#: ../mail/em-folder-view.c:1987
msgid "Print Message"
msgstr "メッセージã®å°åˆ·"
-#: ../mail/em-folder-view.c:2229
+#: ../mail/em-folder-view.c:2295
msgid "_Copy Link Location"
msgstr "リンク先ã®ã‚³ãƒ”ー(_C)"
-#: ../mail/em-folder-view.c:2515
+#: ../mail/em-folder-view.c:2297
+msgid "Create _vFolder"
+msgstr "仮想フォルダã®ä½œæˆ(_V)"
+
+#: ../mail/em-folder-view.c:2298
+msgid "_From this Address"
+msgstr "ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰(_F)"
+
+#: ../mail/em-folder-view.c:2299
+msgid "_To this Address"
+msgstr "ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¸(_T)"
+
+#: ../mail/em-folder-view.c:2568
#, c-format
msgid "Click to mail %s"
msgstr "クリックã™ã‚‹ã¨ %s ã¸ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’作æˆã—ã¾ã™"
@@ -11266,7 +11277,7 @@ msgstr "ç½²åを検証ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
msgid "Unknown error verifying signature"
msgstr "ç½²åを検証ã™ã‚‹éš›ã«ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-#: ../mail/em-junk-filter.c:110
+#: ../mail/em-junk-filter.c:111
msgid "Spamassassin (built-in)"
msgstr "Spamassassin (内蔵)"
@@ -11286,7 +11297,7 @@ msgstr "週ã«ä¸€åº¦"
msgid "Once per month"
msgstr "月ã«ä¸€åº¦"
-#: ../mail/em-migrate.c:1168
+#: ../mail/em-migrate.c:1198
msgid ""
"The location and hierarchy of the Evolution mailbox folders has changed "
"since Evolution 1.x.\n"
@@ -11298,47 +11309,47 @@ msgstr ""
"\n"
"Evolution ãŒãŠä½¿ã„ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’移行ã—ã¦ã„ã‚‹é–“ã€å°‘々ãŠå¾…ã¡ä¸‹ã•ã„..."
-#: ../mail/em-migrate.c:1602
+#: ../mail/em-migrate.c:1632
#, c-format
msgid "Unable to create new folder `%s': %s"
msgstr "æ–°ã—ã„フォルダ '%s' を作æˆã§ãã¾ã›ã‚“: %s"
-#: ../mail/em-migrate.c:1628
+#: ../mail/em-migrate.c:1658
#, c-format
msgid "Unable to copy folder `%s' to `%s': %s"
msgstr "フォルダ '%s' ã‚’ '%s' ã¸ã‚³ãƒ”ーã§ãã¾ã›ã‚“: %s"
-#: ../mail/em-migrate.c:1813
+#: ../mail/em-migrate.c:1843
#, c-format
msgid "Unable to scan for existing mailboxes at `%s': %s"
msgstr "'%s' ã«ã‚ã‚‹å—信箱をスキャンã§ãã¾ã›ã‚“: %s"
-#: ../mail/em-migrate.c:2017
+#: ../mail/em-migrate.c:2047
#, c-format
msgid "Unable to open old POP keep-on-server data `%s': %s"
msgstr "POP keep-on-server ã®ãƒ‡ãƒ¼ã‚¿ '%s' ã‚’é–‹ã‘ã¾ã›ã‚“: %s"
-#: ../mail/em-migrate.c:2031
+#: ../mail/em-migrate.c:2061
#, c-format
msgid "Unable to create POP3 keep-on-server data directory `%s': %s"
msgstr "POP3 keep-on-server ã®ãƒ‡ãƒ¼ã‚¿ãƒ»ãƒ•ã‚©ãƒ«ãƒ€ '%s' を作æˆã§ãã¾ã›ã‚“: %s"
-#: ../mail/em-migrate.c:2060
+#: ../mail/em-migrate.c:2090
#, c-format
msgid "Unable to copy POP3 keep-on-server data `%s': %s"
msgstr "POP3 keep-on-server ã®ãƒ‡ãƒ¼ã‚¿ '%s' をコピーã§ãã¾ã›ã‚“: %s"
-#: ../mail/em-migrate.c:2494 ../mail/em-migrate.c:2506
+#: ../mail/em-migrate.c:2561 ../mail/em-migrate.c:2573
#, c-format
msgid "Failed to create local mail storage `%s': %s"
msgstr "ローカルã®ãƒ¡ãƒ¼ãƒ«ãƒ»ãƒ•ã‚©ãƒ«ãƒ€ '%s' ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-#: ../mail/em-migrate.c:2657
+#: ../mail/em-migrate.c:2693
#, c-format
msgid "Unable to create local mail folders at `%s': %s"
msgstr "'%s' ã«ã‚るローカルã®ãƒ¡ãƒ¼ãƒ«ãƒ»ãƒ•ã‚©ãƒ«ãƒ€ã‚’作æˆã§ãã¾ã›ã‚“: %s"
-#: ../mail/em-migrate.c:2675
+#: ../mail/em-migrate.c:2711
msgid ""
"Unable to read settings from previous Evolution install, `evolution/config."
"xmldb' does not exist or is corrupt."
@@ -11346,36 +11357,40 @@ msgstr ""
"Evolution ã®ä»¥å‰ã®è¨­å®šã‚’読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。'${HOME}/evolution/config."
"xmldb' ãŒå­˜åœ¨ã—ãªã„ã‹ãƒ‡ãƒ¼ã‚¿ãŒå£Šã‚Œã¦ã„ã¾ã™ã€‚"
-#: ../mail/em-popup.c:381
+#: ../mail/em-popup.c:382
msgid "Save As..."
msgstr "別åã§ä¿å­˜..."
-#: ../mail/em-popup.c:400
+#: ../mail/em-popup.c:401
#, c-format
msgid "untitled_image.%s"
msgstr "untitled_image.%s"
-#: ../mail/em-popup.c:494
+#: ../mail/em-popup.c:495
msgid "Set as _Background"
msgstr "å£ç´™ã«ã‚»ãƒƒãƒˆã™ã‚‹(_B)"
-#: ../mail/em-popup.c:496
+#: ../mail/em-popup.c:497
msgid "_Reply to sender"
msgstr "差出人ã¸è¿”ä¿¡(_R)"
-#: ../mail/em-popup.c:548
-msgid "_Open Link in Browser"
-msgstr "リンクをブラウザã§é–‹ã(_O)"
+#: ../mail/em-popup.c:498 ../ui/evolution-mail-message.xml.h:88
+msgid "Reply to _List"
+msgstr "メーリング・リストã¸è¿”ä¿¡(_L)"
#: ../mail/em-popup.c:549
-msgid "Se_nd message to..."
-msgstr "メッセージã®é€ä¿¡(_N)..."
+msgid "_Open Link in Browser"
+msgstr "リンクをブラウザã§é–‹ã(_O)"
#: ../mail/em-popup.c:550
+msgid "_Send New Message To..."
+msgstr "æ–°ã—ã„メッセージã®é€ä¿¡(_S)..."
+
+#: ../mail/em-popup.c:551
msgid "_Add to Addressbook"
msgstr "アドレス帳ã«è¿½åŠ (_A)"
-#: ../mail/em-popup.c:681
+#: ../mail/em-popup.c:666
#, c-format
msgid "Open in %s..."
msgstr "%s ã®ä¸­ã‚’é–‹ãã¾ã™..."
@@ -11422,7 +11437,7 @@ msgid "Add address"
msgstr "ä½æ‰€ã®è¿½åŠ "
#. Drop filename for messages from a mailbox
-#: ../mail/em-utils.c:1055
+#: ../mail/em-utils.c:1071
#, c-format
msgid "Messages from %s"
msgstr "%s ã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
@@ -12117,99 +12132,99 @@ msgstr "Pine"
msgid "Mail to %s"
msgstr "%s ã¸ãƒ¡ãƒ¼ãƒ«"
-#: ../mail/mail-autofilter.c:238
-#, c-format
-msgid "Subject is %s"
-msgstr "件å㯠%s ã§ã™"
-
-#: ../mail/mail-autofilter.c:254
+#: ../mail/mail-autofilter.c:238 ../mail/mail-autofilter.c:277
#, c-format
msgid "Mail from %s"
msgstr "%s ã‹ã‚‰ãƒ¡ãƒ¼ãƒ«"
-#: ../mail/mail-autofilter.c:273
+#: ../mail/mail-autofilter.c:261
+#, c-format
+msgid "Subject is %s"
+msgstr "件å㯠%s ã§ã™"
+
+#: ../mail/mail-autofilter.c:296
#, c-format
msgid "%s mailing list"
msgstr "%s メーリング・リスト"
-#: ../mail/mail-autofilter.c:328
+#: ../mail/mail-autofilter.c:365
msgid "Add Filter Rule"
msgstr "フィルタ・ルールã®è¿½åŠ "
-#: ../mail/mail-component.c:484
+#: ../mail/mail-component.c:505
#, c-format
msgid "%d deleted"
msgid_plural "%d deleted"
msgstr[0] "削除済 %d 通"
msgstr[1] "削除済 %d 通"
-#: ../mail/mail-component.c:486
+#: ../mail/mail-component.c:507
#, c-format
msgid "%d junk"
msgid_plural "%d junk"
msgstr[0] "ジャンク %d 通"
msgstr[1] "ジャンク %d 通"
-#: ../mail/mail-component.c:509
+#: ../mail/mail-component.c:530
#, c-format
msgid "%d draft"
msgid_plural "%d drafts"
msgstr[0] "è‰æ¡ˆ %d 通"
msgstr[1] "è‰æ¡ˆ %d 通"
-#: ../mail/mail-component.c:511
+#: ../mail/mail-component.c:532
#, c-format
msgid "%d sent"
msgid_plural "%d sent"
msgstr[0] "é€ä¿¡æ¸ˆ %d 通"
msgstr[1] "é€ä¿¡æ¸ˆ %d 通"
-#: ../mail/mail-component.c:513
+#: ../mail/mail-component.c:534
#, c-format
msgid "%d unsent"
msgid_plural "%d unsent"
msgstr[0] "未é€ä¿¡ %d 通"
msgstr[1] "未é€ä¿¡ %d 通"
-#: ../mail/mail-component.c:517
+#: ../mail/mail-component.c:538
#, c-format
msgid "%d total"
msgid_plural "%d total"
msgstr[0] "åˆè¨ˆ %d 通"
msgstr[1] "åˆè¨ˆ %d 通"
-#: ../mail/mail-component.c:519
+#: ../mail/mail-component.c:540
#, c-format
msgid ", %d unread"
msgid_plural ", %d unread"
msgstr[0] ", 未読 %d 通"
msgstr[1] ", 未読 %d 通"
-#: ../mail/mail-component.c:691
+#: ../mail/mail-component.c:722
msgid "New Mail Message"
msgstr "æ–°ã—ã„メッセージ"
-#: ../mail/mail-component.c:692
+#: ../mail/mail-component.c:723
msgid "_Mail Message"
msgstr "メッセージ(_M)"
-#: ../mail/mail-component.c:693
+#: ../mail/mail-component.c:724
msgid "Compose a new mail message"
msgstr "æ–°ã—ã„メッセージを作æˆã—ã¾ã™"
-#: ../mail/mail-component.c:699
+#: ../mail/mail-component.c:730
msgid "New Mail Folder"
msgstr "æ–°ã—ã„メール・フォルダ"
-#: ../mail/mail-component.c:700
+#: ../mail/mail-component.c:731
msgid "Mail _Folder"
msgstr "メールã®ãƒ•ã‚©ãƒ«ãƒ€(_F)"
-#: ../mail/mail-component.c:701
+#: ../mail/mail-component.c:732
msgid "Create a new mail folder"
msgstr "æ–°ã—ã„メール・フォルダを作æˆã—ã¾ã™"
-#: ../mail/mail-component.c:848
+#: ../mail/mail-component.c:879
msgid "Failed upgrading Mail settings or folders."
msgstr "メールã®è¨­å®šã¾ãŸã¯é–¢é€£ãƒ•ã‚©ãƒ«ãƒ€ã®ã‚¢ãƒƒãƒ—グレードã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
@@ -12463,10 +12478,6 @@ msgstr "デフォルト(_F)"
msgid "Default character e_ncoding:"
msgstr "デフォルトã®æ–‡å­—エンコード(_N): "
-#: ../mail/mail-config.glade.h:67
-msgid "Defaults"
-msgstr "デフォルト"
-
#: ../mail/mail-config.glade.h:69
msgid "Digitally _sign outgoing messages (by default)"
msgstr "é€ä¿¡ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ãƒ‡ã‚¸ã‚¿ãƒ«ç½²åã™ã‚‹ (デフォルト)(_S)"
@@ -12535,10 +12546,6 @@ msgstr "引用を強調表示ã™ã‚‹(_Q)"
msgid "I_nclude remote tests"
msgstr "リモートã®ãƒ†ã‚¹ãƒˆã‚‚å«ã‚ã‚‹(_N)"
-#: ../mail/mail-config.glade.h:89
-msgid "Identity"
-msgstr "身元情報"
-
#: ../mail/mail-config.glade.h:91
msgid "Inline"
msgstr "インラインã«ã™ã‚‹"
@@ -12623,10 +12630,6 @@ msgstr "ã“ã®ãƒ‘スワードを記憶ã™ã‚‹(_M)"
msgid "Re_ply-To:"
msgstr "返信先(_P):"
-#: ../mail/mail-config.glade.h:114
-msgid "Receiving Email"
-msgstr "メールã®å—ä¿¡"
-
#: ../mail/mail-config.glade.h:115
msgid "Remember _password"
msgstr "ã“ã®ãƒ‘スワードを記憶ã™ã‚‹(_P)"
@@ -12643,10 +12646,6 @@ msgstr "標準フォント(_T):"
msgid "Se_lect..."
msgstr "é¸æŠž(_L)..."
-#: ../mail/mail-config.glade.h:119
-msgid "Security"
-msgstr "セキュリティ"
-
#: ../mail/mail-config.glade.h:120
msgid "Select HTML fixed width font"
msgstr "HTML 表示ã®å›ºå®šå¹…フォントã®é¸æŠž"
@@ -12663,10 +12662,6 @@ msgstr "HtML å¯å¤‰å¹…フォントã®é¸æŠž"
msgid "Select HTML variable width font for printing"
msgstr "å°åˆ·æ™‚ã® HTML å¯å¤‰å¹…フォントã®é¸æŠž"
-#: ../mail/mail-config.glade.h:124
-msgid "Sending Email"
-msgstr "メールã®é€ä¿¡"
-
#: ../mail/mail-config.glade.h:125
msgid "Sending Mail"
msgstr "メールã®é€ä¿¡"
@@ -12877,7 +12872,7 @@ msgstr "メッセージã®æ¤œç´¢"
#: ../mail/mail-dialogs.glade.h:15 ../mail/message-tag-followup.c:295
#: ../mail/message-tags.glade.h:3
msgid "Flag to Follow Up"
-msgstr "フォローアップã™ã‚‹ãƒ•ãƒ©ã‚°"
+msgstr "フォローアップã®ãƒ•ãƒ©ã‚°"
#: ../mail/mail-dialogs.glade.h:16
msgid "Folder Subscriptions"
@@ -12904,8 +12899,8 @@ msgid ""
"The messages you have selected for follow up are listed below.\n"
"Please select a follow up action from the \"Flag\" menu."
msgstr ""
-"フォローアップã¨ã—ã¦æŒ‡å®šã—ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä¸‹è¨˜ã«ä¸€è¦§åŒ–ã•ã‚Œã¦ã„ã¾ã™ã€‚\n"
-"\"フラグ\" メニューã‹ã‚‰ãƒ•ã‚©ãƒ­ãƒ¼ã‚¢ãƒƒãƒ—ã®å†…容をé¸æŠžã—ã¦ä¸‹ã•ã„。"
+"フォローアップã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä¸‹è¨˜ã«ä¸€è¦§åŒ–ã•ã‚Œã¦ã„ã¾ã™ã€‚\n"
+"\"フラグ\" ã‹ã‚‰ãƒ•ã‚©ãƒ­ãƒ¼ã‚¢ãƒƒãƒ—ã®ç¨®é¡žã‚’é¸æŠžã—ã¦ä¸‹ã•ã„。"
#: ../mail/mail-dialogs.glade.h:24
msgid "_Accept License"
@@ -12917,7 +12912,7 @@ msgstr "期日(_D):"
#: ../mail/mail-dialogs.glade.h:26 ../mail/message-tags.glade.h:7
msgid "_Flag:"
-msgstr "フラグ付ã(_F):"
+msgstr "フラグ(_F):"
#: ../mail/mail-dialogs.glade.h:27
msgid "_Subscribe"
@@ -13848,73 +13843,73 @@ msgstr "仮想フォルダã®ç·¨é›†"
msgid "New vFolder"
msgstr "æ–°ã—ã„仮想フォルダ"
-#: ../mail/message-list.c:999
+#: ../mail/message-list.c:994
msgid "Unseen"
msgstr "未読"
-#: ../mail/message-list.c:1000
+#: ../mail/message-list.c:995
msgid "Seen"
msgstr "既読"
-#: ../mail/message-list.c:1001
+#: ../mail/message-list.c:996
msgid "Answered"
msgstr "返答済ã¿"
-#: ../mail/message-list.c:1002
+#: ../mail/message-list.c:997
msgid "Multiple Unseen Messages"
msgstr "複数ã®æœªèª­ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
-#: ../mail/message-list.c:1003
+#: ../mail/message-list.c:998
msgid "Multiple Messages"
msgstr "複数ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
-#: ../mail/message-list.c:1007
+#: ../mail/message-list.c:1002
msgid "Lowest"
msgstr "最も低ã„"
-#: ../mail/message-list.c:1008
+#: ../mail/message-list.c:1003
msgid "Lower"
msgstr "低ã„"
-#: ../mail/message-list.c:1012
+#: ../mail/message-list.c:1007
msgid "Higher"
msgstr "高ã„"
-#: ../mail/message-list.c:1013
+#: ../mail/message-list.c:1008
msgid "Highest"
msgstr "最も高ã„"
-#: ../mail/message-list.c:1341
+#: ../mail/message-list.c:1336
msgid "?"
msgstr "?"
#. strftime format of a time,
#. in 12-hour format, without seconds.
-#: ../mail/message-list.c:1348 ../plugins/itip-formatter/itip-view.c:189
+#: ../mail/message-list.c:1343 ../plugins/itip-formatter/itip-view.c:189
msgid "Today %l:%M %p"
msgstr "今日㮠%p %l時%M分"
-#: ../mail/message-list.c:1357
+#: ../mail/message-list.c:1352
msgid "Yesterday %l:%M %p"
msgstr "昨日㮠%p %l時%M分"
-#: ../mail/message-list.c:1369
+#: ../mail/message-list.c:1364
msgid "%a %l:%M %p"
msgstr "%p %l時%M分 (%a)"
-#: ../mail/message-list.c:1377
+#: ../mail/message-list.c:1372
msgid "%b %d %l:%M %p"
msgstr "%B%e日 %p %l時%M分"
-#: ../mail/message-list.c:1379
+#: ../mail/message-list.c:1374
msgid "%b %d %Y"
msgstr "%Yå¹´ %B%eæ—¥"
-#: ../mail/message-list.c:2046
+#: ../mail/message-list.c:2041
msgid "Message List"
msgstr "メッセージ一覧"
-#: ../mail/message-list.c:3386
+#: ../mail/message-list.c:3384
msgid "Generating message list"
msgstr "メッセージ一覧ã®ä½œæˆä¸­"
@@ -13928,11 +13923,11 @@ msgstr "フラグã®çŠ¶æ…‹"
#: ../mail/message-list.etspec.h:5
msgid "Flagged"
-msgstr "フラグ付ã"
+msgstr "フラグ"
#: ../mail/message-list.etspec.h:6
msgid "Follow Up Flag"
-msgstr "フラグã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚¢ãƒƒãƒ—"
+msgstr "フォローアップã®ãƒ•ãƒ©ã‚°"
#: ../mail/message-list.etspec.h:8
msgid "Original Location"
@@ -13956,7 +13951,7 @@ msgstr "転é€ã—ãªã„"
#: ../mail/message-tag-followup.c:76
msgid "Follow-Up"
-msgstr "フローアップ"
+msgstr "フローアップã™ã‚‹"
#: ../mail/message-tag-followup.c:77
msgid "For Your Information"
@@ -13964,7 +13959,7 @@ msgstr "F.Y.I"
#: ../mail/message-tag-followup.c:78 ../ui/evolution-mail-message.xml.h:42
msgid "Forward"
-msgstr "転é€"
+msgstr "転é€ã™ã‚‹"
#: ../mail/message-tag-followup.c:79
msgid "No Response Necessary"
@@ -13972,15 +13967,15 @@ msgstr "返信ã®å¿…è¦ãªã—"
#: ../mail/message-tag-followup.c:81 ../ui/evolution-mail-message.xml.h:85
msgid "Reply"
-msgstr "返信"
+msgstr "返信ã™ã‚‹"
#: ../mail/message-tag-followup.c:82 ../ui/evolution-mail-message.xml.h:86
msgid "Reply to All"
-msgstr "全員ã¸è¿”ä¿¡"
+msgstr "全員ã¸è¿”ä¿¡ã™ã‚‹"
#: ../mail/message-tag-followup.c:83
msgid "Review"
-msgstr "レビュー"
+msgstr "レビューã™ã‚‹"
#: ../mail/searchtypes.xml.h:1
msgid "Body contains"
@@ -14109,10 +14104,6 @@ msgstr "天気: 快晴"
msgid "Weather: Thunderstorms"
msgstr "天気: 雷雨"
-#: ../plugins/calendar-weather/calendar-weather.c:100
-msgid "Weather"
-msgstr "天気"
-
#: ../plugins/calendar-weather/calendar-weather.c:268
msgid "Select a location"
msgstr "場所ã®é¸æŠž"
@@ -14138,12 +14129,12 @@ msgid "Mark as default folder"
msgstr "デフォルトã®ãƒ•ã‚©ãƒ«ãƒ€ã«ã—ã¾ã™"
#. i18n: "Secure Password Authentication" is an Outlookism
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:53
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:59
msgid "Secure Password"
msgstr "セキュアãªãƒ‘スワード"
#. i18n: "NTLM" probably doesn't translate
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:56
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:62
msgid ""
"This option will connect to the Exchange server using secure password (NTLM) "
"authentication."
@@ -14151,11 +14142,11 @@ msgstr ""
"セキュアãªãƒ‘スワード (NTLM) èªè¨¼ã‚’用ã„㦠Exchange サーãƒã¨æŽ¥ç¶šã™ã‚‹ã‚ªãƒ—ション"
"ã§ã™ã€‚"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:64
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:70
msgid "Plaintext Password"
msgstr "プレーンテキストã®ãƒ‘スワード"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:66
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:72
msgid ""
"This option will connect to the Exchange server using standard plaintext "
"password authentication."
@@ -14164,7 +14155,7 @@ msgstr ""
"プションã§ã™ã€‚"
#. Description section
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:113
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:193
msgid ""
"The message specified below will be automatically sent to \n"
"each person who sends mail to you while you are out of the office."
@@ -14172,37 +14163,39 @@ msgstr ""
"以下ã§æŒ‡å®šã—ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€ã‚ãªãŸãŒå¤–出ã™ã‚‹ã¨ã€\n"
"メールをé€ä¿¡ã—ã¦ããŸäººé”ã«è‡ªå‹•çš„ã«é€ä»˜ã•ã‚Œã¾ã™ã€‚"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:140
-msgid "I am in the office"
-msgstr "ç¾åœ¨ã€ç§ã¯åœ¨å¸­ä¸­ã§ã™"
-
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:154
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:221
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:231
msgid "I am out of the office"
msgstr "ç¾åœ¨ã€ç§ã¯å¤–出中ã§ã™"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:168
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:224
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:228
+msgid "I am in the office"
+msgstr "ç¾åœ¨ã€ç§ã¯åœ¨å¸­ä¸­ã§ã™"
+
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:257
msgid "Out of office Message:"
msgstr "外出中ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸:"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:194
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:302
msgid "Exchange Settings"
msgstr "Exchange ã®è¨­å®š"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:332
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:448
#: ../plugins/exchange-account-setup/exchange-ask-password.c:200
msgid "_OWA Url:"
msgstr "OWA URI(_O):"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:340
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:456
#: ../plugins/exchange-account-setup/exchange-ask-password.c:193
msgid "A_uthenticate"
msgstr "èªè¨¼(_U)"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:457
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:664
msgid "Authentication Type"
msgstr "èªè¨¼ã®ç¨®é¡ž"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:471
+#: ../plugins/exchange-account-setup/exchange-account-setup.c:678
msgid "Ch_eck for Supported Types"
msgstr "サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ãƒã‚§ãƒƒã‚¯ã™ã‚‹(_E)"
@@ -14826,7 +14819,7 @@ msgstr "数値ã®ã‚«ãƒ—セル化:"
msgid "Comma separated value format (.csv)"
msgstr "カンマã§åŒºåˆ‡ã£ãŸå½¢å¼ (.csv)"
-#: ../plugins/save-calendar/ical-format.c:120
+#: ../plugins/save-calendar/ical-format.c:136
msgid "iCalendar format (.ics)"
msgstr "iCalendar å½¢å¼ (.ics)"
@@ -14834,12 +14827,12 @@ msgstr "iCalendar å½¢å¼ (.ics)"
msgid "RDF format (.rdf)"
msgstr "RDF å½¢å¼ (.rdf)"
-#: ../plugins/save-calendar/save-calendar.c:172
-#: ../plugins/save-calendar/save-calendar.c:182
+#: ../plugins/save-calendar/save-calendar.c:171
+#: ../plugins/save-calendar/save-calendar.c:181
msgid "Select destination file"
msgstr "ä¿å­˜å…ˆã®é¸æŠž"
-#: ../plugins/save-calendar/save-calendar.c:217
+#: ../plugins/save-calendar/save-calendar.c:216
#, c-format
msgid ""
"The suggested filename extension of this filetype (%s) is unused in the "
@@ -14987,7 +14980,7 @@ msgstr "プリンタã®è¨­å®š"
msgid "Skip development warning dialog"
msgstr "開発版ã§ã‚ã‚‹ã“ã¨ã‚’警告ã™ã‚‹ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’スキップã™ã‚‹ã‹ã©ã†ã‹"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:11 ../shell/main.c:475
+#: ../shell/apps_evolution_shell.schemas.in.in.h:11 ../shell/main.c:476
msgid "Start in offline mode"
msgstr "オフライン・モードã§èµ·å‹•ã™ã‚‹"
@@ -15255,28 +15248,28 @@ msgstr "フォルダåã«ã¯æ–‡å­— \"#\" ã‚’å«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€
msgid "'.' and '..' are reserved folder names."
msgstr "'.' 㨠'..' ã¯ãƒ•ã‚©ãƒ«ãƒ€åã¨ã—ã¦äºˆç´„済ã¿ã§ã™ã€‚"
-#: ../shell/e-shell-window-commands.c:67
+#: ../shell/e-shell-window-commands.c:69
msgid "The GNOME Pilot tools do not appear to be installed on this system."
msgstr ""
"ã“ã®ã‚·ã‚¹ãƒ†ãƒ ä¸Šã« GNOME パイロット・ツールãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ãªã„よã†ã§ã™ã€‚"
-#: ../shell/e-shell-window-commands.c:75
+#: ../shell/e-shell-window-commands.c:77
#, c-format
msgid "Error executing %s."
msgstr "%s 実行中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-#: ../shell/e-shell-window-commands.c:124
+#: ../shell/e-shell-window-commands.c:126
msgid "Bug buddy is not installed."
msgstr "Bug buddy ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: ../shell/e-shell-window-commands.c:132
+#: ../shell/e-shell-window-commands.c:134
msgid "Bug buddy could not be run."
msgstr "Bug buddy を実行ã§ãã¾ã›ã‚“ã§ã—ãŸ"
#. The translator-credits string is for translators to list
#. * per language credits for translation, displayed in the
#. * about box
-#: ../shell/e-shell-window-commands.c:426
+#: ../shell/e-shell-window-commands.c:501
msgid "translator-credits"
msgstr ""
"相花 毅 <aihana@gnome.gr.jp>\n"
@@ -15285,19 +15278,19 @@ msgstr ""
"Takuo KITAME <kitame@debian.org>\n"
"日本GNOMEユーザー会 <http://www.gnome.gr.jp>"
-#: ../shell/e-shell-window-commands.c:440
+#: ../shell/e-shell-window-commands.c:515
msgid "Groupware Suite"
msgstr "グループウェア・スイートã§ã™ã€‚"
-#: ../shell/e-shell-window-commands.c:681
+#: ../shell/e-shell-window-commands.c:742
msgid "_Work Online"
msgstr "オンラインã§å‹•ä½œ(_W)"
-#: ../shell/e-shell-window-commands.c:694 ../ui/evolution.xml.h:51
+#: ../shell/e-shell-window-commands.c:755 ../ui/evolution.xml.h:51
msgid "_Work Offline"
msgstr "オフラインã§å‹•ä½œ(_W)"
-#: ../shell/e-shell-window-commands.c:707 ../ui/evolution.xml.h:34
+#: ../shell/e-shell-window-commands.c:768 ../ui/evolution.xml.h:34
msgid "Work Offline"
msgstr "オフラインã§å‹•ä½œ"
@@ -15317,37 +15310,37 @@ msgstr ""
"ç¾åœ¨ Evolution ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™ (オンラインã«ã™ã‚‹å ´åˆã¯ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—"
"ã¦ä¸‹ã•ã„)"
-#: ../shell/e-shell-window.c:708
+#: ../shell/e-shell-window.c:713
#, c-format
msgid "Switch to %s"
msgstr "\"%s\" ã¸åˆ‡ã‚Šæ›¿ãˆã¾ã™"
-#: ../shell/e-shell.c:597
+#: ../shell/e-shell.c:598
msgid "Uknown system error."
msgstr "特定ã§ããªã„システム・エラーã§ã™ã€‚"
-#: ../shell/e-shell.c:805 ../shell/e-shell.c:806
+#: ../shell/e-shell.c:800 ../shell/e-shell.c:801
#, c-format
msgid "%ld KB"
msgstr "%ld Kãƒã‚¤ãƒˆ"
-#: ../shell/e-shell.c:1249 ../widgets/misc/e-cell-date-edit.c:256
+#: ../shell/e-shell.c:1254 ../widgets/misc/e-cell-date-edit.c:256
msgid "OK"
msgstr "OK"
-#: ../shell/e-shell.c:1251
+#: ../shell/e-shell.c:1256
msgid "Invalid arguments"
msgstr "ä¸æ­£ãªå¼•æ•°"
-#: ../shell/e-shell.c:1253
+#: ../shell/e-shell.c:1258
msgid "Cannot register on OAF"
msgstr "OAF ã«ç™»éŒ²ã§ãã¾ã›ã‚“"
-#: ../shell/e-shell.c:1255
+#: ../shell/e-shell.c:1260
msgid "Configuration Database not found"
msgstr "データベースã®è¨­å®šãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../shell/e-shell.c:1257
+#: ../shell/e-shell.c:1262
msgid "Generic error"
msgstr "一般的ãªã‚¨ãƒ©ãƒ¼"
@@ -15466,7 +15459,7 @@ msgid "Evolution can import data from the following files:"
msgstr "Evolution ã¯ä»¥ä¸‹ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿å–è¾¼ã¿ãŒå¯èƒ½ã§ã™:"
#. Preview/Alpha/Beta version warning message
-#: ../shell/main.c:237
+#: ../shell/main.c:238
#, no-c-format
msgid ""
"Hi. Thanks for taking the time to download this preview release\n"
@@ -15501,7 +15494,7 @@ msgstr ""
"ç§ãŸã¡ã®æ¿€å‹™ã®çµæžœã«æº€è¶³ã—ã¦ãれるã“ã¨ã‚’願ã„ã€\n"
"ãã—ã¦ã‚ãªãŸã®è²¢çŒ®ã‚’熱心ã«å¾…ã£ã¦ã„ã¾ã™ï¼\n"
-#: ../shell/main.c:261
+#: ../shell/main.c:262
msgid ""
"Thanks\n"
"The Evolution Team\n"
@@ -15509,39 +15502,39 @@ msgstr ""
"æ„Ÿè¬ã—ã¾ã™ã€‚\n"
"Evolution 開発ãƒãƒ¼ãƒ \n"
-#: ../shell/main.c:268
+#: ../shell/main.c:269
msgid "Don't tell me again"
msgstr "ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’二度ã¨è¡¨ç¤ºã—ãªã„"
-#: ../shell/main.c:473
+#: ../shell/main.c:474
msgid "Start Evolution activating the specified component"
msgstr "指定ã—ãŸã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’有効ã«ã—㦠Evolution ã‚’èµ·å‹•ã™ã‚‹"
-#: ../shell/main.c:477
+#: ../shell/main.c:478
msgid "Start in online mode"
msgstr "オンライン・モードã§èµ·å‹•ã™ã‚‹"
-#: ../shell/main.c:480
+#: ../shell/main.c:481
msgid "Forcibly shut down all Evolution components"
msgstr "å…¨ã¦ã® Evolution コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’強制終了ã™ã‚‹"
-#: ../shell/main.c:484
+#: ../shell/main.c:485
msgid "Forcibly re-migrate from Evolution 1.4"
msgstr "Evolution 1.4ç³»ã‹ã‚‰é–¢é€£ãƒ•ã‚¡ã‚¤ãƒ«ã‚’強制的ã«ç§»è¡Œã™ã‚‹"
-#: ../shell/main.c:487
+#: ../shell/main.c:488
msgid "Send the debugging output of all components to a file."
msgstr "å…¨ã¦ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®ãƒ‡ãƒãƒƒã‚°å‡ºåŠ›ã‚’ファイルã¸é€ã‚‹"
-#: ../shell/main.c:490
+#: ../shell/main.c:491
msgid "Disable the mono plugin environment."
msgstr "Mono プラグイン環境を無効ã«ã™ã‚‹"
-#: ../shell/main.c:493
+#: ../shell/main.c:494
msgid "Disable loading of any plugins."
msgstr "プラグインを読ã¿è¾¼ã¾ãªã„"
-#: ../shell/main.c:524
+#: ../shell/main.c:525
#, c-format
msgid ""
"%s: --online and --offline cannot be used together.\n"
@@ -15722,34 +15715,34 @@ 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
+#: ../smime/gui/certificate-manager.c:377
+#: ../smime/gui/certificate-manager.c:385
+#: ../smime/gui/certificate-manager.c:597
+#: ../smime/gui/certificate-manager.c:605
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
+#: ../smime/gui/certificate-manager.c:265
+#: ../smime/gui/certificate-manager.c:474
+#: ../smime/gui/certificate-manager.c:692
msgid "Certificate Name"
msgstr "証明書ã®åå‰"
-#: ../smime/gui/certificate-manager.c:272
-#: ../smime/gui/certificate-manager.c:490
+#: ../smime/gui/certificate-manager.c:274
+#: ../smime/gui/certificate-manager.c:492
msgid "Purposes"
msgstr "利用ã®ç›®çš„"
-#: ../smime/gui/certificate-manager.c:281 ../smime/gui/smime-ui.glade.h:36
+#: ../smime/gui/certificate-manager.c:283 ../smime/gui/smime-ui.glade.h:36
#: ../smime/lib/e-cert.c:569
msgid "Serial Number"
msgstr "シリアル番å·"
-#: ../smime/gui/certificate-manager.c:289
+#: ../smime/gui/certificate-manager.c:291
msgid "Expires"
msgstr "有効期é™"
-#: ../smime/gui/certificate-manager.c:481
+#: ../smime/gui/certificate-manager.c:483
msgid "E-Mail Address"
msgstr "E-メール・アドレス"
@@ -16809,6 +16802,10 @@ msgstr "文字ã®ã‚µã‚¤ã‚ºã‚’大ããã—ã¾ã™"
msgid "Load _Images"
msgstr "ç”»åƒã‚’読ã¿è¾¼ã‚€(_I)"
+#: ../ui/evolution-mail-message.xml.h:50
+msgid "Mar_k as Read"
+msgstr "既読ã¨ã—ã¦ãƒžãƒ¼ã‚¯(_K)"
+
#: ../ui/evolution-mail-message.xml.h:51
msgid "Mark as I_mportant"
msgstr "é‡è¦ã¨ã—ã¦ãƒžãƒ¼ã‚¯(_M)"
@@ -17556,7 +17553,7 @@ msgstr "件åé †(_B)"
#: ../views/mail/galview.xml.h:5
msgid "By _Follow Up Flag"
-msgstr "フォローアップ・フラグ順(_F)"
+msgstr "フォローアップã®ç¨®é¡žé †(_F)"
#: ../views/mail/galview.xml.h:6
msgid "_Messages"
diff --git a/po/lt.po b/po/lt.po
index 44a7fac033..2449e79f1d 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: evolution HEAD\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-28 23:34+0200\n"
-"PO-Revision-Date: 2005-03-01 00:03+0200\n"
+"POT-Creation-Date: 2005-03-04 13:31+0200\n"
+"PO-Revision-Date: 2005-03-04 13:44+0200\n"
"Last-Translator: Žygimantas BeruÄka <uid0@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
"MIME-Version: 1.0\n"
@@ -46,7 +46,7 @@ msgstr[2] "esamame adresų knygos aplanke yra %d kortelių"
#: ../calendar/gui/alarm-notify/alarm-queue.c:863
#: ../ui/evolution-message-composer.xml.h:10
msgid "Open"
-msgstr "Atidaryti"
+msgstr "Atverti"
#: ../a11y/addressbook/ea-minicard.c:138
msgid "Contact List: "
@@ -87,7 +87,7 @@ msgstr "kalendoriaus vaizdo įvykis"
#: ../a11y/calendar/ea-cal-view-event.c:485
msgid "Grab Focus"
-msgstr "Pagriebti fokusavimÄ…"
+msgstr "Perimti fokusÄ…"
#: ../a11y/calendar/ea-cal-view.c:306
msgid "New Appointment"
@@ -263,7 +263,7 @@ msgstr "IÅ¡Å¡okantis meniu"
#. addressbook:ldap-init primary
#: ../addressbook/addressbook-errors.xml.h:2
msgid "This addressbook could not be opened."
-msgstr "Nepavyko atidaryti šios adresų knygos."
+msgstr "Nepavyko atverti šios adresų knygos."
#. addressbook:ldap-init secondary
#: ../addressbook/addressbook-errors.xml.h:4
@@ -286,10 +286,9 @@ msgid ""
"a supported login method. Remember that many passwords are case sensitive; "
"your caps lock might be on."
msgstr ""
-"Patikrinkite ar Jūsų slaptažodis parašytas teisingai ir ar Jūs naudojate "
-"palaikomą prisijungimo metodą. Atminkite, kad daugumoje slaptažodžių yra "
-"skirtumas tarp mažųjų ir didžiųjų raidžių; gali būti įjungtas Jūsų "
-"„CapsLock“ klavišas."
+"Patikrinkite, ar Jūsų slaptažodis parašytas teisingai ir ar naudojate "
+"palaikomÄ… prisijungimo metodÄ…. Atminkite, kad paprastai svarbus skirtumas "
+"tarp mažųjų ir didžiųjų raidžių; gali būti aktyvi „CapsLock“ veiksena."
#. addressbook:ldap-search-base primary
#: ../addressbook/addressbook-errors.xml.h:10
@@ -303,9 +302,9 @@ msgid ""
"this functionality or it may be misconfigured. Ask your administrator for "
"supported search bases."
msgstr ""
-"LDAP serveris gali naudoti senesnÄ™ LDAP versijÄ…, kuri nepalaiko Å¡ios "
-"funkcijos arba serveris yra neteisingai sukonfigūruotas. Paklauskit Jūsų "
-"sistemos administratoriaus apie palaikomas paieškos bazes."
+"LDAP serveris naudoja senesnÄ™ LDAP versijÄ…, kuri nepalaiko Å¡ios funkcijos, "
+"arba serveris yra neteisingai sukonfigūruotas. Paklauskite sistemos "
+"administratoriaus apie palaikomas paieškos bazes."
#. addressbook:ldap-v3-schema primary
#: ../addressbook/addressbook-errors.xml.h:14
@@ -374,7 +373,7 @@ msgstr "{1}"
#. addressbook:load-error title
#: ../addressbook/addressbook-errors.xml.h:32
msgid "Unable to open addressbook"
-msgstr "Nepavyko atidaryti adresų knygos"
+msgstr "Nepavyko atverti adresų knygos"
#. addressbook:load-error primary
#: ../addressbook/addressbook-errors.xml.h:34
@@ -389,15 +388,14 @@ msgstr "Nepavyko atlikti paieškos."
#. addressbook:prompt-save primary
#: ../addressbook/addressbook-errors.xml.h:42
msgid "Would you like to save your changes?"
-msgstr "Ar norite išsaugoti Jūsų pakeitimus?"
+msgstr "Ar norite išsaugoti pakeitimus?"
#. addressbook:prompt-save secondary
#: ../addressbook/addressbook-errors.xml.h:44
msgid ""
"You have made modifications to this contact. Do you want to save these "
"changes?"
-msgstr ""
-"Jūs pakeitėte šio kontakto duomenis. Ar norite išsaugoti šiuos pakeitimus?"
+msgstr "Pakeitėte šio kontakto duomenis. Ar norite išsaugoti šiuos pakeitimus?"
#: ../addressbook/addressbook-errors.xml.h:45
msgid "_Discard"
@@ -415,7 +413,7 @@ msgid ""
"cannot be removed from the source. Do you want to save a copy instead?"
msgstr ""
"Jūs norite perkelti kontaktą iš vienos adresų knygos į kitą, bet jis negali "
-"būti pašalintas iš dabartinės vietos. Gal vietoj to norite išsaugoti kopiją?"
+"būti pašalintas iš dabartinės vietos. Ar norite išsaugoti kontakto kopiją?"
#. addressbook:save-error primary
#: ../addressbook/addressbook-errors.xml.h:51
@@ -476,8 +474,8 @@ msgstr "Jūsų serverį reikia atnaujinti"
#: ../addressbook/addressbook-errors.xml.h:68
msgid "Some features may not work correctly with your current server version"
msgstr ""
-"Kai kurios funkcijos gali veikti nekorektiškai su esama Jūsų serverio "
-"versija."
+"Su esama Jūsų serverio versija kai kurios funkcijos gali veikti "
+"nekorektiškai ."
#: ../addressbook/conduit/address-conduit.c:298
msgid "Default Sync Address:"
@@ -495,7 +493,7 @@ msgstr "Nepavyko perskaityti piloto Address programos bloko"
#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:1
msgid "Autocompletion"
-msgstr "Savaiminis pabaigimas"
+msgstr "Savaiminis užbaigimas"
#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:2
msgid "C_ontacts"
@@ -507,7 +505,7 @@ msgstr "Sertifikatai"
#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:4
msgid "Configure autocomplete here"
-msgstr "Čia konfigūruojamas automatinis užbaigimas"
+msgstr "Čia konfigūruojamas savaiminis užbaigimas"
#. Create the contacts group
#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:5
@@ -757,7 +755,7 @@ msgstr "Susisiekiama su LDAP serveriu anonimiškai"
#: ../addressbook/gui/component/addressbook.c:193
#: ../plugins/groupwise-account-setup/camel-gw-listener.c:478
msgid "Failed to authenticate.\n"
-msgstr "Autorizacija nepavyko.\n"
+msgstr "Autentikacija nepavyko.\n"
#: ../addressbook/gui/component/addressbook.c:200
#: ../plugins/groupwise-account-setup/camel-gw-listener.c:461
@@ -794,12 +792,12 @@ msgid ""
"The number of characters that must be typed before Evolution will attempt to "
"autocomplete."
msgstr ""
-"Simbolių kiekis, kuris turi būti įvestas prieš Evolution bandant papildyti "
-"įvedimą."
+"Simbolių kiekis, kuris turi būti įvestas prieš Evolution bandant atspėti "
+"įrašą."
#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:7
msgid "URI for the folder last used in the select names dialog"
-msgstr "Aplanko adresas paskutinį kartą panaudotas vardų pasirinkimo dialoge"
+msgstr "Aplanko, paskutinį kartą naudoto vardų parinkimo dialoge, adresas."
#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:8
msgid "URI for the folder last used in the select names dialog."
@@ -885,7 +883,7 @@ msgid "Add Address Book"
msgstr "Pridėti adresų knygą"
#: ../addressbook/gui/component/ldap-config.glade.h:15
-#: ../mail/em-account-editor.c:301
+#: ../mail/em-account-editor.c:302
msgid "Always"
msgstr "Visada"
@@ -920,7 +918,7 @@ msgid "Lo_gin:"
msgstr "Prisijun_gimo vardas:"
#: ../addressbook/gui/component/ldap-config.glade.h:25
-#: ../mail/em-account-editor.c:299
+#: ../mail/em-account-editor.c:300
msgid "Never"
msgstr "Niekada"
@@ -937,7 +935,7 @@ msgid ""
"Selecting this option means that Evolution will only connect to your LDAP "
"server if your LDAP server supports SSL or TLS."
msgstr ""
-"Pasirinkus šį nustatymą Evolution jungsis į Jūsų LDAP serverį tik jeigu Jūsų "
+"Pasirinkus šį nustatymą Evolution jungsis prie Jūsų serverį tik jeigu šis "
"LDAP serveris palaiko SSL arba TLS."
#: ../addressbook/gui/component/ldap-config.glade.h:29
@@ -947,10 +945,10 @@ msgid ""
"are behind a firewall at work, then Evolution doesn't need to use SSL/TLS "
"because your connection is already secure."
msgstr ""
-"Pasirinkus šį nustatymą Evolution bandys naudoti SSL/TLS tik jeigu Jūs esate "
+"Pasirinkus šį nustatymą Evolution bandys naudoti SSL/TLS tik jeigu esate "
"nesaugioje aplinkoje. Pavyzdžiui, jeigu Jūs ir Jūsų LDAP serveris darbe yra "
-"už ugniasienės, tada Evolution nereikia naudoti SSL/TLS, nes Jūsų "
-"prisijungimas ir taip yra saugus."
+"už ugniasienės, Evolution nereikia naudoti SSL/TLS, nes Jūsų prisijungimas "
+"ir taip yra saugus."
#: ../addressbook/gui/component/ldap-config.glade.h:30
msgid ""
@@ -977,7 +975,7 @@ msgid ""
"root of the directory tree."
msgstr ""
"Paieškos bazė yra skirtinis vardas (DN), kuris lemia nuo kurios vietos bus "
-"pradėtos Jūsų paieškos. Neužpildžius šio laukelio paieška bus vykdoma nuo "
+"pradėtos paieškos. Jei neužpildysite šio laukelio, paieška bus vykdoma nuo "
"aplankų medžio pradžios."
#: ../addressbook/gui/component/ldap-config.glade.h:34
@@ -1005,7 +1003,7 @@ msgid ""
"This is the maximum number of entries to download. Setting this number to be "
"too large will slow down your address book."
msgstr ""
-"ÄŒia yra nurodomas didžiasias atsiunÄiamų įrašų kiekis. NustaÄius per didelÄ™ "
+"ÄŒia yra nurodomas didžiausias atsiunÄiamų įrašų kiekis. NustaÄius per didelÄ™ "
"reikšmę gali sulėtėti Jūsų adresų knygos darbas."
#: ../addressbook/gui/component/ldap-config.glade.h:37
@@ -1014,7 +1012,7 @@ msgid ""
"setting this to \"Email Address\" requires anonymous access to your ldap "
"server."
msgstr ""
-"ÄŒia nustatomas prisijungiant naudojamas autentifikacijos metodas. TurÄ—kite "
+"ÄŒia nustatomas autentifikacijos metodas, naudojamas jungimosi metu. TurÄ—kite "
"omenyje, kad norint pasinaudoti „El. pašto adreso“ metodu būtinas anoniminis "
"prisijungimas prie Jūsų LDAP serverio."
@@ -1023,8 +1021,8 @@ msgid ""
"This is the name for this server that will appear in your Evolution folder "
"list. It is for display purposes only. "
msgstr ""
-"Šis vardas bus priskirtas serveriui Evolution aplankų sąraše. Jis skirtas "
-"tiktai pavaizdavimo tikslais."
+"Šis vardas bus priskirtas serveriui Evolution aplankų sąraše. Jis naudojamas "
+"tik užrašui."
#: ../addressbook/gui/component/ldap-config.glade.h:39
msgid ""
@@ -1033,8 +1031,8 @@ msgid ""
"port you should specify."
msgstr ""
"ÄŒia nurodomas LDAP serverio prievadas, prie kurio Evolution bandys jungtis. "
-"Standartinių prievadų sąrašas yra pateiktas. Pasiteiraukite savo sistemos "
-"administratoriaus, jei nežinote, kurį prievadą reikia nurodyti."
+"Pateiktas standartinių prievadų sąrašas. Pasiteiraukite savo sistemos "
+"administratoriaus, jei nežinote, kurį prievadą turėtumėte nurodyti."
#: ../addressbook/gui/component/ldap-config.glade.h:40
msgid "Using distinguished name (DN)"
@@ -1045,7 +1043,7 @@ msgid "Using email address"
msgstr "Naudojamas el. pašto adresas"
#: ../addressbook/gui/component/ldap-config.glade.h:42
-#: ../mail/em-account-editor.c:300
+#: ../mail/em-account-editor.c:301
msgid "Whenever Possible"
msgstr "Kai tik imanoma"
@@ -1055,7 +1053,7 @@ msgstr "_Pridėti adresų knygą"
#: ../addressbook/gui/component/ldap-config.glade.h:44
msgid "_Download limit:"
-msgstr "_Leistinas atsiuntimo greitis:"
+msgstr "_Leistinas parsiuntimo greitis:"
#: ../addressbook/gui/component/ldap-config.glade.h:45
msgid "_Find Possible Search Bases"
@@ -1100,7 +1098,7 @@ msgstr "kortelÄ—s"
#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:12
#: ../calendar/gui/dialogs/alarm-dialog.glade.h:26
#: ../calendar/gui/dialogs/calendar-setup.glade.h:14
-#: ../filter/filter.glade.h:16 ../mail/em-account-editor.c:1884
+#: ../filter/filter.glade.h:16 ../mail/em-account-editor.c:1885
#: ../plugins/calendar-http/calendar-http.c:263
#: ../plugins/calendar-weather/calendar-weather.c:564
msgid "minutes"
@@ -2144,11 +2142,11 @@ msgstr "Å ri Lanka"
#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:338
msgid "St. Helena"
-msgstr "Å v .Elena"
+msgstr "Å v. Elena"
#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:339
msgid "St. Pierre And Miquelon"
-msgstr "Å v.Pjeras ir Migelonas"
+msgstr "Å v. Pjeras ir Migelonas"
#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:340
msgid "Sudan"
@@ -2393,7 +2391,7 @@ msgstr "Pakeista"
#: ../addressbook/gui/contact-editor/e-contact-editor.c:2578
msgid "Please select an image for this contact"
-msgstr "Prašau parinkti šiam kontaktui paveikslėlį"
+msgstr "Parinkite šiam kontaktui paveikslėlį"
#: ../addressbook/gui/contact-editor/e-contact-editor.c:2579
msgid "No image"
@@ -2432,7 +2430,7 @@ msgid ""
"Are you sure you want\n"
"to delete these contacts?"
msgstr ""
-"Ar JÅ«s tikrai norite\n"
+"Ar tikrai norite\n"
"ištrinti šiuos kontaktus?"
#: ../addressbook/gui/contact-editor/eab-editor.c:329
@@ -2440,7 +2438,7 @@ msgid ""
"Are you sure you want\n"
"to delete this contact?"
msgstr ""
-"Ar JÅ«s tikrai norite\n"
+"Ar tikrai norite\n"
"ištrinti šį kontaktą?"
#: ../addressbook/gui/contact-editor/fulladdr.glade.h:2
@@ -2627,7 +2625,7 @@ msgid ""
"exists in this folder. Would you like to add it anyway?"
msgstr ""
"Pakeistasis šio kontakto el. paštas ar vardas jau yra\n"
-"šiame aplanke. Ar norėtum jį vis tiek pridėti?"
+"šiame aplanke. Ar norite jį vis tiek pridėti?"
#: ../addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:2
msgid "New Contact:"
@@ -2643,7 +2641,7 @@ msgid ""
"in this folder. Would you like to add it anyway?"
msgstr ""
"Šio kontakto el. pašto adresas arba vardas jau yra šiame\n"
-"aplanke. Ar vis tiek norėtum jį pridėti?"
+"aplanke. Ar vis tiek norite jį pridėti?"
#. FIXME: get the toplevel window...
#: ../addressbook/gui/search/e-addressbook-search-dialog.c:160
@@ -2681,7 +2679,7 @@ msgstr "Modelis"
#: ../addressbook/gui/widgets/e-addressbook-table-adapter.c:103
msgid "Error modifying card"
-msgstr "Klaida modifikuojant kortelÄ™"
+msgstr "Klaida keiÄiant kortelÄ™"
#: ../addressbook/gui/widgets/e-addressbook-view.c:169
msgid "Name begins with"
@@ -2854,7 +2852,7 @@ msgstr "Saugoti kaip"
#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:16
msgid "Given Name"
-msgstr "Duotas Vardas"
+msgstr "Duotas vardas"
#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:17
msgid "Home Fax"
@@ -2896,7 +2894,7 @@ msgstr "Pastaba"
#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:26
msgid "Office"
-msgstr "Ofisas"
+msgstr "Biuras"
#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:27
#: ../addressbook/gui/widgets/eab-contact-display.c:360
@@ -2913,7 +2911,7 @@ msgstr "Kitas telefonas"
#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:30
msgid "Pager"
-msgstr "Ieškas"
+msgstr "Pranešimų gaviklis"
#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:31
msgid "Primary Phone"
@@ -2958,7 +2956,7 @@ msgstr "Vienetas"
#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:45
msgid "Web Site"
-msgstr "Tinklapis"
+msgstr "Tinklalapis"
#: ../addressbook/gui/widgets/e-minicard-label.c:115
#: ../addressbook/gui/widgets/e-minicard.c:137
@@ -2973,7 +2971,7 @@ msgstr "Aukštis"
#: ../addressbook/gui/widgets/e-minicard-label.c:129
#: ../addressbook/gui/widgets/e-minicard.c:152
msgid "Has Focus"
-msgstr "Sufokusuotas"
+msgstr "Aktyvus"
#: ../addressbook/gui/widgets/e-minicard-label.c:136
msgid "Field"
@@ -3019,9 +3017,9 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Šiame vaizde nėra nieko, ką būtų galima parodyti.\n"
+"Šiame vaizde nėra įrašų.\n"
"\n"
-"Dukart spragtelÄ—kite, norÄ—damisukurti naujÄ… kontaktÄ…."
+"Dukart spragtelÄ—kite, norÄ—dami sukurti naujÄ… kontaktÄ…."
#: ../addressbook/gui/widgets/e-minicard-view.c:179
msgid ""
@@ -3031,7 +3029,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Ieškokit kontakto."
+"Ieškoti kontakto."
#: ../addressbook/gui/widgets/e-minicard-view.c:181
msgid ""
@@ -3041,7 +3039,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Šiame vaizde nėra nieko, ką būtų galima parodyti."
+"Šiame vaizde nėra įrašų."
#: ../addressbook/gui/widgets/e-minicard-view.c:498
msgid "Adapter"
@@ -3115,7 +3113,7 @@ msgstr "Pareigos"
#: ../addressbook/gui/widgets/eab-contact-display.c:587
msgid "Home page"
-msgstr "Namų puslapis"
+msgstr "Asmeninis puslapis"
#. E_BOOK_ERROR_OK
#: ../addressbook/gui/widgets/eab-gui-util.c:49
@@ -3131,7 +3129,7 @@ msgstr "Posistemė užimta"
#. E_BOOK_ERROR_REPOSITORY_OFFLINE
#: ../addressbook/gui/widgets/eab-gui-util.c:52
msgid "Repository offline"
-msgstr "Saugykla atsijungus"
+msgstr "Saugykla atsijungusi"
#. E_BOOK_ERROR_NO_SUCH_BOOK
#: ../addressbook/gui/widgets/eab-gui-util.c:53
@@ -3184,17 +3182,17 @@ msgstr "Nepavyko atšaukti"
#: ../addressbook/gui/widgets/eab-gui-util.c:63
#: ../calendar/gui/comp-editor-factory.c:431
msgid "Authentication Failed"
-msgstr "Autentikacija Nepavyko"
+msgstr "Autentikacija nepavyko"
#. E_BOOK_ERROR_AUTHENTICATION_REQUIRED
#: ../addressbook/gui/widgets/eab-gui-util.c:64
msgid "Authentication Required"
-msgstr "BÅ«tina Autentifikacija"
+msgstr "BÅ«tina autentifikacija"
#. E_BOOK_ERROR_TLS_NOT_AVAILABLE
#: ../addressbook/gui/widgets/eab-gui-util.c:65
msgid "TLS not Available"
-msgstr "TLS Negalimas"
+msgstr "TLS negalimas"
#. E_BOOK_ERROR_CORBA_EXCEPTION
#. E_BOOK_ERROR_NO_SUCH_SOURCE
@@ -3213,26 +3211,25 @@ msgid ""
"marked for offline usage or not yet downloaded for offline usage. Please "
"load the addressbook once in online mode to download its contents"
msgstr ""
-"Nepavyko atidaryti šios adresų knygos. Tai reiškia, kad ši knyga nėra "
-"pažymėta naudojimui atsijungus arba dar nėra tam parsiųsti jos duomenys. Kai "
-"prisijungsite, prašau paleisti šią adresų knygą, taip bus parsiųstas jos "
-"turinys."
+"Nepavyko atverti šios adresų knygos. Tai reiškia, kad ši knyga nėra pažymėta "
+"naudojimui atsijungus, arba dar nėra parsiųsti jos duomenys. Kai "
+"prisijungsite, įkraukite šią adresų knygą, kad būtų parsiųstas jos turinys."
#: ../addressbook/gui/widgets/eab-gui-util.c:98
msgid ""
"We were unable to open this addressbook. Please check that the path exists "
"and that you have permission to access it."
msgstr ""
-"Nepavyko atidaryti šios adresų knygelės. Patikrinkite, ar kelias egzistuoja "
-"ir ar Jūs turite teises jį pasiekti."
+"Nepavyko atverti šios adresų knygelės. Patikrinkite, ar kelias egzistuoja ir "
+"ar turite teises jį pasiekti."
#: ../addressbook/gui/widgets/eab-gui-util.c:105
msgid ""
"We were unable to open this addressbook. This either means you have entered "
"an incorrect URI, or the LDAP server is unreachable."
msgstr ""
-"Nepavyko atidaryti šios adresų knygos. Tai reiškia, kad Jūs įvedėte "
-"neteisingÄ… adresÄ… arba nurodytas LDAP serveris yra nepasiekiamas."
+"Nepavyko atverti šios adresų knygos. Tai reiškia, kad įvedėte neteisingą "
+"adresÄ… arba nurodytas LDAP serveris yra nepasiekiamas."
#: ../addressbook/gui/widgets/eab-gui-util.c:110
msgid ""
@@ -3240,17 +3237,16 @@ msgid ""
"you want to use LDAP in Evolution, you must install an LDAP-enabled "
"Evolution package."
msgstr ""
-"Ši Evolution versija neturi įkompiliuoto LDAP palaikymo. Jei Jūs norite "
-"naudoti LDAP su Evolution, Jums teks įdiegti Evolution paketą su LDAP "
-"palaikymu."
+"Ši Evolution versija neturi įkompiliuoto LDAP palaikymo. Jei norite naudoti "
+"LDAP su Evolution, Jums teks įdiegti Evolution paketą su LDAP palaikymu."
#: ../addressbook/gui/widgets/eab-gui-util.c:117
msgid ""
"We were unable to open this addressbook. This either means you have entered "
"an incorrect URI, or the server is unreachable."
msgstr ""
-"Nepavyko atidaryti šios adresų knygos. Tai reiškia, kad Jūs įvedėte "
-"neteisingÄ… adresÄ… arba nurodytas serveris yra nepasiekiamas."
+"Nepavyko atverti šios adresų knygos. Tai reiškia, kad įvedėte neteisingą "
+"adresÄ… arba nurodytas serveris yra nepasiekiamas."
#: ../addressbook/gui/widgets/eab-gui-util.c:137
msgid ""
@@ -3262,7 +3258,7 @@ msgstr ""
"Užklausa pateikė daugiau atsakymų nei serveriui ar Evolution\n"
"yra leista pateikti. Sukonkretinkite vykdomą paiešką arba \n"
"padidinkite išvedamų atsakymų kiekio apribojimus šios adresų\n"
-"knygos aplanko serverio nustatymų."
+"knygos aplanko serverio nustatymuose."
#: ../addressbook/gui/widgets/eab-gui-util.c:143
msgid ""
@@ -3299,7 +3295,7 @@ msgstr "Klaida įtraukiant kontaktą"
#: ../addressbook/gui/widgets/eab-gui-util.c:188
msgid "Error modifying list"
-msgstr "Klaida modifikuojant sąrašą"
+msgstr "Klaida keiÄiant sÄ…raÅ¡Ä…"
#: ../addressbook/gui/widgets/eab-gui-util.c:188
msgid "Error modifying contact"
@@ -3307,7 +3303,7 @@ msgstr "Klaida keiÄiant kontaktÄ…"
#: ../addressbook/gui/widgets/eab-gui-util.c:200
msgid "Error removing list"
-msgstr "Klaida pašalinant sąrašą"
+msgstr "Klaida šalinant sąrašą"
#: ../addressbook/gui/widgets/eab-gui-util.c:200
#: ../addressbook/gui/widgets/eab-gui-util.c:608
@@ -3327,10 +3323,10 @@ msgstr[0] ""
"Ar tikrai norite peržiūrėti visus šiuos kontaktus vienu metu?"
msgstr[1] ""
"Bandymas atverti %d kontaktus sukurs %d naujus langus.\n"
-"Ar Jūs tikrai norite peržiūrėti visus šiuos kontaktus vienu metu?"
+"Ar tikrai norite peržiūrėti visus šiuos kontaktus vienu metu?"
msgstr[2] ""
"Bandymas atverti %d kontaktų sukurs %d naujų langų.\n"
-"Ar Jūs tikrai norite peržiūrėti visus šiuos kontaktus vienu metu?"
+"Ar tikrai norite peržiūrėti visus šiuos kontaktus vienu metu?"
#: ../addressbook/gui/widgets/eab-gui-util.c:311
#, c-format
@@ -3339,7 +3335,7 @@ msgid ""
"Do you want to overwrite it?"
msgstr ""
"%s jau egzistuoja.\n"
-"Ar nori įrašyti vietoj jo?"
+"Ar norite jį perrašyti nauju?"
#: ../addressbook/gui/widgets/eab-gui-util.c:315
msgid "Overwrite"
@@ -3422,7 +3418,7 @@ msgstr "Įlieti el. pašto adresą"
#, c-format
msgid "There is one other contact."
msgid_plural "There are %d other contacts."
-msgstr[0] "Yra vienas kitas kontaktas."
+msgstr[0] "Yra dar vienas kontaktas."
msgstr[1] "Yra %d kiti kontaktai."
msgstr[2] "Yra %d kitų kontaktų."
@@ -3659,7 +3655,8 @@ msgstr "AutorinÄ—s teisÄ—s (C) 2000, Ximian, Inc."
#: ../addressbook/printing/test-contact-print-style-editor.c:56
msgid "This should test the contact print style editor widget"
msgstr ""
-"Čia turi būti patikrintas kontaktų spausdinimo stiliaus redaktoriaus objektas"
+"Čia turėtų būti patikrintas kontaktų spausdinimo stiliaus redaktoriaus "
+"objektas"
#: ../addressbook/printing/test-print.c:52
msgid "Contact Print Test"
@@ -3667,13 +3664,13 @@ msgstr "Kontaktų spausdinimo testas"
#: ../addressbook/printing/test-print.c:55
msgid "This should test the contact print code"
-msgstr "Čia turi būti patikrintas kontaktų spausdinimo kodas"
+msgstr "Čia turėtų būti patikrintas kontaktų spausdinimo kodas"
#: ../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 "Nepavyko atidaryti bylos"
+msgstr "Nepavyko atverti bylos"
#: ../addressbook/tools/evolution-addressbook-export-list-folders.c:43
msgid "Couldn't get list of addressbooks"
@@ -3681,11 +3678,11 @@ msgstr "Nepavyko gauti adresų knygų sąrašo"
#: ../addressbook/tools/evolution-addressbook-export-list-folders.c:71
msgid "failed to open book"
-msgstr "Nepavyko atidaryti adresų knygos"
+msgstr "Nepavyko atverti adresų knygos"
#: ../addressbook/tools/evolution-addressbook-export.c:56
msgid "Specify the output file instead of standard output"
-msgstr "Nurodykite išvedimo bylą naudojamą vietoj standartinio išvedimo"
+msgstr "Nurodykite išvedimo bylą, naudojamą vietoje standartinio išvedimo"
#: ../addressbook/tools/evolution-addressbook-export.c:57
msgid "OUTPUTFILE"
@@ -3705,13 +3702,13 @@ msgstr "[vcard|csv]"
#: ../addressbook/tools/evolution-addressbook-export.c:61
msgid "Export in asynchronous mode"
-msgstr "Eksportuoti asinchronine veiksena"
+msgstr "Eksportuoti nesinchroniškai"
#: ../addressbook/tools/evolution-addressbook-export.c:63
msgid ""
"The number of cards in one output file in asychronous mode, default size 100."
msgstr ""
-"Kortelių kiekis vienoje išvedimo byloje dirbant asinchronine veiksena, "
+"Kortelių kiekis vienoje išvedimo byloje dirbant asinchroniškai, "
"standartiškai lygus 100 vnt."
#: ../addressbook/tools/evolution-addressbook-export.c:63
@@ -3723,7 +3720,7 @@ msgid ""
"Command line arguments error, please use --help option to see the usage."
msgstr ""
"Komandinės eilutės parametrų klaida. Norėdami pamatyti kaip naudotis, "
-"panaudokite --help parametrÄ…."
+"naudokite --help parametrÄ…."
#: ../addressbook/tools/evolution-addressbook-export.c:105
msgid "Only support csv or vcard format."
@@ -3731,7 +3728,7 @@ msgstr "Palaiko tik csv arba vcard formatus."
#: ../addressbook/tools/evolution-addressbook-export.c:114
msgid "In async mode, output must be file."
-msgstr "Dirbant asinchronine veiksena, išvedimas turi būti vykdomas į bylą."
+msgstr "Dirbant asinchroniškai, išvedimas turi būti vykdomas į bylą."
#: ../addressbook/tools/evolution-addressbook-export.c:122
msgid "In normal mode, there is no need for the size option."
@@ -3766,7 +3763,7 @@ msgid ""
"the meeting is canceled."
msgstr ""
"Jeigu neišsiųsite perspėjimo apie atšaukimą, kiti dalyviai gali nežinoti, "
-"kad susitikimas yra atšauktas."
+"kad susitikimas atšauktas."
#: ../calendar/calendar-errors.xml.h:5 ../calendar/calendar-errors.xml.h:15
#: ../calendar/calendar-errors.xml.h:25 ../calendar/calendar-errors.xml.h:87
@@ -3915,17 +3912,17 @@ msgstr ""
#. calendar:prompt-save-appointment title
#: ../calendar/calendar-errors.xml.h:68
msgid "Save Appointment"
-msgstr "Išsaugoti įvykį"
+msgstr "IÅ¡saugoti paskyrimÄ…"
#. calendar:prompt-save-appointment primary
#: ../calendar/calendar-errors.xml.h:70
msgid "Would you like to save your changes to this appointment?"
-msgstr "Ar norite išsaugoti pakeitimus atliktus šiam įvykiui?"
+msgstr "Ar norite išsaugoti pakeitimus, atliktus šiam įvykiui?"
#. 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 "Jūs pakeitėte šį įvykį, bet pakeitimų dar neišsaugojote."
+msgstr "PakeitÄ—te šį įvykį, taÄiau dar neiÅ¡saugojote pakeitimų."
#: ../calendar/calendar-errors.xml.h:73 ../calendar/calendar-errors.xml.h:81
msgid "Discard Changes"
@@ -3943,17 +3940,17 @@ msgstr "Išsaugoti užduotį"
#. calendar:prompt-save-task primary
#: ../calendar/calendar-errors.xml.h:78
msgid "Would you like to save your changes to this task?"
-msgstr "Ar norite iÅ¡saugoti pakeitimus atliktus Å¡iai užduoÄiai?"
+msgstr "Ar norite išsaugoti šios užduoties pakeitimus?"
#. calendar:prompt-save-task secondary
#: ../calendar/calendar-errors.xml.h:80
msgid "You have made changes to this task, but not yet saved them."
-msgstr "Jūs pakeitėte šią užduotį, bet pakeitimų dar neišsaugojote."
+msgstr "PakeitÄ—te Å¡iÄ… užduotį, taÄiau dar neiÅ¡saugojote pakeitimų."
#. calendar:prompt-meeting-invite primary
#: ../calendar/calendar-errors.xml.h:84
msgid "Would you like to send meeting invitations to participants?"
-msgstr "Ar norite išsiųsti susitikimo dalyviams pakvietimus?"
+msgstr "Ar norite išsiųsti pakvietimus susitikimo dalyviams?"
#. calendar:prompt-meeting-invite secondary
#: ../calendar/calendar-errors.xml.h:86
@@ -3979,13 +3976,13 @@ msgid ""
"Sending updated information allows other participants to keep their "
"calendars up to date."
msgstr ""
-"Atnaujintos informacijos išsiuntimas leidžia kitiems dalyviams turėti jų "
-"kalendorius atnaujintus."
+"Atnaujintos informacijos išsiuntimas leidžia kitiems dalyviams atnaujinti "
+"kalendorius."
#. calendar:prompt-send-task primary
#: ../calendar/calendar-errors.xml.h:96
msgid "Would you like to send this task to participants?"
-msgstr "Ar norite dalyviams išsiųsti šią užduotį?"
+msgstr "Ar norite išsiųsti šią užduotį dalyviams?"
#. calendar:prompt-send-task secondary
#: ../calendar/calendar-errors.xml.h:98
@@ -3993,7 +3990,7 @@ msgid ""
"Email invitations will be sent to all participants and allow them to accept "
"this task."
msgstr ""
-"El. pašto pakvietimai bus išsiųsti kitiems dalyviams ir įgalins juos priimti "
+"El. pašto pakvietimai bus išsiųsti kitiems dalyviams ir leis jiems priimti "
"šią užduotį."
#. calendar:prompt-send-updated-task-info primary
@@ -4007,8 +4004,8 @@ msgid ""
"Sending updated information allows other participants to keep their task "
"lists up to date."
msgstr ""
-"Atnaujintos informacijos išsiuntimas leidžia kitiems dalyviams turėti jų "
-"užduoÄių sÄ…raÅ¡us atnaujintus."
+"Atnaujintos informacijos išsiuntimas leidžia kitiems dalyviams atnaujinti "
+"užduoÄių sÄ…raÅ¡us."
#. calendar:tasks-crashed primary
#: ../calendar/calendar-errors.xml.h:108
@@ -4018,7 +4015,7 @@ msgstr "Evolution užduotys netikėtai užsidarė."
#. calendar:tasks-crashed secondary
#: ../calendar/calendar-errors.xml.h:110
msgid "Your tasks will not be available until Evolution is restarted."
-msgstr "Jūsų užduotys nebus prieinamos kol Evolution nebus paleista iš naujo."
+msgstr "Jūsų užduotys nebus prieinamos, kol Evolution nebus paleista iš naujo."
#. calendar:calendar-crashed primary
#: ../calendar/calendar-errors.xml.h:112
@@ -4029,7 +4026,7 @@ msgstr "Evolution kalendorius netikėtai užsidarė."
#: ../calendar/calendar-errors.xml.h:114
msgid "Your calendars will not be available until Evolution is restarted."
msgstr ""
-"Jūsų kalendoriai bus neprieinami kol Evolution nebus paleista iš naujo."
+"Jūsų kalendoriai bus neprieinami, kol Evolution nebus paleista iš naujo."
#. calendar:prompt-delete-calendar primary
#: ../calendar/calendar-errors.xml.h:116
@@ -4054,7 +4051,7 @@ msgstr "Å is užduoÄių sÄ…raÅ¡as bus iÅ¡trintas visam laikui."
#. calendar:prompt-send-no-subject-calendar primary
#: ../calendar/calendar-errors.xml.h:124
msgid "Are you sure you want to send the appointment without a summary?"
-msgstr "Ar tikrai norite išsiųsti įvykį neparašę santraukos?"
+msgstr "Ar tikrai norite išsiųsti įvykį be santraukos?"
#. calendar:prompt-send-no-subject-calendar secondary
#: ../calendar/calendar-errors.xml.h:126
@@ -4062,8 +4059,8 @@ msgid ""
"Adding a meaningful Summary to your appointment will give your recipients an "
"idea of what your appointment is about."
msgstr ""
-"Pridėdami reikšmingą įvykio santrauką Jūs padėsite gavėjams suprasti apie ką "
-"yra Jūsų įvykis."
+"Pridėdami reikšmingą įvykio santrauką padėsite gavėjams suprasti, apie ką "
+"yra Å¡is paskyrimas."
#: ../calendar/calendar-errors.xml.h:127 ../calendar/calendar-errors.xml.h:132
#: ../mail/mail-errors.xml.h:15 ../mail/mail-errors.xml.h:20
@@ -4337,12 +4334,12 @@ msgid ""
"\n"
"Are you sure you want to run this program?"
msgstr ""
-"Tuoj turėtų pasileisti Evolution Kalendoriaus priminimas. Jis turėtų "
-"įvykdyti žemiau nurodytą komandą:\n"
+"Tuoj bus parodytas Evolution Kalendoriaus priminimas. Jis turėtų įvykdyti "
+"žemiau nurodytą komandą:\n"
"\n"
" %s\n"
"\n"
-"Ar esate tikri, kad ši komanda turi būti paleista?"
+"Ar tikrai norite, kad ši programa būtų paleista?"
#: ../calendar/gui/alarm-notify/alarm-queue.c:1128
msgid "Do not ask me about this program again."
@@ -4366,7 +4363,7 @@ msgstr "PerspÄ—jimo programos"
#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:2
msgid "Ask for confirmation when deleting items"
-msgstr "Trinant elementus paklausti patvirtinimo"
+msgstr "Paklausti patvirtinimo trinant elementus "
#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:3
msgid "Background color of tasks that are due today, in \"#rrggbb\" format."
@@ -4391,7 +4388,7 @@ msgstr "Patvirtinti išvalymą"
#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:8
msgid "Days on which the start and end of work hours should be indicated."
-msgstr "Dienos, kuriose turi būti pažymėtos pirma ir paskutinė darbo valandos."
+msgstr "Dienos, kuriose turi būti pažymėta darbo valandų pradžia bei pabaiga."
#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:9
msgid "Default appointment reminder"
@@ -4554,8 +4551,8 @@ msgid ""
"user part of the mail address and %d is replaced by the domain."
msgstr ""
"Adreso šablonas naudojamas kaip atsarginis laisvas/užsiėmęs informacijos "
-"skelbimo variantas, %u yra pakeiÄiama naudotojo el. paÅ¡to adreso dalimi ir "
-"%d yra pakeiÄiama domenu."
+"skelbimo variantas, %u pakeiÄiama naudotojo el. paÅ¡to adreso dalimi, o %d "
+"pakeiÄiama domenu."
#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:43
msgid ""
@@ -4611,8 +4608,8 @@ msgid ""
"Whether to compress weekends in the month view, which puts Saturday and "
"Sunday in the space of one weekday."
msgstr ""
-"Ar suspausti savaitgalius mÄ—nesio rodinyje. NustaÄius, rodomi Å¡eÅ¡tadienis "
-"ir sekmadienis užima vienos dienos vietą."
+"Ar suspausti savaitgalius mÄ—nesio vaizde. NustaÄius, Å¡eÅ¡tadienis ir "
+"sekmadienis užima vienos dienos vietą."
#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:56
msgid "Whether to display the end time of events in the week and month views."
@@ -4678,7 +4675,7 @@ msgstr "Neatitinkantys"
#: ../calendar/gui/calendar-commands.c:120
#: ../calendar/gui/calendar-component.c:708
#: ../calendar/gui/dialogs/calendar-setup.c:362
-#: ../calendar/gui/gnome-cal.c:1943
+#: ../calendar/gui/gnome-cal.c:1942
#: ../plugins/groupwise-account-setup/camel-gw-listener.c:382
#: ../plugins/groupwise-account-setup/camel-gw-listener.c:412
msgid "Calendar"
@@ -4695,7 +4692,7 @@ msgstr ""
#: ../calendar/gui/calendar-commands.c:361
msgid "Purge events older than"
-msgstr "Ištrinti įvykius senesnius nei"
+msgstr "Ištrinti įvykius, senesnius nei"
#: ../calendar/gui/calendar-commands.c:366
#: ../calendar/gui/dialogs/alarm-dialog.glade.h:20
@@ -4740,7 +4737,7 @@ msgstr "Nepavyko atverti kalendoriaus „%s“ įvykių bei susitikimų įrašym
#: ../calendar/gui/calendar-component.c:1155
msgid "There is no calendar available for creating events and meetings"
-msgstr "Nėra sukurta kalendoriaus naudojamo įvykių bei susitikimų saugojimui"
+msgstr "Nėra kalendoriaus, kuriame galima kurti įvykius bei susitikimus"
#: ../calendar/gui/calendar-component.c:1265
msgid "Calendar Source Selector"
@@ -4812,17 +4809,17 @@ msgstr "MÄ—nesio vaizdas"
#: ../calendar/gui/comp-editor-factory.c:413
msgid "Error while opening the calendar"
-msgstr "Klaida atidarant kalendorių"
+msgstr "Klaida atveriant kalendorių"
#: ../calendar/gui/comp-editor-factory.c:419
msgid "Method not supported when opening the calendar"
-msgstr "Atidarant kalendorių naudojamas nepalaikomas metodas"
+msgstr "Atveriant kalendorių naudojamas nepalaikomas metodas"
#: ../calendar/gui/comp-editor-factory.c:425
msgid "Permission denied to open the calendar"
-msgstr "Turimos priėjimo teisės neleidžia atidaryti kalendoriaus"
+msgstr "Turimos priėjimo teisės neleidžia atverti kalendoriaus"
-#: ../calendar/gui/comp-editor-factory.c:437 ../shell/e-shell.c:1260
+#: ../calendar/gui/comp-editor-factory.c:437 ../shell/e-shell.c:1264
msgid "Unknown error"
msgstr "Nežinoma klaida"
@@ -4965,7 +4962,7 @@ msgid "%.0fG"
msgstr "%.0fG"
#: ../calendar/gui/dialogs/cal-attachment-bar.c:298
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:913
+#: ../calendar/gui/dialogs/cal-attachment-bar.c:922
#: ../composer/e-msg-composer-attachment-bar.c:295 ../mail/em-utils.c:436
msgid "attachment"
msgstr "priedas"
@@ -5047,7 +5044,7 @@ msgstr "MIME tipas:"
#. g_object_set((GObject *)renderer, "activatable", TRUE, NULL);
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:576
-#: ../mail/em-account-prefs.c:460 ../mail/em-composer-prefs.c:888
+#: ../mail/em-account-prefs.c:476 ../mail/em-composer-prefs.c:888
#: ../plugins/plugin-manager/plugin-manager.c:213
msgid "Enabled"
msgstr "Įjungta"
@@ -5067,16 +5064,16 @@ msgstr "Netrinti"
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:787
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:820
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:853
-#: ../mail/em-account-prefs.c:307 ../mail/em-account-prefs.c:335
-#: ../mail/em-account-prefs.c:366
+#: ../mail/em-account-prefs.c:323 ../mail/em-account-prefs.c:351
+#: ../mail/em-account-prefs.c:382
msgid "Disable"
msgstr "IÅ¡jungti"
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:787
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:820
#: ../calendar/gui/dialogs/cal-prefs-dialog.c:855
-#: ../mail/em-account-prefs.c:307 ../mail/em-account-prefs.c:335
-#: ../mail/em-account-prefs.c:368
+#: ../mail/em-account-prefs.c:323 ../mail/em-account-prefs.c:351
+#: ../mail/em-account-prefs.c:384
msgid "Enable"
msgstr "Įjungti"
@@ -5214,7 +5211,7 @@ msgstr "Sekmadienis"
#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:34
msgid "T_asks due today:"
-msgstr "Ši_andienos užduotis:"
+msgstr "Ši_andienos užduotys:"
#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:35
msgid "T_hu"
@@ -5272,7 +5269,7 @@ msgstr "_PridÄ—ti URL"
#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:47
msgid "_Ask for confirmation when deleting items"
-msgstr "P_aprašyti patvirtinimo trinant elementus"
+msgstr "Pr_ašyti patvirtinimo trinant elementus"
#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:48
msgid "_Compress weekends in month view"
@@ -5304,7 +5301,7 @@ msgstr "Š_eš"
#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:56
msgid "_Show appointment end times in week and month views"
-msgstr "Rodyti pa_skyrimų pabaigos laikus savaitės ir mėnesio rodiniuose"
+msgstr "Rodyti pa_skyrimų pabaigos laikus savaitės ir mėnesio vaizduose"
#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:57
msgid "_Time divisions:"
@@ -5404,12 +5401,12 @@ msgstr "Šis žurnalo įrašas buvo ištrintas."
#: ../calendar/gui/dialogs/changed-comp.c:77
#, c-format
msgid "%s You have made changes. Forget those changes and close the editor?"
-msgstr "%s Jūs pakeitėte. Užmiršti tuos pakeitimus ir uždaryti redaktorių?"
+msgstr "%s Atlikote pakeitimų. Užmiršti pakeitimus ir uždaryti redaktorių?"
#: ../calendar/gui/dialogs/changed-comp.c:79
#, c-format
msgid "%s You have made no changes, close the editor?"
-msgstr "%s Jūs nieko nepakeitėte, uždaryti redaktorių?"
+msgstr "%s Nieko nekeitėte, uždaryti redaktorių?"
#: ../calendar/gui/dialogs/changed-comp.c:84
msgid "This event has been changed."
@@ -5426,12 +5423,12 @@ msgstr "Šis žurnalo įrašas buvo pakeistas."
#: ../calendar/gui/dialogs/changed-comp.c:101
#, c-format
msgid "%s You have made changes. Forget those changes and update the editor?"
-msgstr "%s Jūs pakeitėte. Užmiršti tuos pakeitimus ir atnaujinti redaktorių?"
+msgstr "%s Atlikote pakeitimų. Užmiršti pakeitimus ir atnaujinti redaktorių?"
#: ../calendar/gui/dialogs/changed-comp.c:103
#, c-format
msgid "%s You have made no changes, update the editor?"
-msgstr "%s Jūs nieko nepakeitėte, atnaujinti redaktorių?"
+msgstr "%s Nieko nepakeitėte, atnaujinti redaktorių?"
#: ../calendar/gui/dialogs/comp-editor-page.c:464
#, c-format
@@ -5503,9 +5500,9 @@ msgstr "Nepavyko atnaujinti objekto"
#, c-format
msgid "<b>%d</b> File Attached"
msgid_plural "<b>%d</b> Files Attached"
-msgstr[0] "<b>%d</b> prikabinta byla"
-msgstr[1] "<b>%d</b> prikabintos bylos"
-msgstr[2] "<b>%d</b> prikabintų bylų"
+msgstr[0] "<b>%d</b> prisegta byla"
+msgstr[1] "<b>%d</b> prisegtos bylos"
+msgstr[2] "<b>%d</b> prisegtų bylų"
#: ../calendar/gui/dialogs/comp-editor.c:900 ../composer/e-msg-composer.c:2339
msgid "Hide _Attachment Bar (drop attachments here)"
@@ -5567,8 +5564,7 @@ msgstr "Nėra apžvalgos"
#: ../calendar/gui/dialogs/comp-editor.c:2063
#: ../calendar/gui/dialogs/comp-editor.c:2087
msgid "Changes made to this item may be discarded if an update arrives"
-msgstr ""
-"Pakeitimai padaryti Å¡iame punkte bus prarasti, jei atsiras atnaujinimai"
+msgstr "Šio įrašo pakeitimai, jei bus atnaujinimų"
#: ../calendar/gui/dialogs/comp-editor.c:2111
msgid "Unable to use current version!"
@@ -5576,63 +5572,63 @@ msgstr "Nepavyko paleisti turimos versijos!"
#: ../calendar/gui/dialogs/copy-source-dialog.c:61
msgid "Could not open source"
-msgstr "Nepavyko atidaryti Å¡altinio"
+msgstr "Nepavyko atverti Å¡altinio"
#: ../calendar/gui/dialogs/copy-source-dialog.c:69
msgid "Could not open destination"
-msgstr "Nepavyko atidaryti paskirties vietos"
+msgstr "Nepavyko atverti paskirties vietos"
#: ../calendar/gui/dialogs/copy-source-dialog.c:78
msgid "Destination is read only"
-msgstr "Paskirties vieta yra tik skaitoma"
+msgstr "Paskirties vieta yra tik skaitymui"
#: ../calendar/gui/dialogs/delete-error.c:54
msgid "The event could not be deleted due to a corba error"
-msgstr "Dėl corba klaidos nepavyko ištrinti įvykio"
+msgstr "Nepavyko ištrinti įvykio dėl CORBA klaidos"
#: ../calendar/gui/dialogs/delete-error.c:57
msgid "The task could not be deleted due to a corba error"
-msgstr "Dėl corba klaidos nepavyko ištrinti užduoties"
+msgstr "Nepavyko ištrinti užduoties dėl CORBA klaidos"
#: ../calendar/gui/dialogs/delete-error.c:60
msgid "The journal entry could not be deleted due to a corba error"
-msgstr "Dėl corba klaidos nepavyko ištrinti žurnalo įrašo"
+msgstr "Nepavyko ištrinti žurnalo įrašo dėl CORBA klaidos"
#: ../calendar/gui/dialogs/delete-error.c:63
msgid "The item could not be deleted due to a corba error"
-msgstr "Corba klaida neleido ištrinti elemento"
+msgstr "Nepavyko ištrinti įrašo dėl CORBA klaidos"
#: ../calendar/gui/dialogs/delete-error.c:70
msgid "The event could not be deleted because permission was denied"
-msgstr "Įvykis negali būti ištrintas, kadangi nepakanta turimų teisių"
+msgstr "Įvykis negali būti ištrintas, kadangi nepakanka teisių"
#: ../calendar/gui/dialogs/delete-error.c:73
msgid "The task could not be deleted because permission was denied"
-msgstr "Užduotis negali būti ištrinta, nes nepakanka turimų teisių"
+msgstr "Užduotis negali būti ištrinta, nes nepakanka teisių"
#: ../calendar/gui/dialogs/delete-error.c:76
msgid "The journal entry could not be deleted because permission was denied"
-msgstr "Žurnalo įrašas negali būti ištrintas, nes nepakanka turimų teisių"
+msgstr "Žurnalo įrašas negali būti ištrintas, nes nepakanka teisių"
#: ../calendar/gui/dialogs/delete-error.c:79
msgid "The item could not be deleted because permission was denied"
-msgstr "Punktas negali būti ištrintas, nes nepakanka turimų teisių"
+msgstr "Punktas negali būti ištrintas, nes nepakanka teisių"
#: ../calendar/gui/dialogs/delete-error.c:86
msgid "The event could not be deleted due to an error"
-msgstr "Klaida neleido ištrinti įvykio"
+msgstr "Įvykio nepavyko ištrinti dėl klaidos"
#: ../calendar/gui/dialogs/delete-error.c:89
msgid "The task could not be deleted due to an error"
-msgstr "Klaida neleido ištrinti užduoties"
+msgstr "Užduoties nepavyko ištrinti dėl klaidos"
#: ../calendar/gui/dialogs/delete-error.c:92
msgid "The journal entry could not be deleted due to an error"
-msgstr "Klaida neleido ištrinti žurnalo įrašo"
+msgstr "Žurnalo įrašo nepavyko ištrinti dėl klaidos"
#: ../calendar/gui/dialogs/delete-error.c:95
msgid "The item could not be deleted due to an error"
-msgstr "Klaida neleido ištrinti elemento"
+msgstr "Įrašo nepavyko ištrinti dėl klaidos"
#: ../calendar/gui/dialogs/e-delegate-dialog.glade.h:1
msgid "Contacts..."
@@ -5690,7 +5686,7 @@ msgstr "Klaidingas pabaigos laikas"
#: ../calendar/gui/dialogs/event-page.c:1675
#, c-format
msgid "Unable to open the calendar '%s'."
-msgstr "Nepavyko atidaryti kalendoriaus „%s“."
+msgstr "Nepavyko atverti kalendoriaus „%s“."
#: ../calendar/gui/dialogs/event-page.c:1881
#, c-format
@@ -5838,8 +5834,8 @@ msgstr "_Pradžios laikas:"
#: ../calendar/gui/dialogs/meeting-page.glade.h:5
#: ../calendar/gui/e-cal-model-tasks.c:652
#: ../calendar/gui/e-itip-control.c:1104 ../composer/e-msg-composer.c:2117
-#: ../filter/filter-rule.c:878 ../mail/em-account-editor.c:684
-#: ../mail/em-account-editor.c:1290 ../mail/em-account-prefs.c:421
+#: ../filter/filter-rule.c:878 ../mail/em-account-editor.c:685
+#: ../mail/em-account-editor.c:1291 ../mail/em-account-prefs.c:437
#: ../mail/em-folder-view.c:993
#: ../plugins/calendar-weather/calendar-weather.c:371
#: ../plugins/calendar-weather/calendar-weather.c:425
@@ -6026,7 +6022,7 @@ msgstr "pirmas"
#: ../calendar/gui/dialogs/recurrence-page.c:985
msgid "second"
-msgstr "sekundÄ—"
+msgstr "antras"
#: ../calendar/gui/dialogs/recurrence-page.c:986
msgid "third"
@@ -6366,7 +6362,7 @@ msgstr "%s yra skirtas nežinomam daviklio tipui"
#: ../calendar/gui/e-cal-component-preview.c:70 ../mail/em-folder-view.c:2573
#, c-format
msgid "Click to open %s"
-msgstr "NorÄ—dami atidaryti %s, paspauskite Äia"
+msgstr "NorÄ—dami atverti %s, spragtelkite Äia"
#: ../calendar/gui/e-cal-component-preview.c:155 ../filter/filter-rule.c:795
msgid "Untitled"
@@ -6452,7 +6448,7 @@ msgid ""
"\n"
"45.436845,125.862501"
msgstr ""
-"Geografinė vietovė turi būti įvesta formatu:\n"
+"Geografinė pozicija turi būti įvesta formatu:\n"
"\n"
"45.436845,125.862501"
@@ -6562,7 +6558,7 @@ msgstr "Ati_daryti"
#: ../calendar/gui/e-calendar-table.c:1157
msgid "Open _Web Page"
-msgstr "Atverti Tinklapį"
+msgstr "Atverti tinklalapį"
#: ../calendar/gui/e-calendar-table.c:1158
#: ../calendar/gui/e-calendar-view.c:1396 ../mail/em-folder-view.c:976
@@ -6606,7 +6602,7 @@ msgstr "_Pažymėti užbaigta"
#: ../calendar/gui/e-calendar-table.c:1172
msgid "_Mark Selected Tasks as Complete"
-msgstr "_Pažymėti Pasirinktas Užduotis kaip Užbaigtas"
+msgstr "_Pažymėti pasirinktas užduotis užbaigtomis"
#. FIXME: need to disable for undeletable folders
#: ../calendar/gui/e-calendar-table.c:1176
@@ -6914,12 +6910,12 @@ msgstr "Atmestas"
msgid ""
"The meeting has been cancelled, however it could not be found in your "
"calendars"
-msgstr "Å is susitikimas buvo atÅ¡auktas, taÄiau jo JÅ«sų kalendoriuose nÄ—ra"
+msgstr "Å is susitikimas buvo atÅ¡auktas, taÄiau jo nÄ—ra JÅ«sų kalendoriuose"
#: ../calendar/gui/e-itip-control.c:1231
msgid ""
"The task has been cancelled, however it could not be found in your task lists"
-msgstr "Å i užduotis buvo atÅ¡aukta, taÄiau jos JÅ«sų kalendoriuose nÄ—ra"
+msgstr "Å i užduotis buvo atÅ¡aukta, taÄiau jos nÄ—ra JÅ«sų kalendoriuose"
#: ../calendar/gui/e-itip-control.c:1310
#, c-format
@@ -6989,7 +6985,7 @@ msgstr "<b>%s</b> atsiuntė nesuprantamą atsakymą į užklausimą."
#: ../calendar/gui/e-itip-control.c:1359
msgid "Bad Meeting Message"
-msgstr "Blogas susitikimo pranešimas"
+msgstr "Netaisyklingas susitikimo pranešimas"
#: ../calendar/gui/e-itip-control.c:1386
#, c-format
@@ -7092,7 +7088,7 @@ msgstr "Pranešimas nėra teisingai suformuotas"
#: ../calendar/gui/e-itip-control.c:1610
msgid "The message contains only unsupported requests."
-msgstr "Pranešime yra išvardinti tik nepalaikomi prašymai."
+msgstr "Pranešime išvardinti tik nepalaikomi prašymai."
#: ../calendar/gui/e-itip-control.c:1643
msgid "The attachment does not contain a valid calendar message"
@@ -7159,15 +7155,15 @@ msgstr "Priimti"
#: ../calendar/gui/e-itip-control.c:2261
msgid "Tentatively accept"
-msgstr "Sutikti, bet negarantuoti"
+msgstr "Preliminariai sutikti"
#: ../calendar/gui/e-itip-control.c:2262
msgid "Decline"
-msgstr " Atmesti "
+msgstr "Atmesti"
#: ../calendar/gui/e-itip-control.c:2291
msgid "Send Free/Busy Information"
-msgstr "Siųsti Laisvas/Užimtas Informaciją"
+msgstr "Siųsti laisvas/užimtas informaciją"
#: ../calendar/gui/e-itip-control.c:2319
msgid "Update respondent status"
@@ -7387,7 +7383,7 @@ msgstr "Būtini žmonės ir _vienas resursas"
msgid "Enter the password for %s"
msgstr "Įveskite „%s“ slaptažodį"
-#: ../calendar/gui/e-tasks.c:763 ../calendar/gui/gnome-cal.c:2373
+#: ../calendar/gui/e-tasks.c:763 ../calendar/gui/gnome-cal.c:2372
#, c-format
msgid ""
"Error on %s:\n"
@@ -7403,7 +7399,7 @@ msgstr "Įkeliamos užduotys"
#: ../calendar/gui/e-tasks.c:895
#, c-format
msgid "Opening tasks at %s"
-msgstr "Atidaromos užduotys %s"
+msgstr "Atveriamos užduotys %s"
#: ../calendar/gui/e-tasks.c:1091
msgid "Completing tasks..."
@@ -7433,34 +7429,34 @@ msgid "Updating query"
msgstr "Atnaujinama užklausa"
#. bonobo displays this string so it must be in locale
-#: ../calendar/gui/gnome-cal.c:2058 ../widgets/menus/gal-view-menus.c:351
+#: ../calendar/gui/gnome-cal.c:2057 ../widgets/menus/gal-view-menus.c:351
msgid "Custom View"
msgstr "Naudotojo pritaikytas vaizdas"
-#: ../calendar/gui/gnome-cal.c:2059
+#: ../calendar/gui/gnome-cal.c:2058
msgid "Save Custom View"
msgstr "IÅ¡saugoti naudotojo pritaikytÄ… vaizdÄ…"
-#: ../calendar/gui/gnome-cal.c:2064 ../widgets/menus/gal-view-menus.c:373
+#: ../calendar/gui/gnome-cal.c:2063 ../widgets/menus/gal-view-menus.c:373
msgid "Define Views..."
msgstr "Nurodyti vaizdus..."
-#: ../calendar/gui/gnome-cal.c:2223
+#: ../calendar/gui/gnome-cal.c:2222
#, c-format
msgid "Loading appointments at %s"
msgstr "Įkeliami %s paskyrimai"
-#: ../calendar/gui/gnome-cal.c:2242
+#: ../calendar/gui/gnome-cal.c:2241
#, c-format
msgid "Loading tasks at %s"
msgstr "Įkeliamos %s užduotys"
-#: ../calendar/gui/gnome-cal.c:2339
+#: ../calendar/gui/gnome-cal.c:2338
#, c-format
msgid "Opening %s"
-msgstr "Atidaroma %s"
+msgstr "Atveriama %s"
-#: ../calendar/gui/gnome-cal.c:3229
+#: ../calendar/gui/gnome-cal.c:3228
msgid "Purging"
msgstr "IÅ¡valoma"
@@ -7543,7 +7539,7 @@ msgstr "Žurnalo informacija"
#: ../calendar/gui/itip-utils.c:399 ../calendar/gui/itip-utils.c:524
msgid "Free/Busy information"
-msgstr "Laisvas/užsiėmęs informacija"
+msgstr "Laisvas/užimtas informacija"
#: ../calendar/gui/itip-utils.c:401
msgid "Calendar information"
@@ -7584,7 +7580,7 @@ msgstr ""
"PasikeitÄ— Evolution užduoÄių aplankų hierarchija ir vieta, lyginant su tuo, "
"kokia ji buvo Evolution 1.x versijose.\n"
"\n"
-"Palaukite kol Evolution perkels Jūsų aplankus..."
+"Palaukite kol Evolution perkels aplankus..."
#: ../calendar/gui/migration.c:155
msgid ""
@@ -7596,7 +7592,7 @@ msgstr ""
"PasikeitÄ— Evolution užduoÄių aplankų hierarchija ir vieta, lyginant su tuo, "
"kokia ji buvo Evolution 1.x versijose.\n"
"\n"
-"Palaukite kol Evolution perkels Jūsų aplankus..."
+"Palaukite kol Evolution perkels aplankus..."
#. FIXME: set proper domain/code
#: ../calendar/gui/migration.c:745 ../calendar/gui/migration.c:912
@@ -9557,7 +9553,7 @@ msgstr "_Cc:"
#: ../composer/e-msg-composer-hdrs.c:613
msgid "Enter the addresses that will receive a carbon copy of the message"
-msgstr "Įveskite adresus, kuriais bus išsiųsta šio laiško kopiją"
+msgstr "Įveskite adresus, kuriais bus išsiųsta šio laiško kopija"
#: ../composer/e-msg-composer-hdrs.c:616
msgid "_Bcc:"
@@ -9603,15 +9599,15 @@ msgstr ""
#: ../composer/e-msg-composer.c:1222 ../composer/e-msg-composer.c:1255
msgid "Unknown reason"
-msgstr "Nežinomas priežastis"
+msgstr "Nežinoma priežastis"
#: ../composer/e-msg-composer.c:1292
msgid "Could not open file"
-msgstr "Nepavyko atidaryti bylos"
+msgstr "Nepavyko atverti bylos"
#: ../composer/e-msg-composer.c:1300
msgid "Unable to retrieve message from editor"
-msgstr "Nepavyko gauti laiško iš redaktoriaus"
+msgstr "Nepavyko gauti laiško iš teksto redaktoriaus"
#: ../composer/e-msg-composer.c:1570
msgid "Untitled Message"
@@ -9620,10 +9616,10 @@ msgstr "Neužvardintas laiškas"
#. NB: This function is never used anymore
#: ../composer/e-msg-composer.c:1604
msgid "Open File"
-msgstr "Atidaryti bylÄ…"
+msgstr "Atverti bylÄ…"
-#: ../composer/e-msg-composer.c:2001 ../mail/em-account-editor.c:587
-#: ../mail/em-account-editor.c:632 ../mail/em-account-editor.c:699
+#: ../composer/e-msg-composer.c:2001 ../mail/em-account-editor.c:588
+#: ../mail/em-account-editor.c:633 ../mail/em-account-editor.c:700
msgid "Autogenerated"
msgstr "Autogeneruotas"
@@ -9647,12 +9643,12 @@ msgstr ""
#. mail-composer:no-attach primary
#: ../composer/mail-composer-errors.xml.h:2
msgid "You cannot attach the file `{0}' to this message."
-msgstr "Jūs negalite prie šio laiško prisegti bylos „{0}“."
+msgstr "Jūs negalite prisegti bylos „{0}“ prie šio laiško."
#. 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 "Byla „{0}“ nėra paprasta byla ir negali būti išsiųsta šiuo laišku."
+msgstr "Byla „{0}“ nėra paprasta byla ir negali būti išsiųsta laišku."
#. mail-composer:attach-directory primary
#: ../composer/mail-composer-errors.xml.h:8
@@ -9690,7 +9686,7 @@ msgstr "Dėl „{1}“."
#. mail-composer:recover-autosave title
#: ../composer/mail-composer-errors.xml.h:16
msgid "Unfinished messages found"
-msgstr "Rastos nebaigtos žinutės"
+msgstr "Rasta nebaigtÄ— žinuÄių"
#. mail-composer:recover-autosave primary
#: ../composer/mail-composer-errors.xml.h:18
@@ -9703,8 +9699,8 @@ msgid ""
"Evolution quit unexpectedly while you were composing a new message. "
"Recovering the message will allow you to continue where you left off."
msgstr ""
-"Jums rašant naują žinutę, Evolution netikėtai užsidarė. Žinutės atkūrimas "
-"leis Jums tęsti žinutės rašymą nuo ten, kur baigėte."
+"Jums rašant žinutę, Evolution netikėtai užsidarė. Žinutės atkūrimas leis "
+"tęsti žinutės rašymą nuo ten, kur baigėte."
#: ../composer/mail-composer-errors.xml.h:21
msgid "Don't Recover"
@@ -9734,7 +9730,7 @@ msgstr "Įspėjimas: laiškas pakeistas"
msgid ""
"Are you sure you want to discard the message, titled '{0}', you are "
"composing?"
-msgstr "Ar tikrai norite atsisakyti Jūsų rašomos žinutės, pavadintos „{0}?"
+msgstr "Ar tikrai norite atsisakyti rašomos žinutės, pavadintos „{0}?"
#. mail-composer:exit-unsaved secondary
#: ../composer/mail-composer-errors.xml.h:32
@@ -9743,9 +9739,9 @@ msgid ""
"you choose to save the message in your Drafts folder. This will allow you to "
"continue the message at a later date."
msgstr ""
-"Jeigu uždarysite šio redaktoriaus langą, Jūsų žinutė bus panaikinta, nebent "
-"JÅ«s pasirinksite iÅ¡saugoti jÄ… JÅ«sų juodraÅ¡Äių aplanke. Å iuo atveju JÅ«s "
-"vėliau galėsite toliau tęsti šios žinutės redagavimą."
+"Jei uždarysite šio redaktoriaus langą, Jūsų žinutė bus panaikinta, nebent "
+"pasirinksite iÅ¡saugoti jÄ… juodraÅ¡Äių aplanke. Tokiu atveju vÄ—liau galÄ—site "
+"toliau tęsti šios žinutės redagavimą."
#: ../composer/mail-composer-errors.xml.h:33
msgid "_Discard Changes"
@@ -9763,7 +9759,7 @@ msgstr "Nepavyko sukurti žinutė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 "Dėl „{0}“, Jums gali reikti pasirinkti kitus pašto nustatymus."
+msgstr "Dėl „{0}“, gali reikti pasirinkti kitus pašto nustatymus."
#. mail-composer:no-sig-file primary
#: ../composer/mail-composer-errors.xml.h:40
@@ -9779,7 +9775,7 @@ msgstr "Visi abonentai buvo pašalinti."
#: ../composer/mail-composer-errors.xml.h:46
msgid "You need to configure an account before you can compose mail."
msgstr ""
-"Prieš pradėdami rašyti laiškus Jūs turite nustatyti savo pašto abonento "
+"Prieš pradėdami rašyti laiškus turite nustatyti savo pašto abonento "
"parametrus."
#. mail-composer:no-address-control primary
@@ -9897,7 +9893,7 @@ msgstr "Visada išsiųsti perskaitymo pranešimą"
#: ../designs/read_receipts/read.glade.h:7
msgid "Ask me if I want to send back a read receipt"
-msgstr "Paklausti ar galima siųsti perskaitymo pranešimą"
+msgstr "Paklausti, ar siųsti perskaitymo pranešimą"
#: ../designs/read_receipts/read.glade.h:8
msgid "Never send back a read receipt"
@@ -9913,7 +9909,7 @@ msgstr "PraÅ¡yti skaitymo patvirtinimo kiekviename siunÄiamame laiÅ¡ke"
#: ../designs/read_receipts/read.glade.h:11
msgid "Unless the message is sent to a mailing list, and not to me personally"
-msgstr "Jei žinutė yra siųsta į susirašinėjimo sąrašą, o ne asmeniškai"
+msgstr "Nebent jei žinutÄ— siunÄiama į konferencijÄ…, o ne asmeniÅ¡kai"
#: ../designs/read_receipts/read.glade.h:12
msgid ""
@@ -10109,7 +10105,7 @@ msgstr "%Y %m %d"
#: ../filter/filter-datespec.c:406
msgid "Select a time to compare against"
-msgstr "Pasirinkit laikÄ…, su kuriuo palyginti"
+msgstr "Pasirinkite laikÄ…, su kuriuo lyginti"
#. filter:no-date primary
#: ../filter/filter-errors.xml.h:2
@@ -10145,7 +10141,7 @@ msgstr "Bloga reguliarioji išraiška „{0}“."
#. filter:bad-regexp secondary
#: ../filter/filter-errors.xml.h:16
msgid "Could not compile regular expression \"{1}\"."
-msgstr "Nepavyko sukompiliuoti reguliarios išraiškos „{1}“."
+msgstr "Nepavyko sukompiliuoti reguliariosios išraiškos „{1}“."
#. filter:no-name primary
#. mail:no-name-vfolder primary
@@ -10333,7 +10329,7 @@ msgstr ""
#: ../mail/GNOME_Evolution_Mail.server.in.in.h:4
msgid "Configure your email accounts here"
-msgstr "Čia galite konfigūruoti Jūsų pašto abonementus"
+msgstr "Čia galite konfigūruoti pašto abonementus"
#: ../mail/GNOME_Evolution_Mail.server.in.in.h:5
msgid "Evolution Mail"
@@ -10349,15 +10345,15 @@ msgstr "Evolution pašto komponentas"
#: ../mail/GNOME_Evolution_Mail.server.in.in.h:8
msgid "Evolution Mail composer"
-msgstr "Evolution pašto rašymas"
+msgstr "Evolution laiškų redaktorius"
#: ../mail/GNOME_Evolution_Mail.server.in.in.h:9
msgid "Evolution Mail composer configuration control"
-msgstr "Evolution pašto rašymo nustatymų valdymas"
+msgstr "Evolution laiškų rašymo nustatymai"
#: ../mail/GNOME_Evolution_Mail.server.in.in.h:10
msgid "Evolution Mail preferences control"
-msgstr "Evolution pašto nustatymų valdymas"
+msgstr "Evolution pašto nustatymai"
#: ../mail/GNOME_Evolution_Mail.server.in.in.h:11 ../mail/em-folder-view.c:469
#: ../mail/importers/elm-importer.c:418
@@ -10380,12 +10376,12 @@ msgstr "Pašto nustatymai"
msgid "_Mail"
msgstr "_Paštas"
-#: ../mail/em-account-editor.c:386
+#: ../mail/em-account-editor.c:387
#, c-format
msgid "%s License Agreement"
msgstr "Sutikimas su %s sutartimi"
-#: ../mail/em-account-editor.c:393
+#: ../mail/em-account-editor.c:394
#, c-format
msgid ""
"\n"
@@ -10394,66 +10390,66 @@ msgid ""
"and tick the check box for accepting it\n"
msgstr ""
"\n"
-"Prašom atidžiai perskaityti žemiau rodomą sutikimą\n"
+"Atidžiai perskaitykite žemiau rodomą sutikimą\n"
"su %s sutartimi\n"
"ir jeigu su ja sutinkate, pažymÄ—kite paukÅ¡ÄiukÄ…\n"
-#: ../mail/em-account-editor.c:463 ../mail/em-filter-folder-element.c:237
+#: ../mail/em-account-editor.c:464 ../mail/em-filter-folder-element.c:237
#: ../mail/em-vfolder-rule.c:494
msgid "Select Folder"
msgstr "Pasirinkite aplankÄ…"
-#: ../mail/em-account-editor.c:1663 ../mail/mail-config.glade.h:89
+#: ../mail/em-account-editor.c:1664 ../mail/mail-config.glade.h:89
msgid "Identity"
msgstr "AsmenybÄ—"
-#: ../mail/em-account-editor.c:1699 ../mail/mail-config.glade.h:114
+#: ../mail/em-account-editor.c:1700 ../mail/mail-config.glade.h:114
msgid "Receiving Email"
msgstr "Pašto gavimas"
-#: ../mail/em-account-editor.c:1876
+#: ../mail/em-account-editor.c:1877
msgid "Automatically check for _new mail every"
-msgstr "Automatiškai tinkrinti _naujo pašto kas"
+msgstr "Automatiškai tikrinti _naujo pašto kas"
-#: ../mail/em-account-editor.c:2044 ../mail/mail-config.glade.h:124
+#: ../mail/em-account-editor.c:2045 ../mail/mail-config.glade.h:124
msgid "Sending Email"
msgstr "Pašto siuntimas"
-#: ../mail/em-account-editor.c:2088 ../mail/mail-config.glade.h:67
+#: ../mail/em-account-editor.c:2089 ../mail/mail-config.glade.h:67
msgid "Defaults"
msgstr "Įprastos reikšmės"
-#: ../mail/em-account-editor.c:2147 ../mail/mail-config.glade.h:119
+#: ../mail/em-account-editor.c:2148 ../mail/mail-config.glade.h:119
msgid "Security"
msgstr "Saugumas"
#. Most sections for this is auto-generated fromt the camel config
-#: ../mail/em-account-editor.c:2184 ../mail/em-account-editor.c:2259
+#: ../mail/em-account-editor.c:2185 ../mail/em-account-editor.c:2260
msgid "Receiving Options"
msgstr "Gavimo nustatymai"
-#: ../mail/em-account-editor.c:2185 ../mail/em-account-editor.c:2260
+#: ../mail/em-account-editor.c:2186 ../mail/em-account-editor.c:2261
msgid "Checking for New Mail"
msgstr "Tikrinama, ar yra naujų laiškų"
-#: ../mail/em-account-editor.c:2600 ../mail/mail-config.glade.h:33
+#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:33
msgid "Account Editor"
msgstr "Abonementų tvarkyklė"
-#: ../mail/em-account-editor.c:2600 ../mail/mail-config.glade.h:79
+#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:79
msgid "Evolution Account Assistant"
msgstr "Evolution abonementų padėjėjas"
#. translators: default account indicator
-#: ../mail/em-account-prefs.c:412
+#: ../mail/em-account-prefs.c:428
msgid "[Default]"
msgstr "[Įprasta]"
-#: ../mail/em-account-prefs.c:466
+#: ../mail/em-account-prefs.c:482
msgid "Account name"
msgstr "Abonemento vardas"
-#: ../mail/em-account-prefs.c:468
+#: ../mail/em-account-prefs.c:484
msgid "Protocol"
msgstr "Protokolas"
@@ -10500,7 +10496,7 @@ msgstr "_Filtravimo taisyklÄ—s"
#. Automatically generated. Do not edit.
#: ../mail/em-filter-i18n.h:2
msgid "Adjust Score"
-msgstr "Adjust Score"
+msgstr "Keisti įvertį"
#: ../mail/em-filter-i18n.h:3
msgid "Assign Color"
@@ -10520,7 +10516,7 @@ msgstr "Signalas"
#: ../mail/em-filter-i18n.h:7
msgid "contains"
-msgstr "susideda iš"
+msgstr "viduje turi"
#: ../mail/em-filter-i18n.h:8
msgid "Copy to Folder"
@@ -10540,7 +10536,7 @@ msgstr "IÅ¡trintas"
#: ../mail/em-filter-i18n.h:13
msgid "does not contain"
-msgstr "nesusideda iš"
+msgstr "viduje neturi"
#: ../mail/em-filter-i18n.h:14
msgid "does not end with"
@@ -10873,7 +10869,7 @@ msgstr "_Perkelti į aplanką"
#: ../mail/em-folder-tree.c:1750 ../mail/mail-ops.c:1026
#, c-format
msgid "Scanning folders in \"%s\""
-msgstr "Skanuojami aplankai, esantys „%s“"
+msgstr "Peržiūrimi aplankai, esantys „%s“"
#: ../mail/em-folder-tree.c:2023
#, c-format
@@ -10925,7 +10921,7 @@ msgstr "_Rodyti"
#: ../mail/em-folder-tree.c:2803
msgid "Open in _New Window"
-msgstr "Atidaryti _naujame lange"
+msgstr "Atverti _naujame lange"
#: ../mail/em-folder-tree.c:2807
msgid "_Copy..."
@@ -11070,7 +11066,7 @@ msgstr "Å i_uo adresu"
#: ../mail/em-folder-view.c:2568
#, c-format
msgid "Click to mail %s"
-msgstr "NorÄ—dami iÅ¡siųsti %s, paspauskite Äia"
+msgstr "NorÄ—dami iÅ¡siųsti %s, spragtelkite Äia"
#. message-search popup match count string
#: ../mail/em-format-html-display.c:412
@@ -11099,12 +11095,11 @@ msgid ""
"This message is signed and is valid meaning that it is very likely that this "
"message is authentic."
msgstr ""
-"Šis laiškas yra pasirašytas ir yra geras, kas reiškia, jog šis laiškas yra "
-"autentiškas."
+"Šis laiškas yra pasirašytas ir yra taisyklingas, todėl yra autentiškas."
#: ../mail/em-format-html-display.c:682 ../mail/em-format-html.c:581
msgid "Invalid signature"
-msgstr "Blogas parašas"
+msgstr "Netinkamas parašas"
#: ../mail/em-format-html-display.c:682
msgid ""
@@ -11123,8 +11118,7 @@ msgid ""
"This message is signed with a valid signature, but the sender of the message "
"cannot be verified."
msgstr ""
-"Laiškas pasirašytas su tvarkingu parašu, bet siuntėjas negali būti "
-"patikrintas."
+"Laiškas pasirašytas tvarkingu parašu, bet siuntėjas negali būti patikrintas."
#: ../mail/em-format-html-display.c:689 ../mail/em-format-html.c:588
msgid "Unencrypted"
@@ -11135,7 +11129,7 @@ msgid ""
"This message is not encrypted. Its content may be viewed in transit across "
"the Internet."
msgstr ""
-"Šis laiškas nėra šifruotas. Jo turinys gali būti perskaitytas siuntimo "
+"Šis laiškas nėra šifruotas. Jo turinys gali būti perskaitytas persiuntimo "
"Internetu metu."
#: ../mail/em-format-html-display.c:690 ../mail/em-format-html.c:589
@@ -11174,7 +11168,7 @@ msgid ""
"practical amount of time."
msgstr ""
"Šis laiškas yra užšifruotas naudojant stiprų kriptografinį algoritmą. "
-"Įsilaužėliui yra labai sunku atkoduoti tokį laišką naudojant šiuo metu "
+"Įsilaužėliui būtų labai sunku iššifruoti tokį laišką naudojant šiuo metu "
"prieinamas priemones."
#: ../mail/em-format-html-display.c:793 ../smime/gui/smime-ui.glade.h:47
@@ -11369,7 +11363,7 @@ msgstr ""
"Evolution pašto aplankų vieta ir hierarchija šiuo metu yra kitokia nei 1.x "
"versijos.\n"
"\n"
-"Palaukite kol Evolution perkels Jūsų ankstesnius aplankus..."
+"Palaukite kol Evolution perkels ankstesnius aplankus..."
#: ../mail/em-migrate.c:1632
#, c-format
@@ -11384,12 +11378,12 @@ msgstr "Nepavyko nukopijuoti aplanko „%s„ į %s: %s"
#: ../mail/em-migrate.c:1843
#, c-format
msgid "Unable to scan for existing mailboxes at `%s': %s"
-msgstr "Skanavimas dÄ—l naujų paÅ¡to dėžutÄių, esanÄių „%s“, nepavyko: %s"
+msgstr "Naujų paÅ¡to dėžuÄių, esanÄių „%s“, peržiÅ«ra nepavyko: %s"
#: ../mail/em-migrate.c:2047
#, c-format
msgid "Unable to open old POP keep-on-server data `%s': %s"
-msgstr "Nepavyko atidaryti senų POP keep-on-server duomenų „%s“: %s"
+msgstr "Nepavyko atverti senų POP keep-on-server duomenų „%s“: %s"
#: ../mail/em-migrate.c:2061
#, c-format
@@ -11455,11 +11449,11 @@ msgstr "Įtraukti į adresų knygą"
#: ../mail/em-popup.c:666
#, c-format
msgid "Open in %s..."
-msgstr "Atidaryti su %s..."
+msgstr "Atverti su %s..."
#: ../mail/em-subscribe-editor.c:611
msgid "This store does not support subscriptions, or they are not enabled."
-msgstr "Ši saugykla nepalaiko užsakymų arba jie yra neįjungti."
+msgstr "Ši saugykla nepalaiko užsakymų arba jie neįjungti."
#: ../mail/em-subscribe-editor.c:640
msgid "Subscribed"
@@ -11472,7 +11466,7 @@ msgstr "Aplankas"
#. FIXME: This is just to get the shadow, is there a better way?
#: ../mail/em-subscribe-editor.c:859
msgid "Please select a server."
-msgstr "Prašom pasirinkti serverį."
+msgstr "Pasirinkite serverį."
#: ../mail/em-subscribe-editor.c:880
msgid "No server has been selected"
@@ -11518,7 +11512,7 @@ msgstr "Automatinis nuorodų atpažinimas"
#: ../mail/evolution-mail.schemas.in.in.h:2
msgid "Automatic smiley recognition"
-msgstr "Automatinis šypsiukų atpažinimas"
+msgstr "Automatinis šypsniukų atpažinimas"
#: ../mail/evolution-mail.schemas.in.in.h:3
msgid "Check incoming mail being junk"
@@ -11542,19 +11536,19 @@ msgstr "Rašymo lango įprastas plotis"
#: ../mail/evolution-mail.schemas.in.in.h:8
msgid "Default charset in which to compose messages"
-msgstr "Koduotė, kuri yra naudojama kuriant laiškus"
+msgstr "Koduotė, naudojama kuriant laiškus"
#: ../mail/evolution-mail.schemas.in.in.h:9
msgid "Default charset in which to compose messages."
-msgstr "Koduotė, kuri yra naudojama kuriant laiškus."
+msgstr "Koduotė, naudojama kuriant laiškus."
#: ../mail/evolution-mail.schemas.in.in.h:10
msgid "Default charset in which to display messages"
-msgstr "Koduotė, kuri yra naudojama skaitant laiškus"
+msgstr "Koduotė, naudojama skaitant laiškus"
#: ../mail/evolution-mail.schemas.in.in.h:11
msgid "Default charset in which to display messages."
-msgstr "Koduotė, kuri yra naudojama skaitant laiškus"
+msgstr "Koduotė, naudojama skaitant laiškus"
#: ../mail/evolution-mail.schemas.in.in.h:12
msgid "Default forward style"
@@ -11574,7 +11568,7 @@ msgstr "Įprastas užsisakymo dialogo aukštis"
#: ../mail/evolution-mail.schemas.in.in.h:16
msgid "Default reply style"
-msgstr "Įprastas atsakymų stilius"
+msgstr "Įprastas atsakymo stilius"
#: ../mail/evolution-mail.schemas.in.in.h:17
msgid "Default width of the Composer Window"
@@ -11607,7 +11601,7 @@ msgstr ""
#: ../mail/evolution-mail.schemas.in.in.h:24
msgid "Enable/disable caret mode"
-msgstr "Perjungia žymeklio veikseną"
+msgstr "Perjungti žymeklio veikseną"
#: ../mail/evolution-mail.schemas.in.in.h:25
msgid "Height of the message-list pane"
@@ -11622,8 +11616,8 @@ msgid ""
"If a user tries to open 10 or more messages at one time, ask the user if "
"they really want to do it."
msgstr ""
-"Jeigu naudotojas bando tuo paÄiu metu atidaryti 10 ar daugiau laiÅ¡kų, "
-"paklausti jo ar jis tikrai nori tai padaryti."
+"Jeigu naudotojas bando tuo paÄiu metu atverti 10 ar daugiau laiÅ¡kų, "
+"paklausti, ar jis tikrai nori tai atlikti."
#: ../mail/evolution-mail.schemas.in.in.h:28
msgid ""
@@ -11668,8 +11662,8 @@ 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 ""
-"Evolution pašto komponentui žinomų žymių sąrašas. Sąraše yra eilutės, "
-"kuriose yra name:color, kur spalvai naudojama HTML šešioliktainis kodas."
+"Evolution pašto komponentui žinomų žymių sąrašas. Sąraše yra eilutės vardas:"
+"spalva, kur spalvai naudojama HTML šešioliktainis kodas."
#: ../mail/evolution-mail.schemas.in.in.h:36
msgid "List of mime types to check for bonobo component viewers"
@@ -11703,27 +11697,27 @@ msgstr "Registruoti filtrų veiksmus į nurodytą žurnalo bylą."
#: ../mail/evolution-mail.schemas.in.in.h:42
msgid "Logfile to log filter actions"
-msgstr "Byla registruojanti filtrų veiksmus"
+msgstr "Filtrų veiksmų žurnalo byla"
#: ../mail/evolution-mail.schemas.in.in.h:43
msgid "Logfile to log filter actions."
-msgstr "Byla registruojanti filtrų veiksmus."
+msgstr "Filtrų veiksmų žurnalo byla"
#: ../mail/evolution-mail.schemas.in.in.h:44
msgid "Mark as Seen after specified timeout"
-msgstr "Pažymėti kaip perskaityta po nurodyto laiko tarpo"
+msgstr "Pažymėti kaip perskaitytą po nurodyto laiko tarpo"
#: ../mail/evolution-mail.schemas.in.in.h:45
msgid "Mark as Seen after specified timeout."
-msgstr "Pažymėti kaip Perskaityta po nurodyto laiko tarpo."
+msgstr "Pažymėti kaip perskaitytą po nurodyto laiko tarpo."
#: ../mail/evolution-mail.schemas.in.in.h:46
msgid "Mark citations in the message \"Preview\""
-msgstr "Laiško „Peržiūroje“ pažymėti citatas"
+msgstr "Žymėti citatas Laiško „Peržiūroje“"
#: ../mail/evolution-mail.schemas.in.in.h:47
msgid "Mark citations in the message \"Preview\"."
-msgstr "Laiško „Peržiūroje“ pažymėti citatas."
+msgstr "Žymėti citatas Laiško „Peržiūroje“"
#: ../mail/evolution-mail.schemas.in.in.h:48
msgid "Message Window default height"
@@ -11740,20 +11734,20 @@ msgstr "Laiško rodymo stilius (normalus, pilnos antraštės, pradinis tekstas)"
#: ../mail/evolution-mail.schemas.in.in.h:51
msgid "Minimum days between emptying the trash on exit"
msgstr ""
-"Mažiausias dienų skaiÄius tarp Å¡iukÅ¡linÄ—s iÅ¡valymų, kai uždaroma programa"
+"Mažiausias dienų skaiÄius tarp Å¡iukÅ¡linÄ—s iÅ¡valymų programos uždarymo metu"
#: ../mail/evolution-mail.schemas.in.in.h:52
msgid "Minimum time between emptying the trash on exit, in days."
msgstr ""
-"Mažiausias dienų tarpas tarp šiukšlinės išvalymų, kai uždaroma programa."
+"Mažiausias dienų tarpas tarp šiukšlinės išvalymų programos uždarymo metu."
#: ../mail/evolution-mail.schemas.in.in.h:53
msgid "New Mail Notify sound file"
-msgstr "Naujo pašto perspėjimų garso byla"
+msgstr "Pranešimo apie naują paštą garsinė byla"
#: ../mail/evolution-mail.schemas.in.in.h:54
msgid "New Mail Notify type"
-msgstr "Perspėjimų apie naują paštą tipas"
+msgstr "Pranešimo apie naują paštą tipas"
#: ../mail/evolution-mail.schemas.in.in.h:55
msgid "Prompt on empty subject"
@@ -11805,7 +11799,7 @@ msgstr "Atpažinti nuorodas tekste ir jas pakeisti."
#: ../mail/evolution-mail.schemas.in.in.h:65
msgid "Recognize smileys in text and replace them with images."
-msgstr "Atpažinti šypsiukus tekste ir juos pakeisti paveikslėliais."
+msgstr "Atpažinti šypsniukus tekste ir juos pakeisti paveikslėliais."
#: ../mail/evolution-mail.schemas.in.in.h:66
msgid "Run junk test on incoming mail"
@@ -11905,11 +11899,11 @@ msgstr "Kurti laiškų sąrašo gijas remiantis laiškų temomis"
#: ../mail/evolution-mail.schemas.in.in.h:88
msgid "Timeout for marking message as Seen"
-msgstr "Laiko tarpas, skirtas pažymėti laiškus kaip perskaitytus"
+msgstr "Laiko tarpas, po kurio laiškai pažymimi kaip perskaityti"
#: ../mail/evolution-mail.schemas.in.in.h:89
msgid "Timeout for marking message as Seen."
-msgstr "Laiko tarpas, skirtas pažymėti laiškus kaip perskaitytus."
+msgstr "Laiko tarpas, po kurio laiškai pažymimi kaip perskaityti."
#: ../mail/evolution-mail.schemas.in.in.h:90
msgid "UID string of the default account."
@@ -11925,7 +11919,7 @@ msgstr "Naudoti Spamassassin demonÄ… ir klientÄ… (spamc/spamd)"
#: ../mail/evolution-mail.schemas.in.in.h:93
msgid "Use custom fonts"
-msgstr "Naudoti savo Å¡riftus"
+msgstr "Naudoti specialius Å¡riftus"
#: ../mail/evolution-mail.schemas.in.in.h:94
msgid "Use custom fonts for displaying mail"
@@ -11937,7 +11931,7 @@ msgstr "Naudoti tik vietinius šlamšto testus."
#: ../mail/evolution-mail.schemas.in.in.h:96
msgid "Use only the local spam tests (no DNS)."
-msgstr "Naudoti tik vietinius šlamšto testus (no DNS)."
+msgstr "Naudoti tik vietinius šlamšto testus (be DNS)."
#: ../mail/evolution-mail.schemas.in.in.h:97
msgid "Variable width font"
@@ -12057,7 +12051,7 @@ msgid ""
"Would you like to import them into Evolution?"
msgstr ""
"Evolution rado Elm pašto bylų\n"
-"Ar norėtumėt jas importuoti į Evolution?"
+"Ar norėtumėte jas įkelti į Evolution?"
#: ../mail/importers/elm-importer.c:444
msgid "Elm"
@@ -12071,24 +12065,24 @@ msgstr "Paskirties aplankas:"
#: ../mail/importers/evolution-mbox-importer.c:120
#: ../mail/importers/evolution-outlook-importer.c:134
msgid "Select folder to import into"
-msgstr "Pasirinkit aplanką į kurį importuosit"
+msgstr "Pasirinkite aplanką, į kurį įkelsite"
#: ../mail/importers/evolution-mbox-importer.c:223
#: ../mail/importers/evolution-outlook-importer.c:257
#: ../mail/importers/mail-importer.c:226
#, c-format
msgid "Importing `%s'"
-msgstr "Importuojama „%s“"
+msgstr "Įkeliama „%s“"
#: ../mail/importers/evolution-outlook-importer.c:305
#: ../mail/importers/mail-importer.c:140
msgid "Importing mailbox"
-msgstr "Importuojama pašto dėžutė"
+msgstr "Įkeliama pašto dėžutė"
#: ../mail/importers/mail-importer.c:363
#, c-format
msgid "Scanning %s"
-msgstr "Skanuojama %s"
+msgstr "Peržiūrima %s"
#: ../mail/importers/netscape-importer.c:73
#, c-format
@@ -12112,11 +12106,11 @@ msgstr ""
"Dalis Jūsų Netscape pašto filtrų naudoja pašto prioritetų\n"
"požymius, kurie yra nepalaikomi Evolution. Evolution leidžia\n"
"kiekvienam laiškui priskirti įvertinimus nuo -3 iki 3 ir filtruoja\n"
-"laiškus naudodamasi šiais požymiais.\n"
+"laiškus pagal šiuos požymius.\n"
"\n"
-"Norint išvengti problemų buvo sukurtas filtrų rinkinys pavadintas\n"
+"Norint išvengti problemų buvo sukurtas filtrų rinkinys, pavadintas\n"
"„Prioritetų Filtru“, kuris Netscape paÅ¡to prioritetus perverÄia į\n"
-"Evolution įvertinimų sistemą ir leidžia panauti turimus įvertinimo\n"
+"Evolution įvertinimų sistemą ir leidžia panaudoti turimus įvertinimo\n"
"sistemos filtrus. Patikrinkite įkeltus filtrus ir įsitikinkite, jog jie "
"dirba\n"
"taip, kaip numatyta."
@@ -12184,7 +12178,7 @@ msgid ""
"Would you like to import them into Evolution?"
msgstr ""
"Evolution rado Pine pašto bylų.\n"
-"Ar norėtum jas importuoti į Evolution?"
+"Ar norėtumėte jas importuoti į Evolution?"
#: ../mail/importers/pine-importer.c:506
msgid "Pine"
@@ -12521,7 +12515,7 @@ msgstr "Spalvos"
#: ../mail/mail-config.glade.h:58
msgid "Confirm _when expunging a folder"
-msgstr "Patvirtinti kai _išvalomas aplankas"
+msgstr "Patvirtinti, kai _išvalomas aplankas"
#: ../mail/mail-config.glade.h:59
msgid ""
@@ -12717,19 +12711,19 @@ msgstr "Pasirin_kti..."
#: ../mail/mail-config.glade.h:120
msgid "Select HTML fixed width font"
-msgstr "Pasirinkit HTML fiksuoto ploÄio Å¡riftÄ…"
+msgstr "Pasirinkite HTML fiksuoto ploÄio Å¡riftÄ…"
#: ../mail/mail-config.glade.h:121
msgid "Select HTML fixed width font for printing"
-msgstr "Pasirinkit HTML fiksuoti ploÄio Å¡riftÄ… naudojamÄ… spausdinant"
+msgstr "Pasirinkite HTML fiksuoti ploÄio Å¡riftÄ… spausdinimui"
#: ../mail/mail-config.glade.h:122
msgid "Select HTML variable width font"
-msgstr "Pasirinkit HTML kintamo ploÄio Å¡riftÄ…"
+msgstr "Pasirinkite HTML kintamo ploÄio Å¡riftÄ…"
#: ../mail/mail-config.glade.h:123
msgid "Select HTML variable width font for printing"
-msgstr "Pasirinkit HTML kintamo ploÄio Å¡riftÄ… spausdinimui"
+msgstr "Pasirinkite HTML kintamo ploÄio Å¡riftÄ… spausdinimui"
#: ../mail/mail-config.glade.h:125
msgid "Sending Mail"
@@ -12761,7 +12755,7 @@ msgstr "Parašai"
#: ../mail/mail-config.glade.h:132
msgid "Specify _filename:"
-msgstr "Nurodykit _bylos vardÄ…:"
+msgstr "Nurodykite _bylos vardÄ…:"
#: ../mail/mail-config.glade.h:133
msgid "Spell Checking"
@@ -12788,7 +12782,7 @@ msgid ""
"signature. The name you specify will be used\n"
"for display purposes only. "
msgstr ""
-"Šio scenarijaus išvedamas tekstas bus naudojamas kaip Jūsų\n"
+"Šios programos išvedamas tekstas bus naudojamas kaip Jūsų\n"
"parašas. Nurodytas vardas bus naudojamas tik atvaizdavimo\n"
"tikslais. "
@@ -12993,7 +12987,7 @@ msgstr "_Užsakyti"
#: ../mail/mail-dialogs.glade.h:28
msgid "_Tick this to accept the license agreement"
-msgstr "_PažymÄ—kit Äia, jeigu sutinkate su licencija"
+msgstr "_PažymÄ—kite Äia, jei sutinkate su licencija"
#: ../mail/mail-dialogs.glade.h:29
msgid "_Unsubscribe"
@@ -13040,9 +13034,9 @@ msgid ""
"Check to make sure your password is spelled correctly. Remember that many "
"passwords are case sensitive; your caps lock might be on."
msgstr ""
-"Patikrinkite ar Jūsų slaptažodis parašytas teisingai. Atminkite, kad "
-"daugumoje slaptažodių yra skirtumas tarp raidžių registro; gali būti "
-"įjungtas Jūsų „CapsLock“ klavišas."
+"Patikrinkite, ar slaptažodis parašytas teisingai. Atminkite, kad daugumoje "
+"slaptažodių yra skirtumas tarp raidžių registro; galbūt aktyvi „CapsLock“ "
+"veiksena?"
#. mail:ask-send-html primary
#: ../mail/mail-errors.xml.h:10
@@ -13057,14 +13051,15 @@ msgid ""
"{0}\n"
"Send anyway?"
msgstr ""
-"Įsitikinkite, kad sekantys laiško gavėjai sutinka gauti HTML laiškus ir "
-"sugebÄ—s juos perskaityti:\n"
-"{0}Vistiek išsiųsti?"
+"Įsitikinkite, kad šie laiško gavėjai sutinka gauti HTML laiškus ir sugebės "
+"juos perskaityti:\n"
+"{0}\n"
+"Vis tiek išsiųsti?"
#. mail:ask-send-no-subject primary
#: ../mail/mail-errors.xml.h:17
msgid "Are you sure you want to send a message without a subject?"
-msgstr "Ar tikrai norite išsiųsti laišką neparašę temos?"
+msgstr "Ar tikrai norite išsiųsti laišką be temos?"
#. mail:ask-send-no-subject secondary
#: ../mail/mail-errors.xml.h:19
@@ -13072,7 +13067,7 @@ msgid ""
"Adding a meaningful Subject line to your messages will give your recipients "
"an idea of what your mail is about."
msgstr ""
-"Pridėdami reikšmingą temos eilutę Jūs padėsite gavėjams suprasti apie ką yra "
+"Pridėdami reikšmingą temos eilutę padėsite gavėjams suprasti, apie ką yra "
"Jūsų laiškas."
#. mail:ask-send-only-bcc-contact primary
@@ -13095,7 +13090,7 @@ msgstr ""
"gavÄ—jus.\n"
"\n"
"Dauguma el.pašto sistemų laiškams turintiems tik BCC gavėjus prideda "
-"Apparently-To antraštę. Jeigu ši antraštė bus pridėta, matysis visi Jūsų "
+"Apparently-To antraštę. Jeigu ši antraštė bus pridėta, bus matomi visi Jūsų "
"laiško gavėjai. Norėdami to išvengti, Jūs turėtumėte pridėti bent vieną Kam: "
"arba CC: gavÄ—jÄ…."
@@ -13116,7 +13111,7 @@ msgstr ""
#: ../mail/mail-errors.xml.h:34
msgid ""
"This message cannot be sent because you have not specified any Recipients"
-msgstr "Nepavyko išsiųsti šio laiško, nes JŪs nenurodėte jokių gavėjų"
+msgstr "Nepavyko išsiųsti šio laiško, nes nenurodėte jokių gavėjų"
#. mail:send-no-recipients secondary
#: ../mail/mail-errors.xml.h:36
@@ -13124,8 +13119,8 @@ 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 ""
-"Prašom įvesti tinkamą el. pašto adresą laukelyje Kam:. Jūs galite ieškoti "
-"el. pašto adresų paspausdami šalia įvedimo laukelio esantį mygtuką Kam:."
+"Įveskite tinkamą el. pašto adresą laukelyje Kam:. Galite ieškoti el. pašto "
+"adresų paspaudę šalia įvedimo laukelio esantį mygtuką Kam:."
#. mail:ask-default-drafts primary
#: ../mail/mail-errors.xml.h:38
@@ -13138,8 +13133,8 @@ msgid ""
"Unable to open the drafts folder for this account. Use the system drafts "
"folder instead?"
msgstr ""
-"Nepavyko atidaryti Å¡ios abonemento juodraÅ¡Äių aplanko. Ar vietoj to naudoti "
-"sistemos juodraÅ¡Äių aplankÄ…?"
+"Nepavyko atverti Å¡io abonemento juodraÅ¡Äių aplanko. Ar naudoti sistemos "
+"juodraÅ¡Äių aplankÄ…?"
#: ../mail/mail-errors.xml.h:41
msgid "Use _Default"
@@ -13151,14 +13146,14 @@ msgid ""
"Are you sure you want to permanently remove all the deleted message in "
"folder \"{0}\"?"
msgstr ""
-"Ar tikrai norite visam laikui pašalinti visus laiškus ištrintus iš aplanko "
+"Ar tikrai norite visam laikui pašalinti visus laiškus, ištrintus iš aplanko "
"„{0}“?"
#. 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 "Jeigu nusprÄ™site tÄ™sti, JÅ«s nebegalÄ—site atkurti Å¡ių žinuÄių."
+msgstr "Jeigu nusprÄ™site tÄ™sti, nebegalÄ—site atkurti Å¡ių žinuÄių."
#: ../mail/mail-errors.xml.h:46
msgid "_Expunge"
@@ -13180,21 +13175,21 @@ msgstr "Išt_uštinti šiukšlinę"
#. mail:ask-open-many primary
#: ../mail/mail-errors.xml.h:53
msgid "Are you sure you want to open {0} messages at once?"
-msgstr "Ar tikrai norite tuo paÄiu metu atidaryti {0} laiÅ¡kų?"
+msgstr "Ar tikrai norite tuo paÄiu metu atverti {0} laiÅ¡kų?"
#. mail:ask-open-many secondary
#: ../mail/mail-errors.xml.h:55
msgid "Opening too many messages at once may take a long time."
-msgstr "Didelio laiÅ¡kų kiekio atidarymas tuo paÄiu metu gali ilgai užtrukti."
+msgstr "Didelio laiÅ¡kų kiekio atvÄ—rimas tuo paÄiu metu gali ilgai užtrukti."
#: ../mail/mail-errors.xml.h:56
msgid "_Open Messages"
-msgstr "_Atidaryti laiškus"
+msgstr "_Atverti laiškus"
#. mail:exit-unsaved primary
#: ../mail/mail-errors.xml.h:58
msgid "You have unsent messages, do you wish to quit anyway?"
-msgstr "Jūs turite neišsiųstų laiškų, vistiek norite išeiti?"
+msgstr "Turite neišsiųstų laiškų, ar vis tiek norite išeiti?"
#. mail:exit-unsaved secondary
#: ../mail/mail-errors.xml.h:60
@@ -13202,13 +13197,13 @@ msgid ""
"If you quit, these messages will not be sent until Evolution is started "
"again."
msgstr ""
-"Jeigu išeisite, šios žinutės bus neišiųstos kol Evolution nebus paleistą dar "
-"kartÄ…."
+"Jeigu išeisite, šios žinutės bus neišiųstos, kol Evolution nebus paleista "
+"dar kartÄ…."
#. mail:camel-exception primary
#: ../mail/mail-errors.xml.h:62
msgid "Your message with the subject \"{0}\" was not delivered."
-msgstr "Jūsų laiškas su tema „{0}“ buvo nepristatytas."
+msgstr "Jūsų laiškas su tema „{0}“ nebuvo pristatytas."
#. mail:camel-exception secondary
#: ../mail/mail-errors.xml.h:64
@@ -13218,10 +13213,10 @@ msgid ""
"The message is stored in the Outbox folder. Check the message for errors "
"and resend."
msgstr ""
-"Laiškas buvo išsiųstas su išorine programa „sendmail“. Sendmail pranešė "
-"sekanÄiÄ… klaidÄ…: bÅ«klÄ— 67: paÅ¡tas neiÅ¡siųstas.\n"
+"Laiškas buvo išsiųstas su išorine programa „sendmail“. Sendmail pranešė apie "
+"tokią klaidą: būklė 67: paštas neišsiųstas.\n"
"Laiškas išsaugotas aplanke „Paruošti siųsti“. Patikrinkite laišką dėl klaidų "
-"ir siųskite iš naujo."
+"ir bandykite siųsti dar kartą."
#. mail:async-error primary
#: ../mail/mail-errors.xml.h:67
@@ -13251,7 +13246,7 @@ msgstr "Įveskite slaptažodį."
#. mail:filter-load-error primary
#: ../mail/mail-errors.xml.h:91
msgid "Error loading filter definitions."
-msgstr "Įvyko klaida, įkeliant filtro informaciją."
+msgstr "Įvyko klaida įkeliant filtro informaciją."
#. mail:no-save-path primary
#: ../mail/mail-errors.xml.h:95
@@ -13319,7 +13314,8 @@ msgstr "Ištrinti „{0}“?"
#. mail:ask-delete-folder primary
#: ../mail/mail-errors.xml.h:129
msgid "Really delete folder \"{0}\" and all of its subfolders?"
-msgstr "Tikrai norite ištrinti aplanką „{0}“ ir visus dukterinius jo aplankus?"
+msgstr ""
+"Ar tikrai norite ištrinti aplanką „{0}“ ir visus dukterinius jo aplankus?"
#. mail:ask-delete-folder secondary
#: ../mail/mail-errors.xml.h:131
@@ -13357,13 +13353,13 @@ msgstr "Nepavyko perkelti aplanko „{0}“ į „{1}“."
#. mail:no-copy-folder-nostore secondary
#: ../mail/mail-errors.xml.h:143 ../mail/mail-errors.xml.h:151
msgid "Cannot open source \"{2}\"."
-msgstr "Nepavyko atidaryti šaltinio „{2}“."
+msgstr "Nepavyko atverti šaltinio „{2}“."
#. mail:no-move-folder-to-nostore secondary
#. mail:no-copy-folder-to-nostore secondary
#: ../mail/mail-errors.xml.h:147 ../mail/mail-errors.xml.h:155
msgid "Cannot open target \"{2}\"."
-msgstr "Nepavyko atidaryti tikslo „{2}“."
+msgstr "Nepavyko atverti tikslo „{2}“."
#. mail:no-copy-folder-nostore primary
#. mail:no-copy-folder-to-nostore primary
@@ -13379,7 +13375,7 @@ msgstr "Nepavyko sukurti aplanko „{0}“."
#. mail:no-create-folder-nostore secondary
#: ../mail/mail-errors.xml.h:159
msgid "Cannot open source \"{1}\""
-msgstr "Nepavyko atidaryti šaltinio „{1}“"
+msgstr "Nepavyko atverti šaltinio „{1}“"
#. mail:account-incomplete primary
#. mail:account-notunique primary
@@ -13390,12 +13386,12 @@ msgstr "Nepavyko išsaugoti abonemento pakeitimų."
#. mail:account-incomplete secondary
#: ../mail/mail-errors.xml.h:163
msgid "You have not filled in all of the required information."
-msgstr "Jūs neįvedėte visos būtinos informacijos."
+msgstr "Neįvedėte visos būtinos informacijos."
#. mail:account-notunique secondary
#: ../mail/mail-errors.xml.h:167
msgid "You may not create two accounts with the same name."
-msgstr "JÅ«s negalite sukurti dviejų abonementų tuo paÄiu vardu."
+msgstr "Negalite sukurti dviejų abonementų tuo paÄiu vardu."
#. mail:ask-delete-account title
#: ../mail/mail-errors.xml.h:169
@@ -13449,7 +13445,7 @@ msgstr "Ar norite išsaugoti pakeitimus?"
#. mail:ask-signature-changed secondary
#: ../mail/mail-errors.xml.h:188
msgid "This signature has been changed, but has not been saved."
-msgstr "Å is paraÅ¡as buvo pakeistas, taÄiau neiÅ¡saugotas."
+msgstr "Å is paraÅ¡as buvo pakeistas, taÄiau nebuvo iÅ¡saugotas."
#: ../mail/mail-errors.xml.h:189
msgid "_Discard changes"
@@ -13466,8 +13462,8 @@ msgid ""
"This folder may have been added implicitly, go to the vFolder editor to add "
"it explicitly, if required."
msgstr ""
-"Šis aplankas galėjo būti pridėtas aklai, paleiskite vAplankų redaktorių ir "
-"pridėkite jį tiksliai, jeigu reikia."
+"Šis aplankas galėjo būti pridėtas neišreikštinai, paleiskite vAplankų "
+"redaktorių ir pridėkite jį išreikštinai, jeigu reikia."
#. mail:vfolder-notunique primary
#: ../mail/mail-errors.xml.h:195
@@ -13508,7 +13504,7 @@ msgid ""
" \"{1}\"\n"
"And have been updated."
msgstr ""
-"Sekanti(Äios) filtravimo taisyklÄ—(s):\n"
+"Å i(Å¡ios) filtravimo taisyklÄ—(s):\n"
"{0}\n"
"Naudojo dabar pašalintą aplanką:\n"
" „{1}“\n"
@@ -13522,12 +13518,12 @@ msgstr "Trūkstamas aplankas."
#. mail:no-folder secondary
#: ../mail/mail-errors.xml.h:217
msgid "You must specify a folder."
-msgstr "JÅ«s turite nurodyti aplankÄ…."
+msgstr "Turite nurodyti aplankÄ…."
#. mail:no-name-vfolder secondary
#: ../mail/mail-errors.xml.h:221
msgid "You must name this vFolder."
-msgstr "Jūs turite įvardinti ši vAplanką."
+msgstr "Turite įvardinti ši vAplanką."
#. mail:vfolder-no-source primary
#: ../mail/mail-errors.xml.h:223
@@ -13541,14 +13537,14 @@ msgid ""
"Either by selecting the folders individually, and/or by selecting\n"
"all local folders, all remote folders, or both."
msgstr ""
-"Jūs turėtumėte nurodyti bent vieną aplanką kaip šaltinį.\n"
-"Arba pasirenkant aplankus individualiai, ir/arba pasirenkant\n"
-"visus vietinius aplankus, visus nuotolinius aplankus, arba ir tuos, ir tuos"
+"Turėtumėte nurodyti bent vieną aplanką kaip šaltinį,\n"
+"arba pasirinkdami aplankus individualiai, ir/arba pasirinkdami\n"
+"visus vietinius aplankus, visus nuotolinius aplankus, arba abu"
#. mail:ask-migrate-existing primary
#: ../mail/mail-errors.xml.h:229
msgid "Problem migrating old mail folder \"{0}\"."
-msgstr "Problema perkelinėjant seną pašto aplanką „{0}“."
+msgstr "Klaida perkeliant seną pašto aplanką „{0}“."
#. mail:ask-migrate-existing secondary
#: ../mail/mail-errors.xml.h:231
@@ -13558,9 +13554,9 @@ msgid ""
"You can choose to ignore this folder, overwrite or append its contents, or "
"quit.\n"
msgstr ""
-"Ne tuÅ¡Äias aplankas esantis „{1}“ jau egzistuoja.\n"
+"NetuÅ¡Äias aplankas esantis „{1}“ jau egzistuoja.\n"
"\n"
-"Jūs galite ignoruoti šį aplanką, perrašyti, pridėti jo turinį arba išeiti.\n"
+"Galite praleisti šį aplanką, jį perrašyti, pridėti į jo turinį arba išeiti.\n"
#: ../mail/mail-errors.xml.h:235
msgid "Ignore"
@@ -13588,7 +13584,7 @@ msgid ""
" you can accept its license."
msgstr ""
"Nepavyko perskaityti licencijos bylos „{0}“, dėl\n"
-"\tinstaliacijos problemų. Jūs negalėsite naudotis šiuo tiekėju kol,\n"
+"\tinstaliacijos problemų. Negalėsite naudotis šiuo tiekėju kol,\n"
"kol nesutiksite su licencijos sÄ…lygomis."
#. mail:checking-service title
@@ -13605,8 +13601,7 @@ msgstr "Prašome palaukti."
#: ../mail/mail-errors.xml.h:249
msgid "Querying server for a list of supported authentication mechanisms."
msgstr ""
-"Serveriui siunÄiama užklausa dÄ—l palaikomų autentifikacijos mechanizmų "
-"sąrašo."
+"Serveriui siunÄiama užklausa dÄ—l palaikomų autentikacijos mechanizmų sÄ…raÅ¡o."
#. mail:gw-accountsetup-error primary
#: ../mail/mail-errors.xml.h:251
@@ -13624,7 +13619,7 @@ msgid ""
"Please check your account settings and try again.\n"
msgstr ""
"\n"
-"Prašom patikrinti Jūsų abonemento nustatymus ir bandyti dar kartą.\n"
+"Patikrinkite Jūsų abonemento nustatymus ir bandykite dar kartą.\n"
#: ../mail/mail-folder-cache.c:813
#, c-format
@@ -13645,14 +13640,14 @@ msgid ""
"Failed to append to %s: %s\n"
"Appending to local `Sent' folder instead."
msgstr ""
-"Nepavyko įterpti į %s: %s\n"
-"Įterpiama į vietinį „Išsiųstų laiškų“ aplanką."
+"Nepavyko įdėti į %s: %s\n"
+"Deda į vietinį „Išsiųstų laiškų“ aplanką."
#. sending mail, filtering failed
#: ../mail/mail-ops.c:564
#, c-format
msgid "Failed to apply outgoing filters: %s"
-msgstr "Nepavyko pritaikyti iÅ¡einanÄių filtrų: %s"
+msgstr "Nepavyko pritaikyti filtrų iÅ¡einanÄiam paÅ¡tui: %s"
#: ../mail/mail-ops.c:602
#, c-format
@@ -13698,12 +13693,12 @@ msgstr "Persiųsti laiškai"
#: ../mail/mail-ops.c:1182
#, c-format
msgid "Opening folder %s"
-msgstr "Atidaromas aplankas %s"
+msgstr "Atveriamas aplankas %s"
#: ../mail/mail-ops.c:1254
#, c-format
msgid "Opening store %s"
-msgstr "Atidaroma saugykla %s"
+msgstr "Atveriama saugykla %s"
#: ../mail/mail-ops.c:1332
#, c-format
@@ -13855,11 +13850,11 @@ msgstr "Įvesk %s slaptažodį"
#: ../mail/mail-session.c:210
msgid "Enter Password"
-msgstr "Įvesk slaptažodį"
+msgstr "Įveskite slaptažodį"
#: ../mail/mail-session.c:239
msgid "User canceled operation."
-msgstr "Vartotojas nutraukÄ— veiksmÄ…."
+msgstr "Naudotojas nutraukÄ— veiksmÄ…."
#: ../mail/mail-signature-editor.c:372
msgid "Edit signature"
@@ -13867,7 +13862,7 @@ msgstr "Keisti parašą"
#: ../mail/mail-signature-editor.c:412
msgid "Enter a name for this signature."
-msgstr "Įveskite šio parašo vardą."
+msgstr "Įveskite vardą šiam parašui."
#: ../mail/mail-signature-editor.c:415
#: ../plugins/shared-folder/properties.glade.h:5
@@ -14206,7 +14201,7 @@ msgstr "Pažymėti šį aplanką įprastu"
#: ../plugins/default-source/default-source.c:108
msgid "Mark as default folder"
-msgstr "Naudoti šį aplanką įprastu"
+msgstr "Pažymėti šį aplanką įprastu"
#. i18n: "Secure Password Authentication" is an Outlookism
#: ../plugins/exchange-account-setup/exchange-account-setup.c:59
@@ -14246,7 +14241,7 @@ msgstr ""
#: ../plugins/exchange-account-setup/exchange-account-setup.c:221
#: ../plugins/exchange-account-setup/exchange-account-setup.c:231
msgid "I am out of the office"
-msgstr "Manęs šiuo metu darbe nėra"
+msgstr "Manęs šiuo metu nėra darbe"
#: ../plugins/exchange-account-setup/exchange-account-setup.c:224
#: ../plugins/exchange-account-setup/exchange-account-setup.c:228
@@ -14348,7 +14343,7 @@ msgid ""
"The message claims to contain a calendar, but the calendar is not valid "
"iCalendar."
msgstr ""
-"Laiške nurodoma, kad jame yra kelendorius, bet kalendorius nėra tinkamas "
+"Laiške nurodoma, kad jame yra kelendorius, bet kalendorius nėra taisyklingas "
"iCalendar."
#: ../plugins/itip-formatter/itip-formatter.c:1008
@@ -14375,7 +14370,7 @@ msgid ""
"imported"
msgstr ""
"Norint apdoroti visus šiuos elementus, byla turėtų būti išsaugota ir "
-"kalendorius importuotas"
+"kalendorius įkeltas"
#: ../plugins/itip-formatter/itip-formatter.c:1658
msgid "Meetings and Tasks"
@@ -14542,12 +14537,12 @@ msgstr "%A, %Y %B %e, %l:%M:%S %p"
#: ../plugins/itip-formatter/itip-view.c:335
#, c-format
msgid "<b>%s</b> through %s has published the following meeting information:"
-msgstr "<b>%s</b> per %s paskelbÄ— sekanÄiÄ… susitikimo informacijÄ…:"
+msgstr "<b>%s</b> per %s paskelbÄ— tokiÄ… susitikimo informacijÄ…:"
#: ../plugins/itip-formatter/itip-view.c:337
#, c-format
msgid "<b>%s</b> has published the following meeting information:"
-msgstr "<b>%s</b> paskelbÄ— sekanÄiÄ… susitikimo informacijÄ…:"
+msgstr "<b>%s</b> paskelbÄ— tokiÄ… susitikimo informacijÄ…:"
#: ../plugins/itip-formatter/itip-view.c:342
#, c-format
@@ -14558,18 +14553,18 @@ msgstr "<b>%s</b> norÄ—tų, kad %s dalyvautų sekanÄiame susitikime:"
#, c-format
msgid "<b>%s</b> through %s requests your presence at the following meeting:"
msgstr ""
-"<b>%s</b> per %s praneÅ¡Ä—, jog norÄ—tų, kad JÅ«s dalyvautumÄ—te sekanÄiame "
+"<b>%s</b> per %s praneÅ¡Ä—, jog norÄ—tų, kad dalyvautumÄ—te sekanÄiame "
"susitikime:"
#: ../plugins/itip-formatter/itip-view.c:347
#, c-format
msgid "<b>%s</b> requests your presence at the following meeting:"
-msgstr "<b>%s</b> norÄ—tų, kad JÅ«s dalyvautumÄ—te sekanÄiame susitikime:"
+msgstr "<b>%s</b> norÄ—tų, kad dalyvautumÄ—te sekanÄiame susitikime:"
#: ../plugins/itip-formatter/itip-view.c:353
#, c-format
msgid "<b>%s</b> through %s wishes to add to an existing meeting:"
-msgstr "<b>%s</b> per %s nori, nori papildyti esamÄ… susitikimÄ…:"
+msgstr "<b>%s</b> per %s nori papildyti esamÄ… susitikimÄ…:"
#: ../plugins/itip-formatter/itip-view.c:355
#, c-format
@@ -14580,53 +14575,52 @@ msgstr "<b>%s</b> nori papildyti esamÄ… susitikimÄ…:"
#, c-format
msgid ""
"<b>%s</b> wishes to receive the latest information for the following meeting:"
-msgstr ""
-"<b>%s</b> nori gauti naujausiÄ… užduoties informacijÄ… sekanÄiam susitikimui:"
+msgstr "<b>%s</b> nori gauti naujausią užduoties informaciją šiam susitikimui:"
#: ../plugins/itip-formatter/itip-view.c:361
#, c-format
msgid "<b>%s</b> has sent back the following meeting response:"
-msgstr "<b>%s</b> atsiuntė atgal sekantį susitikimo atsakymą:"
+msgstr "<b>%s</b> atsiuntė tokį susitikimo atsakymą:"
#: ../plugins/itip-formatter/itip-view.c:365
#, c-format
msgid "<b>%s</b> through %s has cancelled the following meeting:"
-msgstr "<b>%s</b> per %s atšaukė sekantį susitikimą:"
+msgstr "<b>%s</b> per %s atšaukė šį susitikimą:"
#: ../plugins/itip-formatter/itip-view.c:367
#, c-format
msgid "<b>%s</b> has cancelled the following meeting."
-msgstr "<b>%s</b> atšaukė sekantį susitikimą:"
+msgstr "<b>%s</b> atšaukė šį susitikimą:"
#: ../plugins/itip-formatter/itip-view.c:370
#, c-format
msgid "<b>%s</b> has proposed the following meeting changes."
-msgstr "<b>%s</b> pateikÄ— sekanÄius susitikimo pakeitimus:"
+msgstr "<b>%s</b> pateikÄ— Å¡iuos susitikimo pakeitimus:"
#: ../plugins/itip-formatter/itip-view.c:374
#, c-format
msgid "<b>%s</b> through %s has declined the following meeting changes:"
-msgstr "<b>%s</b> per %s atmetÄ— sekanÄius susitikimo pakeitimus:"
+msgstr "<b>%s</b> per %s atmetÄ— Å¡iuos susitikimo pakeitimus:"
#: ../plugins/itip-formatter/itip-view.c:376
#, c-format
msgid "<b>%s</b> has declined the following meeting changes."
-msgstr "<b>%s</b> atÅ¡aukÄ— sekanÄius susitikimo pakeitimus:"
+msgstr "<b>%s</b> atšaukė šiuos susitikimo pakeitimus:"
#: ../plugins/itip-formatter/itip-view.c:403
#, c-format
msgid "<b>%s</b> through %s has published the following task:"
-msgstr "<b>%s</b> per %s paskelbÄ— sekanÄiÄ… užduotį:"
+msgstr "<b>%s</b> per %s paskelbė šią užduotį:"
#: ../plugins/itip-formatter/itip-view.c:405
#, c-format
msgid "<b>%s</b> has published the following task:"
-msgstr "<b>%s</b> paskelbÄ— sekanÄiÄ… užduotį:"
+msgstr "<b>%s</b> paskelbė šią užduotį:"
#: ../plugins/itip-formatter/itip-view.c:410
#, c-format
msgid "<b>%s</b> requests the assignment of %s to the following task:"
-msgstr "<b>%s</b> norėtų, kad %s būtų priskirta sekanti užduotis:"
+msgstr "<b>%s</b> norÄ—tų, kad %s bÅ«tų priskirta Å¡iai užduoÄiai:"
#: ../plugins/itip-formatter/itip-view.c:413
#, c-format
@@ -14653,38 +14647,37 @@ msgstr "<b>%s</b> nori papildyti esamą užduotį:"
msgid ""
"<b>%s</b> wishes to receive the latest information for the following "
"assigned task:"
-msgstr ""
-"<b>%s</b> nori gauti naujausiÄ… sekanÄios priskirtos užduoties informacijÄ…:"
+msgstr "<b>%s</b> nori gauti naujausią šios priskirtos užduoties informaciją:"
#: ../plugins/itip-formatter/itip-view.c:429
#, c-format
msgid "<b>%s</b> has sent back the following assigned task response:"
-msgstr "<b>%s</b> atsiuntė atgal sekantį atsakymą į priskirtą užduotį:"
+msgstr "<b>%s</b> atsiuntė atgal tokį atsakymą į priskirtą užduotį:"
#: ../plugins/itip-formatter/itip-view.c:433
#, c-format
msgid "<b>%s</b> through %s has cancelled the following assigned task:"
-msgstr "<b>%s</b> per %s atÅ¡aukÄ— sekanÄiÄ… priskirtÄ… užduotÄ—:"
+msgstr "<b>%s</b> per %s atšaukė šią priskirtą užduotą:"
#: ../plugins/itip-formatter/itip-view.c:435
#, c-format
msgid "<b>%s</b> has cancelled the following assigned task:"
-msgstr "<b>%s</b> atÅ¡aukÄ— sekanÄiÄ… priskirtÄ… užduotį:"
+msgstr "<b>%s</b> atšaukė šią priskirtą užduotį:"
#: ../plugins/itip-formatter/itip-view.c:438
#, c-format
msgid "<b>%s</b> has proposed the following task assignment changes:"
-msgstr "<b>%s</b> pateikÄ— sekanÄius užduoties priskyrimo pakeitimus:"
+msgstr "<b>%s</b> pateikė šiuos užduoties priskyrimo pakeitimus:"
#: ../plugins/itip-formatter/itip-view.c:442
#, c-format
msgid "<b>%s</b> through %s has declined the following assigned task:"
-msgstr "<b>%s</b> per %s atmetÄ— sekanÄiÄ… priskirtÄ… užduotį:"
+msgstr "<b>%s</b> per %s atmetė šią priskirtą užduotį:"
#: ../plugins/itip-formatter/itip-view.c:444
#, c-format
msgid "<b>%s</b> has declined the following assigned task:"
-msgstr "<b>%s</b> atmetÄ— sekanÄiÄ… priskirtÄ… užduotÄ—:"
+msgstr "<b>%s</b> atmetė šią priskirtą užduotį:"
#. Comment
#: ../plugins/itip-formatter/itip-view.c:892
@@ -14695,7 +14688,7 @@ msgstr "Komentaras:"
#. org.gnome.mailing-list-actions:no-header primary
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:2
msgid "Action not available"
-msgstr "Veiksmas neprieinamas"
+msgstr "Veiksmas negalimas"
#. org.gnome.mailing-list-actions:no-header secondary
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:4
@@ -14703,12 +14696,12 @@ msgid ""
"This message does not contain the header information required for this "
"action."
msgstr ""
-"Šio laiško antraštėje nėra informacijos reikalingos atlikti šiam veiksmui."
+"Šio laiško antraštėje nėra informacijos, reikalingos atlikti šiam veiksmui."
#. org.gnome.mailing-list-actions:posting-not-allowed primary
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:6
msgid "Posting not allowed"
-msgstr "Rašymas neleistinas"
+msgstr "Rašymas neleidžiamas"
#. org.gnome.mailing-list-actions:posting-not-allowed secondary
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:8
@@ -14716,9 +14709,9 @@ msgid ""
"Posting to this mailing list is not allowed. Possibly, this is a read-only "
"mailing list. Contact the list owner for details."
msgstr ""
-"RaÅ¡ymas į Å¡iÄ… konferencijÄ… neleidžiamas. GreiÄiausiai, Å¡i konferencija yra "
+"RaÅ¡ymas į Å¡iÄ… konferencijÄ… neleidžiamas. GreiÄiausiai Å¡i konferencija yra "
"tik skaitymui. Dėl išsamesnės informacijos susisiekite su konferencijos "
-"savininku."
+"prižiūrėtoju."
#. org.gnome.mailing-list-actions:ask-send-message primary
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:10
@@ -14734,11 +14727,11 @@ msgid ""
"You should receive an answer from the mailing list shortly after the message "
"has been sent."
msgstr ""
-"El. laiškas bus išsiųstas adresu „{0}“. Jūs galite pasirinkti ar išsiųsti "
+"El. laiškas bus išsiųstas adresu „{0}“. Galite pasirinkti, ar išsiųsti "
"laišką automatiškai, ar pirma jį pažiūrėti ir redaguoti.\n"
"\n"
-"Jūs turėtumėte neužilgo gauti atsakymą iš konferencijos, po to kai išsiųsite "
-"laišką."
+"Po to kai išsiųsite laišką, turėtumėte greitai gauti atsakymą iš "
+"konferencijos, "
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:15
msgid "_Send message"
@@ -14751,7 +14744,7 @@ msgstr "_Redaguoti laišką"
#. org.gnome.mailing-list-actions:malformed-header primary
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:18
msgid "Malformed header"
-msgstr "Apgadinta antraštė"
+msgstr "Netaisyklinga antraštė"
#. org.gnome.mailing-list-actions:malformed-header secondary
#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:20
@@ -14760,7 +14753,7 @@ msgid ""
"\n"
"Header: {1}"
msgstr ""
-"Šio laiško antraštė {0} yra apgadinta, ir todėl jos nepavyko apdoroti.\n"
+"Šio laiško antraštė {0} yra netaisyklinga, todėl jos nepavyko apdoroti.\n"
"\n"
"Antraštė: {1}"
@@ -14942,7 +14935,7 @@ msgid ""
"You cannot share folder with specified user \"{0}\" \n"
msgstr ""
"\n"
-"Jūs negalite dalintis aplanku su nurodytu naudotoju „{0}“ \n"
+"Negalite dalintis aplanku su nurodytu naudotoju „{0}“ \n"
#. org.gnome.evolution.mail_shared_folder:no-user primary
#: ../plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:8
@@ -14956,7 +14949,7 @@ msgid ""
"\tYou have to specify a user name whom you want to add to the list \n"
msgstr ""
"\n"
-"\tJūs turite nurodyti naudotojo, kurį norite įtraukti į sąrašą, vardą \n"
+"\tTurite nurodyti naudotojo, kurį norite įtraukti į sąrašą, vardą \n"
#: ../plugins/shared-folder/properties.glade.h:2
msgid "<b>Users :</b>"
@@ -15009,7 +15002,7 @@ msgstr "Viešinimas"
#. Create the checkbox we will display, complete with mnemonic that is unique in the dialog
#: ../plugins/subject-thread/subject-thread.c:54
msgid "Fall back to threading messages by sub_ject"
-msgstr "Kaip atsarginį variantą naudoti laiškų rikiavimą pagal _temą"
+msgstr "Naudoti laiškų rikiavimą pagal _temą kaip atsarginį variantą"
#: ../shell/GNOME_Evolution_Shell.server.in.in.h:1
msgid "Evolution Shell"
@@ -15055,8 +15048,8 @@ msgstr "Paskutinė atnaujinta konfigūracijos versija"
msgid ""
"List of paths for the folders to be synchronized to disk for offline usage"
msgstr ""
-"Aplankų, kurie turi būti sinchronizuoti su disku, naudojimui atsijungimo "
-"veiksenoje, kelių sąrašas"
+"Aplankų, kurie turi būti sinchronizuoti su disku tam, kad juos būtų galima "
+"naudoti atsijungimo veiksenoje, kelių sąrašas"
#: ../shell/apps_evolution_shell.schemas.in.in.h:9
msgid "Printer settings"
@@ -15074,7 +15067,8 @@ msgstr "Paleisti neprisijungiant"
msgid ""
"The configuration version of Evolution, with major/minor/configuration level"
msgstr ""
-"Evolution konfigūracijos versija, su mažoriniu/minoriniu/konfigūracijos lygiu"
+"Evolution konfigūracijos versija, su mažoriniu/minoriniu/konfigūracijos "
+"lygmeniu"
#: ../shell/apps_evolution_shell.schemas.in.in.h:13
msgid "The default height for the main window, in pixels."
@@ -15094,7 +15088,7 @@ msgid ""
"configuration level"
msgstr ""
"Paskutinė atnaujinta Evolution konfigūracijos versija, su mažoriniu/"
-"minoriniu/konfigūracijos lygiu"
+"minoriniu/konfigūracijos lygmeniu"
#: ../shell/apps_evolution_shell.schemas.in.in.h:17
msgid ""
@@ -15307,11 +15301,11 @@ msgid ""
"\n"
"Do you want to quit using the Assistant now?"
msgstr ""
-"Jei Jūs dabar uždarysite Evolution Nustatymų Pagalbininką, visa Jūsų "
-"pateikta informacija bus prarasta. Jums teks iš naujo paleisti pagalbinką, "
-"norint pradÄ—ti naudoti Evolution.\n"
+"Jei dabar uždarysite Evolution nustatymų pagalbininką, visa Jūsų pateikta "
+"informacija bus prarasta. Jums teks iš naujo paleisti pagalbinką, norint "
+"pradÄ—ti naudoti Evolution.\n"
"\n"
-"Ar JÅ«s norite nutraukti Pagalbininko darbÄ… dabar?"
+"Ar norite dabar nutraukti Pagalbininko darbÄ…?"
#: ../shell/e-shell-utils.c:116
msgid "No folder name specified."
@@ -15392,7 +15386,7 @@ msgstr "Evolution dabar yra atsijungimo procese."
#: ../shell/e-shell-window.c:356
msgid "Evolution is currently offline. Click on this button to work online."
msgstr ""
-"Evolution dabar yra atsijungusi. NorÄ—dami dirbti atsijungimo veiksenoje, "
+"Evolution dabar yra atsijungusi. NorÄ—dami dirbti prisijungimo veiksenoje, "
"paspauskite šį mygtuką."
#: ../shell/e-shell-window.c:713
@@ -15404,28 +15398,28 @@ msgstr "Perjungti į %s"
msgid "Uknown system error."
msgstr "Nežinoma sistemos klaida."
-#: ../shell/e-shell.c:806 ../shell/e-shell.c:807
+#: ../shell/e-shell.c:800 ../shell/e-shell.c:801
#, c-format
msgid "%ld KB"
msgstr "%ld KB"
-#: ../shell/e-shell.c:1250 ../widgets/misc/e-cell-date-edit.c:256
+#: ../shell/e-shell.c:1254 ../widgets/misc/e-cell-date-edit.c:256
msgid "OK"
msgstr "Gerai"
-#: ../shell/e-shell.c:1252
+#: ../shell/e-shell.c:1256
msgid "Invalid arguments"
msgstr "Blogi argumentai"
-#: ../shell/e-shell.c:1254
+#: ../shell/e-shell.c:1258
msgid "Cannot register on OAF"
msgstr "Nepavyko prisiregistruoti OAF"
-#: ../shell/e-shell.c:1256
+#: ../shell/e-shell.c:1260
msgid "Configuration Database not found"
-msgstr "Konfigūracijos duombazė nerasta"
+msgstr "Konfigūracijos duomenų bazė nerasta"
-#: ../shell/e-shell.c:1258
+#: ../shell/e-shell.c:1262
msgid "Generic error"
msgstr "Bendroji klaida"
@@ -15471,7 +15465,7 @@ msgid ""
msgstr ""
"Jūs sėkmingai įvedėte visą Evolution nustatymui reikiamą informaciją. \n"
"\n"
-"Norėdami išsaugoti Jūsų nustatymus, spauskite mygtuką „Pritaikyti. "
+"Norėdami išsaugoti Jūsų nustatymus, spauskite mygtuką „Pritaikyti“. "
#: ../shell/evolution-test-component.c:140
msgid "New Test"
@@ -15566,19 +15560,19 @@ msgstr ""
"Sveiki. AÄiÅ« už laikÄ…, sugaiÅ¡tÄ… parsisiųsti šį Evolution\n"
"grupinio darbo rinkinio bandomąjį leidimą.\n"
"\n"
-"Evolution dar nÄ—ra baigta. Ji artÄ—ja prie to, taÄiau yra vietų,\n"
-"kur ypatybių trūksta arba jos tik pusiau veikia.\n"
+"Evolution dar nÄ—ra iÅ¡baigta. Ji artÄ—ja prie to, taÄiau yra vietų,\n"
+"kur trūksta funkcionalumo arba jis nepatikimai veikia.\n"
"\n"
"Jeigu Jums reikia stabilios Evolution versijos, siūlome pašalinti\n"
"šią versiją ir įdiegti Evolution versiją %s .\n"
"\n"
"Jeigu šiame produkte rasite klaidų, praneškite apie jas mums\n"
"adresu bugzilla.ximian.com. Mes neteikiame jokių šio produkto\n"
-"naudojimo garantijų. Jis nÄ—ra skirtas žmonÄ—ms kenÄiantiems nuo\n"
+"naudojimo garantijų. Jis nÄ—ra skirtas žmonÄ—ms, kenÄiantiems nuo\n"
"netikÄ—tų pykÄio protrÅ«kių.\n"
"\n"
-"Mes tikimės, kad Jums patiks mūsų sunkaus darbo vaisiai, ir\n"
-"mes nekantriai laukiame Jūsų prisidėjimo prie šio produkto tobulinimo!\n"
+"Tikimės, kad Jums patiks mūsų sunkaus darbo vaisiai, ir\n"
+"nekantriai laukiame Jūsų prisidėjimo prie šio produkto tobulinimo!\n"
#: ../shell/main.c:262
msgid ""
@@ -15598,7 +15592,7 @@ msgstr "Evolution paleidimas aktyvuoja nurodytÄ… komponentÄ…"
#: ../shell/main.c:478
msgid "Start in online mode"
-msgstr "Paleisti prisijungiant"
+msgstr "Paleisti prisijungimo veiksenoje"
#: ../shell/main.c:481
msgid "Forcibly shut down all Evolution components"
@@ -15643,10 +15637,10 @@ msgid ""
"You will need to make more space available in your home directory before you "
"can continue."
msgstr ""
-"Jūsų duomenų ir nustatymų atnaujinimui prireiks iki {0} vietos diske, o Jūsu "
+"Jūsų duomenų ir nustatymų atnaujinimui prireiks iki {0} vietos diske, o "
"diske yra tik {1}.\n"
"\n"
-"Norint tęsti Jums reikės Jūsų namų aplanke atlaisvinti vietos."
+"Norint tęsti reikės Jūsų namų aplanke atlaisvinti vietos."
#. shell:upgrade-failed primary
#: ../shell/shell-errors.xml.h:8
@@ -15667,8 +15661,8 @@ msgid ""
msgstr ""
"{1}\n"
"\n"
-"Jeigu pasirinksite tęsti, Jūs galite nebeturėti priėjimo prie kai kurių senų "
-"Jūsų duomenų.\n"
+"Jeigu nuspręsite tęsti, galite nebeturėti priėjimo prie kai kurių senų "
+"duomenų.\n"
#: ../shell/shell-errors.xml.h:15
msgid "Continue"
@@ -15678,7 +15672,7 @@ msgstr "Tęsti"
#. 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 "IÅ¡trinti senus {0} versijos duomenis{0}?"
+msgstr "IÅ¡trinti senus {0} versijos duomenis?"
#. shell:upgrade-remove-1-4 secondary
#: ../shell/shell-errors.xml.h:21
@@ -15693,13 +15687,13 @@ msgstr ""
"AnkstesnÄ—je Evolution versijoje programos duomenys buvo saugomi kitoje "
"vietoje.\n"
"\n"
-"Jeigu Jūs pasirinksite pašalinti šiuos duomenis, bus ištrintas visas "
-"„evolution“ aplanko turinys. Jeigu pasirinksite palikti šiuos duomenis, tada "
-"Jūs galėsite ištrinti „evolution“ aplanko turinį kada tik Jums patogu.\n"
+"Jeigu pasirinksite pašalinti šiuos duomenis, bus ištrintas visas „evolution“ "
+"aplanko turinys. Jei pasirinksite palikti Å¡iuos duomenis, galÄ—site bet kada "
+"ištrinti „evolution“ aplanko turinį.\n"
#: ../shell/shell-errors.xml.h:25
msgid "_Remind Me Later"
-msgstr "P_riminiti man vÄ—liau"
+msgstr "P_riminti vÄ—liau"
#: ../shell/shell-errors.xml.h:26
msgid "_Keep Data"
@@ -15724,14 +15718,14 @@ msgid ""
"Once deleted, you cannot downgrade to the previous version of Evolution "
"without manual intervention.\n"
msgstr ""
-"Ruošiamasi visam laikui ištrinti visą „evolution“ aplanko turinį.\n"
+"„evolution“ aplanko turinys bus galutinai ištrintas.\n"
"\n"
-"Prieš ištrinant senus duomenis, Jums siūloma savarankiškai patikrinti ar Jūs "
-"turite visus Jūsų pašto, kontaktų ir kalendoriaus duomenis, ir ar naujoji "
-"Evolution versija dirba korektiškai.\n"
+"Prieš ištrinant senus duomenis, siūlome savarankiškai patikrinti ar turite "
+"visus pašto, kontaktų ir kalendoriaus duomenis, ir ar naujoji Evolution "
+"versija dirba korektiškai.\n"
"\n"
-"Kartą ištrynę, Jūs jau nebegalėsite sugrįžti prie senosios Evolutionversijos "
-"be rankinio įsikišimo.\n"
+"Kartą ištrynę, jau nebegalėsite sugrįžti prie senosios Evolution versijos be "
+"rankinio įsikišimo.\n"
#. shell:noshell title
#. shell:noshell-reason title
@@ -15765,7 +15759,7 @@ msgid ""
"\n"
"Click help for details."
msgstr ""
-"Your system configuration does not match your Evolution configuration:\n"
+"Jūsų sistemos konfigūracija neatitinka Jūsų Evolution konfigūracijos:\n"
"\n"
"{0}\n"
"\n"
@@ -15780,7 +15774,7 @@ msgid ""
msgstr ""
"Serifikatas „%s“ yra CA sertifikatas.\n"
"\n"
-"Pakeiskite pasitikÄ—jimo nustatymus:"
+"Pakeisti pasitikÄ—jimo nustatymus:"
#: ../smime/gui/cert-trust-dialog.c:145
msgid ""
@@ -15788,8 +15782,8 @@ msgid ""
"then you trust the authenticity of this certificate unless otherwise "
"indicated here"
msgstr ""
-"Dėl to, kad Jūs pasitikite šį sertifikatą išdavusiu sertifikatų tvirtintoju, "
-"JÅ«s pasitikite Å¡io sertifikato autentiÅ¡kumu, nebent Äia nurodysite kitaip"
+"Kadangi pasitikite šį sertifikatą išdavusiu sertifikatų tvirtintoju, "
+"pasitikite ir Å¡io sertifikato autentiÅ¡kumu, nebent Äia nurodysite kitaip"
#: ../smime/gui/cert-trust-dialog.c:149
msgid ""
@@ -15797,9 +15791,8 @@ msgid ""
"certificate, then you do not trust the authenticity of this certificate "
"unless otherwise indicated here"
msgstr ""
-"Dėl to, kad Jūs nepasitikite šį sertifikatą išdavusiu sertifikatų "
-"tvirtintoju, JÅ«s nepasitikite Å¡io sertifikato autentiÅ¡kumu, nebent Äia "
-"nurodysite kitaip"
+"Dėl to, kad nepasitikite šį sertifikatą išdavusiu sertifikatų tvirtintoju, "
+"nepasitikite ir Å¡io sertifikato autentiÅ¡kumu, nebent Äia nurodysite kitaip"
#: ../smime/gui/certificate-manager.c:134
#: ../smime/gui/certificate-manager.c:142
@@ -15906,7 +15899,7 @@ msgstr "<b>Skirtas</b>"
#: ../smime/gui/smime-ui.glade.h:8
msgid "<b>This certificate has been verified for the following uses:</b>"
-msgstr "<b>Å is sertifikatas patikrintas dÄ—l Å¡ių panaudojimo sriÄių:</b>"
+msgstr "<b>Å is sertifikatas patvirtintas Å¡ioms naudojimo sritims:</b>"
#: ../smime/gui/smime-ui.glade.h:9
msgid "<b>Validity</b>"
@@ -15914,7 +15907,7 @@ msgstr "<b>Galiojimas</b>"
#: ../smime/gui/smime-ui.glade.h:10
msgid "Authorities"
-msgstr "Autorizatoriai"
+msgstr "Autoritetai"
#: ../smime/gui/smime-ui.glade.h:11
msgid "Backup"
@@ -16511,15 +16504,15 @@ msgstr "Rodyti sąrašą"
#: ../ui/evolution-calendar.xml.h:30
msgid "Show one day"
-msgstr "Rodyti vienÄ… dienÄ…"
+msgstr "Rodyti dienÄ…"
#: ../ui/evolution-calendar.xml.h:31
msgid "Show one month"
-msgstr "Rodyti vieną mėnesį"
+msgstr "Rodyti mėnesį"
#: ../ui/evolution-calendar.xml.h:32
msgid "Show one week"
-msgstr "Rodyti vienÄ… savaitÄ™"
+msgstr "Rodyti savaitÄ™"
#: ../ui/evolution-calendar.xml.h:33
msgid "Show the working week"
@@ -16539,7 +16532,7 @@ msgstr "Darbo savaitÄ—"
#: ../ui/evolution-calendar.xml.h:42
msgid "_Open Appointment"
-msgstr "_Atidaryti paskyrimÄ…"
+msgstr "_Atverti paskyrimÄ…"
#: ../ui/evolution-composer-entries.xml.h:1
msgid "Copy selected text to the clipboard"
@@ -16593,7 +16586,7 @@ msgstr "Ištuštinti ši_ukšlinę"
#: ../ui/evolution-mail-global.xml.h:7
msgid "Open a window for composing a mail message"
-msgstr "Atidaryti langą naujam laiškui rašyti"
+msgstr "Atverti langą naujam laiškui rašyti"
#: ../ui/evolution-mail-global.xml.h:8
msgid "Permanently remove all deleted messages from all folders"
@@ -16686,7 +16679,8 @@ msgstr "Pasirinkti visus šiuo metu nepažymėtus laiškus"
#: ../ui/evolution-mail-list.xml.h:16
msgid "Select all messages in the same thread as the selected message"
-msgstr "Pažymėti visus laiškus toje gijoje, kur yra pasirinktas laiškas"
+msgstr ""
+"Pažymėti visus laiškus toje gijoje, kuriai priklauso pasirinktas laiškas"
#: ../ui/evolution-mail-list.xml.h:17
msgid "Select all visible messages"
@@ -16926,7 +16920,7 @@ msgstr "Atšaukti pažymėto laiško(ų) žymėjimą šiukšlėmis"
#: ../ui/evolution-mail-message.xml.h:60
msgid "Mark the selected message(s) as not having been read"
-msgstr "Pažymėti pasirinktą laišką(us) kaip neperskaityta"
+msgstr "Pažymėti pasirinktą laišką(us) kaip neperskaitytą"
#: ../ui/evolution-mail-message.xml.h:61
msgid "Mark the selected message(s) as unimportant"
@@ -16962,11 +16956,11 @@ msgstr "Ne šiukšlė"
#: ../ui/evolution-mail-message.xml.h:70
msgid "Open the selected message in a new window"
-msgstr "Atidaryti pasirinktą laišką naujame lange"
+msgstr "Atverti pasirinktą laišką naujame lange"
#: ../ui/evolution-mail-message.xml.h:71
msgid "Open the selected message in the composer for editing"
-msgstr "Atidaryti pasirinktą laišką redagavimui rašyklėje"
+msgstr "Atverti pasirinktą laišką redagavimui rašyklėje"
#: ../ui/evolution-mail-message.xml.h:72
msgid "Original Si_ze"
@@ -17094,7 +17088,7 @@ msgstr "_Normalus rodymas"
#: ../ui/evolution-mail-message.xml.h:118
msgid "_Open Message"
-msgstr "_Atidaryti laišką"
+msgstr "_Atverti laišką"
#: ../ui/evolution-mail-message.xml.h:120
msgid "_Previous Message"
@@ -17191,7 +17185,7 @@ msgstr "H_TML"
#: ../ui/evolution-message-composer.xml.h:11
msgid "Open a file"
-msgstr "Atidaryti bylÄ…"
+msgstr "Atverti bylÄ…"
#: ../ui/evolution-message-composer.xml.h:12
msgid "PGP Encrypt"
@@ -17265,31 +17259,31 @@ msgstr "Pasirašyti šį laišką tavo PGP raktu"
#: ../ui/evolution-message-composer.xml.h:31
msgid "Sign this message with your S/MIME Signature Certificate"
-msgstr "Pasirašyti šį laišką tavo S/MIME Parašo sertifikatu"
+msgstr "Pasirašyti šį laišką Jūsų S/MIME Parašo sertifikatu"
#: ../ui/evolution-message-composer.xml.h:32
msgid "Toggles whether the BCC field is displayed"
-msgstr "Perjungia, ar BCC laukas yra rodomas"
+msgstr "Nurodo, ar BCC laukas yra rodomas"
#: ../ui/evolution-message-composer.xml.h:33
msgid "Toggles whether the CC field is displayed"
-msgstr "Perjungia, ar CC laukas yra rodomas"
+msgstr "Nurodo, ar CC laukas yra rodomas"
#: ../ui/evolution-message-composer.xml.h:34
msgid "Toggles whether the From chooser is displayed"
-msgstr "Perjungia, ar Nuo pasirinkimas yra rodomas"
+msgstr "Nurodo, ar Nuo pasirinkimas yra rodomas"
#: ../ui/evolution-message-composer.xml.h:35
msgid "Toggles whether the Post-To field is displayed"
-msgstr "Perjungia, ar Rašyti-į laukas yra rodomas"
+msgstr "Nurodo, ar Rašyti-į laukas yra rodomas"
#: ../ui/evolution-message-composer.xml.h:36
msgid "Toggles whether the Reply-To field is displayed"
-msgstr "Perjungia, ar Atsakyti-kam laukas yra rodomas"
+msgstr "Nurodo, ar Atsakyti-kam laukas yra rodomas"
#: ../ui/evolution-message-composer.xml.h:37
msgid "Toggles whether the To field is displayed"
-msgstr "Nurodo ar yra rodomas Kam laukelis"
+msgstr "Nurodo, ar yra rodomas Kam laukelis"
#: ../ui/evolution-message-composer.xml.h:38
msgid "_Attachment..."
@@ -17318,7 +17312,7 @@ msgstr "Įterpt_i"
#: ../ui/evolution-message-composer.xml.h:47
msgid "_Open..."
-msgstr "_Atidaryti..."
+msgstr "_Atverti..."
#: ../ui/evolution-message-composer.xml.h:48
msgid "_Post-To Field"
@@ -17363,7 +17357,7 @@ msgstr "Išsaugoti šią bylą ir uždaryti langą"
#: ../ui/evolution-subscribe.xml.h:1
msgid "Add folder to your list of subscribed folders"
-msgstr "Pridėti aplanką į užsakytų aplankų sąrašą"
+msgstr "Įdėti aplanką į užsakytų aplankų sąrašą"
#: ../ui/evolution-subscribe.xml.h:2
msgid "F_older"
@@ -17431,7 +17425,7 @@ msgstr "Peržiūrėti pasirinktą užduotį"
#: ../ui/evolution-tasks.xml.h:23
msgid "_Open Task"
-msgstr "_Atidaryti užduotį"
+msgstr "_Atverti užduotį"
#: ../ui/evolution.xml.h:1
msgid "About Evolution..."
@@ -17891,7 +17885,7 @@ msgid ""
"If set, an underline in the text indicates the next character should be used "
"for the mnemonic accelerator key"
msgstr ""
-"Jeigu nustatyta, pabraukti simboliai tekste reiškia, kad sekantis simbolis "
+"Jeigu nustatyta, pabraukti simboliai tekste reiškia, kad kitas simbolis "
"turėtų būti naudojamas karštųjų klavišų išraiškai"
#: ../widgets/misc/e-expander.c:205
@@ -17965,8 +17959,8 @@ msgid ""
"should select the timezone from the below combo box instead."
msgstr ""
"Pele paremtas interaktyvus pasaulio žemėlapis laiko juostų pasirinkimui. "
-"Naudotojai, naudojantys klaviatūrą, vietoj to turėtų pasirinkti laiko juostą "
-"iÅ¡ žemiau esanÄio sÄ…raÅ¡o."
+"Naudotojai, naudojantys klaviatūrą, turėtų pasirinkti laiko juostą iš žemiau "
+"esanÄio sÄ…raÅ¡o."
#: ../widgets/misc/e-pilot-settings.c:103
msgid "Sync with:"
@@ -18052,7 +18046,7 @@ msgstr "Suk_urti siunÄiamÄ… elementÄ… informacijai sekti"
#: ../widgets/misc/e-send-options.glade.h:8
msgid "Deli_vered and opened"
-msgstr "Pri_statytas ir atidarytas"
+msgstr "Pri_statytas ir atvertas"
#: ../widgets/misc/e-send-options.glade.h:9
msgid "Gene_ral Options"
@@ -18064,7 +18058,7 @@ msgid ""
"Mail Receipt"
msgstr ""
"NÄ—ra\n"
-"Pašto gavimas"
+"Žinutės patvirtinimas"
#: ../widgets/misc/e-send-options.glade.h:12
msgid ""
@@ -18072,7 +18066,7 @@ msgid ""
"Mail Receipt\n"
msgstr ""
"NÄ—ra\n"
-"Pašto gavimas\n"
+"Žinutės patvirtinimas\n"
#: ../widgets/misc/e-send-options.glade.h:15
msgid ""
@@ -18150,7 +18144,7 @@ msgstr "_Kai tinkama"
#: ../widgets/misc/e-send-options.glade.h:38
msgid "_When opened: "
-msgstr "_Kai atidaryta: "
+msgstr "_Kai atverta: "
#. system:ask-save-file-exists-overwrite primary
#: ../widgets/misc/e-system-errors.xml.h:4
@@ -18170,7 +18164,7 @@ msgstr "Nepavyko išsaugoti į „{0}“."
#. system:no-load-file primary
#: ../widgets/misc/e-system-errors.xml.h:13
msgid "Cannot open file \"{0}\"."
-msgstr "Nepavyko atidaryti bylos „{0}“."
+msgstr "Nepavyko atverti bylos „{0}“."
#: ../widgets/misc/e-task-widget.c:208
#, c-format
diff --git a/po/nl.po b/po/nl.po
index a54e119e84..370b231882 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -4,18 +4,23 @@
# -------------------------------------------------------
# Woordenlijst: (naar believen aanvullen a.u.b)
#
+# attendee -? aanwezige/bezoeker/komt/aanwezig
# authentication - aanmeldingscontrole
# calendar - agenda
# contacts -? adresboek/contacten/kaarten
# due to an error -? door een fout/vanwege een fout
+# decline -? afzeggen/weigeren/afwijzen
+# enveloped -? omhuld
+# event - notitie (altijd bij agenda's, agenda's bevatten notities)
+# expunge -? schrappen/leegmaken/definitief verwijderen/opruimen/opschonen/ruimen
# journal - dagboek
# journal entry - dagboekaantekening
# junk -? spam/troep
# meeting -? bijeenkomst (vergadering)
# permission was denied -? toestemming is geweigerd/hiertoe geen recht(en) heeft
+# permanently -? definief/blijvend/onherroepelijk/voorgoed
# send -? versturen/verzenden
# sync -? sync/synchroniseren/actualiseren
-# enveloped -? omhuld
#
# ------------------------------------------------------
# Arjan Scherpenisse <acscherp@wins.uva.nl>, 2000.
@@ -35,15 +40,14 @@ msgid ""
msgstr ""
"Project-Id-Version: evolution.gnome-2-8\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-22 06:28+0100\n"
-"PO-Revision-Date: 2004-10-02 03:20+0200\n"
+"POT-Creation-Date: 2005-03-03 11:50+0100\n"
+"PO-Revision-Date: 2005-03-04 23:44+0100\n"
"Last-Translator: Tino Meinen <a.t.meinen@chello.nl>\n"
-"Language-Team: Dutch <vertaling@nl.linux.org>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.3.1\n"
#: a11y/addressbook/ea-addressbook-view.c:94
#: a11y/addressbook/ea-addressbook-view.c:103
@@ -62,11 +66,11 @@ msgid "New Contact List"
msgstr "Nieuwe contactenlijst"
#: a11y/addressbook/ea-minicard-view.c:149
-#, fuzzy, c-format
+#, c-format
msgid "current addressbook folder has %d card"
msgid_plural "current addressbook folder has %d cards"
-msgstr[0] "huidige adresboek map"
-msgstr[1] "huidige adresboek map"
+msgstr[0] "huidige adresboek map heeft %d kaart"
+msgstr[1] "huidige adresboek map heeft %d kaarten"
#: a11y/addressbook/ea-minicard.c:31
#: calendar/gui/alarm-notify/alarm-queue.c:863
@@ -75,112 +79,104 @@ msgid "Open"
msgstr "Openen"
#: a11y/addressbook/ea-minicard.c:138
-#, fuzzy
msgid "Contact List: "
-msgstr "Contacten_lijst"
+msgstr "Contactenlijst:"
#: a11y/addressbook/ea-minicard.c:139
-#, fuzzy
msgid "Contact: "
-msgstr "Contacten: "
+msgstr "Contact: "
#: a11y/addressbook/ea-minicard.c:165
msgid "evolution minicard"
msgstr "evolution minikaart"
+# wekkers/alarms
#: a11y/calendar/ea-cal-view-event.c:235
msgid "It has alarms."
-msgstr ""
+msgstr "Het heeft wekkers."
#: a11y/calendar/ea-cal-view-event.c:238
-#, fuzzy
msgid "It has recurrences."
-msgstr "Alleen deze verwijderen"
+msgstr "Het herhaalt zich."
#: a11y/calendar/ea-cal-view-event.c:241
msgid "It is a meeting."
-msgstr ""
+msgstr "Het is een bijeenkomst."
#: a11y/calendar/ea-cal-view-event.c:247
-#, fuzzy, c-format
+#, c-format
msgid "Calendar Event: Summary is %s."
-msgstr "Agendagebeurtenissen"
+msgstr "Agendanotitie: Samenvatting is %s."
#: a11y/calendar/ea-cal-view-event.c:249
-#, fuzzy
msgid "Calendar Event: It has no summary."
-msgstr "Agendagebeurtenissen"
+msgstr "Agendanotitie: bevat geen samenvatting."
+# is dit goed?
#: a11y/calendar/ea-cal-view-event.c:268
-#, fuzzy
msgid "calendar view event"
-msgstr "Agendagebeurtenissen"
+msgstr "agendanotitie weergeven"
+# aandacht grijpen/betere vertaling?
#: a11y/calendar/ea-cal-view-event.c:485
-#, fuzzy
msgid "Grab Focus"
-msgstr "Heeft focus"
+msgstr "Focus grijpen"
#: a11y/calendar/ea-cal-view.c:306
-#, fuzzy
msgid "New Appointment"
msgstr "Nieuwe afspraak"
+# nieuwe agendanotitie voor de hele dag
#: a11y/calendar/ea-cal-view.c:307
-#, fuzzy
msgid "New All Day Event"
-msgstr "Gebeurtenis voor de hele dag"
+msgstr "Nieuwe gebeurtenis voor de hele dag"
#: a11y/calendar/ea-cal-view.c:308 calendar/gui/e-calendar-view.c:1372
msgid "New Meeting"
msgstr "Nieuwe bijeenkomst"
#: a11y/calendar/ea-cal-view.c:309
-#, fuzzy
msgid "Go to Today"
-msgstr "Ga Naar _Vandaag"
+msgstr "Ga naar vandaag"
#: a11y/calendar/ea-cal-view.c:310
-#, fuzzy
msgid "Go to Date"
-msgstr "_Ga Naar Datum..."
+msgstr "Ga naar datum"
#: a11y/calendar/ea-day-view-main-item.c:299
#: a11y/calendar/ea-week-view-main-item.c:301
-#, fuzzy
msgid "a table to view and select the current time range"
-msgstr "Een tijd relatief aan de huidige tijd"
+msgstr "een tabel om de huidige tijdsperiode weer te geven en te selecteren"
#: a11y/calendar/ea-day-view.c:146 a11y/calendar/ea-week-view.c:148
#, c-format
msgid "It has %d event."
msgid_plural "It has %d events."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Het heeft %d notitie."
+msgstr[1] "Het heeft %d notities."
#: a11y/calendar/ea-day-view.c:148 a11y/calendar/ea-week-view.c:150
msgid "It has no events."
-msgstr ""
+msgstr "Het heeft geen notities."
#: a11y/calendar/ea-day-view.c:152
-#, fuzzy, c-format
+#, c-format
msgid "Work Week View: %s. %s"
-msgstr "Werkweek weergave"
+msgstr "Werkweekweergave: %s. %s"
#: a11y/calendar/ea-day-view.c:155
-#, fuzzy, c-format
+#, c-format
msgid "Day View: %s. %s"
-msgstr "Dag weergave"
+msgstr "Dagweergave: %s. %s"
# agendainformatie
#: a11y/calendar/ea-day-view.c:186
-#, fuzzy
msgid "calendar view for a work week"
-msgstr "agenda-informatie"
+msgstr "agendaweergave voor een werkweek"
#: a11y/calendar/ea-day-view.c:188
msgid "calendar view for one or more days"
-msgstr ""
+msgstr "agendaweergave voor één of meer dagen"
#: a11y/calendar/ea-gnome-calendar.c:187 calendar/gui/calendar-component.c:660
msgid "%A %d %b %Y"
@@ -228,70 +224,64 @@ msgid "Gnome Calendar"
msgstr "Gnome Agenda"
#: a11y/calendar/ea-gnome-calendar.c:290
-#, fuzzy
msgid "search bar"
-msgstr "Zoek _basis:"
+msgstr "Zoekbalk"
#: a11y/calendar/ea-gnome-calendar.c:291
-#, fuzzy
msgid "evolution calendar search bar"
-msgstr "Evolution agenda en taken"
+msgstr "evolution agenda zoekbalk"
#: a11y/calendar/ea-jump-button.c:149
msgid "Jump button"
-msgstr ""
+msgstr "Springknop"
#: a11y/calendar/ea-jump-button.c:158
-#, fuzzy
msgid "Click here, you can find more events."
-msgstr "Klik hier om een lid toe te voegen"
+msgstr "Klik hier voor meer notities."
#: a11y/calendar/ea-week-view.c:155
-#, fuzzy, c-format
+#, c-format
msgid "Month View: %s. %s"
-msgstr "Maand weergave"
+msgstr "Maandweergave: %s. %s"
#: a11y/calendar/ea-week-view.c:159
-#, fuzzy, c-format
+#, c-format
msgid "Week View: %s. %s"
-msgstr "Week weergave"
+msgstr "Weekweergave: %s. %s"
# agendainformatie
#: a11y/calendar/ea-week-view.c:190
-#, fuzzy
msgid "calendar view for a month"
-msgstr "agenda-informatie"
+msgstr "agendaweergave voor een maand"
#: a11y/calendar/ea-week-view.c:192
msgid "calendar view for one or more weeks"
-msgstr ""
+msgstr "agendaweergave voor één of meer weken"
-#: a11y/widgets/ea-calendar-item.c:290 a11y/widgets/ea-calendar-item.c:296
+#: a11y/widgets/ea-calendar-item.c:296 a11y/widgets/ea-calendar-item.c:302
msgid "%d %B %Y"
msgstr "%d %B %Y"
-#: a11y/widgets/ea-calendar-item.c:298
-#, fuzzy, c-format
+#: a11y/widgets/ea-calendar-item.c:304
+#, c-format
msgid "Calendar: from %s to %s"
-msgstr "Agenda-informatie"
+msgstr "Agenda: van %s tot %s"
-#: a11y/widgets/ea-calendar-item.c:333
-#, fuzzy
+#: a11y/widgets/ea-calendar-item.c:339
msgid "evolution calendar item"
-msgstr "Evolution vKaender import"
+msgstr "evolution agenda-item"
#: a11y/widgets/ea-combo-button.c:40
msgid "Combo Button"
-msgstr ""
+msgstr "Combinatieknop"
#: a11y/widgets/ea-combo-button.c:50
-#, fuzzy
msgid "Activate Default"
-msgstr "_Standaard gebruiken"
+msgstr "Standaard activeren"
#: a11y/widgets/ea-combo-button.c:52
msgid "Popup Menu"
-msgstr ""
+msgstr "Popup-menu"
#. addressbook:ldap-init primary
#: addressbook/addressbook-errors.xml.h:2
@@ -300,13 +290,10 @@ msgstr "Dit adresboek kon niet worden geopend."
#. addressbook:ldap-init secondary
#: addressbook/addressbook-errors.xml.h:4
-#, fuzzy
msgid ""
"This addressbook server might be unreachable or the server name may be "
"misspelled or your network connection could be down."
-msgstr ""
-"Deze adresboek-server kan onbereikbaar zijn of de dserver naam kan \n"
-"verkeerd gespeld zijn of de netwerk verbinding kan verbroken zijn."
+msgstr "Deze adresboek-server kan onbereikbaar zijn of de servernaam kan verkeerd gespeld zijn of de netwerkverbinding kan verbroken zijn."
#. addressbook:ldap-auth primary
#: addressbook/addressbook-errors.xml.h:6
@@ -365,15 +352,13 @@ msgstr "Kan het adresboek niet verwijderen."
#. addressbook:ask-delete-addressbook primary
#: addressbook/addressbook-errors.xml.h:22
-#, fuzzy
msgid "Delete address book '{0}'?"
-msgstr "Selecteer doel adresboek"
+msgstr "Adresboek '{0}' verwijderen?"
#. addressbook:ask-delete-addressbook secondary
#: addressbook/addressbook-errors.xml.h:24
-#, fuzzy
msgid "This address book will be removed permanently."
-msgstr "Dit adresboek kon niet worden geopend."
+msgstr "Dit adresboek zal definitief worden verwijderd."
#. addressbook:edit-categories primary
#: addressbook/addressbook-errors.xml.h:26
@@ -483,19 +468,15 @@ msgstr ""
#. addressbook:ask-list-add-exists primary
#: addressbook/addressbook-errors.xml.h:59
-#, fuzzy
msgid "Address '{0}' already exists."
-msgstr "Map bestaat reeds"
+msgstr "Adres '{0} bestaat al."
#. addressbook:ask-list-add-exists secondary
#: addressbook/addressbook-errors.xml.h:61
-#, fuzzy
msgid ""
"A contact already exists with this address. Would you like to add a new "
"card with the same address anyway?"
-msgstr ""
-"De naam of het e-mailadres van dit contact bestaat reeds\n"
-"in deze map. Wilt u het toch toevoegen?"
+msgstr "Een contact met dit e-mailadres bestaat al. Wilt u het toch een nieuwe kaart met ditzelfde adres toevoegen?"
#: addressbook/addressbook-errors.xml.h:62 mail/em-vfolder-rule.c:494
#: plugins/shared-folder/properties.glade.h:10
@@ -505,20 +486,21 @@ msgstr "_Toevoegen"
#. addressbook:server-version title
#. calendar:server-version title
#: addressbook/addressbook-errors.xml.h:64 calendar/calendar-errors.xml.h:142
-#, fuzzy
msgid "Server Version"
-msgstr "Versie"
+msgstr "Server-versie"
#. addressbook:server-version primary
#. calendar:server-version primary
#: addressbook/addressbook-errors.xml.h:66 calendar/calendar-errors.xml.h:144
msgid "Your server needs to be updated"
-msgstr ""
+msgstr "Uw server heeft een update nodig"
#. addressbook:server-version secondary
#: addressbook/addressbook-errors.xml.h:68
msgid "Some features may not work correctly with your current server version"
msgstr ""
+"Bepaalde mogelijkheden werken mogelijk niet correct met uw huidige server-"
+"versie"
#: addressbook/conduit/address-conduit.c:298
msgid "Default Sync Address:"
@@ -534,9 +516,12 @@ msgstr "Kon adresboek niet laden"
msgid "Could not read pilot's Address application block"
msgstr "Kon de adresgegevens niet uit de pilot lezen"
+# was eerst: auto-afmaken,
+# maar het gaat er om welke adresboeken worden gebruikt bij het
+# automatisch aanvullen van een adres (als je 3 of meer letters hebt getypt)
#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:1
msgid "Autocompletion"
-msgstr "Auto-afmaken"
+msgstr "Auto-aanvullen"
#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:2
msgid "C_ontacts"
@@ -548,7 +533,7 @@ msgstr "Certificaten"
#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:4
msgid "Configure autocomplete here"
-msgstr "Configure autocomplete here"
+msgstr "Automatsch aanvullen hier configureren"
#. Create the contacts group
#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:5
@@ -598,7 +583,7 @@ msgstr "U kunt uw S/Mime certificaten hier beheren"
#: calendar/gui/calendar-component.c:208 calendar/gui/migration.c:459
#: calendar/gui/migration.c:552 calendar/gui/tasks-component.c:188
#: mail/em-folder-tree-model.c:197 mail/em-folder-tree-model.c:199
-#: mail/mail-component.c:270 mail/mail-vfolder.c:222
+#: mail/mail-component.c:290 mail/mail-vfolder.c:222
msgid "On This Computer"
msgstr "Op deze computer"
@@ -612,7 +597,7 @@ msgstr "Op deze computer"
#: addressbook/gui/contact-editor/contact-editor.glade.h:20
#: calendar/gui/calendar-component.c:216 calendar/gui/migration.c:467
#: calendar/gui/migration.c:560 calendar/gui/tasks-component.c:196
-#: filter/filter-label.c:123 mail/em-migrate.c:1013 mail/mail-config.c:77
+#: filter/filter-label.c:123 mail/em-migrate.c:1043 mail/mail-config.c:78
#: mail/mail-config.glade.h:101
msgid "Personal"
msgstr "Persoonlijk"
@@ -641,7 +626,7 @@ msgid "Create a new contact list"
msgstr "Maak een nieuwe contactenlijst"
#: addressbook/gui/component/addressbook-component.c:212
-#: addressbook/gui/component/addressbook-config.c:1121
+#: addressbook/gui/component/addressbook-config.c:1120
#: addressbook/gui/component/addressbook-view.c:757
msgid "New Address Book"
msgstr "Nieuw adresboek"
@@ -656,12 +641,12 @@ msgstr "Nieuw adresboek aanmaken"
#: addressbook/gui/component/addressbook-component.c:287
msgid "Failed upgrading Addressbook settings or folders."
-msgstr "Het opwaarderen van adresboek instellingen of mappen is mislukt"
+msgstr "Het opwaarderen van adresboek-instellingen of mappen is mislukt."
+# ?
#: addressbook/gui/component/addressbook-config.c:315
-#, fuzzy
msgid "Base"
-msgstr "Plakken"
+msgstr "Basis"
#: addressbook/gui/component/addressbook-config.c:510
#: calendar/gui/dialogs/calendar-setup.c:191
@@ -670,9 +655,8 @@ msgid "_Type:"
msgstr "_Type:"
#: addressbook/gui/component/addressbook-config.c:609
-#, fuzzy
msgid "Copy book content locally for offline operation"
-msgstr "Kopieër de inhoud van de map lokaal voor offline gebruik"
+msgstr "De inhoud van het adresboek lokaal kopiëren voor offline gebruik"
#: addressbook/gui/component/addressbook-config.c:904
#: addressbook/gui/component/ldap-config.glade.h:23
@@ -689,14 +673,12 @@ msgid "Addressbook"
msgstr "Adresboek"
#: addressbook/gui/component/addressbook-config.c:909
-#, fuzzy
msgid "Server Information"
-msgstr "<b>Server informatie</b>"
+msgstr "Server-informatie"
#: addressbook/gui/component/addressbook-config.c:911
-#, fuzzy
msgid "Authentication"
-msgstr "SMTP Aanmelding"
+msgstr "Aanmeldingscontrole"
#: addressbook/gui/component/addressbook-config.c:914
#: addressbook/gui/component/ldap-config.glade.h:18
@@ -704,29 +686,28 @@ msgstr "SMTP Aanmelding"
msgid "Details"
msgstr "Details"
+# zoekende/bezig met zoeken/zoeken...
#: addressbook/gui/component/addressbook-config.c:915
-#, fuzzy
msgid "Searching"
-msgstr "Ruimtes"
+msgstr "Zoeken"
+# bezig met downloaden/downloaden...
#: addressbook/gui/component/addressbook-config.c:917
-#, fuzzy
msgid "Downloading"
-msgstr "<b>Downloaden</b>"
+msgstr "Downloaden"
-#: addressbook/gui/component/addressbook-config.c:1119
+#: addressbook/gui/component/addressbook-config.c:1118
#: addressbook/gui/component/ldap-config.glade.h:14
msgid "Address Book Properties"
msgstr "Adresboek eigenschappen"
-# Of: bezig met overzetten
#: addressbook/gui/component/addressbook-migrate.c:72
-#: calendar/gui/migration.c:142 mail/em-migrate.c:1160
+#: calendar/gui/migration.c:142 mail/em-migrate.c:1190
msgid "Migrating..."
-msgstr "Nu aan het overzetten ..."
+msgstr "Bezig met overzetten..."
#: addressbook/gui/component/addressbook-migrate.c:124
-#: calendar/gui/migration.c:189 mail/em-migrate.c:1201
+#: calendar/gui/migration.c:189 mail/em-migrate.c:1231
#, c-format
msgid "Migrating `%s':"
msgstr "`%s' wordt overgezet:"
@@ -795,11 +776,9 @@ msgstr "Verwijderen"
msgid "Properties..."
msgstr "Eigenschappen..."
-# gegeven/geselecteerd
#: addressbook/gui/component/addressbook-view.c:1130
-#, fuzzy
msgid "Contact Source Selector"
-msgstr "Geen bronnen geselecteerd."
+msgstr "Contactenbron-selectie"
#: addressbook/gui/component/addressbook.c:98
msgid "Accessing LDAP Server anonymously"
@@ -812,64 +791,54 @@ msgstr "Fout bij het aanmelden.\n"
#: addressbook/gui/component/addressbook.c:200
#: plugins/groupwise-account-setup/camel-gw-listener.c:461
-#, fuzzy, c-format
+#, c-format
msgid "Enter password for %s (user %s)"
-msgstr "%sVoer uw wachtwoord in voor %s (gebruiker %s)"
+msgstr "Voer het wachtwoord in voor %s (gebruiker %s)"
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:1
-#, fuzzy
msgid "Autocomplete length"
-msgstr "Auto-afmaken"
+msgstr "Auto-aanvullen lengte"
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:2
-#, fuzzy
msgid "EFolderList XML for the list of completion URIs"
-msgstr "EFolderList xml voor de lijst met autoafmaak uri's"
+msgstr "EFolderList XML voor de lijst met auto-aanvullen URI's"
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:3
-#, fuzzy
msgid "EFolderList XML for the list of completion URIs."
-msgstr "EFolderList xml voor de lijst met autoafmaak uri's"
+msgstr "EFolderList XML voor de lijst met auto-aanvullen URI's."
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:4
-#, fuzzy
msgid ""
"Position of the vertical pane, between the card and list views and the "
"preview pane, in pixels."
-msgstr "Positie van het vertikale paneel in maand weergave"
+msgstr "Positie van het vertikale paneel, tussen de kaart- en lijstweergave en het voorbeeldpaneel, in pixels."
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:5
-#, fuzzy
msgid "Show preview pane"
-msgstr "Toon het voorbeeld paneel"
+msgstr "Het voorbeeldpaneel tonen"
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:6
-#, fuzzy
msgid ""
"The number of characters that must be typed before Evolution will attempt to "
"autocomplete."
-msgstr ""
-"Het aantal karakters dat getypt moet worden voordat evolution zal proberen "
-"het automatisch aan te vullen"
+msgstr "Het aantal tekens dat getypt moet worden voordat evolution het zal pogen automatisch aan te vullen."
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:7
msgid "URI for the folder last used in the select names dialog"
msgstr "URI voor de laatst gebruikte map in de slecteer namen dialoog"
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:8
-#, fuzzy
msgid "URI for the folder last used in the select names dialog."
-msgstr "URI voor de laatst gebruikte map in de slecteer namen dialoog"
+msgstr "URI voor de laatst gebruikte map in het dialoog: namen selecteren."
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:9
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:49
msgid "Vertical pane position"
-msgstr ""
+msgstr "Positie van verticale paneel"
#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:10
-#, fuzzy
msgid "Whether to show the preview pane."
-msgstr "Het voorbeeld weergave paneel tonen."
+msgstr "Of het voorbeeldpaneel wordt getoond"
#: addressbook/gui/component/ldap-config.glade.h:1
#: addressbook/gui/contact-editor/contact-editor.glade.h:1
@@ -941,7 +910,7 @@ msgid "Add Address Book"
msgstr "Adresboek toevoegen"
#: addressbook/gui/component/ldap-config.glade.h:15
-#: mail/em-account-editor.c:300
+#: mail/em-account-editor.c:302
msgid "Always"
msgstr "Altijd"
@@ -977,7 +946,7 @@ msgid "Lo_gin:"
msgstr "Aan_melding:"
#: addressbook/gui/component/ldap-config.glade.h:25
-#: mail/em-account-editor.c:298
+#: mail/em-account-editor.c:300
msgid "Never"
msgstr "Nooit"
@@ -1062,19 +1031,14 @@ msgstr ""
msgid ""
"This is the maximum number of entries to download. Setting this number to be "
"too large will slow down your address book."
-msgstr ""
-"Dit is het maximum aantal kaarten dat zal worden opgehaald. Als u het te "
-"hoog instelt zal het adresboek langzaam worden."
+msgstr "Dit is het maximum aantal kaarten dat zal worden opgehaald. Als u het te hoog instelt zal het adresboek traag worden."
#: addressbook/gui/component/ldap-config.glade.h:37
-#, fuzzy
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 ""
-"Dit is de methode die evolution zal gebruiken om u aan te melden. Als het op "
-"\"E-mailadres\" wordt gezet, is anonieme toegang tot de ldap server vereist."
+msgstr "Dit is de methode die Evolution zal gebruiken om u aan te melden. Als het op \"E-mailadres\" wordt gezet, is anonieme toegang tot de ldap server vereist."
#: addressbook/gui/component/ldap-config.glade.h:38
msgid ""
@@ -1103,7 +1067,7 @@ msgid "Using email address"
msgstr "E-mail adres wordt gebruikt"
#: addressbook/gui/component/ldap-config.glade.h:42
-#: mail/em-account-editor.c:299
+#: mail/em-account-editor.c:301
msgid "Whenever Possible"
msgstr "Indien mogelijk"
@@ -1157,7 +1121,7 @@ msgstr "kaarten"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:12
#: calendar/gui/dialogs/alarm-dialog.glade.h:26
#: calendar/gui/dialogs/calendar-setup.glade.h:14 filter/filter.glade.h:16
-#: mail/em-account-editor.c:1883 plugins/calendar-http/calendar-http.c:263
+#: mail/em-account-editor.c:1885 plugins/calendar-http/calendar-http.c:263
#: plugins/calendar-weather/calendar-weather.c:564
msgid "minutes"
msgstr "minuten"
@@ -1222,10 +1186,10 @@ msgstr "Contacten bewerken"
msgid "Full _Name..."
msgstr "Volledige _naam..."
+# plaatje/foto/afbeelding
#: addressbook/gui/contact-editor/contact-editor.glade.h:15
-#, fuzzy
msgid "Image"
-msgstr "bericht"
+msgstr "Foto"
#: addressbook/gui/contact-editor/contact-editor.glade.h:16
#: addressbook/gui/contact-editor/e-contact-editor-im.c:66
@@ -1251,15 +1215,14 @@ msgid "Personal Information"
msgstr "Persoonlijke informatie"
#: addressbook/gui/contact-editor/contact-editor.glade.h:22
-#, fuzzy
msgid "Telephone"
-msgstr "<b>Telefoon</b>"
+msgstr "Telefoon"
#. red
#: addressbook/gui/contact-editor/contact-editor.glade.h:23
#: addressbook/gui/contact-editor/e-contact-editor-im.c:235
#: addressbook/gui/contact-editor/e-contact-editor.c:199
-#: filter/filter-label.c:122 mail/em-migrate.c:1012 mail/mail-config.c:76
+#: filter/filter-label.c:122 mail/em-migrate.c:1042 mail/mail-config.c:77
#: mail/mail-config.glade.h:148
msgid "Work"
msgstr "Werk"
@@ -1270,79 +1233,66 @@ msgid "_Address:"
msgstr "_Adres:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:25
-#, fuzzy
msgid "_Anniversary:"
-msgstr "Verjaardag:"
+msgstr "Ver_jaardag:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:26
-#, fuzzy
msgid "_Assistant:"
-msgstr "Assistent:"
+msgstr "A_ssistent:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:27
-#, fuzzy
msgid "_Birthday:"
-msgstr "Geboortedatum:"
+msgstr "_Geboortedatum:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:28
#: plugins/itip-formatter/itip-view.c:1619
-#, fuzzy
msgid "_Calendar:"
-msgstr "Agenda:"
+msgstr "_Agenda:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:29
msgid "_Categories"
msgstr "_Categorieën"
#: addressbook/gui/contact-editor/contact-editor.glade.h:30
-#, fuzzy
msgid "_City:"
-msgstr "Plaats:"
+msgstr "_Plaats:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:31
-#, fuzzy
msgid "_Company:"
-msgstr "Bedrijf:"
+msgstr "_Bedrijf:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:32
-#, fuzzy
msgid "_Country:"
-msgstr "Land:"
+msgstr "_Land:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:33
-#, fuzzy
msgid "_Department:"
-msgstr "Afdeling:"
+msgstr "A_fdeling:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:34
msgid "_File under:"
msgstr "_Opslaan onder:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:35
-#, fuzzy
msgid "_Free/Busy:"
msgstr "V_rij/Bezet:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:36
-#, fuzzy
msgid "_Home Page:"
-msgstr "Homepage:"
+msgstr "_Webstek:"
# beheerder
#: addressbook/gui/contact-editor/contact-editor.glade.h:37
-#, fuzzy
msgid "_Manager:"
-msgstr "Manager:"
+msgstr "_Manager:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:38
-#, fuzzy
msgid "_Notes:"
msgstr "Aa_ntekeningen:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:39
-#, fuzzy
msgid "_Office:"
-msgstr "Kantoor:"
+msgstr "_Kantoor:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:40
#: addressbook/gui/contact-editor/fulladdr.glade.h:7
@@ -1350,15 +1300,13 @@ msgid "_PO Box:"
msgstr "_Postbus:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:41
-#, fuzzy
msgid "_Profession:"
-msgstr "Beroep:"
+msgstr "_Beroep:"
# echtgenoot
#: addressbook/gui/contact-editor/contact-editor.glade.h:42
-#, fuzzy
msgid "_Spouse:"
-msgstr "Partner:"
+msgstr "Pa_rtner:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:43
#: addressbook/gui/contact-editor/fulladdr.glade.h:8
@@ -1371,19 +1319,16 @@ msgid "_Title:"
msgstr "_Titel:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:45
-#, fuzzy
msgid "_Video Chat:"
-msgstr "Video Chat:"
+msgstr "_Video-chat:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:46
-#, fuzzy
msgid "_Wants to receive HTML mail"
-msgstr "Bij voorkeur HTML-berichten"
+msgstr "Bij voorkeur _HTML-berichten"
#: addressbook/gui/contact-editor/contact-editor.glade.h:47
-#, fuzzy
msgid "_Web Log:"
-msgstr "Weblog:"
+msgstr "_Weblog:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:48
#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:13
@@ -1391,9 +1336,8 @@ msgid "_Where:"
msgstr "_Waar:"
#: addressbook/gui/contact-editor/contact-editor.glade.h:49
-#, fuzzy
msgid "_Zip/Postal Code:"
-msgstr "Postcode:"
+msgstr "Post_code:"
#: addressbook/gui/contact-editor/e-contact-editor-address.c:96
#: addressbook/gui/widgets/eab-contact-display.c:365
@@ -2152,9 +2096,8 @@ msgid "Saint Lucia"
msgstr "Santa Lucia"
#: addressbook/gui/contact-editor/e-contact-editor-address.c:320
-#, fuzzy
msgid "Saint Vincent And The Grenadines"
-msgstr "Saint Vincent en de Grena-dines"
+msgstr "Saint Vincent en de Grenadines"
#: addressbook/gui/contact-editor/e-contact-editor-address.c:321
msgid "Samoa"
@@ -2466,18 +2409,19 @@ msgid "Writable Fields"
msgstr "Beschrijfbare velden"
#: addressbook/gui/contact-editor/e-contact-editor.c:291
-#, fuzzy
msgid "Required Fields"
-msgstr "_Vereiste mensen"
+msgstr "Vereiste velden"
#: addressbook/gui/contact-editor/e-contact-editor.c:305
msgid "Changed"
-msgstr "Veranderd"
+msgstr "Gewijzigd"
+# foto is beter
#: addressbook/gui/contact-editor/e-contact-editor.c:2578
msgid "Please select an image for this contact"
msgstr "Selecteer een afbeelding voor dit contact"
+# foto is beter
#: addressbook/gui/contact-editor/e-contact-editor.c:2579
msgid "No image"
msgstr "Geen afbeelding"
@@ -2487,7 +2431,7 @@ msgid ""
"The contact data is invalid:\n"
"\n"
msgstr ""
-"De contact data is ongeldig:\n"
+"De contact-data is ongeldig:\n"
"\n"
#: addressbook/gui/contact-editor/e-contact-editor.c:2907
@@ -2503,7 +2447,6 @@ msgid "_Edit Full"
msgstr "Volledig be_werken"
#: addressbook/gui/contact-editor/e-contact-quick-add.c:306
-#, fuzzy
msgid "_Full name:"
msgstr "_Volledige naam:"
@@ -2511,7 +2454,7 @@ msgstr "_Volledige naam:"
msgid "E-_mail:"
msgstr "E-_mail:"
-#: addressbook/gui/contact-editor/eab-editor.c:324
+#: addressbook/gui/contact-editor/eab-editor.c:326
msgid ""
"Are you sure you want\n"
"to delete these contacts?"
@@ -2519,7 +2462,7 @@ msgstr ""
"Weet u zeker dat u deze\n"
"contacten wilt verwijderen?"
-#: addressbook/gui/contact-editor/eab-editor.c:327
+#: addressbook/gui/contact-editor/eab-editor.c:329
msgid ""
"Are you sure you want\n"
"to delete this contact?"
@@ -2663,11 +2606,10 @@ msgstr "_Verberg de adressen bij het sturen van post naar deze lijst"
msgid "_List name:"
msgstr "_Lijstnaam:"
-# selecteren
+# selecteer
#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:11
-#, fuzzy
msgid "_Select"
-msgstr "Selecteer"
+msgstr "_Selecteren"
#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:12
msgid "_Type an email address or drag a contact into the list below:"
@@ -2687,14 +2629,12 @@ msgid "Is New List"
msgstr "Is nieuwe lijst"
#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:707
-#, fuzzy
msgid "_Members"
-msgstr "Leden"
+msgstr "_Leden"
#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:710
-#, fuzzy
msgid "Contact List Members"
-msgstr "Lijstleden"
+msgstr "Leden contactenlijst"
#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:1
msgid "Changed Contact:"
@@ -2801,7 +2741,7 @@ msgstr "Bron"
#: addressbook/gui/widgets/e-addressbook-view.c:244
#: calendar/gui/dialogs/meeting-page.etspec.h:11
#: calendar/gui/e-calendar-table.etspec.h:13
-#: calendar/gui/e-meeting-list-view.c:244
+#: calendar/gui/e-meeting-list-view.c:319
#: calendar/gui/e-meeting-time-sel.etspec.h:11
msgid "Type"
msgstr "Type"
@@ -2873,9 +2813,8 @@ msgid "Any Category"
msgstr "Elke categorie"
#: addressbook/gui/widgets/e-addressbook-view.c:1750
-#, fuzzy
msgid "Print cards"
-msgstr "Taken afdrukken"
+msgstr "Kaarten afdrukken"
#: addressbook/gui/widgets/e-addressbook-view.etspec.h:1
msgid "Assistant"
@@ -3014,7 +2953,7 @@ msgstr "Radio"
#: addressbook/gui/widgets/e-addressbook-view.etspec.h:33
#: calendar/gui/dialogs/meeting-page.etspec.h:9
-#: calendar/gui/e-meeting-list-view.c:251
+#: calendar/gui/e-meeting-list-view.c:326
#: calendar/gui/e-meeting-time-sel.etspec.h:9
msgid "Role"
msgstr "Rol"
@@ -3086,7 +3025,6 @@ msgid "Column Width"
msgstr "Kolombreedte"
#: addressbook/gui/widgets/e-minicard-view.c:171
-#, fuzzy
msgid ""
"\n"
"\n"
@@ -3096,9 +3034,9 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Er zijn geen items om weer te geven.\n"
+"Zoeken naar het contact\n"
"\n"
-"Dubbelklik hier om een nieuw contact te maken."
+"of dubbelklik hier om een nieuw contact te maken."
#: addressbook/gui/widgets/e-minicard-view.c:174
msgid ""
@@ -3115,12 +3053,14 @@ msgstr ""
"Dubbelklik hier om een nieuw contact te maken."
#: addressbook/gui/widgets/e-minicard-view.c:179
-#, fuzzy
msgid ""
"\n"
"\n"
"Search for the Contact."
-msgstr "Zoek naar contacten..."
+msgstr ""
+"\n"
+"\n"
+"Zoeken naar het contact."
#: addressbook/gui/widgets/e-minicard-view.c:181
msgid ""
@@ -3301,7 +3241,7 @@ msgid ""
"We were unable to open this addressbook. This either means this book is not "
"marked for offline usage or not yet downloaded for offline usage. Please "
"load the addressbook once in online mode to download its contents"
-msgstr ""
+msgstr "Wij konden dit adresboek niet openen. Dit betekent dat het boek niet aangemerkt voor offline gebruik of nog niet is gedownload voor offline gebruik. Om de inhoud te downloaden moet u het adresboek voor één keer in online-modus laden."
#: addressbook/gui/widgets/eab-gui-util.c:98
msgid ""
@@ -3499,12 +3439,13 @@ msgstr "Adresboek wordt benaderd..."
msgid "Merge E-Mail Address"
msgstr "E-mailadres samenvoegen"
+# contact/kaart
#: addressbook/gui/widgets/eab-vcard-control.c:139
-#, fuzzy, c-format
+#, c-format
msgid "There is one other contact."
msgid_plural "There are %d other contacts."
-msgstr[0] "en één andere kaart."
-msgstr[1] "en %d andere kaarten."
+msgstr[0] "Er is één ander contact."
+msgstr[1] "Er zijn %d andere contacten."
#: addressbook/gui/widgets/eab-vcard-control.c:223
#: addressbook/gui/widgets/eab-vcard-control.c:272
@@ -3784,12 +3725,10 @@ msgid "[vcard|csv]"
msgstr "[vcard|csv]"
#: addressbook/tools/evolution-addressbook-export.c:61
-#, fuzzy
msgid "Export in asynchronous mode"
-msgstr "Exporteer in asynchrone mode "
+msgstr "Exporteren in asynchrone modus"
#: addressbook/tools/evolution-addressbook-export.c:63
-#, fuzzy
msgid ""
"The number of cards in one output file in asychronous mode, default size 100."
msgstr ""
@@ -3818,8 +3757,8 @@ msgstr "In async mode moet de uitvoer een bestand zijn."
msgid "In normal mode, there is no need for the size option."
msgstr "In normale stand is er geen optie nodig voor grootte."
+# niet letterlijk vertaald
#: addressbook/tools/evolution-addressbook-export.c:153
-#, fuzzy
msgid "Unhandled error"
msgstr "Onbekende fout"
@@ -3867,7 +3806,7 @@ msgstr "Melding versturen"
#. calendar:prompt-delete-meeting primary
#: calendar/calendar-errors.xml.h:8
msgid "Are you sure you want to delete this meeting?"
-msgstr "Weet u zeker dat u deze vergadering wilt verwijderen?"
+msgstr "Weet u zeker dat u deze bijeenkomst wilt verwijderen?"
#. calendar:prompt-delete-meeting secondary
#: calendar/calendar-errors.xml.h:10
@@ -4134,41 +4073,37 @@ msgstr ""
#. calendar:prompt-delete-calendar primary
#: calendar/calendar-errors.xml.h:116
-#, fuzzy
msgid "Delete calendar '{0}'?"
-msgstr "{0}\" verwijderen?"
+msgstr "Agenda '{0}' verwijderen?"
#. calendar:prompt-delete-calendar secondary
#: calendar/calendar-errors.xml.h:118
msgid "This calendar will be removed permanently."
-msgstr ""
+msgstr "Deze agenda zal definitief worden verwijderd."
#. calendar:prompt-delete-task-list primary
#: calendar/calendar-errors.xml.h:120
-#, fuzzy
msgid "Delete task list '{0}'?"
-msgstr "Deze lijst verwijderen"
+msgstr "Takenlijst '{0}' verwijderen?"
#. calendar:prompt-delete-task-list secondary
#: calendar/calendar-errors.xml.h:122
msgid "This task list will be removed permanently."
-msgstr ""
+msgstr "Deze takenlijst zal definitief worden verwijderd."
#. calendar:prompt-send-no-subject-calendar primary
#: calendar/calendar-errors.xml.h:124
-#, fuzzy
msgid "Are you sure you want to send the appointment without a summary?"
-msgstr "Weet u zeker dat u een bericht zonder onderwerp wilt versturen?"
+msgstr "Weet u zeker dat u de afspraak wilt versturen zonder samenvatting?"
#. calendar:prompt-send-no-subject-calendar secondary
#: calendar/calendar-errors.xml.h:126
-#, fuzzy
msgid ""
"Adding a meaningful Summary to your appointment will give your recipients an "
"idea of what your appointment is about."
msgstr ""
-"Het toevoegen van een onderwerp aan uw bericht zal de geadresseerden een "
-"hint geven waar uw bericht over gaat."
+"Het toevoegen van een samenvatting aan uw afspraakbericht zal de "
+"geadresseerden een hint geven waar de afspraak over gaat."
# in outlook wordt de 'e' als sneltoets gebruikt
#: calendar/calendar-errors.xml.h:127 calendar/calendar-errors.xml.h:132
@@ -4179,46 +4114,42 @@ msgstr "V_erzenden"
#. calendar:prompt-send-no-subject-task primary
#: calendar/calendar-errors.xml.h:129
-#, fuzzy
msgid "Are you sure you want to send the task without a summary?"
-msgstr "Weet u zeker dat u een bericht zonder onderwerp wilt versturen?"
+msgstr "Weet u zeker dat u de taak zonder onderwerp wilt versturen?"
#. calendar:prompt-send-no-subject-task secondary
#: calendar/calendar-errors.xml.h:131
-#, fuzzy
msgid ""
"Adding a meaningful Summary to your task will give your recipients an idea "
"of what your task is about."
-msgstr ""
-"Het toevoegen van een onderwerp aan uw bericht zal de geadresseerden een "
-"hint geven waar uw bericht over gaat."
+msgstr "Het toevoegen van een onderwerp aan uw taak zal de geadresseerden een hint geven waar uw taak over gaat."
#. calendar:prompt-no-contents-offline-calendar primary
#: calendar/calendar-errors.xml.h:134
-#, fuzzy
msgid "Error loading calendar"
-msgstr "Fout bij openen van de agenda"
+msgstr "Fout bij laden van de agenda"
#. calendar:prompt-no-contents-offline-calendar secondary
#: calendar/calendar-errors.xml.h:136
msgid "The calendar is not marked for offline usage"
-msgstr ""
+msgstr "De agenda is niet aangemerkt voor offline gebruik"
#. calendar:prompt-no-contents-offline-tasks primary
#: calendar/calendar-errors.xml.h:138
-#, fuzzy
msgid "Error loading task list"
-msgstr "Fout bij toevoegen lijst"
+msgstr "Fout bij laden van takenlijst"
#. calendar:prompt-no-contents-offline-tasks secondary
#: calendar/calendar-errors.xml.h:140
msgid "The task list is not marked for offline usage"
-msgstr ""
+msgstr "De takenlijst is niet aangemerkt voor offline gebruik"
#. calendar:server-version secondary
#: calendar/calendar-errors.xml.h:146
msgid " Some features may not work correctly with your current server version"
msgstr ""
+"Bepaalde mogelijkheden werken mogelijk niet correct met uw huidige server-"
+"versie"
#: calendar/common/authentication.c:49 calendar/gui/e-pub-utils.c:301
#: smime/gui/component.c:48
@@ -4311,10 +4242,9 @@ msgid "Evolution Calendar alarm notification service"
msgstr "Evolution agenda alarmweergave"
#: calendar/gui/alarm-notify/alarm-notify-dialog.c:79
-#, fuzzy
msgid "minute"
msgid_plural "minutes"
-msgstr[0] "minuten"
+msgstr[0] "minuut"
msgstr[1] "minuten"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:1
@@ -4323,34 +4253,30 @@ msgid "Appointment"
msgstr "Afspraak"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:2
-#, fuzzy
msgid "Appointment Title"
-msgstr "Afspraak"
+msgstr "Afspraak titel"
#. End time
#: calendar/gui/alarm-notify/alarm-notify.glade.h:3
#: plugins/itip-formatter/itip-view.c:876
-#, fuzzy
msgid "End time:"
-msgstr "_Eindtijd:"
+msgstr "Eindtijd:"
#. Location
#: calendar/gui/alarm-notify/alarm-notify.glade.h:4
#: calendar/gui/e-itip-control.c:1118 plugins/itip-formatter/itip-view.c:859
msgid "Location:"
-msgstr "Locatie: "
+msgstr "Lokatie: "
#: calendar/gui/alarm-notify/alarm-notify.glade.h:5
-#, fuzzy
msgid "Snooze _time:"
-msgstr "Sluimer_tijd (minuten):"
+msgstr "Sluimer_tijd:"
#. Start time
#: calendar/gui/alarm-notify/alarm-notify.glade.h:6
#: plugins/itip-formatter/itip-view.c:867
-#, fuzzy
msgid "Start time:"
-msgstr "_Begintijd:"
+msgstr "Begintijd:"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:7
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:50
@@ -4369,37 +4295,33 @@ msgid "_Snooze"
msgstr "_Sluimeren"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:9
-#, fuzzy
msgid "description of appointment"
-msgstr "begin van afspraak"
+msgstr "omschrijving van afspraak"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:10
-#, fuzzy
msgid "end-time"
-msgstr "_Eindtijd:"
+msgstr "eindtijd"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:11
-#, fuzzy
msgid "location"
-msgstr "Lokatie"
+msgstr "lokatie"
#: calendar/gui/alarm-notify/alarm-notify.glade.h:13
-#, fuzzy
msgid "start-time"
-msgstr "_Begintijd:"
+msgstr "begintijd"
#: calendar/gui/alarm-notify/alarm-queue.c:864
msgid "Dismiss"
msgstr "Negeren"
+# alles ververgen
#: calendar/gui/alarm-notify/alarm-queue.c:865
msgid "Dismiss All"
msgstr "Allemaal verbergen"
#: calendar/gui/alarm-notify/alarm-queue.c:947
-#, fuzzy
msgid "No summary available."
-msgstr "Geen beschrijving beschikbaar."
+msgstr "Geen omschrijving beschikbaar."
#: calendar/gui/alarm-notify/alarm-queue.c:956
#: calendar/gui/alarm-notify/alarm-queue.c:958
@@ -4407,9 +4329,8 @@ msgid "No description available."
msgstr "Geen beschrijving beschikbaar."
#: calendar/gui/alarm-notify/alarm-queue.c:966
-#, fuzzy
msgid "No location information available."
-msgstr "Geen beschrijving beschikbaar."
+msgstr "Geen lokatieinformatie beschikbaar."
#: calendar/gui/alarm-notify/alarm-queue.c:982
#, c-format
@@ -4475,324 +4396,306 @@ msgid "invalid time"
msgstr "ongeldige tijd"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:1
-#, fuzzy
msgid "Alarm programs"
-msgstr "Start een programma"
+msgstr "Wekkerprogramma's"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:2
-#, fuzzy
msgid "Ask for confirmation when deleting items"
-msgstr "Vr_aag om bevestiging bij het wissen van items"
+msgstr "Vragen om bevestiging bij het wissen van items"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:3
-#, fuzzy
msgid "Background color of tasks that are due today, in \"#rrggbb\" format."
-msgstr "Kleur voor taken voor vandaag"
+msgstr ""
+"Achtergrondkleur voor taken die vandaag gedaan moeten worden, in \"rrggbb\"-"
+"formaat."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:4
-#, fuzzy
msgid "Background color of tasks that are overdue, in \"#rrggbb\" format."
-msgstr "Kleur voor taken die gedaan hadden moeten zijn"
+msgstr ""
+"Achtergrondkleur voor taken die al gedaan hadden moeten zijn, in \"rrggbb\"-"
+"formaat."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:5
msgid "Calendars to run alarms for"
-msgstr "Agenda's met alarmen"
+msgstr "Agenda's met alarms"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:6
-#, fuzzy
msgid "Compress weekends in month view"
-msgstr "Weekeinden comprimeren in maand weergave"
+msgstr "Weekeinden comprimeren in maandweergave"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:7
-#, fuzzy
msgid "Confirm expunge"
-msgstr "Bevestigen bij het _legen van een map"
+msgstr "Bevestigen bij het leegmaken"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:8
msgid "Days on which the start and end of work hours should be indicated."
-msgstr ""
+msgstr "Dagen waarop de begin- en eindtijden van werkuren zichbaar moeten zijn."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:9
-#, fuzzy
msgid "Default appointment reminder"
-msgstr "Verwijder deze afspraak"
+msgstr "Standaar afspraak herinnering"
+# ?
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:10
-#, fuzzy
msgid "Default reminder units"
-msgstr "Standaard venster breedte"
+msgstr "Standaard herinneringseenheden"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:11
-#, fuzzy
msgid "Default reminder value"
-msgstr "Eenheden van standaard herinnering"
+msgstr "Standaard herinneringswaarde"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:12
-#, fuzzy
msgid "Free/busy server urls"
-msgstr "Vrij/Bezet Verzoek"
+msgstr "Vrij/bezet server-urls"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:13
-#, fuzzy
msgid "Free/busy template url"
-msgstr "Vrij/Bezet Antwoord"
+msgstr "Vrij/bezet sjabloon-url"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:14
-#, fuzzy
msgid "Hide completed tasks"
-msgstr "Verberg voltooide _taken na"
+msgstr "Voltooide taken verbergen"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:15
-#, fuzzy
msgid "Hide task units"
-msgstr "Nieuwe takenlijst"
+msgstr "Taakeenheden verbergen"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:16
msgid "Hide task value"
-msgstr ""
+msgstr "Taakwaarde verbergen"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:17
msgid "Horizontal pane position"
-msgstr ""
+msgstr "Horizontale paneelpositie"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:18
msgid "Hour the workday ends on, in twenty four hour format, 0 to 23."
-msgstr ""
+msgstr "Het uur waarop de werkdag eindigt, in 24-uurs formaat, 0 tot 23."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:19
msgid "Hour the workday starts on, in twenty four hour format, 0 to 23."
-msgstr ""
+msgstr "Het uur waarop de werkdag begint, in 24-uurs formaat, 0 tot 23."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:20
msgid "Last alarm time"
-msgstr ""
+msgstr "Laatste alarmtijd"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:21
-#, fuzzy
msgid "List of server urls for free/busy publishing."
-msgstr "Lijst met urls voor vrij/bezet publicatie"
+msgstr "Lijst met server-urls voor vrij/bezet publicatie."
+# engels: geen punt op het eind
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:22
-#, fuzzy
msgid "Minute the workday ends on, 0 to 59"
-msgstr "Minuut waarop de werkdag eindigd"
+msgstr "Minuut waarop de werkdag eindigt, 0 tot 59."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:23
-#, fuzzy
msgid "Minute the workday starts on, 0 to 59."
-msgstr "Minuut waarop de werkdag begint"
+msgstr "Minuut waarop de werkdag begint, 0 tot 59."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:24
-#, fuzzy
msgid "Month view horizontal pane position"
-msgstr "Positie van het horizontale paneel"
+msgstr "Maandweergave, horizontale paneelpositie"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:25
-#, fuzzy
msgid "Month view vertical pane position"
-msgstr "Positie van het vertikale paneel in hoofd weergave"
+msgstr "Maandweergave, verticale paneelpositie"
+# Engels grammatica: Number of units for determining for a default reminder.
+# voor het bepalen van een standaard herinnering?
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:26
-#, fuzzy
msgid "Number of units for determining for a default reminder."
-msgstr "Aantal units voor de standaard herinnering"
+msgstr "Aantal eenheden voor een standaard herinnering."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:27
-#, fuzzy
msgid "Number of units for determining when to hide tasks."
-msgstr "Aantal units voordat taken verborgen moeten worden"
+msgstr ""
+"Aantal eenheden voor het bepalen wanneer taken verborgen moeten worden."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:28
-#, fuzzy
msgid "Overdue tasks color"
-msgstr "Verl_open taken:"
+msgstr "Kleur van verlopen taken"
+# wat een rotzin!
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:29
msgid ""
"Position of the horizontal pane, between the date navigator calendar and the "
"task list when not in the month view, in pixels."
msgstr ""
+"Positie van het horizontale paneel, tussen de datumkiezer-agenda en de "
+"takenlijst, wanneer niet in maandweergave, in pixels."
+# engels: zin klopt niet:
+# Position of the horizontal pane, between the view and the date navigator
+# calendar and task list in the month view, in pixels.
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:30
msgid ""
"Position of the horizontal pane, between the view and the date navigator "
"calendar and task list in the month view, in pixels."
msgstr ""
+"Positie van het horizontale paneel, tussen het weergavegedeelte en de "
+"datumkiezer-agenda en de takenlijst, bij maandweergave, in pixels."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:31
-#, fuzzy
msgid ""
"Position of the vertical pane, between task list and the task preview pane, "
"in pixels."
-msgstr "Positie van het vertikale paneel in de taken weergave"
+msgstr ""
+"Positie van het verticale paneel, tussen takenlijst en de taken-"
+"voorbeelpaneel, in pixels."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:32
msgid ""
"Position of the vertical pane, between the view and the date navigator "
"calendar and task list in the month view, in pixels."
msgstr ""
+"Positie van het verticale paneel, tussen het weergavegedeelte en de "
+"datumkiezer-agenda en takenlijst, bij maandweergave, in pixels."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:33
msgid ""
"Position of the vertical pane, between the view and the date navigator "
"calendar and task list when not in the month view, in pixels."
msgstr ""
+"Positie van het verticale paneel, tussen het weergavegedeelte en de "
+"datumkiezer-agenda en de takenlijst, wanneer niet in maandweergave, in "
+"pixels."
+# Programma's die kunnen fungeren als deel van een alarm
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:34
-#, fuzzy
msgid "Programs that are allowed to be run by alarms."
-msgstr "Programma's die kunnen fungeren als deel van een alarm"
+msgstr "Programma's die door alarms mogen worden uitgevoerd."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:35
-#, fuzzy
msgid "Show appointment end times in week and month views"
msgstr "Eindtijden van afspraken tonen in week- en maandweergave"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:36
msgid "Show display alarms in notification tray"
-msgstr ""
+msgstr "Alarms weergeven in het mededelingengebied"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:37
-#, fuzzy
msgid "Show week numbers in date navigator"
-msgstr "Week_nummers tonen in datum navigator"
+msgstr "Weeknummers tonen in datumkiezer"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:38
-#, fuzzy
msgid "Tasks due today color"
-msgstr "T_aken die vandaag verlopen:"
+msgstr "Kleur van taken die vandaag verlopen"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:39
msgid "Tasks vertical pane position"
-msgstr ""
+msgstr "Taken verticale paneelpositie"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:40
msgid ""
"The default timezone to use for dates and times in the calendar, as an "
"untranslated Olsen timezone database location like \"America/New York\"."
-msgstr ""
+msgstr "De standaard tijdzone gebruikt voor datum en tijd in de agenda, als een onvertaalde Olsen tijdzone database lokatie zoals \"Europe/Amsterdam\"."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:42
#, no-c-format
msgid ""
"The url template to use as a free/busy data fallback, %u is replaced by the "
"user part of the mail address and %d is replaced by the domain."
-msgstr ""
+msgstr "De url-sjabloon die gebruikt wordt als vrij/bezet fallback, %u wordt vervangen door het gebruikersnaam-deel van het mailadres en %d wordt vervangen door het domein."
+# Engels fout: Time divisions</short> <short>Intervals ...
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:43
-#, fuzzy
msgid ""
"Time divisions</short> <short>Intervals shown in Day and Work Week views, in "
"minutes."
-msgstr "Intervallen die getoont worden in dag- en week-weergave"
+msgstr "<short>Tijdverdeling</short> Intervallen die getoont worden in dag- en werkweekweergave, in minuten."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:44
-#, fuzzy
msgid "Time the last alarm ran, in time_t."
-msgstr "Tijd van het laatste alarm"
+msgstr "Tijd wanneer het laatste alarm is afgegaan, in time_t."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:45
-#, fuzzy
msgid "Timezone"
-msgstr "Tijdzone "
+msgstr "Tijdzone"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:46
msgid "Twenty four hour time format"
-msgstr ""
+msgstr "24-uurs tijdsformaat"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:47
msgid "Units for a default reminder, \"minutes\", \"hours\" or \"days\"."
-msgstr ""
+msgstr "Eenheid voor een standaard-herinnering, \"minuten\", \"uren\" of \"dagen\"."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:48
-#, fuzzy
msgid ""
"Units for determining when to hide tasks, \"minutes\", \"hours\" or \"days\"."
-msgstr "Units voor het uitzoeken of taken verborgen dienen te worden"
+msgstr "Eenheid wanneer taken worden verborgen, \"minuten\", \"uren\" of \"dagen\"."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:50
-#, fuzzy
msgid "Week start"
-msgstr "W_eek begint:"
+msgstr "Week begint"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:51
-#, fuzzy
msgid "Weekday the week starts on, from Sunday (0) to Saturday (6)."
-msgstr "Weekdag waarmee de week begint"
+msgstr "Weekdag waarmee de week begint, van zondag (0) tot zaterdag (6)."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:52
-#, fuzzy
msgid "Whether or not to use the notification tray for display alarms."
-msgstr ""
-"Gebruik het notificatie systeemvak voor het weergeven van waarschuwingen"
+msgstr "Of het mededelingengebied wordt gebruikt voor het weergeven van alarms."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:53
-#, fuzzy
msgid "Whether to ask for confirmation when deleting an appointment or task."
-msgstr "Vraag om bevestiging bij het wissen van afspraken"
+msgstr "Of om bevestiging wordt gevraagd bij het wissen van eem afspraak of taak."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:54
-#, fuzzy
msgid "Whether to ask for confirmation when expunging appointments and tasks."
-msgstr "Vraag om bevestiging bij het wissen van afspraken"
+msgstr "Of om bevestiging wordt gevraagd bij het definitief verwijderen van afspraken en taken."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:55
msgid ""
"Whether to compress weekends in the month view, which puts Saturday and "
"Sunday in the space of one weekday."
-msgstr ""
+msgstr "Of weekenden in de maandweergave worden gecomprimeerd waardoor zaterdag en zondag de ruimte krijgen van één weekdag."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:56
-#, fuzzy
msgid "Whether to display the end time of events in the week and month views."
-msgstr "Eindtijden van afspraken tonen in week- en maandweergave"
+msgstr ""
+"If de eindtijden van afspraken worden getoond in week- en maandweergave."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:57
-#, fuzzy
msgid "Whether to hide completed tasks in the tasks view."
-msgstr "Verbergen van voltooide taken"
+msgstr "Of voltooide taken worden verborgen in in de takenweergave."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:58
-#, fuzzy
msgid "Whether to set a default reminder for appointments."
-msgstr "Instellen standaard herinnering bij gebeurtenissen"
+msgstr "Of een standaard herinnering wordt ingesteld bij afspraken."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:59
-#, fuzzy
msgid ""
"Whether to show times in twenty four hour format instead of using am/pm."
-msgstr "Toon de tijd in 24 uurs formaat in plaats van het gebruik van am/pm"
+msgstr "Of de tijd in 24-uurs formaat wordt getoond in plaats van am/pm."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:60
-#, fuzzy
msgid "Whether to show week numbers in the date navigator."
-msgstr "Week_nummers tonen in datum navigatie"
+msgstr "Of weeknummers worden getoond in de datumkiezer."
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:61
-#, fuzzy
msgid "Work days"
-msgstr "Werkdagen:"
+msgstr "Werkdagen"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:62
-#, fuzzy
msgid "Workday end hour"
-msgstr "Het uur waarop een werkdag eindigt"
+msgstr "Werkdag laatste uur"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:63
-#, fuzzy
msgid "Workday end minute"
-msgstr "Online _werken"
+msgstr "Werkdag laatste minuut"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:64
-#, fuzzy
msgid "Workday start hour"
-msgstr "Het uur waarop een werkdag begint"
+msgstr "Werdag eerste uur"
#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:65
-#, fuzzy
msgid "Workday start minute"
-msgstr "Het uur waarop een werkdag begint"
+msgstr "Werkdag eerste minuut"
+# onderwerp/samevatting
#: calendar/gui/cal-search-bar.c:49
msgid "Summary contains"
msgstr "Samenvatting bevat"
@@ -4827,7 +4730,7 @@ msgid ""
"events."
msgstr ""
"Deze bewerking zal alle taken die ouder zijn de gespecificeerde tijd "
-"permanent verwijderen. Als u doorgaat zult u ze niet meer kunnen herstellen."
+"definitief verwijderen. Als u doorgaat zult u ze niet meer kunnen herstellen."
#: calendar/gui/calendar-commands.c:361
msgid "Purge events older than"
@@ -4857,9 +4760,8 @@ msgstr "Verjaardagen & gedenkdagen"
#. Create the weather group
#: calendar/gui/calendar-component.c:247
#: plugins/calendar-weather/calendar-weather.c:100
-#, fuzzy
msgid "Weather"
-msgstr "Later"
+msgstr "Weer"
#: calendar/gui/calendar-component.c:524
#: calendar/gui/dialogs/calendar-setup.c:442
@@ -4870,23 +4772,21 @@ msgstr "Nieuwe agenda"
msgid "Failed upgrading calendars."
msgstr "Bijwerken van agenda's mislukt."
+# maken ipv aanmaken hier beter
#: calendar/gui/calendar-component.c:1139
#, c-format
msgid "Unable to open the calendar '%s' for creating events and meetings"
msgstr ""
-"Kan de agenda '%s' niet openen voor het creëren van gebeurtenissen en "
-"afspraken"
+"Kan de agenda '%s' niet openen voor het maken van notities en bijeenkomsten"
#: calendar/gui/calendar-component.c:1155
msgid "There is no calendar available for creating events and meetings"
msgstr ""
-"Er is geen agenda beschikbaar voor het creëren van gebeurtenissen en "
-"bijeenkomsten"
+"Er is geen agenda beschikbaar voor het maken van notities en bijeenkomsten"
#: calendar/gui/calendar-component.c:1265
-#, fuzzy
msgid "Calendar Source Selector"
-msgstr "Agendalocatie"
+msgstr "Agendabron-selectie"
#: calendar/gui/calendar-component.c:1456
msgid "New appointment"
@@ -4902,11 +4802,12 @@ msgstr "Maak een nieuwe afspraak"
#: calendar/gui/calendar-component.c:1464
msgid "New meeting"
-msgstr "Nieuwe vergadering"
+msgstr "Nieuwe bijeenkomst"
+# bijeenkomst
#: calendar/gui/calendar-component.c:1465
msgid "M_eeting"
-msgstr "Ver_gadering"
+msgstr "_Bijeenkomst"
#: calendar/gui/calendar-component.c:1466
msgid "Create a new meeting request"
@@ -4930,7 +4831,7 @@ msgstr "Nieuwe agenda"
#: calendar/gui/calendar-component.c:1481
msgid "Cale_ndar"
-msgstr "Kale_nder"
+msgstr "A_genda"
#: calendar/gui/calendar-component.c:1482
msgid "Create a new calendar"
@@ -4964,14 +4865,14 @@ msgstr "Methode niet ondersteund tijdens het openen van de agenda"
msgid "Permission denied to open the calendar"
msgstr "Toegang geweigerd bij openen van de agenda"
-#: calendar/gui/comp-editor-factory.c:437 shell/e-shell.c:1259
+#: calendar/gui/comp-editor-factory.c:437 shell/e-shell.c:1264
msgid "Unknown error"
msgstr "Onbekende fout"
+# wekker
#: calendar/gui/dialogs/alarm-dialog.glade.h:1
-#, fuzzy
msgid "<b>Alarm</b>"
-msgstr "<b>Alarm</b>\t"
+msgstr "<b>Alarm</b>"
#: calendar/gui/dialogs/alarm-dialog.glade.h:2
msgid "<b>Options</b>"
@@ -5108,7 +5009,7 @@ msgid "%.0fG"
msgstr "%.0fG"
#: calendar/gui/dialogs/cal-attachment-bar.c:298
-#: calendar/gui/dialogs/cal-attachment-bar.c:913
+#: calendar/gui/dialogs/cal-attachment-bar.c:922
#: composer/e-msg-composer-attachment-bar.c:295 mail/em-utils.c:436
msgid "attachment"
msgstr "bijlage"
@@ -5126,18 +5027,16 @@ msgstr "_Verwijderen"
msgid "_Properties"
msgstr "_Eigenschappen"
-# bijlage toevoegen
+# bijlage toevoegen/bestand bijvoegen
#: calendar/gui/dialogs/cal-attachment-bar.c:442
#: composer/e-msg-composer-attachment-bar.c:440
-#, fuzzy
msgid "_Add attachment..."
-msgstr "Bestand bijvoegen..."
+msgstr "_Bijlage toevoegen..."
#: calendar/gui/dialogs/cal-attachment-bar.c:699
#: composer/e-msg-composer-attachment-bar.c:703
-#, fuzzy
msgid "Attachment Bar"
-msgstr "Bijlage"
+msgstr "Bijlagebalk"
#: calendar/gui/dialogs/cal-attachment-select-file.c:96
#: calendar/gui/dialogs/cal-attachment-select-file.c:115
@@ -5190,7 +5089,7 @@ msgid "MIME type:"
msgstr "MIME type:"
#. g_object_set((GObject *)renderer, "activatable", TRUE, NULL);
-#: calendar/gui/dialogs/cal-prefs-dialog.c:576 mail/em-account-prefs.c:460
+#: calendar/gui/dialogs/cal-prefs-dialog.c:576 mail/em-account-prefs.c:476
#: mail/em-composer-prefs.c:888 plugins/plugin-manager/plugin-manager.c:213
msgid "Enabled"
msgstr "Ingeschakeld"
@@ -5209,15 +5108,15 @@ msgstr "Niet verwijderen"
#: calendar/gui/dialogs/cal-prefs-dialog.c:787
#: calendar/gui/dialogs/cal-prefs-dialog.c:820
-#: calendar/gui/dialogs/cal-prefs-dialog.c:853 mail/em-account-prefs.c:307
-#: mail/em-account-prefs.c:335 mail/em-account-prefs.c:366
+#: calendar/gui/dialogs/cal-prefs-dialog.c:853 mail/em-account-prefs.c:323
+#: mail/em-account-prefs.c:351 mail/em-account-prefs.c:382
msgid "Disable"
msgstr "Uitzetten"
#: calendar/gui/dialogs/cal-prefs-dialog.c:787
#: calendar/gui/dialogs/cal-prefs-dialog.c:820
-#: calendar/gui/dialogs/cal-prefs-dialog.c:855 mail/em-account-prefs.c:307
-#: mail/em-account-prefs.c:335 mail/em-account-prefs.c:368
+#: calendar/gui/dialogs/cal-prefs-dialog.c:855 mail/em-account-prefs.c:323
+#: mail/em-account-prefs.c:351 mail/em-account-prefs.c:384
msgid "Enable"
msgstr "Aanzetten"
@@ -5246,22 +5145,20 @@ msgid "<b>Alerts</b>"
msgstr "<b>Waarschuwingen</b>"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:8
-#, fuzzy
msgid "<b>Default Free/Busy Server</b>"
-msgstr "<b>Vrij/bezet agendas</b>"
+msgstr "<b>Standaard vrij/bezet server</b>"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:9
msgid "<b>General</b>"
msgstr "<b>Algemeen</b>"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:10
-#, fuzzy
msgid "<b>Publishing</b>"
-msgstr "<b>_Publicatielocatie</b>"
+msgstr "<b>Publicatie</b>"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:11
msgid "<b>Task List</b>"
-msgstr "<b>Taken lijst</b>"
+msgstr "<b>Takenlijst</b>"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:12
msgid "<b>Time</b>"
@@ -5275,7 +5172,7 @@ msgstr "<b>Werkweek</b>"
#, no-c-format
msgid ""
"<i>%u and %d will be replaced by user and domain from the email address.</i>"
-msgstr ""
+msgstr "<i>%u en %d zullen worden vervangen door gebruiker en domein van het email-adres.</i>"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:16
msgid "Calendar and Tasks Settings"
@@ -5283,7 +5180,7 @@ msgstr "Agenda- en Taakinstellingen"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:17
msgid "Color for overdue tasks"
-msgstr "Kleur voor taken die te laat zijn"
+msgstr "Kleur voor taken die over-tijd zijn"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:18
msgid "Color for tasks due today"
@@ -5291,7 +5188,7 @@ msgstr "Kleur voor taken voor vandaag"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:19
msgid "Day _ends:"
-msgstr "Dag _eindigd:"
+msgstr "Dag _eindigt:"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:20
msgid "Days"
@@ -5307,9 +5204,8 @@ msgid "E_nable"
msgstr "Aanzetten"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:23
-#, fuzzy
msgid "Free/Busy"
-msgstr "V_rij/Bezet:"
+msgstr "Vrij/Bezet"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:24
#: calendar/gui/dialogs/recurrence-page.c:1044
@@ -5333,7 +5229,7 @@ msgstr "Maandag"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:29
msgid "S_un"
-msgstr "Z_on"
+msgstr "_Zon"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:30
#: calendar/gui/dialogs/recurrence-page.c:1045
@@ -5361,12 +5257,11 @@ msgstr "T_aken die vandaag verlopen:"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:35
msgid "T_hu"
-msgstr "D_on"
+msgstr "_Don"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:36
-#, fuzzy
msgid "Template:"
-msgstr "Afdeling:"
+msgstr "Sjabloon:"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:37
#: calendar/gui/dialogs/recurrence-page.c:1043
@@ -5468,16 +5363,15 @@ msgstr "voor het begin van elke afspraak"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:61
msgid "option menu to choose reminder units"
-msgstr ""
+msgstr "optiemenu voor het kiezen van herinneringseenheid"
#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:62
msgid "option menu to choose time units"
-msgstr ""
+msgstr "optiemenu voor het kiezen van tijdeenheid"
#: calendar/gui/dialogs/calendar-setup.c:284
-#, fuzzy
msgid "Copy calendar contents locally for offline operation"
-msgstr "Kopieër de inhoud van de map lokaal voor offline gebruik"
+msgstr "De inhoud van de agenda lokaal kopiëren voor offline gebruik"
#: calendar/gui/dialogs/calendar-setup.c:336
#: calendar/gui/dialogs/calendar-setup.glade.h:4
@@ -5485,19 +5379,16 @@ msgid "C_olor:"
msgstr "_Kleur:"
#: calendar/gui/dialogs/calendar-setup.c:373
-#, fuzzy
msgid "Tasks List"
msgstr "Takenlijst"
#: calendar/gui/dialogs/calendar-setup.c:440
-#, fuzzy
msgid "Calendar Properties"
-msgstr "Map-eigenschappen"
+msgstr "Agenda-eigenschappen"
#: calendar/gui/dialogs/calendar-setup.c:506
-#, fuzzy
msgid "Task List Properties"
-msgstr "Takenlijst-groep"
+msgstr "Takenlijst-eigenschappen"
#: calendar/gui/dialogs/calendar-setup.glade.h:2
msgid "Add Calendar"
@@ -5626,8 +5517,8 @@ msgstr[1] "%d bijgevoegd berichten"
#: calendar/gui/dialogs/comp-editor.c:412 calendar/gui/e-calendar-table.c:1164
#: calendar/gui/e-calendar-view.c:1402 composer/e-msg-composer.c:2906
-#: mail/em-folder-tree.c:1046 mail/em-folder-view.c:973
-#: mail/message-list.c:1712 ui/evolution-addressbook.xml.h:31
+#: mail/em-folder-tree.c:1046 mail/em-folder-view.c:966
+#: mail/message-list.c:1707 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:105 ui/evolution-tasks.xml.h:20
msgid "_Copy"
@@ -5635,89 +5526,90 @@ msgstr "_Kopiëren"
#: calendar/gui/dialogs/comp-editor.c:413 composer/e-msg-composer.c:2907
#: mail/em-folder-tree.c:1047 mail/em-folder-tree.c:2311
-#: mail/em-folder-view.c:869 mail/message-list.c:1713
+#: mail/em-folder-view.c:862 mail/message-list.c:1708
msgid "_Move"
msgstr "_Verplaatsen"
#: calendar/gui/dialogs/comp-editor.c:415 composer/e-msg-composer.c:2909
-#: mail/em-folder-tree.c:1049 mail/message-list.c:1715
+#: mail/em-folder-tree.c:1049 mail/message-list.c:1710
msgid "Cancel _Drag"
msgstr "_Slepen annuleren"
-#: calendar/gui/dialogs/comp-editor.c:659
+#: calendar/gui/dialogs/comp-editor.c:682
msgid "Could not update object"
msgstr "Kon object niet vernieuwen"
-#: calendar/gui/dialogs/comp-editor.c:820 composer/e-msg-composer.c:2310
+#: calendar/gui/dialogs/comp-editor.c:843 composer/e-msg-composer.c:2310
#, c-format
msgid "<b>%d</b> File Attached"
msgid_plural "<b>%d</b> Files Attached"
msgstr[0] "<b>%d</b> Bestand bijgevoegd"
msgstr[1] "<b>%d</b> Bestanden bijgevoegd"
-#: calendar/gui/dialogs/comp-editor.c:873 composer/e-msg-composer.c:2339
+#: calendar/gui/dialogs/comp-editor.c:900 composer/e-msg-composer.c:2339
msgid "Hide _Attachment Bar (drop attachments here)"
-msgstr "Verberg bijl_agen-balk (drop bijlagen hier)"
+msgstr "Bijl_agenbalk verbergen (sleep hier uw bijlagen naar toe)"
-#: calendar/gui/dialogs/comp-editor.c:876
-#: calendar/gui/dialogs/comp-editor.c:928 composer/e-msg-composer.c:2342
+#: calendar/gui/dialogs/comp-editor.c:903
+#: calendar/gui/dialogs/comp-editor.c:955 composer/e-msg-composer.c:2342
#: composer/e-msg-composer.c:3471
msgid "Show _Attachment Bar (drop attachments here)"
-msgstr "Toon bijl_agen-balk (drop bijlagen hier)"
+msgstr "Bijl_agenbalk tonen (sleep hier uw bijlagen naar toe)"
-#: calendar/gui/dialogs/comp-editor.c:952 composer/e-msg-composer.c:3493
+#: calendar/gui/dialogs/comp-editor.c:979 composer/e-msg-composer.c:3493
msgid "Attachment Button: Press space key to toggle attachment bar"
-msgstr ""
+msgstr "Bijlageknop: Druk op de spatiebalk om de bijlagebalk om te schakelen"
-#: calendar/gui/dialogs/comp-editor.c:1499
-#: calendar/gui/dialogs/comp-editor.c:1542
+#: calendar/gui/dialogs/comp-editor.c:1526
+#: calendar/gui/dialogs/comp-editor.c:1569
msgid "Edit Appointment"
msgstr "Afspraak Bewerken"
-#: calendar/gui/dialogs/comp-editor.c:1505
-#: calendar/gui/dialogs/comp-editor.c:1548
-#, fuzzy, c-format
+#: calendar/gui/dialogs/comp-editor.c:1532
+#: calendar/gui/dialogs/comp-editor.c:1575
+#, c-format
msgid "Meeting - %s"
-msgstr "Vergadering"
+msgstr "Bijeenkomst - %s"
-#: calendar/gui/dialogs/comp-editor.c:1507
-#: calendar/gui/dialogs/comp-editor.c:1550
+#: calendar/gui/dialogs/comp-editor.c:1534
+#: calendar/gui/dialogs/comp-editor.c:1577
#, c-format
msgid "Appointment - %s"
msgstr "Afspraak - %s"
-#: calendar/gui/dialogs/comp-editor.c:1511
-#: calendar/gui/dialogs/comp-editor.c:1554
-#, fuzzy, c-format
+#: calendar/gui/dialogs/comp-editor.c:1538
+#: calendar/gui/dialogs/comp-editor.c:1581
+#, c-format
msgid "Assigned Task - %s"
-msgstr "Toegewe_zen taak"
+msgstr "Toegewezen taak - %s"
-#: calendar/gui/dialogs/comp-editor.c:1513
-#: calendar/gui/dialogs/comp-editor.c:1556
+#: calendar/gui/dialogs/comp-editor.c:1540
+#: calendar/gui/dialogs/comp-editor.c:1583
#, c-format
msgid "Task - %s"
msgstr "Taak - %s"
-#: calendar/gui/dialogs/comp-editor.c:1516
-#: calendar/gui/dialogs/comp-editor.c:1559
+#: calendar/gui/dialogs/comp-editor.c:1543
+#: calendar/gui/dialogs/comp-editor.c:1586
#, c-format
msgid "Journal entry - %s"
msgstr "Dagboekaantekening - %s"
-#: calendar/gui/dialogs/comp-editor.c:1527
-#: calendar/gui/dialogs/comp-editor.c:1569
+# samenvatting/onderwerp
+#: calendar/gui/dialogs/comp-editor.c:1554
+#: calendar/gui/dialogs/comp-editor.c:1596
msgid "No summary"
msgstr "Geen samenvatting"
-#: calendar/gui/dialogs/comp-editor.c:2001
-#: calendar/gui/dialogs/comp-editor.c:2034
-#: calendar/gui/dialogs/comp-editor.c:2058
+#: calendar/gui/dialogs/comp-editor.c:2030
+#: calendar/gui/dialogs/comp-editor.c:2063
+#: calendar/gui/dialogs/comp-editor.c:2087
msgid "Changes made to this item may be discarded if an update arrives"
msgstr ""
"De gemaakte veranderingen aan dit item worden verworpen indien een "
"bijwerking via e-mail arriveerd"
-#: calendar/gui/dialogs/comp-editor.c:2082
+#: calendar/gui/dialogs/comp-editor.c:2111
msgid "Unable to use current version!"
msgstr "Kan huidige niet gebruiken!"
@@ -5886,17 +5778,17 @@ msgstr "<b>Datum & tijd</b>"
#: calendar/gui/dialogs/event-page.glade.h:7
#: calendar/gui/dialogs/task-page.glade.h:3
-#, fuzzy
msgid "<b>Send Options</b>"
-msgstr "<b>Opties</b>"
+msgstr "<b>Verzendopties</b>"
#: calendar/gui/dialogs/event-page.glade.h:8
msgid "A_ll day event"
msgstr "_Gebeurtenis voor de hele dag"
+# Engels fout: extra spatie: Ad_vanced send options
#: calendar/gui/dialogs/event-page.glade.h:9
msgid "Ad_vanced send options"
-msgstr ""
+msgstr "Ge_avanceerde verzend-opties"
#: calendar/gui/dialogs/event-page.glade.h:10
msgid "C_ustomize..."
@@ -5923,9 +5815,8 @@ msgid "Confidential"
msgstr "Vertrouwelijk"
#: calendar/gui/dialogs/event-page.glade.h:15
-#, fuzzy
msgid "Event Description"
-msgstr "Omschrijving:"
+msgstr "Agendanotitie omschrijving"
#: calendar/gui/dialogs/event-page.glade.h:16
msgid "Locat_ion:"
@@ -5985,8 +5876,8 @@ msgstr "_Begintijd:"
#: calendar/gui/dialogs/meeting-page.glade.h:5
#: calendar/gui/e-cal-model-tasks.c:652 calendar/gui/e-itip-control.c:1104
#: composer/e-msg-composer.c:2117 filter/filter-rule.c:878
-#: mail/em-account-editor.c:683 mail/em-account-editor.c:1289
-#: mail/em-account-prefs.c:421 mail/em-folder-view.c:1000
+#: mail/em-account-editor.c:685 mail/em-account-editor.c:1291
+#: mail/em-account-prefs.c:437 mail/em-folder-view.c:993
#: plugins/calendar-weather/calendar-weather.c:371
#: plugins/calendar-weather/calendar-weather.c:425
#: plugins/itip-formatter/itip-formatter.c:1376
@@ -6013,11 +5904,12 @@ msgid "_Delegate To..."
msgstr "_Overdragen aan..."
#: calendar/gui/dialogs/meeting-page.etspec.h:1
-#: calendar/gui/e-meeting-list-view.c:235
+#: calendar/gui/e-meeting-list-view.c:308
#: calendar/gui/e-meeting-time-sel.etspec.h:1
msgid "Attendee"
msgstr "Aanwezige"
+# bezoeker/aanwezige/persoon
#: calendar/gui/dialogs/meeting-page.etspec.h:2
#: calendar/gui/e-meeting-time-sel.etspec.h:2
msgid "Click here to add an attendee"
@@ -6049,7 +5941,7 @@ msgid "Member"
msgstr "Lid"
#: calendar/gui/dialogs/meeting-page.etspec.h:8
-#: calendar/gui/e-meeting-list-view.c:258
+#: calendar/gui/e-meeting-list-view.c:333
#: calendar/gui/e-meeting-time-sel.etspec.h:8
msgid "RSVP"
msgstr "RSVP"
@@ -6057,7 +5949,7 @@ msgstr "RSVP"
#: calendar/gui/dialogs/meeting-page.etspec.h:10
#: calendar/gui/dialogs/task-editor.c:146
#: calendar/gui/e-calendar-table.etspec.h:10
-#: calendar/gui/e-meeting-list-view.c:265
+#: calendar/gui/e-meeting-list-view.c:340
#: calendar/gui/e-meeting-time-sel.etspec.h:10 mail/em-filter-i18n.h:63
#: mail/message-list.etspec.h:12
msgid "Status"
@@ -6081,9 +5973,8 @@ msgid "Or_ganizer:"
msgstr "_Organisator:"
#: calendar/gui/dialogs/meeting-page.glade.h:7
-#, fuzzy
msgid "Organizer"
-msgstr "Organisator:"
+msgstr "Organisator"
#: calendar/gui/dialogs/meeting-page.glade.h:8
#: calendar/gui/e-itip-control.glade.h:9
@@ -6262,13 +6153,15 @@ msgstr "ja(a)r(en)"
msgid "Completed date is wrong"
msgstr "Voltooiingsdatum is ongeldig"
+# webpagina/webstek
+# we moeten maar kijken in hoeverre webstek voeten aan de grond
+# krijgt in het Nederlands.
#: calendar/gui/dialogs/task-details-page.c:522
-#, fuzzy
msgid "Web Page"
-msgstr "Webstek:"
+msgstr "Webstek"
+# overige/diversen
#: calendar/gui/dialogs/task-details-page.glade.h:1
-#, fuzzy
msgid "<span weight=\"bold\">Miscellaneous</span>"
msgstr "<span weight=\"bold\">Diversen\t</span>"
@@ -6289,7 +6182,7 @@ msgstr "Voltooid"
#: calendar/gui/dialogs/task-details-page.glade.h:5
#: calendar/gui/e-cal-component-preview.c:248
-#: calendar/gui/e-calendar-table.c:382 mail/message-list.c:1011
+#: calendar/gui/e-calendar-table.c:382 mail/message-list.c:1006
msgid "High"
msgstr "Hoog"
@@ -6303,13 +6196,13 @@ msgstr "In behandeling"
#: calendar/gui/dialogs/task-details-page.glade.h:7
#: calendar/gui/e-cal-component-preview.c:252
-#: calendar/gui/e-calendar-table.c:384 mail/message-list.c:1009
+#: calendar/gui/e-calendar-table.c:384 mail/message-list.c:1004
msgid "Low"
msgstr "Laag"
#: calendar/gui/dialogs/task-details-page.glade.h:8
#: calendar/gui/e-cal-component-preview.c:250 calendar/gui/e-cal-model.c:899
-#: calendar/gui/e-calendar-table.c:383 mail/message-list.c:1010
+#: calendar/gui/e-calendar-table.c:383 mail/message-list.c:1005
msgid "Normal"
msgstr "Normaal"
@@ -6367,7 +6260,7 @@ msgstr "Kan taken in '%s' niet openen."
#: calendar/gui/dialogs/task-page.glade.h:4
msgid "Ad_vanced send options"
-msgstr ""
+msgstr "Ge_avanceerde verzend-opties"
#: calendar/gui/dialogs/task-page.glade.h:9
msgid "D_escription:"
@@ -6378,9 +6271,8 @@ msgid "Sta_rt date:"
msgstr "Be_gindatum:"
#: calendar/gui/dialogs/task-page.glade.h:14
-#, fuzzy
msgid "Task Description"
-msgstr "Omschrijving:"
+msgstr "Taakomschrijving"
#: calendar/gui/dialogs/task-page.glade.h:15
msgid "_Due date:"
@@ -6403,9 +6295,8 @@ msgid "<b>Publishing _Location</b>"
msgstr "<b>_Publicatielocatie</b>"
#: calendar/gui/dialogs/url-editor-dialog.glade.h:6
-#, fuzzy
msgid "Free/Busy Publishing Settings"
-msgstr "Vrij/Bezet publicatie"
+msgstr "Vrij/Bezet publicatie-instellingen"
#: calendar/gui/dialogs/url-editor-dialog.glade.h:7
msgid "_Daily"
@@ -6510,7 +6401,7 @@ msgstr "%s bij %s"
msgid "%s for an unknown trigger type"
msgstr "%s voor een onbekend triggertype"
-#: calendar/gui/e-cal-component-preview.c:70 mail/em-folder-view.c:2588
+#: calendar/gui/e-cal-component-preview.c:70 mail/em-folder-view.c:2573
#, c-format
msgid "Click to open %s"
msgstr "Klik hier om %s te openen"
@@ -6519,6 +6410,7 @@ msgstr "Klik hier om %s te openen"
msgid "Untitled"
msgstr "Naamloos"
+# samenvatting/onderwerp
#: calendar/gui/e-cal-component-preview.c:186
#: calendar/gui/e-itip-control.c:1108 calendar/gui/e-itip-control.glade.h:11
msgid "Summary:"
@@ -6538,7 +6430,7 @@ msgstr "Verloopdatum:"
#. Status
#: calendar/gui/e-cal-component-preview.c:222
#: calendar/gui/e-itip-control.c:1132
-#: plugins/exchange-account-setup/exchange-account-setup.c:129
+#: plugins/exchange-account-setup/exchange-account-setup.c:209
#: plugins/itip-formatter/itip-view.c:884
msgid "Status:"
msgstr "Status:"
@@ -6616,7 +6508,7 @@ msgstr "Nee"
#: calendar/gui/e-meeting-list-view.c:139
#: calendar/gui/e-meeting-list-view.c:153 calendar/gui/e-meeting-store.c:124
#: calendar/gui/e-meeting-store.c:159 calendar/gui/e-meeting-store.c:224
-#: mail/em-utils.c:1157 plugins/itip-formatter/itip-formatter.c:251
+#: mail/em-utils.c:1173 plugins/itip-formatter/itip-formatter.c:251
#: plugins/itip-formatter/itip-formatter.c:1398
#: plugins/plugin-manager/plugin-manager.c:72 shell/e-component-registry.c:201
#: shell/e-component-registry.c:205 widgets/misc/e-charset-picker.c:62
@@ -6676,9 +6568,8 @@ msgid "100%"
msgstr "100%"
#: calendar/gui/e-calendar-table.c:516
-#, fuzzy
msgid "Task Table"
-msgstr "Taak Update"
+msgstr "Taaktabel"
#: calendar/gui/e-calendar-table.c:694 calendar/gui/e-calendar-view.c:652
msgid "Deleting selected objects"
@@ -6703,7 +6594,7 @@ msgid "Open _Web Page"
msgstr "Open _website"
#: calendar/gui/e-calendar-table.c:1158 calendar/gui/e-calendar-view.c:1396
-#: mail/em-folder-view.c:983 mail/em-popup.c:493
+#: mail/em-folder-view.c:976 mail/em-popup.c:494
#: ui/evolution-mail-message.xml.h:124
msgid "_Save As..."
msgstr "_Opslaan als..."
@@ -6746,7 +6637,7 @@ msgstr "Geselecteerde taken als voltooid markeren"
#. FIXME: need to disable for undeletable folders
#: calendar/gui/e-calendar-table.c:1176 calendar/gui/e-calendar-view.c:1414
-#: mail/em-folder-tree.c:2814 mail/em-folder-view.c:987
+#: mail/em-folder-tree.c:2814 mail/em-folder-view.c:980
#: ui/evolution-addressbook.xml.h:33 ui/evolution-calendar.xml.h:40
#: ui/evolution-mail-message.xml.h:108 ui/evolution-tasks.xml.h:21
msgid "_Delete"
@@ -7020,21 +6911,22 @@ msgstr ""
#: calendar/gui/e-itip-control.c:1137 calendar/gui/e-meeting-list-view.c:175
#: calendar/gui/e-meeting-store.c:188 calendar/gui/e-meeting-store.c:211
-#: calendar/gui/itip-utils.c:422 plugins/itip-formatter/itip-formatter.c:1389
+#: calendar/gui/itip-utils.c:421 plugins/itip-formatter/itip-formatter.c:1389
msgid "Accepted"
msgstr "Geaccepteerd"
-#: calendar/gui/e-itip-control.c:1141 calendar/gui/itip-utils.c:425
+#: calendar/gui/e-itip-control.c:1141 calendar/gui/itip-utils.c:424
#: plugins/itip-formatter/itip-formatter.c:1392
msgid "Tentatively Accepted"
msgstr "Voorlopig Geaccepteerd"
+# afgezegd/geweigerd/afgewezen
#: calendar/gui/e-itip-control.c:1145 calendar/gui/e-meeting-list-view.c:176
#: calendar/gui/e-meeting-store.c:190 calendar/gui/e-meeting-store.c:213
-#: calendar/gui/itip-utils.c:428 calendar/gui/itip-utils.c:454
+#: calendar/gui/itip-utils.c:427 calendar/gui/itip-utils.c:453
#: plugins/itip-formatter/itip-formatter.c:1395
msgid "Declined"
-msgstr "Geweigerd"
+msgstr "Afgewezen"
#: calendar/gui/e-itip-control.c:1229
msgid ""
@@ -7240,11 +7132,12 @@ msgstr "Update Voltooid\n"
msgid "Object is invalid and cannot be updated\n"
msgstr "Object is ongeldig en kan niet worden bijgewerkt\n"
+# toevoegen als komt/aanwezige/aanwezig
#: calendar/gui/e-itip-control.c:1947
msgid "This response is not from a current attendee. Add as an attendee?"
msgstr ""
-"Dit antwoord is niet van een geregistreerd staand persoon. Toevoegen in "
-"registratie?"
+"Dit antwoord is niet van een geregistreerd staand persoon. Toevoegen als "
+"aanwezige?"
#: calendar/gui/e-itip-control.c:1959
msgid "Attendee status could not be updated because of an invalid status!\n"
@@ -7289,9 +7182,10 @@ msgstr "Accepteren"
msgid "Tentatively accept"
msgstr "Voorlopig accepteren"
+# afzeggen/weigeren/afwijzen
#: calendar/gui/e-itip-control.c:2262
msgid "Decline"
-msgstr "Weigeren"
+msgstr "Afwijzen"
#: calendar/gui/e-itip-control.c:2291
msgid "Send Free/Busy Information"
@@ -7305,7 +7199,7 @@ msgstr "Ververs antwoordstatus"
msgid "Send Latest Information"
msgstr "Verstuur Laatste Informatie"
-#: calendar/gui/e-itip-control.c:2375 calendar/gui/itip-utils.c:442
+#: calendar/gui/e-itip-control.c:2375 calendar/gui/itip-utils.c:441
#: mail/mail-send-recv.c:414 mail/mail-send-recv.c:466
#: ui/evolution-mail-global.xml.h:1
msgid "Cancel"
@@ -7542,9 +7436,8 @@ msgid "Expunging"
msgstr "Bezig met schrappen"
#: calendar/gui/e-timezone-entry.c:133
-#, fuzzy
msgid "Timezone Button"
-msgstr "Tijdzone "
+msgstr "Tijdzoneknop"
#. strftime format %d = day of month, %B = full
#. month name. You can change the order but don't
@@ -7563,9 +7456,8 @@ msgid "Custom View"
msgstr "_Aangepaste weergave"
#: calendar/gui/gnome-cal.c:2058
-#, fuzzy
msgid "Save Custom View"
-msgstr "Aangepaste weergave opslaan..."
+msgstr "Aangepaste weergave opslaan"
#: calendar/gui/gnome-cal.c:2063 widgets/menus/gal-view-menus.c:373
msgid "Define Views..."
@@ -7646,57 +7538,57 @@ msgstr "September"
msgid "_Select Today"
msgstr "_Selecteer vandaag"
-#: calendar/gui/itip-utils.c:271 calendar/gui/itip-utils.c:319
-#: calendar/gui/itip-utils.c:351
+#: calendar/gui/itip-utils.c:270 calendar/gui/itip-utils.c:318
+#: calendar/gui/itip-utils.c:350
msgid "An organizer must be set."
msgstr "Er moet een organisator ingesteld worden."
-#: calendar/gui/itip-utils.c:306
+#: calendar/gui/itip-utils.c:305
msgid "At least one attendee is necessary"
msgstr "Er is minstens één bezoeker nodig"
-#: calendar/gui/itip-utils.c:394 calendar/gui/itip-utils.c:503
+#: calendar/gui/itip-utils.c:393 calendar/gui/itip-utils.c:502
msgid "Event information"
msgstr "Gebeurtenis informatie"
-#: calendar/gui/itip-utils.c:396 calendar/gui/itip-utils.c:505
+#: calendar/gui/itip-utils.c:395 calendar/gui/itip-utils.c:504
msgid "Task information"
msgstr "Taak informatie"
-#: calendar/gui/itip-utils.c:398 calendar/gui/itip-utils.c:507
+#: calendar/gui/itip-utils.c:397 calendar/gui/itip-utils.c:506
msgid "Journal information"
msgstr "Journaal informatie"
-#: calendar/gui/itip-utils.c:400 calendar/gui/itip-utils.c:525
+#: calendar/gui/itip-utils.c:399 calendar/gui/itip-utils.c:524
msgid "Free/Busy information"
msgstr "Vrij/Bezet informatie"
-#: calendar/gui/itip-utils.c:402
+#: calendar/gui/itip-utils.c:401
msgid "Calendar information"
msgstr "Agenda-informatie"
-#: calendar/gui/itip-utils.c:438
+#: calendar/gui/itip-utils.c:437
msgid "Updated"
msgstr "Vernieuwd"
-#: calendar/gui/itip-utils.c:446
+#: calendar/gui/itip-utils.c:445
msgid "Refresh"
msgstr "Verversen"
-#: calendar/gui/itip-utils.c:450
+#: calendar/gui/itip-utils.c:449
msgid "Counter-proposal"
msgstr "Tegenvoorstel"
-#: calendar/gui/itip-utils.c:521
+#: calendar/gui/itip-utils.c:520
#, c-format
msgid "Free/Busy information (%s to %s)"
msgstr "Vrij/Bezet informatie (%s tot %s)"
-#: calendar/gui/itip-utils.c:531
+#: calendar/gui/itip-utils.c:530
msgid "iCalendar information"
msgstr "iCalendar informatie"
-#: calendar/gui/itip-utils.c:673
+#: calendar/gui/itip-utils.c:672
msgid "You must be an attendee of the event."
msgstr "U moet een bezoeker zijn van het evenement."
@@ -7976,7 +7868,7 @@ msgid_plural "%d tasks"
msgstr[0] "%d taak"
msgstr[1] "%d taken"
-#: calendar/gui/tasks-component.c:506 mail/mail-component.c:523
+#: calendar/gui/tasks-component.c:506 mail/mail-component.c:544
#, c-format
msgid ", %d selected"
msgid_plural ", %d selected"
@@ -7998,11 +7890,9 @@ msgstr ""
msgid "There is no calendar available for creating tasks"
msgstr "Er is geen agenda beschikbaar voor het aanmaken van taken"
-# gegeven/geselecteerd
#: calendar/gui/tasks-component.c:956
-#, fuzzy
msgid "Task Source Selector"
-msgstr "Geen bronnen geselecteerd."
+msgstr "Takenbron-selectie"
#: calendar/gui/tasks-component.c:1139
msgid "New task"
@@ -8047,7 +7937,7 @@ msgid ""
"\n"
"Really erase these tasks?"
msgstr ""
-"Deze bewerking zal alle taken die als 'voltooid' gemarkeerd zijn, permanent "
+"Deze bewerking zal alle taken die als 'voltooid' gemarkeerd zijn, definitief "
"verwijderen. Als u doorgaat zult u ze niet meer kunnen herstellen.\n"
"\n"
"De taken echt verwijderen?"
@@ -9654,48 +9544,42 @@ msgstr "Klik hier voor het adresboek"
#. * expects the reply_to fields to be initialized.
#.
#: composer/e-msg-composer-hdrs.c:584
-#, fuzzy
msgid "_Reply-To:"
-msgstr "Antwoordadres:"
+msgstr "A_ntwoordadres:"
#.
#. * From
#.
#: composer/e-msg-composer-hdrs.c:591
-#, fuzzy
msgid "Fr_om:"
-msgstr "Van:"
+msgstr "_Van:"
#.
#. * Subject
#.
#: composer/e-msg-composer-hdrs.c:598
-#, fuzzy
msgid "S_ubject:"
-msgstr "Onderwerp:"
+msgstr "_Onderwerp:"
#: composer/e-msg-composer-hdrs.c:608
-#, fuzzy
msgid "_To:"
-msgstr "Aan:"
+msgstr "_Aan:"
#: composer/e-msg-composer-hdrs.c:609
msgid "Enter the recipients of the message"
msgstr "Geef de geadresseerden"
#: composer/e-msg-composer-hdrs.c:612
-#, fuzzy
msgid "_Cc:"
-msgstr "Cc:"
+msgstr "_Cc:"
#: composer/e-msg-composer-hdrs.c:613
msgid "Enter the addresses that will receive a carbon copy of the message"
msgstr "Geef de adressen die een kopie van het bericht moeten krijgen"
#: composer/e-msg-composer-hdrs.c:616
-#, fuzzy
msgid "_Bcc:"
-msgstr "Bcc:"
+msgstr "_Bcc:"
#: composer/e-msg-composer-hdrs.c:617
msgid ""
@@ -9705,13 +9589,13 @@ msgstr ""
"Geef de adressen die een kopie van het bericht moeten krijgen zonder dat ze "
"op de geadresseerden-lijst van het bericht verschijnen."
+# verzenden/versturen
#.
#. * Post-To
#.
#: composer/e-msg-composer-hdrs.c:624
-#, fuzzy
msgid "_Post To:"
-msgstr "Versturen naar:"
+msgstr "_Versturen naar:"
#: composer/e-msg-composer-hdrs.c:629
msgid "Click here to select folders to post to"
@@ -9754,19 +9638,17 @@ msgstr "Naamloos Bericht"
#. NB: This function is never used anymore
#: composer/e-msg-composer.c:1604
-#, fuzzy
msgid "Open File"
msgstr "Bestand openen"
-#: composer/e-msg-composer.c:2001 mail/em-account-editor.c:586
-#: mail/em-account-editor.c:631 mail/em-account-editor.c:698
+#: composer/e-msg-composer.c:2001 mail/em-account-editor.c:588
+#: mail/em-account-editor.c:633 mail/em-account-editor.c:700
msgid "Autogenerated"
msgstr "Automatisch gegenereerd"
#: composer/e-msg-composer.c:2100
-#, fuzzy
msgid "Si_gnature:"
-msgstr "Handtekening:"
+msgstr "_Handtekening:"
#: composer/e-msg-composer.c:2359 composer/e-msg-composer.c:3360
#: composer/e-msg-composer.c:3361
@@ -9890,10 +9772,10 @@ msgid ""
"you choose to save the message in your Drafts folder. This will allow you to "
"continue the message at a later date."
msgstr ""
-"Het afsluiten van het opstelvenster heeft tot gevolg dat het bericht wordt "
-"weggegooid, tenzij u besluit het bericht op te slaan in de kladmap. Dit "
-"geeft u de mogelijkheid om op een later tijdstip verder te gaan met het "
-"bericht."
+"Het afsluiten van het opstelvenster heeft tot gevolg dat het bericht "
+"definitief wordt weggegooid, tenzij u besluit het bericht op te slaan in de "
+"kladmap. Dit geeft u de mogelijkheid om op een later tijdstip verder te gaan "
+"met het bericht."
#: composer/mail-composer-errors.xml.h:33
msgid "_Discard Changes"
@@ -9955,7 +9837,7 @@ msgstr ""
"Controleer alstublieft dat u de juiste versie van gtkhtml en libgtkhtml "
"geïnstalleerd heeft."
-#: data/evolution.desktop.in.in.h:1 shell/main.c:520
+#: data/evolution.desktop.in.in.h:1 shell/main.c:521
msgid "Evolution"
msgstr "Evolution"
@@ -10093,14 +9975,6 @@ msgstr ""
msgid "Overwrite file?"
msgstr "Bestand overschrijven?"
-#: e-util/e-passwords.c:472
-msgid "_Remember this password"
-msgstr "_Onthoud dit wachtwoord"
-
-#: e-util/e-passwords.c:473
-msgid "_Remember this password for the remainder of this session"
-msgstr "Dit wachtwoord onthouden tot het einde van deze sessie"
-
#. 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
@@ -10199,17 +10073,17 @@ msgstr "%H:%M"
msgid "%I %p"
msgstr "%I %p"
+# huh?
#: e-util/eggtrayicon.c:119
-#, fuzzy
msgid "The orientation of the tray."
-msgstr "Beschrijving van de bijlage."
+msgstr "De oriëntatie van de lade"
#: filter/filter-datespec.c:73
#, c-format
msgid "1 second ago"
msgid_plural "%d seconds ago"
msgstr[0] "1 seconde geleden"
-msgstr[1] "%d seconden geldeden"
+msgstr[1] "%d seconden geleden"
#: filter/filter-datespec.c:74
#, c-format
@@ -10331,19 +10205,19 @@ msgstr "Kies een andere naam."
msgid "Choose a file"
msgstr "Kies een bestand"
-#: filter/filter-label.c:121 mail/em-filter-i18n.h:26 mail/em-migrate.c:1011
-#: mail/mail-config.c:75 mail/mail-config.glade.h:90
+#: filter/filter-label.c:121 mail/em-filter-i18n.h:26 mail/em-migrate.c:1041
+#: mail/mail-config.c:76 mail/mail-config.glade.h:90
msgid "Important"
msgstr "Belangrijk"
#. forest green
-#: filter/filter-label.c:124 mail/em-migrate.c:1014 mail/mail-config.c:78
+#: filter/filter-label.c:124 mail/em-migrate.c:1044 mail/mail-config.c:79
#: mail/mail-config.glade.h:140
msgid "To Do"
msgstr "Te doen"
#. blue
-#: filter/filter-label.c:125 mail/em-migrate.c:1015 mail/mail-config.c:79
+#: filter/filter-label.c:125 mail/em-migrate.c:1045 mail/mail-config.c:80
#: mail/mail-config.glade.h:93
msgid "Later"
msgstr "Later"
@@ -10353,10 +10227,10 @@ msgid "Test"
msgstr "Test"
#: filter/filter-rule.c:790
-#, fuzzy
msgid "_Rule name:"
-msgstr "Regel naam:"
+msgstr "_Regelnaam:"
+# indien/als
#: filter/filter-rule.c:818
msgid "<b>If</b>"
msgstr "<b>Als</b>"
@@ -10395,21 +10269,20 @@ msgid "Incoming"
msgstr "Inkomend"
#: filter/filter-rule.c:975
-#, fuzzy
msgid "Outgoing"
-msgstr "uitgaand"
+msgstr "Uitgaand"
#: filter/filter.glade.h:1
msgid "<b>_Filter Rules</b>"
-msgstr "<b>_Filter regels</b>"
+msgstr "<b>_Filter-regels</b>"
#: filter/filter.glade.h:2
msgid "Compare against"
-msgstr "Vergelijk met"
+msgstr "Vergelijken met"
#: filter/filter.glade.h:4
msgid "Show filters for mail:"
-msgstr ""
+msgstr "Filters voor mail tonen:"
#: filter/filter.glade.h:5
msgid ""
@@ -10437,7 +10310,7 @@ msgstr ""
#: filter/filter.glade.h:12
msgid "a time relative to the current time"
-msgstr "Een tijd relatief aan de huidige tijd"
+msgstr "een tijd relatief aan de huidige tijd"
#: filter/filter.glade.h:13
msgid "ago"
@@ -10519,10 +10392,10 @@ msgstr "Evolution configuratie voor opstellen van nieuw bericht"
msgid "Evolution Mail preferences control"
msgstr "Evolution e-mail voorkeuren"
-#: mail/GNOME_Evolution_Mail.server.in.in.h:11 mail/em-folder-view.c:473
+#: mail/GNOME_Evolution_Mail.server.in.in.h:11 mail/em-folder-view.c:469
#: mail/importers/elm-importer.c:418 mail/importers/netscape-importer.c:1902
-#: mail/importers/pine-importer.c:474 mail/mail-component.c:536
-#: mail/mail-component.c:587
+#: mail/importers/pine-importer.c:474 mail/mail-component.c:557
+#: mail/mail-component.c:608
msgid "Mail"
msgstr "Post"
@@ -10539,12 +10412,12 @@ msgstr "E-mailvoorkeuren"
msgid "_Mail"
msgstr "_Post"
-#: mail/em-account-editor.c:385
+#: mail/em-account-editor.c:387
#, c-format
msgid "%s License Agreement"
msgstr "%s licentieovereenkomst"
-#: mail/em-account-editor.c:392
+#: mail/em-account-editor.c:394
#, c-format
msgid ""
"\n"
@@ -10557,67 +10430,67 @@ msgstr ""
"voor %s zorgvuldig door en vink de optie\n"
"aan om deze te accepteren\n"
-#: mail/em-account-editor.c:462 mail/em-filter-folder-element.c:237
+#: mail/em-account-editor.c:464 mail/em-filter-folder-element.c:237
#: mail/em-vfolder-rule.c:494
msgid "Select Folder"
msgstr "Map selecteren"
-#: mail/em-account-editor.c:1662 mail/mail-config.glade.h:89
+#: mail/em-account-editor.c:1664 mail/mail-config.glade.h:89
msgid "Identity"
msgstr "Identiteit"
-#: mail/em-account-editor.c:1698 mail/mail-config.glade.h:114
+#: mail/em-account-editor.c:1700 mail/mail-config.glade.h:114
msgid "Receiving Email"
msgstr "E-mail ontvangen"
-#: mail/em-account-editor.c:1875
+#: mail/em-account-editor.c:1877
msgid "Automatically check for _new mail every"
msgstr "Automatisch controleren op _nieuwe post, iedere"
-#: mail/em-account-editor.c:2044 mail/mail-config.glade.h:124
+#: mail/em-account-editor.c:2045 mail/mail-config.glade.h:124
msgid "Sending Email"
msgstr "E-mail versturen"
-#: mail/em-account-editor.c:2088 mail/mail-config.glade.h:67
+#: mail/em-account-editor.c:2089 mail/mail-config.glade.h:67
msgid "Defaults"
msgstr "_Standaardinstellingen"
-#: mail/em-account-editor.c:2147 mail/mail-config.glade.h:119
+#: mail/em-account-editor.c:2148 mail/mail-config.glade.h:119
msgid "Security"
msgstr "Beveiliging"
#. Most sections for this is auto-generated fromt the camel config
-#: mail/em-account-editor.c:2184 mail/em-account-editor.c:2259
+#: mail/em-account-editor.c:2185 mail/em-account-editor.c:2260
msgid "Receiving Options"
msgstr "Ontvangst-instellingen"
-#: mail/em-account-editor.c:2185 mail/em-account-editor.c:2260
+#: mail/em-account-editor.c:2186 mail/em-account-editor.c:2261
msgid "Checking for New Mail"
msgstr "Controleren op nieuwe e-mail"
-#: mail/em-account-editor.c:2600 mail/mail-config.glade.h:33
+#: mail/em-account-editor.c:2585 mail/mail-config.glade.h:33
msgid "Account Editor"
msgstr "Accountbeheer"
-#: mail/em-account-editor.c:2600 mail/mail-config.glade.h:79
+#: mail/em-account-editor.c:2585 mail/mail-config.glade.h:79
msgid "Evolution Account Assistant"
msgstr "Evolution Account Assistent"
#. translators: default account indicator
-#: mail/em-account-prefs.c:412
+#: mail/em-account-prefs.c:428
msgid "[Default]"
msgstr "[Standaard]"
-#: mail/em-account-prefs.c:466
+#: mail/em-account-prefs.c:482
msgid "Account name"
msgstr "Accountnaam"
-#: mail/em-account-prefs.c:468
+#: mail/em-account-prefs.c:484
msgid "Protocol"
msgstr "Protocol"
#: mail/em-composer-prefs.c:306 mail/em-composer-prefs.c:429
-#: mail/mail-config.c:934
+#: mail/mail-config.c:935
msgid "Unnamed"
msgstr "Naamloos"
@@ -10633,18 +10506,18 @@ msgstr "Handtekening script toevoegen"
msgid "Signature(s)"
msgstr "Handtekening(en)"
-#: mail/em-composer-utils.c:910
+#: mail/em-composer-utils.c:911
msgid "-------- Forwarded Message --------"
msgstr "-------Doorgestuurd bericht-------"
-#: mail/em-composer-utils.c:1526
+#: mail/em-composer-utils.c:1521
msgid "an unknown sender"
msgstr "een onbekende afzender"
#. 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:1573
+#: mail/em-composer-utils.c:1568
msgid ""
"On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} "
"${TimeZone}, ${Sender} wrote:"
@@ -10790,7 +10663,7 @@ msgstr "Troep"
msgid "Junk Test"
msgstr "Troep test"
-#: mail/em-filter-i18n.h:37 mail/em-folder-view.c:999
+#: mail/em-filter-i18n.h:37 mail/em-folder-view.c:992
#: widgets/misc/e-expander.c:189
msgid "Label"
msgstr "Label"
@@ -10799,10 +10672,10 @@ msgstr "Label"
msgid "Mailing list"
msgstr "Mailinglijst"
+# betere vertaling?
#: mail/em-filter-i18n.h:39
-#, fuzzy
msgid "Match All"
-msgstr "Alles veiligstellen"
+msgstr "Alles meenemen"
#: mail/em-filter-i18n.h:40
msgid "Message Body"
@@ -10917,9 +10790,8 @@ msgid "<b>Then</b>"
msgstr "<b>Dan</b>"
#: mail/em-folder-browser.c:133
-#, fuzzy
msgid "Create _vFolder From Search..."
-msgstr "_VMap van zoekopdracht maken..."
+msgstr "_vMap van zoekopdracht maken..."
#. TODO: can this be done in a loop?
#: mail/em-folder-properties.c:144
@@ -10947,7 +10819,7 @@ msgid "Create New Folder"
msgstr "Nieuwe map aanmaken"
#: mail/em-folder-selector.c:166 mail/em-folder-tree.c:2527
-#: mail/mail-component.c:739 plugins/shared-folder/install-shared.c:144
+#: mail/mail-component.c:770 plugins/shared-folder/install-shared.c:144
#: plugins/shared-folder/share-folder-common.c:345
msgid "Specify where to create the folder:"
msgstr "Specificeer waar de map gemaakt moet worden:"
@@ -10970,21 +10842,21 @@ msgstr "vMappen"
msgid "UNMATCHED"
msgstr "UNMATCHED"
-#: mail/em-folder-tree-model.c:468 mail/mail-component.c:139
+#: mail/em-folder-tree-model.c:468 mail/mail-component.c:142
msgid "Drafts"
msgstr "Klad"
#. translators: standard local mailbox names
-#: mail/em-folder-tree-model.c:471 mail/mail-component.c:138
+#: mail/em-folder-tree-model.c:471 mail/mail-component.c:141
msgid "Inbox"
msgstr "Inbox"
# postvak uit
-#: mail/em-folder-tree-model.c:474 mail/mail-component.c:140
+#: mail/em-folder-tree-model.c:474 mail/mail-component.c:143
msgid "Outbox"
msgstr "Outbox"
-#: mail/em-folder-tree-model.c:476 mail/mail-component.c:141
+#: mail/em-folder-tree-model.c:476 mail/mail-component.c:144
msgid "Sent"
msgstr "Verzonden"
@@ -10994,9 +10866,8 @@ msgid "Loading..."
msgstr "Bezig met laden..."
#: mail/em-folder-tree.c:688
-#, fuzzy
msgid "Mail Folder Tree"
-msgstr "Mail _Map"
+msgstr "Mailmappen-boom"
#: mail/em-folder-tree.c:921
#, c-format
@@ -11009,19 +10880,19 @@ msgstr "verplaatsen map %s"
msgid "Copying folder %s"
msgstr "Bezig met kopiëren van map %s"
-#: mail/em-folder-tree.c:930 mail/message-list.c:1617
+#: mail/em-folder-tree.c:930 mail/message-list.c:1612
#, c-format
msgid "Moving messages into folder %s"
msgstr "Berichten worden verplaatst naar map %s"
-#: mail/em-folder-tree.c:932 mail/message-list.c:1619
+#: mail/em-folder-tree.c:932 mail/message-list.c:1614
#, c-format
msgid "Copying messages into folder %s"
msgstr "Berichten worden gekopieerd naar map %s"
#: mail/em-folder-tree.c:948
msgid "Cannot drop message(s) into toplevel store"
-msgstr "Kan bericht(en) niet droppen in hoogste nivo opslag."
+msgstr "Kan bericht(en) niet neerzetten in hoogste niveau opslag"
#: mail/em-folder-tree.c:1044 ui/evolution-mail-message.xml.h:106
msgid "_Copy to Folder"
@@ -11031,24 +10902,25 @@ msgstr "_Kopiëren naar map"
msgid "_Move to Folder"
msgstr "_Verplaatsen naar map"
+# mappen in %s worden gescannd/doorzocht/gelezen
#: mail/em-folder-tree.c:1750 mail/mail-ops.c:1026
#, c-format
msgid "Scanning folders in \"%s\""
-msgstr "Bezig met scannen van mappen in \"%s\""
+msgstr "Mappen in \"%s\" worden doorzocht"
#: mail/em-folder-tree.c:2023
-#, fuzzy, c-format
+#, c-format
msgid "Copying `%s' to `%s'"
-msgstr "Berichten worden gekopieerd naar %s"
+msgstr "Kopiëren van `%s' naar `%s'"
#: mail/em-folder-tree.c:2297 mail/em-folder-tree.c:2311
-#: mail/em-folder-view.c:869 mail/em-folder-view.c:884
+#: mail/em-folder-view.c:862 mail/em-folder-view.c:877
#: mail/importers/evolution-mbox-importer.c:120
#: mail/importers/evolution-outlook-importer.c:134
msgid "Select folder"
msgstr "Map selecteren"
-#: mail/em-folder-tree.c:2297 mail/em-folder-view.c:884
+#: mail/em-folder-tree.c:2297 mail/em-folder-view.c:877
msgid "C_opy"
msgstr "_Kopiëren"
@@ -11057,7 +10929,7 @@ msgstr "_Kopiëren"
msgid "Creating folder `%s'"
msgstr "Bezig met aanmaken map `%s'"
-#: mail/em-folder-tree.c:2527 mail/mail-component.c:739
+#: mail/em-folder-tree.c:2527 mail/mail-component.c:770
#: plugins/shared-folder/install-shared.c:144
#: plugins/shared-folder/share-folder-common.c:345
msgid "Create folder"
@@ -11073,9 +10945,8 @@ msgid "Rename Folder"
msgstr "Map hernoemen"
#: mail/em-folder-tree.c:2728
-#, fuzzy
msgid "Folder names cannot contain '/'"
-msgstr "Mapnaam mag geen \"/\" bevatten."
+msgstr "Mapnaam mag geen '/' bevatten"
#: mail/em-folder-tree.c:2802 ui/evolution-addressbook.xml.h:44
#: ui/evolution-mail-global.xml.h:17 ui/evolution-mail-messagedisplay.xml.h:8
@@ -11089,11 +10960,11 @@ msgstr "In _nieuw venster openen"
#: mail/em-folder-tree.c:2807
msgid "_Copy..."
-msgstr "Kopiëren..."
+msgstr "_Kopiëren..."
#: mail/em-folder-tree.c:2808
msgid "_Move..."
-msgstr "Verplaatsen..."
+msgstr "_Verplaatsen..."
#. FIXME: need to disable for nochildren folders
#: mail/em-folder-tree.c:2812
@@ -11104,138 +10975,130 @@ msgstr "_Nieuwe map..."
msgid "_Rename..."
msgstr "He_rnoemen..."
-#: mail/em-folder-view.c:977 mail/em-popup.c:498
+#: mail/em-folder-view.c:970 mail/em-popup.c:499
#: ui/evolution-mail-message.xml.h:87
msgid "Reply to _All"
-msgstr "_Iedereen beantwoorden"
+msgstr "_Allen beantwoorden"
-#: mail/em-folder-view.c:978 ui/evolution-mail-message.xml.h:123
+#: mail/em-folder-view.c:971 ui/evolution-mail-message.xml.h:123
msgid "_Reply to Sender"
msgstr "_Afzender beantwoorden"
-#: mail/em-folder-view.c:979 mail/em-popup.c:500
+#: mail/em-folder-view.c:972 mail/em-popup.c:501
#: ui/evolution-mail-message.xml.h:110
msgid "_Forward"
msgstr "_Doorsturen"
-#: mail/em-folder-view.c:982 ui/evolution-mail-message.xml.h:109
+#: mail/em-folder-view.c:975 ui/evolution-mail-message.xml.h:109
msgid "_Edit as New Message..."
-msgstr "B_ewerk als Nieuw Bericht..."
+msgstr "Be_werken als nieuw bericht..."
-#: mail/em-folder-view.c:984
+#: mail/em-folder-view.c:977
msgid "_Print"
msgstr "Af_drukken"
-#: mail/em-folder-view.c:988
+#: mail/em-folder-view.c:981
msgid "U_ndelete"
msgstr "_Herstellen"
-#: mail/em-folder-view.c:989
+#: mail/em-folder-view.c:982
msgid "Mo_ve to Folder..."
msgstr "Naar map _verplaatsen..."
-#: mail/em-folder-view.c:990 ui/evolution-addressbook.xml.h:32
+#: mail/em-folder-view.c:983 ui/evolution-addressbook.xml.h:32
msgid "_Copy to Folder..."
msgstr "Naar map _kopiëren..."
-#: mail/em-folder-view.c:993
+#: mail/em-folder-view.c:986
msgid "Mark as _Important"
-msgstr "Als belan_grijk markeren"
+msgstr "Aanmerken als belan_grijk"
-#: mail/em-folder-view.c:994
+#: mail/em-folder-view.c:987
msgid "_Mark as Unimportant"
-msgstr "Als _onbelangrijk markeren"
+msgstr "Aanmerken als _onbelangrijk"
-#: mail/em-folder-view.c:995 ui/evolution-mail-message.xml.h:54
+#: mail/em-folder-view.c:988 ui/evolution-mail-message.xml.h:54
msgid "Mark as _Junk"
-msgstr "Als troep markeren"
+msgstr "Aanmerken als _troep"
-#: mail/em-folder-view.c:996 ui/evolution-mail-message.xml.h:55
+#: mail/em-folder-view.c:989 ui/evolution-mail-message.xml.h:55
msgid "Mark as _Not Junk"
-msgstr "Als niet-troep markeren"
+msgstr "Aanmerken als _geen-troep"
-#: mail/em-folder-view.c:997
-#, fuzzy
+#: mail/em-folder-view.c:990
msgid "Mark for Follo_w Up..."
-msgstr "Vervolg_acties..."
+msgstr "Aanmerken voor vervolg_actie..."
-#: mail/em-folder-view.c:1005
+#: mail/em-folder-view.c:998
msgid "Fla_g Completed"
-msgstr "Als voltooid markeren"
+msgstr "Aanmerken als voltooid"
-#: mail/em-folder-view.c:1006
+#: mail/em-folder-view.c:999
msgid "Cl_ear Flag"
msgstr "Markering wissen"
-#: mail/em-folder-view.c:1009
+#: mail/em-folder-view.c:1002
msgid "Crea_te Rule From Message"
msgstr "Regel aanmaken van bericht"
-#: mail/em-folder-view.c:1010
-#, fuzzy
+#: mail/em-folder-view.c:1003
msgid "vFolder on _Subject"
-msgstr "VMap op _Onderwerp"
+msgstr "vMap op _onderwerp"
-#: mail/em-folder-view.c:1011
-#, fuzzy
+#: mail/em-folder-view.c:1004
msgid "vFolder on Se_nder"
-msgstr "VMap op afze_nder"
+msgstr "vMap op afze_nder"
-#: mail/em-folder-view.c:1012
-#, fuzzy
+#: mail/em-folder-view.c:1005
msgid "vFolder on _Recipients"
-msgstr "VMap op _Geadresseerden"
+msgstr "vMap op _geadresseerden"
-#: mail/em-folder-view.c:1013
-#, fuzzy
+#: mail/em-folder-view.c:1006
msgid "vFolder on Mailing _List"
-msgstr "VMap op Mailing_Lijst"
+msgstr "vMap op mailing_lijst"
-#: mail/em-folder-view.c:1017
+#: mail/em-folder-view.c:1010
msgid "Filter on Sub_ject"
-msgstr "Filter op Onderwerp"
+msgstr "Filter op onder_werp"
-#: mail/em-folder-view.c:1018
+#: mail/em-folder-view.c:1011
msgid "Filter on Sen_der"
-msgstr "Filter op afzen_der"
+msgstr "Filter op af_zender"
-#: mail/em-folder-view.c:1019
+#: mail/em-folder-view.c:1012
msgid "Filter on Re_cipients"
-msgstr "Filter op Geadresseerden"
+msgstr "Filter op _geadresseerden"
-#: mail/em-folder-view.c:1020
+#: mail/em-folder-view.c:1013
msgid "Filter on _Mailing List"
-msgstr "Filter op _Mailinglijst"
+msgstr "Filter op _mailinglijst"
#. default charset used in mail view
-#: mail/em-folder-view.c:1851 mail/em-folder-view.c:1895
+#: mail/em-folder-view.c:1844 mail/em-folder-view.c:1888
msgid "Default"
msgstr "Standaard"
-#: mail/em-folder-view.c:1994
+#: mail/em-folder-view.c:1987
msgid "Print Message"
msgstr "Bericht afdrukken"
-#: mail/em-folder-view.c:2293
+#: mail/em-folder-view.c:2295
msgid "_Copy Link Location"
msgstr "Verwijzing _kopiëren"
-#: mail/em-folder-view.c:2295
-#, fuzzy
+#: mail/em-folder-view.c:2297
msgid "Create _vFolder"
-msgstr "Map aanmaken"
+msgstr "_vMap aanmaken"
-#: mail/em-folder-view.c:2296
-#, fuzzy
+#: mail/em-folder-view.c:2298
msgid "_From this Address"
-msgstr "E-mail_adres:"
+msgstr "Van dit _adres"
-#: mail/em-folder-view.c:2297
-#, fuzzy
+#: mail/em-folder-view.c:2299
msgid "_To this Address"
-msgstr "_Adres:"
+msgstr "_Naar dit adres"
-#: mail/em-folder-view.c:2583
+#: mail/em-folder-view.c:2568
#, c-format
msgid "Click to mail %s"
msgstr "Klik hier om mail te versturen naar %s"
@@ -11244,7 +11107,7 @@ msgstr "Klik hier om mail te versturen naar %s"
#: mail/em-format-html-display.c:412
#, c-format
msgid "Matches: %d"
-msgstr "Klopt: %d"
+msgstr "Zoekresultaten: %d"
# Niet ondertekend of positief getal?
#: mail/em-format-html-display.c:680 mail/em-format-html.c:579
@@ -11377,9 +11240,8 @@ msgid "_Hide"
msgstr "_Verbergen"
#: mail/em-format-html-display.c:1340
-#, fuzzy
msgid "Attachment Button"
-msgstr "Bijlage"
+msgstr "Bijlageknop"
#: mail/em-format-html-print.c:130
#, c-format
@@ -11529,7 +11391,7 @@ msgstr "Een keer per week"
msgid "Once per month"
msgstr "Een keer per maand"
-#: mail/em-migrate.c:1168
+#: mail/em-migrate.c:1198
msgid ""
"The location and hierarchy of the Evolution mailbox folders has changed "
"since Evolution 1.x.\n"
@@ -11541,48 +11403,48 @@ msgstr ""
"\n"
"Een ogenblik geduld, uw mappen worden door Evolution gemigreerd..."
-#: mail/em-migrate.c:1602
+#: mail/em-migrate.c:1632
#, c-format
msgid "Unable to create new folder `%s': %s"
msgstr "Kon nieuwe map `%s' niet aanmaken: %s"
-#: mail/em-migrate.c:1628
+#: mail/em-migrate.c:1658
#, c-format
msgid "Unable to copy folder `%s' to `%s': %s"
msgstr "Kon map `%s' niet kopiëren naar `%s': %s"
-#: mail/em-migrate.c:1813
+#: mail/em-migrate.c:1843
#, c-format
msgid "Unable to scan for existing mailboxes at `%s': %s"
msgstr "Kon niet scannen voor bestaande mailboxen op `%s': %s"
-#: mail/em-migrate.c:2017
+#: mail/em-migrate.c:2047
#, c-format
msgid "Unable to open old POP keep-on-server data `%s': %s"
msgstr "Kon oude POP3 op-server-houden data `%s' niet openen: %s"
-#: mail/em-migrate.c:2031
+#: mail/em-migrate.c:2061
#, c-format
msgid "Unable to create POP3 keep-on-server data directory `%s': %s"
msgstr "Kon POP3 op-server-houden data-map `%s' niet aanmaken: %s"
-#: mail/em-migrate.c:2060
+#: mail/em-migrate.c:2090
#, c-format
msgid "Unable to copy POP3 keep-on-server data `%s': %s"
msgstr "Kon POP3 op-server-houden data `%s' niet kopiëren: %s"
-#: mail/em-migrate.c:2494 mail/em-migrate.c:2506
+#: mail/em-migrate.c:2561 mail/em-migrate.c:2573
#, c-format
msgid "Failed to create local mail storage `%s': %s"
msgstr "Aanmaken van locate mail-opslag `%s' mislukt: %s"
-#: mail/em-migrate.c:2657
+#: mail/em-migrate.c:2693
#, c-format
msgid "Unable to create local mail folders at `%s': %s"
msgstr "Kon locale mail-mappen niet maken op `%s': %s"
# 'vorige versie' gebruikt ipv 'vorige installatie'
-#: mail/em-migrate.c:2675
+#: mail/em-migrate.c:2711
msgid ""
"Unable to read settings from previous Evolution install, `evolution/config."
"xmldb' does not exist or is corrupt."
@@ -11590,42 +11452,41 @@ msgstr ""
"Niet in staat de instellingen van een vorige versie Evolution te lezen. "
"`evolution/config.xmldb bestaat niet of is beschadigd."
-#: mail/em-popup.c:381
+#: mail/em-popup.c:382
msgid "Save As..."
msgstr "Opslaan als..."
-#: mail/em-popup.c:400
+#: mail/em-popup.c:401
#, c-format
msgid "untitled_image.%s"
msgstr "untitled_image.%s"
-#: mail/em-popup.c:494
+#: mail/em-popup.c:495
msgid "Set as _Background"
msgstr "Als _achtergrond instellen"
-#: mail/em-popup.c:496
+#: mail/em-popup.c:497
msgid "_Reply to sender"
msgstr "_Afzender beantwoorden"
-#: mail/em-popup.c:497 ui/evolution-mail-message.xml.h:88
+#: mail/em-popup.c:498 ui/evolution-mail-message.xml.h:88
msgid "Reply to _List"
msgstr "_Lijst beantwoorden"
-#: mail/em-popup.c:548
+#: mail/em-popup.c:549
msgid "_Open Link in Browser"
msgstr "Verwijzing in browser _openen"
# verzenden naar...
-#: mail/em-popup.c:549
-#, fuzzy
+#: mail/em-popup.c:550
msgid "_Send New Message To..."
-msgstr "_Bericht sturen aan..."
+msgstr "_Nieuw bericht sturen aan..."
-#: mail/em-popup.c:550
+#: mail/em-popup.c:551
msgid "_Add to Addressbook"
msgstr "Aan adresboek _toevoegen"
-#: mail/em-popup.c:681
+#: mail/em-popup.c:666
#, c-format
msgid "Open in %s..."
msgstr "Openen in %s..."
@@ -11674,20 +11535,18 @@ msgid "Add address"
msgstr "Adres toevoegen"
#. Drop filename for messages from a mailbox
-#: mail/em-utils.c:1055
+#: mail/em-utils.c:1071
#, c-format
msgid "Messages from %s"
msgstr "Berichten van %s"
#: mail/em-vfolder-editor.c:104
-#, fuzzy
msgid "v_Folders"
-msgstr "vMappen"
+msgstr "v_Mappen"
#: mail/em-vfolder-rule.c:574
-#, fuzzy
msgid "vFolder source"
-msgstr "VMap-bron"
+msgstr "vMap-bron"
#: mail/evolution-mail.schemas.in.in.h:1
msgid "Automatic link recognition"
@@ -11802,7 +11661,7 @@ msgstr "Hoogte van het berichtenlijst paneel."
msgid ""
"If a user tries to open 10 or more messages at one time, ask the user if "
"they really want to do it."
-msgstr ""
+msgstr "Als een gebruiker 10 of meer berichten tegelijkertijd probeert te openen, vraag de gebruiker dan of hij dat werkelijk wilt doen."
#: mail/evolution-mail.schemas.in.in.h:28
msgid ""
@@ -11966,10 +11825,8 @@ msgid "Prompt when user only fills Bcc"
msgstr "Waarschuw als de gebruiker enkel Bcc invuld"
#: mail/evolution-mail.schemas.in.in.h:60
-#, fuzzy
msgid "Prompt when user tries to open 10 or more messages at once"
-msgstr ""
-"Waarschuwen wanneer berichten worden verstuurd zonder Aan of Cc-ontvangers"
+msgstr "Waarschuwen wanneer de gebruiker 10 of meer berichten tegelijkertijd probeert te openen."
#: mail/evolution-mail.schemas.in.in.h:61
msgid ""
@@ -12110,17 +11967,13 @@ msgstr "Timeout voor het markeren van berichten als gezien."
msgid "UID string of the default account."
msgstr "UID tekenreeks van de standaard account."
-# fout in engels: spamasssassin
#: mail/evolution-mail.schemas.in.in.h:91
-#, fuzzy
msgid "Use Spamassassin daemon and client"
-msgstr "Spamassassin daemon en client gebruiken"
+msgstr "Spamassassin daemon en cliënt gebruiken"
-# fout in engels: spamasssassin
#: mail/evolution-mail.schemas.in.in.h:92
-#, fuzzy
msgid "Use Spamassassin daemon and client (spamc/spamd)"
-msgstr "Spamassassin daemon en client gebruiken (spamc/spamd)"
+msgstr "Spamassassin daemon en cliënt gebruiken (spamc/spamd)"
#: mail/evolution-mail.schemas.in.in.h:93
msgid "Use custom fonts"
@@ -12324,10 +12177,10 @@ msgid ""
"feature, which is not supported in Evolution.\n"
"These filters will be dropped."
msgstr ""
-"Sommige van uw netscape e-mailfilters gebruiken\n"
+"Sommige van uw Netscape e-mailfilters gebruiken\n"
"de \"Discussie negeren\" of \"Discussie volgen\"\n"
"mogelijkheid. Deze worden niet ondersteund door\n"
-"Evolution. Deze filters wordengenegeerd."
+"Evolution. Deze filters worden genegeerd."
#: mail/importers/netscape-importer.c:703
msgid ""
@@ -12337,7 +12190,7 @@ msgid ""
"were modified to test whether that string is or is not\n"
"contained in the message body."
msgstr ""
-"Sommige van uw netscape e-mailfilters testen\n"
+"Sommige van uw Netscape e-mailfilters testen\n"
"of de berichtinhoud (on)gelijk is aan een tekenreeks.\n"
"Dit wordt niet ondersteund door Evolution. De filters\n"
"zijn omgezet naar filters die kijken of de berichtinhoud\n"
@@ -12411,81 +12264,81 @@ msgstr "%s mailinglijst"
msgid "Add Filter Rule"
msgstr "Filterregel Toevoegen"
-#: mail/mail-component.c:484
+#: mail/mail-component.c:505
#, c-format
msgid "%d deleted"
msgid_plural "%d deleted"
msgstr[0] "%d verwijderd"
msgstr[1] "%d verwijderd"
-#: mail/mail-component.c:486
+#: mail/mail-component.c:507
#, c-format
msgid "%d junk"
msgid_plural "%d junk"
msgstr[0] "%d troep"
msgstr[1] "%d troep"
-#: mail/mail-component.c:509
+#: mail/mail-component.c:530
#, c-format
msgid "%d draft"
msgid_plural "%d drafts"
msgstr[0] "%d klad"
msgstr[1] "%d klad"
-#: mail/mail-component.c:511
+#: mail/mail-component.c:532
#, c-format
msgid "%d sent"
msgid_plural "%d sent"
msgstr[0] "%d verzonden"
msgstr[1] "%d verzonden"
-#: mail/mail-component.c:513
+#: mail/mail-component.c:534
#, c-format
msgid "%d unsent"
msgid_plural "%d unsent"
msgstr[0] "%d niet verzonden"
msgstr[1] "%d niet verzonden"
-#: mail/mail-component.c:517
+#: mail/mail-component.c:538
#, c-format
msgid "%d total"
msgid_plural "%d total"
msgstr[0] "%d totaal"
msgstr[1] "%d totaal"
-#: mail/mail-component.c:519
+#: mail/mail-component.c:540
#, c-format
msgid ", %d unread"
msgid_plural ", %d unread"
msgstr[0] ", %d ongelezen"
msgstr[1] ", %d ongelezen"
-#: mail/mail-component.c:691
+#: mail/mail-component.c:722
msgid "New Mail Message"
msgstr "Nieuw Bericht"
-#: mail/mail-component.c:692
+#: mail/mail-component.c:723
msgid "_Mail Message"
msgstr "_Bericht"
-#: mail/mail-component.c:693
+#: mail/mail-component.c:724
msgid "Compose a new mail message"
msgstr "Een nieuwe e-mail opstellen"
-#: mail/mail-component.c:699
+#: mail/mail-component.c:730
msgid "New Mail Folder"
msgstr "Nieuwe berichtenmap"
-#: mail/mail-component.c:700
+#: mail/mail-component.c:731
msgid "Mail _Folder"
msgstr "Mail _Map"
-#: mail/mail-component.c:701
+#: mail/mail-component.c:732
msgid "Create a new mail folder"
msgstr "Nieuwe berichtenmap aanmaken"
# upgraden/vernieuwen/bijwerken
-#: mail/mail-component.c:848
+#: mail/mail-component.c:879
msgid "Failed upgrading Mail settings or folders."
msgstr "Upgraden van mail-instellingen of mappen is mislukt."
@@ -12498,7 +12351,6 @@ msgid " Ch_eck for Supported Types "
msgstr "Control_eren op ondersteunde types "
#: mail/mail-config.glade.h:4
-#, fuzzy
msgid "<b>SSL is not supported in this build of Evolution</b>"
msgstr "<b>SSL wordt niet ondersteund in deze versie van Evolution</b>"
@@ -12512,8 +12364,7 @@ msgstr "<b>Ta_len</b>"
#: mail/mail-config.glade.h:7
msgid "<small>This will make the the filter more reliable, but slower</small>"
-msgstr ""
-"<small>Dit zal het filter betrouwbaarder maken, maar ook langzamer</small>"
+msgstr "<small>Dit zal het filter betrouwbaarder maken, maar ook trager</small>"
#: mail/mail-config.glade.h:8
msgid "<span weight=\"bold\">Account Information</span>"
@@ -12581,7 +12432,7 @@ msgstr "<span weight=\"bold\">Nieuwe Mail Notificatie</span>"
#: mail/mail-config.glade.h:24
msgid "<span weight=\"bold\">Optional Information</span>"
-msgstr "<span weight=\"bold\">Optionele informatie</span>"
+msgstr "<span weight=\"bold\">Facultatieve informatie</span>"
#: mail/mail-config.glade.h:25
msgid "<span weight=\"bold\">Options</span>"
@@ -12628,17 +12479,12 @@ msgid "Add _Script"
msgstr "_Script toevoegen"
#: mail/mail-config.glade.h:37
-#, fuzzy
msgid "Al_ways sign outgoing messages when using this account"
-msgstr ""
-"Uitgaande berichten _altijd ondertekenen bij het gebruik van dit account"
+msgstr "_Bij dit account, de uitgaande berichten altijd ondertekenen"
#: mail/mail-config.glade.h:38
-#, fuzzy
msgid "Also encrypt to sel_f when sending encrypted mail"
-msgstr ""
-"Berichten ook naar _mijzelf versleutelen bij het versturen van versleutelde "
-"berichten"
+msgstr "Bij het _versturen van versleutelde berichten, ook naar mijzelf versleuteld versturen"
#: mail/mail-config.glade.h:39
msgid "Alway_s carbon-copy (cc) to:"
@@ -12653,11 +12499,8 @@ msgid "Always _trust keys in my keyring when encrypting"
msgstr "Sleutels in mijn sleutelbos altijd _vertrouwen bij versleutelen"
#: mail/mail-config.glade.h:42
-#, fuzzy
msgid "Always encrypt to _myself when sending encrypted mail"
-msgstr ""
-"Berichten naar _mijzelf versleutelen bij het versturen van versleutelde "
-"berichten"
+msgstr "Bij het versturen van versleutelde berichten, altijd naar _mijzelf versleuteld versturen"
#: mail/mail-config.glade.h:43
msgid "Attach original message"
@@ -12704,14 +12547,12 @@ msgid "Checks incoming mail messages to be Junk"
msgstr "Controleert binnenkomende mailberichten op troep"
#: mail/mail-config.glade.h:54
-#, fuzzy
msgid "Cle_ar"
msgstr "_Wissen"
#: mail/mail-config.glade.h:55
-#, fuzzy
msgid "Clea_r"
-msgstr "_Wissen"
+msgstr "Wi_ssen"
#: mail/mail-config.glade.h:56
msgid "Color for _misspelled words:"
@@ -12749,9 +12590,8 @@ msgid "Default character e_ncoding:"
msgstr "Standaard teken_codering:"
#: mail/mail-config.glade.h:69
-#, fuzzy
msgid "Digitally _sign outgoing messages (by default)"
-msgstr "Uitgaande berichten _altijd ondertekenen"
+msgstr "Uitgaande berichten per standaard digitaal _ondertekenen"
#: mail/mail-config.glade.h:70
msgid "Do not quote original message"
@@ -12782,9 +12622,8 @@ msgid "Encry_ption certificate:"
msgstr "Encry_ptie certificaat:"
#: mail/mail-config.glade.h:78
-#, fuzzy
msgid "Encrypt out_going messages (by default)"
-msgstr "V_ersleutel uitgaande berichten (standaard)"
+msgstr "_Uitgaande berichten (standaard) versleutelen"
#: mail/mail-config.glade.h:80
msgid "Execute Command..."
@@ -12859,25 +12698,21 @@ msgid ""
"Please enter a descriptive name for this account in the space below.\n"
"This name will be used for display purposes only."
msgstr ""
+"Geef een naam aan dit account in de ruimte hieronder.\n"
+"Deze naam zal alleen voor weergave worden gebruikt."
#: mail/mail-config.glade.h:106
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 ""
-"Geef hier de informatie over uw server om e-mail via te verzenden. Als u "
-"niet weet wat voor servertype u gebruikt, neem dan contact op met uw "
-"systeembeheerder of met uw internet-provider."
+msgstr "Geef hier aan hoe u uw e-mail gaat verzenden. Als u niet weet wat voor servertype u gebruikt, neem dan contact op met uw systeembeheerder of met uw internet-provider."
#: mail/mail-config.glade.h:107
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 ""
-"Voer uw naam en e-mailadres in. De \"optionele\" velden behoeven niet te "
-"worden ingevuld, tenzij u wilt dat deze informatie wordt meegezonden bij de "
-"berichten die u verzendt."
+msgstr "Voer uw naam en e-mailadres in. De velden die bij \"Facultatieve informatie\" staan hoeven niet te worden ingevuld, tenzij u wilt dat deze informatie wordt meegezonden bij de berichten die u verstuurt."
#: mail/mail-config.glade.h:108
msgid "Please select among the following options"
@@ -12909,18 +12744,16 @@ msgid "Remember _password"
msgstr "Onthoud _wachtwoord"
#: mail/mail-config.glade.h:116
-#, fuzzy
msgid "S_elect..."
-msgstr "Selecteer..."
+msgstr "S_electeren..."
#: mail/mail-config.glade.h:117
msgid "S_tandard Font:"
msgstr "S_tandaardlettertype:"
#: mail/mail-config.glade.h:118
-#, fuzzy
msgid "Se_lect..."
-msgstr "Selecteer..."
+msgstr "Se_lecteren..."
#: mail/mail-config.glade.h:120
msgid "Select HTML fixed width font"
@@ -12955,9 +12788,8 @@ msgid "Server _Type: "
msgstr "Server _Type: "
#: mail/mail-config.glade.h:129
-#, fuzzy
msgid "Sig_ning certificate:"
-msgstr "Ondertekenin_gs certificaat:"
+msgstr "Ondertekenin_gscertificaat:"
#: mail/mail-config.glade.h:130
msgid "Signat_ure:"
@@ -12984,14 +12816,10 @@ msgid "T_ype: "
msgstr "T_ype: "
#: mail/mail-config.glade.h:136
-#, fuzzy
msgid ""
"The list of languages here reflects only the languages for which you have a "
"dictionary installed."
-msgstr ""
-"Op deze pagina kunt u spellingscontrole en taalinstellingen bewerken. De "
-"lijst van beschikbare talen komt overeen met de waarvoor een woordenboek "
-"geïnstalleerd is."
+msgstr "De lijst met talen hieronder, geeft alleen maar aan voor welke talen een woordenboek geïnstalleerd is."
#: mail/mail-config.glade.h:137
msgid ""
@@ -13042,7 +12870,6 @@ msgid "_Do not notify me when new mail arrives"
msgstr "_Geen melding bij binnenkomst van nieuwe e-mail"
#: mail/mail-config.glade.h:152
-#, fuzzy
msgid "_Don't sign meeting requests (for Outlook compatibility)"
msgstr ""
"Aanvragen voor bijeenkomsten _niet ondertekenen (voor Outlook "
@@ -13103,9 +12930,8 @@ msgid "_Show animated images"
msgstr "Bewegende afbeeldingen _weergeven"
#: mail/mail-config.glade.h:168
-#, fuzzy
msgid "_Use Secure Connection:"
-msgstr "Beveiligde verbinding (SSL) gebr_uiken:"
+msgstr "Beveiligde verbinding gebr_uiken:"
#: mail/mail-config.glade.h:169
msgid "_Use the same fonts as other applications"
@@ -13144,24 +12970,22 @@ msgid "<span weight=\"bold\">Encryption</span>"
msgstr "<span weight=\"bold\">Encryptie</span>"
#: mail/mail-dialogs.glade.h:10
-#, fuzzy
msgid "Case _Sensitive"
-msgstr "Hoofdlettergevoelig"
+msgstr "_Hoofdlettergevoelig"
#: mail/mail-dialogs.glade.h:11 mail/message-tags.glade.h:2
-#, fuzzy
msgid "Co_mpleted"
-msgstr "Voltooid"
+msgstr "_Voltooid"
#: mail/mail-dialogs.glade.h:13
-#, fuzzy
msgid "F_ind:"
-msgstr "Zoek:"
+msgstr "_Zoeken:"
#: mail/mail-dialogs.glade.h:14
msgid "Find in Message"
-msgstr "Vind in bericht"
+msgstr "Zoeken in bericht"
+# aanmerken/vlaggen/markeren
#: mail/mail-dialogs.glade.h:15 mail/message-tag-followup.c:295
#: mail/message-tags.glade.h:3
msgid "Flag to Follow Up"
@@ -13196,10 +13020,10 @@ msgstr ""
"Kies een vervolgactie uit het \"Vlag\"-menu."
#: mail/mail-dialogs.glade.h:24
-#, fuzzy
msgid "_Accept License"
-msgstr "Geaccepteerde overeenkomst"
+msgstr "Overeenkomst _accepteren"
+# verloopt/verloopdatum
#: mail/mail-dialogs.glade.h:25 mail/message-tags.glade.h:6
msgid "_Due By:"
msgstr "_Verloopdatum:"
@@ -13210,12 +13034,11 @@ msgstr "_Vlag:"
#: mail/mail-dialogs.glade.h:27
msgid "_Subscribe"
-msgstr "Abonneren"
+msgstr "A_bonneren"
#: mail/mail-dialogs.glade.h:28
-#, fuzzy
msgid "_Tick this to accept the license agreement"
-msgstr "Aanvinken om de licentieovereenkomst te accepteren"
+msgstr "Aan_vinken om de licentieovereenkomst te accepteren"
#: mail/mail-dialogs.glade.h:29
msgid "_Unsubscribe"
@@ -13336,13 +13159,13 @@ msgstr ""
"toch alle geadresserden in uw bericht tonen. Om dit te vermijden moet u "
"tenminste één geadresseerde geven in het veld \"Aan:\" of \"CC:\"."
+# vrij vertaald, was eerst: omdat u geen geadresseerden heeft opgegeven.
+# maar het is duidelijker als er staat dat het adresveld leeg is.
#. 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 ""
-"Dit bericht kan niet worden verzonden omdat u geen geadresseerden heeft "
-"opgegeven"
+msgstr "Dit bericht kan niet worden verzonden omdat u geen adres heeft ingevuld"
#. mail:send-no-recipients secondary
#: mail/mail-errors.xml.h:36
@@ -13377,8 +13200,8 @@ msgid ""
"Are you sure you want to permanently remove all the deleted message in "
"folder \"{0}\"?"
msgstr ""
-"Weet u zeker dat u alle verwijderde berichten in map \"{0}\" permanent wilt "
-"verwijderen?"
+"Weet u zeker dat u alle verwijderde berichten in map \"{0}\" definitief wilt "
+"weggooien?"
#. mail:ask-expunge secondary
#. mail:ask-empty-trash secondary
@@ -13398,8 +13221,8 @@ msgid ""
"Are you sure you want to permanently remove all the deleted messages in all "
"folders?"
msgstr ""
-"Weet u zeker dat u alle verwijderde berichten van alle mappen permanent wilt "
-"weggooien?"
+"Weet u zeker dat u alle verwijderde berichten van alle mappen definitief "
+"wilt weggooien?"
#: mail/mail-errors.xml.h:51
msgid "_Empty Trash"
@@ -13407,20 +13230,17 @@ msgstr "_Prullenbak legen"
#. mail:ask-open-many primary
#: mail/mail-errors.xml.h:53
-#, fuzzy
msgid "Are you sure you want to open {0} messages at once?"
-msgstr ""
-"Weet u zeker dat u een bericht met enkel BCC-geadresseerden wilt versturen?"
+msgstr "Weet u zeker dat u {0} berichten tegelijk wilt openen?"
#. mail:ask-open-many secondary
#: mail/mail-errors.xml.h:55
msgid "Opening too many messages at once may take a long time."
-msgstr ""
+msgstr "Teveel berichten tegelijk openen kan lang duren."
#: mail/mail-errors.xml.h:56
-#, fuzzy
msgid "_Open Messages"
-msgstr "Bericht _openen"
+msgstr "Berichten _openen"
#. mail:exit-unsaved primary
#: mail/mail-errors.xml.h:58
@@ -13563,7 +13383,7 @@ msgid ""
"will be deleted permanently."
msgstr ""
"Indien u deze map verwijdert zal de gehele inhoud inclusief alle submappen "
-"permanent worden verwijderd."
+"definitief worden verwijderd."
#. mail:no-rename-folder-exists primary
#. mail:no-rename-folder primary
@@ -13648,7 +13468,7 @@ msgstr "Weet u zeker dat u deze account wilt verwijderen?"
#: mail/mail-errors.xml.h:173
msgid "If you proceed, the account information will be deleted permanently."
msgstr ""
-"Indien u verdergaat, zal de account-informatie permanent worden verwijderd."
+"Indien u verdergaat, zal de account-informatie definitief worden verwijderd."
#: mail/mail-errors.xml.h:174
msgid "Don't delete"
@@ -13702,13 +13522,10 @@ msgstr "Kan vMap \"{0}\" niet bewerken omdat deze niet bestaat."
#. mail:vfolder-notexist secondary
#: mail/mail-errors.xml.h:193
-#, fuzzy
msgid ""
"This folder may have been added implicitly, go to the vFolder editor to add "
"it explicitly, if required."
-msgstr ""
-"Deze map is mogelijk impliciet toegevoegd. Ga, indien nodig, naar de "
-"virtuele map-editor om haar expliciet toe te voegen."
+msgstr "Deze map is mogelijk impliciet toegevoegd. Ga, indien nodig, naar de vMap-editor om haar expliciet toe te voegen."
#. mail:vfolder-notunique primary
#: mail/mail-errors.xml.h:195
@@ -13820,9 +13637,8 @@ msgstr "_Bijvoegen"
#. mail:no-load-license primary
#: mail/mail-errors.xml.h:239
-#, fuzzy
msgid "Unable to read license file."
-msgstr "Kon nieuwe map `%s' niet aanmaken: %s"
+msgstr "Kon het licentiebestand niet lezen."
#. mail:no-load-license secondary
#: mail/mail-errors.xml.h:241
@@ -13832,23 +13648,25 @@ msgid ""
"until\n"
" you can accept its license."
msgstr ""
+"Kan het licentiebestand \"{0}\" niet lezen, vanwege een\n"
+" installatieprobleem. U kunt deze provider niet gebruiken totdat\n"
+" u haar licentie kunt accepteren."
#. mail:checking-service title
#: mail/mail-errors.xml.h:245
msgid "Querying server"
-msgstr ""
+msgstr "Bevragen van de server"
#. mail:checking-service primary
#: mail/mail-errors.xml.h:247
-#, fuzzy
msgid "Please wait."
-msgstr "Een ogenblik geduld aub"
+msgstr "Een ogenblik geduld."
+# bevraagd voor/gevraagd om
#. mail:checking-service secondary
#: mail/mail-errors.xml.h:249
-#, fuzzy
msgid "Querying server for a list of supported authentication mechanisms."
-msgstr "Versleuteling vereist voor gewenst aanmeldingsmechanisme"
+msgstr "De server wordt gevraagd om een lijst met ondersteunde aanmeldingsmechanismen."
#. mail:gw-accountsetup-error primary
#: mail/mail-errors.xml.h:251
@@ -13871,7 +13689,7 @@ msgstr ""
#: mail/mail-folder-cache.c:813
#, c-format
msgid "Pinging %s"
-msgstr "%s pingen"
+msgstr "Pingen van %s"
#: mail/mail-ops.c:101
msgid "Filtering Folder"
@@ -14140,98 +13958,96 @@ msgid "Invalid folder: `%s'"
msgstr "Ongeldige map: `%s'"
#: mail/mail-vfolder.c:90
-#, fuzzy, c-format
+#, c-format
msgid "Setting up vFolder: %s"
-msgstr "Bezig met aanmaken vfolder: %s"
+msgstr "Bezig met aanmaken vMap: %s"
#: mail/mail-vfolder.c:239
#, c-format
msgid "Updating vFolders for '%s:%s'"
-msgstr "Actualiseren vfolders voor '%s:%s'"
+msgstr "Actualiseren vMappen voor '%s:%s'"
#: mail/mail-vfolder.c:246
#, c-format
msgid "Updating vFolders for '%s'"
-msgstr "Actualiseren vfolders voor '%s'"
+msgstr "Actualiseren vMappen voor '%s'"
#: mail/mail-vfolder.c:1008
-#, fuzzy
msgid "Edit vFolder"
-msgstr "Bewerk VMap"
+msgstr "vMap bewerken"
#: mail/mail-vfolder.c:1092
-#, fuzzy
msgid "New vFolder"
-msgstr "Nieuwe VMap"
+msgstr "Nieuwe vMap"
-#: mail/message-list.c:999
+#: mail/message-list.c:994
msgid "Unseen"
msgstr "Ongelezen"
-#: mail/message-list.c:1000
+#: mail/message-list.c:995
msgid "Seen"
msgstr "Gelezen"
-#: mail/message-list.c:1001
+#: mail/message-list.c:996
msgid "Answered"
msgstr "Beantwoord"
-#: mail/message-list.c:1002
+#: mail/message-list.c:997
msgid "Multiple Unseen Messages"
msgstr "Meerdere Ongelezen Berichten"
-#: mail/message-list.c:1003
+#: mail/message-list.c:998
msgid "Multiple Messages"
msgstr "Meerdere Berichten"
-#: mail/message-list.c:1007
+#: mail/message-list.c:1002
msgid "Lowest"
msgstr "Laagste"
-#: mail/message-list.c:1008
+#: mail/message-list.c:1003
msgid "Lower"
msgstr "Laag"
-#: mail/message-list.c:1012
+#: mail/message-list.c:1007
msgid "Higher"
msgstr "Hoog"
-#: mail/message-list.c:1013
+#: mail/message-list.c:1008
msgid "Highest"
msgstr "Hoogste"
-#: mail/message-list.c:1341
+#: mail/message-list.c:1336
msgid "?"
msgstr "?"
#. strftime format of a time,
#. in 12-hour format, without seconds.
-#: mail/message-list.c:1348 plugins/itip-formatter/itip-view.c:189
+#: mail/message-list.c:1343 plugins/itip-formatter/itip-view.c:189
msgid "Today %l:%M %p"
msgstr "Vandaag %l:%M %p"
-#: mail/message-list.c:1357
+#: mail/message-list.c:1352
msgid "Yesterday %l:%M %p"
msgstr "Gisteren %l:%M %p"
-#: mail/message-list.c:1369
+#: mail/message-list.c:1364
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
-#: mail/message-list.c:1377
+#: mail/message-list.c:1372
msgid "%b %d %l:%M %p"
msgstr "%b %d %l:%M %p"
-#: mail/message-list.c:1379
+#: mail/message-list.c:1374
msgid "%b %d %Y"
msgstr "%b %d %Y"
-#: mail/message-list.c:2046
-#, fuzzy
+# gewoon 'berichten' beter? korter?
+#: mail/message-list.c:2041
msgid "Message List"
-msgstr "Be_richten"
+msgstr "Berichtenlijst"
-#: mail/message-list.c:3386
+#: mail/message-list.c:3384
msgid "Generating message list"
msgstr "Bezig met genereren van berichtenlijst"
@@ -14291,9 +14107,10 @@ msgstr "Geen antwoord nodig"
msgid "Reply"
msgstr "Beantwoorden"
+# allen is korter dan iedereen
#: mail/message-tag-followup.c:82 ui/evolution-mail-message.xml.h:86
msgid "Reply to All"
-msgstr "Iedereen beantwoorden"
+msgstr "Allen beantwoorden"
#: mail/message-tag-followup.c:83
msgid "Review"
@@ -14320,83 +14137,71 @@ msgid "Subject contains"
msgstr "Onderwerp bevat"
#: mail/searchtypes.xml.h:6
-#, fuzzy
msgid "Subject or Sender contains"
-msgstr "Onderwerp bevat"
+msgstr "Onderwerp of afzender bevat"
#: plugins/backup-restore/backup-restore.c:51
msgid "Select name of Evolution archive"
-msgstr ""
+msgstr "Naam selecteren voor Evolution-archief"
#: plugins/backup-restore/backup-restore.c:61
msgid "_Restart Evolution after backup"
-msgstr ""
+msgstr "Evolution _herstarten na backup"
#: plugins/backup-restore/backup-restore.c:89
msgid "Select Evolution archive to restore"
-msgstr ""
+msgstr "Evolution-archief selecteren voor herstellen"
#: plugins/backup-restore/backup-restore.c:97
msgid "_Restart Evolution after restore"
-msgstr ""
+msgstr "Evolution _herstarten na herstellen"
#: plugins/backup-restore/backup.c:109
-#, fuzzy
msgid "Backup Evolution directory"
-msgstr "Evolution Fout"
+msgstr "Backup maken van Evolution-map"
#: plugins/backup-restore/backup.c:111
-#, fuzzy
msgid "Restore Evolution directory"
-msgstr "Evolution Fout"
+msgstr "Evolution-map herstellen"
-# groupware is wat anders dan workgroup
-# (denk software voor groepen)
#: plugins/backup-restore/backup.c:113
-#, fuzzy
msgid "Check Evolution archive"
-msgstr "De Evolution Groupware suite"
+msgstr "Evolution-archief controleren"
#: plugins/backup-restore/backup.c:115
-#, fuzzy
msgid "Restart Evolution"
-msgstr "Kan Evolution niet starten"
+msgstr "Evolution herstarten"
#: plugins/backup-restore/org-gnome-backup-restore.xml.h:1
-#, fuzzy
msgid "Backup Settings..."
-msgstr "_Instellingen..."
+msgstr "Backup-instellingen..."
#: plugins/backup-restore/org-gnome-backup-restore.xml.h:2
-#, fuzzy
msgid "Backup and restore Evolution data and settings"
-msgstr "Instellingen van Evolution bewerken"
+msgstr "Evolution data en instellingen backup maken en herstellen"
#: plugins/backup-restore/org-gnome-backup-restore.xml.h:3
-#, fuzzy
msgid "Restore Settings..."
-msgstr "Pilot instellingen..."
+msgstr "Instellingen herstellen..."
#: plugins/bbdb/bbdb.c:388
-#, fuzzy
msgid "Automatic Contacts"
-msgstr "Toevoegen aan contacten"
+msgstr "Automatische contacten"
#: plugins/bbdb/bbdb.c:397
-#, fuzzy
msgid "<span weight=\"bold\">Automatic Contacts</span>"
-msgstr "<span weight=\"bold\">Authenticatie</span>"
+msgstr "<span weight=\"bold\">Automatisch contacten</span>"
#. Enable BBDB checkbox
#: plugins/bbdb/bbdb.c:410
msgid ""
"_Automatically create entries in the addressbook when responding to mail"
msgstr ""
+"_Automatisch kaarten aanmaken in het adresboek bij het beantwoorden van mail"
#: plugins/bbdb/bbdb.c:428
-#, fuzzy
msgid "<span weight=\"bold\">Instant Messaging Contacts</span>"
-msgstr "<span weight=\"bold\">Bericht lettertype</span>"
+msgstr "<span weight=\"bold\">Instant messaging contacten</span>"
#. Enable Gaim Checkbox
#: plugins/bbdb/bbdb.c:441
@@ -14404,234 +14209,213 @@ msgid ""
"Periodically synchronize contact information and images from my _instant "
"messenger"
msgstr ""
+"Periodiek de contactinformatie en afbeeldingen met mijn _instant messanger "
+"synchroniseren"
#. Synchronize now button.
#: plugins/bbdb/bbdb.c:448
msgid "Synchronize with _buddy list now"
-msgstr ""
+msgstr "Met _buddylijst synchroniseren"
#: plugins/calendar-weather/calendar-weather.c:54
#: plugins/calendar-weather/calendar-weather.c:60
msgid "Weather: Cloudy"
-msgstr ""
+msgstr "Weer: bewolkt"
#: plugins/calendar-weather/calendar-weather.c:61
msgid "Weather: Fog"
-msgstr ""
+msgstr "Weer: mist"
#: plugins/calendar-weather/calendar-weather.c:62
msgid "Weather: Partly Cloudy"
-msgstr ""
+msgstr "Weer: gedeeltelijk bewolkt"
#: plugins/calendar-weather/calendar-weather.c:63
-#, fuzzy
msgid "Weather: Rain"
-msgstr "Bahrein"
+msgstr "Weer: regen"
#: plugins/calendar-weather/calendar-weather.c:64
msgid "Weather: Snow"
-msgstr ""
+msgstr "Weer: sneeuw"
#: plugins/calendar-weather/calendar-weather.c:65
msgid "Weather: Sunny"
-msgstr ""
+msgstr "Weer: zonnig"
#: plugins/calendar-weather/calendar-weather.c:66
msgid "Weather: Thunderstorms"
-msgstr ""
+msgstr "Weer: onweer"
#: plugins/calendar-weather/calendar-weather.c:268
-#, fuzzy
msgid "Select a location"
-msgstr "Kies een actie"
+msgstr "Kies een lokatie"
#: plugins/calendar-weather/calendar-weather.c:655
-#, fuzzy
msgid "_Units:"
-msgstr "Unit"
+msgstr "_Eenheden:"
#: plugins/calendar-weather/calendar-weather.c:662
msgid "Metric (Celsius, cm, etc)"
-msgstr ""
+msgstr "Metrisch (Celsius, cm, etc)"
#: plugins/calendar-weather/calendar-weather.c:663
msgid "Imperial (Fahrenheit, inches, etc)"
-msgstr ""
+msgstr "Imperisch (Fahrenheit, inch, etc)"
+# Engels: spatie te veel: "Mark as default folder"
#: plugins/default-source/default-source.c:82
-#, fuzzy
msgid "Mark as default folder"
-msgstr "Standaard kladmap gebruiken?"
+msgstr "Aanmerken als standaardmap"
#: plugins/default-source/default-source.c:108
-#, fuzzy
msgid "Mark as default folder"
-msgstr "Standaard kladmap gebruiken?"
+msgstr "Aanmerken als standaardmap"
#. i18n: "Secure Password Authentication" is an Outlookism
-#: plugins/exchange-account-setup/exchange-account-setup.c:53
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:59
msgid "Secure Password"
-msgstr "Voer Wachtwoord in"
+msgstr "Beveiligd wachtwoord"
#. i18n: "NTLM" probably doesn't translate
-#: plugins/exchange-account-setup/exchange-account-setup.c:56
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:62
msgid ""
"This option will connect to the Exchange server using secure password (NTLM) "
"authentication."
-msgstr ""
-"Deze optie zal bij het verbinden met de server gebruik maken van Kerberos-4-"
-"aanmelding."
+msgstr "Met deze optie zal bij het aanmelden bij de Exchange server gebruik maken van beveiligde wachtwoorden (NTLM)."
-#: plugins/exchange-account-setup/exchange-account-setup.c:64
-#, fuzzy
+# wachtwoord in platte tekst
+#: plugins/exchange-account-setup/exchange-account-setup.c:70
msgid "Plaintext Password"
-msgstr "Voer Wachtwoord in"
+msgstr "'Platte tekst'-wachtwoord"
-#: plugins/exchange-account-setup/exchange-account-setup.c:66
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:72
msgid ""
"This option will connect to the Exchange server using standard plaintext "
"password authentication."
-msgstr ""
-"Deze optie zal bij het verbinden met de IMAP-server het wachtwoord versturen "
-"als platte tekst."
+msgstr "Met deze optie zal bij het aanmelden bij de Exchange-server het wachtwoord versturen als platte tekst."
#. Description section
-#: plugins/exchange-account-setup/exchange-account-setup.c:113
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:193
msgid ""
"The message specified below will be automatically sent to \n"
"each person who sends mail to you while you are out of the office."
msgstr ""
-"<small>Het hieronder aangegeven bericht zal automatisch naar iedereen "
-"gestuurd worden\n"
-"die een bericht aan u stuurt wanneer u weg bent.</small>"
+"Het bericht hieronder zal automatisch worden vertuurd naar een ieder\n"
+"die naar u een bericht stuurt wanneer u afwezig bent."
-#: plugins/exchange-account-setup/exchange-account-setup.c:140
-#, fuzzy
-msgid "I am in the office"
-msgstr "Ik ben op dit moment aanwezig"
-
-#: plugins/exchange-account-setup/exchange-account-setup.c:154
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:221
+#: plugins/exchange-account-setup/exchange-account-setup.c:231
msgid "I am out of the office"
msgstr "Ik ben op dit moment afwezig"
-#: plugins/exchange-account-setup/exchange-account-setup.c:168
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:224
+#: plugins/exchange-account-setup/exchange-account-setup.c:228
+msgid "I am in the office"
+msgstr "Ik ben op dit moment aanwezig"
+
+#: plugins/exchange-account-setup/exchange-account-setup.c:257
msgid "Out of office Message:"
-msgstr "<b>Afwezigheidsbericht:</b>"
+msgstr "Afwezigheidsbericht:"
-#: plugins/exchange-account-setup/exchange-account-setup.c:194
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:302
msgid "Exchange Settings"
-msgstr "Instellingen"
+msgstr "Exchange-instellingen"
-#: plugins/exchange-account-setup/exchange-account-setup.c:332
+#: plugins/exchange-account-setup/exchange-account-setup.c:448
#: plugins/exchange-account-setup/exchange-ask-password.c:200
msgid "_OWA Url:"
-msgstr ""
+msgstr "_OWA Url:"
-#: plugins/exchange-account-setup/exchange-account-setup.c:340
+#: plugins/exchange-account-setup/exchange-account-setup.c:456
#: plugins/exchange-account-setup/exchange-ask-password.c:193
-#, fuzzy
msgid "A_uthenticate"
-msgstr "Aanmelding mislukt"
+msgstr "Aan_meldingscontrole"
-#: plugins/exchange-account-setup/exchange-account-setup.c:457
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:664
msgid "Authentication Type"
-msgstr "Aanmelding mislukt"
+msgstr "Soort aanmeldingscontrole"
-#: plugins/exchange-account-setup/exchange-account-setup.c:471
-#, fuzzy
+#: plugins/exchange-account-setup/exchange-account-setup.c:678
msgid "Ch_eck for Supported Types"
-msgstr "Testen op ondersteunde types "
+msgstr "_Testen op ondersteunde types "
#: plugins/folder-unsubscribe/folder-unsubscribe.c:57
-#, fuzzy, c-format
+#, c-format
msgid "Unsubscribing from folder \"%s\""
-msgstr "Kan niet uitschrijven bij map `%s': Slechte opdracht"
+msgstr "Abonnement op map \"%s\" wordt opgezegd"
+# controlelijst/aftekenlijst
#: plugins/groupwise-account-setup/camel-gw-listener.c:413
msgid "Checklist"
msgstr "Aftekenlijst"
#: plugins/groupwise-send-options/org-gnome-compose-send-options.xml.h:1
msgid "Add Send Options to groupwise messages"
-msgstr ""
+msgstr "Verzendopties bij groupwise-berichten tonen"
#: plugins/groupwise-send-options/org-gnome-compose-send-options.xml.h:2
#: widgets/misc/e-send-options.glade.h:20
-#, fuzzy
msgid "Send Options"
-msgstr "Opties"
+msgstr "Verzend-opties"
#: plugins/itip-formatter/itip-formatter.c:704
-#, fuzzy
msgid "Unable to parse item"
-msgstr "Kan de inhoud van het bericht niet ontleden"
+msgstr "Kan het item niet verwerken"
#: plugins/itip-formatter/itip-formatter.c:757
-#, fuzzy, c-format
+#, c-format
msgid "Unable to send item to calendar '%s'. %s"
-msgstr "Kan de agenda '%s' niet openen."
+msgstr "Kan item niet naar agenda '%s' versturen. %s"
#: plugins/itip-formatter/itip-formatter.c:768
#, c-format
msgid "Sent to calendar '%s' as accepted"
-msgstr ""
+msgstr "Verzonden aan agenda '%s' als geaccepteerd"
#: plugins/itip-formatter/itip-formatter.c:772
#, c-format
msgid "Sent to calendar '%s' as tentative"
-msgstr ""
+msgstr "Verzonden aan agenda '%s' als voorlopig"
#: plugins/itip-formatter/itip-formatter.c:777
#, c-format
msgid "Sent to calendar '%s' as declined"
-msgstr ""
+msgstr "Verzonden aan agenda '%s' als afgewezen"
#: plugins/itip-formatter/itip-formatter.c:782
#, c-format
msgid "Sent to calendar '%s' as cancelled"
-msgstr ""
+msgstr "Verzonden aan agenda '%s' als geannuleerd"
#: plugins/itip-formatter/itip-formatter.c:833
-#, fuzzy
msgid "Attendee status could not be updated because the status is invalid"
-msgstr ""
-"Bezoekerstatus kon niet ververst worden vanwege een ongeldige status!\n"
+msgstr "Aanwezigheidsstatus kon niet ververst worden omdat de status ongeldig is"
#: plugins/itip-formatter/itip-formatter.c:844
-#, fuzzy, c-format
+#, c-format
msgid "Unable to update attendee. %s"
-msgstr "Kan de agenda '%s' niet migreren"
+msgstr "Kon aanwezige niet updaten. %s"
#: plugins/itip-formatter/itip-formatter.c:848
-#, fuzzy
msgid "Attendee status updated"
-msgstr "Bezoekerstatus ververst\n"
+msgstr "Aanwezigheidstatus ververst"
#: plugins/itip-formatter/itip-formatter.c:973
-#, fuzzy
msgid "The calendar attached is not valid"
-msgstr ""
-"De contact data is ongeldig:\n"
-"\n"
+msgstr "De bijgevoegde agenda is niet geldig"
#: plugins/itip-formatter/itip-formatter.c:974
msgid ""
"The message claims to contain a calendar, but the calendar is not valid "
"iCalendar."
msgstr ""
+"Het bericht claimt een agenda te bevatten, maar de agenda is geen geldige "
+"iCalendar."
#: plugins/itip-formatter/itip-formatter.c:1008
#: plugins/itip-formatter/itip-formatter.c:1064
msgid "The item in the calendar is not valid"
-msgstr ""
+msgstr "Het item in de agenda is niet geldig"
#: plugins/itip-formatter/itip-formatter.c:1009
#: plugins/itip-formatter/itip-formatter.c:1065
@@ -14639,37 +14423,40 @@ msgid ""
"The message does contain a calendar, but the calendar contains no events, "
"tasks or free/busy information"
msgstr ""
+"Het bericht bevat een agenda, maar de agenda bevat geen aantekenigen, taken "
+"of vrij/bezet-informatie"
#: plugins/itip-formatter/itip-formatter.c:1020
msgid "The calendar attached contains multiple items"
-msgstr ""
+msgstr "De bijgevoegde agenda bevat meerdere items"
#: plugins/itip-formatter/itip-formatter.c:1021
msgid ""
"To process all of these items, the file should be saved and the calendar "
"imported"
msgstr ""
+"Om al deze items te verwerken, moet het bestand worden opgeslagen en de "
+"agenda worden geïmporteerd"
#: plugins/itip-formatter/itip-formatter.c:1658
-#, fuzzy
msgid "Meetings and Tasks"
-msgstr "Agenda en Taken"
+msgstr "Bijeenkomsten en taken"
#. Delete message after acting
#. FIXME Need a schema for this
#: plugins/itip-formatter/itip-formatter.c:1681
msgid "_Delete message after acting"
-msgstr ""
+msgstr "_Bericht verwijderen na actie"
+# vrij vertaald
#: plugins/itip-formatter/itip-formatter.c:1691
-#, fuzzy
msgid "<span weight=\"bold\">Conflict Search</span>"
-msgstr "<span weight=\"bold\">Configuratie</span>"
+msgstr "<span weight=\"bold\">Dubbele afspraken</span>"
#. Source selector
#: plugins/itip-formatter/itip-formatter.c:1704
msgid "Select the calendars to search for meeting conflicts"
-msgstr ""
+msgstr "Selecteer de agenda's waarbinnen naar dubbele afspraken moet worden gezocht"
#. strftime format of a weekday and a date.
#: plugins/itip-formatter/itip-view.c:175 ui/evolution-calendar.xml.h:34
@@ -14680,342 +14467,319 @@ msgstr "Vandaag"
#. strftime format of a time,
#. in 24-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:180
-#, fuzzy
msgid "Today %H:%M"
-msgstr "Vandaag %l:%M %p"
+msgstr "Vandaag %H:%M"
#. strftime format of a time,
#. in 24-hour format.
#: plugins/itip-formatter/itip-view.c:184
-#, fuzzy
msgid "Today %H:%M:%S"
-msgstr "Vandaag %l:%M %p"
+msgstr "Vandaag %H:%M:%S"
#. strftime format of a time,
#. in 12-hour format.
#: plugins/itip-formatter/itip-view.c:193
-#, fuzzy
msgid "Today %l:%M:%S %p"
-msgstr "Vandaag %l:%M %p"
+msgstr "Vandaag %l:%M:%S %p"
#. strftime format of a weekday and a date.
#: plugins/itip-formatter/itip-view.c:203
-#, fuzzy
msgid "Tomorrow"
-msgstr "Komoren"
+msgstr "Morgen"
#. strftime format of a time,
#. in 24-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:208
msgid "Tomorrow %H:%M"
-msgstr ""
+msgstr "Morgen %H:%M"
#. strftime format of a time,
#. in 24-hour format.
#: plugins/itip-formatter/itip-view.c:212
-#, fuzzy
msgid "Tomorrow %H:%M:%S"
-msgstr "%H:%M:%S%n"
+msgstr "Morgen %H:%M:%S"
#. strftime format of a time,
#. in 12-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:217
-#, fuzzy
msgid "Tomorrow %l:%M %p"
-msgstr "Vandaag %l:%M %p"
+msgstr "Morgen %l:%M %p"
#. strftime format of a time,
#. in 12-hour format.
#: plugins/itip-formatter/itip-view.c:221
-#, fuzzy
msgid "Tomorrow %l:%M:%S %p"
-msgstr "Vandaag %l:%M %p"
+msgstr "Morgen %l:%M:%S %p"
#. strftime format of a weekday.
#: plugins/itip-formatter/itip-view.c:240
#, c-format
msgid "%A"
-msgstr ""
+msgstr "%A"
#. strftime format of a weekday and a
#. time, in 24-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:245
-#, fuzzy
msgid "%A %H:%M"
-msgstr "%H:%M"
+msgstr "%A %H:%M"
#. strftime format of a weekday and a
#. time, in 24-hour format.
#: plugins/itip-formatter/itip-view.c:249
-#, fuzzy
msgid "%A %H:%M:%S"
-msgstr "%H:%M:%S%n"
+msgstr "%A %H:%M:%S"
#. strftime format of a weekday and a
#. time, in 12-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:254
-#, fuzzy
msgid "%A %l:%M %p"
-msgstr "%a %l:%M %p"
+msgstr "%A %l:%M %p"
#. strftime format of a weekday and a
#. time, in 12-hour format.
#: plugins/itip-formatter/itip-view.c:258
-#, fuzzy
msgid "%A %l:%M:%S %p"
-msgstr "%I:%M:%S %p%n"
+msgstr "%A %l:%M:%S %p"
#. strftime format of a weekday and a date
#. without a year.
#: plugins/itip-formatter/itip-view.c:267
-#, fuzzy
msgid "%A, %B %e"
-msgstr "%A, %d %B, %Y"
+msgstr "%A, %B %e"
#. strftime format of a weekday, a date
#. without a year and a time,
#. in 24-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:273
-#, fuzzy
msgid "%A, %B %e %H:%M"
-msgstr "%A, %d %B, %Y"
+msgstr "%A, %B %e %H:%M"
#. strftime format of a weekday, a date without a year
#. and a time, in 24-hour format.
#: plugins/itip-formatter/itip-view.c:277
-#, fuzzy
msgid "%A, %B %e %H:%M:%S"
-msgstr "%m/%d/%Y %H:%M:%S"
+msgstr "%A, %B %e %H:%M:%S"
#. strftime format of a weekday, a date without a year
#. and a time, in 12-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:282
-#, fuzzy
msgid "%A, %B %e %l:%M %p"
-msgstr "%b %d %l:%M %p"
+msgstr "%A, %B %e %l:%M %p"
#. strftime format of a weekday, a date without a year
#. and a time, in 12-hour format.
#: plugins/itip-formatter/itip-view.c:286
-#, fuzzy
msgid "%A, %B %e %l:%M:%S %p"
-msgstr "%b %d %l:%M %p"
+msgstr "%A, %B %e %l:%M:%S %p"
#. strftime format of a weekday and a date.
#: plugins/itip-formatter/itip-view.c:292
-#, fuzzy
msgid "%A, %B %e, %Y"
-msgstr "%A, %d %B, %Y"
+msgstr "%A, %B %e, %Y"
#. strftime format of a weekday, a date and a
#. time, in 24-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:297
-#, fuzzy
msgid "%A, %B %e, %Y %H:%M"
-msgstr "%A, %d %B, %Y"
+msgstr "%A, %B %e, %Y %H:%M"
#. strftime format of a weekday, a date and a
#. time, in 24-hour format.
#: plugins/itip-formatter/itip-view.c:301
-#, fuzzy
msgid "%A, %B %e, %Y %H:%M:%S"
-msgstr "%a %d-%m-%Y %H:%M:%S"
+msgstr "%A, %B %e, %Y %H:%M:%S"
#. strftime format of a weekday, a date and a
#. time, in 12-hour format, without seconds.
#: plugins/itip-formatter/itip-view.c:306
-#, fuzzy
msgid "%A, %B %e, %Y %l:%M %p"
-msgstr "op %B %d, %Y, %l:%M %p"
+msgstr "%A, %B %e, %Y %l:%M %p"
#. strftime format of a weekday, a date and a
#. time, in 12-hour format.
#: plugins/itip-formatter/itip-view.c:310
-#, fuzzy
msgid "%A, %B %e, %Y %l:%M:%S %p"
-msgstr "op %B %d, %Y, %l:%M %p"
+msgstr "%A, %B %e, %Y %l:%M:%S %p"
#: plugins/itip-formatter/itip-view.c:335
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s has published the following meeting information:"
-msgstr "<b>%s</b> heeft bijeenkomstgegevens beschikbaar gemaakt."
+msgstr "<b>%s</b> heeft via %s de volgende bijeenkomstgegevens beschikbaar gesteld:"
#: plugins/itip-formatter/itip-view.c:337
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has published the following meeting information:"
-msgstr "<b>%s</b> heeft bijeenkomstgegevens beschikbaar gemaakt."
+msgstr "<b>%s</b> heeft de volgende bijeenkomstgegevens beschikbaar gesteld:"
#: plugins/itip-formatter/itip-view.c:342
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> requests the presence of %s at the following meeting:"
-msgstr "<b>%s</b> verzoekt %s om bij de bijeenkomst aanwezig te zijn."
+msgstr "<b>%s</b> verzoekt %s om bij de volgende bijeenkomst aanwezig te zijn:"
#: plugins/itip-formatter/itip-view.c:345
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s requests your presence at the following meeting:"
-msgstr "<b>%s</b> verzoekt u bij de bijeenkomst aanwezig te zijn."
+msgstr "<b>%s</b> vraagt u op verzoek van %s bij de volgende bijeenkomst aanwezig te zijn:"
#: plugins/itip-formatter/itip-view.c:347
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> requests your presence at the following meeting:"
-msgstr "<b>%s</b> verzoekt u bij de bijeenkomst aanwezig te zijn."
+msgstr "<b>%s</b> verzoekt u bij de volgende bijeenkomst aanwezig te zijn:"
#: plugins/itip-formatter/itip-view.c:353
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s wishes to add to an existing meeting:"
-msgstr "<b>%s</b> wil graag aan een bestaande bijeenkomst bijdragen."
+msgstr "<b>%s</b> wil op verzoek van %s graag aan een bestaande bijeenkomst bijdragen:"
#: plugins/itip-formatter/itip-view.c:355
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> wishes to add to an existing meeting:"
-msgstr "<b>%s</b> wil graag aan een bestaande bijeenkomst bijdragen."
+msgstr "<b>%s</b> wil graag aan een bestaande bijeenkomst bijdragen:"
#: plugins/itip-formatter/itip-view.c:358
-#, fuzzy, c-format
+#, c-format
msgid ""
"<b>%s</b> wishes to receive the latest information for the following meeting:"
-msgstr "<b>%s</b> wil graag de laatste taakgegevens ontvangen."
+msgstr "<b>%s</b> wil graag de laatste informatie ontvangen voor de volgende bijeenkomst:"
#: plugins/itip-formatter/itip-view.c:361
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has sent back the following meeting response:"
-msgstr "<b>%s</b> heeft een onleesbaar bericht gestuurd."
+msgstr "<b>%s</b> heeft het volgende antwoord teruggestuurd:"
#: plugins/itip-formatter/itip-view.c:365
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s has cancelled the following meeting:"
-msgstr "<b>%s</b> heeft een bijeenkomst geannuleerd."
+msgstr "<b>%s</b> heeft via %s de volgende bijeenkomst geannuleerd:"
+# : ipv .
#: plugins/itip-formatter/itip-view.c:367
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has cancelled the following meeting."
-msgstr "<b>%s</b> heeft een bijeenkomst geannuleerd."
+msgstr "<b>%s</b> heeft de volgende bijeenkomst geannuleerd:"
#: plugins/itip-formatter/itip-view.c:370
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has proposed the following meeting changes."
-msgstr "<b>%s<b> heeft geantwoord op een bijeenkomstverzoek."
+msgstr "<b>%s<b> stelt de volgende bijeenkomstwijzigingen voor:"
#: plugins/itip-formatter/itip-view.c:374
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s has declined the following meeting changes:"
-msgstr "<b>%s<b> heeft geantwoord op een bijeenkomstverzoek."
+msgstr "<b>%s<b> heeft via %s de volgende bijeenkomstwijzigingen afgewezen:"
#: plugins/itip-formatter/itip-view.c:376
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has declined the following meeting changes."
-msgstr "<b>%s<b> heeft geantwoord op een bijeenkomstverzoek."
+msgstr "<b>%s<b> heeft de volgende bijeenkomstwijzigingen afgewezen:"
#: plugins/itip-formatter/itip-view.c:403
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s has published the following task:"
-msgstr "<b>%s</b> heeft taakgegevens beschikbaar gemaakt."
+msgstr "<b>%s</b> heeft via %s de volgende taak beschikbaar gesteld:"
#: plugins/itip-formatter/itip-view.c:405
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has published the following task:"
-msgstr "<b>%s</b> heeft taakgegevens beschikbaar gemaakt."
+msgstr "<b>%s</b> heeft de volgende taak beschikbaar gesteld:"
#: plugins/itip-formatter/itip-view.c:410
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> requests the assignment of %s to the following task:"
-msgstr "<b>%s</b> verzoekt %s om bij de bijeenkomst aanwezig te zijn."
+msgstr "<b>%s</b> verzoekt dat %s de volgende taak wordt toegewezen:"
#: plugins/itip-formatter/itip-view.c:413
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s has assigned you a task:"
-msgstr "<b>%s</b> heeft een taak geannuleerd."
+msgstr "<b>%s</b> heeft via %s u een taak toebedeeld:"
#: plugins/itip-formatter/itip-view.c:415
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has assigned you a task:"
-msgstr "<b>%s</b> heeft een taak geannuleerd."
+msgstr "<b>%s</b> heeft u een taak toebedeeld:"
#: plugins/itip-formatter/itip-view.c:421
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s wishes to add to an existing task:"
-msgstr "<b>%s</b> wil graag iets toevoegen aan een bestaande taak."
+msgstr "<b>%s</b> wil via %s aan een bestaande taak iets toevoegen:"
#: plugins/itip-formatter/itip-view.c:423
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> wishes to add to an existing task:"
-msgstr "<b>%s</b> wil graag iets toevoegen aan een bestaande taak."
+msgstr "<b>%s</b> wil aan een bestaande taak iets toevoegen:"
#: plugins/itip-formatter/itip-view.c:426
-#, fuzzy, c-format
+#, c-format
msgid ""
"<b>%s</b> wishes to receive the latest information for the following "
"assigned task:"
-msgstr "<b>%s</b> wil graag de laatste taakgegevens ontvangen."
+msgstr "<b>%s</b> wil graag de laatste informatie voor de volgende toebedeelde taak ontvangen:"
#: plugins/itip-formatter/itip-view.c:429
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has sent back the following assigned task response:"
-msgstr "<b>%s</b> heeft een onleesbaar bericht gestuurd."
+msgstr "<b>%s</b> heeft het volgende antwoord gestuurd:"
#: plugins/itip-formatter/itip-view.c:433
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> through %s has cancelled the following assigned task:"
-msgstr "<b>%s</b> heeft een taak geannuleerd."
+msgstr "<b>%s</b> heeft via %s de volgende toebedeelde taak geannuleerd:"
#: plugins/itip-formatter/itip-view.c:435
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has cancelled the following assigned task:"
-msgstr "<b>%s</b> heeft een taak geannuleerd."
+msgstr "<b>%s</b> heeft de volgende toebedeelde taak geannuleerd:"
#: plugins/itip-formatter/itip-view.c:438
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has proposed the following task assignment changes:"
-msgstr "<b>%s</b> heeft een taakopdracht beantwoord."
+msgstr "<b>%s</b> stelt de volgende wijzigingen bij het toebedelen van taken voor:"
#: plugins/itip-formatter/itip-view.c:442
#, c-format
msgid "<b>%s</b> through %s has declined the following assigned task:"
-msgstr ""
+msgstr "<b>%s</b> heeft via %s de volgende toebedeelde taak afgewezen:"
#: plugins/itip-formatter/itip-view.c:444
-#, fuzzy, c-format
+#, c-format
msgid "<b>%s</b> has declined the following assigned task:"
-msgstr "<b>%s</b> heeft een taakopdracht beantwoord."
+msgstr "<b>%s</b> heeft de volgende toebedeelde taak afgewezen:"
#. Comment
#: plugins/itip-formatter/itip-view.c:892
#: plugins/itip-formatter/itip-view.c:942
-#, fuzzy
msgid "Comment:"
-msgstr "Opdracht:"
+msgstr "Commentaar:"
#. org.gnome.mailing-list-actions:no-header primary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:2
-#, fuzzy
msgid "Action not available"
-msgstr "TLS is niet beschikbaar"
+msgstr "Actie is niet beschikbaar"
#. org.gnome.mailing-list-actions:no-header secondary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:4
msgid ""
"This message does not contain the header information required for this "
"action."
-msgstr ""
+msgstr "Dit bericht bevat de header-informatie niet die vereist is voor deze actie."
#. org.gnome.mailing-list-actions:posting-not-allowed primary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:6
-#, fuzzy
msgid "Posting not allowed"
-msgstr "Plaatsen mislukt: %s"
+msgstr "Mail sturen niet toegestaan"
+# mogelijkerwijs/mogelijk/misschien/wellicht
#. org.gnome.mailing-list-actions:posting-not-allowed secondary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:8
msgid ""
"Posting to this mailing list is not allowed. Possibly, this is a read-only "
"mailing list. Contact the list owner for details."
-msgstr ""
+msgstr "Berichten sturen aan deze mailinglijst is niet toegestaan. Mogelijk is dit een 'alleen-lezen' mailinglijst. Neem contact op met de lijsteigenaar voor details."
#. org.gnome.mailing-list-actions:ask-send-message primary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:10
-#, fuzzy
msgid "Send e-mail message to mailing list?"
-msgstr "_Bericht aan lijst sturen..."
+msgstr "E-mailbericht aan mailinglijst sturen?"
#. org.gnome.mailing-list-actions:ask-send-message secondary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:12
@@ -15026,22 +14790,22 @@ msgid ""
"You should receive an answer from the mailing list shortly after the message "
"has been sent."
msgstr ""
+"Er zal een e-mail worden verzonden naar de URL \"{0}\". U kunt het bericht automatisch verzenden, of het eerst bekijken en aanpassen.\n"
+"\n"
+"Als het goed is ontvangt u antwoord van de mailinglijst kort nadat het bericht is verzonden."
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:15
-#, fuzzy
msgid "_Send message"
-msgstr "Bericht wordt verstuurd"
+msgstr "Bericht v_ersturen"
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:16
-#, fuzzy
msgid "_Edit message"
-msgstr "Bericht wordt verstuurd"
+msgstr "Bericht be_werken"
#. org.gnome.mailing-list-actions:malformed-header primary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:18
-#, fuzzy
msgid "Malformed header"
-msgstr "Misvormde handtekening"
+msgstr "Misvormde header"
#. org.gnome.mailing-list-actions:malformed-header secondary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:20
@@ -15050,12 +14814,14 @@ msgid ""
"\n"
"Header: {1}"
msgstr ""
+"De {0} header van dit bericht misvormd en kon niet worden verwerkt\n"
+"\n"
+"Header: {1}"
#. org.gnome.mailing-list-actions:no-action primary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:24
-#, fuzzy
msgid "No e-mail action"
-msgstr "Filter acties bijhouden"
+msgstr "Geen e-mailactie"
#. org.gnome.mailing-list-actions:no-action secondary
#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:26
@@ -15065,94 +14831,88 @@ msgid ""
"\n"
"Header: {0}"
msgstr ""
+"De actie kon niet worden uitgevoerd. Dit betekent dat de header voor deze actie geen enkele actie bevatte die wij konden uitvoeren.\n"
+"\n"
+"Header: {0}"
#. Create the checkbox we will display, complete with mnemonic that is unique in the dialog
#: plugins/new-mail-notify/new-mail-notify.c:66
-#, fuzzy
msgid "_Generates a D-BUS message when new mail arrives"
-msgstr "_Geen melding bij binnenkomst van nieuwe e-mail"
+msgstr "Genereert een D-BUS melding bij binnenkomst van nieuwe e-mail"
#: plugins/plugin-manager/org-gnome-plugin-manager.xml.h:1
msgid "Enable and disable plugins"
-msgstr ""
+msgstr "Plugins aan en uitzetten"
#: plugins/plugin-manager/org-gnome-plugin-manager.xml.h:2
-#, fuzzy
msgid "Manage Plugins..."
-msgstr "Annuleren..."
+msgstr "Plugins beheren..."
#: plugins/plugin-manager/plugin-manager.c:45
-#, fuzzy
msgid "Author(s)"
-msgstr "u(u)r(en)"
+msgstr "Auteur(s)"
#: plugins/plugin-manager/plugin-manager.c:46
-#, fuzzy
msgid "Id"
-msgstr "I"
+msgstr "Id"
#: plugins/plugin-manager/plugin-manager.c:47
-#, fuzzy
msgid "Path"
-msgstr "_Pad:"
+msgstr "Pad"
#: plugins/plugin-manager/plugin-manager.c:48
-#, fuzzy
msgid "Description"
-msgstr "Omschrijving:"
+msgstr "Omschrijving"
# beheerder
#. Setup the ui
#: plugins/plugin-manager/plugin-manager.c:188
-#, fuzzy
msgid "Plugin Manager"
-msgstr "Manager"
+msgstr "Pluginbeheer"
#: plugins/plugin-manager/plugin-manager.c:201
msgid "Note: Some changes will not take effect until restart"
-msgstr ""
+msgstr "Merk op: Bepaalde wijzigingen zijn pas van kracht na een herstart"
#: plugins/plugin-manager/plugin-manager.c:210
-#, fuzzy
msgid "Plugin"
-msgstr "Legen"
+msgstr "Plugin"
#: plugins/prefer-plain/prefer-plain.c:105
msgid "Show HTML if present"
-msgstr ""
+msgstr "HTML tonen indien aanwezig"
#: plugins/prefer-plain/prefer-plain.c:106
msgid "Prefer PLAIN"
-msgstr ""
+msgstr "Voorkeur voor gewone tekst"
+# ooit eens?
#: plugins/prefer-plain/prefer-plain.c:107
msgid "Only ever show PLAIN"
-msgstr ""
+msgstr "Alleen gewone tekst"
#: plugins/prefer-plain/prefer-plain.c:150
-#, fuzzy
msgid "HTML Mode"
-msgstr "HTML e-mail"
+msgstr "HTML-modus"
+# Engels fout: spatie tussen einde zin en ...:
+# Save Attachments ...
#: plugins/save-attachments/org-gnome-save-attachments.xml.h:1
-#, fuzzy
msgid "Save Attachments ..."
-msgstr "_Bijlage..."
+msgstr "Bijlagen opslaan ..."
#: plugins/save-attachments/org-gnome-save-attachments.xml.h:2
-#, fuzzy
msgid "Save all attachments"
-msgstr "Bezig met opslaan bijlage"
+msgstr "Alle bijlagen opslaan"
+# huh?
#: plugins/save-attachments/save-attachments.c:331
-#, fuzzy
msgid "Select save base name"
-msgstr "Selecteer een tijdzone"
+msgstr "Selecteer opslaan basisnaam"
#: plugins/save-attachments/save-attachments.c:351
-#, fuzzy
msgid "MIME Type"
-msgstr "MIME type:"
+msgstr "MIME-type"
#: plugins/save-attachments/save-attachments.c:359
#: ui/evolution-message-composer.xml.h:16
@@ -15163,7 +14923,7 @@ msgstr "Opslaan"
#: plugins/save-calendar/csv-format.c:167
#, c-format
msgid "%s%d/%s%d/%s%d %s%d:%s%d:%s%d"
-msgstr ""
+msgstr "%s%d/%s%d/%s%d %s%d:%s%d:%s%d"
#: plugins/save-calendar/csv-format.c:370
#, c-format
@@ -15171,54 +14931,54 @@ msgid ""
"Uid%sSummary%sDescription List%sCategories List%sComment List%sCompleted%"
"sCreated%sContact List%sStart%sEnd%sDue%sPercent Done%sPriority%sUrl%"
"sAttendees List%sLocation%sModified%s"
-msgstr ""
+msgstr "Uid%sOnderwerp%sOmschrijving%scategorieën%sOpmerkingen%sVoltooid%sAangemaakt%sContacten%sBegin%sEinde%sVerloopt%sPercentage gedaan%sPrioriteit%sUrl%sWie%sLocatie%sGewijzigd%s"
#: plugins/save-calendar/csv-format.c:519
msgid "Advanced options for the CSV format"
-msgstr ""
+msgstr "Geavanceerde opties voor het CSV-formaat"
+# bijsluiten/invoegen
#: plugins/save-calendar/csv-format.c:526
msgid "Prepend a header"
-msgstr ""
+msgstr "Vooraan een header invoegen"
+# letterlijk: waardebegrenser, maar het gaat om het teken
+# waarmee de variabelen worden gescheiden
#: plugins/save-calendar/csv-format.c:535
-#, fuzzy
msgid "Value delimiter:"
-msgstr "Lokale bezorging"
+msgstr "Scheidingsteken"
#: plugins/save-calendar/csv-format.c:541
msgid "Record delimiter:"
-msgstr ""
+msgstr "Einde-regel teken:"
#: plugins/save-calendar/csv-format.c:547
msgid "Encapsulate values with:"
-msgstr ""
+msgstr "Waarden omringen met:"
#: plugins/save-calendar/csv-format.c:569
msgid "Comma separated value format (.csv)"
-msgstr ""
+msgstr "Comma separated value formaat (.csv)"
-#: plugins/save-calendar/ical-format.c:120
-#, fuzzy
+#: plugins/save-calendar/ical-format.c:136
msgid "iCalendar format (.ics)"
-msgstr "iCalendar agendabestanden (.ics)"
+msgstr "iCalendar formaat (.ics)"
#: plugins/save-calendar/rdf-format.c:390
msgid "RDF format (.rdf)"
-msgstr ""
+msgstr "RDF formaat (.rdf)"
-#: plugins/save-calendar/save-calendar.c:172
-#: plugins/save-calendar/save-calendar.c:182
-#, fuzzy
+#: plugins/save-calendar/save-calendar.c:171
+#: plugins/save-calendar/save-calendar.c:181
msgid "Select destination file"
-msgstr "Selecteer doel"
+msgstr "Doelbestand selecteren"
-#: plugins/save-calendar/save-calendar.c:217
+#: plugins/save-calendar/save-calendar.c:216
#, c-format
msgid ""
"The suggested filename extension of this filetype (%s) is unused in the "
"chosen filename. Do you want to continue?"
-msgstr ""
+msgstr "De gesuggereerde extensie voor dit bestandstype (%s) is niet gebruikt in de gekozen bestandsnaam. Wilt u doorgaan?"
#: plugins/send-options/send-options.c:82
#, c-format
@@ -15227,90 +14987,81 @@ msgstr "%sVoer uw wachtwoord in voor %s (gebruiker %s)"
#. org.gnome.evolution.mail_shared_folder:invalid-user primary
#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:2
-#, fuzzy
msgid "Invalid user"
-msgstr "Ongeldig doel"
+msgstr "Ongeldige gebruiker"
#. org.gnome.evolution.mail_shared_folder:invalid-user secondary
#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:4
msgid ""
"\n"
"You cannot share folder with specified user \"{0}\" \n"
-msgstr ""
+msgstr "\nU kunt geen map delen met de opgegeven gebruiker \"{0}\" \n"
#. org.gnome.evolution.mail_shared_folder:no-user primary
#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:8
-#, fuzzy
msgid "Specify User"
-msgstr "Specifieke kop"
+msgstr "Geef de gebruiker"
#. org.gnome.evolution.mail_shared_folder:no-user secondary
#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:10
msgid ""
"\n"
"\tYou have to specify a user name whom you want to add to the list \n"
-msgstr ""
+msgstr "\n\tU moet een gebruikersnaam geven van degene die u aan de lijst wilt toevoegen\n"
#: plugins/shared-folder/properties.glade.h:2
-#, fuzzy
msgid "<b>Users :</b>"
-msgstr "<b>Waarschuwingen</b>"
+msgstr "<b>Gebruikers :</b>"
#: plugins/shared-folder/properties.glade.h:4
-#, fuzzy
msgid "Message"
-msgstr "Be_richt:"
+msgstr "Bericht"
#: plugins/shared-folder/properties.glade.h:6
msgid "Shared Folder Notification"
-msgstr ""
+msgstr "Gedeelde map mededelingen"
#: plugins/shared-folder/properties.glade.h:8
msgid "The participants will receive the following notification.\n"
-msgstr ""
+msgstr "De deelnemers zullen de volgende mededeling ontvangen.\n"
#: plugins/shared-folder/properties.glade.h:11
-#, fuzzy
msgid "_Contacts..."
-msgstr "Contacten..."
+msgstr "_Contacten..."
+# engels spelfout: Cutomize
#: plugins/shared-folder/properties.glade.h:12
-#, fuzzy
msgid "_Cutomize notification message"
-msgstr "Kon bericht niet aanmaken."
+msgstr "_Mededelingsbericht aanpassen"
#: plugins/shared-folder/properties.glade.h:13
-#, fuzzy
msgid "_Not Shared"
-msgstr "Niet gestart"
+msgstr "_Niet gedeeld"
#: plugins/shared-folder/properties.glade.h:15
msgid "_Shared With ..."
-msgstr ""
+msgstr "_Gedeeld met ..."
#: plugins/shared-folder/properties.glade.h:16
-#, fuzzy
msgid "_Sharing"
-msgstr "Schaduw"
+msgstr "_Delen"
#: plugins/shared-folder/share-folder-common.c:315
-#, fuzzy
msgid "Users"
-msgstr "Gebruikersnaam"
+msgstr "Gebruikers"
#: plugins/shared-folder/share-folder-common.c:316
msgid "Enter the users and set permissions"
-msgstr ""
+msgstr "Geef de gebruikers en bepaal de rechten"
#: plugins/shared-folder/share-folder-common.c:401
-#, fuzzy
msgid "Sharing"
-msgstr "Schaduw"
+msgstr "Delen"
#. Create the checkbox we will display, complete with mnemonic that is unique in the dialog
#: plugins/subject-thread/subject-thread.c:54
msgid "Fall back to threading messages by sub_ject"
-msgstr ""
+msgstr "Terugvallen naar berichtensortering per _onderwerp"
#: shell/GNOME_Evolution_Shell.server.in.in.h:1
msgid "Evolution Shell"
@@ -15326,25 +15077,24 @@ msgstr "Evolution testcomponent"
#: shell/apps_evolution_shell.schemas.in.in.h:1
msgid "A GNOME Print description of the current printer settings"
-msgstr ""
+msgstr "Een omschrijving van de huidige printerinstellingen met GNOME Print"
#: shell/apps_evolution_shell.schemas.in.in.h:2
-#, fuzzy
msgid "Configuration version"
-msgstr "Evolution configuratie versie"
+msgstr "Configuratieversie"
+# zijpaneel
#: shell/apps_evolution_shell.schemas.in.in.h:3
-#, fuzzy
msgid "Default sidebar width"
-msgstr "Standaard venster breedte"
+msgstr "Standaardbreedte van zijbalk"
#: shell/apps_evolution_shell.schemas.in.in.h:4
msgid "Default window height"
-msgstr "Standaard venster hoogte"
+msgstr "Standaard vensterhoogte"
#: shell/apps_evolution_shell.schemas.in.in.h:5
msgid "Default window width"
-msgstr "Standaard venster breedte"
+msgstr "Standaard vensterbreedte"
#: shell/apps_evolution_shell.schemas.in.in.h:6
msgid "ID or alias of the component to be shown by default at start-up."
@@ -15352,9 +15102,8 @@ msgstr ""
"ID of alias van het component dat bij het opstarten moet worden weergegeven."
#: shell/apps_evolution_shell.schemas.in.in.h:7
-#, fuzzy
msgid "Last upgraded configuration version"
-msgstr "Laatst bijgewerkte Evolution configuratieversie"
+msgstr "Laatst bijgewerkte configuratieversie"
#: shell/apps_evolution_shell.schemas.in.in.h:8
msgid ""
@@ -15364,89 +15113,75 @@ msgstr ""
"offline gebruik"
#: shell/apps_evolution_shell.schemas.in.in.h:9
-#, fuzzy
msgid "Printer settings"
-msgstr "Pilot instellingen..."
+msgstr "Printerinstellingen"
#: shell/apps_evolution_shell.schemas.in.in.h:10
-#, fuzzy
msgid "Skip development warning dialog"
-msgstr "Toon het waarschuwings dialoog voor de development versie"
+msgstr "Waarschuwingsdialoog voor instabiele versie overslaan"
-#: shell/apps_evolution_shell.schemas.in.in.h:11 shell/main.c:475
+#: shell/apps_evolution_shell.schemas.in.in.h:11 shell/main.c:476
msgid "Start in offline mode"
msgstr "Beginnen in offline stand"
#: shell/apps_evolution_shell.schemas.in.in.h:12
msgid ""
"The configuration version of Evolution, with major/minor/configuration level"
-msgstr ""
+msgstr "De configuratieversie van Evolution, met major/minor/configuratieniveau"
#: shell/apps_evolution_shell.schemas.in.in.h:13
-#, fuzzy
msgid "The default height for the main window, in pixels."
-msgstr "Standaard hoogte van het bericht venster"
+msgstr "De standaardhoogte van het hoofdvenster in pixels."
#: shell/apps_evolution_shell.schemas.in.in.h:14
-#, fuzzy
msgid "The default width for the main window, in pixels."
-msgstr "Standaard breedte van het bericht venster"
+msgstr "De standaardbreedte van het hoofdvenster in pixels."
#: shell/apps_evolution_shell.schemas.in.in.h:15
-#, fuzzy
msgid "The default width for the sidebar, in pixels."
-msgstr "Standaard breedte van de mappenbalk"
+msgstr "De standaardbreedte van de zijbalk in pixels."
#: shell/apps_evolution_shell.schemas.in.in.h:16
msgid ""
"The last upgraded configuration version of Evolution, with major/minor/"
"configuration level"
-msgstr ""
+msgstr "De laats bijgewerkte configuratieversie van Evolution, met major/minor/configuratieniveau"
#: shell/apps_evolution_shell.schemas.in.in.h:17
msgid ""
"The style of the window buttons. Can be \"text\", \"icons\", \"both\", "
"\"toolbar\". If \"toolbar\" is set, the style of the buutons is determined "
"by the GNOME toolbar setting."
-msgstr ""
+msgstr "De stijl van de vensterknoppen. Kan zijn \"text\", \"icons\", \"both\", \"toolbar\". Indien \"toolbar\" wordt gebruikt, wordt de stijl bepaald door de werkbalkinstelling van GNOME."
#: shell/apps_evolution_shell.schemas.in.in.h:18
msgid "Toolbar is visible"
msgstr "Werkbalk is zichtbaar"
#: shell/apps_evolution_shell.schemas.in.in.h:19
-#, fuzzy
msgid "Whether Evolution will start up in offline mode instead of online mode."
-msgstr ""
-"Als ingesteld op true zal Evolution opstarten in offline mode in plaatsvan "
-"online mode."
+msgstr "Of Evolution opstart in offline-modus in plaats van online-modus."
-# is/moet zijn
#: shell/apps_evolution_shell.schemas.in.in.h:20
msgid "Whether the toolbar should be visible."
msgstr "Of de werkbalk zichtbaar is."
#: shell/apps_evolution_shell.schemas.in.in.h:21
-#, fuzzy
msgid ""
"Whether the warning dialog in development versions of Evolution is skipped."
-msgstr ""
-"Als deze optie aan staat zal het waarschuwings dialoog voor de development "
-"versie van Evolution niet worden weergegeven."
+msgstr "Of het waarschuwingsdialoog voor de ontwikkelingsversies van Evolution wordt overgeslagen."
-# is/moet zijn
#: shell/apps_evolution_shell.schemas.in.in.h:22
-#, fuzzy
msgid "Whether the window buttons should be visible."
-msgstr "Of de werkbalk zichtbaar is."
+msgstr "Of de vensterknoppen zichtbaar zijn."
#: shell/apps_evolution_shell.schemas.in.in.h:23
msgid "Window button style"
-msgstr ""
+msgstr "Vensterknoppenstijl"
#: shell/apps_evolution_shell.schemas.in.in.h:24
msgid "Window buttons are visible"
-msgstr ""
+msgstr "Vensterknoppen zijn zichtbaar"
#: shell/e-active-connection-dialog.glade.h:1
msgid "<b>Active Connections</b>"
@@ -15644,27 +15379,27 @@ msgstr "Mapnaam mag geen \"#\" bevatten."
msgid "'.' and '..' are reserved folder names."
msgstr "'.' en '..' zijn gereserveerde mapnamen."
-#: shell/e-shell-window-commands.c:67
+#: shell/e-shell-window-commands.c:69
msgid "The GNOME Pilot tools do not appear to be installed on this system."
msgstr "Het gereedschap voor GNOME Pilot lijkt niet geïnstalleerd te zijn."
-#: shell/e-shell-window-commands.c:75
+#: shell/e-shell-window-commands.c:77
#, c-format
msgid "Error executing %s."
msgstr "Fout bij uitvoeren filter %s."
-#: shell/e-shell-window-commands.c:124
+#: shell/e-shell-window-commands.c:126
msgid "Bug buddy is not installed."
msgstr "Bug-buddy is niet geïnstalleerd."
-#: shell/e-shell-window-commands.c:132
+#: shell/e-shell-window-commands.c:134
msgid "Bug buddy could not be run."
msgstr "Bug-buddy kon niet worden gestart."
#. The translator-credits string is for translators to list
#. * per language credits for translation, displayed in the
#. * about box
-#: shell/e-shell-window-commands.c:426
+#: shell/e-shell-window-commands.c:501
msgid "translator-credits"
msgstr ""
"Arjan Scherpenisse\n"
@@ -15684,19 +15419,19 @@ msgstr ""
"in de vertaling:\n"
"http://nl.gnome.org"
-#: shell/e-shell-window-commands.c:440
+#: shell/e-shell-window-commands.c:515
msgid "Groupware Suite"
msgstr "Groupware suite"
-#: shell/e-shell-window-commands.c:681
+#: shell/e-shell-window-commands.c:742
msgid "_Work Online"
msgstr "Online _werken"
-#: shell/e-shell-window-commands.c:694 ui/evolution.xml.h:51
+#: shell/e-shell-window-commands.c:755 ui/evolution.xml.h:51
msgid "_Work Offline"
msgstr "Offline _werken"
-#: shell/e-shell-window-commands.c:707 ui/evolution.xml.h:34
+#: shell/e-shell-window-commands.c:768 ui/evolution.xml.h:34
msgid "Work Offline"
msgstr "Werken zonder netwerk"
@@ -15714,37 +15449,37 @@ msgstr "Evolution is bezig offline te gaan."
msgid "Evolution is currently offline. Click on this button to work online."
msgstr "Evolution is nu offline. Klik op deze knop om online te gaan werken."
-#: shell/e-shell-window.c:708
+#: shell/e-shell-window.c:713
#, c-format
msgid "Switch to %s"
msgstr "Omschakelen naar %s"
-#: shell/e-shell.c:597
+#: shell/e-shell.c:598
msgid "Uknown system error."
msgstr "Onbekende systeem fout."
-#: shell/e-shell.c:805 shell/e-shell.c:806
+#: shell/e-shell.c:800 shell/e-shell.c:801
#, c-format
msgid "%ld KB"
msgstr "%ld KB"
-#: shell/e-shell.c:1249 widgets/misc/e-cell-date-edit.c:256
+#: shell/e-shell.c:1254 widgets/misc/e-cell-date-edit.c:256
msgid "OK"
msgstr "OK"
-#: shell/e-shell.c:1251
+#: shell/e-shell.c:1256
msgid "Invalid arguments"
msgstr "Ongeldige argumenten"
-#: shell/e-shell.c:1253
+#: shell/e-shell.c:1258
msgid "Cannot register on OAF"
msgstr "Kan niet registreren op OAF"
-#: shell/e-shell.c:1255
+#: shell/e-shell.c:1260
msgid "Configuration Database not found"
msgstr "Configuratiedatabase niet gevonden"
-#: shell/e-shell.c:1257
+#: shell/e-shell.c:1262
msgid "Generic error"
msgstr "Generieke fout"
@@ -15768,30 +15503,26 @@ msgstr "Tijdzone "
msgid "Welcome"
msgstr "Welkom"
+# Forward wordt in gtk+ vertaald met Volgende
#: shell/evolution-startup-wizard.glade.h:6
-#, fuzzy
msgid ""
"Welcome to Evolution. The next few screens will allow Evolution to connect "
"to your email accounts, and to import files from other applications. \n"
"\n"
"Please click the \"Forward\" button to continue. "
msgstr ""
-"Welkom bij Evolution. De volgende schermen stellen\n"
-"Evolution in staat een verbinding te maken uw e-mailaccount,\n"
-"en om bestanden te importeren vanuit andere programma's\n"
+"Welkom bij Evolution. In de volgende schermen zal Evolution verbinding maken met uw e-mailaccount, en zal het gegevens importeren van andere programma's. \n"
"\n"
"Klik op \"Volgende\" om te beginnen."
#: shell/evolution-startup-wizard.glade.h:9
-#, fuzzy
msgid ""
"You have successfully entered all of the information needed to set up "
"Evolution. \n"
"\n"
"Click the \"Apply\" button to save your settings. "
msgstr ""
-"U heeft alle benodigde informatie ingevoerd om\n"
-"Evolution in te stellen.\n"
+"U heeft alle benodigde informatie ingevoerd om Evolution te kunnen instellen.\n"
"\n"
"Klik op \"Toepassen\" om uw instellingen op te slaan."
@@ -15868,7 +15599,7 @@ msgid "Evolution can import data from the following files:"
msgstr "Evolution kan gegevens importeren van de volgende bestanden:"
#. Preview/Alpha/Beta version warning message
-#: shell/main.c:237
+#: shell/main.c:238
#, no-c-format
msgid ""
"Hi. Thanks for taking the time to download this preview release\n"
@@ -15905,7 +15636,7 @@ msgstr ""
"ons\n"
"harde werk en wachten in spanning op uw bijdrage!\n"
-#: shell/main.c:261
+#: shell/main.c:262
msgid ""
"Thanks\n"
"The Evolution Team\n"
@@ -15913,42 +15644,41 @@ msgstr ""
"Bedankt!\n"
"Het Evolution team\n"
-#: shell/main.c:268
+#: shell/main.c:269
msgid "Don't tell me again"
msgstr "Dit bericht niet meer weergeven"
-#: shell/main.c:473
+#: shell/main.c:474
msgid "Start Evolution activating the specified component"
msgstr "Start Evolution met activatie van het gespecificeerde component"
-#: shell/main.c:477
+#: shell/main.c:478
msgid "Start in online mode"
msgstr "Beginnen in online modus"
-# geforceerd laten stoppen
-#: shell/main.c:480
-#, fuzzy
+# geforceerd laten stoppen/doen stoppen
+#: shell/main.c:481
msgid "Forcibly shut down all Evolution components"
-msgstr "Alle onderdelen van Evolution stoppen"
+msgstr "Alle componenten van Evolution geforceerd laten stoppen"
# Geforceerd migreren van Evolution 1.4
-#: shell/main.c:484
+#: shell/main.c:485
msgid "Forcibly re-migrate from Evolution 1.4"
msgstr "Geforceerd opnieuw migreren vanuit Evolution 1.4"
-#: shell/main.c:487
+#: shell/main.c:488
msgid "Send the debugging output of all components to a file."
msgstr "Verzend de debug-uitvoer van alle componenten naar een bestand."
-#: shell/main.c:490
+#: shell/main.c:491
msgid "Disable the mono plugin environment."
-msgstr ""
+msgstr "De mono plugin uitzetten."
-#: shell/main.c:493
+#: shell/main.c:494
msgid "Disable loading of any plugins."
-msgstr ""
+msgstr "Het laden van plugins uitzetten."
-#: shell/main.c:524
+#: shell/main.c:525
#, c-format
msgid ""
"%s: --online and --offline cannot be used together.\n"
@@ -16009,6 +15739,7 @@ msgstr "Doorgaan"
msgid "Delete old data from version {0}?"
msgstr "Oude data van versie {0} verwijderen?"
+# kunnen we niet gewoon de hele map 'evolution' verwijderen ipv de inhoud?
#. shell:upgrade-remove-1-4 secondary
#: shell/shell-errors.xml.h:21
msgid ""
@@ -16019,12 +15750,12 @@ msgid ""
"then you may manually remove the contents of \"evolution\" at your "
"convenience.\n"
msgstr ""
-"De vorige versie van Evolution bewaarde de gegevens op een andere locatie.\n"
+"De vorige versie van Evolution bewaarde de gegevens op een andere lokatie.\n"
"\n"
"Indien u besluit deze data te verwijderen zal de gehele inhoud van de map "
-"\"evolution\" permanent worden verwijderd. Indien u besluit deze data te "
-"behouden kunt u later handmatig, naar wens, de inhoud van de map \"evolution"
-"\" verwijderen.\n"
+"\"evolution\" definitief worden verwijderd. Indien u nu besluit deze data te "
+"behouden kunt u op een later tijdstip, wanneer het u uitkomt, handmatig de "
+"inhoud van de map \"evolution\" verwijderen.\n"
#: shell/shell-errors.xml.h:25
msgid "_Remind Me Later"
@@ -16053,15 +15784,15 @@ msgid ""
"Once deleted, you cannot downgrade to the previous version of Evolution "
"without manual intervention.\n"
msgstr ""
-"De gehele inhoud van de map \"evolution\" staat op het punt permanent te "
+"De gehele inhoud van de map \"evolution\" staat op het punt definitief te "
"worden verwijderd.\n"
"\n"
"U wordt aangeraden zelf te controleren dat al uw mail, contacten en "
"agendagegevens aanwezig zijn en dat deze versie van Evolution correct "
-"functioneert, voordat u deze oude gegevens verwijdert.\n"
+"functioneert, alvorens u deze oude gegevens verwijdert.\n"
"\n"
-"Eenmaal verwijderd, kunt u niet naar een vorige versie van Evolution "
-"teruggaan zonder handmatige inteventie.\n"
+"Eenmaal verwijderd, kunt u niet eenvoudig naar een vorige versie van "
+"Evolution teruggaan zonder handmatige interventie.\n"
#. shell:noshell title
#. shell:noshell-reason title
@@ -16133,30 +15864,30 @@ msgstr ""
"hier anders is aangegeven"
#: 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
+#: smime/gui/certificate-manager.c:377 smime/gui/certificate-manager.c:385
+#: smime/gui/certificate-manager.c:597 smime/gui/certificate-manager.c:605
msgid "Select a cert to import..."
msgstr "Selecteer een cert om te importeren..."
-#: smime/gui/certificate-manager.c:263 smime/gui/certificate-manager.c:472
-#: smime/gui/certificate-manager.c:690
+#: smime/gui/certificate-manager.c:265 smime/gui/certificate-manager.c:474
+#: smime/gui/certificate-manager.c:692
msgid "Certificate Name"
msgstr "Naam certificaat"
-#: smime/gui/certificate-manager.c:272 smime/gui/certificate-manager.c:490
+#: smime/gui/certificate-manager.c:274 smime/gui/certificate-manager.c:492
msgid "Purposes"
msgstr "Doelen"
-#: smime/gui/certificate-manager.c:281 smime/gui/smime-ui.glade.h:36
+#: smime/gui/certificate-manager.c:283 smime/gui/smime-ui.glade.h:36
#: smime/lib/e-cert.c:569
msgid "Serial Number"
msgstr "Serienummer"
-#: smime/gui/certificate-manager.c:289
+#: smime/gui/certificate-manager.c:291
msgid "Expires"
msgstr "Verloopt"
-#: smime/gui/certificate-manager.c:481
+#: smime/gui/certificate-manager.c:483
msgid "E-Mail Address"
msgstr "E-mailadres"
@@ -16611,7 +16342,7 @@ msgstr "De weer te geven bestandsnaam in de e-mail."
#: tools/evolution-launch-composer.c:327
msgid "Description of the attachment."
-msgstr "Beschrijving van de bijlage."
+msgstr "Omschrijving van de bijlage."
#: tools/evolution-launch-composer.c:328
msgid "Mark attachment to be shown inline by default."
@@ -16912,9 +16643,8 @@ msgid "Create or edit rules for filtering new mail"
msgstr "Regels maken of bewerken om nieuwe berichten te filteren"
#: ui/evolution-mail-global.xml.h:5
-#, fuzzy
msgid "Create or edit vFolder definitions"
-msgstr "Definities maken of bewerken van virtuele mappen"
+msgstr "vMap-definiets aanmaken of bewerken"
#: ui/evolution-mail-global.xml.h:6
msgid "Empty _Trash"
@@ -16926,7 +16656,7 @@ msgstr "Venster openen om een e-mail op te stellen"
#: ui/evolution-mail-global.xml.h:8
msgid "Permanently remove all deleted messages from all folders"
-msgstr "Alle verwijderde berichten permanent uit alle mappen verwijderen"
+msgstr "Alle verwijderde berichten definitief uit alle mappen verwijderen"
#: ui/evolution-mail-global.xml.h:9
msgid "Post Ne_w Message"
@@ -16940,22 +16670,22 @@ msgstr "Bericht sturen naar openbare map"
msgid "S_ubscribe to Folders..."
msgstr "_Abonneren op mappen..."
+# beter dan berichtvoorbeeldvenster
#: ui/evolution-mail-global.xml.h:12
msgid "Show message preview window"
-msgstr "Berichten voorbeeldvenster tonen"
+msgstr "Berichtinhoud tonen"
#: ui/evolution-mail-global.xml.h:13
msgid "Subscribe or unsubscribe to folders on remote servers"
-msgstr "Abboneer of zegt abbo op op de mappen op de server"
+msgstr "Abboneren of abbonnement opzeggen voor mappen op externe servers"
#: ui/evolution-mail-global.xml.h:15
msgid "_Filters..."
msgstr "_Filters..."
#: ui/evolution-mail-global.xml.h:18
-#, fuzzy
msgid "vFolder _Editor..."
-msgstr "_Virtuele map bewerken..."
+msgstr "vMap _editor..."
#: ui/evolution-mail-list.xml.h:1
msgid "Change the properties of this folder"
@@ -16971,7 +16701,7 @@ msgstr "Geselecteerde bericht(en) naar klembord knippen"
#: ui/evolution-mail-list.xml.h:4
msgid "E_xpunge"
-msgstr "Ops_chonen"
+msgstr "Op_ruimen"
#: ui/evolution-mail-list.xml.h:5
msgid "Hide S_elected Messages"
@@ -17006,7 +16736,7 @@ msgstr "Bericht(en) vanaf het klembord plakken"
#: ui/evolution-mail-list.xml.h:12
msgid "Permanently remove all deleted messages from this folder"
-msgstr "Alle verwijderde berichen permanent uit deze map verwijderen"
+msgstr "Alle verwijderde berichen definitief uit deze map verwijderen"
#: ui/evolution-mail-list.xml.h:14
msgid "Select _Thread"
@@ -17094,9 +16824,8 @@ msgid "Copy selected messages to another folder"
msgstr "Kopieer het bericht naar een andere map"
#: ui/evolution-mail-message.xml.h:12
-#, fuzzy
msgid "Create _vFolder From Message"
-msgstr "_Filter maken van bericht"
+msgstr "_vMap aanmaken van bericht"
#: ui/evolution-mail-message.xml.h:13
msgid "Create a rule to filter messages from this sender"
@@ -17115,24 +16844,20 @@ msgid "Create a rule to filter messages with this subject"
msgstr "Maak een regel om de berichten met dit onderwerp te filteren"
#: ui/evolution-mail-message.xml.h:17
-#, fuzzy
msgid "Create a vFolder for these recipients"
-msgstr "Maak een Virtueele map voor deze ontvangers"
+msgstr "Een vMap aanmaken voor deze geadresseerden"
#: ui/evolution-mail-message.xml.h:18
-#, fuzzy
msgid "Create a vFolder for this mailing list"
-msgstr "Maak een virtuele map voor deze e-maillijst"
+msgstr "Een vMap aanmaken voor deze mailinglijst"
#: ui/evolution-mail-message.xml.h:19
-#, fuzzy
msgid "Create a vFolder for this sender"
-msgstr "Maak een virtuele map voor deze afzender"
+msgstr "Een vMap aanmaken voor deze afzender"
#: ui/evolution-mail-message.xml.h:20
-#, fuzzy
msgid "Create a vFolder for this subject"
-msgstr "Maak een virtuele map voor dit onderwerp"
+msgstr "Een vMap aanmaken voor dit onderwerp"
#: ui/evolution-mail-message.xml.h:23
msgid "Decrease the text size"
@@ -17452,24 +17177,20 @@ msgid "_Undelete"
msgstr "_Herstellen"
#: ui/evolution-mail-message.xml.h:127
-#, fuzzy
msgid "vFolder on Mailing _List..."
-msgstr "VMap op mailing_lijst..."
+msgstr "vMap op mailing_lijst..."
#: ui/evolution-mail-message.xml.h:128
-#, fuzzy
msgid "vFolder on Se_nder..."
-msgstr "VMap op _afzender..."
+msgstr "vMap op _afzender..."
#: ui/evolution-mail-message.xml.h:129
-#, fuzzy
msgid "vFolder on _Recipients..."
-msgstr "VMap op _geadresseerden..."
+msgstr "vMap op _geadresseerden..."
#: ui/evolution-mail-message.xml.h:130
-#, fuzzy
msgid "vFolder on _Subject..."
-msgstr "VMap op _onderwerp..."
+msgstr "vMap op _onderwerp..."
#: ui/evolution-mail-messagedisplay.xml.h:1
#: ui/evolution-message-composer.xml.h:3 ui/evolution-signature-editor.xml.h:2
@@ -17792,19 +17513,19 @@ msgstr "Een nieuw venster voor deze map openen"
#: ui/evolution.xml.h:7
msgid "Display window buttons using the desktop toolbar setting"
-msgstr ""
+msgstr "Vensterknoppen weergeven volgens de desktop-instelling voor werkbalken"
#: ui/evolution.xml.h:8
msgid "Display window buttons with icons and text"
-msgstr ""
+msgstr "Vensterknoppen weergeven met pictogrammen en tekst"
#: ui/evolution.xml.h:9
msgid "Display window buttons with icons only"
-msgstr ""
+msgstr "Vensterknoppen weergeven met alleen pictogrammen"
#: ui/evolution.xml.h:10
msgid "Display window buttons with text only"
-msgstr ""
+msgstr "Vensterknoppen weergeven met alleen tekst"
#: ui/evolution.xml.h:11
msgid "E_xit"
@@ -17828,11 +17549,11 @@ msgstr "De onthouden wachtwoorden vergeten zodat ze opnieuw gevraagd worden"
#: ui/evolution.xml.h:16
msgid "Hide window buttons"
-msgstr ""
+msgstr "Vensterknoppen verbergen"
#: ui/evolution.xml.h:17
msgid "Icons _and text"
-msgstr ""
+msgstr "Pictogrammen _en tekst"
#: ui/evolution.xml.h:18
msgid "Import data from other programs"
@@ -17840,17 +17561,19 @@ msgstr "Importeer gegevens van andere programma's"
#: ui/evolution.xml.h:20
msgid "New _Window"
-msgstr "Nieuw _Venster"
+msgstr "Nieuw _venster"
#: ui/evolution.xml.h:21
msgid "Pi_lot Settings..."
-msgstr "Pil_ot instellingen..."
+msgstr "Pil_ot-instellingen..."
#: ui/evolution.xml.h:22
-#, fuzzy
msgid "Prefere_nces"
-msgstr "E-mailvoorkeuren"
+msgstr "_Voorkeuren"
+# post uit / in
+# postbezorging
+# post bezorgen
#: ui/evolution.xml.h:23
msgid "Send / Receive"
msgstr "Versturen & ontvangen"
@@ -17884,22 +17607,20 @@ msgid "Toggle whether we are working offline."
msgstr "Offline werken aan- of uitschakelen."
#: ui/evolution.xml.h:31
-#, fuzzy
msgid "Tool_bar"
-msgstr "Gereedschapsbalk"
+msgstr "Werk_balk"
#: ui/evolution.xml.h:32
-#, fuzzy
msgid "Tool_bar style"
-msgstr "Werkbalk is zichtbaar"
+msgstr "Werk_balkstijl"
#: ui/evolution.xml.h:33
msgid "Window B_uttons"
-msgstr ""
+msgstr "_Vensterknoppen"
#: ui/evolution.xml.h:35
msgid "_About Evolution..."
-msgstr "Over Ximi_an Evolution"
+msgstr "_Over Evolution..."
#: ui/evolution.xml.h:40
msgid "_Help"
@@ -17907,11 +17628,11 @@ msgstr "_Hulp"
#: ui/evolution.xml.h:41
msgid "_Hide buttons"
-msgstr ""
+msgstr "_Knoppen verbergen"
#: ui/evolution.xml.h:42
msgid "_Icons only"
-msgstr ""
+msgstr "Alleen _pictogrammen"
#: ui/evolution.xml.h:43
msgid "_Import..."
@@ -17930,9 +17651,8 @@ msgid "_Send / Receive"
msgstr "_Versturen & ontvangen"
#: ui/evolution.xml.h:47
-#, fuzzy
msgid "_Text only"
-msgstr "Tekst model"
+msgstr "Alleen _tekst"
#: ui/evolution.xml.h:50
msgid "_Window"
@@ -18005,7 +17725,7 @@ msgstr "Met Status"
#: widgets/e-timezone-dialog/e-timezone-dialog.c:195
#: widgets/e-timezone-dialog/e-timezone-dialog.c:637
msgid "UTC"
-msgstr "GMT"
+msgstr "UTC"
#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:2
msgid "<b>Time Zones</b>"
@@ -18020,9 +17740,8 @@ msgid "Select a Time Zone"
msgstr "Selecteer een tijdzone"
#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:6
-#, fuzzy
msgid "TimeZone Combobox"
-msgstr "Tijdzone "
+msgstr "Tijdzone combinatieveld"
#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:7
msgid ""
@@ -18054,14 +17773,13 @@ msgid "%B %Y"
msgstr "%B %Y"
#: widgets/misc/e-calendar.c:177 widgets/misc/e-calendar.c:201
-#, fuzzy
msgid "Previous Button"
-msgstr "Vorige"
+msgstr "Vorige knop"
+# hier kalender ipv agenda?
#: widgets/misc/e-calendar.c:226
-#, fuzzy
msgid "Month Calendar"
-msgstr "Agenda wordt geladen"
+msgstr "Maandkalender"
#: widgets/misc/e-cell-date-edit.c:232 widgets/misc/e-dateedit.c:444
msgid "Now"
@@ -18164,34 +17882,33 @@ msgid "..."
msgstr "..."
#: widgets/misc/e-dateedit.c:313
-#, fuzzy
msgid "Date and Time Entry"
-msgstr "<b>Datum en tijd</b>"
+msgstr "Datum en tijd"
#: widgets/misc/e-dateedit.c:332
msgid "Text entry to input date"
-msgstr ""
+msgstr "Tekstveld voor invoeren datum"
#: widgets/misc/e-dateedit.c:333
msgid "Text Date Entry"
-msgstr ""
+msgstr "Tekst datuminvoer"
+# kalender, geen agenda
#: widgets/misc/e-dateedit.c:350
msgid "Click this button to show a calendar"
-msgstr ""
+msgstr "Klik op deze knop om een kalender te tonen"
#: widgets/misc/e-dateedit.c:351
-#, fuzzy
msgid "Date Button"
-msgstr "Verzendingsdatum"
+msgstr "Datumknop"
#: widgets/misc/e-dateedit.c:371
msgid "Combo box to select time"
-msgstr ""
+msgstr "Combinatieveld om de tijd te selecteren"
#: widgets/misc/e-dateedit.c:372
msgid "Time Combo Box"
-msgstr ""
+msgstr "Tijd combiveld"
#: widgets/misc/e-error.c:84 widgets/misc/e-error.c:85
#: widgets/misc/e-error.c:127
@@ -18307,13 +18024,13 @@ msgstr "Kies een afbeelding"
#: widgets/misc/e-map.c:647
msgid "World Map"
-msgstr ""
+msgstr "Wereldkaart"
#: widgets/misc/e-map.c:649
msgid ""
"Mouse-based interactive map widget for selecting timezone. Keyboard users "
"should select the timezone from the below combo box instead."
-msgstr ""
+msgstr "Interactieve kaart voor het met de muis selecteren van de tijdzone. Toetsenbordgebruikers moeten de tijdzone kiezen met het combinatieveld hieronder."
#: widgets/misc/e-pilot-settings.c:103
msgid "Sync with:"
@@ -18332,9 +18049,8 @@ msgstr "Sync categorieën:"
#. To translators: This is the accessibility name of
#. the search bar's text entry widget
#: widgets/misc/e-search-bar.c:343
-#, fuzzy
msgid "Search Text Entry"
-msgstr "Zoekopdracht-editor"
+msgstr "Zoektekst-invoer"
#: widgets/misc/e-search-bar.c:547
msgid "_Search"
@@ -18349,9 +18065,8 @@ msgid "_Clear"
msgstr "_Wissen"
#: widgets/misc/e-search-bar.c:645
-#, fuzzy
msgid "Search Type"
-msgstr "_Zoek gebied:"
+msgstr "Zoektype"
#: widgets/misc/e-search-bar.c:849
msgid "Item ID"
@@ -18370,86 +18085,81 @@ msgid "Find _Now"
msgstr "_Nu zoeken"
#: widgets/misc/e-send-options.c:505
-#, fuzzy
msgid "When de_leted:"
-msgstr "%d verwijderd"
+msgstr "Wanneer _verwijderd"
#: widgets/misc/e-send-options.glade.h:1
-#, fuzzy
msgid "<b>Delivery Options</b>"
-msgstr "<b>Opties</b>"
+msgstr "<b>Bezorgingsopties</b>"
#: widgets/misc/e-send-options.glade.h:2
-#, fuzzy
msgid "<b>Replies</b>"
-msgstr "<b>Herhaling</b>"
+msgstr "<b>Antwoorden</b>"
+# Berzorgingsmelding
#: widgets/misc/e-send-options.glade.h:3
-#, fuzzy
msgid "<b>Return Notification</b>"
-msgstr "<b>Aanmeldingscontrole</b>"
+msgstr "<b>Leesbevestiging</b>"
#: widgets/misc/e-send-options.glade.h:4
-#, fuzzy
msgid "<b>Status Tracking</b>"
-msgstr "<b>Zoeken</b>"
+msgstr "<b>Status volgen</b>"
#: widgets/misc/e-send-options.glade.h:5
-#, fuzzy
msgid "A_uto-delete sent item"
-msgstr "Dit item verwijderen"
+msgstr "Verzonden item a_utomatisch verwijderen"
#: widgets/misc/e-send-options.glade.h:6
-#, fuzzy
msgid "C_lassification"
-msgstr "Classi_ficatie:"
+msgstr "Classi_ficatie"
#: widgets/misc/e-send-options.glade.h:7
-#, fuzzy
msgid "Creat_e a sent item to track information"
-msgstr "Verkrijg de meeste recente taakinformatie"
+msgstr "_Een 'verzonden' item aanmaken om status te volgen"
-# ouders/referenties
#: widgets/misc/e-send-options.glade.h:8
-#, fuzzy
msgid "Deli_vered and opened"
-msgstr "Antwoorden en referenties"
+msgstr "Be_zorgd en gelezen"
#: widgets/misc/e-send-options.glade.h:9
-#, fuzzy
msgid "Gene_ral Options"
-msgstr "Algemeen"
+msgstr "_Algemene opties"
+# Niets/Geen
#: widgets/misc/e-send-options.glade.h:10
-#, fuzzy
msgid ""
"None\n"
"Mail Receipt"
-msgstr "Leesbevestigingen"
+msgstr ""
+"Geen\n"
+"Leesbevestiging"
#: widgets/misc/e-send-options.glade.h:12
-#, fuzzy
msgid ""
"None\n"
"Mail Receipt\n"
-msgstr "Leesbevestigingen"
+msgstr ""
+"Geen\n"
+"Leesbevestiging\n"
#: widgets/misc/e-send-options.glade.h:15
-#, fuzzy
msgid ""
"Public\n"
"Private\n"
"Confidential\n"
-msgstr "Vertrouwelijk"
+msgstr ""
+"Openbaar\n"
+"Privé\n"
+"Vertrouwelijk\n"
#: widgets/misc/e-send-options.glade.h:19
-#, fuzzy
msgid "R_eply requested"
-msgstr "_Antwoordstijl:"
+msgstr "_Antwoord verwacht"
+# engels: dubbele spatie: Sta_tus Tracking
#: widgets/misc/e-send-options.glade.h:21
msgid "Sta_tus Tracking"
-msgstr ""
+msgstr "_Status volgen"
#: widgets/misc/e-send-options.glade.h:22
msgid ""
@@ -18458,61 +18168,58 @@ msgid ""
"Standard\n"
"Low"
msgstr ""
+"Niet gedefinieerd\n"
+"Hoog\n"
+"Standaard\n"
+"Laag"
#: widgets/misc/e-send-options.glade.h:26
-#, fuzzy
msgid "W_ithin"
-msgstr "Breedte"
+msgstr "_Binnen"
#: widgets/misc/e-send-options.glade.h:27
msgid "When acce_pted: "
-msgstr ""
+msgstr "Bij _accepteren:"
#: widgets/misc/e-send-options.glade.h:28
-#, fuzzy
msgid "When co_mpleted:"
-msgstr "Voltooiings _datum:"
+msgstr "Bij _voltooien:"
#: widgets/misc/e-send-options.glade.h:29
msgid "When decli_ned: "
-msgstr ""
+msgstr "Bij a_fwijzing:"
#: widgets/misc/e-send-options.glade.h:30
-#, fuzzy
msgid "_After:"
-msgstr "na"
+msgstr "_Na:"
#: widgets/misc/e-send-options.glade.h:31
-#, fuzzy
msgid "_All information"
-msgstr "Taak informatie"
+msgstr "A_lle informatie"
#: widgets/misc/e-send-options.glade.h:32
-#, fuzzy
msgid "_Delay message delivery"
-msgstr "Laat de berichten op de server achter"
+msgstr "Bezorging ver_tragen"
#: widgets/misc/e-send-options.glade.h:33
-#, fuzzy
msgid "_Delivered"
-msgstr "_Verwijderen"
+msgstr "_Bezorgd"
#: widgets/misc/e-send-options.glade.h:35
msgid "_Set expiration date"
-msgstr ""
+msgstr "Verloo_pdatum instellen"
#: widgets/misc/e-send-options.glade.h:36
-#, fuzzy
msgid "_Until:"
-msgstr "Naamloos"
+msgstr "_Tot:"
#: widgets/misc/e-send-options.glade.h:37
msgid "_When convenient"
-msgstr ""
+msgstr "_Wanneer het uitkomt"
#: widgets/misc/e-send-options.glade.h:38
msgid "_When opened: "
-msgstr ""
+msgstr "Bij _openen:"
#. system:ask-save-file-exists-overwrite primary
#: widgets/misc/e-system-errors.xml.h:4
@@ -18545,9 +18252,14 @@ msgid "%s (%d%% complete)"
msgstr "%s (%d%% voltooid)"
#: widgets/misc/e-url-entry.c:107
-#, fuzzy
msgid "click here to go to url"
-msgstr "<klik hier om een map te selecteren>"
+msgstr "hier klikken om naar url te gaan"
+
+#~ msgid "_Remember this password"
+#~ msgstr "_Onthoud dit wachtwoord"
+
+#~ msgid "_Remember this password for the remainder of this session"
+#~ msgstr "Dit wachtwoord onthouden tot het einde van deze sessie"
#~ msgid "have "
#~ msgstr "heeft "
diff --git a/po/sq.po b/po/sq.po
index 9657900d88..e8a7ee4756 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -5,10 +5,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: evolution HEAD\n"
+"Project-Id-Version: evolution gnome-2-10\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-03-02 10:05+0100\n"
-"PO-Revision-Date: 2005-03-02 13:18+0100\n"
+"POT-Creation-Date: 2005-03-04 04:34+0100\n"
+"PO-Revision-Date: 2005-03-04 12:09+0100\n"
"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
"Language-Team: Albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -16,132 +16,131 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../a11y/addressbook/ea-addressbook-view.c:94
-#: ../a11y/addressbook/ea-addressbook-view.c:103
-#: ../a11y/addressbook/ea-minicard-view.c:166
+#: a11y/addressbook/ea-addressbook-view.c:94
+#: a11y/addressbook/ea-addressbook-view.c:103
+#: a11y/addressbook/ea-minicard-view.c:166
msgid "evolution addressbook"
msgstr "rubrika e evolution"
-#: ../a11y/addressbook/ea-minicard-view.c:34
-#: ../addressbook/gui/component/addressbook-component.c:196
+#: a11y/addressbook/ea-minicard-view.c:34
+#: addressbook/gui/component/addressbook-component.c:196
msgid "New Contact"
msgstr "Kontakt i Ri"
-#: ../a11y/addressbook/ea-minicard-view.c:35
-#: ../addressbook/gui/component/addressbook-component.c:204
+#: a11y/addressbook/ea-minicard-view.c:35
+#: addressbook/gui/component/addressbook-component.c:204
msgid "New Contact List"
msgstr "Lista e re kontaktesh"
-#: ../a11y/addressbook/ea-minicard-view.c:149
+#: a11y/addressbook/ea-minicard-view.c:149
#, c-format
msgid "current addressbook folder has %d card"
msgid_plural "current addressbook folder has %d cards"
msgstr[0] "kartela aktuale e rubrikës ka %d skedë"
msgstr[1] "kartela aktuale e rubrikës ka %d skeda"
-#: ../a11y/addressbook/ea-minicard.c:31
-#: ../calendar/gui/alarm-notify/alarm-queue.c:863
-#: ../ui/evolution-message-composer.xml.h:10
+#: a11y/addressbook/ea-minicard.c:31
+#: calendar/gui/alarm-notify/alarm-queue.c:863
+#: ui/evolution-message-composer.xml.h:10
msgid "Open"
msgstr "Hap"
-#: ../a11y/addressbook/ea-minicard.c:138
+#: a11y/addressbook/ea-minicard.c:138
msgid "Contact List: "
msgstr "Lista e kontakteve: "
-#: ../a11y/addressbook/ea-minicard.c:139
+#: a11y/addressbook/ea-minicard.c:139
msgid "Contact: "
msgstr "Kontakti: "
-#: ../a11y/addressbook/ea-minicard.c:165
+#: a11y/addressbook/ea-minicard.c:165
msgid "evolution minicard"
msgstr "minicard e evolution"
-#: ../a11y/calendar/ea-cal-view-event.c:235
+#: a11y/calendar/ea-cal-view-event.c:235
msgid "It has alarms."
msgstr "Përmban alarme."
-#: ../a11y/calendar/ea-cal-view-event.c:238
+#: a11y/calendar/ea-cal-view-event.c:238
msgid "It has recurrences."
msgstr "Përmban përvjetore."
-#: ../a11y/calendar/ea-cal-view-event.c:241
+#: a11y/calendar/ea-cal-view-event.c:241
msgid "It is a meeting."
msgstr "Është një mbledhje."
-#: ../a11y/calendar/ea-cal-view-event.c:247
+#: a11y/calendar/ea-cal-view-event.c:247
#, c-format
msgid "Calendar Event: Summary is %s."
msgstr "Ndodhi kalendari: Treguesi është «%s»."
-#: ../a11y/calendar/ea-cal-view-event.c:249
+#: a11y/calendar/ea-cal-view-event.c:249
msgid "Calendar Event: It has no summary."
msgstr "Ndodhi kalendari: nuk ka asnjë tregues."
-#: ../a11y/calendar/ea-cal-view-event.c:268
+#: a11y/calendar/ea-cal-view-event.c:268
msgid "calendar view event"
msgstr "shfaqja e kalendarit sipas ndodhive"
-#: ../a11y/calendar/ea-cal-view-event.c:485
+#: a11y/calendar/ea-cal-view-event.c:485
msgid "Grab Focus"
msgstr "Merr fokusin"
-#: ../a11y/calendar/ea-cal-view.c:306
+#: a11y/calendar/ea-cal-view.c:306
msgid "New Appointment"
msgstr "Takim i ri"
-#: ../a11y/calendar/ea-cal-view.c:307
+#: a11y/calendar/ea-cal-view.c:307
msgid "New All Day Event"
msgstr "Ndodhi e re për gjithë ditën"
-#: ../a11y/calendar/ea-cal-view.c:308 ../calendar/gui/e-calendar-view.c:1372
+#: a11y/calendar/ea-cal-view.c:308 calendar/gui/e-calendar-view.c:1372
msgid "New Meeting"
msgstr "Mbledhje e Re"
-#: ../a11y/calendar/ea-cal-view.c:309
+#: a11y/calendar/ea-cal-view.c:309
msgid "Go to Today"
msgstr "Shko tek sot"
-#: ../a11y/calendar/ea-cal-view.c:310
+#: a11y/calendar/ea-cal-view.c:310
msgid "Go to Date"
msgstr "Shko tek data"
-#: ../a11y/calendar/ea-day-view-main-item.c:299
-#: ../a11y/calendar/ea-week-view-main-item.c:301
+#: a11y/calendar/ea-day-view-main-item.c:299
+#: a11y/calendar/ea-week-view-main-item.c:301
msgid "a table to view and select the current time range"
msgstr "një tabelë për të shfaqur dhe zgjedhur intervalin e kohës aktuale"
-#: ../a11y/calendar/ea-day-view.c:146 ../a11y/calendar/ea-week-view.c:148
+#: a11y/calendar/ea-day-view.c:146 a11y/calendar/ea-week-view.c:148
#, c-format
msgid "It has %d event."
msgid_plural "It has %d events."
msgstr[0] "Përmban %d ndodhi."
msgstr[1] "Përmban %d ndodhi."
-#: ../a11y/calendar/ea-day-view.c:148 ../a11y/calendar/ea-week-view.c:150
+#: a11y/calendar/ea-day-view.c:148 a11y/calendar/ea-week-view.c:150
msgid "It has no events."
msgstr "Nuk ka ndodhi."
-#: ../a11y/calendar/ea-day-view.c:152
+#: a11y/calendar/ea-day-view.c:152
#, c-format
msgid "Work Week View: %s. %s"
msgstr "Paraqitja e javës së punës: %s. %s"
-#: ../a11y/calendar/ea-day-view.c:155
+#: a11y/calendar/ea-day-view.c:155
#, c-format
msgid "Day View: %s. %s"
msgstr "Paraqitja ditore: %s. %s"
-#: ../a11y/calendar/ea-day-view.c:186
+#: a11y/calendar/ea-day-view.c:186
msgid "calendar view for a work week"
msgstr "paraqitja e kalendarit për një javë pune"
-#: ../a11y/calendar/ea-day-view.c:188
+#: a11y/calendar/ea-day-view.c:188
msgid "calendar view for one or more days"
msgstr "paraqitja e kalendarit për një apo më shumë ditë"
-#: ../a11y/calendar/ea-gnome-calendar.c:187
-#: ../calendar/gui/calendar-component.c:660
+#: a11y/calendar/ea-gnome-calendar.c:187 calendar/gui/calendar-component.c:660
msgid "%A %d %b %Y"
msgstr "%A %d %b %Y"
@@ -151,30 +150,22 @@ msgstr "%A %d %b %Y"
#. %d = day of month, %b = abbreviated month name.
#. You can change the order but don't change the
#. specifiers or add anything.
-#: ../a11y/calendar/ea-gnome-calendar.c:190
-#: ../calendar/gui/calendar-component.c:663
-#: ../calendar/gui/e-day-view-top-item.c:719 ../calendar/gui/e-day-view.c:1511
-#: ../calendar/gui/e-week-view-main-item.c:321
+#: a11y/calendar/ea-gnome-calendar.c:190 calendar/gui/calendar-component.c:663
+#: calendar/gui/e-day-view-top-item.c:719 calendar/gui/e-day-view.c:1511
+#: calendar/gui/e-week-view-main-item.c:321
msgid "%a %d %b"
msgstr "%a %d %b"
-#: ../a11y/calendar/ea-gnome-calendar.c:192
-#: ../a11y/calendar/ea-gnome-calendar.c:197
-#: ../a11y/calendar/ea-gnome-calendar.c:199
-#: ../calendar/gui/calendar-component.c:665
-#: ../calendar/gui/calendar-component.c:670
-#: ../calendar/gui/calendar-component.c:672
+#: a11y/calendar/ea-gnome-calendar.c:192 a11y/calendar/ea-gnome-calendar.c:197
+#: a11y/calendar/ea-gnome-calendar.c:199 calendar/gui/calendar-component.c:665
+#: calendar/gui/calendar-component.c:670 calendar/gui/calendar-component.c:672
msgid "%a %d %b %Y"
msgstr "%a %d %b %Y"
-#: ../a11y/calendar/ea-gnome-calendar.c:216
-#: ../a11y/calendar/ea-gnome-calendar.c:222
-#: ../a11y/calendar/ea-gnome-calendar.c:228
-#: ../a11y/calendar/ea-gnome-calendar.c:230
-#: ../calendar/gui/calendar-component.c:684
-#: ../calendar/gui/calendar-component.c:691
-#: ../calendar/gui/calendar-component.c:697
-#: ../calendar/gui/calendar-component.c:699
+#: a11y/calendar/ea-gnome-calendar.c:216 a11y/calendar/ea-gnome-calendar.c:222
+#: a11y/calendar/ea-gnome-calendar.c:228 a11y/calendar/ea-gnome-calendar.c:230
+#: calendar/gui/calendar-component.c:684 calendar/gui/calendar-component.c:691
+#: calendar/gui/calendar-component.c:697 calendar/gui/calendar-component.c:699
msgid "%d %b %Y"
msgstr "%d %b %Y"
@@ -183,86 +174,83 @@ msgstr "%d %b %Y"
#. strftime format %d = day of month, %b = abbreviated
#. month name. You can change the order but don't
#. change the specifiers or add anything.
-#: ../a11y/calendar/ea-gnome-calendar.c:220
-#: ../calendar/gui/calendar-component.c:689
-#: ../calendar/gui/e-day-view-top-item.c:723 ../calendar/gui/e-day-view.c:1527
-#: ../calendar/gui/e-week-view-main-item.c:335
+#: a11y/calendar/ea-gnome-calendar.c:220 calendar/gui/calendar-component.c:689
+#: calendar/gui/e-day-view-top-item.c:723 calendar/gui/e-day-view.c:1527
+#: calendar/gui/e-week-view-main-item.c:335
msgid "%d %b"
msgstr "%d %b"
-#: ../a11y/calendar/ea-gnome-calendar.c:247
-#: ../a11y/calendar/ea-gnome-calendar.c:255
-#: ../calendar/importers/icalendar-importer.c:726
+#: a11y/calendar/ea-gnome-calendar.c:247 a11y/calendar/ea-gnome-calendar.c:255
+#: calendar/importers/icalendar-importer.c:726
msgid "Gnome Calendar"
msgstr "Kalendari i Gnome"
-#: ../a11y/calendar/ea-gnome-calendar.c:290
+#: a11y/calendar/ea-gnome-calendar.c:290
msgid "search bar"
msgstr "shtylla e kërkimit"
-#: ../a11y/calendar/ea-gnome-calendar.c:291
+#: a11y/calendar/ea-gnome-calendar.c:291
msgid "evolution calendar search bar"
msgstr "shtylla e kërkimit tek kalendari i evolution"
-#: ../a11y/calendar/ea-jump-button.c:149
+#: a11y/calendar/ea-jump-button.c:149
msgid "Jump button"
msgstr "Pulsanti \"shko tek\""
-#: ../a11y/calendar/ea-jump-button.c:158
+#: a11y/calendar/ea-jump-button.c:158
msgid "Click here, you can find more events."
msgstr "Kliko këtu për gjetur aktivitete të tjerë.֣"
-#: ../a11y/calendar/ea-week-view.c:155
+#: a11y/calendar/ea-week-view.c:155
#, c-format
msgid "Month View: %s. %s"
msgstr "Paraqitja mujore: %s. %s"
-#: ../a11y/calendar/ea-week-view.c:159
+#: a11y/calendar/ea-week-view.c:159
#, c-format
msgid "Week View: %s. %s"
msgstr "Paraqitja javore: %s. %s"
-#: ../a11y/calendar/ea-week-view.c:190
+#: a11y/calendar/ea-week-view.c:190
msgid "calendar view for a month"
msgstr "paraqitja e kalendarit për një muaj"
-#: ../a11y/calendar/ea-week-view.c:192
+#: a11y/calendar/ea-week-view.c:192
msgid "calendar view for one or more weeks"
msgstr "paraqitja e kalendarit për një apo më shumë javë"
-#: ../a11y/widgets/ea-calendar-item.c:296
-#: ../a11y/widgets/ea-calendar-item.c:302
+#: a11y/widgets/ea-calendar-item.c:296 a11y/widgets/ea-calendar-item.c:302
msgid "%d %B %Y"
msgstr "%d %B %Y"
-#: ../a11y/widgets/ea-calendar-item.c:304
+#: a11y/widgets/ea-calendar-item.c:304
#, c-format
msgid "Calendar: from %s to %s"
msgstr "Kalendari: nga %s tek %s"
-#: ../a11y/widgets/ea-calendar-item.c:339
+#: a11y/widgets/ea-calendar-item.c:339
msgid "evolution calendar item"
msgstr "zë kalendari i evolution"
-#: ../a11y/widgets/ea-combo-button.c:40
+#: a11y/widgets/ea-combo-button.c:40
msgid "Combo Button"
msgstr "Pulsant i kombinuar"
-#: ../a11y/widgets/ea-combo-button.c:50
+#: a11y/widgets/ea-combo-button.c:50
msgid "Activate Default"
msgstr "Aktivo të prezgjedhurin"
-#: ../a11y/widgets/ea-combo-button.c:52
+#: a11y/widgets/ea-combo-button.c:52
msgid "Popup Menu"
msgstr "Menu popup"
#. addressbook:ldap-init primary
-#: ../addressbook/addressbook-errors.xml.h:2
+#: addressbook/addressbook-errors.xml.h:2
msgid "This addressbook could not be opened."
msgstr "Kjo rubrikë nuk mund të hapet."
#. addressbook:ldap-init secondary
-#: ../addressbook/addressbook-errors.xml.h:4
+#: addressbook/addressbook-errors.xml.h:4
msgid ""
"This addressbook server might be unreachable or the server name may be "
"misspelled or your network connection could be down."
@@ -271,12 +259,12 @@ msgstr ""
"jetë i gabuar ose akoma lidhja e rrjetit mund të mos jetë akoma aktive."
#. addressbook:ldap-auth primary
-#: ../addressbook/addressbook-errors.xml.h:6
+#: addressbook/addressbook-errors.xml.h:6
msgid "Failed to authenticate with LDAP server."
msgstr "Identifikimi me server-in LDAP dështoi."
#. addressbook:ldap-auth secondary
-#: ../addressbook/addressbook-errors.xml.h:8
+#: 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; "
@@ -288,12 +276,12 @@ msgstr ""
"mëdha."
#. addressbook:ldap-search-base primary
-#: ../addressbook/addressbook-errors.xml.h:10
+#: addressbook/addressbook-errors.xml.h:10
msgid "This addressbook server does not have any suggested search bases."
msgstr "Ky server rubrike nuk ka asnjë bazë kërkesash të shfrytëzueshme."
#. addressbook:ldap-search-base secondary
-#: ../addressbook/addressbook-errors.xml.h:12
+#: 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 "
@@ -304,37 +292,37 @@ msgstr ""
"bazat e suportuara të kërkimit."
#. addressbook:ldap-v3-schema primary
-#: ../addressbook/addressbook-errors.xml.h:14
+#: addressbook/addressbook-errors.xml.h:14
msgid "This server does not support LDAPv3 schema information."
msgstr "Ky server nuk suporton informacionet e skemës LDAPv3."
#. addressbook:ldap-get-schema primary
-#: ../addressbook/addressbook-errors.xml.h:16
+#: addressbook/addressbook-errors.xml.h:16
msgid "Could not get schema information for LDAP server."
msgstr "E pamundur marrja e informacioneve të skemës për serverin LDAP."
#. addressbook:ldap-invalid-schema primary
-#: ../addressbook/addressbook-errors.xml.h:18
+#: addressbook/addressbook-errors.xml.h:18
msgid "LDAP server did not respond with valid schema information."
msgstr "Serveri LDAP nuk përgjigjet me informacion të vlefshëm skeme."
#. addressbook:remove-addressbook primary
-#: ../addressbook/addressbook-errors.xml.h:20
+#: addressbook/addressbook-errors.xml.h:20
msgid "Could not remove addressbook."
msgstr "E pamundur heqja e rubrikës."
#. addressbook:ask-delete-addressbook primary
-#: ../addressbook/addressbook-errors.xml.h:22
+#: addressbook/addressbook-errors.xml.h:22
msgid "Delete address book '{0}'?"
msgstr "Eleminon rubrikën «{0}»?"
#. addressbook:ask-delete-addressbook secondary
-#: ../addressbook/addressbook-errors.xml.h:24
+#: addressbook/addressbook-errors.xml.h:24
msgid "This address book will be removed permanently."
msgstr "Kjo rubrikë do të eleminohet përgjithmonë."
#. addressbook:edit-categories primary
-#: ../addressbook/addressbook-errors.xml.h:26
+#: addressbook/addressbook-errors.xml.h:26
msgid "Category editor not available."
msgstr "Editori i kategorive nuk është disponibël."
@@ -349,62 +337,62 @@ msgstr "Editori i kategorive nuk është disponibël."
#. mail:session-message-error-cancel secondary
#. mail:ask-session-password secondary
#. mail:filter-load-error secondary
-#: ../addressbook/addressbook-errors.xml.h:28
-#: ../addressbook/addressbook-errors.xml.h:36
-#: ../addressbook/addressbook-errors.xml.h:40 ../mail/mail-errors.xml.h:75
-#: ../mail/mail-errors.xml.h:77 ../mail/mail-errors.xml.h:79
-#: ../mail/mail-errors.xml.h:81 ../mail/mail-errors.xml.h:83
-#: ../mail/mail-errors.xml.h:85 ../mail/mail-errors.xml.h:89
-#: ../mail/mail-errors.xml.h:93
+#: addressbook/addressbook-errors.xml.h:28
+#: addressbook/addressbook-errors.xml.h:36
+#: addressbook/addressbook-errors.xml.h:40 mail/mail-errors.xml.h:75
+#: mail/mail-errors.xml.h:77 mail/mail-errors.xml.h:79
+#: mail/mail-errors.xml.h:81 mail/mail-errors.xml.h:83
+#: mail/mail-errors.xml.h:85 mail/mail-errors.xml.h:89
+#: mail/mail-errors.xml.h:93
msgid "{0}"
msgstr "{0}"
#. addressbook:generic-error secondary
#. mail-composer:no-attach secondary
#. mail:no-save-path secondary
-#: ../addressbook/addressbook-errors.xml.h:30
-#: ../composer/mail-composer-errors.xml.h:4 ../mail/mail-errors.xml.h:97
+#: addressbook/addressbook-errors.xml.h:30
+#: composer/mail-composer-errors.xml.h:4 mail/mail-errors.xml.h:97
msgid "{1}"
msgstr "{1}"
#. addressbook:load-error title
-#: ../addressbook/addressbook-errors.xml.h:32
+#: addressbook/addressbook-errors.xml.h:32
msgid "Unable to open addressbook"
msgstr "E pamundur hapja e rubrikës"
#. addressbook:load-error primary
-#: ../addressbook/addressbook-errors.xml.h:34
+#: addressbook/addressbook-errors.xml.h:34
msgid "Error loading addressbook."
msgstr "Gabim gjatë ngarkimit të rubrikës."
#. addressbook:search-error primary
-#: ../addressbook/addressbook-errors.xml.h:38
+#: addressbook/addressbook-errors.xml.h:38
msgid "Unable to perform search."
msgstr "E pamundur kryerja e kërkimit."
#. addressbook:prompt-save primary
-#: ../addressbook/addressbook-errors.xml.h:42
+#: addressbook/addressbook-errors.xml.h:42
msgid "Would you like to save your changes?"
msgstr "Dëshiron të ruash ndryshimet e kryera?"
#. addressbook:prompt-save secondary
-#: ../addressbook/addressbook-errors.xml.h:44
+#: addressbook/addressbook-errors.xml.h:44
msgid ""
"You have made modifications to this contact. Do you want to save these "
"changes?"
msgstr "Keni kryer ndryshime tek ky kontakt. Dëshironi t'i ruani këto ndryshime?"
-#: ../addressbook/addressbook-errors.xml.h:45
+#: addressbook/addressbook-errors.xml.h:45
msgid "_Discard"
msgstr "_Anullo"
#. addressbook:prompt-move primary
-#: ../addressbook/addressbook-errors.xml.h:47
+#: addressbook/addressbook-errors.xml.h:47
msgid "Cannot move contact."
msgstr "E pamundur lëvizja e kontaktit."
#. addressbook:prompt-move secondary
-#: ../addressbook/addressbook-errors.xml.h:49
+#: addressbook/addressbook-errors.xml.h:49
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?"
@@ -413,34 +401,34 @@ msgstr ""
"fshihet nga burimi. Dëshironi përkundrazi të ruani një kopje?"
#. addressbook:save-error primary
-#: ../addressbook/addressbook-errors.xml.h:51
+#: addressbook/addressbook-errors.xml.h:51
msgid "Unable to save contact(s)."
msgstr "E pamundur ruajtja e kontaktit(eve)."
#. addressbook:save-error secondary
-#: ../addressbook/addressbook-errors.xml.h:53
+#: addressbook/addressbook-errors.xml.h:53
msgid "Error saving contacts to {0}: {1}"
msgstr "Gabim gjatë ruajtjes së kontakteve në {0}: {1}"
#. addressbook:backend-died primary
-#: ../addressbook/addressbook-errors.xml.h:55
+#: addressbook/addressbook-errors.xml.h:55
msgid "The Evolution addressbook has quit unexpectedly."
msgstr "Rubrika e Evolution përfundoi në menyrë të papritur."
#. addressbook:backend-died secondary
-#: ../addressbook/addressbook-errors.xml.h:57
+#: addressbook/addressbook-errors.xml.h:57
msgid "Your contacts for {0} will not be available until Evolution is restarted."
msgstr ""
"Kontaktet tuaja për {0} do të jenë në dispozicion vetëm mbas rinisjes së "
"Evolution."
#. addressbook:ask-list-add-exists primary
-#: ../addressbook/addressbook-errors.xml.h:59
+#: addressbook/addressbook-errors.xml.h:59
msgid "Address '{0}' already exists."
msgstr "Adresa «{0}» ekziston."
#. addressbook:ask-list-add-exists secondary
-#: ../addressbook/addressbook-errors.xml.h:61
+#: addressbook/addressbook-errors.xml.h:61
msgid ""
"A contact already exists with this address. Would you like to add a new "
"card with the same address anyway?"
@@ -448,109 +436,107 @@ msgstr ""
"Një kontakt me këtë adresë ekziston. Dëshironi sidoqoftë të shtoni një "
"teser të re me të njëjtën adresë?"
-#: ../addressbook/addressbook-errors.xml.h:62 ../mail/em-vfolder-rule.c:494
-#: ../plugins/shared-folder/properties.glade.h:10
+#: addressbook/addressbook-errors.xml.h:62 mail/em-vfolder-rule.c:494
+#: plugins/shared-folder/properties.glade.h:10
msgid "_Add"
msgstr "_Shto"
#. addressbook:server-version title
#. calendar:server-version title
-#: ../addressbook/addressbook-errors.xml.h:64
-#: ../calendar/calendar-errors.xml.h:142
+#: addressbook/addressbook-errors.xml.h:64 calendar/calendar-errors.xml.h:142
msgid "Server Version"
msgstr "Versioni i serverit"
#. addressbook:server-version primary
#. calendar:server-version primary
-#: ../addressbook/addressbook-errors.xml.h:66
-#: ../calendar/calendar-errors.xml.h:144
+#: addressbook/addressbook-errors.xml.h:66 calendar/calendar-errors.xml.h:144
msgid "Your server needs to be updated"
msgstr "Serveri juaj duhet përditësuar"
#. addressbook:server-version secondary
-#: ../addressbook/addressbook-errors.xml.h:68
+#: addressbook/addressbook-errors.xml.h:68
msgid "Some features may not work correctly with your current server version"
msgstr ""
"Disa nga veçoritë ndoshta nuk do të funksionojnë si duhet me versionin "
"aktual të serverit tuaj"
-#: ../addressbook/conduit/address-conduit.c:298
+#: addressbook/conduit/address-conduit.c:298
msgid "Default Sync Address:"
msgstr "Adresa sync e prezgjedhur:"
-#: ../addressbook/conduit/address-conduit.c:1183
-#: ../addressbook/conduit/address-conduit.c:1184
+#: addressbook/conduit/address-conduit.c:1183
+#: addressbook/conduit/address-conduit.c:1184
msgid "Could not load addressbook"
msgstr "I pamundur ngarkimi i librit të adresave"
-#: ../addressbook/conduit/address-conduit.c:1252
-#: ../addressbook/conduit/address-conduit.c:1255
+#: addressbook/conduit/address-conduit.c:1252
+#: addressbook/conduit/address-conduit.c:1255
msgid "Could not read pilot's Address application block"
msgstr "Nuk arrij të lexoj bllokun e adresave të pilot-it"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:1
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:1
msgid "Autocompletion"
msgstr "Plotësim automatik"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:2
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:2
msgid "C_ontacts"
msgstr "K_ontakte"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:3
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:3
msgid "Certificates"
msgstr "Çertifikimet"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:4
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:4
msgid "Configure autocomplete here"
msgstr "Konfiguro këtu plotësimin automatik"
#. Create the contacts group
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:5
-#: ../addressbook/gui/component/addressbook-view.c:1119
-#: ../calendar/gui/calendar-component.c:235 ../calendar/gui/migration.c:385
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:5
+#: addressbook/gui/component/addressbook-view.c:1119
+#: calendar/gui/calendar-component.c:235 calendar/gui/migration.c:385
msgid "Contacts"
msgstr "Kontakte"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:6
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:6
msgid "Evolution Addressbook"
msgstr "Libri i adresave të Evolution"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:7
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:7
msgid "Evolution Addressbook address pop-up"
msgstr "Pop-up i librit të adresave të Evolution"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:8
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:8
msgid "Evolution Addressbook address viewer"
msgstr "Shikuesi i adresave të librit të adresave të Evolution"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:9
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:9
msgid "Evolution Addressbook card viewer"
msgstr "Shikuesi i card nga libri i adresave të Evolution"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:10
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:10
msgid "Evolution Addressbook component"
msgstr "Komponenti i librit të adresave të Evolution"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:11
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:11
msgid "Evolution S/Mime Certificate Management Control"
msgstr "Administrimi i kontrollit të çertifikatave S/Mime të Evolution"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:12
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:12
msgid "Evolution folder settings configuration control"
msgstr "Kontrolli i konfigurimit të rregullimit të kartelave të Evolution"
-#: ../addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:13
+#: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in.h:13
msgid "Manage your S/MIME certificates here"
msgstr "Trajto këtu çertifikatat tuaja S/MIME"
#. create the local source group
#. On This Computer is always first and vFolders is always last
-#: ../addressbook/gui/component/addressbook-component.c:133
-#: ../addressbook/gui/component/addressbook-migrate.c:493
-#: ../calendar/gui/calendar-component.c:208 ../calendar/gui/migration.c:459
-#: ../calendar/gui/migration.c:552 ../calendar/gui/tasks-component.c:188
-#: ../mail/em-folder-tree-model.c:197 ../mail/em-folder-tree-model.c:199
-#: ../mail/mail-component.c:290 ../mail/mail-vfolder.c:222
+#: addressbook/gui/component/addressbook-component.c:133
+#: addressbook/gui/component/addressbook-migrate.c:493
+#: calendar/gui/calendar-component.c:208 calendar/gui/migration.c:459
+#: calendar/gui/migration.c:552 calendar/gui/tasks-component.c:188
+#: mail/em-folder-tree-model.c:197 mail/em-folder-tree-model.c:199
+#: mail/mail-component.c:290 mail/mail-vfolder.c:222
msgid "On This Computer"
msgstr "Në Këtë Kompjuter"
@@ -559,132 +545,131 @@ msgstr "Në Këtë Kompjuter"
#. Create the default Person task list
#. Create the default Person addressbook
#. orange
-#: ../addressbook/gui/component/addressbook-component.c:141
-#: ../addressbook/gui/component/addressbook-migrate.c:501
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:20
-#: ../calendar/gui/calendar-component.c:216 ../calendar/gui/migration.c:467
-#: ../calendar/gui/migration.c:560 ../calendar/gui/tasks-component.c:196
-#: ../filter/filter-label.c:123 ../mail/em-migrate.c:1043
-#: ../mail/mail-config.c:78 ../mail/mail-config.glade.h:101
+#: addressbook/gui/component/addressbook-component.c:141
+#: addressbook/gui/component/addressbook-migrate.c:501
+#: addressbook/gui/contact-editor/contact-editor.glade.h:20
+#: calendar/gui/calendar-component.c:216 calendar/gui/migration.c:467
+#: calendar/gui/migration.c:560 calendar/gui/tasks-component.c:196
+#: filter/filter-label.c:123 mail/em-migrate.c:1043 mail/mail-config.c:78
+#: mail/mail-config.glade.h:101
msgid "Personal"
msgstr "Personale"
#. Create the LDAP source group
-#: ../addressbook/gui/component/addressbook-component.c:149
-#: ../addressbook/gui/component/addressbook-migrate.c:509
+#: addressbook/gui/component/addressbook-component.c:149
+#: addressbook/gui/component/addressbook-migrate.c:509
msgid "On LDAP Servers"
msgstr "Në server-ët LDAP"
-#: ../addressbook/gui/component/addressbook-component.c:197
+#: addressbook/gui/component/addressbook-component.c:197
msgid "_Contact"
msgstr "_Kontakt"
-#: ../addressbook/gui/component/addressbook-component.c:198
+#: addressbook/gui/component/addressbook-component.c:198
msgid "Create a new contact"
msgstr "Krijo një kontakt të ri"
-#: ../addressbook/gui/component/addressbook-component.c:205
+#: addressbook/gui/component/addressbook-component.c:205
msgid "Contact _List"
msgstr "_Lista e kontakteve"
-#: ../addressbook/gui/component/addressbook-component.c:206
+#: addressbook/gui/component/addressbook-component.c:206
msgid "Create a new contact list"
msgstr "Krijo një listë të re kontaktesh"
-#: ../addressbook/gui/component/addressbook-component.c:212
-#: ../addressbook/gui/component/addressbook-config.c:1120
-#: ../addressbook/gui/component/addressbook-view.c:757
+#: addressbook/gui/component/addressbook-component.c:212
+#: addressbook/gui/component/addressbook-config.c:1120
+#: addressbook/gui/component/addressbook-view.c:757
msgid "New Address Book"
msgstr "Rubrikë e Re"
-#: ../addressbook/gui/component/addressbook-component.c:213
+#: addressbook/gui/component/addressbook-component.c:213
msgid "Address _Book"
msgstr "_Rubrika"
-#: ../addressbook/gui/component/addressbook-component.c:214
+#: addressbook/gui/component/addressbook-component.c:214
msgid "Create a new address book"
msgstr "Krijo një rubrikë të re"
-#: ../addressbook/gui/component/addressbook-component.c:287
+#: addressbook/gui/component/addressbook-component.c:287
msgid "Failed upgrading Addressbook settings or folders."
msgstr "Rifreskimi i rregullimeve apo kartelave të rubrikës dështoi."
-#: ../addressbook/gui/component/addressbook-config.c:315
+#: addressbook/gui/component/addressbook-config.c:315
msgid "Base"
msgstr "Bazë"
-#: ../addressbook/gui/component/addressbook-config.c:510
-#: ../calendar/gui/dialogs/calendar-setup.c:191
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:10
+#: addressbook/gui/component/addressbook-config.c:510
+#: calendar/gui/dialogs/calendar-setup.c:191
+#: calendar/gui/dialogs/calendar-setup.glade.h:10
msgid "_Type:"
msgstr "_Lloji:"
-#: ../addressbook/gui/component/addressbook-config.c:609
+#: addressbook/gui/component/addressbook-config.c:609
msgid "Copy book content locally for offline operation"
msgstr "Kopjo në lokale përmbajtjen e rubrikës për veprime jashtë linje"
-#: ../addressbook/gui/component/addressbook-config.c:904
-#: ../addressbook/gui/component/ldap-config.glade.h:23
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:25
-#: ../calendar/gui/dialogs/calendar-setup.c:361
-#: ../calendar/gui/dialogs/calendar-setup.c:372
-#: ../mail/em-folder-properties.c:215 ../mail/mail-config.glade.h:84
-#: ../smime/gui/smime-ui.glade.h:27
+#: addressbook/gui/component/addressbook-config.c:904
+#: addressbook/gui/component/ldap-config.glade.h:23
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:25
+#: calendar/gui/dialogs/calendar-setup.c:361
+#: calendar/gui/dialogs/calendar-setup.c:372 mail/em-folder-properties.c:215
+#: mail/mail-config.glade.h:84 smime/gui/smime-ui.glade.h:27
msgid "General"
msgstr "Të përgjithshme"
-#: ../addressbook/gui/component/addressbook-config.c:905
-#: ../mail/importers/pine-importer.c:479
+#: addressbook/gui/component/addressbook-config.c:905
+#: mail/importers/pine-importer.c:479
msgid "Addressbook"
msgstr "Rubrika"
-#: ../addressbook/gui/component/addressbook-config.c:909
+#: addressbook/gui/component/addressbook-config.c:909
msgid "Server Information"
msgstr "Informacione mbi serverin"
-#: ../addressbook/gui/component/addressbook-config.c:911
+#: addressbook/gui/component/addressbook-config.c:911
msgid "Authentication"
msgstr "Autentifikimi"
-#: ../addressbook/gui/component/addressbook-config.c:914
-#: ../addressbook/gui/component/ldap-config.glade.h:18
-#: ../mail/mail-dialogs.glade.h:12 ../smime/gui/smime-ui.glade.h:19
+#: addressbook/gui/component/addressbook-config.c:914
+#: addressbook/gui/component/ldap-config.glade.h:18
+#: mail/mail-dialogs.glade.h:12 smime/gui/smime-ui.glade.h:19
msgid "Details"
msgstr "Hollësi"
-#: ../addressbook/gui/component/addressbook-config.c:915
+#: addressbook/gui/component/addressbook-config.c:915
msgid "Searching"
msgstr "Duke kërkuar"
-#: ../addressbook/gui/component/addressbook-config.c:917
+#: addressbook/gui/component/addressbook-config.c:917
msgid "Downloading"
msgstr "Duke shkarkuar"
-#: ../addressbook/gui/component/addressbook-config.c:1118
-#: ../addressbook/gui/component/ldap-config.glade.h:14
+#: addressbook/gui/component/addressbook-config.c:1118
+#: addressbook/gui/component/ldap-config.glade.h:14
msgid "Address Book Properties"
msgstr "Pronësitë e Rubrikës"
-#: ../addressbook/gui/component/addressbook-migrate.c:72
-#: ../calendar/gui/migration.c:142 ../mail/em-migrate.c:1190
+#: addressbook/gui/component/addressbook-migrate.c:72
+#: calendar/gui/migration.c:142 mail/em-migrate.c:1190
msgid "Migrating..."
msgstr "Duke migruar..."
-#: ../addressbook/gui/component/addressbook-migrate.c:124
-#: ../calendar/gui/migration.c:189 ../mail/em-migrate.c:1231
+#: addressbook/gui/component/addressbook-migrate.c:124
+#: calendar/gui/migration.c:189 mail/em-migrate.c:1231
#, c-format
msgid "Migrating `%s':"
msgstr "Duke migruar `%s':"
-#: ../addressbook/gui/component/addressbook-migrate.c:637
+#: addressbook/gui/component/addressbook-migrate.c:637
msgid "LDAP Servers"
msgstr "Server-ët LDAP"
-#: ../addressbook/gui/component/addressbook-migrate.c:752
+#: addressbook/gui/component/addressbook-migrate.c:752
msgid "Autocompletion Settings"
msgstr "Rregullimet e plotësimit automatik"
-#: ../addressbook/gui/component/addressbook-migrate.c:1123
+#: addressbook/gui/component/addressbook-migrate.c:1123
msgid ""
"The location and hierarchy of the Evolution contact folders has changed "
"since Evolution 1.x.\n"
@@ -696,7 +681,7 @@ msgstr ""
"\n"
"Ju lutem durim ndërkohë që Evolution migron kartelat tuaja..."
-#: ../addressbook/gui/component/addressbook-migrate.c:1137
+#: addressbook/gui/component/addressbook-migrate.c:1137
msgid ""
"The format of mailing list contacts has changed.\n"
"\n"
@@ -706,7 +691,7 @@ msgstr ""
"\n"
"Ju lutem durim ndërkohë që Evolution migron kartelat tuaja..."
-#: ../addressbook/gui/component/addressbook-migrate.c:1146
+#: addressbook/gui/component/addressbook-migrate.c:1146
msgid ""
"The way Evolution stores some phone numbers has changed.\n"
"\n"
@@ -716,7 +701,7 @@ msgstr ""
"\n"
"Ju lutem durim ndërkohë që Evolution migron kartelat tuaja..."
-#: ../addressbook/gui/component/addressbook-migrate.c:1156
+#: addressbook/gui/component/addressbook-migrate.c:1156
msgid ""
"Evolution's Palm Sync changelog and map files have changed.\n"
"\n"
@@ -727,53 +712,52 @@ msgstr ""
"\n"
"Ju lutem durim ndërkohë që Evolution migron të dhënat e sinkronizimit..."
-#: ../addressbook/gui/component/addressbook-view.c:758
-#: ../addressbook/gui/widgets/e-addressbook-view.c:935
-#: ../calendar/gui/calendar-component.c:526
-#: ../calendar/gui/tasks-component.c:430 ../mail/em-filter-i18n.h:11
-#: ../ui/evolution-addressbook.xml.h:8 ../ui/evolution-calendar.xml.h:5
-#: ../ui/evolution-mail-message.xml.h:24 ../ui/evolution-tasks.xml.h:6
+#: addressbook/gui/component/addressbook-view.c:758
+#: addressbook/gui/widgets/e-addressbook-view.c:935
+#: calendar/gui/calendar-component.c:526 calendar/gui/tasks-component.c:430
+#: mail/em-filter-i18n.h:11 ui/evolution-addressbook.xml.h:8
+#: ui/evolution-calendar.xml.h:5 ui/evolution-mail-message.xml.h:24
+#: ui/evolution-tasks.xml.h:6
msgid "Delete"
msgstr "Elemino"
-#: ../addressbook/gui/component/addressbook-view.c:760
-#: ../calendar/gui/calendar-component.c:527
-#: ../calendar/gui/tasks-component.c:431
+#: addressbook/gui/component/addressbook-view.c:760
+#: calendar/gui/calendar-component.c:527 calendar/gui/tasks-component.c:431
msgid "Properties..."
msgstr "Pronësitë..."
-#: ../addressbook/gui/component/addressbook-view.c:1130
+#: addressbook/gui/component/addressbook-view.c:1130
msgid "Contact Source Selector"
msgstr "Zgjedhësi i origjinës së kontakteve"
-#: ../addressbook/gui/component/addressbook.c:98
+#: addressbook/gui/component/addressbook.c:98
msgid "Accessing LDAP Server anonymously"
msgstr "Hyrje anonime tek server-i LDAP"
-#: ../addressbook/gui/component/addressbook.c:193
-#: ../plugins/groupwise-account-setup/camel-gw-listener.c:478
+#: addressbook/gui/component/addressbook.c:193
+#: plugins/groupwise-account-setup/camel-gw-listener.c:478
msgid "Failed to authenticate.\n"
msgstr "Autentifikimi dështoi.\n"
-#: ../addressbook/gui/component/addressbook.c:200
-#: ../plugins/groupwise-account-setup/camel-gw-listener.c:461
+#: addressbook/gui/component/addressbook.c:200
+#: plugins/groupwise-account-setup/camel-gw-listener.c:461
#, c-format
msgid "Enter password for %s (user %s)"
msgstr "Shkruaj fjalëkalimin për %s (përdoruesi %s)"
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:1
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:1
msgid "Autocomplete length"
msgstr "Gjatësia e plotësimit automatik"
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:2
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:2
msgid "EFolderList XML for the list of completion URIs"
msgstr "XML EFolderList për listën e URIve të plotësimit"
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:3
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:3
msgid "EFolderList XML for the list of completion URIs."
msgstr "XML EFolderList për listën e URIve të plotësimit."
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:4
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:4
msgid ""
"Position of the vertical pane, between the card and list views and the "
"preview pane, in pixels."
@@ -781,11 +765,11 @@ msgstr ""
"Pozicioni i panelit vertikal, në pixel, midis paraqitjes me tesera ose me "
"listë dhe panelit të pamjes së parë."
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:5
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:5
msgid "Show preview pane"
msgstr "Shfaq panelin e pamjes së parë"
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:6
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:6
msgid ""
"The number of characters that must be typed before Evolution will attempt to "
"autocomplete."
@@ -793,142 +777,141 @@ msgstr ""
"Numri i gërmave që duhen shkruar para se Evolution të përpiqet t'i plotësojë "
"automatikisht."
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:7
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:7
msgid "URI for the folder last used in the select names dialog"
msgstr "URI për kartelën e përdorur së fundmi në dritaren e zgjedhjes së emrave"
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:8
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:8
msgid "URI for the folder last used in the select names dialog."
msgstr ""
"URI për kartelën e përdorur së fundmi në dritaren dialogut të zgjedhjes së "
"emrave."
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:9
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:49
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:9
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:49
msgid "Vertical pane position"
msgstr "Pozicioni i panelit vertikal"
-#: ../addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:10
+#: addressbook/gui/component/apps_evolution_addressbook.schemas.in.in.h:10
msgid "Whether to show the preview pane."
msgstr "Nëse duhet shfaqur paneli i pamjes së parë."
-#: ../addressbook/gui/component/ldap-config.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/cal-attachment.glade.h:1
-#: ../calendar/gui/dialogs/cal-prefs-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/url-editor-dialog.glade.h:1
-#: ../composer/e-msg-composer-attachment.glade.h:1
-#: ../mail/mail-dialogs.glade.h:6 ../mail/message-tags.glade.h:1
-#: ../plugins/shared-folder/properties.glade.h:1
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:1
+#: addressbook/gui/component/ldap-config.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/cal-attachment.glade.h:1
+#: calendar/gui/dialogs/cal-prefs-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/url-editor-dialog.glade.h:1
+#: composer/e-msg-composer-attachment.glade.h:1 mail/mail-dialogs.glade.h:6
+#: mail/message-tags.glade.h:1 plugins/shared-folder/properties.glade.h:1
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:1
msgid "*"
msgstr "*"
-#: ../addressbook/gui/component/ldap-config.glade.h:2
+#: addressbook/gui/component/ldap-config.glade.h:2
msgid "1"
msgstr "1"
-#: ../addressbook/gui/component/ldap-config.glade.h:3
+#: addressbook/gui/component/ldap-config.glade.h:3
msgid "3268"
msgstr "3268"
-#: ../addressbook/gui/component/ldap-config.glade.h:4
+#: addressbook/gui/component/ldap-config.glade.h:4
msgid "389"
msgstr "389"
-#: ../addressbook/gui/component/ldap-config.glade.h:5
+#: addressbook/gui/component/ldap-config.glade.h:5
msgid "5"
msgstr "5"
-#: ../addressbook/gui/component/ldap-config.glade.h:6
+#: 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
+#: addressbook/gui/component/ldap-config.glade.h:7
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:2
msgid "<b>Authentication</b>"
msgstr "<b>Identifikimi</b>"
-#: ../addressbook/gui/component/ldap-config.glade.h:8
+#: addressbook/gui/component/ldap-config.glade.h:8
msgid "<b>Display</b>"
msgstr "<b>Monitori</b>"
-#: ../addressbook/gui/component/ldap-config.glade.h:9
+#: addressbook/gui/component/ldap-config.glade.h:9
msgid "<b>Downloading</b>"
msgstr "<b>Duke shkarkuar</b>"
-#: ../addressbook/gui/component/ldap-config.glade.h:10
+#: addressbook/gui/component/ldap-config.glade.h:10
msgid "<b>Searching</b>"
msgstr "<b>Duke kërkuar</b>"
-#: ../addressbook/gui/component/ldap-config.glade.h:11
+#: addressbook/gui/component/ldap-config.glade.h:11
msgid "<b>Server Information</b>"
msgstr "<b>Informacione mbi server-in</b>"
-#: ../addressbook/gui/component/ldap-config.glade.h:12
+#: addressbook/gui/component/ldap-config.glade.h:12
msgid "<b>Type:</b>"
msgstr "<b>Lloji:</b>"
-#: ../addressbook/gui/component/ldap-config.glade.h:13
+#: addressbook/gui/component/ldap-config.glade.h:13
msgid "Add Address Book"
msgstr "Shto Rubrikë"
-#: ../addressbook/gui/component/ldap-config.glade.h:15
-#: ../mail/em-account-editor.c:302
+#: addressbook/gui/component/ldap-config.glade.h:15
+#: mail/em-account-editor.c:302
msgid "Always"
msgstr "Gjithmonë"
-#: ../addressbook/gui/component/ldap-config.glade.h:16
+#: addressbook/gui/component/ldap-config.glade.h:16
msgid "Anonymously"
msgstr "Anonimisht"
-#: ../addressbook/gui/component/ldap-config.glade.h:17
+#: addressbook/gui/component/ldap-config.glade.h:17
msgid "Basic"
msgstr "Bazë"
-#: ../addressbook/gui/component/ldap-config.glade.h:19
+#: addressbook/gui/component/ldap-config.glade.h:19
msgid "Distinguished name"
msgstr "Emri dallues"
-#: ../addressbook/gui/component/ldap-config.glade.h:20
+#: addressbook/gui/component/ldap-config.glade.h:20
msgid "Email address"
msgstr "Adresa Email"
-#: ../addressbook/gui/component/ldap-config.glade.h:21
+#: addressbook/gui/component/ldap-config.glade.h:21
msgid "Evolution will use this email address to authenticate you with the server."
msgstr "Evolution do të përdorë këtë adresë email për t'ju autentifikuar me serverin."
-#: ../addressbook/gui/component/ldap-config.glade.h:22
+#: addressbook/gui/component/ldap-config.glade.h:22
msgid "Find Possible Search Bases"
msgstr "Gjej baza të mundëshme kërkimi"
-#: ../addressbook/gui/component/ldap-config.glade.h:24
+#: addressbook/gui/component/ldap-config.glade.h:24
msgid "Lo_gin:"
msgstr "Fu_tu:"
-#: ../addressbook/gui/component/ldap-config.glade.h:25
-#: ../mail/em-account-editor.c:300
+#: addressbook/gui/component/ldap-config.glade.h:25
+#: mail/em-account-editor.c:300
msgid "Never"
msgstr "Asnjëherë"
-#: ../addressbook/gui/component/ldap-config.glade.h:26
+#: addressbook/gui/component/ldap-config.glade.h:26
msgid "One"
msgstr "Një"
-#: ../addressbook/gui/component/ldap-config.glade.h:27
+#: addressbook/gui/component/ldap-config.glade.h:27
msgid "Search _base:"
msgstr "Baza e _kërkimit:"
-#: ../addressbook/gui/component/ldap-config.glade.h:28
+#: 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."
@@ -936,7 +919,7 @@ msgstr ""
"Po të zgjidhni këtë opcion do të thotë që Evolution do të lidhet me server-"
"in tuaj LDAP vetëm nëqoftëse serveri juaj LDAP suporton SSL apo TLS."
-#: ../addressbook/gui/component/ldap-config.glade.h:29
+#: 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 "
@@ -948,7 +931,7 @@ msgstr ""
"mbrohet nga një firewall gjatë punës, Evolution nuk ka nevojë të përdorë SSL/"
"TLS sepse lidhja juaj është e sigurtë."
-#: ../addressbook/gui/component/ldap-config.glade.h:30
+#: 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 "
@@ -958,15 +941,15 @@ msgstr ""
"TLS. Kjo do të ketë si pasojë që lidhja juaj të jetë e pasigurtë, dhe ju do "
"të jeni i pambrojtur ndaj exploits. "
-#: ../addressbook/gui/component/ldap-config.glade.h:31
+#: addressbook/gui/component/ldap-config.glade.h:31
msgid "Sub"
msgstr "Nën"
-#: ../addressbook/gui/component/ldap-config.glade.h:32
+#: addressbook/gui/component/ldap-config.glade.h:32
msgid "Supported Search Bases"
msgstr "Bazat e suportuara të kërkimit"
-#: ../addressbook/gui/component/ldap-config.glade.h:33
+#: 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 "
@@ -976,7 +959,7 @@ msgstr ""
"fillojnë. Nëse kjo fushë lihet bosh kërkimi do të fillojë nga rrënja e pemës "
"së kartelave."
-#: ../addressbook/gui/component/ldap-config.glade.h:34
+#: 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 "
@@ -988,7 +971,7 @@ msgstr ""
"të gjithë zërat nën bazën e kërkimit. Një gjerësi kërkimi \"një\" do të "
"përfshijë vetëm zërat një nivel nën bazë."
-#: ../addressbook/gui/component/ldap-config.glade.h:35
+#: addressbook/gui/component/ldap-config.glade.h:35
msgid ""
"This is the full name of your ldap server. For example, \"ldap.mycompany.com"
"\"."
@@ -996,7 +979,7 @@ msgstr ""
"Ky është emri i plotë i server-it tuaj ldap. Për shembull, \"ldap."
"shoqëriaime.com\"."
-#: ../addressbook/gui/component/ldap-config.glade.h:36
+#: 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."
@@ -1004,7 +987,7 @@ msgstr ""
"Ky është numri maksimum i zërave për tu shkarkuar. Duke vendosur këtë numër "
"tepër të madh do të ngadalsoni në menyrë të ndjeshme rubrikën tuaj."
-#: ../addressbook/gui/component/ldap-config.glade.h:37
+#: 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 "
@@ -1014,7 +997,7 @@ msgstr ""
"parasysh që për t'a vendosur këtë si \"Adresa Email\" nevoitet hyrje anonime "
"tek serveri juaj ldap."
-#: ../addressbook/gui/component/ldap-config.glade.h:38
+#: 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. "
@@ -1022,7 +1005,7 @@ msgstr ""
"Ky është emri për këtë server që do të duket tek lista kartelave tuaja të "
"Evolution. Ka vetëm qëllim paraqitje. "
-#: ../addressbook/gui/component/ldap-config.glade.h:39
+#: 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 "
@@ -1032,1370 +1015,1368 @@ msgstr ""
"lidhet. Një listë me portat standart ju vihet në dispozicion. Pyetni "
"administratorin tuaj të sistemit se çfarë porte duhet të përdorni."
-#: ../addressbook/gui/component/ldap-config.glade.h:40
+#: addressbook/gui/component/ldap-config.glade.h:40
msgid "Using distinguished name (DN)"
msgstr "Duke përdorur emër të përveçëm (DN)"
-#: ../addressbook/gui/component/ldap-config.glade.h:41
+#: addressbook/gui/component/ldap-config.glade.h:41
msgid "Using email address"
msgstr "Duke përdorur adresën email"
-#: ../addressbook/gui/component/ldap-config.glade.h:42
-#: ../mail/em-account-editor.c:301
+#: addressbook/gui/component/ldap-config.glade.h:42
+#: mail/em-account-editor.c:301
msgid "Whenever Possible"
msgstr "Sa herë të jetë e mundur"
-#: ../addressbook/gui/component/ldap-config.glade.h:43
+#: addressbook/gui/component/ldap-config.glade.h:43
msgid "_Add Address Book"
msgstr "_Shto Rubrikë"
-#: ../addressbook/gui/component/ldap-config.glade.h:44
+#: addressbook/gui/component/ldap-config.glade.h:44
msgid "_Download limit:"
msgstr "Limiti i _download:"
-#: ../addressbook/gui/component/ldap-config.glade.h:45
+#: addressbook/gui/component/ldap-config.glade.h:45
msgid "_Find Possible Search Bases"
msgstr "_Gjej baza të mundëshme kërkimi"
-#: ../addressbook/gui/component/ldap-config.glade.h:46
+#: addressbook/gui/component/ldap-config.glade.h:46
msgid "_Log in method:"
msgstr "Metoda e _identifikimit:"
-#: ../addressbook/gui/component/ldap-config.glade.h:47
-#: ../calendar/gui/dialogs/calendar-setup.c:243
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:8
-#: ../mail/mail-config.glade.h:160
+#: addressbook/gui/component/ldap-config.glade.h:47
+#: calendar/gui/dialogs/calendar-setup.c:243
+#: calendar/gui/dialogs/calendar-setup.glade.h:8 mail/mail-config.glade.h:160
msgid "_Name:"
msgstr "_Emri:"
-#: ../addressbook/gui/component/ldap-config.glade.h:48
+#: addressbook/gui/component/ldap-config.glade.h:48
msgid "_Port:"
msgstr "_Porta:"
-#: ../addressbook/gui/component/ldap-config.glade.h:49
+#: addressbook/gui/component/ldap-config.glade.h:49
msgid "_Search scope:"
msgstr "_Fusha e kërkimit:"
-#: ../addressbook/gui/component/ldap-config.glade.h:50
+#: addressbook/gui/component/ldap-config.glade.h:50
msgid "_Server:"
msgstr "_Serveri:"
-#: ../addressbook/gui/component/ldap-config.glade.h:51
+#: addressbook/gui/component/ldap-config.glade.h:51
msgid "_Timeout:"
msgstr "_Kohëzgjatja:"
-#: ../addressbook/gui/component/ldap-config.glade.h:52
+#: addressbook/gui/component/ldap-config.glade.h:52
msgid "_Use secure connection:"
msgstr "_Përdor lidhje të sigurt:"
-#: ../addressbook/gui/component/ldap-config.glade.h:53
+#: addressbook/gui/component/ldap-config.glade.h:53
msgid "cards"
msgstr "cards"
-#: ../addressbook/gui/component/ldap-config.glade.h:54
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:12
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:26
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:14
-#: ../filter/filter.glade.h:16 ../mail/em-account-editor.c:1885
-#: ../plugins/calendar-http/calendar-http.c:263
-#: ../plugins/calendar-weather/calendar-weather.c:564
+#: addressbook/gui/component/ldap-config.glade.h:54
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:12
+#: calendar/gui/dialogs/alarm-dialog.glade.h:26
+#: calendar/gui/dialogs/calendar-setup.glade.h:14 filter/filter.glade.h:16
+#: mail/em-account-editor.c:1885 plugins/calendar-http/calendar-http.c:263
+#: plugins/calendar-weather/calendar-weather.c:564
msgid "minutes"
msgstr "minuta"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:2
+#: addressbook/gui/contact-editor/contact-editor.glade.h:2
msgid "<b>Email</b>"
msgstr "<b>Email</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:3
+#: addressbook/gui/contact-editor/contact-editor.glade.h:3
msgid "<b>Home</b>"
msgstr "<b>Shtëpi</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:4
+#: addressbook/gui/contact-editor/contact-editor.glade.h:4
msgid "<b>Instant Messaging</b>"
msgstr "<b>Mesazhe të menjëhershëm</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:5
+#: addressbook/gui/contact-editor/contact-editor.glade.h:5
msgid "<b>Job</b>"
msgstr "<b>Punë</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:6
+#: addressbook/gui/contact-editor/contact-editor.glade.h:6
msgid "<b>Miscellaneous</b>"
msgstr "<b>Të ndryshme</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:7
+#: addressbook/gui/contact-editor/contact-editor.glade.h:7
msgid "<b>Other</b>"
msgstr "<b>Tjetër</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:8
+#: addressbook/gui/contact-editor/contact-editor.glade.h:8
msgid "<b>Telephone</b>"
msgstr "<b>Telefoni</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:9
+#: addressbook/gui/contact-editor/contact-editor.glade.h:9
msgid "<b>Web Addresses</b>"
msgstr "<b>Adresat Web</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:10
+#: addressbook/gui/contact-editor/contact-editor.glade.h:10
msgid "<b>Work</b>"
msgstr "<b>Punë</b>"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:11
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:182
-#: ../addressbook/gui/widgets/eab-contact-display.c:346
+#: addressbook/gui/contact-editor/contact-editor.glade.h:11
+#: addressbook/gui/contact-editor/e-contact-editor.c:182
+#: addressbook/gui/widgets/eab-contact-display.c:346
msgid "AIM"
msgstr "AIM"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:12
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:270
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:169
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.etspec.h:1
-#: ../addressbook/gui/widgets/e-minicard.c:181
+#: addressbook/gui/contact-editor/contact-editor.glade.h:12
+#: addressbook/gui/contact-editor/e-contact-editor.c:270
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:169
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.etspec.h:1
+#: addressbook/gui/widgets/e-minicard.c:181
msgid "Contact"
msgstr "Kontakti"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:13
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:531
+#: addressbook/gui/contact-editor/contact-editor.glade.h:13
+#: addressbook/gui/contact-editor/e-contact-editor.c:531
msgid "Contact Editor"
msgstr "Editori i kontakteve"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:14
+#: addressbook/gui/contact-editor/contact-editor.glade.h:14
msgid "Full _Name..."
msgstr "Emri dhe _mbiemri..."
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:15
+#: addressbook/gui/contact-editor/contact-editor.glade.h:15
msgid "Image"
msgstr "Figura"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:16
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:66
+#: addressbook/gui/contact-editor/contact-editor.glade.h:16
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:66
msgid "MSN Messenger"
msgstr "Messenger MSN"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:17
+#: addressbook/gui/contact-editor/contact-editor.glade.h:17
msgid "Mailing Address"
msgstr "Adresa e postës"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:18
+#: addressbook/gui/contact-editor/contact-editor.glade.h:18
msgid "Ni_ckname:"
msgstr "Ni_ckname:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:19
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:63
+#: addressbook/gui/contact-editor/contact-editor.glade.h:19
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:63
msgid "Novell Groupwise"
msgstr "Groupwise Novell"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:21
+#: addressbook/gui/contact-editor/contact-editor.glade.h:21
msgid "Personal Information"
msgstr "Informacione personale"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:22
+#: addressbook/gui/contact-editor/contact-editor.glade.h:22
msgid "Telephone"
msgstr "Telefoni"
#. red
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:23
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:235
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:199
-#: ../filter/filter-label.c:122 ../mail/em-migrate.c:1042
-#: ../mail/mail-config.c:77 ../mail/mail-config.glade.h:148
+#: addressbook/gui/contact-editor/contact-editor.glade.h:23
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:235
+#: addressbook/gui/contact-editor/e-contact-editor.c:199
+#: filter/filter-label.c:122 mail/em-migrate.c:1042 mail/mail-config.c:77
+#: mail/mail-config.glade.h:148
msgid "Work"
msgstr "Punë"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:24
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:6
+#: addressbook/gui/contact-editor/contact-editor.glade.h:24
+#: addressbook/gui/contact-editor/fulladdr.glade.h:6
msgid "_Address:"
msgstr "_Adresa:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:25
+#: addressbook/gui/contact-editor/contact-editor.glade.h:25
msgid "_Anniversary:"
msgstr "_Përvjetori:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:26
+#: addressbook/gui/contact-editor/contact-editor.glade.h:26
msgid "_Assistant:"
msgstr "_Asistenti:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:27
+#: addressbook/gui/contact-editor/contact-editor.glade.h:27
msgid "_Birthday:"
msgstr "_Ditëlindja:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:28
-#: ../plugins/itip-formatter/itip-view.c:1619
+#: addressbook/gui/contact-editor/contact-editor.glade.h:28
+#: plugins/itip-formatter/itip-view.c:1619
msgid "_Calendar:"
msgstr "_Kalendari:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:29
+#: addressbook/gui/contact-editor/contact-editor.glade.h:29
msgid "_Categories"
msgstr "_Kategoritë"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:30
+#: addressbook/gui/contact-editor/contact-editor.glade.h:30
msgid "_City:"
msgstr "_Qyteti:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:31
+#: addressbook/gui/contact-editor/contact-editor.glade.h:31
msgid "_Company:"
msgstr "_Shoqëria:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:32
+#: addressbook/gui/contact-editor/contact-editor.glade.h:32
msgid "_Country:"
msgstr "_Shteti:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:33
+#: addressbook/gui/contact-editor/contact-editor.glade.h:33
msgid "_Department:"
msgstr "_Dipartimenti:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:34
+#: addressbook/gui/contact-editor/contact-editor.glade.h:34
msgid "_File under:"
msgstr "_File nën:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:35
+#: addressbook/gui/contact-editor/contact-editor.glade.h:35
msgid "_Free/Busy:"
msgstr "_I lirë/zënë:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:36
+#: addressbook/gui/contact-editor/contact-editor.glade.h:36
msgid "_Home Page:"
msgstr "_Faqja web:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:37
+#: addressbook/gui/contact-editor/contact-editor.glade.h:37
msgid "_Manager:"
msgstr "_Trajtuesi:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:38
+#: addressbook/gui/contact-editor/contact-editor.glade.h:38
msgid "_Notes:"
msgstr "_Shënime:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:39
+#: addressbook/gui/contact-editor/contact-editor.glade.h:39
msgid "_Office:"
msgstr "_Zyrë:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:40
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:7
+#: addressbook/gui/contact-editor/contact-editor.glade.h:40
+#: addressbook/gui/contact-editor/fulladdr.glade.h:7
msgid "_PO Box:"
msgstr "_Kutia e postës:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:41
+#: addressbook/gui/contact-editor/contact-editor.glade.h:41
msgid "_Profession:"
msgstr "_Profesioni:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:42
+#: addressbook/gui/contact-editor/contact-editor.glade.h:42
msgid "_Spouse:"
msgstr "_Bashkëshortja:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:43
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:8
+#: addressbook/gui/contact-editor/contact-editor.glade.h:43
+#: addressbook/gui/contact-editor/fulladdr.glade.h:8
msgid "_State/Province:"
msgstr "_Shteti/Rrethi:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:44
-#: ../addressbook/gui/contact-editor/fullname.glade.h:18
+#: addressbook/gui/contact-editor/contact-editor.glade.h:44
+#: addressbook/gui/contact-editor/fullname.glade.h:18
msgid "_Title:"
msgstr "_Titulli:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:45
+#: addressbook/gui/contact-editor/contact-editor.glade.h:45
msgid "_Video Chat:"
msgstr "Chat _video:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:46
+#: addressbook/gui/contact-editor/contact-editor.glade.h:46
msgid "_Wants to receive HTML mail"
msgstr "_Dëshiron të marrë email në HTML"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:47
+#: addressbook/gui/contact-editor/contact-editor.glade.h:47
msgid "_Web Log:"
msgstr "_Web Log:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:48
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:13
+#: addressbook/gui/contact-editor/contact-editor.glade.h:48
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:13
msgid "_Where:"
msgstr "_Ku:"
-#: ../addressbook/gui/contact-editor/contact-editor.glade.h:49
+#: addressbook/gui/contact-editor/contact-editor.glade.h:49
msgid "_Zip/Postal Code:"
msgstr "Kodi _Zip (postal):"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:96
-#: ../addressbook/gui/widgets/eab-contact-display.c:365
-#: ../addressbook/gui/widgets/eab-contact-display.c:380
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:96
+#: addressbook/gui/widgets/eab-contact-display.c:365
+#: addressbook/gui/widgets/eab-contact-display.c:380
msgid "Address"
msgstr "Adresa"
-#: ../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:298
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:183
-#: ../addressbook/gui/widgets/e-addressbook-model.c:310
-#: ../addressbook/gui/widgets/e-addressbook-reflow-adapter.c:398
-#: ../addressbook/gui/widgets/e-minicard-label.c:164
-#: ../addressbook/gui/widgets/e-minicard-view-widget.c:119
-#: ../addressbook/gui/widgets/e-minicard-view.c:519
-#: ../addressbook/gui/widgets/e-minicard.c:174
+#: 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:298
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:183
+#: addressbook/gui/widgets/e-addressbook-model.c:310
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:398
+#: addressbook/gui/widgets/e-minicard-label.c:164
+#: addressbook/gui/widgets/e-minicard-view-widget.c:119
+#: addressbook/gui/widgets/e-minicard-view.c:519
+#: addressbook/gui/widgets/e-minicard.c:174
msgid "Editable"
msgstr "Pjesë e ndryshueshme"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:136
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:136
msgid "United States"
msgstr "Shtetet e Bashkuara"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:137
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:137
msgid "Afghanistan"
msgstr "Afganistani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:138
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:138
msgid "Albania"
msgstr "Shqipëria"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:139
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:139
msgid "Algeria"
msgstr "Algjeria"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:140
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:140
msgid "American Samoa"
msgstr "Samoa Amerikane"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:141
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:141
msgid "Andorra"
msgstr "Andora"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:142
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:142
msgid "Angola"
msgstr "Angola"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:143
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:143
msgid "Anguilla"
msgstr "Anguila"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:144
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:144
msgid "Antarctica"
msgstr "Antarktika"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:145
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:145
msgid "Antigua And Barbuda"
msgstr "Antigua dhe Barbuda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:146
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:146
msgid "Argentina"
msgstr "Argjentina"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:147
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:147
msgid "Armenia"
msgstr "Armenia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:148
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:148
msgid "Aruba"
msgstr "Aruba"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:149
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:149
msgid "Australia"
msgstr "Australia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:150
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:150
msgid "Austria"
msgstr "Austria"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:151
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:151
msgid "Azerbaijan"
msgstr "Azerbaijan"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:152
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:152
msgid "Bahamas"
msgstr "Bahamas"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:153
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:153
msgid "Bahrain"
msgstr "Bahrain"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:154
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:154
msgid "Bangladesh"
msgstr "Bangladeshi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:155
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:155
msgid "Barbados"
msgstr "Barbados"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:156
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:156
msgid "Belarus"
msgstr "Bjellorusia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:157
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:157
msgid "Belgium"
msgstr "Belgjika"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:158
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:158
msgid "Belize"
msgstr "Belize"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:159
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:159
msgid "Benin"
msgstr "Benin"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:160
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:160
msgid "Bermuda"
msgstr "Bermuda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:161
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:161
msgid "Bhutan"
msgstr "Bhutan"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:162
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:162
msgid "Bolivia"
msgstr "Bolivia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:163
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:163
msgid "Bosnia And Herzegowina"
msgstr "Bosnja dhe Herzegovina"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:164
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:164
msgid "Botswana"
msgstr "Botswana"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:165
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:165
msgid "Bouvet Island"
msgstr "Ishulli Bouvet"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:166
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:166
msgid "Brazil"
msgstr "Brazili"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:167
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:167
msgid "British Indian Ocean Territory"
msgstr "Territoret Britanike të Oqeanit Indian"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:168
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:168
msgid "Brunei Darussalam"
msgstr "Brunei Darussalam"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:169
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:169
msgid "Bulgaria"
msgstr "Bullgaria"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:170
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:170
msgid "Burkina Faso"
msgstr "Burkina Faso"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:171
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:171
msgid "Burundi"
msgstr "Burundi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:172
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:172
msgid "Cambodia"
msgstr "Kamboxhia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:173
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:173
msgid "Cameroon"
msgstr "Kameruni"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:174
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:174
msgid "Canada"
msgstr "Kanada"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:175
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:175
msgid "Cape Verde"
msgstr "Kepi i Gjelbërt"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:176
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:176
msgid "Cayman Islands"
msgstr "Ishujt Kajman"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:177
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:177
msgid "Central African Republic"
msgstr "Republika e Afrikës Qendrore"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:178
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:178
msgid "Chad"
msgstr "Çad"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:179
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:179
msgid "Chile"
msgstr "Kili"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:180
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:180
msgid "China"
msgstr "Kina"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:181
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:181
msgid "Christmas Island"
msgstr "Ishulli i Krishtlindjes"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:182
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:182
msgid "Cocos (Keeling) Islands"
msgstr "Ishujt Kokos (Keeling)"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:183
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:183
msgid "Colombia"
msgstr "Kolumbia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:184
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:184
msgid "Comoros"
msgstr "Komoros"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:185
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:185
msgid "Congo"
msgstr "Kongo"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:186
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:186
msgid "Congo, The Democratic Republic Of The"
msgstr "Kongo, Republika Demokratike e"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:187
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:187
msgid "Cook Islands"
msgstr "Ishujt Cook"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:188
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:188
msgid "Costa Rica"
msgstr "Kosta Rika"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:189
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:189
msgid "Cote d'Ivoire"
msgstr "Cote d'Ivoire"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:190
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:190
msgid "Croatia"
msgstr "Kroacia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:191
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:191
msgid "Cuba"
msgstr "Kuba"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:192
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:192
msgid "Cyprus"
msgstr "Qipro"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:193
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:193
msgid "Czech Republic"
msgstr "Republika Çeke"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:194
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:194
msgid "Denmark"
msgstr "Danimarka"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:195
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:195
msgid "Djibouti"
msgstr "Xhibouti"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:196
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:196
msgid "Dominica"
msgstr "Dominika"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:197
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:197
msgid "Dominican Republic"
msgstr "Republika Dominikane"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:198
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:198
msgid "Ecuador"
msgstr "Ekuadori"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:199
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:199
msgid "Egypt"
msgstr "Egjipti"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:200
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:200
msgid "El Salvador"
msgstr "El Salvador"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:201
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:201
msgid "Equatorial Guinea"
msgstr "Guinea Ekuatoriale"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:202
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:202
msgid "Eritrea"
msgstr "Eritrea"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:203
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:203
msgid "Estonia"
msgstr "Estonia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:204
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:204
msgid "Ethiopia"
msgstr "Etiopia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:205
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:205
msgid "Falkland Islands"
msgstr "Ishujt Falkland"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:206
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:206
msgid "Faroe Islands"
msgstr "Ishujt Faroe"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:207
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:207
msgid "Fiji"
msgstr "Fixhi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:208
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:208
msgid "Finland"
msgstr "Finlanda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:209
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:209
msgid "France"
msgstr "Franca"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:210
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:210
msgid "French Guiana"
msgstr "Guiana Franceze"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:211
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:211
msgid "French Polynesia"
msgstr "Polinezia Franceze"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:212
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:212
msgid "French Southern Territories"
msgstr "Territoret e Francës Jugore"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:213
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:213
msgid "Gabon"
msgstr "Gabon"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:214
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:214
msgid "Gambia"
msgstr "Gambia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:215
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:215
msgid "Georgia"
msgstr "Gjeorgjia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:216
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:216
msgid "Germany"
msgstr "Gjermania"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:217
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:217
msgid "Ghana"
msgstr "Ghana"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:218
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:218
msgid "Gibraltar"
msgstr "Gjibraltari"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:219
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:219
msgid "Greece"
msgstr "Greqia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:220
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:220
msgid "Greenland"
msgstr "Grenlanda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:221
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:221
msgid "Grenada"
msgstr "Grenada"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:222
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:222
msgid "Guadeloupe"
msgstr "Guadeloupe"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:223
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:223
msgid "Guam"
msgstr "Guam"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:224
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:224
msgid "Guatemala"
msgstr "Guatemala"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:225
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:225
msgid "Guernsey"
msgstr "Guernsey"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:226
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:226
msgid "Guinea"
msgstr "Guinea"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:227
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:227
msgid "Guinea-bissau"
msgstr "Guinea-bissau"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:228
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:228
msgid "Guyana"
msgstr "Guijana"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:229
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:229
msgid "Haiti"
msgstr "Haiti"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:230
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:230
msgid "Heard And McDonald Islands"
msgstr "Heard And McDonald Islands"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:231
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:231
msgid "Holy See"
msgstr "Holy See"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:232
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:232
msgid "Honduras"
msgstr "Honduras"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:233
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:233
msgid "Hong Kong"
msgstr "Hong Kong"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:234
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:234
msgid "Hungary"
msgstr "Hungaria"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:235
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:235
msgid "Iceland"
msgstr "Islanda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:236
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:236
msgid "India"
msgstr "India"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:237
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:237
msgid "Indonesia"
msgstr "Indonezia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:238
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:238
msgid "Iran"
msgstr "Irani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:239
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:239
msgid "Iraq"
msgstr "Iraku"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:240
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:240
msgid "Ireland"
msgstr "Irlanda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:241
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:241
msgid "Isle of Man"
msgstr "Ishulli i Man"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:242
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:242
msgid "Israel"
msgstr "Izraeli"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:243
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:243
msgid "Italy"
msgstr "Italia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:244
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:244
msgid "Jamaica"
msgstr "Xhamajka"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:245
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:245
msgid "Japan"
msgstr "Japonia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:246
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:246
msgid "Jersey"
msgstr "Jersey"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:247
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:247
msgid "Jordan"
msgstr "Jordania"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:248
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:248
msgid "Kazakhstan"
msgstr "Kazakistan"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:249
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:249
msgid "Kenya"
msgstr "Kenia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:250
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:250
msgid "Kiribati"
msgstr "Kiribati"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:251
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:251
msgid "Korea, Democratic People's Republic Of"
msgstr "Korea, Republika Popullore Demokratike e"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:252
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:252
msgid "Korea, Republic Of"
msgstr "Korea, Republika e"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:253
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:253
msgid "Kuwait"
msgstr "Kuvajti"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:254
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:254
msgid "Kyrgyzstan"
msgstr "Kirgistani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:255
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:255
msgid "Laos"
msgstr "Laos"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:256
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:256
msgid "Latvia"
msgstr "Letonia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:257
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:257
msgid "Lebanon"
msgstr "Libani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:258
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:258
msgid "Lesotho"
msgstr "Lesoto"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:259
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:259
msgid "Liberia"
msgstr "Liberia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:260
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:260
msgid "Libya"
msgstr "Libia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:261
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:261
msgid "Liechtenstein"
msgstr "Lihtenshtejni"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:262
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:262
msgid "Lithuania"
msgstr "Lituania"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:263
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:263
msgid "Luxembourg"
msgstr "Luksemburgu"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:264
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:264
msgid "Macao"
msgstr "Makao"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:265
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:265
msgid "Macedonia"
msgstr "Maqedonia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:266
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:266
msgid "Madagascar"
msgstr "Madagaskar"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:267
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:267
msgid "Malawi"
msgstr "Malawi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:268
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:268
msgid "Malaysia"
msgstr "Malejzia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:269
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:269
msgid "Maldives"
msgstr "Maldivet"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:270
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:270
msgid "Mali"
msgstr "Mali"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:271
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:271
msgid "Malta"
msgstr "Malta"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:272
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:272
msgid "Marshall Islands"
msgstr "Ishujt Marshall"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:273
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:273
msgid "Martinique"
msgstr "Martinika"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:274
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:274
msgid "Mauritania"
msgstr "Mauritania"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:275
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:275
msgid "Mauritius"
msgstr "Mauritius"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:276
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:276
msgid "Mayotte"
msgstr "Mayotte"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:277
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:277
msgid "Mexico"
msgstr "Mexico"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:278
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:278
msgid "Micronesia"
msgstr "Mikronezia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:279
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:279
msgid "Moldova, Republic Of"
msgstr "Moldovia, Republika e"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:280
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:280
msgid "Monaco"
msgstr "Monako"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:281
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:281
msgid "Mongolia"
msgstr "Mongolia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:282
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:282
msgid "Montserrat"
msgstr "Montserrat"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:283
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:283
msgid "Morocco"
msgstr "Maroku"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:284
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:284
msgid "Mozambique"
msgstr "Mozambiku"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:285
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:285
msgid "Myanmar"
msgstr "Myanmar"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:286
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:286
msgid "Namibia"
msgstr "Namibia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:287
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:287
msgid "Nauru"
msgstr "Nauru"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:288
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:288
msgid "Nepal"
msgstr "Nepali"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:289
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:289
msgid "Netherlands"
msgstr "Hollanda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:290
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:290
msgid "Netherlands Antilles"
msgstr "Antilet Hollandeze"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:291
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:291
msgid "New Caledonia"
msgstr "Kaledonia e Re"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:292
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:292
msgid "New Zealand"
msgstr "Zelanda e Re"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:293
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:293
msgid "Nicaragua"
msgstr "Nikaragua"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:294
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:294
msgid "Niger"
msgstr "Nigjeri"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:295
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:295
msgid "Nigeria"
msgstr "Nigjeria"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:296
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:296
msgid "Niue"
msgstr "Niue"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:297
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:297
msgid "Norfolk Island"
msgstr "Ishulli Norfolk"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:298
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:298
msgid "Northern Mariana Islands"
msgstr "Ishujt e Marianës Veriore"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:299
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:299
msgid "Norway"
msgstr "Norvegjia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:300
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:300
msgid "Oman"
msgstr "Omani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:301
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:301
msgid "Pakistan"
msgstr "Pakistani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:302
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:302
msgid "Palau"
msgstr "Palau"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:303
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:303
msgid "Palestinian Territory"
msgstr "Territoret Palestineze"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:304
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:304
msgid "Panama"
msgstr "Panama"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:305
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:305
msgid "Papua New Guinea"
msgstr "Guinea e Re Papua"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:306
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:306
msgid "Paraguay"
msgstr "Paraguaj"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:307
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:307
msgid "Peru"
msgstr "Peru"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:308
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:308
msgid "Philippines"
msgstr "Filipinet"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:309
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:309
msgid "Pitcairn"
msgstr "Pitcairn"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:310
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:310
msgid "Poland"
msgstr "Polonia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:311
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:311
msgid "Portugal"
msgstr "Portugalia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:312
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:312
msgid "Puerto Rico"
msgstr "Porto Rico"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:313
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:313
msgid "Qatar"
msgstr "Katari"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:314
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:314
msgid "Reunion"
msgstr "Mbledhje"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:315
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:315
msgid "Romania"
msgstr "Rumania"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:316
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:316
msgid "Russian Federation"
msgstr "Federata Ruse"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:317
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:317
msgid "Rwanda"
msgstr "Ruanda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:318
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:318
msgid "Saint Kitts And Nevis"
msgstr "Saint Kitts And Nevis"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:319
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:319
msgid "Saint Lucia"
msgstr "Shën Lucia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:320
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:320
msgid "Saint Vincent And The Grenadines"
msgstr "Saint Vincent dhe Grenadinet"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:321
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:321
msgid "Samoa"
msgstr "Samoa"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:322
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:322
msgid "San Marino"
msgstr "San Marino"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:323
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:323
msgid "Sao Tome And Principe"
msgstr "Sao Tome And Principe"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:324
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:324
msgid "Saudi Arabia"
msgstr "Arabia Saudite"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:325
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:325
msgid "Senegal"
msgstr "Senegali"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:326
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:326
msgid "Serbia And Montenegro"
msgstr "Sërbia dhe Mali i Zi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:327
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:327
msgid "Seychelles"
msgstr "Seychelles"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:328
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:328
msgid "Sierra Leone"
msgstr "Sierra Leone"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:329
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:329
msgid "Singapore"
msgstr "Singapori"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:330
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:330
msgid "Slovakia"
msgstr "Sllovakia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:331
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:331
msgid "Slovenia"
msgstr "Sllovenia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:332
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:332
msgid "Solomon Islands"
msgstr "Ishujt Solomon"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:333
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:333
msgid "Somalia"
msgstr "Somalia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:334
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:334
msgid "South Africa"
msgstr "Afrika e Jugut"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:335
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:335
msgid "South Georgia And The South Sandwich Islands"
msgstr "South Georgia And The South Sandwich Islands"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:336
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:336
msgid "Spain"
msgstr "Spanja"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:337
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:337
msgid "Sri Lanka"
msgstr "Sri Lanka"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:338
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:338
msgid "St. Helena"
msgstr "St. Helena"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:339
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:339
msgid "St. Pierre And Miquelon"
msgstr "St. Pierre And Miquelon"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:340
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:340
msgid "Sudan"
msgstr "Sudani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:341
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:341
msgid "Suriname"
msgstr "Suriname"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:342
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:342
msgid "Svalbard And Jan Mayen Islands"
msgstr "Svalbard And Jan Mayen Islands"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:343
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:343
msgid "Swaziland"
msgstr "Svaziland"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:344
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:344
msgid "Sweden"
msgstr "Suedia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:345
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:345
msgid "Switzerland"
msgstr "Zvicra"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:346
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:346
msgid "Syria"
msgstr "Siria"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:347
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:347
msgid "Taiwan"
msgstr "Tajvani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:348
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:348
msgid "Tajikistan"
msgstr "Taxhikistani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:349
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:349
msgid "Tanzania, United Republic Of"
msgstr "Tanzania, Republika e Bashkuar e"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:350
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:350
msgid "Thailand"
msgstr "Tajlanda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:351
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:351
msgid "Timor-Leste"
msgstr "Timor-Leste"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:352
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:352
msgid "Togo"
msgstr "Togo"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:353
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:353
msgid "Tokelau"
msgstr "Tokelau"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:354
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:354
msgid "Tonga"
msgstr "Tonga"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:355
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:355
msgid "Trinidad And Tobago"
msgstr "Trinidad And Tobago"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:356
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:356
msgid "Tunisia"
msgstr "Tunizia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:357
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:357
msgid "Turkey"
msgstr "Turqia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:358
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:358
msgid "Turkmenistan"
msgstr "Turkmenistani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:359
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:359
msgid "Turks And Caicos Islands"
msgstr "Turks And Caicos Islands"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:360
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:360
msgid "Tuvalu"
msgstr "Tuvalu"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:361
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:361
msgid "Uganda"
msgstr "Uganda"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:362
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:362
msgid "Ukraine"
msgstr "Ukrahina"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:363
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:363
msgid "United Arab Emirates"
msgstr "Emiratet e Bashkuara Arabe"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:364
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:364
msgid "United Kingdom"
msgstr "Mbretëria e Bashkuar"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:365
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:365
msgid "United States Minor Outlying Islands"
msgstr "Shtetet e Bashkuara të Ishujve të Minor Outlying"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:366
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:366
msgid "Uruguay"
msgstr "Uruguaj"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:367
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:367
msgid "Uzbekistan"
msgstr "Uzbekistani"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:368
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:368
msgid "Vanuatu"
msgstr "Vanuatu"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:369
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:369
msgid "Venezuela"
msgstr "Venezuela"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:370
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:370
msgid "Viet Nam"
msgstr "Vjet Nam"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:371
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:371
msgid "Virgin Islands, British"
msgstr "Ishujt Virgin, Britanikë"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:372
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:372
msgid "Virgin Islands, U.S."
msgstr "Ishujt Virgin, U.S."
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:373
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:373
msgid "Wallis And Futuna Islands"
msgstr "Wallis And Futuna Islands"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:374
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:374
msgid "Western Sahara"
msgstr "Sahara Perëndimore"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:375
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:375
msgid "Yemen"
msgstr "Jemen"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:376
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:376
msgid "Zambia"
msgstr "Zambia"
-#: ../addressbook/gui/contact-editor/e-contact-editor-address.c:377
+#: addressbook/gui/contact-editor/e-contact-editor-address.c:377
msgid "Zimbabwe"
msgstr "Zimbabve"
-#: ../addressbook/gui/contact-editor/e-contact-editor-fullname.c:89
-#: ../plugins/plugin-manager/plugin-manager.c:44
-#: ../plugins/save-attachments/save-attachments.c:362
+#: addressbook/gui/contact-editor/e-contact-editor-fullname.c:89
+#: plugins/plugin-manager/plugin-manager.c:44
+#: plugins/save-attachments/save-attachments.c:362
msgid "Name"
msgstr "Emri"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:62
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:62
msgid "AOL Instant Messenger"
msgstr "Instant Messenger AOL"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:64
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:183
-#: ../addressbook/gui/widgets/eab-contact-display.c:349
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:64
+#: addressbook/gui/contact-editor/e-contact-editor.c:183
+#: addressbook/gui/widgets/eab-contact-display.c:349
msgid "Jabber"
msgstr "Jabber"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:65
+#: 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:186
-#: ../addressbook/gui/widgets/eab-contact-display.c:348
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:67
+#: addressbook/gui/contact-editor/e-contact-editor.c:186
+#: addressbook/gui/widgets/eab-contact-display.c:348
msgid "ICQ"
msgstr "ICQ"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:118
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:118
msgid "Service"
msgstr "Shërbimi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:127
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:587
-#: ../calendar/gui/e-cal-list-view.etspec.h:3
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:127
+#: calendar/gui/dialogs/cal-prefs-dialog.c:587
+#: calendar/gui/e-cal-list-view.etspec.h:3
msgid "Location"
msgstr "Vendodhja"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:134
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:134
msgid "Username"
msgstr "Përdoruesi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:231
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:200
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:231
+#: addressbook/gui/contact-editor/e-contact-editor.c:200
msgid "Home"
msgstr "Shtëpi"
-#: ../addressbook/gui/contact-editor/e-contact-editor-im.c:239
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:201
+#: addressbook/gui/contact-editor/e-contact-editor-im.c:239
+#: addressbook/gui/contact-editor/e-contact-editor.c:201
msgid "Other"
msgstr "Tjetër"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:184
-#: ../addressbook/gui/widgets/eab-contact-display.c:351
+#: addressbook/gui/contact-editor/e-contact-editor.c:184
+#: addressbook/gui/widgets/eab-contact-display.c:351
msgid "Yahoo"
msgstr "Yahoo"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:185
-#: ../addressbook/gui/widgets/eab-contact-display.c:350
+#: addressbook/gui/contact-editor/e-contact-editor.c:185
+#: addressbook/gui/widgets/eab-contact-display.c:350
msgid "MSN"
msgstr "MSN"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:187
-#: ../addressbook/gui/widgets/eab-contact-display.c:347
+#: addressbook/gui/contact-editor/e-contact-editor.c:187
+#: addressbook/gui/widgets/eab-contact-display.c:347
msgid "GroupWise"
msgstr "GroupWise"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:256
+#: addressbook/gui/contact-editor/e-contact-editor.c:256
msgid "Source Book"
msgstr "Libri burues"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:263
+#: addressbook/gui/contact-editor/e-contact-editor.c:263
msgid "Target Book"
msgstr "Libri objekt"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:277
+#: addressbook/gui/contact-editor/e-contact-editor.c:277
msgid "Is New Contact"
msgstr "Është Kontakt i Ri"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:284
+#: addressbook/gui/contact-editor/e-contact-editor.c:284
msgid "Writable Fields"
msgstr "Fusha të ndryshueshme"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:291
+#: addressbook/gui/contact-editor/e-contact-editor.c:291
msgid "Required Fields"
msgstr "Fushat e kërkuara"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:305
+#: addressbook/gui/contact-editor/e-contact-editor.c:305
msgid "Changed"
msgstr "Ndryshuar"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:2578
+#: addressbook/gui/contact-editor/e-contact-editor.c:2578
msgid "Please select an image for this contact"
msgstr "Ju lutem zgjidhni një figurë për këtë kontakt"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:2579
+#: addressbook/gui/contact-editor/e-contact-editor.c:2579
msgid "No image"
msgstr "Asnjë figurë"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:2855
+#: addressbook/gui/contact-editor/e-contact-editor.c:2855
msgid ""
"The contact data is invalid:\n"
"\n"
@@ -2403,27 +2384,27 @@ msgstr ""
"E dhëna e kontaktit është e pavlefshme:\n"
"\n"
-#: ../addressbook/gui/contact-editor/e-contact-editor.c:2907
+#: addressbook/gui/contact-editor/e-contact-editor.c:2907
msgid "Invalid contact."
msgstr "Kontakt i pavlefshëm."
-#: ../addressbook/gui/contact-editor/e-contact-quick-add.c:277
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:277
msgid "Contact Quick-Add"
msgstr "Shtimi i shpejtë i një kontakti"
-#: ../addressbook/gui/contact-editor/e-contact-quick-add.c:280
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:280
msgid "_Edit Full"
msgstr "Ndrysho _plotësisht"
-#: ../addressbook/gui/contact-editor/e-contact-quick-add.c:306
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:306
msgid "_Full name:"
msgstr "_Emri i plotë:"
-#: ../addressbook/gui/contact-editor/e-contact-quick-add.c:316
+#: addressbook/gui/contact-editor/e-contact-quick-add.c:316
msgid "E-_mail:"
msgstr "E-_mail:"
-#: ../addressbook/gui/contact-editor/eab-editor.c:326
+#: addressbook/gui/contact-editor/eab-editor.c:326
msgid ""
"Are you sure you want\n"
"to delete these contacts?"
@@ -2431,7 +2412,7 @@ msgstr ""
"Jeni i sigurt që dëshiron\n"
"të eleminosh këto kontakte?"
-#: ../addressbook/gui/contact-editor/eab-editor.c:329
+#: addressbook/gui/contact-editor/eab-editor.c:329
msgid ""
"Are you sure you want\n"
"to delete this contact?"
@@ -2439,184 +2420,184 @@ msgstr ""
"Jeni i sigurt që dëshiron\n"
"të eleminosh këtë kontakt?"
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:2
+#: addressbook/gui/contact-editor/fulladdr.glade.h:2
msgid "Address _2:"
msgstr "Adresa _2:"
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:3
+#: addressbook/gui/contact-editor/fulladdr.glade.h:3
msgid "Ci_ty:"
msgstr "Qy_teti:"
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:4
+#: addressbook/gui/contact-editor/fulladdr.glade.h:4
msgid "Countr_y:"
msgstr "Shtet_i:"
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:5
+#: addressbook/gui/contact-editor/fulladdr.glade.h:5
msgid "Full Address"
msgstr "Adresa e plotë"
-#: ../addressbook/gui/contact-editor/fulladdr.glade.h:9
+#: addressbook/gui/contact-editor/fulladdr.glade.h:9
msgid "_ZIP Code:"
msgstr "Kodi _ZIP (postal):"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:2
+#: addressbook/gui/contact-editor/fullname.glade.h:2
msgid "Dr."
msgstr "Dokt."
-#: ../addressbook/gui/contact-editor/fullname.glade.h:3
+#: addressbook/gui/contact-editor/fullname.glade.h:3
msgid "Esq."
msgstr "I nder."
-#: ../addressbook/gui/contact-editor/fullname.glade.h:4
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:15
+#: addressbook/gui/contact-editor/fullname.glade.h:4
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:15
msgid "Full Name"
msgstr "Emri dhe Mbiemri"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:5
+#: addressbook/gui/contact-editor/fullname.glade.h:5
msgid "I"
msgstr "I"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:6
+#: addressbook/gui/contact-editor/fullname.glade.h:6
msgid "II"
msgstr "II"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:7
+#: addressbook/gui/contact-editor/fullname.glade.h:7
msgid "III"
msgstr "III"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:8
+#: addressbook/gui/contact-editor/fullname.glade.h:8
msgid "Jr."
msgstr "Jr."
-#: ../addressbook/gui/contact-editor/fullname.glade.h:9
+#: addressbook/gui/contact-editor/fullname.glade.h:9
msgid "Miss"
msgstr "Znj.sha"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:10
+#: addressbook/gui/contact-editor/fullname.glade.h:10
msgid "Mr."
msgstr "Zt."
-#: ../addressbook/gui/contact-editor/fullname.glade.h:11
+#: addressbook/gui/contact-editor/fullname.glade.h:11
msgid "Mrs."
msgstr "Znj."
-#: ../addressbook/gui/contact-editor/fullname.glade.h:12
+#: addressbook/gui/contact-editor/fullname.glade.h:12
msgid "Ms."
msgstr "Znj."
-#: ../addressbook/gui/contact-editor/fullname.glade.h:13
+#: addressbook/gui/contact-editor/fullname.glade.h:13
msgid "Sr."
msgstr "Zt."
-#: ../addressbook/gui/contact-editor/fullname.glade.h:14
+#: addressbook/gui/contact-editor/fullname.glade.h:14
msgid "_First:"
msgstr "_Emri:"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:15
+#: addressbook/gui/contact-editor/fullname.glade.h:15
msgid "_Last:"
msgstr "_Mbiemri:"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:16
+#: addressbook/gui/contact-editor/fullname.glade.h:16
msgid "_Middle:"
msgstr "Emri i _dytë:"
-#: ../addressbook/gui/contact-editor/fullname.glade.h:17
+#: addressbook/gui/contact-editor/fullname.glade.h:17
msgid "_Suffix:"
msgstr "P_arashtesa:"
-#: ../addressbook/gui/contact-editor/im.glade.h:2
+#: addressbook/gui/contact-editor/im.glade.h:2
msgid "Add IM Account"
msgstr "Shto llogari IM"
-#: ../addressbook/gui/contact-editor/im.glade.h:3
+#: addressbook/gui/contact-editor/im.glade.h:3
msgid "_Account name:"
msgstr "Emri i _llogarisë:"
-#: ../addressbook/gui/contact-editor/im.glade.h:4
+#: addressbook/gui/contact-editor/im.glade.h:4
msgid "_IM Service:"
msgstr "Shërbimi _IM:"
-#: ../addressbook/gui/contact-editor/im.glade.h:5
-#: ../plugins/calendar-weather/calendar-weather.c:410
+#: addressbook/gui/contact-editor/im.glade.h:5
+#: plugins/calendar-weather/calendar-weather.c:410
msgid "_Location:"
msgstr "_Pozicioni:"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:1
+#: 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
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:4
msgid "Add an email to the List"
msgstr "Shto një email në Listë"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:5
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:817
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:5
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:817
msgid "Contact List Editor"
msgstr "Editori i listës së kontakteve"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:6
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:6
msgid "Insert email adresses from Adress Book"
msgstr "Shto adresat email nga rubrika"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:7
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:7
msgid "Members"
msgstr "Anëtarë"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:8
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:8
msgid "Remove an email address from the List"
msgstr "Hiq një adresë email nga Lista"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:9
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:9
msgid "_Hide addresses when sending mail to this list"
msgstr "_Mbulo adresën kur i dërgon një mail kësaj adrese"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:10
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:10
msgid "_List name:"
msgstr "Emri i _listës:"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:11
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:11
msgid "_Select"
msgstr "_Zgjidh"
-#: ../addressbook/gui/contact-list-editor/contact-list-editor.glade.h:12
+#: addressbook/gui/contact-list-editor/contact-list-editor.glade.h:12
msgid "_Type an email address or drag a contact into the list below:"
msgstr "_Shkruaj një adresë email ose zvarrit një kontakt nga lista e mëposhtme:"
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:162
-#: ../addressbook/gui/widgets/e-addressbook-model.c:296
-#: ../addressbook/gui/widgets/e-addressbook-reflow-adapter.c:384
-#: ../addressbook/gui/widgets/e-addressbook-view.c:223
-#: ../addressbook/gui/widgets/e-minicard-view-widget.c:105
-#: ../addressbook/gui/widgets/e-minicard-view.c:505
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:162
+#: addressbook/gui/widgets/e-addressbook-model.c:296
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:384
+#: addressbook/gui/widgets/e-addressbook-view.c:223
+#: addressbook/gui/widgets/e-minicard-view-widget.c:105
+#: addressbook/gui/widgets/e-minicard-view.c:505
msgid "Book"
msgstr "Libri"
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:176
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:176
msgid "Is New List"
msgstr "Është një listë e re"
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:707
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:707
msgid "_Members"
msgstr "_Anëtarë"
-#: ../addressbook/gui/contact-list-editor/e-contact-list-editor.c:710
+#: addressbook/gui/contact-list-editor/e-contact-list-editor.c:710
msgid "Contact List Members"
msgstr "Anëtarë të listës së kontakteve"
-#: ../addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:1
+#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:1
msgid "Changed Contact:"
msgstr "Kontakti i ndryshuar:"
-#: ../addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:2
+#: addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:2
msgid "Conflicting Contact:"
msgstr "Kontakti në konflikt:"
-#: ../addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:3
-#: ../addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:1
+#: 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 "U zbulua një kontakt i dyfishuar"
-#: ../addressbook/gui/merging/eab-contact-commit-duplicate-detected.glade.h:4
+#: 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?"
@@ -2624,15 +2605,15 @@ msgstr ""
"Adresa e ndryshuar apo emri i këtij kontakti ekziston\n"
"në këtë kartelë. Dëshironi t'a shtoni sidoqoftë?"
-#: ../addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:2
+#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:2
msgid "New Contact:"
msgstr "Kontakti i ri:"
-#: ../addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:3
+#: addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:3
msgid "Original Contact:"
msgstr "Kontakti origjinal:"
-#: ../addressbook/gui/merging/eab-contact-duplicate-detected.glade.h:4
+#: 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?"
@@ -2641,290 +2622,289 @@ msgstr ""
"kartelë. Dëshironi t'a shtoni sidoqoftë?"
#. FIXME: get the toplevel window...
-#: ../addressbook/gui/search/e-addressbook-search-dialog.c:160
-#: ../widgets/misc/e-filter-bar.c:156
+#: addressbook/gui/search/e-addressbook-search-dialog.c:160
+#: widgets/misc/e-filter-bar.c:156
msgid "Advanced Search"
msgstr "Kërkim i hollësishëm"
-#: ../addressbook/gui/widgets/e-addressbook-model.c:148
+#: addressbook/gui/widgets/e-addressbook-model.c:148
msgid "No contacts"
msgstr "Asnjë kontakt"
-#: ../addressbook/gui/widgets/e-addressbook-model.c:151
+#: addressbook/gui/widgets/e-addressbook-model.c:151
#, c-format
msgid "%d contact"
msgid_plural "%d contacts"
msgstr[0] "%d kontakt"
msgstr[1] "%d kontakte"
-#: ../addressbook/gui/widgets/e-addressbook-model.c:303
-#: ../addressbook/gui/widgets/e-addressbook-reflow-adapter.c:391
-#: ../addressbook/gui/widgets/e-addressbook-view.c:237
-#: ../addressbook/gui/widgets/e-minicard-view-widget.c:112
-#: ../addressbook/gui/widgets/e-minicard-view.c:512
+#: addressbook/gui/widgets/e-addressbook-model.c:303
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:391
+#: addressbook/gui/widgets/e-addressbook-view.c:237
+#: addressbook/gui/widgets/e-minicard-view-widget.c:112
+#: addressbook/gui/widgets/e-minicard-view.c:512
msgid "Query"
msgstr "Kërkesë"
-#: ../addressbook/gui/widgets/e-addressbook-model.c:446
+#: addressbook/gui/widgets/e-addressbook-model.c:446
msgid "Error getting book view"
msgstr "Gabim gjatë marrjes së paraqitjes si libër"
-#: ../addressbook/gui/widgets/e-addressbook-reflow-adapter.c:405
+#: addressbook/gui/widgets/e-addressbook-reflow-adapter.c:405
msgid "Model"
msgstr "Modeli"
-#: ../addressbook/gui/widgets/e-addressbook-table-adapter.c:103
+#: addressbook/gui/widgets/e-addressbook-table-adapter.c:103
msgid "Error modifying card"
msgstr "Gabim gjatë ndryshimit të card"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:169
+#: addressbook/gui/widgets/e-addressbook-view.c:169
msgid "Name begins with"
msgstr "Emri fillon me"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:170
+#: addressbook/gui/widgets/e-addressbook-view.c:170
msgid "Email begins with"
msgstr "Email fillon me"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:171
-#: ../calendar/gui/cal-search-bar.c:53
+#: addressbook/gui/widgets/e-addressbook-view.c:171
+#: calendar/gui/cal-search-bar.c:53
msgid "Category is"
msgstr "Kategoria është"
#. We attach subitems below
-#: ../addressbook/gui/widgets/e-addressbook-view.c:172
-#: ../calendar/gui/cal-search-bar.c:48
+#: addressbook/gui/widgets/e-addressbook-view.c:172
+#: calendar/gui/cal-search-bar.c:48
msgid "Any field contains"
msgstr "Çfarëdo fushe që përmban"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:173
-#: ../addressbook/gui/widgets/e-addressbook-view.c:178
+#: addressbook/gui/widgets/e-addressbook-view.c:173
+#: addressbook/gui/widgets/e-addressbook-view.c:178
msgid "Advanced..."
msgstr "Detajuar..."
-#: ../addressbook/gui/widgets/e-addressbook-view.c:230
+#: addressbook/gui/widgets/e-addressbook-view.c:230
msgid "Source"
msgstr "Burimi"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:244
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:11
-#: ../calendar/gui/e-calendar-table.etspec.h:13
-#: ../calendar/gui/e-meeting-list-view.c:319
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:11
+#: addressbook/gui/widgets/e-addressbook-view.c:244
+#: calendar/gui/dialogs/meeting-page.etspec.h:11
+#: calendar/gui/e-calendar-table.etspec.h:13
+#: calendar/gui/e-meeting-list-view.c:319
+#: calendar/gui/e-meeting-time-sel.etspec.h:11
msgid "Type"
msgstr "Lloji"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:541
+#: addressbook/gui/widgets/e-addressbook-view.c:541
msgid "Address Book"
msgstr "Rubrika"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:804
-#: ../addressbook/gui/widgets/e-addressbook-view.c:922
-#: ../addressbook/gui/widgets/e-addressbook-view.c:1982
-#: ../ui/evolution-addressbook.xml.h:19
+#: addressbook/gui/widgets/e-addressbook-view.c:804
+#: addressbook/gui/widgets/e-addressbook-view.c:922
+#: addressbook/gui/widgets/e-addressbook-view.c:1982
+#: ui/evolution-addressbook.xml.h:19
msgid "Save as VCard..."
msgstr "Ruaje si VCard..."
-#: ../addressbook/gui/widgets/e-addressbook-view.c:918
+#: addressbook/gui/widgets/e-addressbook-view.c:918
msgid "New Contact..."
msgstr "Kontakt i ri..."
-#: ../addressbook/gui/widgets/e-addressbook-view.c:919
+#: addressbook/gui/widgets/e-addressbook-view.c:919
msgid "New Contact List..."
msgstr "Listë e re kontaktesh..."
-#: ../addressbook/gui/widgets/e-addressbook-view.c:923
-#: ../ui/evolution-addressbook.xml.h:10
+#: addressbook/gui/widgets/e-addressbook-view.c:923
+#: ui/evolution-addressbook.xml.h:10
msgid "Forward Contact"
msgstr "Përcill kontaktin"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:924
+#: addressbook/gui/widgets/e-addressbook-view.c:924
msgid "Send Message to Contact"
msgstr "Dërgo një mesazh tek kontakti"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:925
-#: ../calendar/gui/calendar-commands.c:120 ../calendar/gui/print.c:2489
-#: ../ui/evolution-addressbook.xml.h:16 ../ui/evolution-calendar.xml.h:19
-#: ../ui/evolution-mail-message.xml.h:80 ../ui/evolution-tasks.xml.h:14
+#: addressbook/gui/widgets/e-addressbook-view.c:925
+#: calendar/gui/calendar-commands.c:120 calendar/gui/print.c:2489
+#: ui/evolution-addressbook.xml.h:16 ui/evolution-calendar.xml.h:19
+#: ui/evolution-mail-message.xml.h:80 ui/evolution-tasks.xml.h:14
msgid "Print"
msgstr "Printo"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:928
+#: addressbook/gui/widgets/e-addressbook-view.c:928
msgid "Copy to Address Book..."
msgstr "Kopjo në Rubrikë..."
-#: ../addressbook/gui/widgets/e-addressbook-view.c:929
+#: addressbook/gui/widgets/e-addressbook-view.c:929
msgid "Move to Address Book..."
msgstr "Lëvize në Rubrikë..."
-#: ../addressbook/gui/widgets/e-addressbook-view.c:932
-#: ../ui/evolution-addressbook.xml.h:6 ../ui/evolution-tasks.xml.h:4
+#: addressbook/gui/widgets/e-addressbook-view.c:932
+#: ui/evolution-addressbook.xml.h:6 ui/evolution-tasks.xml.h:4
msgid "Cut"
msgstr "Preje"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:933
-#: ../calendar/gui/calendar-component.c:525
-#: ../calendar/gui/tasks-component.c:429 ../ui/evolution-addressbook.xml.h:2
-#: ../ui/evolution-mail-message.xml.h:9 ../ui/evolution-tasks.xml.h:2
+#: addressbook/gui/widgets/e-addressbook-view.c:933
+#: calendar/gui/calendar-component.c:525 calendar/gui/tasks-component.c:429
+#: ui/evolution-addressbook.xml.h:2 ui/evolution-mail-message.xml.h:9
+#: ui/evolution-tasks.xml.h:2
msgid "Copy"
msgstr "Kopjo"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:934
-#: ../ui/evolution-addressbook.xml.h:13 ../ui/evolution-tasks.xml.h:11
+#: addressbook/gui/widgets/e-addressbook-view.c:934
+#: ui/evolution-addressbook.xml.h:13 ui/evolution-tasks.xml.h:11
msgid "Paste"
msgstr "Ngjite"
#. All, unmatched, separator
-#: ../addressbook/gui/widgets/e-addressbook-view.c:1537
-#: ../calendar/gui/cal-search-bar.c:346
+#: addressbook/gui/widgets/e-addressbook-view.c:1537
+#: calendar/gui/cal-search-bar.c:346
msgid "Any Category"
msgstr "Çdo kategori"
-#: ../addressbook/gui/widgets/e-addressbook-view.c:1750
+#: addressbook/gui/widgets/e-addressbook-view.c:1750
msgid "Print cards"
msgstr "Printo teserat"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:1
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:1
msgid "Assistant"
msgstr "Asistenti"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:2
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:2
msgid "Assistant Phone"
msgstr "Telefoni asistentit"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:3
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:3
msgid "Business Fax"
msgstr "Fax-i në zyrë"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:4
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:4
msgid "Business Phone"
msgstr "Telefoni në zyrë"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:5
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:5
msgid "Business Phone 2"
msgstr "Telefoni në zyrë 2"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:6
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:6
msgid "Callback Phone"
msgstr "Telefoni ku të rithirret"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:7
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:7
msgid "Car Phone"
msgstr "Telefoni në makinë"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:8
-#: ../calendar/gui/dialogs/task-page.glade.h:6
-#: ../calendar/gui/e-cal-list-view.etspec.h:1
-#: ../calendar/gui/e-calendar-table.etspec.h:3
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:8
+#: calendar/gui/dialogs/task-page.glade.h:6
+#: calendar/gui/e-cal-list-view.etspec.h:1
+#: calendar/gui/e-calendar-table.etspec.h:3
msgid "Categories"
msgstr "Kategoritë"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:9
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:9
msgid "Company Phone"
msgstr "Telefoni i ndërmarrjes"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:10
-#: ../addressbook/gui/widgets/eab-contact-display.c:560
-#: ../smime/lib/e-cert.c:826
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:10
+#: addressbook/gui/widgets/eab-contact-display.c:560 smime/lib/e-cert.c:826
msgid "Email"
msgstr "Email"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:11
-#: ../addressbook/gui/widgets/eab-popup-control.c:441
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:11
+#: addressbook/gui/widgets/eab-popup-control.c:441
msgid "Email 2"
msgstr "Email 2"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:12
-#: ../addressbook/gui/widgets/eab-popup-control.c:451
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:12
+#: addressbook/gui/widgets/eab-popup-control.c:451
msgid "Email 3"
msgstr "Email 3"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:13
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:13
msgid "Family Name"
msgstr "Mbiemri"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:14
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:14
msgid "File As"
msgstr "File si"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:16
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:16
msgid "Given Name"
msgstr "Emri i dhënë"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:17
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:17
msgid "Home Fax"
msgstr "Fax-i në shtëpi"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:18
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:18
msgid "Home Phone"
msgstr "Telefoni në shtëpi"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:19
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:19
msgid "Home Phone 2"
msgstr "Telefoni në shtëpi 2"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:20
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:20
msgid "ISDN Phone"
msgstr "Telefon ISDN"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:21
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:21
msgid "Journal"
msgstr "Gazeta"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:22
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:22
msgid "Manager"
msgstr "Manazhuesi"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:23
-#: ../addressbook/gui/widgets/eab-contact-display.c:379
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:23
+#: addressbook/gui/widgets/eab-contact-display.c:379
msgid "Mobile Phone"
msgstr "Celulari"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:24
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:24
msgid "Nickname"
msgstr "Pseudonimi"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:25
-#: ../addressbook/gui/widgets/eab-contact-display.c:390
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:25
+#: addressbook/gui/widgets/eab-contact-display.c:390
msgid "Note"
msgstr "Shënim"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:26
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:26
msgid "Office"
msgstr "Zyrë"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:27
-#: ../addressbook/gui/widgets/eab-contact-display.c:360
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:27
+#: addressbook/gui/widgets/eab-contact-display.c:360
msgid "Organization"
msgstr "Organizata"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:28
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:28
msgid "Other Fax"
msgstr "Fax tjetër"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:29
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:29
msgid "Other Phone"
msgstr "Telefonë të tjerë"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:30
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:30
msgid "Pager"
msgstr "Faques"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:31
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:31
msgid "Primary Phone"
msgstr "Telefoni kryesor"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:32
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:32
msgid "Radio"
msgstr "Radio"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:33
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:9
-#: ../calendar/gui/e-meeting-list-view.c:326
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:9
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:33
+#: calendar/gui/dialogs/meeting-page.etspec.h:9
+#: calendar/gui/e-meeting-list-view.c:326
+#: calendar/gui/e-meeting-time-sel.etspec.h:9
msgid "Role"
msgstr "Roli"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:34
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:34
msgid "Spouse"
msgstr "Bashkëshorte"
@@ -2934,62 +2914,62 @@ msgstr "Bashkëshorte"
#. Device for Deaf". However, you probably want to leave this
#. abbreviation unchanged unless you know that there is actually a
#. different and established translation for this in your language.
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:41
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:41
msgid "TTYTDD"
msgstr "TTYTDD"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:42
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:42
msgid "Telex"
msgstr "Telex"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:43
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:43
msgid "Title"
msgstr "Titulli"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:44
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:44
msgid "Unit"
msgstr "Njësia"
-#: ../addressbook/gui/widgets/e-addressbook-view.etspec.h:45
+#: addressbook/gui/widgets/e-addressbook-view.etspec.h:45
msgid "Web Site"
msgstr "Siti web"
-#: ../addressbook/gui/widgets/e-minicard-label.c:115
-#: ../addressbook/gui/widgets/e-minicard.c:137
+#: addressbook/gui/widgets/e-minicard-label.c:115
+#: addressbook/gui/widgets/e-minicard.c:137
msgid "Width"
msgstr "Gjerësia"
-#: ../addressbook/gui/widgets/e-minicard-label.c:122
-#: ../addressbook/gui/widgets/e-minicard.c:144
+#: addressbook/gui/widgets/e-minicard-label.c:122
+#: addressbook/gui/widgets/e-minicard.c:144
msgid "Height"
msgstr "Lartësia"
-#: ../addressbook/gui/widgets/e-minicard-label.c:129
-#: ../addressbook/gui/widgets/e-minicard.c:152
+#: addressbook/gui/widgets/e-minicard-label.c:129
+#: addressbook/gui/widgets/e-minicard.c:152
msgid "Has Focus"
msgstr "Ka fokusin"
-#: ../addressbook/gui/widgets/e-minicard-label.c:136
+#: addressbook/gui/widgets/e-minicard-label.c:136
msgid "Field"
msgstr "Fusha"
-#: ../addressbook/gui/widgets/e-minicard-label.c:143
+#: addressbook/gui/widgets/e-minicard-label.c:143
msgid "Field Name"
msgstr "Emri i fushës"
-#: ../addressbook/gui/widgets/e-minicard-label.c:150
+#: addressbook/gui/widgets/e-minicard-label.c:150
msgid "Text Model"
msgstr "Modeli i tekstit"
-#: ../addressbook/gui/widgets/e-minicard-label.c:157
+#: addressbook/gui/widgets/e-minicard-label.c:157
msgid "Max field name length"
msgstr "Gjatësia maksimum e emrit të fushës"
-#: ../addressbook/gui/widgets/e-minicard-view-widget.c:126
+#: addressbook/gui/widgets/e-minicard-view-widget.c:126
msgid "Column Width"
msgstr "Gjërësia e kollonës"
-#: ../addressbook/gui/widgets/e-minicard-view.c:171
+#: addressbook/gui/widgets/e-minicard-view.c:171
msgid ""
"\n"
"\n"
@@ -3003,7 +2983,7 @@ msgstr ""
"\n"
"ose dopjo-klik këtu për të krijuar një kontakt të ri."
-#: ../addressbook/gui/widgets/e-minicard-view.c:174
+#: addressbook/gui/widgets/e-minicard-view.c:174
msgid ""
"\n"
"\n"
@@ -3017,7 +2997,7 @@ msgstr ""
"\n"
"Dopjo-klik këtu për të krijuar një kontakt të ri."
-#: ../addressbook/gui/widgets/e-minicard-view.c:179
+#: addressbook/gui/widgets/e-minicard-view.c:179
msgid ""
"\n"
"\n"
@@ -3027,7 +3007,7 @@ msgstr ""
"\n"
"Kërko për kontaktin."
-#: ../addressbook/gui/widgets/e-minicard-view.c:181
+#: addressbook/gui/widgets/e-minicard-view.c:181
msgid ""
"\n"
"\n"
@@ -3037,171 +3017,170 @@ msgstr ""
"\n"
"Asnjë element për t'u shfaqur në këtë paraqitje."
-#: ../addressbook/gui/widgets/e-minicard-view.c:498
+#: addressbook/gui/widgets/e-minicard-view.c:498
msgid "Adapter"
msgstr "Adaptues"
-#: ../addressbook/gui/widgets/e-minicard.c:160
+#: addressbook/gui/widgets/e-minicard.c:160
msgid "Selected"
msgstr "I zgjedhur"
-#: ../addressbook/gui/widgets/e-minicard.c:167
+#: addressbook/gui/widgets/e-minicard.c:167
msgid "Has Cursor"
msgstr "Ka kursorin"
-#: ../addressbook/gui/widgets/eab-contact-display.c:133
-#: ../addressbook/gui/widgets/eab-contact-display.c:196
+#: addressbook/gui/widgets/eab-contact-display.c:133
+#: addressbook/gui/widgets/eab-contact-display.c:196
msgid "(map)"
msgstr "(harta)"
-#: ../addressbook/gui/widgets/eab-contact-display.c:143
-#: ../addressbook/gui/widgets/eab-contact-display.c:209
+#: addressbook/gui/widgets/eab-contact-display.c:143
+#: addressbook/gui/widgets/eab-contact-display.c:209
msgid "map"
msgstr "harta"
-#: ../addressbook/gui/widgets/eab-contact-display.c:274
-#: ../addressbook/gui/widgets/eab-contact-display.c:541
+#: addressbook/gui/widgets/eab-contact-display.c:274
+#: addressbook/gui/widgets/eab-contact-display.c:541
msgid "List Members"
msgstr "Lista Anëtarëve"
-#: ../addressbook/gui/widgets/eab-contact-display.c:337
-#: ../addressbook/gui/widgets/eab-contact-display.c:339
+#: addressbook/gui/widgets/eab-contact-display.c:337
+#: addressbook/gui/widgets/eab-contact-display.c:339
msgid "E-mail"
msgstr "E-mail"
-#: ../addressbook/gui/widgets/eab-contact-display.c:361
+#: addressbook/gui/widgets/eab-contact-display.c:361
msgid "Position"
msgstr "Pozicioni"
-#: ../addressbook/gui/widgets/eab-contact-display.c:362
+#: addressbook/gui/widgets/eab-contact-display.c:362
msgid "Video Conferencing"
msgstr "Videokonferencë"
-#: ../addressbook/gui/widgets/eab-contact-display.c:363
-#: ../addressbook/gui/widgets/eab-contact-display.c:378
+#: addressbook/gui/widgets/eab-contact-display.c:363
+#: addressbook/gui/widgets/eab-contact-display.c:378
msgid "Phone"
msgstr "Telefoni"
-#: ../addressbook/gui/widgets/eab-contact-display.c:364
+#: addressbook/gui/widgets/eab-contact-display.c:364
msgid "Fax"
msgstr "Fax"
-#: ../addressbook/gui/widgets/eab-contact-display.c:368
+#: addressbook/gui/widgets/eab-contact-display.c:368
msgid "work"
msgstr "punë"
-#: ../addressbook/gui/widgets/eab-contact-display.c:375
+#: addressbook/gui/widgets/eab-contact-display.c:375
msgid "WWW"
msgstr "WWW"
-#: ../addressbook/gui/widgets/eab-contact-display.c:376
-#: ../addressbook/gui/widgets/eab-contact-display.c:595
+#: addressbook/gui/widgets/eab-contact-display.c:376
+#: addressbook/gui/widgets/eab-contact-display.c:595
msgid "Blog"
msgstr "Ditari"
-#: ../addressbook/gui/widgets/eab-contact-display.c:383
+#: addressbook/gui/widgets/eab-contact-display.c:383
msgid "personal"
msgstr "personale"
-#: ../addressbook/gui/widgets/eab-contact-display.c:556
+#: addressbook/gui/widgets/eab-contact-display.c:556
msgid "Job Title"
msgstr "Punësimi:"
-#: ../addressbook/gui/widgets/eab-contact-display.c:587
+#: addressbook/gui/widgets/eab-contact-display.c:587
msgid "Home page"
msgstr "Faqja e nisjes"
#. E_BOOK_ERROR_OK
-#: ../addressbook/gui/widgets/eab-gui-util.c:49
+#: addressbook/gui/widgets/eab-gui-util.c:49
msgid "Success"
msgstr "Me sukses"
#. E_BOOK_ERROR_INVALID_ARG
#. E_BOOK_ERROR_BUSY
-#: ../addressbook/gui/widgets/eab-gui-util.c:51
+#: addressbook/gui/widgets/eab-gui-util.c:51
msgid "Backend busy"
msgstr "Backend i zënë"
#. E_BOOK_ERROR_REPOSITORY_OFFLINE
-#: ../addressbook/gui/widgets/eab-gui-util.c:52
+#: addressbook/gui/widgets/eab-gui-util.c:52
msgid "Repository offline"
msgstr "Depozita është jashtë linje"
#. E_BOOK_ERROR_NO_SUCH_BOOK
-#: ../addressbook/gui/widgets/eab-gui-util.c:53
+#: addressbook/gui/widgets/eab-gui-util.c:53
msgid "Address Book does not exist"
msgstr "Rubrika nuk ekziston"
#. E_BOOK_ERROR_NO_SELF_CONTACT
-#: ../addressbook/gui/widgets/eab-gui-util.c:54
+#: addressbook/gui/widgets/eab-gui-util.c:54
msgid "No Self Contact defined"
msgstr "Nuk është përcaktuar asnjë kontakt automatik"
#. 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
+#: addressbook/gui/widgets/eab-gui-util.c:57
msgid "Permission denied"
msgstr "Ndalohet hyrja"
#. E_BOOK_ERROR_CONTACT_NOT_FOUND
-#: ../addressbook/gui/widgets/eab-gui-util.c:58
+#: addressbook/gui/widgets/eab-gui-util.c:58
msgid "Contact not found"
msgstr "Kontakti nuk u gjet"
#. E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS
-#: ../addressbook/gui/widgets/eab-gui-util.c:59
+#: addressbook/gui/widgets/eab-gui-util.c:59
msgid "Contact ID already exists"
msgstr "ID e kontaktit ekziston"
#. E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED
-#: ../addressbook/gui/widgets/eab-gui-util.c:60
+#: addressbook/gui/widgets/eab-gui-util.c:60
msgid "Protocol not supported"
msgstr "Protokoll i pasuportuar"
#. 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:232
-#: ../calendar/gui/e-cal-model-tasks.c:347
-#: ../calendar/gui/e-cal-model-tasks.c:660
-#: ../calendar/gui/e-calendar-table.c:458 ../calendar/gui/print.c:2352
+#: addressbook/gui/widgets/eab-gui-util.c:61
+#: calendar/gui/dialogs/task-details-page.glade.h:3
+#: calendar/gui/e-cal-component-preview.c:232
+#: calendar/gui/e-cal-model-tasks.c:347 calendar/gui/e-cal-model-tasks.c:660
+#: calendar/gui/e-calendar-table.c:458 calendar/gui/print.c:2352
msgid "Cancelled"
msgstr "Anulluar"
#. E_BOOK_ERROR_COULD_NOT_CANCEL
-#: ../addressbook/gui/widgets/eab-gui-util.c:62
+#: addressbook/gui/widgets/eab-gui-util.c:62
msgid "Could not cancel"
msgstr "E pamundur fshirja"
#. E_BOOK_ERROR_AUTHENTICATION_FAILED
-#: ../addressbook/gui/widgets/eab-gui-util.c:63
-#: ../calendar/gui/comp-editor-factory.c:431
+#: addressbook/gui/widgets/eab-gui-util.c:63
+#: calendar/gui/comp-editor-factory.c:431
msgid "Authentication Failed"
msgstr "Identifikimi dështoi"
#. E_BOOK_ERROR_AUTHENTICATION_REQUIRED
-#: ../addressbook/gui/widgets/eab-gui-util.c:64
+#: addressbook/gui/widgets/eab-gui-util.c:64
msgid "Authentication Required"
msgstr "Është i nevojshëm identifikimi"
#. E_BOOK_ERROR_TLS_NOT_AVAILABLE
-#: ../addressbook/gui/widgets/eab-gui-util.c:65
+#: addressbook/gui/widgets/eab-gui-util.c:65
msgid "TLS not Available"
msgstr "TLS jo në dispozicion"
#. E_BOOK_ERROR_CORBA_EXCEPTION
#. E_BOOK_ERROR_NO_SUCH_SOURCE
-#: ../addressbook/gui/widgets/eab-gui-util.c:67
+#: addressbook/gui/widgets/eab-gui-util.c:67
msgid "No such source"
msgstr "Asnjë burim"
#. E_BOOK_ERROR_OTHER_ERROR
-#: ../addressbook/gui/widgets/eab-gui-util.c:68
+#: addressbook/gui/widgets/eab-gui-util.c:68
msgid "Other error"
msgstr "Gabim tjetër"
-#: ../addressbook/gui/widgets/eab-gui-util.c:90
+#: addressbook/gui/widgets/eab-gui-util.c:90
msgid ""
"We were unable to open this addressbook. This either means this book is not "
"marked for offline usage or not yet downloaded for offline usage. Please "
@@ -3211,7 +3190,7 @@ msgstr ""
"përdorim jashtë linje, ose të mos jetë shkarkuar akoma. Ngarko rubrikën "
"njëherë kur të jesh në linjë, në menyrë që të shkarkohet përmbajtja e saj"
-#: ../addressbook/gui/widgets/eab-gui-util.c:98
+#: addressbook/gui/widgets/eab-gui-util.c:98
msgid ""
"We were unable to open this addressbook. Please check that the path exists "
"and that you have permission to access it."
@@ -3219,7 +3198,7 @@ msgstr ""
"E pamundur hapja e kësaj rubrike. Kontrollo që pozicioni ekziston dhe që "
"keni të drejtën të futeni në të."
-#: ../addressbook/gui/widgets/eab-gui-util.c:105
+#: addressbook/gui/widgets/eab-gui-util.c:105
msgid ""
"We were unable to open this addressbook. This either means you have entered "
"an incorrect URI, or the LDAP server is unreachable."
@@ -3227,7 +3206,7 @@ msgstr ""
"E pamundur hapja e kësaj rubrike. Kjo do të thotë që është dhënë një URI e "
"pasaktë, ose që server-i LDAP nuk është i arritshëm."
-#: ../addressbook/gui/widgets/eab-gui-util.c:110
+#: addressbook/gui/widgets/eab-gui-util.c:110
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 "
@@ -3237,7 +3216,7 @@ msgstr ""
"përdorni LDAP në Evolution do t'ju duhet të instaloni një pako të Evolution "
"me LDAP të aktivuar."
-#: ../addressbook/gui/widgets/eab-gui-util.c:117
+#: addressbook/gui/widgets/eab-gui-util.c:117
msgid ""
"We were unable to open this addressbook. This either means you have entered "
"an incorrect URI, or the server is unreachable."
@@ -3245,7 +3224,7 @@ msgstr ""
"E pamundur hapja e kësaj rubrike. Kjo do të thotë që është dhënë një URI e "
"pasaktë, ose që server-i nuk është i arritshëm."
-#: ../addressbook/gui/widgets/eab-gui-util.c:137
+#: addressbook/gui/widgets/eab-gui-util.c:137
msgid ""
"More cards matched this query than either the server is \n"
"configured to return or Evolution is configured to display.\n"
@@ -3258,7 +3237,7 @@ msgstr ""
"rikonfiguro limitin e rezultateve tek preferimet e server-it të directory\n"
"për këtë libër adresash."
-#: ../addressbook/gui/widgets/eab-gui-util.c:143
+#: addressbook/gui/widgets/eab-gui-util.c:143
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"
@@ -3272,47 +3251,47 @@ msgstr ""
"directory\n"
"për këtë libër adresash."
-#: ../addressbook/gui/widgets/eab-gui-util.c:149
+#: addressbook/gui/widgets/eab-gui-util.c:149
msgid "The backend for this addressbook was unable to parse this query."
msgstr ""
"Backend për këtë libër adresash nuk është në gjendje të përpunojë këtë "
"kërkesë."
-#: ../addressbook/gui/widgets/eab-gui-util.c:152
+#: addressbook/gui/widgets/eab-gui-util.c:152
msgid "The backend for this addressbook refused to perform this query."
msgstr "Backend për këtë libër adresash nuk pranoi të përpunojë këtë kërkesë."
-#: ../addressbook/gui/widgets/eab-gui-util.c:155
+#: addressbook/gui/widgets/eab-gui-util.c:155
msgid "This query did not complete successfully."
msgstr "Kjo kërkesë nuk u plotësua me sukses."
-#: ../addressbook/gui/widgets/eab-gui-util.c:177
+#: addressbook/gui/widgets/eab-gui-util.c:177
msgid "Error adding list"
msgstr "Gabim gjatë shtimit të listës"
-#: ../addressbook/gui/widgets/eab-gui-util.c:177
-#: ../addressbook/gui/widgets/eab-gui-util.c:650
+#: addressbook/gui/widgets/eab-gui-util.c:177
+#: addressbook/gui/widgets/eab-gui-util.c:650
msgid "Error adding contact"
msgstr "Gabim gjatë shtimit të kontaktit"
-#: ../addressbook/gui/widgets/eab-gui-util.c:188
+#: addressbook/gui/widgets/eab-gui-util.c:188
msgid "Error modifying list"
msgstr "Gabim gjatë ndryshimit të listës"
-#: ../addressbook/gui/widgets/eab-gui-util.c:188
+#: addressbook/gui/widgets/eab-gui-util.c:188
msgid "Error modifying contact"
msgstr "Gabim gjatë ndryshimit të kontaktit"
-#: ../addressbook/gui/widgets/eab-gui-util.c:200
+#: addressbook/gui/widgets/eab-gui-util.c:200
msgid "Error removing list"
msgstr "Gabim gjatë eleminimit të listës"
-#: ../addressbook/gui/widgets/eab-gui-util.c:200
-#: ../addressbook/gui/widgets/eab-gui-util.c:608
+#: addressbook/gui/widgets/eab-gui-util.c:200
+#: addressbook/gui/widgets/eab-gui-util.c:608
msgid "Error removing contact"
msgstr "Gabim gjatë eleminimit të kontaktit"
-#: ../addressbook/gui/widgets/eab-gui-util.c:282
+#: addressbook/gui/widgets/eab-gui-util.c:282
#, c-format
msgid ""
"Opening %d contact will open %d new window as well.\n"
@@ -3327,7 +3306,7 @@ msgstr[1] ""
"Duke hapur %d kontakte do të hapen %d dritare të reja.\n"
"Me të vërtetë shfaq të gjitha këto kontakte?"
-#: ../addressbook/gui/widgets/eab-gui-util.c:311
+#: addressbook/gui/widgets/eab-gui-util.c:311
#, c-format
msgid ""
"%s already exists\n"
@@ -3336,44 +3315,44 @@ msgstr ""
"%s ekziston\n"
"Dëshiron t'a mbishkruash?"
-#: ../addressbook/gui/widgets/eab-gui-util.c:315
+#: addressbook/gui/widgets/eab-gui-util.c:315
msgid "Overwrite"
msgstr "Mbishkruaj"
#. This is a filename. Translators take note.
-#: ../addressbook/gui/widgets/eab-gui-util.c:393
+#: addressbook/gui/widgets/eab-gui-util.c:393
msgid "card.vcf"
msgstr "card.vcf"
-#: ../addressbook/gui/widgets/eab-gui-util.c:555
+#: addressbook/gui/widgets/eab-gui-util.c:555
msgid "list"
msgstr "lista"
-#: ../addressbook/gui/widgets/eab-gui-util.c:704
+#: addressbook/gui/widgets/eab-gui-util.c:704
msgid "Move contact to"
msgstr "Lëvize kontaktin tek"
-#: ../addressbook/gui/widgets/eab-gui-util.c:706
+#: addressbook/gui/widgets/eab-gui-util.c:706
msgid "Copy contact to"
msgstr "Kopjo kontaktin tek"
-#: ../addressbook/gui/widgets/eab-gui-util.c:709
+#: addressbook/gui/widgets/eab-gui-util.c:709
msgid "Move contacts to"
msgstr "Lëviz kontaktet tek"
-#: ../addressbook/gui/widgets/eab-gui-util.c:711
+#: addressbook/gui/widgets/eab-gui-util.c:711
msgid "Copy contacts to"
msgstr "Kopjo kontaktet tek"
-#: ../addressbook/gui/widgets/eab-gui-util.c:714
+#: addressbook/gui/widgets/eab-gui-util.c:714
msgid "Select target addressbook."
msgstr "Zgjidh rubrikën objekt."
-#: ../addressbook/gui/widgets/eab-gui-util.c:937
+#: addressbook/gui/widgets/eab-gui-util.c:937
msgid "Multiple VCards"
msgstr "VCards shumëfishe"
-#: ../addressbook/gui/widgets/eab-gui-util.c:940
+#: addressbook/gui/widgets/eab-gui-util.c:940
#, c-format
msgid "VCard for %s"
msgstr "VCard për %s"
@@ -3383,377 +3362,376 @@ msgstr "VCard për %s"
#. * addresses (and *only* the e-mail addresses) associated with an existing
#. * contact.
#.
-#: ../addressbook/gui/widgets/eab-popup-control.c:198
+#: addressbook/gui/widgets/eab-popup-control.c:198
msgid "(none)"
msgstr "(asnjë)"
-#: ../addressbook/gui/widgets/eab-popup-control.c:431
+#: addressbook/gui/widgets/eab-popup-control.c:431
msgid "Primary Email"
msgstr "Email kryesor"
-#: ../addressbook/gui/widgets/eab-popup-control.c:567
+#: addressbook/gui/widgets/eab-popup-control.c:567
msgid "Select an Action"
msgstr "Zgjidh një veprim"
-#: ../addressbook/gui/widgets/eab-popup-control.c:575
+#: addressbook/gui/widgets/eab-popup-control.c:575
#, c-format
msgid "Create a new contact \"%s\""
msgstr "Krijo një kontakt të ri \"%s\""
-#: ../addressbook/gui/widgets/eab-popup-control.c:591
+#: addressbook/gui/widgets/eab-popup-control.c:591
#, c-format
msgid "Add address to existing contact \"%s\""
msgstr "Shtoja adresën një kontakti ekzistues \"%s\""
-#: ../addressbook/gui/widgets/eab-popup-control.c:869
+#: addressbook/gui/widgets/eab-popup-control.c:869
msgid "Querying Address Book..."
msgstr "Duke konsultuar Rubrikën..."
-#: ../addressbook/gui/widgets/eab-popup-control.c:970
+#: addressbook/gui/widgets/eab-popup-control.c:970
msgid "Merge E-Mail Address"
msgstr "Bashko adresën E-Mail"
-#: ../addressbook/gui/widgets/eab-vcard-control.c:139
+#: addressbook/gui/widgets/eab-vcard-control.c:139
#, c-format
msgid "There is one other contact."
msgid_plural "There are %d other contacts."
msgstr[0] "Ka një kontakt tjetër."
msgstr[1] "Ka %d kontakte të tjerë."
-#: ../addressbook/gui/widgets/eab-vcard-control.c:223
-#: ../addressbook/gui/widgets/eab-vcard-control.c:272
+#: addressbook/gui/widgets/eab-vcard-control.c:223
+#: addressbook/gui/widgets/eab-vcard-control.c:272
msgid "Show Full VCard"
msgstr "Shfaq VCard e plotë"
-#: ../addressbook/gui/widgets/eab-vcard-control.c:227
+#: addressbook/gui/widgets/eab-vcard-control.c:227
msgid "Show Compact VCard"
msgstr "Shfaq VCard kompakte"
-#: ../addressbook/gui/widgets/eab-vcard-control.c:277
+#: addressbook/gui/widgets/eab-vcard-control.c:277
msgid "Save in addressbook"
msgstr "Ruaje në rubrikë"
-#: ../addressbook/gui/widgets/gal-view-factory-minicard.c:25
+#: addressbook/gui/widgets/gal-view-factory-minicard.c:25
msgid "Card View"
msgstr "Paraqitja e card"
-#: ../addressbook/gui/widgets/gal-view-factory-treeview.c:26
+#: addressbook/gui/widgets/gal-view-factory-treeview.c:26
msgid "GTK Tree View"
msgstr "Paraqitja si pemë e GTK"
-#: ../addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:1
+#: addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:1
msgid "Evolution LDIF importer"
msgstr "Importuesi LDIF i Evolution"
-#: ../addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:2
+#: addressbook/importers/GNOME_Evolution_Addressbook_LDIF_Importer.server.in.in.h:2
msgid "LDAP Data Interchange Format (.ldif)"
msgstr "Format LDAP Data Interchange (.ldif)"
-#: ../addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:1
+#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:1
msgid "Evolution VCard Importer"
msgstr "Importuesi VCard i Evolution"
-#: ../addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:2
+#: addressbook/importers/GNOME_Evolution_Addressbook_VCard_Importer.server.in.in.h:2
msgid "VCard (.vcf, .gcrd)"
msgstr "VCard (.vcf, .gcrd)"
-#: ../addressbook/printing/e-contact-print-envelope.c:213
-#: ../addressbook/printing/e-contact-print-envelope.c:234
+#: addressbook/printing/e-contact-print-envelope.c:213
+#: addressbook/printing/e-contact-print-envelope.c:234
msgid "Print envelope"
msgstr "Printo zarfin"
-#: ../addressbook/printing/e-contact-print.c:1001
+#: addressbook/printing/e-contact-print.c:1001
msgid "Print contacts"
msgstr "Printo kontaktet"
-#: ../addressbook/printing/e-contact-print.c:1066
-#: ../addressbook/printing/e-contact-print.c:1093
+#: addressbook/printing/e-contact-print.c:1066
+#: addressbook/printing/e-contact-print.c:1093
msgid "Print contact"
msgstr "Printo kontaktin"
-#: ../addressbook/printing/e-contact-print.glade.h:1
+#: addressbook/printing/e-contact-print.glade.h:1
msgid "10 pt. Tahoma"
msgstr "10 pt. Tahoma"
-#: ../addressbook/printing/e-contact-print.glade.h:2
+#: addressbook/printing/e-contact-print.glade.h:2
msgid "8 pt. Tahoma"
msgstr "8 pt. Tahoma"
-#: ../addressbook/printing/e-contact-print.glade.h:3
+#: addressbook/printing/e-contact-print.glade.h:3
msgid "Blank forms at end:"
msgstr "Modulë të bardhë në fund:"
-#: ../addressbook/printing/e-contact-print.glade.h:4
+#: addressbook/printing/e-contact-print.glade.h:4
msgid "Body"
msgstr "Trupi"
-#: ../addressbook/printing/e-contact-print.glade.h:5
+#: addressbook/printing/e-contact-print.glade.h:5
msgid "Bottom:"
msgstr "Poshtë:"
-#: ../addressbook/printing/e-contact-print.glade.h:6
+#: addressbook/printing/e-contact-print.glade.h:6
msgid "Dimensions:"
msgstr "Përmasat:"
-#: ../addressbook/printing/e-contact-print.glade.h:7
+#: addressbook/printing/e-contact-print.glade.h:7
msgid "F_ont..."
msgstr "_Gërmat..."
-#: ../addressbook/printing/e-contact-print.glade.h:8
+#: addressbook/printing/e-contact-print.glade.h:8
msgid "Fonts"
msgstr "Gërmat"
-#: ../addressbook/printing/e-contact-print.glade.h:9
+#: addressbook/printing/e-contact-print.glade.h:9
msgid "Footer:"
msgstr "Fund'faqe:"
-#: ../addressbook/printing/e-contact-print.glade.h:10
+#: addressbook/printing/e-contact-print.glade.h:10
msgid "Format"
msgstr "Formati"
-#: ../addressbook/printing/e-contact-print.glade.h:11
+#: addressbook/printing/e-contact-print.glade.h:11
msgid "Header"
msgstr "Kreu i faqes"
-#: ../addressbook/printing/e-contact-print.glade.h:12
+#: addressbook/printing/e-contact-print.glade.h:12
msgid "Header/Footer"
msgstr "Kreu/Fundi"
-#: ../addressbook/printing/e-contact-print.glade.h:13
+#: addressbook/printing/e-contact-print.glade.h:13
msgid "Headings"
msgstr "Titujt"
-#: ../addressbook/printing/e-contact-print.glade.h:14
+#: addressbook/printing/e-contact-print.glade.h:14
msgid "Headings for each letter"
msgstr "Titull për çdo letër"
-#: ../addressbook/printing/e-contact-print.glade.h:15
+#: addressbook/printing/e-contact-print.glade.h:15
msgid "Height:"
msgstr "Lartësia:"
-#: ../addressbook/printing/e-contact-print.glade.h:16
+#: addressbook/printing/e-contact-print.glade.h:16
msgid "Immediately follow each other"
msgstr "Zinxhir njëri pas tjetrit"
-#: ../addressbook/printing/e-contact-print.glade.h:17
+#: addressbook/printing/e-contact-print.glade.h:17
msgid "Include:"
msgstr "Përfshi:"
-#: ../addressbook/printing/e-contact-print.glade.h:18
+#: addressbook/printing/e-contact-print.glade.h:18
msgid "Landscape"
msgstr "Horizontale"
-#: ../addressbook/printing/e-contact-print.glade.h:19
+#: addressbook/printing/e-contact-print.glade.h:19
msgid "Left:"
msgstr "Majtas:"
-#: ../addressbook/printing/e-contact-print.glade.h:20
+#: addressbook/printing/e-contact-print.glade.h:20
msgid "Letter tabs on side"
msgstr "Skedat e letrës në anë"
-#: ../addressbook/printing/e-contact-print.glade.h:21
+#: addressbook/printing/e-contact-print.glade.h:21
msgid "Margins"
msgstr "Kufijtë"
-#: ../addressbook/printing/e-contact-print.glade.h:22
+#: addressbook/printing/e-contact-print.glade.h:22
msgid "Number of columns:"
msgstr "Numri i kollonave:"
-#: ../addressbook/printing/e-contact-print.glade.h:23
+#: addressbook/printing/e-contact-print.glade.h:23
msgid "Options"
msgstr "Mundësitë"
-#: ../addressbook/printing/e-contact-print.glade.h:24
-#: ../e-util/eggtrayicon.c:118
+#: addressbook/printing/e-contact-print.glade.h:24 e-util/eggtrayicon.c:118
msgid "Orientation"
msgstr "Orientimi"
-#: ../addressbook/printing/e-contact-print.glade.h:25
+#: addressbook/printing/e-contact-print.glade.h:25
msgid "Page"
msgstr "Faqja"
-#: ../addressbook/printing/e-contact-print.glade.h:26
+#: addressbook/printing/e-contact-print.glade.h:26
msgid "Page Setup:"
msgstr "Rregullimi i faqes:"
-#: ../addressbook/printing/e-contact-print.glade.h:27
+#: addressbook/printing/e-contact-print.glade.h:27
msgid "Paper"
msgstr "Letra"
-#: ../addressbook/printing/e-contact-print.glade.h:28
+#: addressbook/printing/e-contact-print.glade.h:28
msgid "Paper source:"
msgstr "Ngarkuesi i letrës:"
-#: ../addressbook/printing/e-contact-print.glade.h:29
+#: addressbook/printing/e-contact-print.glade.h:29
msgid "Portrait"
msgstr "Vertikale"
-#: ../addressbook/printing/e-contact-print.glade.h:30
+#: addressbook/printing/e-contact-print.glade.h:30
msgid "Preview:"
msgstr "Shikoje:"
-#: ../addressbook/printing/e-contact-print.glade.h:31
+#: addressbook/printing/e-contact-print.glade.h:31
msgid "Print using gray shading"
msgstr "Printo duke përdorur hije gri"
-#: ../addressbook/printing/e-contact-print.glade.h:32
+#: addressbook/printing/e-contact-print.glade.h:32
msgid "Reverse on even pages"
msgstr "Inverto faqet çifte"
-#: ../addressbook/printing/e-contact-print.glade.h:33
+#: addressbook/printing/e-contact-print.glade.h:33
msgid "Right:"
msgstr "Djathtas:"
-#: ../addressbook/printing/e-contact-print.glade.h:34
+#: addressbook/printing/e-contact-print.glade.h:34
msgid "Sections:"
msgstr "Seksionet:"
-#: ../addressbook/printing/e-contact-print.glade.h:35
+#: addressbook/printing/e-contact-print.glade.h:35
msgid "Shading"
msgstr "Hija"
-#: ../addressbook/printing/e-contact-print.glade.h:36
+#: addressbook/printing/e-contact-print.glade.h:36
msgid "Size:"
msgstr "Madhësia:"
-#: ../addressbook/printing/e-contact-print.glade.h:37
+#: addressbook/printing/e-contact-print.glade.h:37
msgid "Start on a new page"
msgstr "Fillo në një faqe të re"
-#: ../addressbook/printing/e-contact-print.glade.h:38
+#: addressbook/printing/e-contact-print.glade.h:38
msgid "Style name:"
msgstr "Emri i stilit:"
-#: ../addressbook/printing/e-contact-print.glade.h:39
+#: addressbook/printing/e-contact-print.glade.h:39
msgid "Top:"
msgstr "Sipër:"
-#: ../addressbook/printing/e-contact-print.glade.h:40
-#: ../calendar/gui/dialogs/calendar-setup.c:175
+#: addressbook/printing/e-contact-print.glade.h:40
+#: calendar/gui/dialogs/calendar-setup.c:175
msgid "Type:"
msgstr "Lloji:"
-#: ../addressbook/printing/e-contact-print.glade.h:41
+#: addressbook/printing/e-contact-print.glade.h:41
msgid "Width:"
msgstr "Gjerësia:"
-#: ../addressbook/printing/e-contact-print.glade.h:42
+#: addressbook/printing/e-contact-print.glade.h:42
msgid "_Font..."
msgstr "_Gërmat..."
-#: ../addressbook/printing/test-contact-print-style-editor.c:53
+#: addressbook/printing/test-contact-print-style-editor.c:53
msgid "Contact Print Style Editor Test"
msgstr "Provuesi i Editorit të stilit të printimit të kontakteve"
-#: ../addressbook/printing/test-contact-print-style-editor.c:54
-#: ../addressbook/printing/test-print.c:53
+#: addressbook/printing/test-contact-print-style-editor.c:54
+#: addressbook/printing/test-print.c:53
msgid "Copyright (C) 2000, Ximian, Inc."
msgstr "Copyright (C) 2000, Ximian, Inc."
-#: ../addressbook/printing/test-contact-print-style-editor.c:56
+#: addressbook/printing/test-contact-print-style-editor.c:56
msgid "This should test the contact print style editor widget"
msgstr ""
"Kjo duhet të kontrollojë instrumentin e edituesit të stilit të printimit të "
"kontakteve"
-#: ../addressbook/printing/test-print.c:52
+#: addressbook/printing/test-print.c:52
msgid "Contact Print Test"
msgstr "Prova e printimit të kontakteve"
-#: ../addressbook/printing/test-print.c:55
+#: addressbook/printing/test-print.c:55
msgid "This should test the contact print code"
msgstr "Kjo duhet të kontrollojë kodin e printimit të kontakteve"
-#: ../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
+#: 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 "E pamundur hapja e file"
-#: ../addressbook/tools/evolution-addressbook-export-list-folders.c:43
+#: addressbook/tools/evolution-addressbook-export-list-folders.c:43
msgid "Couldn't get list of addressbooks"
msgstr "E pamundur marrja e listës së rubrikave"
-#: ../addressbook/tools/evolution-addressbook-export-list-folders.c:71
+#: addressbook/tools/evolution-addressbook-export-list-folders.c:71
msgid "failed to open book"
msgstr "hapja e librit dështoi"
-#: ../addressbook/tools/evolution-addressbook-export.c:56
+#: addressbook/tools/evolution-addressbook-export.c:56
msgid "Specify the output file instead of standard output"
msgstr "Specifiko file e daljes në vend të standard output"
-#: ../addressbook/tools/evolution-addressbook-export.c:57
+#: addressbook/tools/evolution-addressbook-export.c:57
msgid "OUTPUTFILE"
msgstr "FILENËDALJE"
-#: ../addressbook/tools/evolution-addressbook-export.c:58
+#: addressbook/tools/evolution-addressbook-export.c:58
msgid "List local addressbook folders"
msgstr "Lista e kartelave të rubrikave lokale"
-#: ../addressbook/tools/evolution-addressbook-export.c:60
+#: addressbook/tools/evolution-addressbook-export.c:60
msgid "Show cards as vcard or csv file"
msgstr "Shfaq cards si vcard ose file cvs"
-#: ../addressbook/tools/evolution-addressbook-export.c:60
+#: addressbook/tools/evolution-addressbook-export.c:60
msgid "[vcard|csv]"
msgstr "[vcard|csv]"
-#: ../addressbook/tools/evolution-addressbook-export.c:61
+#: addressbook/tools/evolution-addressbook-export.c:61
msgid "Export in asynchronous mode"
msgstr "Eksporto në modalitet asinkron"
-#: ../addressbook/tools/evolution-addressbook-export.c:63
+#: addressbook/tools/evolution-addressbook-export.c:63
msgid "The number of cards in one output file in asychronous mode, default size 100."
msgstr ""
"Numri i teserave në një file daljeje në modalitet asinkron, vlera e "
"paracaktuar është 100."
-#: ../addressbook/tools/evolution-addressbook-export.c:63
+#: addressbook/tools/evolution-addressbook-export.c:63
msgid "NUMBER"
msgstr "NUMRI"
-#: ../addressbook/tools/evolution-addressbook-export.c:91
+#: addressbook/tools/evolution-addressbook-export.c:91
msgid "Command line arguments error, please use --help option to see the usage."
msgstr ""
"Gabim në argumentet e rreshtit të komandës, përdor opcionin --help për të "
"shikuar përdorimin."
-#: ../addressbook/tools/evolution-addressbook-export.c:105
+#: addressbook/tools/evolution-addressbook-export.c:105
msgid "Only support csv or vcard format."
msgstr "Suporton vetëm formatin csv ose vcard."
-#: ../addressbook/tools/evolution-addressbook-export.c:114
+#: addressbook/tools/evolution-addressbook-export.c:114
msgid "In async mode, output must be file."
msgstr "Në modalitetin asinkron në dalje duhet të jetë një file."
-#: ../addressbook/tools/evolution-addressbook-export.c:122
+#: addressbook/tools/evolution-addressbook-export.c:122
msgid "In normal mode, there is no need for the size option."
msgstr "Në modalitetin normal, nuk nevoitet opcioni i madhësisë."
-#: ../addressbook/tools/evolution-addressbook-export.c:153
+#: addressbook/tools/evolution-addressbook-export.c:153
msgid "Unhandled error"
msgstr "Gabim i pakontrollueshëm"
-#: ../addressbook/tools/evolution-addressbook-import.c:46
+#: addressbook/tools/evolution-addressbook-import.c:46
msgid "Error loading default addressbook."
msgstr "Gabim gjatë ngarkimit të rubrikës së prezgjedhur."
-#: ../addressbook/tools/evolution-addressbook-import.c:67
+#: addressbook/tools/evolution-addressbook-import.c:67
msgid "Input File"
msgstr "File burim"
-#: ../addressbook/tools/evolution-addressbook-import.c:82
+#: addressbook/tools/evolution-addressbook-import.c:82
msgid "No filename provided."
msgstr "Nuk është dhënë një emër file."
#. calendar:prompt-cancel-meeting primary
#. calendar:prompt-cancel-task primary
-#: ../calendar/calendar-errors.xml.h:2 ../calendar/calendar-errors.xml.h:12
+#: 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 "Dëshironi t'u dërgoni të gjithë pjesmarrësve një njoftim anullimi?"
#. calendar:prompt-cancel-meeting secondary
-#: ../calendar/calendar-errors.xml.h:4
+#: 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."
@@ -3761,32 +3739,32 @@ msgstr ""
"Nëse nuk dërgoni një njoftim anullimi, pjesmarrësit e tjerë ndoshta nuk e "
"dinë që takimi është anulluar."
-#: ../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
+#: 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
msgid "Don't Send"
msgstr "Mos dërgo"
-#: ../calendar/calendar-errors.xml.h:6 ../calendar/calendar-errors.xml.h:16
-#: ../calendar/calendar-errors.xml.h:26
+#: calendar/calendar-errors.xml.h:6 calendar/calendar-errors.xml.h:16
+#: calendar/calendar-errors.xml.h:26
msgid "Send Notice"
msgstr "Dërgo një njoftim"
#. calendar:prompt-delete-meeting primary
-#: ../calendar/calendar-errors.xml.h:8
+#: calendar/calendar-errors.xml.h:8
msgid "Are you sure you want to delete this meeting?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këtë mbledhje?"
#. calendar:prompt-delete-meeting secondary
-#: ../calendar/calendar-errors.xml.h:10
+#: calendar/calendar-errors.xml.h:10
msgid "All information on this meeting will be deleted and can not be restored."
msgstr ""
"Të gjitha informacionet mbi këtë mbledhje do të fshihen dhe nuk do të jenë "
"më të rekuperueshme."
#. calendar:prompt-cancel-task secondary
-#: ../calendar/calendar-errors.xml.h:14
+#: 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."
@@ -3795,29 +3773,29 @@ msgstr ""
"të marrin vesh që aktiviteti është fshirë."
#. calendar:prompt-delete-task primary
-#: ../calendar/calendar-errors.xml.h:18 ../calendar/calendar-errors.xml.h:44
+#: calendar/calendar-errors.xml.h:18 calendar/calendar-errors.xml.h:44
msgid "Are you sure you want to delete this task?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këtë aktivitet?"
#. 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
+#: 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 ""
"Të gjitha informacionet mbi këtë aktivitet do të eleminohen dhe ai nuk mund "
"të rekuperohet."
#. calendar:prompt-cancel-journal primary
-#: ../calendar/calendar-errors.xml.h:22
+#: calendar/calendar-errors.xml.h:22
msgid "Would you like to send a cancellation notice for this journal entry?"
msgstr ""
"Jeni i sigurt që dëshironi të dërgoni një njoftim fshirje mbi këtë zë të "
"ditarit?"
#. calendar:prompt-cancel-journal secondary
-#: ../calendar/calendar-errors.xml.h:24
+#: 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."
@@ -3826,12 +3804,12 @@ msgstr ""
"marrin vesh që ditari është fshirë."
#. calendar:prompt-delete-journal primary
-#: ../calendar/calendar-errors.xml.h:28 ../calendar/calendar-errors.xml.h:52
+#: calendar/calendar-errors.xml.h:28 calendar/calendar-errors.xml.h:52
msgid "Are you sure you want to delete this journal entry?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këtë zë të ditarit?"
#. calendar:prompt-delete-journal secondary
-#: ../calendar/calendar-errors.xml.h:30
+#: calendar/calendar-errors.xml.h:30
msgid ""
"All information on this journal entry will be deleted and can not be "
"restored."
@@ -3840,48 +3818,48 @@ msgstr ""
"nuk do të jenë më të rekuperueshme."
#. calendar:prompt-delete-titled-appointment primary
-#: ../calendar/calendar-errors.xml.h:32
+#: calendar/calendar-errors.xml.h:32
msgid "Are you sure you want to delete the appointment titled '{0}'?"
msgstr "Jeni i sigurt që dëshironi të eleminoni takimin me titull '{0}'?"
#. calendar:prompt-delete-titled-appointment secondary
#. calendar:prompt-delete-appointment secondary
-#: ../calendar/calendar-errors.xml.h:34 ../calendar/calendar-errors.xml.h:38
+#: 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 ""
"Të gjitha informacionet e përmbajtura në këtë takim do të fshihen dhe nuk do "
"të jenë më të rekuperueshme."
#. calendar:prompt-delete-appointment primary
-#: ../calendar/calendar-errors.xml.h:36
+#: calendar/calendar-errors.xml.h:36
msgid "Are you sure you want to delete this appointment?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këtë takim?"
#. calendar:prompt-delete-named-task primary
-#: ../calendar/calendar-errors.xml.h:40
+#: calendar/calendar-errors.xml.h:40
msgid "Are you sure you want to delete the '{0}' task?"
msgstr "Jeni i sigurt që dëshironi të eleminoni aktivitetin '{0}'?"
#. calendar:prompt-delete-named-journal primary
-#: ../calendar/calendar-errors.xml.h:48
+#: calendar/calendar-errors.xml.h:48
msgid "Are you sure you want to delete the journal entry '{0}'?"
msgstr "Jeni i sigurt që dëshironi të eleminoni zërin e ditarit '{0}'?"
#. calendar:prompt-delete-named-journal secondary
#. calendar:prompt-delete-journal secondary
-#: ../calendar/calendar-errors.xml.h:50 ../calendar/calendar-errors.xml.h:54
+#: 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 ""
"Të gjitha informacionet e përmbajtura në këtë ditar do të fshihen dhe nuk do "
"të jenë më të rekuperueshme."
#. calendar:prompt-delete-appointments primary
-#: ../calendar/calendar-errors.xml.h:56
+#: calendar/calendar-errors.xml.h:56
msgid "Are you sure you want to delete these {0} appointments?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këto {0} takime?"
#. calendar:prompt-delete-appointments secondary
-#: ../calendar/calendar-errors.xml.h:58
+#: calendar/calendar-errors.xml.h:58
msgid ""
"All information on these appointments will be deleted and can not be "
"restored."
@@ -3890,24 +3868,24 @@ msgstr ""
"do të jenë më të rekuperueshme."
#. calendar:prompt-delete-tasks primary
-#: ../calendar/calendar-errors.xml.h:60
+#: calendar/calendar-errors.xml.h:60
msgid "Are you sure you want to delete these {0} tasks?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këto {0} aktivitete?"
#. calendar:prompt-delete-tasks secondary
-#: ../calendar/calendar-errors.xml.h:62
+#: calendar/calendar-errors.xml.h:62
msgid "All information on these tasks will be deleted and can not be restored."
msgstr ""
"Të gjitha informacionet e përmbajtura në këto aktivitete do të fshihen dhe "
"nuk do të jenë më të rekuperueshme."
#. calendar:prompt-delete-journals primary
-#: ../calendar/calendar-errors.xml.h:64
+#: calendar/calendar-errors.xml.h:64
msgid "Are you sure you want to delete these {0} journal entries?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këto {0} zëra të ditarit?"
#. calendar:prompt-delete-journals secondary
-#: ../calendar/calendar-errors.xml.h:66
+#: calendar/calendar-errors.xml.h:66
msgid ""
"All information in these journal entries will be deleted and can not be "
"restored."
@@ -3916,68 +3894,68 @@ msgstr ""
"nuk do të jenë më të rekuperueshme."
#. calendar:prompt-save-appointment title
-#: ../calendar/calendar-errors.xml.h:68
+#: calendar/calendar-errors.xml.h:68
msgid "Save Appointment"
msgstr "Ruaj Takimin"
#. calendar:prompt-save-appointment primary
-#: ../calendar/calendar-errors.xml.h:70
+#: calendar/calendar-errors.xml.h:70
msgid "Would you like to save your changes to this appointment?"
msgstr "Dëshiron të ruash ndryshimet e kryera tek ky takim?"
#. calendar:prompt-save-appointment secondary
-#: ../calendar/calendar-errors.xml.h:72
+#: calendar/calendar-errors.xml.h:72
msgid "You have made changes to this appointment, but not yet saved them."
msgstr "Keni kryer ndryshime tek ky takim, por nuk i keni ruajtur akoma ato."
-#: ../calendar/calendar-errors.xml.h:73 ../calendar/calendar-errors.xml.h:81
+#: calendar/calendar-errors.xml.h:73 calendar/calendar-errors.xml.h:81
msgid "Discard Changes"
msgstr "Anullo ndryshimet"
-#: ../calendar/calendar-errors.xml.h:74 ../calendar/calendar-errors.xml.h:82
+#: calendar/calendar-errors.xml.h:74 calendar/calendar-errors.xml.h:82
msgid "Save Changes"
msgstr "Ruaj Ndryshimet"
#. calendar:prompt-save-task title
-#: ../calendar/calendar-errors.xml.h:76
+#: calendar/calendar-errors.xml.h:76
msgid "Save Task"
msgstr "Ruaj Aktivitetin"
#. calendar:prompt-save-task primary
-#: ../calendar/calendar-errors.xml.h:78
+#: calendar/calendar-errors.xml.h:78
msgid "Would you like to save your changes to this task?"
msgstr "Dëshiron të ruash ndryshimet e kryera tek ky aktivitet?"
#. calendar:prompt-save-task secondary
-#: ../calendar/calendar-errors.xml.h:80
+#: calendar/calendar-errors.xml.h:80
msgid "You have made changes to this task, but not yet saved them."
msgstr "Keni kryer ndryshime tek ky aktivitet, por nuk i keni ruajtur akoma ato."
#. calendar:prompt-meeting-invite primary
-#: ../calendar/calendar-errors.xml.h:84
+#: calendar/calendar-errors.xml.h:84
msgid "Would you like to send meeting invitations to participants?"
msgstr "Dëshironi t'i dërgoni një ftesë mbledhjeje pjesmarrësve?"
#. calendar:prompt-meeting-invite secondary
-#: ../calendar/calendar-errors.xml.h:86
+#: calendar/calendar-errors.xml.h:86
msgid "Email invitations will be sent to all participants and allow them to RSVP."
msgstr ""
"Mesazhi ftues do t'u dërgohet të gjithë pjesmarrësve dhe do t'i lejojë ata "
"në RSVP."
-#: ../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
+#: 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 "Dërgo"
#. calendar:prompt-send-updated-meeting-info primary
-#: ../calendar/calendar-errors.xml.h:90
+#: calendar/calendar-errors.xml.h:90
msgid "Would you like to send updated meeting information to participants?"
msgstr "Dëshiron t'u dërgosh informacionit e rifreskuar të mbledhjes pjesmarrësve?"
#. calendar:prompt-send-updated-meeting-info secondary
-#: ../calendar/calendar-errors.xml.h:92
+#: calendar/calendar-errors.xml.h:92
msgid ""
"Sending updated information allows other participants to keep their "
"calendars up to date."
@@ -3986,12 +3964,12 @@ msgstr ""
"rifreskuar kalendarët e tyre."
#. calendar:prompt-send-task primary
-#: ../calendar/calendar-errors.xml.h:96
+#: calendar/calendar-errors.xml.h:96
msgid "Would you like to send this task to participants?"
msgstr "Dëshiron t'ua dërgosh këtë aktivitet pjesmarrësve?"
#. calendar:prompt-send-task secondary
-#: ../calendar/calendar-errors.xml.h:98
+#: calendar/calendar-errors.xml.h:98
msgid ""
"Email invitations will be sent to all participants and allow them to accept "
"this task."
@@ -4000,12 +3978,12 @@ msgstr ""
"mundësinë të pranojnë këtë aktivitet."
#. calendar:prompt-send-updated-task-info primary
-#: ../calendar/calendar-errors.xml.h:102
+#: calendar/calendar-errors.xml.h:102
msgid "Would you like to send updated task information to participants?"
msgstr "Dëshiron t'u dërgosh pjesmarrësve informacionet e rifreskuara të aktivitetit?"
#. calendar:prompt-send-updated-task-info secondary
-#: ../calendar/calendar-errors.xml.h:104
+#: calendar/calendar-errors.xml.h:104
msgid ""
"Sending updated information allows other participants to keep their task "
"lists up to date."
@@ -4014,52 +3992,52 @@ msgstr ""
"rifreskuar listën e aktiviteteve të tyre."
#. calendar:tasks-crashed primary
-#: ../calendar/calendar-errors.xml.h:108
+#: calendar/calendar-errors.xml.h:108
msgid "The Evolution tasks have quit unexpectedly."
msgstr "Aktivitetet e Evolution përfunduan në menyrë të papritur."
#. calendar:tasks-crashed secondary
-#: ../calendar/calendar-errors.xml.h:110
+#: calendar/calendar-errors.xml.h:110
msgid "Your tasks will not be available until Evolution is restarted."
msgstr "Aktivitetet tuaja do të jenë në dispozicion vetëm mbas rinisjes së Evolution."
#. calendar:calendar-crashed primary
-#: ../calendar/calendar-errors.xml.h:112
+#: calendar/calendar-errors.xml.h:112
msgid "The Evolution calendar has quit unexpectedly."
msgstr "Kalendari i Evolution përfundoi në menyrë të papritur."
#. calendar:calendar-crashed secondary
-#: ../calendar/calendar-errors.xml.h:114
+#: calendar/calendar-errors.xml.h:114
msgid "Your calendars will not be available until Evolution is restarted."
msgstr "Kalendarët tuaj do të jenë në dispozicion vetëm mbas rinisjes së Evolution."
#. calendar:prompt-delete-calendar primary
-#: ../calendar/calendar-errors.xml.h:116
+#: calendar/calendar-errors.xml.h:116
msgid "Delete calendar '{0}'?"
msgstr "Eleminon kalendarin «{0}»?"
#. calendar:prompt-delete-calendar secondary
-#: ../calendar/calendar-errors.xml.h:118
+#: calendar/calendar-errors.xml.h:118
msgid "This calendar will be removed permanently."
msgstr "Ky kalendar do të eleminohet përgjithmonë."
#. calendar:prompt-delete-task-list primary
-#: ../calendar/calendar-errors.xml.h:120
+#: calendar/calendar-errors.xml.h:120
msgid "Delete task list '{0}'?"
msgstr "Eleminon listën e detyrave «{0}»?"
#. calendar:prompt-delete-task-list secondary
-#: ../calendar/calendar-errors.xml.h:122
+#: calendar/calendar-errors.xml.h:122
msgid "This task list will be removed permanently."
msgstr "Kjo listë detyrash do të eleminohet përgjithmonë."
#. calendar:prompt-send-no-subject-calendar primary
-#: ../calendar/calendar-errors.xml.h:124
+#: calendar/calendar-errors.xml.h:124
msgid "Are you sure you want to send the appointment without a summary?"
msgstr "Jeni i sigurt që dëshironi të dërgoni takimin pa një tregues?"
#. calendar:prompt-send-no-subject-calendar secondary
-#: ../calendar/calendar-errors.xml.h:126
+#: calendar/calendar-errors.xml.h:126
msgid ""
"Adding a meaningful Summary to your appointment will give your recipients an "
"idea of what your appointment is about."
@@ -4067,19 +4045,19 @@ msgstr ""
"Duke i shtuar takimit një tregues të qartë, u jipni një ide marrësve mbi "
"temën e takimit."
-#: ../calendar/calendar-errors.xml.h:127 ../calendar/calendar-errors.xml.h:132
-#: ../mail/mail-errors.xml.h:15 ../mail/mail-errors.xml.h:20
-#: ../mail/mail-errors.xml.h:27 ../mail/mail-errors.xml.h:32
+#: calendar/calendar-errors.xml.h:127 calendar/calendar-errors.xml.h:132
+#: 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 "_Dërgo"
#. calendar:prompt-send-no-subject-task primary
-#: ../calendar/calendar-errors.xml.h:129
+#: calendar/calendar-errors.xml.h:129
msgid "Are you sure you want to send the task without a summary?"
msgstr "Jeni i sigurt që dëshironi të dërgoni një detyrë pa një tregues?"
#. calendar:prompt-send-no-subject-task secondary
-#: ../calendar/calendar-errors.xml.h:131
+#: calendar/calendar-errors.xml.h:131
msgid ""
"Adding a meaningful Summary to your task will give your recipients an idea "
"of what your task is about."
@@ -4088,216 +4066,212 @@ msgstr ""
"lidhje me detyrën."
#. calendar:prompt-no-contents-offline-calendar primary
-#: ../calendar/calendar-errors.xml.h:134
+#: calendar/calendar-errors.xml.h:134
msgid "Error loading calendar"
msgstr "Gabim gjatë ngarkimit të kalendarit"
#. calendar:prompt-no-contents-offline-calendar secondary
-#: ../calendar/calendar-errors.xml.h:136
+#: calendar/calendar-errors.xml.h:136
msgid "The calendar is not marked for offline usage"
msgstr "Kalendari nuk është shënuar për përdorim jashtë linje"
#. calendar:prompt-no-contents-offline-tasks primary
-#: ../calendar/calendar-errors.xml.h:138
+#: calendar/calendar-errors.xml.h:138
msgid "Error loading task list"
msgstr "Gabim gjatë ngarimit të listës së detyrave"
#. calendar:prompt-no-contents-offline-tasks secondary
-#: ../calendar/calendar-errors.xml.h:140
+#: calendar/calendar-errors.xml.h:140
msgid "The task list is not marked for offline usage"
msgstr "Lista e detyrave nuk është shënuar për përdorim jashtë linje"
#. calendar:server-version secondary
-#: ../calendar/calendar-errors.xml.h:146
+#: calendar/calendar-errors.xml.h:146
msgid " Some features may not work correctly with your current server version"
msgstr ""
" Disa nga veçoritë nuk do të funksionojnë si duhet me versionin aktual të "
"serverit tuaj"
-#: ../calendar/common/authentication.c:49 ../calendar/gui/e-pub-utils.c:301
-#: ../smime/gui/component.c:48
+#: calendar/common/authentication.c:49 calendar/gui/e-pub-utils.c:301
+#: smime/gui/component.c:48
msgid "Enter password"
msgstr "Shkruaj fjalëkalimin"
-#: ../calendar/conduits/calendar/calendar-conduit.c:246
+#: calendar/conduits/calendar/calendar-conduit.c:246
msgid "Split Multi-Day Events:"
msgstr "Veço ngjarjet shumë-ditëshe:"
-#: ../calendar/conduits/calendar/calendar-conduit.c:1359
-#: ../calendar/conduits/calendar/calendar-conduit.c:1360
-#: ../calendar/conduits/todo/todo-conduit.c:879
-#: ../calendar/conduits/todo/todo-conduit.c:880
+#: calendar/conduits/calendar/calendar-conduit.c:1359
+#: calendar/conduits/calendar/calendar-conduit.c:1360
+#: calendar/conduits/todo/todo-conduit.c:879
+#: calendar/conduits/todo/todo-conduit.c:880
msgid "Could not start evolution-data-server"
msgstr "E pamundur nisja e evolution-data-server"
-#: ../calendar/conduits/calendar/calendar-conduit.c:1468
-#: ../calendar/conduits/calendar/calendar-conduit.c:1471
+#: calendar/conduits/calendar/calendar-conduit.c:1468
+#: calendar/conduits/calendar/calendar-conduit.c:1471
msgid "Could not read pilot's Calendar application block"
msgstr "I pamundur leximi i bllokut të aplikativit të kalendarit"
-#: ../calendar/conduits/todo/todo-conduit.c:234
+#: calendar/conduits/todo/todo-conduit.c:234
msgid "Default Priority:"
msgstr "Prioriteti i prezgjedhur:"
-#: ../calendar/conduits/todo/todo-conduit.c:959
-#: ../calendar/conduits/todo/todo-conduit.c:962
+#: calendar/conduits/todo/todo-conduit.c:959
+#: calendar/conduits/todo/todo-conduit.c:962
msgid "Could not read pilot's ToDo application block"
msgstr "I pamundur leximi i aplikativëve që duhen bërë të Pilot"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:1
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:1
msgid "Calendar and Tasks"
msgstr "Kalendari dhe aktivitetet"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:2
-#: ../calendar/gui/calendar-component.c:1290
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:2
+#: calendar/gui/calendar-component.c:1290
msgid "Calendars"
msgstr "Kalendarët"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:3
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:3
msgid "Configure your timezone, Calendar and Task List here "
msgstr "Konfiguro këtu zonën tënde të orës, kalendarin dhe listën e aktiviteteve"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:4
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:4
msgid "Evolution Calendar and Tasks"
msgstr "Kalendari dhe aktivitetet e Evolution"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:5
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:5
msgid "Evolution Calendar configuration control"
msgstr "Kontrolli i konfigurimit të kalendarit të Evolution"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:6
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:6
msgid "Evolution Calendar scheduling message viewer"
msgstr "Shfaqësi i mesazheve të skadimit të afateve të kalendarit të Evolution"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:7
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:7
msgid "Evolution Calendar/Task editor"
msgstr "Editori i kalendarit/aktiviteteve të Evolution"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:8
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:8
msgid "Evolution's Calendar component"
msgstr "Komponuesi i Kalendarit për Evolution"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:9
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:9
msgid "Evolution's Tasks component"
msgstr "Komponuesi i aktiviteteve për Evolution"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:10
-#: ../calendar/gui/e-tasks.c:1219 ../calendar/gui/print.c:1822
-#: ../calendar/gui/tasks-component.c:508 ../calendar/gui/tasks-component.c:981
-#: ../calendar/gui/tasks-control.c:408
-#: ../calendar/importers/icalendar-importer.c:83
-#: ../calendar/importers/icalendar-importer.c:701
-#: ../plugins/groupwise-account-setup/camel-gw-listener.c:383
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:10
+#: calendar/gui/e-tasks.c:1219 calendar/gui/print.c:1822
+#: calendar/gui/tasks-component.c:508 calendar/gui/tasks-component.c:981
+#: calendar/gui/tasks-control.c:408 calendar/importers/icalendar-importer.c:83
+#: calendar/importers/icalendar-importer.c:701
+#: plugins/groupwise-account-setup/camel-gw-listener.c:383
msgid "Tasks"
msgstr "Aktivitete"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:11
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:11
msgid "_Calendars"
msgstr "_Kalendarët"
-#: ../calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:12
-#: ../views/tasks/galview.xml.h:3
+#: calendar/gui/GNOME_Evolution_Calendar.server.in.in.h:12
+#: views/tasks/galview.xml.h:3
msgid "_Tasks"
msgstr "_Aktivitetet"
-#: ../calendar/gui/alarm-notify/GNOME_Evolution_Calendar_AlarmNotify.server.in.in.h:1
+#: calendar/gui/alarm-notify/GNOME_Evolution_Calendar_AlarmNotify.server.in.in.h:1
msgid "Evolution Calendar alarm notification service"
msgstr "Shërbimi i njoftimit të alarmit të kalendarit të Evolution"
-#: ../calendar/gui/alarm-notify/alarm-notify-dialog.c:79
+#: calendar/gui/alarm-notify/alarm-notify-dialog.c:79
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minutë"
msgstr[1] "minuta"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:1
-#: ../calendar/gui/dialogs/event-editor.c:140 ../calendar/gui/print.c:2298
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:1
+#: calendar/gui/dialogs/event-editor.c:140 calendar/gui/print.c:2298
msgid "Appointment"
msgstr "Takim"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:2
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:2
msgid "Appointment Title"
msgstr "Titulli i takimit"
#. End time
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:3
-#: ../plugins/itip-formatter/itip-view.c:876
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:3
+#: plugins/itip-formatter/itip-view.c:876
msgid "End time:"
msgstr "Koha e përfundimit:"
#. Location
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:4
-#: ../calendar/gui/e-itip-control.c:1118
-#: ../plugins/itip-formatter/itip-view.c:859
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:4
+#: calendar/gui/e-itip-control.c:1118 plugins/itip-formatter/itip-view.c:859
msgid "Location:"
msgstr "Vendodhja:"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:5
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:5
msgid "Snooze _time:"
msgstr "Ora e _ziles:"
#. Start time
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:6
-#: ../plugins/itip-formatter/itip-view.c:867
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:6
+#: plugins/itip-formatter/itip-view.c:867
msgid "Start time:"
msgstr "Ora e fillimit:"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:7
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:50
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:6
-#: ../filter/filter.glade.h:11 ../mail/mail-config.glade.h:153
-#: ../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
-#: ../ui/evolution.xml.h:38
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:7
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:50
+#: calendar/gui/dialogs/recurrence-page.glade.h:6 filter/filter.glade.h:11
+#: mail/mail-config.glade.h:153 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 ui/evolution.xml.h:38
msgid "_Edit"
msgstr "_Ndrysho"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:8
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:8
msgid "_Snooze"
msgstr "_Zilja"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:9
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:9
msgid "description of appointment"
msgstr "përshkrimi i takimit"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:10
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:10
msgid "end-time"
msgstr "ora-përfundimit"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:11
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:11
msgid "location"
msgstr "vendi"
-#: ../calendar/gui/alarm-notify/alarm-notify.glade.h:13
+#: calendar/gui/alarm-notify/alarm-notify.glade.h:13
msgid "start-time"
msgstr "ora-fillimit"
-#: ../calendar/gui/alarm-notify/alarm-queue.c:864
+#: calendar/gui/alarm-notify/alarm-queue.c:864
msgid "Dismiss"
msgstr "Braktis"
-#: ../calendar/gui/alarm-notify/alarm-queue.c:865
+#: calendar/gui/alarm-notify/alarm-queue.c:865
msgid "Dismiss All"
msgstr "Braktis gjithçka"
-#: ../calendar/gui/alarm-notify/alarm-queue.c:947
+#: calendar/gui/alarm-notify/alarm-queue.c:947
msgid "No summary available."
msgstr "Asnjë tregues në dispozicion."
-#: ../calendar/gui/alarm-notify/alarm-queue.c:956
-#: ../calendar/gui/alarm-notify/alarm-queue.c:958
+#: calendar/gui/alarm-notify/alarm-queue.c:956
+#: calendar/gui/alarm-notify/alarm-queue.c:958
msgid "No description available."
msgstr "Asnjë përshkrim në dispozicion."
-#: ../calendar/gui/alarm-notify/alarm-queue.c:966
+#: calendar/gui/alarm-notify/alarm-queue.c:966
msgid "No location information available."
msgstr "Asnjë përshkrim në lidhje me vendin në dispozicion."
-#: ../calendar/gui/alarm-notify/alarm-queue.c:982
+#: calendar/gui/alarm-notify/alarm-queue.c:982
#, c-format
msgid ""
"Alarm on %s\n"
@@ -4310,12 +4284,12 @@ msgstr ""
"Fillon nga %s\n"
"Mbaron në %s"
-#: ../calendar/gui/alarm-notify/alarm-queue.c:1084
-#: ../calendar/gui/alarm-notify/alarm-queue.c:1108
+#: calendar/gui/alarm-notify/alarm-queue.c:1084
+#: calendar/gui/alarm-notify/alarm-queue.c:1108
msgid "Warning"
msgstr "Kujdes"
-#: ../calendar/gui/alarm-notify/alarm-queue.c:1088
+#: calendar/gui/alarm-notify/alarm-queue.c:1088
msgid ""
"Evolution does not support calendar reminders with\n"
"email notifications yet, but this reminder was\n"
@@ -4327,7 +4301,7 @@ msgstr ""
"ky paralajmërim kërkon nisjen e një mesazhi email. Për këtë,\n"
"Evolution do të hapë një mesazh normal viziv (në ekran)."
-#: ../calendar/gui/alarm-notify/alarm-queue.c:1114
+#: calendar/gui/alarm-notify/alarm-queue.c:1114
#, c-format
msgid ""
"An Evolution Calendar reminder is about to trigger. This reminder is "
@@ -4344,137 +4318,137 @@ msgstr ""
"\n"
"Dëshironi me të vërtetë që ky program të ekzekutohet?"
-#: ../calendar/gui/alarm-notify/alarm-queue.c:1128
+#: calendar/gui/alarm-notify/alarm-queue.c:1128
msgid "Do not ask me about this program again."
msgstr "Mos më pyet më për këtë program."
-#: ../calendar/gui/alarm-notify/notify-main.c:139
+#: calendar/gui/alarm-notify/notify-main.c:139
msgid "Could not initialize Bonobo"
msgstr "E pamundur nisja e Bonobo"
-#: ../calendar/gui/alarm-notify/notify-main.c:150
+#: calendar/gui/alarm-notify/notify-main.c:150
msgid "Could not create the alarm notify service factory"
msgstr ""
"I pamundur krijimi i fabrikës për shërbimin e njoftimit të paralajmërimit "
"audio"
-#: ../calendar/gui/alarm-notify/util.c:41
+#: calendar/gui/alarm-notify/util.c:41
msgid "invalid time"
msgstr "orë e pavlefshme"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:1
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:1
msgid "Alarm programs"
msgstr "Programe alarmi"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:2
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:2
msgid "Ask for confirmation when deleting items"
msgstr "Kërko konfermimin kur fshihen elementë"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:3
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:3
msgid "Background color of tasks that are due today, in \"#rrggbb\" format."
msgstr "Ngjyra e sfondit për detyrat që skadojnë sot, në formatin \"#rrggbb\"."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:4
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:4
msgid "Background color of tasks that are overdue, in \"#rrggbb\" format."
msgstr "Ngjyra e sfondit për detyrat e skaduara, në formatin \"#rrggbb\"."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:5
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:5
msgid "Calendars to run alarms for"
msgstr "Kalendarët për të cilët përdoret alarmi"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:6
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:6
msgid "Compress weekends in month view"
msgstr "Fsheh fundjavën tek paraqitja mujore"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:7
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:7
msgid "Confirm expunge"
msgstr "Konfermo pastrimin"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:8
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:8
msgid "Days on which the start and end of work hours should be indicated."
msgstr "Ditët për të cilat duhet treguar ora e fillimit dhe përfundimit të punës."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:9
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:9
msgid "Default appointment reminder"
msgstr "Përkujtesa e takimit të prezgjedhur"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:10
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:10
msgid "Default reminder units"
msgstr "Njësia e prezgjedhur e prekujtesës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:11
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:11
msgid "Default reminder value"
msgstr "Vlera e prezgjedhur e përkujtesës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:12
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:12
msgid "Free/busy server urls"
msgstr "Url e serverit i lirë/zënë"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:13
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:13
msgid "Free/busy template url"
msgstr "Modeli url i lirë/zënë"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:14
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:14
msgid "Hide completed tasks"
msgstr "Fshih detyrat e plotësuara"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:15
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:15
msgid "Hide task units"
msgstr "Njësitë për fshehrjen e detyrave"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:16
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:16
msgid "Hide task value"
msgstr "Vlera për fshehrjen e detyrave"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:17
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:17
msgid "Horizontal pane position"
msgstr "Pozicioni i panelit horizontal"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:18
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:18
msgid "Hour the workday ends on, in twenty four hour format, 0 to 23."
msgstr "Ora e përfundimit të ditës së punës, në formatin me 24 orë, nga 0 në 23."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:19
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:19
msgid "Hour the workday starts on, in twenty four hour format, 0 to 23."
msgstr "Ora e fillimit të ditës së punës, në formatin me 24 orë, nga 0 në 23."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:20
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:20
msgid "Last alarm time"
msgstr "Ekzekutimi i fundit i alarmit"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:21
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:21
msgid "List of server urls for free/busy publishing."
msgstr "Lista e url të serverit për publikimin e informacioneve mbi disponibilitetin."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:22
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:22
msgid "Minute the workday ends on, 0 to 59"
msgstr "Minuta e përfundimit të ditës së punës, nga 0 në 59"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:23
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:23
msgid "Minute the workday starts on, 0 to 59."
msgstr "Minuta e fillimit të ditës së punës, nga 0 në 59."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:24
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:24
msgid "Month view horizontal pane position"
msgstr "Pozicioni i panelit horizontal të paraqitjes mujore"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:25
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:25
msgid "Month view vertical pane position"
msgstr "Pozicioni i panelit vertikal të paraqitjes mujore"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:26
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:26
msgid "Number of units for determining for a default reminder."
msgstr "Numri i njësive për përcaktimin e përkujtimin e prezgjedhur."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:27
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:27
msgid "Number of units for determining when to hide tasks."
msgstr "Numri i njësive për të përcaktuar se kur duhen fshehur aktivitetet."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:28
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:28
msgid "Overdue tasks color"
msgstr "Ngjyra e detyrave të skaduara"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:29
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:29
msgid ""
"Position of the horizontal pane, between the date navigator calendar and the "
"task list when not in the month view, in pixels."
@@ -4482,7 +4456,7 @@ msgstr ""
"Pozicioni i panelit horizontal, në pixel, midis eksploruesit data e "
"kalendarit dhe lista e detyrave, kur nuk ndodhesh tek paraqitja mujore."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:30
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:30
msgid ""
"Position of the horizontal pane, between the view and the date navigator "
"calendar and task list in the month view, in pixels."
@@ -4490,7 +4464,7 @@ msgstr ""
"Pozicioni i panelit horizontal, në pixel, midis eksploruesit data e "
"kalendarit dhe lista e detyrave, kur ndodhesh tek paraqitja mujore."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:31
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:31
msgid ""
"Position of the vertical pane, between task list and the task preview pane, "
"in pixels."
@@ -4498,7 +4472,7 @@ msgstr ""
"Pozicioni i panelit vertikal, në pixel, midis listës së detyrave dhe "
"dritares së pamjes së parë të detyrës."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:32
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:32
msgid ""
"Position of the vertical pane, between the view and the date navigator "
"calendar and task list in the month view, in pixels."
@@ -4506,7 +4480,7 @@ msgstr ""
"Pozicioni i panelit vertikal, në pixel, midis eksploruesit data e kalendarit "
"dhe lista e detyrave, kur ndodhesh tek paraqitja mujore."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:33
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:33
msgid ""
"Position of the vertical pane, between the view and the date navigator "
"calendar and task list when not in the month view, in pixels."
@@ -4514,31 +4488,31 @@ msgstr ""
"Pozicioni i panelit vertikal, në pixel, midis eksploruesit data e kalendarit "
"dhe lista e detyrave, kur nuk ndodhesh tek paraqitja mujore."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:34
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:34
msgid "Programs that are allowed to be run by alarms."
msgstr "Programe që lejohen të ekzekutohen nga alarmet."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:35
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:35
msgid "Show appointment end times in week and month views"
msgstr "Shfaq kohën e përfundimit të takimeve në paraqitjet javore dhe mujore"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:36
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:36
msgid "Show display alarms in notification tray"
msgstr "Shfaq alarmet tek zona e lajmërimeve"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:37
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:37
msgid "Show week numbers in date navigator"
msgstr "Shfaq numrat e javëve tek eksploruesi i datës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:38
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:38
msgid "Tasks due today color"
msgstr "Ngjyra e detyrave që skadojnë sot"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:39
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:39
msgid "Tasks vertical pane position"
msgstr "Pozicioni i panelit vertikal të detyrave"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:40
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:40
msgid ""
"The default timezone to use for dates and times in the calendar, as an "
"untranslated Olsen timezone database location like \"America/New York\"."
@@ -4547,7 +4521,7 @@ msgstr ""
"kalendar, shprehur si lokalitet i papërkthyer i databazës Olsen të zonave "
"orare, për shembull \"Albania/Tirane\"."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:42
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:42
#, no-c-format
msgid ""
"The url template to use as a free/busy data fallback, %u is replaced by the "
@@ -4557,57 +4531,57 @@ msgstr ""
"zëvendësohet nga pjesa relative përdoruesit e adresës email, %d zëvendësohet "
"nga domain."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:43
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:43
msgid ""
"Time divisions</short> <short>Intervals shown in Day and Work Week views, in "
"minutes."
msgstr ""
-"Ndarja e kohës</short> <short>Intervalet, në minuta, e shfaqura në paraqitjet "
-"dita dhe java e punës."
+"Ndarja e kohës</short> <short>Intervalet, në minuta, e shfaqura në "
+"paraqitjet dita dhe java e punës."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:44
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:44
msgid "Time the last alarm ran, in time_t."
msgstr "Ora e ekzekutimit të alarmit të fundit, shprehur në time_t."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:45
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:45
msgid "Timezone"
msgstr "Zona orare "
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:46
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:46
msgid "Twenty four hour time format"
msgstr "Formati orar 24 orë"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:47
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:47
msgid "Units for a default reminder, \"minutes\", \"hours\" or \"days\"."
msgstr "Njësitë për përkujtuesin e prezgjedhur, \"minutes\", \"hours\" ose \"days\"."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:48
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:48
msgid "Units for determining when to hide tasks, \"minutes\", \"hours\" or \"days\"."
msgstr ""
"Njësitë për të përcaktuar kur duhen fshehur aktivitetet, \"minutes\", \"hours"
"\" ose \"days\"."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:50
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:50
msgid "Week start"
msgstr "Fillimi i javës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:51
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:51
msgid "Weekday the week starts on, from Sunday (0) to Saturday (6)."
msgstr "Dita e javës e fillimit të javës, nga e Djelë (0) tek e Shtunë (6)."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:52
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:52
msgid "Whether or not to use the notification tray for display alarms."
msgstr "Nëse duhet përdorur apo jo sirtari i njoftimeve për të shfaqur alarmet."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:53
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:53
msgid "Whether to ask for confirmation when deleting an appointment or task."
msgstr "Nëse duhet kërkuar konfermimi kur eleminohet një takim apo detyrë."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:54
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:54
msgid "Whether to ask for confirmation when expunging appointments and tasks."
msgstr "Nëse duhet kërkuar konfermimi kur pastrohen takimet dhe detyrat."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:55
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:55
msgid ""
"Whether to compress weekends in the month view, which puts Saturday and "
"Sunday in the space of one weekday."
@@ -4615,80 +4589,78 @@ msgstr ""
"Tregon nëse duhet ngushtuar fundi i javës tek paraqitja mujore, d.m.th. nëse "
"duhen vendosur e Shtuna dhe e Djela në hapësirën e një dite."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:56
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:56
msgid "Whether to display the end time of events in the week and month views."
msgstr ""
"Tregon nëse duhet shfaqur përfundimi i ndodhive tek paraqitjet javore dhe "
"mujore."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:57
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:57
msgid "Whether to hide completed tasks in the tasks view."
msgstr "Tregon nëse duhen fshehur aktivitetet e plotësuara tek paraqitja e detyrave."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:58
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:58
msgid "Whether to set a default reminder for appointments."
msgstr "Tregon nëse duhet vendosur një përkujtues të prezgjedhur për takimet."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:59
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:59
msgid "Whether to show times in twenty four hour format instead of using am/pm."
msgstr ""
"Tregon nëse duhet shfaqur koha në formatin orar me 24 orë apo duke përdorur "
"pd/md."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:60
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:60
msgid "Whether to show week numbers in the date navigator."
msgstr "Tregon nëse duhet shfaqur numrat e javëve tek eksploruesi i datave."
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:61
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:61
msgid "Work days"
msgstr "Ditët e punës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:62
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:62
msgid "Workday end hour"
msgstr "Ora e përfundimit të ditës së punës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:63
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:63
msgid "Workday end minute"
msgstr "Minuta e përfundimit të ditës së punës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:64
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:64
msgid "Workday start hour"
msgstr "Ora e fillimit të ditës së punës"
-#: ../calendar/gui/apps_evolution_calendar.schemas.in.in.h:65
+#: calendar/gui/apps_evolution_calendar.schemas.in.in.h:65
msgid "Workday start minute"
msgstr "Minuta e fillimit të ditës së punës"
-#: ../calendar/gui/cal-search-bar.c:49
+#: calendar/gui/cal-search-bar.c:49
msgid "Summary contains"
msgstr "Përmbledhja përmban"
-#: ../calendar/gui/cal-search-bar.c:50
+#: calendar/gui/cal-search-bar.c:50
msgid "Description contains"
msgstr "Përshkrimi përmban"
-#: ../calendar/gui/cal-search-bar.c:51
+#: calendar/gui/cal-search-bar.c:51
msgid "Comment contains"
msgstr "Komenti përmban"
-#: ../calendar/gui/cal-search-bar.c:52
+#: calendar/gui/cal-search-bar.c:52
msgid "Location contains"
msgstr "Vendodhja përmban"
-#: ../calendar/gui/cal-search-bar.c:350
+#: calendar/gui/cal-search-bar.c:350
msgid "Unmatched"
msgstr "Jo korrispondues"
-#: ../calendar/gui/calendar-commands.c:120
-#: ../calendar/gui/calendar-component.c:708
-#: ../calendar/gui/dialogs/calendar-setup.c:362
-#: ../calendar/gui/gnome-cal.c:1942
-#: ../plugins/groupwise-account-setup/camel-gw-listener.c:382
-#: ../plugins/groupwise-account-setup/camel-gw-listener.c:412
+#: calendar/gui/calendar-commands.c:120 calendar/gui/calendar-component.c:708
+#: calendar/gui/dialogs/calendar-setup.c:362 calendar/gui/gnome-cal.c:1942
+#: plugins/groupwise-account-setup/camel-gw-listener.c:382
+#: plugins/groupwise-account-setup/camel-gw-listener.c:412
msgid "Calendar"
msgstr "Kalendari"
-#: ../calendar/gui/calendar-commands.c:355
+#: calendar/gui/calendar-commands.c:355
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 "
@@ -4698,1137 +4670,1126 @@ msgstr ""
"e kohës së përcaktuar. Nëse vazhdoni, nuk mund t'i rekuperoni më këto "
"ngjarje."
-#: ../calendar/gui/calendar-commands.c:361
+#: calendar/gui/calendar-commands.c:361
msgid "Purge events older than"
msgstr "Elemino ngjarjet më të vjetra se"
-#: ../calendar/gui/calendar-commands.c:366
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:20
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:12
-#: ../filter/filter.glade.h:14 ../plugins/calendar-http/calendar-http.c:265
-#: ../plugins/calendar-weather/calendar-weather.c:566
-#: ../widgets/misc/e-send-options.glade.h:39
+#: calendar/gui/calendar-commands.c:366
+#: calendar/gui/dialogs/alarm-dialog.glade.h:20
+#: calendar/gui/dialogs/calendar-setup.glade.h:12 filter/filter.glade.h:14
+#: plugins/calendar-http/calendar-http.c:265
+#: plugins/calendar-weather/calendar-weather.c:566
+#: widgets/misc/e-send-options.glade.h:39
msgid "days"
msgstr "ditë"
#. Create the On the web source group
#. Create the Webcal source group
#. Create the LDAP source group
-#: ../calendar/gui/calendar-component.c:223 ../calendar/gui/migration.c:486
-#: ../calendar/gui/migration.c:579 ../calendar/gui/tasks-component.c:204
+#: calendar/gui/calendar-component.c:223 calendar/gui/migration.c:486
+#: calendar/gui/migration.c:579 calendar/gui/tasks-component.c:204
msgid "On The Web"
msgstr "Në web"
-#: ../calendar/gui/calendar-component.c:241 ../calendar/gui/migration.c:388
+#: calendar/gui/calendar-component.c:241 calendar/gui/migration.c:388
msgid "Birthdays & Anniversaries"
msgstr "Ditlindje & Përvjetorë"
#. Create the weather group
-#: ../calendar/gui/calendar-component.c:247
-#: ../plugins/calendar-weather/calendar-weather.c:100
+#: calendar/gui/calendar-component.c:247
+#: plugins/calendar-weather/calendar-weather.c:100
msgid "Weather"
msgstr "Koha"
-#: ../calendar/gui/calendar-component.c:524
-#: ../calendar/gui/dialogs/calendar-setup.c:442
+#: calendar/gui/calendar-component.c:524
+#: calendar/gui/dialogs/calendar-setup.c:442
msgid "New Calendar"
msgstr "Kalendar i Ri"
-#: ../calendar/gui/calendar-component.c:843
+#: calendar/gui/calendar-component.c:843
msgid "Failed upgrading calendars."
msgstr "Rifreskimi i kalendarëve dështoi."
-#: ../calendar/gui/calendar-component.c:1139
+#: calendar/gui/calendar-component.c:1139
#, c-format
msgid "Unable to open the calendar '%s' for creating events and meetings"
msgstr "E pamundur hapja e kalendarit '%s' për të krijuar ngjarje dhe takime"
-#: ../calendar/gui/calendar-component.c:1155
+#: calendar/gui/calendar-component.c:1155
msgid "There is no calendar available for creating events and meetings"
msgstr "Asnjë kalendar në dispozicion për të krijuar ngjarje dhe takime"
-#: ../calendar/gui/calendar-component.c:1265
+#: calendar/gui/calendar-component.c:1265
msgid "Calendar Source Selector"
msgstr "Zgjedhësi i origjinës së kalendarit"
-#: ../calendar/gui/calendar-component.c:1456
+#: calendar/gui/calendar-component.c:1456
msgid "New appointment"
msgstr "Takim i ri"
-#: ../calendar/gui/calendar-component.c:1457
+#: calendar/gui/calendar-component.c:1457
msgid "_Appointment"
msgstr "_Takim"
-#: ../calendar/gui/calendar-component.c:1458
+#: calendar/gui/calendar-component.c:1458
msgid "Create a new appointment"
msgstr "Krijo një takim të ri"
-#: ../calendar/gui/calendar-component.c:1464
+#: calendar/gui/calendar-component.c:1464
msgid "New meeting"
msgstr "Mbledhje e re"
-#: ../calendar/gui/calendar-component.c:1465
+#: calendar/gui/calendar-component.c:1465
msgid "M_eeting"
msgstr "Mbl_edhje"
-#: ../calendar/gui/calendar-component.c:1466
+#: calendar/gui/calendar-component.c:1466
msgid "Create a new meeting request"
msgstr "Krijo një kërkesë të re për mbledhje"
-#: ../calendar/gui/calendar-component.c:1472
+#: calendar/gui/calendar-component.c:1472
msgid "New all day appointment"
msgstr "Takim i ri i përditshëm"
-#: ../calendar/gui/calendar-component.c:1473
+#: calendar/gui/calendar-component.c:1473
msgid "All Day A_ppointment"
msgstr "Takim i _Përditshëm"
-#: ../calendar/gui/calendar-component.c:1474
+#: calendar/gui/calendar-component.c:1474
msgid "Create a new all-day appointment"
msgstr "Krijo një takim të ri të përditshëm"
-#: ../calendar/gui/calendar-component.c:1480
+#: calendar/gui/calendar-component.c:1480
msgid "New calendar"
msgstr "Kalendar i ri"
-#: ../calendar/gui/calendar-component.c:1481
+#: calendar/gui/calendar-component.c:1481
msgid "Cale_ndar"
msgstr "Kale_ndari"
-#: ../calendar/gui/calendar-component.c:1482
+#: calendar/gui/calendar-component.c:1482
msgid "Create a new calendar"
msgstr "Krijo një kalendar të ri"
-#: ../calendar/gui/calendar-view-factory.c:109
+#: calendar/gui/calendar-view-factory.c:109
msgid "Day View"
msgstr "Paraqitja ditore"
-#: ../calendar/gui/calendar-view-factory.c:112
+#: calendar/gui/calendar-view-factory.c:112
msgid "Work Week View"
msgstr "Paraqitja e javës së punës"
-#: ../calendar/gui/calendar-view-factory.c:115
+#: calendar/gui/calendar-view-factory.c:115
msgid "Week View"
msgstr "Paraqitja javore"
-#: ../calendar/gui/calendar-view-factory.c:118
+#: calendar/gui/calendar-view-factory.c:118
msgid "Month View"
msgstr "Paraqitja mujore"
-#: ../calendar/gui/comp-editor-factory.c:413
+#: calendar/gui/comp-editor-factory.c:413
msgid "Error while opening the calendar"
msgstr "Gabim gjatë hapjes së kalendarit"
-#: ../calendar/gui/comp-editor-factory.c:419
+#: calendar/gui/comp-editor-factory.c:419
msgid "Method not supported when opening the calendar"
msgstr "Metodë e pasuportuar gjatë hapjes së kalendarit"
-#: ../calendar/gui/comp-editor-factory.c:425
+#: calendar/gui/comp-editor-factory.c:425
msgid "Permission denied to open the calendar"
msgstr "Nuk ke të drejtë të hapësh kalendarin"
-#: ../calendar/gui/comp-editor-factory.c:437 ../shell/e-shell.c:1264
+#: calendar/gui/comp-editor-factory.c:437 shell/e-shell.c:1264
msgid "Unknown error"
msgstr "Gabim i panjohur"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:1
+#: calendar/gui/dialogs/alarm-dialog.glade.h:1
msgid "<b>Alarm</b>"
msgstr "<b>Alarm</b>"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:2
+#: calendar/gui/dialogs/alarm-dialog.glade.h:2
msgid "<b>Options</b>"
msgstr "<b>Mundësi</b>"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:3
+#: calendar/gui/dialogs/alarm-dialog.glade.h:3
msgid "<b>Repeat</b>"
msgstr "<b>Përsërite</b>"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:4
+#: calendar/gui/dialogs/alarm-dialog.glade.h:4
msgid "Add Alarm"
msgstr "Shto Alarm"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:5
+#: calendar/gui/dialogs/alarm-dialog.glade.h:5
msgid "Custom _message"
msgstr "_Mesazhi i personalizuar"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:6
+#: calendar/gui/dialogs/alarm-dialog.glade.h:6
msgid "Custom alarm sound"
msgstr "Tingulli i personalizuar i alarmit"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:7
+#: calendar/gui/dialogs/alarm-dialog.glade.h:7
msgid "Mes_sage:"
msgstr "Me_sazhi:"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:8
-#: ../calendar/gui/e-alarm-list.c:444
+#: calendar/gui/dialogs/alarm-dialog.glade.h:8 calendar/gui/e-alarm-list.c:444
msgid "Play a sound"
msgstr "Lësho një tingull"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:9
-#: ../calendar/gui/e-alarm-list.c:448
+#: calendar/gui/dialogs/alarm-dialog.glade.h:9 calendar/gui/e-alarm-list.c:448
msgid "Pop up an alert"
msgstr "Shfaq një thirrje"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:10
-#: ../calendar/gui/e-alarm-list.c:456
+#: calendar/gui/dialogs/alarm-dialog.glade.h:10
+#: calendar/gui/e-alarm-list.c:456
msgid "Run a program"
msgstr "Ekzekuto një program"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:11
+#: calendar/gui/dialogs/alarm-dialog.glade.h:11
msgid "Send To:"
msgstr "Dërgo tek:"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:12
-#: ../calendar/gui/e-alarm-list.c:452
+#: calendar/gui/dialogs/alarm-dialog.glade.h:12
+#: calendar/gui/e-alarm-list.c:452
msgid "Send an email"
msgstr "Dërgo një email"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:13
+#: calendar/gui/dialogs/alarm-dialog.glade.h:13
msgid "_Arguments:"
msgstr "_Argumente:"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:14
+#: calendar/gui/dialogs/alarm-dialog.glade.h:14
msgid "_Program:"
msgstr "_Programi:"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:15
+#: calendar/gui/dialogs/alarm-dialog.glade.h:15
msgid "_Repeat the alarm"
msgstr "_Përsërit alarmin"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:16
+#: calendar/gui/dialogs/alarm-dialog.glade.h:16
msgid "_Sound:"
msgstr "_Tingulli:"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:17
+#: calendar/gui/dialogs/alarm-dialog.glade.h:17
msgid "after"
msgstr "mbas"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:18
+#: calendar/gui/dialogs/alarm-dialog.glade.h:18
msgid "before"
msgstr "përpara"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:19
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:7
+#: calendar/gui/dialogs/alarm-dialog.glade.h:19
+#: calendar/gui/dialogs/recurrence-page.glade.h:7
msgid "day(s)"
msgstr "ditë"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:21
+#: calendar/gui/dialogs/alarm-dialog.glade.h:21
msgid "end of appointment"
msgstr "fundit të takimit"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:22
+#: calendar/gui/dialogs/alarm-dialog.glade.h:22
msgid "extra times every"
msgstr "kohë më tepër çdo"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:23
+#: calendar/gui/dialogs/alarm-dialog.glade.h:23
msgid "hour(s)"
msgstr "orë"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:24
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:13
-#: ../filter/filter.glade.h:15 ../plugins/calendar-http/calendar-http.c:264
-#: ../plugins/calendar-weather/calendar-weather.c:565
+#: calendar/gui/dialogs/alarm-dialog.glade.h:24
+#: calendar/gui/dialogs/calendar-setup.glade.h:13 filter/filter.glade.h:15
+#: plugins/calendar-http/calendar-http.c:264
+#: plugins/calendar-weather/calendar-weather.c:565
msgid "hours"
msgstr "orë"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:25
+#: calendar/gui/dialogs/alarm-dialog.glade.h:25
msgid "minute(s)"
msgstr "minutë(a)"
-#: ../calendar/gui/dialogs/alarm-dialog.glade.h:27
+#: calendar/gui/dialogs/alarm-dialog.glade.h:27
msgid "start of appointment"
msgstr "fillimit të takimit"
-#: ../calendar/gui/dialogs/alarm-list-dialog.c:199
+#: calendar/gui/dialogs/alarm-list-dialog.c:199
msgid "Action/Trigger"
msgstr "Veprimi"
-#: ../calendar/gui/dialogs/alarm-list-dialog.glade.h:1
+#: calendar/gui/dialogs/alarm-list-dialog.glade.h:1
msgid "A_dd"
msgstr "Sh_to"
-#: ../calendar/gui/dialogs/alarm-list-dialog.glade.h:2
+#: calendar/gui/dialogs/alarm-list-dialog.glade.h:2
msgid "Alarms"
msgstr "Alarme"
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:108
-#: ../composer/e-msg-composer-attachment-bar.c:103
+#: calendar/gui/dialogs/cal-attachment-bar.c:108
+#: composer/e-msg-composer-attachment-bar.c:103
#, c-format
msgid "%.0fK"
msgstr "%.0fK"
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:111
-#: ../composer/e-msg-composer-attachment-bar.c:106
+#: calendar/gui/dialogs/cal-attachment-bar.c:111
+#: composer/e-msg-composer-attachment-bar.c:106
#, c-format
msgid "%.0fM"
msgstr "%.0fM"
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:114
-#: ../composer/e-msg-composer-attachment-bar.c:109
+#: calendar/gui/dialogs/cal-attachment-bar.c:114
+#: composer/e-msg-composer-attachment-bar.c:109
#, c-format
msgid "%.0fG"
msgstr "%.0fG"
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:298
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:922
-#: ../composer/e-msg-composer-attachment-bar.c:295 ../mail/em-utils.c:436
+#: calendar/gui/dialogs/cal-attachment-bar.c:298
+#: calendar/gui/dialogs/cal-attachment-bar.c:922
+#: composer/e-msg-composer-attachment-bar.c:295 mail/em-utils.c:436
msgid "attachment"
msgstr "bashkangjitur"
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:439
-#: ../calendar/gui/dialogs/meeting-page.c:781
-#: ../composer/e-msg-composer-attachment-bar.c:437
-#: ../plugins/shared-folder/properties.glade.h:14
+#: calendar/gui/dialogs/cal-attachment-bar.c:439
+#: calendar/gui/dialogs/meeting-page.c:781
+#: composer/e-msg-composer-attachment-bar.c:437
+#: plugins/shared-folder/properties.glade.h:14
msgid "_Remove"
msgstr "_Hiq"
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:440
-#: ../composer/e-msg-composer-attachment-bar.c:438
-#: ../mail/em-folder-tree.c:2818 ../ui/evolution-mail-list.xml.h:27
+#: calendar/gui/dialogs/cal-attachment-bar.c:440
+#: composer/e-msg-composer-attachment-bar.c:438 mail/em-folder-tree.c:2818
+#: ui/evolution-mail-list.xml.h:27
msgid "_Properties"
msgstr "_Pronësitë"
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:442
-#: ../composer/e-msg-composer-attachment-bar.c:440
+#: calendar/gui/dialogs/cal-attachment-bar.c:442
+#: composer/e-msg-composer-attachment-bar.c:440
msgid "_Add attachment..."
msgstr "_Shto të bashkangjitur..."
-#: ../calendar/gui/dialogs/cal-attachment-bar.c:699
-#: ../composer/e-msg-composer-attachment-bar.c:703
+#: calendar/gui/dialogs/cal-attachment-bar.c:699
+#: composer/e-msg-composer-attachment-bar.c:703
msgid "Attachment Bar"
msgstr "Shtylla e bashkangjitjes"
-#: ../calendar/gui/dialogs/cal-attachment-select-file.c:96
-#: ../calendar/gui/dialogs/cal-attachment-select-file.c:115
-#: ../calendar/gui/dialogs/cal-attachment.glade.h:6
-#: ../composer/e-msg-composer-attachment.glade.h:6
-#: ../composer/e-msg-composer-select-file.c:95
-#: ../composer/e-msg-composer-select-file.c:115
+#: calendar/gui/dialogs/cal-attachment-select-file.c:96
+#: calendar/gui/dialogs/cal-attachment-select-file.c:115
+#: calendar/gui/dialogs/cal-attachment.glade.h:6
+#: composer/e-msg-composer-attachment.glade.h:6
+#: composer/e-msg-composer-select-file.c:95
+#: composer/e-msg-composer-select-file.c:115
msgid "Suggest automatic display of attachment"
msgstr "Preferohet paraqitja automatike e të bashkangjiturve"
-#: ../calendar/gui/dialogs/cal-attachment-select-file.c:190
-#: ../composer/e-msg-composer-select-file.c:231
+#: calendar/gui/dialogs/cal-attachment-select-file.c:190
+#: composer/e-msg-composer-select-file.c:231
msgid "Attach file(s)"
msgstr "Bashkangjit file(s)"
-#: ../calendar/gui/dialogs/cal-attachment.c:197
-#: ../calendar/gui/dialogs/cal-attachment.c:213
-#: ../composer/e-msg-composer-attachment.c:174
-#: ../composer/e-msg-composer-attachment.c:190
+#: calendar/gui/dialogs/cal-attachment.c:197
+#: calendar/gui/dialogs/cal-attachment.c:213
+#: composer/e-msg-composer-attachment.c:174
+#: composer/e-msg-composer-attachment.c:190
#, c-format
msgid "Cannot attach file %s: %s"
msgstr "Bashkangjitja e file %s është e pamundur: %s"
-#: ../calendar/gui/dialogs/cal-attachment.c:205
-#: ../composer/e-msg-composer-attachment.c:182
+#: calendar/gui/dialogs/cal-attachment.c:205
+#: composer/e-msg-composer-attachment.c:182
#, c-format
msgid "Cannot attach file %s: not a regular file"
msgstr "Bashkangjitja e file %s është e pamundur: nuk është një file i rregullt"
-#: ../calendar/gui/dialogs/cal-attachment.glade.h:2
-#: ../composer/e-msg-composer-attachment.glade.h:2
+#: calendar/gui/dialogs/cal-attachment.glade.h:2
+#: composer/e-msg-composer-attachment.glade.h:2
msgid "Attachment Properties"
msgstr "Pronësitë e të bashkangjiturit"
-#: ../calendar/gui/dialogs/cal-attachment.glade.h:3
-#: ../calendar/gui/e-cal-component-preview.c:267
-#: ../calendar/gui/e-itip-control.c:1164
-#: ../calendar/gui/e-itip-control.glade.h:6
-#: ../composer/e-msg-composer-attachment.glade.h:3
-#: ../mail/mail-config.glade.h:68
+#: calendar/gui/dialogs/cal-attachment.glade.h:3
+#: calendar/gui/e-cal-component-preview.c:267
+#: calendar/gui/e-itip-control.c:1164 calendar/gui/e-itip-control.glade.h:6
+#: composer/e-msg-composer-attachment.glade.h:3 mail/mail-config.glade.h:68
msgid "Description:"
msgstr "Përshkrimi:"
-#: ../calendar/gui/dialogs/cal-attachment.glade.h:4
-#: ../composer/e-msg-composer-attachment.glade.h:4
+#: calendar/gui/dialogs/cal-attachment.glade.h:4
+#: composer/e-msg-composer-attachment.glade.h:4
msgid "File name:"
msgstr "Emri i file:"
-#: ../calendar/gui/dialogs/cal-attachment.glade.h:5
-#: ../composer/e-msg-composer-attachment.glade.h:5
+#: calendar/gui/dialogs/cal-attachment.glade.h:5
+#: composer/e-msg-composer-attachment.glade.h:5
msgid "MIME type:"
msgstr "Lloji MIME:"
#. g_object_set((GObject *)renderer, "activatable", TRUE, NULL);
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:576
-#: ../mail/em-account-prefs.c:476 ../mail/em-composer-prefs.c:888
-#: ../plugins/plugin-manager/plugin-manager.c:213
+#: calendar/gui/dialogs/cal-prefs-dialog.c:576 mail/em-account-prefs.c:476
+#: mail/em-composer-prefs.c:888 plugins/plugin-manager/plugin-manager.c:213
msgid "Enabled"
msgstr "Aktiv"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:730
+#: calendar/gui/dialogs/cal-prefs-dialog.c:730
msgid "Are you sure you want to remove this URL?"
msgstr "Jeni i sigurt që dëshiron të eleminosh këtë URL?"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:733
+#: calendar/gui/dialogs/cal-prefs-dialog.c:733
msgid "Remove"
msgstr "Hiq"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:738
+#: calendar/gui/dialogs/cal-prefs-dialog.c:738
msgid "Don't Remove"
msgstr "Mos e hiq"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:787
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:820
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:853
-#: ../mail/em-account-prefs.c:323 ../mail/em-account-prefs.c:351
-#: ../mail/em-account-prefs.c:382
+#: calendar/gui/dialogs/cal-prefs-dialog.c:787
+#: calendar/gui/dialogs/cal-prefs-dialog.c:820
+#: calendar/gui/dialogs/cal-prefs-dialog.c:853 mail/em-account-prefs.c:323
+#: mail/em-account-prefs.c:351 mail/em-account-prefs.c:382
msgid "Disable"
msgstr "Ç'aktivo"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:787
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:820
-#: ../calendar/gui/dialogs/cal-prefs-dialog.c:855
-#: ../mail/em-account-prefs.c:323 ../mail/em-account-prefs.c:351
-#: ../mail/em-account-prefs.c:384
+#: calendar/gui/dialogs/cal-prefs-dialog.c:787
+#: calendar/gui/dialogs/cal-prefs-dialog.c:820
+#: calendar/gui/dialogs/cal-prefs-dialog.c:855 mail/em-account-prefs.c:323
+#: mail/em-account-prefs.c:351 mail/em-account-prefs.c:384
msgid "Enable"
msgstr "Aktivo"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:2
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:2
msgid "05 minutes"
msgstr "05 minuta"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:3
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:3
msgid "10 minutes"
msgstr "10 minuta"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:4
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:4
msgid "15 minutes"
msgstr "15 minuta"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:5
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:5
msgid "30 minutes"
msgstr "30 minuta"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:6
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:6
msgid "60 minutes"
msgstr "60 minuta"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:7
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:7
msgid "<b>Alerts</b>"
msgstr "<b>Alarme</b>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:8
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:8
msgid "<b>Default Free/Busy Server</b>"
msgstr "<b>Serveri i prezgjedhur i disponibilitetit</b>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:9
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:9
msgid "<b>General</b>"
msgstr "<b>Të përgjithshme</b>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:10
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:10
msgid "<b>Publishing</b>"
msgstr "<b>Publikim</b>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:11
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:11
msgid "<b>Task List</b>"
msgstr "<b>Lista e aktiviteteve</b>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:12
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:12
msgid "<b>Time</b>"
msgstr "<b>Koha</b>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:13
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:13
msgid "<b>Work Week</b>"
msgstr "<b>Java punuese</b>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:15
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:15
#, no-c-format
msgid "<i>%u and %d will be replaced by user and domain from the email address.</i>"
msgstr ""
"<i>%u dhe %d do të zëvendësohen me përdoruesin dhe domain nga adresa email.</"
"i>"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:16
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:16
msgid "Calendar and Tasks Settings"
msgstr "Konfigurimi i kalendarit dhe aktiviteteve"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:17
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:17
msgid "Color for overdue tasks"
msgstr "Ngjyra për aktivitetet e skaduara"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:18
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:18
msgid "Color for tasks due today"
msgstr "Ngjyra për aktivitetet e sotme"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:19
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:19
msgid "Day _ends:"
msgstr "Funde dit_e:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:20
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:20
msgid "Days"
msgstr "Ditë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:21
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:21
msgid "Display"
msgstr "Shfaq"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:22
-#: ../mail/mail-config.glade.h:73
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:22
+#: mail/mail-config.glade.h:73
msgid "E_nable"
msgstr "A_ktivo"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:23
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:23
msgid "Free/Busy"
msgstr "I lirë/zënë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:24
-#: ../calendar/gui/dialogs/recurrence-page.c:1044
-#: ../calendar/gui/e-itip-control.c:732
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:24
+#: calendar/gui/dialogs/recurrence-page.c:1044
+#: calendar/gui/e-itip-control.c:732
msgid "Friday"
msgstr "E premte"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:26
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:26
msgid "Hours"
msgstr "Orë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:27
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:27
msgid "Minutes"
msgstr "Minuta"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:28
-#: ../calendar/gui/dialogs/recurrence-page.c:1040
-#: ../calendar/gui/e-itip-control.c:728
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:28
+#: calendar/gui/dialogs/recurrence-page.c:1040
+#: calendar/gui/e-itip-control.c:728
msgid "Monday"
msgstr "E hënë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:29
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:29
msgid "S_un"
msgstr "D_ie"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:30
-#: ../calendar/gui/dialogs/recurrence-page.c:1045
-#: ../calendar/gui/e-itip-control.c:733
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:30
+#: calendar/gui/dialogs/recurrence-page.c:1045
+#: calendar/gui/e-itip-control.c:733
msgid "Saturday"
msgstr "E shtunë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:31
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:31
msgid "Sh_ow a reminder"
msgstr "Sh_faq një përkujtues"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:32
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:32
msgid "Show week _numbers in date navigator"
msgstr "Shfaq _numrat e javëve"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:33
-#: ../calendar/gui/dialogs/recurrence-page.c:1046
-#: ../calendar/gui/e-itip-control.c:727
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:33
+#: calendar/gui/dialogs/recurrence-page.c:1046
+#: calendar/gui/e-itip-control.c:727
msgid "Sunday"
msgstr "E djelë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:34
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:34
msgid "T_asks due today:"
msgstr "A_ktivitetet për ditën e sotme:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:35
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:35
msgid "T_hu"
msgstr "E_nj"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:36
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:36
msgid "Template:"
msgstr "Modeli:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:37
-#: ../calendar/gui/dialogs/recurrence-page.c:1043
-#: ../calendar/gui/e-itip-control.c:731
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:37
+#: calendar/gui/dialogs/recurrence-page.c:1043
+#: calendar/gui/e-itip-control.c:731
msgid "Thursday"
msgstr "E enjte"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:38
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:38
msgid "Time _zone:"
msgstr "Zona e orës:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:39
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:39
msgid "Time format:"
msgstr "Formati i orës:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:40
-#: ../calendar/gui/dialogs/recurrence-page.c:1041
-#: ../calendar/gui/e-itip-control.c:729
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:40
+#: calendar/gui/dialogs/recurrence-page.c:1041
+#: calendar/gui/e-itip-control.c:729
msgid "Tuesday"
msgstr "E martë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:41
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:41
msgid "W_eek starts:"
msgstr "Fillim jav_e:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:42
-#: ../calendar/gui/dialogs/recurrence-page.c:1042
-#: ../calendar/gui/e-itip-control.c:730
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:42
+#: calendar/gui/dialogs/recurrence-page.c:1042
+#: calendar/gui/e-itip-control.c:730
msgid "Wednesday"
msgstr "E mërkurë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:43
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:43
msgid "Work days:"
msgstr "Ditët e punës:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:44
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:44
msgid "_12 hour (AM/PM)"
msgstr "_12 orë (AM/PM)"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:45
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:45
msgid "_24 hour"
msgstr "_24 orë"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:46
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:46
msgid "_Add URL"
msgstr "_Shto URL"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:47
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:47
msgid "_Ask for confirmation when deleting items"
msgstr "_Kërko konfermimin para se të eleminosh elementët"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:48
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:48
msgid "_Compress weekends in month view"
msgstr "_Kompreso fundjavën tek paraqitja mujore"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:49
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:49
msgid "_Day begins:"
msgstr "Fillimi i _ditës:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:51
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:51
msgid "_Fri"
msgstr "_Pre"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:52
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:52
msgid "_Hide completed tasks after"
msgstr "_Fshih aktivitetet e plotësuara mbas"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:53
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:53
msgid "_Mon"
msgstr "_Hën"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:54
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:54
msgid "_Overdue tasks:"
msgstr "_Aktivitete të skaduara:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:55
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:55
msgid "_Sat"
msgstr "_Sht"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:56
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:56
msgid "_Show appointment end times in week and month views"
msgstr "_Shfaq skadimet e takimeve tek paraqitjet javore dhe mujore"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:57
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:57
msgid "_Time divisions:"
msgstr "Ndarja e _kohës:"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:58
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:58
msgid "_Tue"
msgstr "_Mar"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:59
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:59
msgid "_Wed"
msgstr "_Mër"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:60
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:60
msgid "before every appointment"
msgstr "para çdo takimi"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:61
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:61
msgid "option menu to choose reminder units"
msgstr "menu opcionesh për të zgjedhur njësitë e përkujtuesit"
-#: ../calendar/gui/dialogs/cal-prefs-dialog.glade.h:62
+#: calendar/gui/dialogs/cal-prefs-dialog.glade.h:62
msgid "option menu to choose time units"
msgstr "menu opcionesh për të zgjedhur njësitë e kohës"
-#: ../calendar/gui/dialogs/calendar-setup.c:284
+#: calendar/gui/dialogs/calendar-setup.c:284
msgid "Copy calendar contents locally for offline operation"
msgstr "Kopjo në lokale përmbajtjen e kartelës për veprime jashtë linje"
-#: ../calendar/gui/dialogs/calendar-setup.c:336
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:4
+#: calendar/gui/dialogs/calendar-setup.c:336
+#: calendar/gui/dialogs/calendar-setup.glade.h:4
msgid "C_olor:"
msgstr "Ngjyr_a:"
-#: ../calendar/gui/dialogs/calendar-setup.c:373
+#: calendar/gui/dialogs/calendar-setup.c:373
msgid "Tasks List"
msgstr "Lista e detyrave"
-#: ../calendar/gui/dialogs/calendar-setup.c:440
+#: calendar/gui/dialogs/calendar-setup.c:440
msgid "Calendar Properties"
msgstr "Pronësitë e kalendarit"
-#: ../calendar/gui/dialogs/calendar-setup.c:506
+#: calendar/gui/dialogs/calendar-setup.c:506
msgid "Task List Properties"
msgstr "Pronësitë e listës së detyrave"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:2
+#: calendar/gui/dialogs/calendar-setup.glade.h:2
msgid "Add Calendar"
msgstr "Shto një Kalendar"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:3
+#: calendar/gui/dialogs/calendar-setup.glade.h:3
msgid "Add Task List"
msgstr "Shto një Listë Aktivitetesh"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:5
-#: ../mail/mail-config.glade.h:102
+#: calendar/gui/dialogs/calendar-setup.glade.h:5 mail/mail-config.glade.h:102
msgid "Pick a color"
msgstr "Zgjidh një ngjyrë"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:6
+#: calendar/gui/dialogs/calendar-setup.glade.h:6
msgid "_Add Calendar"
msgstr "_Shto një Kalendar"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:7
+#: calendar/gui/dialogs/calendar-setup.glade.h:7
msgid "_Add Task List"
msgstr "_Shto një Listë Aktivitetesh"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:9
-#: ../plugins/calendar-http/calendar-http.c:248
-#: ../plugins/calendar-weather/calendar-weather.c:549
+#: calendar/gui/dialogs/calendar-setup.glade.h:9
+#: plugins/calendar-http/calendar-http.c:248
+#: plugins/calendar-weather/calendar-weather.c:549
msgid "_Refresh:"
msgstr "_Rifreskimi:"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:11
-#: ../plugins/calendar-http/calendar-http.c:120
+#: calendar/gui/dialogs/calendar-setup.glade.h:11
+#: plugins/calendar-http/calendar-http.c:120
msgid "_URL:"
msgstr "_URL:"
-#: ../calendar/gui/dialogs/calendar-setup.glade.h:15
-#: ../filter/filter.glade.h:21 ../plugins/calendar-http/calendar-http.c:266
-#: ../plugins/calendar-weather/calendar-weather.c:567
+#: calendar/gui/dialogs/calendar-setup.glade.h:15 filter/filter.glade.h:21
+#: plugins/calendar-http/calendar-http.c:266
+#: plugins/calendar-weather/calendar-weather.c:567
msgid "weeks"
msgstr "javë"
-#: ../calendar/gui/dialogs/changed-comp.c:60
+#: calendar/gui/dialogs/changed-comp.c:60
msgid "This event has been deleted."
msgstr "Kjo ngjarje u eleminua."
-#: ../calendar/gui/dialogs/changed-comp.c:64
+#: calendar/gui/dialogs/changed-comp.c:64
msgid "This task has been deleted."
msgstr "Ky aktivitet u eleminua."
-#: ../calendar/gui/dialogs/changed-comp.c:68
+#: calendar/gui/dialogs/changed-comp.c:68
msgid "This journal entry has been deleted."
msgstr "Ky zë u eleminua."
-#: ../calendar/gui/dialogs/changed-comp.c:77
+#: calendar/gui/dialogs/changed-comp.c:77
#, c-format
msgid "%s You have made changes. Forget those changes and close the editor?"
msgstr "%s Keni kryer ndryshime. T'i harrojmë ndryshimet dhe të mbyll editorin?"
-#: ../calendar/gui/dialogs/changed-comp.c:79
+#: calendar/gui/dialogs/changed-comp.c:79
#, c-format
msgid "%s You have made no changes, close the editor?"
msgstr "%s Nuk keni kryer ndryshime, mbyll editorin?"
-#: ../calendar/gui/dialogs/changed-comp.c:84
+#: calendar/gui/dialogs/changed-comp.c:84
msgid "This event has been changed."
msgstr "Kjo ngjarje është ndryshuar."
-#: ../calendar/gui/dialogs/changed-comp.c:88
+#: calendar/gui/dialogs/changed-comp.c:88
msgid "This task has been changed."
msgstr "Ky aktivitet është ndryshuar."
-#: ../calendar/gui/dialogs/changed-comp.c:92
+#: calendar/gui/dialogs/changed-comp.c:92
msgid "This journal entry has been changed."
msgstr "Ky zë ditari është ndryshuar."
-#: ../calendar/gui/dialogs/changed-comp.c:101
+#: calendar/gui/dialogs/changed-comp.c:101
#, c-format
msgid "%s You have made changes. Forget those changes and update the editor?"
msgstr ""
"%s Keni kryer ndryshime. T'i harrojmë ndryshimet dhe të rifreskojmë "
"editorin?"
-#: ../calendar/gui/dialogs/changed-comp.c:103
+#: calendar/gui/dialogs/changed-comp.c:103
#, c-format
msgid "%s You have made no changes, update the editor?"
msgstr "%s Nuk keni kryer ndryshime, rifreskoj editorin?"
-#: ../calendar/gui/dialogs/comp-editor-page.c:464
+#: calendar/gui/dialogs/comp-editor-page.c:464
#, c-format
msgid "Validation error: %s"
msgstr "Gabim gjatë vleftësimit: %s"
-#: ../calendar/gui/dialogs/comp-editor-util.c:187 ../calendar/gui/print.c:2261
+#: calendar/gui/dialogs/comp-editor-util.c:187 calendar/gui/print.c:2261
msgid " to "
msgstr " për "
-#: ../calendar/gui/dialogs/comp-editor-util.c:191 ../calendar/gui/print.c:2265
+#: calendar/gui/dialogs/comp-editor-util.c:191 calendar/gui/print.c:2265
msgid " (Completed "
msgstr " (U plotësua "
-#: ../calendar/gui/dialogs/comp-editor-util.c:193 ../calendar/gui/print.c:2267
+#: calendar/gui/dialogs/comp-editor-util.c:193 calendar/gui/print.c:2267
msgid "Completed "
msgstr "U plotësua"
-#: ../calendar/gui/dialogs/comp-editor-util.c:198 ../calendar/gui/print.c:2272
+#: calendar/gui/dialogs/comp-editor-util.c:198 calendar/gui/print.c:2272
msgid " (Due "
msgstr " (Skadimi "
-#: ../calendar/gui/dialogs/comp-editor-util.c:200 ../calendar/gui/print.c:2274
+#: calendar/gui/dialogs/comp-editor-util.c:200 calendar/gui/print.c:2274
msgid "Due "
msgstr "Skadimi "
-#: ../calendar/gui/dialogs/comp-editor.c:181 ../composer/e-msg-composer.c:2676
+#: calendar/gui/dialogs/comp-editor.c:181 composer/e-msg-composer.c:2676
#, c-format
msgid "Attached message - %s"
msgstr "Mesazhi i bashkangjitur - %s"
#. translators, this count will always be >1
-#: ../calendar/gui/dialogs/comp-editor.c:186
-#: ../calendar/gui/dialogs/comp-editor.c:349 ../composer/e-msg-composer.c:2681
-#: ../composer/e-msg-composer.c:2844
+#: calendar/gui/dialogs/comp-editor.c:186
+#: calendar/gui/dialogs/comp-editor.c:349 composer/e-msg-composer.c:2681
+#: composer/e-msg-composer.c:2844
#, c-format
msgid "Attached message"
msgid_plural "%d attached messages"
msgstr[0] "Mesazh i bashkangjitur"
msgstr[1] "%d mesazhe të bashkangjitur"
-#: ../calendar/gui/dialogs/comp-editor.c:412
-#: ../calendar/gui/e-calendar-table.c:1164
-#: ../calendar/gui/e-calendar-view.c:1402 ../composer/e-msg-composer.c:2906
-#: ../mail/em-folder-tree.c:1046 ../mail/em-folder-view.c:966
-#: ../mail/message-list.c:1707 ../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:105 ../ui/evolution-tasks.xml.h:20
+#: calendar/gui/dialogs/comp-editor.c:412 calendar/gui/e-calendar-table.c:1164
+#: calendar/gui/e-calendar-view.c:1402 composer/e-msg-composer.c:2906
+#: mail/em-folder-tree.c:1046 mail/em-folder-view.c:966
+#: mail/message-list.c:1707 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:105 ui/evolution-tasks.xml.h:20
msgid "_Copy"
msgstr "_Kopjo"
-#: ../calendar/gui/dialogs/comp-editor.c:413 ../composer/e-msg-composer.c:2907
-#: ../mail/em-folder-tree.c:1047 ../mail/em-folder-tree.c:2311
-#: ../mail/em-folder-view.c:862 ../mail/message-list.c:1708
+#: calendar/gui/dialogs/comp-editor.c:413 composer/e-msg-composer.c:2907
+#: mail/em-folder-tree.c:1047 mail/em-folder-tree.c:2311
+#: mail/em-folder-view.c:862 mail/message-list.c:1708
msgid "_Move"
msgstr "_Lëviz"
-#: ../calendar/gui/dialogs/comp-editor.c:415 ../composer/e-msg-composer.c:2909
-#: ../mail/em-folder-tree.c:1049 ../mail/message-list.c:1710
+#: calendar/gui/dialogs/comp-editor.c:415 composer/e-msg-composer.c:2909
+#: mail/em-folder-tree.c:1049 mail/message-list.c:1710
msgid "Cancel _Drag"
msgstr "Anullo _zvarritjen"
-#: ../calendar/gui/dialogs/comp-editor.c:682
+#: calendar/gui/dialogs/comp-editor.c:682
msgid "Could not update object"
msgstr "I pamundur rifreskimi i objektit"
-#: ../calendar/gui/dialogs/comp-editor.c:843 ../composer/e-msg-composer.c:2310
+#: calendar/gui/dialogs/comp-editor.c:843 composer/e-msg-composer.c:2310
#, c-format
msgid "<b>%d</b> File Attached"
msgid_plural "<b>%d</b> Files Attached"
msgstr[0] "<b>%d</b> File i Bashkangjitur"
msgstr[1] "<b>%d</b> Files të Bashkangjitur"
-#: ../calendar/gui/dialogs/comp-editor.c:900 ../composer/e-msg-composer.c:2339
+#: calendar/gui/dialogs/comp-editor.c:900 composer/e-msg-composer.c:2339
msgid "Hide _Attachment Bar (drop attachments here)"
msgstr "Fshih shtyllën e _bashkangjitjes (sill këtu të bashkangjiturit)"
-#: ../calendar/gui/dialogs/comp-editor.c:903
-#: ../calendar/gui/dialogs/comp-editor.c:955 ../composer/e-msg-composer.c:2342
-#: ../composer/e-msg-composer.c:3471
+#: calendar/gui/dialogs/comp-editor.c:903
+#: calendar/gui/dialogs/comp-editor.c:955 composer/e-msg-composer.c:2342
+#: composer/e-msg-composer.c:3471
msgid "Show _Attachment Bar (drop attachments here)"
msgstr "Shfaq shtyllën e _bashkangjitjes (sill këtu të bashkangjiturit)"
-#: ../calendar/gui/dialogs/comp-editor.c:979 ../composer/e-msg-composer.c:3493
+#: calendar/gui/dialogs/comp-editor.c:979 composer/e-msg-composer.c:3493
msgid "Attachment Button: Press space key to toggle attachment bar"
msgstr ""
"Pulsanti i bashkangjitjes: shtyp pulsantin hapësirë për të hapur dhe/ose "
"mbyllur shtyllën e bashkangjitjes"
-#: ../calendar/gui/dialogs/comp-editor.c:1526
-#: ../calendar/gui/dialogs/comp-editor.c:1569
+#: calendar/gui/dialogs/comp-editor.c:1526
+#: calendar/gui/dialogs/comp-editor.c:1569
msgid "Edit Appointment"
msgstr "Ndrysho takimin"
-#: ../calendar/gui/dialogs/comp-editor.c:1532
-#: ../calendar/gui/dialogs/comp-editor.c:1575
+#: calendar/gui/dialogs/comp-editor.c:1532
+#: calendar/gui/dialogs/comp-editor.c:1575
#, c-format
msgid "Meeting - %s"
msgstr "Takimi - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1534
-#: ../calendar/gui/dialogs/comp-editor.c:1577
+#: calendar/gui/dialogs/comp-editor.c:1534
+#: calendar/gui/dialogs/comp-editor.c:1577
#, c-format
msgid "Appointment - %s"
msgstr "Takimi - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1538
-#: ../calendar/gui/dialogs/comp-editor.c:1581
+#: calendar/gui/dialogs/comp-editor.c:1538
+#: calendar/gui/dialogs/comp-editor.c:1581
#, c-format
msgid "Assigned Task - %s"
msgstr "Aktivitet i caktuar - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1540
-#: ../calendar/gui/dialogs/comp-editor.c:1583
+#: calendar/gui/dialogs/comp-editor.c:1540
+#: calendar/gui/dialogs/comp-editor.c:1583
#, c-format
msgid "Task - %s"
msgstr "Aktiviteti - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1543
-#: ../calendar/gui/dialogs/comp-editor.c:1586
+#: calendar/gui/dialogs/comp-editor.c:1543
+#: calendar/gui/dialogs/comp-editor.c:1586
#, c-format
msgid "Journal entry - %s"
msgstr "Zë i ditarit - %s"
-#: ../calendar/gui/dialogs/comp-editor.c:1554
-#: ../calendar/gui/dialogs/comp-editor.c:1596
+#: calendar/gui/dialogs/comp-editor.c:1554
+#: calendar/gui/dialogs/comp-editor.c:1596
msgid "No summary"
msgstr "Asnjë përmbledhje"
-#: ../calendar/gui/dialogs/comp-editor.c:2030
-#: ../calendar/gui/dialogs/comp-editor.c:2063
-#: ../calendar/gui/dialogs/comp-editor.c:2087
+#: calendar/gui/dialogs/comp-editor.c:2030
+#: calendar/gui/dialogs/comp-editor.c:2063
+#: calendar/gui/dialogs/comp-editor.c:2087
msgid "Changes made to this item may be discarded if an update arrives"
msgstr ""
"Ndryshimet e kryera në këtë element mund të anullohen nëse arrin një "
"rifreskim"
-#: ../calendar/gui/dialogs/comp-editor.c:2111
+#: calendar/gui/dialogs/comp-editor.c:2111
msgid "Unable to use current version!"
msgstr "I pamundur përdorimi i versionit aktual!"
-#: ../calendar/gui/dialogs/copy-source-dialog.c:61
+#: calendar/gui/dialogs/copy-source-dialog.c:61
msgid "Could not open source"
msgstr "E pamundur hapja e burimit"
-#: ../calendar/gui/dialogs/copy-source-dialog.c:69
+#: calendar/gui/dialogs/copy-source-dialog.c:69
msgid "Could not open destination"
msgstr "E pamundur hapja e objektivit"
-#: ../calendar/gui/dialogs/copy-source-dialog.c:78
+#: calendar/gui/dialogs/copy-source-dialog.c:78
msgid "Destination is read only"
msgstr "Objektivi mund vetëm të lexohet"
-#: ../calendar/gui/dialogs/delete-error.c:54
+#: calendar/gui/dialogs/delete-error.c:54
msgid "The event could not be deleted due to a corba error"
msgstr "Ngjarja nuk mund të anullohet për shkak të një gabimi të corba"
-#: ../calendar/gui/dialogs/delete-error.c:57
+#: calendar/gui/dialogs/delete-error.c:57
msgid "The task could not be deleted due to a corba error"
msgstr "Aktiviteti nuk mund të anullohet për shkak të një gabimi të corba"
-#: ../calendar/gui/dialogs/delete-error.c:60
+#: calendar/gui/dialogs/delete-error.c:60
msgid "The journal entry could not be deleted due to a corba error"
msgstr "Zëri i ditarit nuk mund të anullohet për shkak të një gabimi të corba"
-#: ../calendar/gui/dialogs/delete-error.c:63
+#: calendar/gui/dialogs/delete-error.c:63
msgid "The item could not be deleted due to a corba error"
msgstr "Elementi nuk mund të eleminohet për shkak të një gabimi të corba"
-#: ../calendar/gui/dialogs/delete-error.c:70
+#: calendar/gui/dialogs/delete-error.c:70
msgid "The event could not be deleted because permission was denied"
msgstr "Ngjarja nuk do të fshihet pasi mungojnë të drejtat e nevojshme"
-#: ../calendar/gui/dialogs/delete-error.c:73
+#: calendar/gui/dialogs/delete-error.c:73
msgid "The task could not be deleted because permission was denied"
msgstr "Aktiviteti nuk do të fshihet pasi mungojnë të drejtat e nevojshme"
-#: ../calendar/gui/dialogs/delete-error.c:76
+#: calendar/gui/dialogs/delete-error.c:76
msgid "The journal entry could not be deleted because permission was denied"
msgstr "Zëri i ditarit nuk do të fshihet pasi mungojnë të drejtat e nevojshme"
-#: ../calendar/gui/dialogs/delete-error.c:79
+#: calendar/gui/dialogs/delete-error.c:79
msgid "The item could not be deleted because permission was denied"
msgstr "Elementi nuk do të fshihet pasi mungojnë të drejtat e nevojshme"
-#: ../calendar/gui/dialogs/delete-error.c:86
+#: calendar/gui/dialogs/delete-error.c:86
msgid "The event could not be deleted due to an error"
msgstr "Ngjarja nuk mund të anullohet për shkak të një gabimi"
-#: ../calendar/gui/dialogs/delete-error.c:89
+#: calendar/gui/dialogs/delete-error.c:89
msgid "The task could not be deleted due to an error"
msgstr "Aktiviteti nuk mund të anullohet për shkak të një gabimi"
-#: ../calendar/gui/dialogs/delete-error.c:92
+#: calendar/gui/dialogs/delete-error.c:92
msgid "The journal entry could not be deleted due to an error"
msgstr "Zëri i ditarit nuk mund të anullohet për shkak të një gabimi"
-#: ../calendar/gui/dialogs/delete-error.c:95
+#: calendar/gui/dialogs/delete-error.c:95
msgid "The item could not be deleted due to an error"
msgstr "Elementi nuk mund të eleminohet për shkak të një gabimi"
-#: ../calendar/gui/dialogs/e-delegate-dialog.glade.h:1
+#: calendar/gui/dialogs/e-delegate-dialog.glade.h:1
msgid "Contacts..."
msgstr "Kontakte..."
-#: ../calendar/gui/dialogs/e-delegate-dialog.glade.h:2
+#: calendar/gui/dialogs/e-delegate-dialog.glade.h:2
msgid "Delegate To:"
msgstr "Delegoje tek:"
-#: ../calendar/gui/dialogs/e-delegate-dialog.glade.h:3
+#: calendar/gui/dialogs/e-delegate-dialog.glade.h:3
msgid "Enter Delegate"
msgstr "Shto delegatin"
-#: ../calendar/gui/dialogs/event-editor.c:149
+#: calendar/gui/dialogs/event-editor.c:149
msgid "Recurrence"
msgstr "Përvjetor"
-#: ../calendar/gui/dialogs/event-editor.c:161
-#: ../calendar/gui/dialogs/event-editor.c:233
-#: ../calendar/gui/dialogs/event-editor.c:379
+#: calendar/gui/dialogs/event-editor.c:161
+#: calendar/gui/dialogs/event-editor.c:233
+#: calendar/gui/dialogs/event-editor.c:379
msgid "Scheduling"
msgstr "Planifikim"
-#: ../calendar/gui/dialogs/event-editor.c:168
-#: ../calendar/gui/dialogs/event-editor.c:236
-#: ../calendar/gui/dialogs/event-editor.c:382
+#: calendar/gui/dialogs/event-editor.c:168
+#: calendar/gui/dialogs/event-editor.c:236
+#: calendar/gui/dialogs/event-editor.c:382
msgid "Invitations"
msgstr "Ftesa"
-#: ../calendar/gui/dialogs/event-page.c:725
+#: calendar/gui/dialogs/event-page.c:725
msgid "Event with no start date"
msgstr "Ngjarje pa datë fillimi"
-#: ../calendar/gui/dialogs/event-page.c:728
+#: calendar/gui/dialogs/event-page.c:728
msgid "Event with no end date"
msgstr "Ngjarje pa datë përfundimi"
-#: ../calendar/gui/dialogs/event-page.c:894
-#: ../calendar/gui/dialogs/task-page.c:561
+#: calendar/gui/dialogs/event-page.c:894 calendar/gui/dialogs/task-page.c:561
msgid "Start date is wrong"
msgstr "Data e fillimit është e gabuar"
-#: ../calendar/gui/dialogs/event-page.c:904
+#: calendar/gui/dialogs/event-page.c:904
msgid "End date is wrong"
msgstr "Data e përfundimit është e gabuar"
-#: ../calendar/gui/dialogs/event-page.c:927
+#: calendar/gui/dialogs/event-page.c:927
msgid "Start time is wrong"
msgstr "Ora e fillimit është e gabuar"
-#: ../calendar/gui/dialogs/event-page.c:934
+#: calendar/gui/dialogs/event-page.c:934
msgid "End time is wrong"
msgstr "Ora e përfundimit është e gabuar"
-#: ../calendar/gui/dialogs/event-page.c:1675
+#: calendar/gui/dialogs/event-page.c:1675
#, c-format
msgid "Unable to open the calendar '%s'."
msgstr "E pamundur hapja e kalendarit '%s'."
-#: ../calendar/gui/dialogs/event-page.c:1881
+#: calendar/gui/dialogs/event-page.c:1881
#, c-format
msgid "%d day before appointment"
msgid_plural "%d days before appointment"
msgstr[0] "%d ditë para takimit"
msgstr[1] "%d ditë para takimit"
-#: ../calendar/gui/dialogs/event-page.c:1889
+#: calendar/gui/dialogs/event-page.c:1889
#, c-format
msgid "%d hour before appointment"
msgid_plural "%d hours before appointment"
msgstr[0] "%d orë para takimit"
msgstr[1] "%d orë para takimit"
-#: ../calendar/gui/dialogs/event-page.c:1897
+#: calendar/gui/dialogs/event-page.c:1897
#, c-format
msgid "%d minute before appointement"
msgid_plural "%d minutes before appointment"
msgstr[0] "%d minutë para takimit"
msgstr[1] "%d minuta para takimit"
-#: ../calendar/gui/dialogs/event-page.glade.h:2
+#: calendar/gui/dialogs/event-page.glade.h:2
msgid "1 day before appointment"
msgstr "1 ditë para takimit"
-#: ../calendar/gui/dialogs/event-page.glade.h:3
+#: calendar/gui/dialogs/event-page.glade.h:3
msgid "1 hour before appointment"
msgstr "1 orë para takimit"
-#: ../calendar/gui/dialogs/event-page.glade.h:4
+#: calendar/gui/dialogs/event-page.glade.h:4
msgid "15 minutes before appointment"
msgstr "15 minuta para takimit"
-#: ../calendar/gui/dialogs/event-page.glade.h:5
-#: ../calendar/gui/dialogs/task-page.glade.h:1
+#: calendar/gui/dialogs/event-page.glade.h:5
+#: calendar/gui/dialogs/task-page.glade.h:1
msgid "<b>Basics</b>"
msgstr "<b>Të përgjithshme</b>"
-#: ../calendar/gui/dialogs/event-page.glade.h:6
-#: ../calendar/gui/dialogs/task-page.glade.h:2
+#: calendar/gui/dialogs/event-page.glade.h:6
+#: calendar/gui/dialogs/task-page.glade.h:2
msgid "<b>Date and Time</b>"
msgstr "<b>Data dhe Ora</b>"
-#: ../calendar/gui/dialogs/event-page.glade.h:7
-#: ../calendar/gui/dialogs/task-page.glade.h:3
+#: calendar/gui/dialogs/event-page.glade.h:7
+#: calendar/gui/dialogs/task-page.glade.h:3
msgid "<b>Send Options</b>"
msgstr "<b>Opcionet e dërgimit</b>"
-#: ../calendar/gui/dialogs/event-page.glade.h:8
+#: calendar/gui/dialogs/event-page.glade.h:8
msgid "A_ll day event"
msgstr "_Ngjarje të ditës"
-#: ../calendar/gui/dialogs/event-page.glade.h:9
+#: calendar/gui/dialogs/event-page.glade.h:9
msgid "Ad_vanced send options"
msgstr "Opcionet e de_tajuara të dërgimit"
-#: ../calendar/gui/dialogs/event-page.glade.h:10
+#: calendar/gui/dialogs/event-page.glade.h:10
msgid "C_ustomize..."
msgstr "P_ersonalizo..."
-#: ../calendar/gui/dialogs/event-page.glade.h:11
-#: ../calendar/gui/dialogs/task-page.glade.h:5
+#: calendar/gui/dialogs/event-page.glade.h:11
+#: calendar/gui/dialogs/task-page.glade.h:5
msgid "Ca_tegories..."
msgstr "Ka_tegori..."
-#: ../calendar/gui/dialogs/event-page.glade.h:12
+#: calendar/gui/dialogs/event-page.glade.h:12
msgid "Cale_ndar:"
msgstr "Kale_ndari:"
-#: ../calendar/gui/dialogs/event-page.glade.h:13
-#: ../calendar/gui/dialogs/task-page.glade.h:7
+#: calendar/gui/dialogs/event-page.glade.h:13
+#: calendar/gui/dialogs/task-page.glade.h:7
msgid "Classi_fication:"
msgstr "Klasi_fikimi:"
-#: ../calendar/gui/dialogs/event-page.glade.h:14
-#: ../calendar/gui/dialogs/task-page.glade.h:8
-#: ../calendar/gui/e-cal-list-view.c:255 ../calendar/gui/e-cal-model.c:305
-#: ../calendar/gui/e-calendar-table.c:362
+#: calendar/gui/dialogs/event-page.glade.h:14
+#: calendar/gui/dialogs/task-page.glade.h:8 calendar/gui/e-cal-list-view.c:255
+#: calendar/gui/e-cal-model.c:305 calendar/gui/e-calendar-table.c:362
msgid "Confidential"
msgstr "Në konfidencë"
-#: ../calendar/gui/dialogs/event-page.glade.h:15
+#: calendar/gui/dialogs/event-page.glade.h:15
msgid "Event Description"
msgstr "Përshkrimi i ndodhisë"
-#: ../calendar/gui/dialogs/event-page.glade.h:16
+#: calendar/gui/dialogs/event-page.glade.h:16
msgid "Locat_ion:"
msgstr "_Vendodhja:"
-#: ../calendar/gui/dialogs/event-page.glade.h:17
-#: ../calendar/gui/dialogs/task-page.glade.h:10
-#: ../calendar/gui/e-cal-list-view.c:254 ../calendar/gui/e-cal-model.c:303
-#: ../calendar/gui/e-calendar-table.c:361
+#: calendar/gui/dialogs/event-page.glade.h:17
+#: calendar/gui/dialogs/task-page.glade.h:10
+#: calendar/gui/e-cal-list-view.c:254 calendar/gui/e-cal-model.c:303
+#: calendar/gui/e-calendar-table.c:361
msgid "Private"
msgstr "Privat"
-#: ../calendar/gui/dialogs/event-page.glade.h:18
-#: ../calendar/gui/dialogs/task-page.glade.h:11
-#: ../calendar/gui/e-cal-list-view.c:253 ../calendar/gui/e-cal-model.c:294
-#: ../calendar/gui/e-cal-model.c:301 ../calendar/gui/e-calendar-table.c:360
+#: calendar/gui/dialogs/event-page.glade.h:18
+#: calendar/gui/dialogs/task-page.glade.h:11
+#: calendar/gui/e-cal-list-view.c:253 calendar/gui/e-cal-model.c:294
+#: calendar/gui/e-cal-model.c:301 calendar/gui/e-calendar-table.c:360
msgid "Public"
msgstr "Publik"
-#: ../calendar/gui/dialogs/event-page.glade.h:19
+#: calendar/gui/dialogs/event-page.glade.h:19
msgid "Show time as _busy"
msgstr "Shfaq kohën si i _zënë"
-#: ../calendar/gui/dialogs/event-page.glade.h:20
-#: ../calendar/gui/dialogs/task-page.glade.h:13
+#: calendar/gui/dialogs/event-page.glade.h:20
+#: calendar/gui/dialogs/task-page.glade.h:13
msgid "Su_mmary:"
msgstr "Për_mbledhja:"
-#: ../calendar/gui/dialogs/event-page.glade.h:21
+#: calendar/gui/dialogs/event-page.glade.h:21
msgid "This appointment has customized alarms"
msgstr "Ky takim ka alarme të personalizuar"
-#: ../calendar/gui/dialogs/event-page.glade.h:22
+#: calendar/gui/dialogs/event-page.glade.h:22
msgid "_Alarm"
msgstr "_Alarmi"
-#: ../calendar/gui/dialogs/event-page.glade.h:23
+#: calendar/gui/dialogs/event-page.glade.h:23
msgid "_Description:"
msgstr "_Përshkrimi:"
-#: ../calendar/gui/dialogs/event-page.glade.h:24
-#: ../calendar/gui/e-meeting-time-sel.c:642
+#: calendar/gui/dialogs/event-page.glade.h:24
+#: calendar/gui/e-meeting-time-sel.c:642
msgid "_End time:"
msgstr "Ora _mbarimit:"
-#: ../calendar/gui/dialogs/event-page.glade.h:25
-#: ../calendar/gui/e-meeting-time-sel.c:615
+#: calendar/gui/dialogs/event-page.glade.h:25
+#: calendar/gui/e-meeting-time-sel.c:615
msgid "_Start time:"
msgstr "Ora _fillimit:"
@@ -5837,613 +5798,603 @@ msgstr "Ora _fillimit:"
#. 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:296
-#: ../calendar/gui/dialogs/meeting-page.glade.h:5
-#: ../calendar/gui/e-cal-model-tasks.c:652
-#: ../calendar/gui/e-itip-control.c:1104 ../composer/e-msg-composer.c:2117
-#: ../filter/filter-rule.c:878 ../mail/em-account-editor.c:685
-#: ../mail/em-account-editor.c:1291 ../mail/em-account-prefs.c:437
-#: ../mail/em-folder-view.c:993
-#: ../plugins/calendar-weather/calendar-weather.c:371
-#: ../plugins/calendar-weather/calendar-weather.c:425
-#: ../plugins/itip-formatter/itip-formatter.c:1376
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.c:190
-#: ../widgets/misc/e-cell-date-edit.c:248 ../widgets/misc/e-dateedit.c:458
-#: ../widgets/misc/e-dateedit.c:1497 ../widgets/misc/e-dateedit.c:1651
+#: calendar/gui/dialogs/meeting-page.c:296
+#: calendar/gui/dialogs/meeting-page.glade.h:5
+#: calendar/gui/e-cal-model-tasks.c:652 calendar/gui/e-itip-control.c:1104
+#: composer/e-msg-composer.c:2117 filter/filter-rule.c:878
+#: mail/em-account-editor.c:685 mail/em-account-editor.c:1291
+#: mail/em-account-prefs.c:437 mail/em-folder-view.c:993
+#: plugins/calendar-weather/calendar-weather.c:371
+#: plugins/calendar-weather/calendar-weather.c:425
+#: plugins/itip-formatter/itip-formatter.c:1376
+#: widgets/e-timezone-dialog/e-timezone-dialog.c:190
+#: widgets/misc/e-cell-date-edit.c:248 widgets/misc/e-dateedit.c:458
+#: widgets/misc/e-dateedit.c:1497 widgets/misc/e-dateedit.c:1651
msgid "None"
msgstr "Asnjë"
-#: ../calendar/gui/dialogs/meeting-page.c:432
+#: calendar/gui/dialogs/meeting-page.c:432
msgid "The organizer selected no longer has an account."
msgstr "Organizuesi i zgjedhur nuk ka më një llogari."
-#: ../calendar/gui/dialogs/meeting-page.c:438
+#: calendar/gui/dialogs/meeting-page.c:438
msgid "An organizer is required."
msgstr "Nevoitet një organizues."
-#: ../calendar/gui/dialogs/meeting-page.c:453
+#: calendar/gui/dialogs/meeting-page.c:453
msgid "At least one attendee is required."
msgstr "Nevoitet të paktën një pjesmarrës."
-#: ../calendar/gui/dialogs/meeting-page.c:778
+#: calendar/gui/dialogs/meeting-page.c:778
msgid "_Delegate To..."
msgstr "_Delegoja..."
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:1
-#: ../calendar/gui/e-meeting-list-view.c:308
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:1
+#: calendar/gui/dialogs/meeting-page.etspec.h:1
+#: calendar/gui/e-meeting-list-view.c:308
+#: calendar/gui/e-meeting-time-sel.etspec.h:1
msgid "Attendee"
msgstr "Pjesmarrës"
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:2
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:2
+#: 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 "Kliko këtu për të shtuar një pjesmarrës֣"
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:3
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:3
+#: calendar/gui/dialogs/meeting-page.etspec.h:3
+#: calendar/gui/e-meeting-time-sel.etspec.h:3
msgid "Common Name"
msgstr "Emri i zakonshëm"
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:4
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:4
+#: calendar/gui/dialogs/meeting-page.etspec.h:4
+#: calendar/gui/e-meeting-time-sel.etspec.h:4
msgid "Delegated From"
msgstr "Deleguar nga"
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:5
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:5
+#: calendar/gui/dialogs/meeting-page.etspec.h:5
+#: calendar/gui/e-meeting-time-sel.etspec.h:5
msgid "Delegated To"
msgstr "Delegë për"
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:6
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:6
+#: calendar/gui/dialogs/meeting-page.etspec.h:6
+#: calendar/gui/e-meeting-time-sel.etspec.h:6
msgid "Language"
msgstr "Gjuha"
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:7
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:7
+#: calendar/gui/dialogs/meeting-page.etspec.h:7
+#: calendar/gui/e-meeting-time-sel.etspec.h:7
msgid "Member"
msgstr "Anëtar"
-#: ../calendar/gui/dialogs/meeting-page.etspec.h:8
-#: ../calendar/gui/e-meeting-list-view.c:333
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:8
+#: calendar/gui/dialogs/meeting-page.etspec.h:8
+#: calendar/gui/e-meeting-list-view.c:333
+#: 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:146
-#: ../calendar/gui/e-calendar-table.etspec.h:10
-#: ../calendar/gui/e-meeting-list-view.c:340
-#: ../calendar/gui/e-meeting-time-sel.etspec.h:10 ../mail/em-filter-i18n.h:63
-#: ../mail/message-list.etspec.h:12
+#: calendar/gui/dialogs/meeting-page.etspec.h:10
+#: calendar/gui/dialogs/task-editor.c:146
+#: calendar/gui/e-calendar-table.etspec.h:10
+#: calendar/gui/e-meeting-list-view.c:340
+#: calendar/gui/e-meeting-time-sel.etspec.h:10 mail/em-filter-i18n.h:63
+#: mail/message-list.etspec.h:12
msgid "Status"
msgstr "Gjendja"
-#: ../calendar/gui/dialogs/meeting-page.glade.h:2
+#: calendar/gui/dialogs/meeting-page.glade.h:2
msgid "<b>Att_endees</b>"
msgstr "<b>Pj_esmarrës</b>"
-#: ../calendar/gui/dialogs/meeting-page.glade.h:3
+#: calendar/gui/dialogs/meeting-page.glade.h:3
msgid "C_hange Organizer"
msgstr "Ndrys_ho Organizuesin"
-#: ../calendar/gui/dialogs/meeting-page.glade.h:4
-#: ../calendar/gui/e-meeting-time-sel.c:428
+#: calendar/gui/dialogs/meeting-page.glade.h:4
+#: calendar/gui/e-meeting-time-sel.c:428
msgid "Con_tacts..."
msgstr "Kon_takte..."
-#: ../calendar/gui/dialogs/meeting-page.glade.h:6
+#: calendar/gui/dialogs/meeting-page.glade.h:6
msgid "Or_ganizer:"
msgstr "Or_ganizuesi:"
-#: ../calendar/gui/dialogs/meeting-page.glade.h:7
+#: calendar/gui/dialogs/meeting-page.glade.h:7
msgid "Organizer"
msgstr "Organizuesi"
-#: ../calendar/gui/dialogs/meeting-page.glade.h:8
-#: ../calendar/gui/e-itip-control.glade.h:9
+#: calendar/gui/dialogs/meeting-page.glade.h:8
+#: calendar/gui/e-itip-control.glade.h:9
msgid "Organizer:"
msgstr "Organizuesi:"
-#: ../calendar/gui/dialogs/new-calendar.glade.h:2
+#: calendar/gui/dialogs/new-calendar.glade.h:2
msgid "<b>Calendar options</b>"
msgstr "<b>Opcione të Kalendarit</b>"
-#: ../calendar/gui/dialogs/new-calendar.glade.h:3
+#: calendar/gui/dialogs/new-calendar.glade.h:3
msgid "Add New Calendar"
msgstr "Shto një Kalendar të Ri"
-#: ../calendar/gui/dialogs/new-calendar.glade.h:4
+#: calendar/gui/dialogs/new-calendar.glade.h:4
msgid "Calendar Group"
msgstr "Grupi i kalendarit"
-#: ../calendar/gui/dialogs/new-calendar.glade.h:5
+#: calendar/gui/dialogs/new-calendar.glade.h:5
msgid "Calendar Location"
msgstr "Vendodhja e kalendarit"
-#: ../calendar/gui/dialogs/new-calendar.glade.h:6
+#: calendar/gui/dialogs/new-calendar.glade.h:6
msgid "Calendar Name"
msgstr "Emri i kalendarit"
-#: ../calendar/gui/dialogs/new-task-list.glade.h:2
+#: calendar/gui/dialogs/new-task-list.glade.h:2
msgid "<b>Task List Options</b>"
msgstr "<b>Opcionet e listës së aktiviteteve</b>"
-#: ../calendar/gui/dialogs/new-task-list.glade.h:3
+#: calendar/gui/dialogs/new-task-list.glade.h:3
msgid "Add New Task List"
msgstr "Shto një Listë të Re Aktivitetesh"
-#: ../calendar/gui/dialogs/new-task-list.glade.h:4
+#: calendar/gui/dialogs/new-task-list.glade.h:4
msgid "Task List Group"
msgstr "Grupi i listës së aktiviteteve"
-#: ../calendar/gui/dialogs/new-task-list.glade.h:5
+#: calendar/gui/dialogs/new-task-list.glade.h:5
msgid "Task List Name"
msgstr "Emri i listës së aktiviteteve"
-#: ../calendar/gui/dialogs/recur-comp.c:51
+#: calendar/gui/dialogs/recur-comp.c:51
msgid "You are modifying a recurring event, what would you like to modify?"
msgstr "Jeni duke ndryshuar një ngjarje përkujtimore, çfarë dëshironi të ndryshoni?"
-#: ../calendar/gui/dialogs/recur-comp.c:55
+#: calendar/gui/dialogs/recur-comp.c:55
msgid "You are modifying a recurring task, what would you like to modify?"
msgstr "Jeni duke ndryshuar një aktivitet përkujtimor, çfarë dëshironi të ndryshoni?"
-#: ../calendar/gui/dialogs/recur-comp.c:59
+#: calendar/gui/dialogs/recur-comp.c:59
msgid "You are modifying a recurring journal entry, what would you like to modify?"
msgstr "Jeni duke ndryshuar një zë ditari përkujtimor, çfarë dëshironi të ndryshoni?"
-#: ../calendar/gui/dialogs/recur-comp.c:87
+#: calendar/gui/dialogs/recur-comp.c:87
msgid "This Instance Only"
msgstr "Vetëm këtë instancë"
-#: ../calendar/gui/dialogs/recur-comp.c:91
+#: calendar/gui/dialogs/recur-comp.c:91
msgid "This and Prior Instances"
msgstr "Këtë dhe instancat paraardhëse"
-#: ../calendar/gui/dialogs/recur-comp.c:97
+#: calendar/gui/dialogs/recur-comp.c:97
msgid "This and Future Instances"
msgstr "Këtë dhe instancat e ardhëshme"
-#: ../calendar/gui/dialogs/recur-comp.c:102
+#: calendar/gui/dialogs/recur-comp.c:102
msgid "All Instances"
msgstr "Të gjitha instancat"
-#: ../calendar/gui/dialogs/recurrence-page.c:493
+#: calendar/gui/dialogs/recurrence-page.c:493
msgid "This appointment contains recurrences that Evolution cannot edit."
msgstr "Ky takim përmban ngjarje që Evolutin nuk mund të ndryshojë."
-#: ../calendar/gui/dialogs/recurrence-page.c:812
+#: calendar/gui/dialogs/recurrence-page.c:812
msgid "Recurrence date is invalid"
msgstr "Data e përkujtimores është e gabuar"
-#: ../calendar/gui/dialogs/recurrence-page.c:923
+#: calendar/gui/dialogs/recurrence-page.c:923
msgid "on"
msgstr "në"
-#: ../calendar/gui/dialogs/recurrence-page.c:984
+#: calendar/gui/dialogs/recurrence-page.c:984
msgid "first"
msgstr "i pari"
-#: ../calendar/gui/dialogs/recurrence-page.c:985
+#: calendar/gui/dialogs/recurrence-page.c:985
msgid "second"
msgstr "sekondë"
-#: ../calendar/gui/dialogs/recurrence-page.c:986
+#: calendar/gui/dialogs/recurrence-page.c:986
msgid "third"
msgstr "e treta"
-#: ../calendar/gui/dialogs/recurrence-page.c:987
+#: calendar/gui/dialogs/recurrence-page.c:987
msgid "fourth"
msgstr "e katërta"
-#: ../calendar/gui/dialogs/recurrence-page.c:988
+#: calendar/gui/dialogs/recurrence-page.c:988
msgid "last"
msgstr "e fundit"
-#: ../calendar/gui/dialogs/recurrence-page.c:1011
+#: calendar/gui/dialogs/recurrence-page.c:1011
msgid "Other Date"
msgstr "Datë tjetër"
-#: ../calendar/gui/dialogs/recurrence-page.c:1039
+#: calendar/gui/dialogs/recurrence-page.c:1039
msgid "day"
msgstr "ditë"
-#: ../calendar/gui/dialogs/recurrence-page.c:1176
+#: calendar/gui/dialogs/recurrence-page.c:1176
msgid "on the"
msgstr "tek"
-#: ../calendar/gui/dialogs/recurrence-page.c:1362
+#: calendar/gui/dialogs/recurrence-page.c:1362
msgid "occurrences"
msgstr "ngjarje"
-#: ../calendar/gui/dialogs/recurrence-page.c:2315
+#: calendar/gui/dialogs/recurrence-page.c:2315
msgid "Date/Time"
msgstr "Data/Ora"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:1
+#: calendar/gui/dialogs/recurrence-page.glade.h:1
msgid "<b>Exceptions</b>"
msgstr "<b>Përjashtime</b>"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:2
-#: ../mail/mail-config.glade.h:3
+#: calendar/gui/dialogs/recurrence-page.glade.h:2 mail/mail-config.glade.h:3
msgid "<b>Preview</b>"
msgstr "<b>Shikoje</b>"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:3
+#: calendar/gui/dialogs/recurrence-page.glade.h:3
msgid "<b>Recurrence</b>"
msgstr "<b>Përkujtimore</b>"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:4
+#: calendar/gui/dialogs/recurrence-page.glade.h:4
msgid "Every"
msgstr "Çdo"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:5
+#: calendar/gui/dialogs/recurrence-page.glade.h:5
msgid "This appointment rec_urs"
msgstr "Ky takim për_sëritet"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:8
+#: calendar/gui/dialogs/recurrence-page.glade.h:8
msgid "for"
msgstr "për"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:9
+#: calendar/gui/dialogs/recurrence-page.glade.h:9
msgid "forever"
msgstr "gjithmonë"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:10
+#: calendar/gui/dialogs/recurrence-page.glade.h:10
msgid "month(s)"
msgstr "muaj"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:11
+#: calendar/gui/dialogs/recurrence-page.glade.h:11
msgid "until"
msgstr "deri më"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:12
+#: calendar/gui/dialogs/recurrence-page.glade.h:12
msgid "week(s)"
msgstr "javë"
-#: ../calendar/gui/dialogs/recurrence-page.glade.h:13
+#: calendar/gui/dialogs/recurrence-page.glade.h:13
msgid "year(s)"
msgstr "vit(e)"
-#: ../calendar/gui/dialogs/task-details-page.c:410
-#: ../calendar/gui/dialogs/task-details-page.c:429
+#: calendar/gui/dialogs/task-details-page.c:410
+#: calendar/gui/dialogs/task-details-page.c:429
msgid "Completed date is wrong"
msgstr "Data e plotësuar është e gabuar"
-#: ../calendar/gui/dialogs/task-details-page.c:522
+#: calendar/gui/dialogs/task-details-page.c:522
msgid "Web Page"
msgstr "Faqja Web"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:1
+#: calendar/gui/dialogs/task-details-page.glade.h:1
msgid "<span weight=\"bold\">Miscellaneous</span>"
msgstr "<span weight=\"bold\">Të ndryshme\t</span>"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:2
+#: calendar/gui/dialogs/task-details-page.glade.h:2
msgid "<span weight=\"bold\">Status</span>"
msgstr "<span weight=\"bold\">Gjendja</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:229
-#: ../calendar/gui/e-cal-model-tasks.c:345
-#: ../calendar/gui/e-cal-model-tasks.c:658
-#: ../calendar/gui/e-calendar-table.c:457 ../calendar/gui/e-itip-control.c:896
-#: ../calendar/gui/e-meeting-store.c:196 ../calendar/gui/e-meeting-store.c:219
-#: ../calendar/gui/print.c:2349
+#: calendar/gui/dialogs/task-details-page.glade.h:4
+#: calendar/gui/e-cal-component-preview.c:229
+#: calendar/gui/e-cal-model-tasks.c:345 calendar/gui/e-cal-model-tasks.c:658
+#: calendar/gui/e-calendar-table.c:457 calendar/gui/e-itip-control.c:896
+#: calendar/gui/e-meeting-store.c:196 calendar/gui/e-meeting-store.c:219
+#: calendar/gui/print.c:2349
msgid "Completed"
msgstr "U plotësua"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:5
-#: ../calendar/gui/e-cal-component-preview.c:248
-#: ../calendar/gui/e-calendar-table.c:382 ../mail/message-list.c:1006
+#: calendar/gui/dialogs/task-details-page.glade.h:5
+#: calendar/gui/e-cal-component-preview.c:248
+#: calendar/gui/e-calendar-table.c:382 mail/message-list.c:1006
msgid "High"
msgstr "E lartë"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:6
-#: ../calendar/gui/e-cal-component-preview.c:226
-#: ../calendar/gui/e-cal-model-tasks.c:343
-#: ../calendar/gui/e-cal-model-tasks.c:656
-#: ../calendar/gui/e-cal-model-tasks.c:731
-#: ../calendar/gui/e-calendar-table.c:456 ../calendar/gui/print.c:2346
+#: calendar/gui/dialogs/task-details-page.glade.h:6
+#: calendar/gui/e-cal-component-preview.c:226
+#: calendar/gui/e-cal-model-tasks.c:343 calendar/gui/e-cal-model-tasks.c:656
+#: calendar/gui/e-cal-model-tasks.c:731 calendar/gui/e-calendar-table.c:456
+#: calendar/gui/print.c:2346
msgid "In Progress"
msgstr "Në zhvillim"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:7
-#: ../calendar/gui/e-cal-component-preview.c:252
-#: ../calendar/gui/e-calendar-table.c:384 ../mail/message-list.c:1004
+#: calendar/gui/dialogs/task-details-page.glade.h:7
+#: calendar/gui/e-cal-component-preview.c:252
+#: calendar/gui/e-calendar-table.c:384 mail/message-list.c:1004
msgid "Low"
msgstr "E ulët"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:8
-#: ../calendar/gui/e-cal-component-preview.c:250
-#: ../calendar/gui/e-cal-model.c:899 ../calendar/gui/e-calendar-table.c:383
-#: ../mail/message-list.c:1005
+#: calendar/gui/dialogs/task-details-page.glade.h:8
+#: calendar/gui/e-cal-component-preview.c:250 calendar/gui/e-cal-model.c:899
+#: calendar/gui/e-calendar-table.c:383 mail/message-list.c:1005
msgid "Normal"
msgstr "Normal"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:9
-#: ../calendar/gui/e-cal-component-preview.c:236
-#: ../calendar/gui/e-cal-model-tasks.c:341
-#: ../calendar/gui/e-cal-model-tasks.c:654
-#: ../calendar/gui/e-calendar-table.c:455 ../calendar/gui/print.c:2343
+#: calendar/gui/dialogs/task-details-page.glade.h:9
+#: calendar/gui/e-cal-component-preview.c:236
+#: calendar/gui/e-cal-model-tasks.c:341 calendar/gui/e-cal-model-tasks.c:654
+#: calendar/gui/e-calendar-table.c:455 calendar/gui/print.c:2343
msgid "Not Started"
msgstr "Nuk është filluar"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:10
+#: calendar/gui/dialogs/task-details-page.glade.h:10
msgid "P_ercent complete:"
msgstr "Pë_rqindja e plotësuar:"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:11
-#: ../calendar/gui/e-calendar-table.c:385
+#: calendar/gui/dialogs/task-details-page.glade.h:11
+#: calendar/gui/e-calendar-table.c:385
msgid "Undefined"
msgstr "E papërcaktuar"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:12
+#: calendar/gui/dialogs/task-details-page.glade.h:12
msgid "_Date completed:"
msgstr "_Data e plotësimit:"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:13
-#: ../widgets/misc/e-send-options.glade.h:34
+#: calendar/gui/dialogs/task-details-page.glade.h:13
+#: widgets/misc/e-send-options.glade.h:34
msgid "_Priority:"
msgstr "_Prioriteti:"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:14
+#: calendar/gui/dialogs/task-details-page.glade.h:14
msgid "_Status:"
msgstr "_Gjendja:"
-#: ../calendar/gui/dialogs/task-details-page.glade.h:15
+#: calendar/gui/dialogs/task-details-page.glade.h:15
msgid "_Web Page:"
msgstr "Faqja _Web:"
-#: ../calendar/gui/dialogs/task-editor.c:137 ../calendar/gui/print.c:2300
+#: calendar/gui/dialogs/task-editor.c:137 calendar/gui/print.c:2300
msgid "Task"
msgstr "Aktiviteti"
-#: ../calendar/gui/dialogs/task-editor.c:157
-#: ../calendar/gui/dialogs/task-editor.c:219
-#: ../calendar/gui/dialogs/task-editor.c:359
+#: calendar/gui/dialogs/task-editor.c:157
+#: calendar/gui/dialogs/task-editor.c:219
+#: calendar/gui/dialogs/task-editor.c:359
msgid "Assignment"
msgstr "Caktuar"
-#: ../calendar/gui/dialogs/task-page.c:534
+#: calendar/gui/dialogs/task-page.c:534
msgid "Due date is wrong"
msgstr "Data e duhur është e gabuar"
-#: ../calendar/gui/dialogs/task-page.c:878
+#: calendar/gui/dialogs/task-page.c:878
#, c-format
msgid "Unable to open tasks in '%s'."
msgstr "E pamundur hapja e aktiviteteve tek '%s'."
-#: ../calendar/gui/dialogs/task-page.glade.h:4
+#: calendar/gui/dialogs/task-page.glade.h:4
msgid "Ad_vanced send options"
msgstr "Opcionet e de_tajuara të dërgimit"
-#: ../calendar/gui/dialogs/task-page.glade.h:9
+#: calendar/gui/dialogs/task-page.glade.h:9
msgid "D_escription:"
msgstr "Pë_rshkrimi:"
-#: ../calendar/gui/dialogs/task-page.glade.h:12
+#: calendar/gui/dialogs/task-page.glade.h:12
msgid "Sta_rt date:"
msgstr "Data e _nisjes:"
-#: ../calendar/gui/dialogs/task-page.glade.h:14
+#: calendar/gui/dialogs/task-page.glade.h:14
msgid "Task Description"
msgstr "Përshkrimi i detyrës"
-#: ../calendar/gui/dialogs/task-page.glade.h:15
+#: calendar/gui/dialogs/task-page.glade.h:15
msgid "_Due date:"
msgstr "Ska_dimi:"
-#: ../calendar/gui/dialogs/task-page.glade.h:16
+#: calendar/gui/dialogs/task-page.glade.h:16
msgid "_Group:"
msgstr "_Grupi:"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:3
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:3
msgid "<b>Free/Busy C_alendars</b>"
msgstr "<b>Kalendarët e disponibilitetit</b>"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:4
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:4
msgid "<b>Publishing Frequency</b>"
msgstr "<b>Frekuenca e publikimit</b>"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:5
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:5
msgid "<b>Publishing _Location</b>"
msgstr "<b>_Vendi për publikimin</b>"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:6
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:6
msgid "Free/Busy Publishing Settings"
msgstr "Rregullimet e publikimit të disponibilitetit"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:7
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:7
msgid "_Daily"
msgstr "_Ditor"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:8
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:8
msgid "_Manual"
msgstr "_Manual"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:9
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:9
msgid "_Password:"
msgstr "_Fjalëkalimi:"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:10
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:10
msgid "_Remember password"
msgstr "_Kujto fjalëkalimin"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:11
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:11
msgid "_Username:"
msgstr "_Përdoruesi:"
-#: ../calendar/gui/dialogs/url-editor-dialog.glade.h:12
+#: calendar/gui/dialogs/url-editor-dialog.glade.h:12
msgid "_Weekly"
msgstr "_Javor"
-#: ../calendar/gui/e-alarm-list.c:395
+#: calendar/gui/e-alarm-list.c:395
#, c-format
msgid "%d day"
msgid_plural "%d days"
msgstr[0] "%d ditë"
msgstr[1] "%d ditë"
-#: ../calendar/gui/e-alarm-list.c:400
+#: calendar/gui/e-alarm-list.c:400
#, c-format
msgid "%d week"
msgid_plural "%d weeks"
msgstr[0] "%d javë"
msgstr[1] "%d javë"
-#: ../calendar/gui/e-alarm-list.c:405
+#: calendar/gui/e-alarm-list.c:405
#, c-format
msgid "%d hour"
msgid_plural "%d hours"
msgstr[0] "%d orë"
msgstr[1] "%d orë"
-#: ../calendar/gui/e-alarm-list.c:410
+#: calendar/gui/e-alarm-list.c:410
#, c-format
msgid "%d minute"
msgid_plural "%d minutes"
msgstr[0] "%d minutë"
msgstr[1] "%d minuta"
-#: ../calendar/gui/e-alarm-list.c:415
+#: calendar/gui/e-alarm-list.c:415
#, c-format
msgid "%d second"
msgid_plural "%d seconds"
msgstr[0] "sekondë"
msgstr[1] "sekonda"
-#: ../calendar/gui/e-alarm-list.c:462
+#: calendar/gui/e-alarm-list.c:462
msgid "Unknown action to be performed"
msgstr "Veprim i panjohur"
-#: ../calendar/gui/e-alarm-list.c:474
+#: calendar/gui/e-alarm-list.c:474
#, c-format
msgid "%s %s before the start of the appointment"
msgstr "%s %s para fillimit të takimit"
-#: ../calendar/gui/e-alarm-list.c:477
+#: calendar/gui/e-alarm-list.c:477
#, c-format
msgid "%s %s after the start of the appointment"
msgstr "%s %s nbas fillimit të takimit"
-#: ../calendar/gui/e-alarm-list.c:482
+#: calendar/gui/e-alarm-list.c:482
#, c-format
msgid "%s at the start of the appointment"
msgstr "%s nga fillimi i takimit"
-#: ../calendar/gui/e-alarm-list.c:491
+#: calendar/gui/e-alarm-list.c:491
#, c-format
msgid "%s %s before the end of the appointment"
msgstr "%s %s para përfundimit të takimit"
-#: ../calendar/gui/e-alarm-list.c:494
+#: calendar/gui/e-alarm-list.c:494
#, c-format
msgid "%s %s after the end of the appointment"
msgstr "%s %s mbas përfundimit të takimit"
-#: ../calendar/gui/e-alarm-list.c:499
+#: calendar/gui/e-alarm-list.c:499
#, c-format
msgid "%s at the end of the appointment"
msgstr "%s në fund të takimit"
-#: ../calendar/gui/e-alarm-list.c:521
+#: calendar/gui/e-alarm-list.c:521
#, c-format
msgid "%s at %s"
msgstr "%s më %s"
-#: ../calendar/gui/e-alarm-list.c:527
+#: calendar/gui/e-alarm-list.c:527
#, c-format
msgid "%s for an unknown trigger type"
msgstr "%s për një aktivim të një lloji të panjohur"
-#: ../calendar/gui/e-cal-component-preview.c:70 ../mail/em-folder-view.c:2573
+#: calendar/gui/e-cal-component-preview.c:70 mail/em-folder-view.c:2573
#, c-format
msgid "Click to open %s"
msgstr "Kliko për të hapur %s"
-#: ../calendar/gui/e-cal-component-preview.c:155 ../filter/filter-rule.c:795
+#: calendar/gui/e-cal-component-preview.c:155 filter/filter-rule.c:795
msgid "Untitled"
msgstr "Pa titull"
-#: ../calendar/gui/e-cal-component-preview.c:186
-#: ../calendar/gui/e-itip-control.c:1108
-#: ../calendar/gui/e-itip-control.glade.h:11
+#: calendar/gui/e-cal-component-preview.c:186
+#: calendar/gui/e-itip-control.c:1108 calendar/gui/e-itip-control.glade.h:11
msgid "Summary:"
msgstr "Përmbledhja:"
-#: ../calendar/gui/e-cal-component-preview.c:193
-#: ../calendar/gui/e-cal-component-preview.c:204
+#: calendar/gui/e-cal-component-preview.c:193
+#: calendar/gui/e-cal-component-preview.c:204
msgid "Start Date:"
msgstr "Data e fillimit:"
-#: ../calendar/gui/e-cal-component-preview.c:215
+#: calendar/gui/e-cal-component-preview.c:215
msgid "Due Date:"
msgstr "Skadenca:"
#. write status
#. translators: exchange out of office status header
#. Status
-#: ../calendar/gui/e-cal-component-preview.c:222
-#: ../calendar/gui/e-itip-control.c:1132
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:209
-#: ../plugins/itip-formatter/itip-view.c:884
+#: calendar/gui/e-cal-component-preview.c:222
+#: calendar/gui/e-itip-control.c:1132
+#: plugins/exchange-account-setup/exchange-account-setup.c:209
+#: plugins/itip-formatter/itip-view.c:884
msgid "Status:"
msgstr "Gjëndja:"
-#: ../calendar/gui/e-cal-component-preview.c:246
+#: calendar/gui/e-cal-component-preview.c:246
msgid "Priority:"
msgstr "Prioriteti: "
-#: ../calendar/gui/e-cal-component-preview.c:299
+#: calendar/gui/e-cal-component-preview.c:299
msgid "Web Page:"
msgstr "Faqja Web:"
-#: ../calendar/gui/e-cal-list-view.etspec.h:2
+#: calendar/gui/e-cal-list-view.etspec.h:2
msgid "End Date"
msgstr "Fundi"
-#: ../calendar/gui/e-cal-list-view.etspec.h:4
+#: calendar/gui/e-cal-list-view.etspec.h:4
msgid "Start Date"
msgstr "Fillimi"
-#: ../calendar/gui/e-cal-list-view.etspec.h:5
-#: ../calendar/gui/e-calendar-table.etspec.h:11
-#: ../mail/mail-dialogs.glade.h:21
+#: calendar/gui/e-cal-list-view.etspec.h:5
+#: calendar/gui/e-calendar-table.etspec.h:11 mail/mail-dialogs.glade.h:21
msgid "Summary"
msgstr "Përmbledhja"
-#: ../calendar/gui/e-cal-model-calendar.c:179
-#: ../calendar/gui/e-calendar-table.c:434
+#: calendar/gui/e-cal-model-calendar.c:179 calendar/gui/e-calendar-table.c:434
msgid "Free"
msgstr "I lirë"
-#: ../calendar/gui/e-cal-model-calendar.c:182
-#: ../calendar/gui/e-calendar-table.c:435
-#: ../calendar/gui/e-meeting-time-sel.c:412
+#: calendar/gui/e-cal-model-calendar.c:182 calendar/gui/e-calendar-table.c:435
+#: calendar/gui/e-meeting-time-sel.c:412
msgid "Busy"
msgstr "I zënë"
-#: ../calendar/gui/e-cal-model-tasks.c:297
+#: calendar/gui/e-cal-model-tasks.c:297
msgid "N"
msgstr "N"
-#: ../calendar/gui/e-cal-model-tasks.c:297
+#: calendar/gui/e-cal-model-tasks.c:297
msgid "S"
msgstr "S"
-#: ../calendar/gui/e-cal-model-tasks.c:299 ../smime/lib/e-cert.c:681
+#: calendar/gui/e-cal-model-tasks.c:299 smime/lib/e-cert.c:681
msgid "E"
msgstr "E"
-#: ../calendar/gui/e-cal-model-tasks.c:299
+#: calendar/gui/e-cal-model-tasks.c:299
msgid "W"
msgstr "W"
-#: ../calendar/gui/e-cal-model-tasks.c:606
+#: calendar/gui/e-cal-model-tasks.c:606
msgid ""
"The geographical position must be entered in the format: \n"
"\n"
@@ -6453,268 +6404,259 @@ msgstr ""
"\n"
"45.436845,125.862501"
-#: ../calendar/gui/e-cal-model-tasks.c:1017 ../calendar/gui/e-cal-model.c:905
-#: ../calendar/gui/e-meeting-list-view.c:163
-#: ../calendar/gui/e-meeting-store.c:168 ../calendar/gui/e-meeting-store.c:178
-#: ../calendar/gui/e-meeting-store.c:808
+#: calendar/gui/e-cal-model-tasks.c:1017 calendar/gui/e-cal-model.c:905
+#: calendar/gui/e-meeting-list-view.c:163 calendar/gui/e-meeting-store.c:168
+#: calendar/gui/e-meeting-store.c:178 calendar/gui/e-meeting-store.c:808
msgid "Yes"
msgstr "Po"
-#: ../calendar/gui/e-cal-model-tasks.c:1017 ../calendar/gui/e-cal-model.c:905
-#: ../calendar/gui/e-meeting-list-view.c:164
-#: ../calendar/gui/e-meeting-store.c:180
+#: calendar/gui/e-cal-model-tasks.c:1017 calendar/gui/e-cal-model.c:905
+#: calendar/gui/e-meeting-list-view.c:164 calendar/gui/e-meeting-store.c:180
msgid "No"
msgstr "Jo"
#. This is the default filename used for temporary file creation
-#: ../calendar/gui/e-cal-model.c:307 ../calendar/gui/e-cal-model.c:310
-#: ../calendar/gui/e-itip-control.c:1149 ../calendar/gui/e-itip-control.c:1290
-#: ../calendar/gui/e-meeting-list-view.c:139
-#: ../calendar/gui/e-meeting-list-view.c:153
-#: ../calendar/gui/e-meeting-store.c:124 ../calendar/gui/e-meeting-store.c:159
-#: ../calendar/gui/e-meeting-store.c:224 ../mail/em-utils.c:1173
-#: ../plugins/itip-formatter/itip-formatter.c:251
-#: ../plugins/itip-formatter/itip-formatter.c:1398
-#: ../plugins/plugin-manager/plugin-manager.c:72
-#: ../shell/e-component-registry.c:201 ../shell/e-component-registry.c:205
-#: ../widgets/misc/e-charset-picker.c:62
+#: calendar/gui/e-cal-model.c:307 calendar/gui/e-cal-model.c:310
+#: calendar/gui/e-itip-control.c:1149 calendar/gui/e-itip-control.c:1290
+#: calendar/gui/e-meeting-list-view.c:139
+#: calendar/gui/e-meeting-list-view.c:153 calendar/gui/e-meeting-store.c:124
+#: calendar/gui/e-meeting-store.c:159 calendar/gui/e-meeting-store.c:224
+#: mail/em-utils.c:1173 plugins/itip-formatter/itip-formatter.c:251
+#: plugins/itip-formatter/itip-formatter.c:1398
+#: plugins/plugin-manager/plugin-manager.c:72 shell/e-component-registry.c:201
+#: shell/e-component-registry.c:205 widgets/misc/e-charset-picker.c:62
msgid "Unknown"
msgstr "Nuk njihet"
-#: ../calendar/gui/e-cal-model.c:901
+#: calendar/gui/e-cal-model.c:901
msgid "Recurring"
msgstr "Përsëritet"
-#: ../calendar/gui/e-cal-model.c:903
+#: calendar/gui/e-cal-model.c:903
msgid "Assigned"
msgstr "Caktuar"
-#: ../calendar/gui/e-calendar-table.c:404
+#: calendar/gui/e-calendar-table.c:404
msgid "0%"
msgstr "0%"
-#: ../calendar/gui/e-calendar-table.c:405
+#: calendar/gui/e-calendar-table.c:405
msgid "10%"
msgstr "10%"
-#: ../calendar/gui/e-calendar-table.c:406
+#: calendar/gui/e-calendar-table.c:406
msgid "20%"
msgstr "20%"
-#: ../calendar/gui/e-calendar-table.c:407
+#: calendar/gui/e-calendar-table.c:407
msgid "30%"
msgstr "30%"
-#: ../calendar/gui/e-calendar-table.c:408
+#: calendar/gui/e-calendar-table.c:408
msgid "40%"
msgstr " "
-#: ../calendar/gui/e-calendar-table.c:409
+#: calendar/gui/e-calendar-table.c:409
msgid "50%"
msgstr "50%"
-#: ../calendar/gui/e-calendar-table.c:410
+#: calendar/gui/e-calendar-table.c:410
msgid "60%"
msgstr "60%"
-#: ../calendar/gui/e-calendar-table.c:411
+#: calendar/gui/e-calendar-table.c:411
msgid "70%"
msgstr "70%"
-#: ../calendar/gui/e-calendar-table.c:412
+#: calendar/gui/e-calendar-table.c:412
msgid "80%"
msgstr "80%"
-#: ../calendar/gui/e-calendar-table.c:413
+#: calendar/gui/e-calendar-table.c:413
msgid "90%"
msgstr "90%"
-#: ../calendar/gui/e-calendar-table.c:414
+#: calendar/gui/e-calendar-table.c:414
msgid "100%"
msgstr "100%"
-#: ../calendar/gui/e-calendar-table.c:516
+#: calendar/gui/e-calendar-table.c:516
msgid "Task Table"
msgstr "Tabela e detyrave"
-#: ../calendar/gui/e-calendar-table.c:694
-#: ../calendar/gui/e-calendar-view.c:652
+#: calendar/gui/e-calendar-table.c:694 calendar/gui/e-calendar-view.c:652
msgid "Deleting selected objects"
msgstr "Duke hequr elementët e zgjedhur"
-#: ../calendar/gui/e-calendar-table.c:873
-#: ../calendar/gui/e-calendar-view.c:756
+#: calendar/gui/e-calendar-table.c:873 calendar/gui/e-calendar-view.c:756
msgid "Updating objects"
msgstr "Duke rifreskuar objektet"
-#: ../calendar/gui/e-calendar-table.c:1014
-#: ../calendar/gui/e-calendar-view.c:1064 ../composer/e-msg-composer.c:1241
+#: calendar/gui/e-calendar-table.c:1014 calendar/gui/e-calendar-view.c:1064
+#: composer/e-msg-composer.c:1241
msgid "Save as..."
msgstr "Ruaje si..."
-#: ../calendar/gui/e-calendar-table.c:1156
-#: ../calendar/gui/e-calendar-view.c:1395 ../ui/evolution-addressbook.xml.h:37
+#: calendar/gui/e-calendar-table.c:1156 calendar/gui/e-calendar-view.c:1395
+#: ui/evolution-addressbook.xml.h:37
msgid "_Open"
msgstr "_Hap"
-#: ../calendar/gui/e-calendar-table.c:1157
+#: calendar/gui/e-calendar-table.c:1157
msgid "Open _Web Page"
msgstr "Hap faqen _web"
-#: ../calendar/gui/e-calendar-table.c:1158
-#: ../calendar/gui/e-calendar-view.c:1396 ../mail/em-folder-view.c:976
-#: ../mail/em-popup.c:494 ../ui/evolution-mail-message.xml.h:124
+#: calendar/gui/e-calendar-table.c:1158 calendar/gui/e-calendar-view.c:1396
+#: mail/em-folder-view.c:976 mail/em-popup.c:494
+#: ui/evolution-mail-message.xml.h:124
msgid "_Save As..."
msgstr "_Ruaje si..."
-#: ../calendar/gui/e-calendar-table.c:1159
-#: ../calendar/gui/e-calendar-view.c:1376
-#: ../calendar/gui/e-calendar-view.c:1397 ../ui/evolution-addressbook.xml.h:40
-#: ../ui/evolution-calendar.xml.h:44 ../ui/evolution-mail-message.xml.h:121
-#: ../ui/evolution-tasks.xml.h:25
+#: calendar/gui/e-calendar-table.c:1159 calendar/gui/e-calendar-view.c:1376
+#: calendar/gui/e-calendar-view.c:1397 ui/evolution-addressbook.xml.h:40
+#: ui/evolution-calendar.xml.h:44 ui/evolution-mail-message.xml.h:121
+#: ui/evolution-tasks.xml.h:25
msgid "_Print..."
msgstr "_Printim..."
-#: ../calendar/gui/e-calendar-table.c:1163
-#: ../calendar/gui/e-calendar-view.c:1401 ../ui/evolution-addressbook.xml.h:1
-#: ../ui/evolution-calendar.xml.h:1 ../ui/evolution-tasks.xml.h:1
+#: calendar/gui/e-calendar-table.c:1163 calendar/gui/e-calendar-view.c:1401
+#: ui/evolution-addressbook.xml.h:1 ui/evolution-calendar.xml.h:1
+#: ui/evolution-tasks.xml.h:1
msgid "C_ut"
msgstr "P_reje"
-#: ../calendar/gui/e-calendar-table.c:1165
-#: ../calendar/gui/e-calendar-view.c:1379
-#: ../calendar/gui/e-calendar-view.c:1403 ../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:119 ../ui/evolution-tasks.xml.h:24
+#: calendar/gui/e-calendar-table.c:1165 calendar/gui/e-calendar-view.c:1379
+#: calendar/gui/e-calendar-view.c:1403 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:119 ui/evolution-tasks.xml.h:24
msgid "_Paste"
msgstr "_Ngjite"
-#: ../calendar/gui/e-calendar-table.c:1169
+#: calendar/gui/e-calendar-table.c:1169
msgid "_Assign Task"
msgstr "_Cakto aktivitet"
-#: ../calendar/gui/e-calendar-table.c:1170
+#: calendar/gui/e-calendar-table.c:1170
msgid "_Forward as iCalendar"
msgstr "_Përcille si iCalendar"
-#: ../calendar/gui/e-calendar-table.c:1171
+#: calendar/gui/e-calendar-table.c:1171
msgid "_Mark as Complete"
msgstr "_Shënoje si të plotësuar"
-#: ../calendar/gui/e-calendar-table.c:1172
+#: calendar/gui/e-calendar-table.c:1172
msgid "_Mark Selected Tasks as Complete"
msgstr "_Shëno aktivitetet e zgjedhura si të plotësuara"
#. FIXME: need to disable for undeletable folders
-#: ../calendar/gui/e-calendar-table.c:1176
-#: ../calendar/gui/e-calendar-view.c:1414 ../mail/em-folder-tree.c:2814
-#: ../mail/em-folder-view.c:980 ../ui/evolution-addressbook.xml.h:33
-#: ../ui/evolution-calendar.xml.h:40 ../ui/evolution-mail-message.xml.h:108
-#: ../ui/evolution-tasks.xml.h:21
+#: calendar/gui/e-calendar-table.c:1176 calendar/gui/e-calendar-view.c:1414
+#: mail/em-folder-tree.c:2814 mail/em-folder-view.c:980
+#: ui/evolution-addressbook.xml.h:33 ui/evolution-calendar.xml.h:40
+#: ui/evolution-mail-message.xml.h:108 ui/evolution-tasks.xml.h:21
msgid "_Delete"
msgstr "_Elemino"
-#: ../calendar/gui/e-calendar-table.c:1177
+#: calendar/gui/e-calendar-table.c:1177
msgid "_Delete Selected Tasks"
msgstr "_Elemino aktivitetet e zgjedhura"
-#: ../calendar/gui/e-calendar-table.c:1328
-#: ../calendar/gui/e-calendar-table.etspec.h:4
+#: calendar/gui/e-calendar-table.c:1328
+#: calendar/gui/e-calendar-table.etspec.h:4
msgid "Click to add a task"
msgstr "Kliko për të shtuar një aktivitet"
-#: ../calendar/gui/e-calendar-table.etspec.h:2
+#: calendar/gui/e-calendar-table.etspec.h:2
#, no-c-format
msgid "% Complete"
msgstr "% Plotësuar"
-#: ../calendar/gui/e-calendar-table.etspec.h:5 ../mail/mail-send-recv.c:617
+#: calendar/gui/e-calendar-table.etspec.h:5 mail/mail-send-recv.c:617
msgid "Complete"
msgstr "U plotësua"
-#: ../calendar/gui/e-calendar-table.etspec.h:6
+#: calendar/gui/e-calendar-table.etspec.h:6
msgid "Completion date"
msgstr "Plotësuar më"
-#: ../calendar/gui/e-calendar-table.etspec.h:7
+#: calendar/gui/e-calendar-table.etspec.h:7
msgid "Due date"
msgstr "Data skadimit"
-#: ../calendar/gui/e-calendar-table.etspec.h:8
+#: calendar/gui/e-calendar-table.etspec.h:8
msgid "Priority"
msgstr "Prioriteti"
-#: ../calendar/gui/e-calendar-table.etspec.h:9
+#: calendar/gui/e-calendar-table.etspec.h:9
msgid "Start date"
msgstr "Data e fillimit"
-#: ../calendar/gui/e-calendar-table.etspec.h:12
+#: calendar/gui/e-calendar-table.etspec.h:12
msgid "Task sort"
msgstr "Rreshto aktivitetet"
-#: ../calendar/gui/e-calendar-view.c:1185
+#: calendar/gui/e-calendar-view.c:1185
msgid "Moving items"
msgstr "Duke lëvizur elementët"
-#: ../calendar/gui/e-calendar-view.c:1187
+#: calendar/gui/e-calendar-view.c:1187
msgid "Copying items"
msgstr "Duke kopjuar elementët"
-#: ../calendar/gui/e-calendar-view.c:1370
+#: calendar/gui/e-calendar-view.c:1370
msgid "New _Appointment..."
msgstr "_Takim i Ri..."
-#: ../calendar/gui/e-calendar-view.c:1371
+#: calendar/gui/e-calendar-view.c:1371
msgid "New All Day _Event"
msgstr "_Ndodhi e Re e ditës"
-#: ../calendar/gui/e-calendar-view.c:1373
+#: calendar/gui/e-calendar-view.c:1373
msgid "New Task"
msgstr "Aktivitet i Ri"
#. FIXME: hook in this somehow
-#: ../calendar/gui/e-calendar-view.c:1383
+#: calendar/gui/e-calendar-view.c:1383
msgid "Current View"
msgstr "Paraqitja aktuale"
-#: ../calendar/gui/e-calendar-view.c:1385 ../ui/evolution-calendar.xml.h:26
+#: calendar/gui/e-calendar-view.c:1385 ui/evolution-calendar.xml.h:26
msgid "Select _Today"
msgstr "Zgjidh _Sot"
-#: ../calendar/gui/e-calendar-view.c:1386
+#: calendar/gui/e-calendar-view.c:1386
msgid "_Select Date..."
msgstr "_Zgjidh datën..."
#. TODO: Why is this in a context menu when it applies globally?
-#: ../calendar/gui/e-calendar-view.c:1391 ../ui/evolution-calendar.xml.h:45
+#: calendar/gui/e-calendar-view.c:1391 ui/evolution-calendar.xml.h:45
msgid "_Publish Free/Busy Information"
msgstr "_Publiko informacionet mbi disponibilitetin"
-#: ../calendar/gui/e-calendar-view.c:1407
+#: calendar/gui/e-calendar-view.c:1407
msgid "Cop_y to Calendar..."
msgstr "Kopjo_je në kalendar..."
-#: ../calendar/gui/e-calendar-view.c:1408
+#: calendar/gui/e-calendar-view.c:1408
msgid "Mo_ve to Calendar..."
msgstr "Lë_vize në kalendar..."
-#: ../calendar/gui/e-calendar-view.c:1409
+#: calendar/gui/e-calendar-view.c:1409
msgid "_Schedule Meeting..."
msgstr "_Planifiko Mbledhje..."
-#: ../calendar/gui/e-calendar-view.c:1410
+#: calendar/gui/e-calendar-view.c:1410
msgid "_Forward as iCalendar..."
msgstr "_Përcille si iCalendar..."
-#: ../calendar/gui/e-calendar-view.c:1415
+#: calendar/gui/e-calendar-view.c:1415
msgid "Make this Occurrence _Movable"
msgstr "Përcaktoje këtë ngjarje si të _lëvizëshme"
-#: ../calendar/gui/e-calendar-view.c:1416
+#: calendar/gui/e-calendar-view.c:1416
msgid "Delete this _Occurrence"
msgstr "Elemino këtë _përkujtimore"
-#: ../calendar/gui/e-calendar-view.c:1417
+#: calendar/gui/e-calendar-view.c:1417
msgid "Delete _All Occurrences"
msgstr "Elemino të _gjitha përkujtimoret"
@@ -6723,8 +6665,8 @@ msgstr "Elemino të _gjitha përkujtimoret"
#. 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:115 ../e-util/e-time-utils.c:180
-#: ../e-util/e-time-utils.c:393
+#: calendar/gui/e-cell-date-edit-text.c:115 e-util/e-time-utils.c:180
+#: e-util/e-time-utils.c:393
msgid "%a %m/%d/%Y %H:%M:%S"
msgstr "%a %m/%d/%Y %H:%M:%S"
@@ -6733,12 +6675,12 @@ msgstr "%a %m/%d/%Y %H:%M:%S"
#. 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:118 ../e-util/e-time-utils.c:175
-#: ../e-util/e-time-utils.c:402
+#: calendar/gui/e-cell-date-edit-text.c:118 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 %m/%d/%Y %I:%M:%S %p"
-#: ../calendar/gui/e-cell-date-edit-text.c:123
+#: calendar/gui/e-cell-date-edit-text.c:123
#, c-format
msgid ""
"The date must be entered in the format: \n"
@@ -6749,7 +6691,7 @@ msgstr ""
"\n"
"%s"
-#: ../calendar/gui/e-day-view-time-item.c:527
+#: calendar/gui/e-day-view-time-item.c:527
#, c-format
msgid "%02i minute divisions"
msgstr "%02i ndarje për minutë"
@@ -6760,119 +6702,119 @@ msgstr "%02i ndarje për minutë"
#. 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:715 ../calendar/gui/e-day-view.c:1494
-#: ../calendar/gui/e-week-view-main-item.c:312 ../calendar/gui/print.c:1517
+#: calendar/gui/e-day-view-top-item.c:715 calendar/gui/e-day-view.c:1494
+#: calendar/gui/e-week-view-main-item.c:312 calendar/gui/print.c:1517
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:748 ../calendar/gui/e-week-view.c:512
-#: ../calendar/gui/print.c:841
+#: calendar/gui/e-day-view.c:748 calendar/gui/e-week-view.c:512
+#: calendar/gui/print.c:841
msgid "am"
msgstr "pd"
#. String to use in 12-hour time format for times in the afternoon.
-#: ../calendar/gui/e-day-view.c:751 ../calendar/gui/e-week-view.c:515
-#: ../calendar/gui/print.c:843
+#: calendar/gui/e-day-view.c:751 calendar/gui/e-week-view.c:515
+#: calendar/gui/print.c:843
msgid "pm"
msgstr "md"
-#: ../calendar/gui/e-itip-control.c:761
+#: calendar/gui/e-itip-control.c:761
msgid "Yes. (Complex Recurrence)"
msgstr "Po (Përkujtimore Komplekse)"
-#: ../calendar/gui/e-itip-control.c:772
+#: calendar/gui/e-itip-control.c:772
#, c-format
msgid "Every day"
msgid_plural "Every %d days"
msgstr[0] "Çdo ditë"
msgstr[1] "Çdo %d ditë"
-#: ../calendar/gui/e-itip-control.c:777
+#: calendar/gui/e-itip-control.c:777
#, c-format
msgid "Every week"
msgid_plural "Every %d weeks"
msgstr[0] "Çdo javë"
msgstr[1] "Çdo %d javë"
-#: ../calendar/gui/e-itip-control.c:779
+#: calendar/gui/e-itip-control.c:779
#, c-format
msgid "Every week on "
msgid_plural "Every %d weeks on "
msgstr[0] "Çdo javë të "
msgstr[1] "Çdo %d javë të "
-#: ../calendar/gui/e-itip-control.c:787
+#: calendar/gui/e-itip-control.c:787
msgid " and "
msgstr " dhe "
-#: ../calendar/gui/e-itip-control.c:794
+#: calendar/gui/e-itip-control.c:794
#, c-format
msgid "The %s day of "
msgstr "Ditën %s të "
-#: ../calendar/gui/e-itip-control.c:807
+#: calendar/gui/e-itip-control.c:807
#, c-format
msgid "The %s %s of "
msgstr "Të %s %s e "
-#: ../calendar/gui/e-itip-control.c:814
+#: calendar/gui/e-itip-control.c:814
#, c-format
msgid "every month"
msgid_plural "every %d months"
msgstr[0] "çdo muaj"
msgstr[1] "çdo %d muaj"
-#: ../calendar/gui/e-itip-control.c:818
+#: calendar/gui/e-itip-control.c:818
#, c-format
msgid "Every year"
msgid_plural "Every %d years"
msgstr[0] "Çdo vit"
msgstr[1] "Çdo %d vite"
-#: ../calendar/gui/e-itip-control.c:829
+#: calendar/gui/e-itip-control.c:829
#, c-format
msgid "a total of %d time"
msgid_plural " a total of %d times"
msgstr[0] " gjithsej %d herë"
msgstr[1] " gjithsej prej %d herësh"
-#: ../calendar/gui/e-itip-control.c:838
+#: calendar/gui/e-itip-control.c:838
msgid ", ending on "
msgstr ", që mbaron të "
-#: ../calendar/gui/e-itip-control.c:862
+#: calendar/gui/e-itip-control.c:862
msgid "Starts"
msgstr "Fillon"
-#: ../calendar/gui/e-itip-control.c:875
+#: calendar/gui/e-itip-control.c:875
msgid "Ends"
msgstr "Mbaron"
-#: ../calendar/gui/e-itip-control.c:909
+#: calendar/gui/e-itip-control.c:909
msgid "Due"
msgstr "Skadimi"
-#: ../calendar/gui/e-itip-control.c:949 ../calendar/gui/e-itip-control.c:1006
+#: calendar/gui/e-itip-control.c:949 calendar/gui/e-itip-control.c:1006
msgid "iCalendar Information"
msgstr "Informacione iCalendar"
#. Title
-#: ../calendar/gui/e-itip-control.c:966
+#: calendar/gui/e-itip-control.c:966
msgid "iCalendar Error"
msgstr "Gabim i iCalendar"
-#: ../calendar/gui/e-itip-control.c:1038 ../calendar/gui/e-itip-control.c:1054
-#: ../calendar/gui/e-itip-control.c:1065 ../calendar/gui/e-itip-control.c:1082
-#: ../plugins/itip-formatter/itip-view.c:329
-#: ../plugins/itip-formatter/itip-view.c:330
-#: ../plugins/itip-formatter/itip-view.c:397
-#: ../plugins/itip-formatter/itip-view.c:398
+#: calendar/gui/e-itip-control.c:1038 calendar/gui/e-itip-control.c:1054
+#: calendar/gui/e-itip-control.c:1065 calendar/gui/e-itip-control.c:1082
+#: plugins/itip-formatter/itip-view.c:329
+#: plugins/itip-formatter/itip-view.c:330
+#: plugins/itip-formatter/itip-view.c:397
+#: plugins/itip-formatter/itip-view.c:398
msgid "An unknown person"
msgstr "Një person i panjohur"
#. Describe what the user can do
-#: ../calendar/gui/e-itip-control.c:1089
+#: calendar/gui/e-itip-control.c:1089
msgid ""
"<br> Please review the following information, and then select an action from "
"the menu below."
@@ -6880,418 +6822,411 @@ msgstr ""
"<br>Ju lutem shikoni informacionet në vazhdim, e pastaj zgjidhni një veprim "
"nga menu e poshtme."
-#: ../calendar/gui/e-itip-control.c:1137
-#: ../calendar/gui/e-meeting-list-view.c:175
-#: ../calendar/gui/e-meeting-store.c:188 ../calendar/gui/e-meeting-store.c:211
-#: ../calendar/gui/itip-utils.c:421
-#: ../plugins/itip-formatter/itip-formatter.c:1389
+#: calendar/gui/e-itip-control.c:1137 calendar/gui/e-meeting-list-view.c:175
+#: calendar/gui/e-meeting-store.c:188 calendar/gui/e-meeting-store.c:211
+#: calendar/gui/itip-utils.c:421 plugins/itip-formatter/itip-formatter.c:1389
msgid "Accepted"
msgstr "U pranua"
-#: ../calendar/gui/e-itip-control.c:1141 ../calendar/gui/itip-utils.c:424
-#: ../plugins/itip-formatter/itip-formatter.c:1392
+#: calendar/gui/e-itip-control.c:1141 calendar/gui/itip-utils.c:424
+#: plugins/itip-formatter/itip-formatter.c:1392
msgid "Tentatively Accepted"
msgstr "U pranua me përpjekje"
-#: ../calendar/gui/e-itip-control.c:1145
-#: ../calendar/gui/e-meeting-list-view.c:176
-#: ../calendar/gui/e-meeting-store.c:190 ../calendar/gui/e-meeting-store.c:213
-#: ../calendar/gui/itip-utils.c:427 ../calendar/gui/itip-utils.c:453
-#: ../plugins/itip-formatter/itip-formatter.c:1395
+#: calendar/gui/e-itip-control.c:1145 calendar/gui/e-meeting-list-view.c:176
+#: calendar/gui/e-meeting-store.c:190 calendar/gui/e-meeting-store.c:213
+#: calendar/gui/itip-utils.c:427 calendar/gui/itip-utils.c:453
+#: plugins/itip-formatter/itip-formatter.c:1395
msgid "Declined"
msgstr "Nuk u pranua"
-#: ../calendar/gui/e-itip-control.c:1229
+#: calendar/gui/e-itip-control.c:1229
msgid ""
"The meeting has been cancelled, however it could not be found in your "
"calendars"
msgstr "Mbledhja është anulluar, sidoqoftë nuk gjendet në kalendarët tuaj"
-#: ../calendar/gui/e-itip-control.c:1231
+#: calendar/gui/e-itip-control.c:1231
msgid "The task has been cancelled, however it could not be found in your task lists"
msgstr ""
"Aktiviteti është anulluar, sidoqoftë nuk gjendet në listën tuaj të "
"aktiviteteve"
-#: ../calendar/gui/e-itip-control.c:1310
+#: calendar/gui/e-itip-control.c:1310
#, c-format
msgid "<b>%s</b> has published meeting information."
msgstr "<b>%s</b> ka publikuar informacione në lidhje me një mbledhje."
-#: ../calendar/gui/e-itip-control.c:1311
+#: calendar/gui/e-itip-control.c:1311
msgid "Meeting Information"
msgstr "Informacione mbi mbledhjen"
-#: ../calendar/gui/e-itip-control.c:1317
+#: calendar/gui/e-itip-control.c:1317
#, c-format
msgid "<b>%s</b> requests the presence of %s at a meeting."
msgstr "<b>%s</b> kërkon praninë e %s në një mbledhje."
-#: ../calendar/gui/e-itip-control.c:1319
+#: calendar/gui/e-itip-control.c:1319
#, c-format
msgid "<b>%s</b> requests your presence at a meeting."
msgstr "<b>%s</b> kërkon praninë tuaj në një mbledhje."
-#: ../calendar/gui/e-itip-control.c:1320
+#: calendar/gui/e-itip-control.c:1320
msgid "Meeting Proposal"
msgstr "Propozim mbledhjeje"
#. FIXME Whats going on here?
-#: ../calendar/gui/e-itip-control.c:1326
+#: calendar/gui/e-itip-control.c:1326
#, c-format
msgid "<b>%s</b> wishes to add to an existing meeting."
msgstr "<b>%s</b> dëshiron t'i shtohet një mbledhjeje ekzistuese."
-#: ../calendar/gui/e-itip-control.c:1327
+#: calendar/gui/e-itip-control.c:1327
msgid "Meeting Update"
msgstr "Rifreskimi i mbledhjes"
-#: ../calendar/gui/e-itip-control.c:1331
+#: calendar/gui/e-itip-control.c:1331
#, c-format
msgid "<b>%s</b> wishes to receive the latest meeting information."
msgstr "<b>%s</b> kërkon të marrë informacionet aktuale në lidhje me mbledhjen."
-#: ../calendar/gui/e-itip-control.c:1332
+#: calendar/gui/e-itip-control.c:1332
msgid "Meeting Update Request"
msgstr "Kërkesë për rifreskim mbledhjeje"
-#: ../calendar/gui/e-itip-control.c:1339
+#: calendar/gui/e-itip-control.c:1339
#, c-format
msgid "<b>%s</b> has replied to a meeting request."
msgstr "<b>%s</b> i është përgjigjur një kërkese për mbledhje."
-#: ../calendar/gui/e-itip-control.c:1340
+#: calendar/gui/e-itip-control.c:1340
msgid "Meeting Reply"
msgstr "Përgjigje mbledhjes"
-#: ../calendar/gui/e-itip-control.c:1347
+#: calendar/gui/e-itip-control.c:1347
#, c-format
msgid "<b>%s</b> has cancelled a meeting."
msgstr "<b>%s</b> ka anulluar një mbledhje."
-#: ../calendar/gui/e-itip-control.c:1348
+#: calendar/gui/e-itip-control.c:1348
msgid "Meeting Cancellation"
msgstr "Anullimi i mbledhjes"
-#: ../calendar/gui/e-itip-control.c:1358 ../calendar/gui/e-itip-control.c:1435
-#: ../calendar/gui/e-itip-control.c:1475
+#: calendar/gui/e-itip-control.c:1358 calendar/gui/e-itip-control.c:1435
+#: calendar/gui/e-itip-control.c:1475
#, c-format
msgid "<b>%s</b> has sent an unintelligible message."
msgstr "<b>%s</b> ka dërguar një mesazh të pakuptueshëm."
-#: ../calendar/gui/e-itip-control.c:1359
+#: calendar/gui/e-itip-control.c:1359
msgid "Bad Meeting Message"
msgstr "Mesazh i paqartë mbledhjeje"
-#: ../calendar/gui/e-itip-control.c:1386
+#: calendar/gui/e-itip-control.c:1386
#, c-format
msgid "<b>%s</b> has published task information."
msgstr "<b>%s</b> ka publikuar informacione në lidhje me aktivitetin."
-#: ../calendar/gui/e-itip-control.c:1387
+#: calendar/gui/e-itip-control.c:1387
msgid "Task Information"
msgstr "Informacione mbi aktivitetin"
-#: ../calendar/gui/e-itip-control.c:1394
+#: calendar/gui/e-itip-control.c:1394
#, c-format
msgid "<b>%s</b> requests %s to perform a task."
msgstr "<b>%s</b> kërkon që %s të kryejë një detyrë."
-#: ../calendar/gui/e-itip-control.c:1396
+#: calendar/gui/e-itip-control.c:1396
#, c-format
msgid "<b>%s</b> requests you perform a task."
msgstr "<b>%s</b> kërkon që ju të kryeni një detyrë."
-#: ../calendar/gui/e-itip-control.c:1397
+#: calendar/gui/e-itip-control.c:1397
msgid "Task Proposal"
msgstr "Propozim detyre"
#. FIXME Whats going on here?
-#: ../calendar/gui/e-itip-control.c:1403
+#: calendar/gui/e-itip-control.c:1403
#, c-format
msgid "<b>%s</b> wishes to add to an existing task."
msgstr "<b>%s</b> dëshiron të shtojë informacione mbi një aktivitet ekzistues."
-#: ../calendar/gui/e-itip-control.c:1404
+#: calendar/gui/e-itip-control.c:1404
msgid "Task Update"
msgstr "Rifreskimi i aktivitetit"
-#: ../calendar/gui/e-itip-control.c:1408
+#: calendar/gui/e-itip-control.c:1408
#, c-format
msgid "<b>%s</b> wishes to receive the latest task information."
msgstr "<b>%s</b> dëshiron të marrë informacionet aktualë të aktivitetit."
-#: ../calendar/gui/e-itip-control.c:1409
+#: calendar/gui/e-itip-control.c:1409
msgid "Task Update Request"
msgstr "Kërkesë për rifreskim aktiviteti"
-#: ../calendar/gui/e-itip-control.c:1416
+#: calendar/gui/e-itip-control.c:1416
#, c-format
msgid "<b>%s</b> has replied to a task assignment."
msgstr "<b>%s</b> i është përgjigjur caktimit të një detyre."
-#: ../calendar/gui/e-itip-control.c:1417
+#: calendar/gui/e-itip-control.c:1417
msgid "Task Reply"
msgstr "Përgjigje aktivitetit"
-#: ../calendar/gui/e-itip-control.c:1424
+#: calendar/gui/e-itip-control.c:1424
#, c-format
msgid "<b>%s</b> has cancelled a task."
msgstr "<b>%s</b> ka anulluar një aktivitet."
-#: ../calendar/gui/e-itip-control.c:1425
+#: calendar/gui/e-itip-control.c:1425
msgid "Task Cancellation"
msgstr "Anullimi i aktivitetit"
-#: ../calendar/gui/e-itip-control.c:1436
+#: calendar/gui/e-itip-control.c:1436
msgid "Bad Task Message"
msgstr "Mesazh i paqartë aktiviteti"
-#: ../calendar/gui/e-itip-control.c:1460
+#: calendar/gui/e-itip-control.c:1460
#, c-format
msgid "<b>%s</b> has published free/busy information."
msgstr "<b>%s</b> ka publikuar informacione mbi disponibilitetin."
-#: ../calendar/gui/e-itip-control.c:1461
+#: calendar/gui/e-itip-control.c:1461
msgid "Free/Busy Information"
msgstr "Informacione mbi gatishmërinë"
-#: ../calendar/gui/e-itip-control.c:1465
+#: calendar/gui/e-itip-control.c:1465
#, c-format
msgid "<b>%s</b> requests your free/busy information."
msgstr "<b>%s</b> kërkon informacione mbi gatishmërinë tuaj."
-#: ../calendar/gui/e-itip-control.c:1466
+#: calendar/gui/e-itip-control.c:1466
msgid "Free/Busy Request"
msgstr "Kërkesë disponibiliteti"
-#: ../calendar/gui/e-itip-control.c:1470
+#: calendar/gui/e-itip-control.c:1470
#, c-format
msgid "<b>%s</b> has replied to a free/busy request."
msgstr "<b>%s</b> i është përgjigjur një kërkese disponibiliteti."
-#: ../calendar/gui/e-itip-control.c:1471
+#: calendar/gui/e-itip-control.c:1471
msgid "Free/Busy Reply"
msgstr "Përgjigje gatishmërie"
-#: ../calendar/gui/e-itip-control.c:1476
+#: calendar/gui/e-itip-control.c:1476
msgid "Bad Free/Busy Message"
msgstr "Mesazh i paqartë gadishmërie"
-#: ../calendar/gui/e-itip-control.c:1551
+#: calendar/gui/e-itip-control.c:1551
msgid "The message does not appear to be properly formed"
msgstr "Mesazhi nuk është i formuar si duhet"
-#: ../calendar/gui/e-itip-control.c:1610
+#: calendar/gui/e-itip-control.c:1610
msgid "The message contains only unsupported requests."
msgstr "Mesazhi përmban vetëm kërkesa të pasuportuara."
-#: ../calendar/gui/e-itip-control.c:1643
+#: calendar/gui/e-itip-control.c:1643
msgid "The attachment does not contain a valid calendar message"
msgstr "I bashkangjituri nuk përmban një mesazh kalendari të vlefshëm"
-#: ../calendar/gui/e-itip-control.c:1675
+#: calendar/gui/e-itip-control.c:1675
msgid "The attachment has no viewable calendar items"
msgstr "I bashkangjituri nuk përmban elementë të shikueshëm kalendari"
-#: ../calendar/gui/e-itip-control.c:1909
+#: calendar/gui/e-itip-control.c:1909
msgid "Update complete\n"
msgstr "Rifreskimi u plotësua\n"
-#: ../calendar/gui/e-itip-control.c:1937
+#: calendar/gui/e-itip-control.c:1937
msgid "Object is invalid and cannot be updated\n"
msgstr "Objekti është i pavlefshëm dhe nuk mund të rifreskohet\n"
-#: ../calendar/gui/e-itip-control.c:1947
+#: calendar/gui/e-itip-control.c:1947
msgid "This response is not from a current attendee. Add as an attendee?"
msgstr "Kjo përgjigje nuk vjen nga një pjesmarrës aktual. T'a shtoj si pjesmarrës?"
-#: ../calendar/gui/e-itip-control.c:1959
+#: calendar/gui/e-itip-control.c:1959
msgid "Attendee status could not be updated because of an invalid status!\n"
msgstr ""
"Gjendja e pjesmarrësit nuk mund të rifreskohet për shkak të një gjendje të "
"pavlefshme!\n"
-#: ../calendar/gui/e-itip-control.c:1976
+#: calendar/gui/e-itip-control.c:1976
msgid "Attendee status updated\n"
msgstr "Gjendja e pjesmarrësit u rifreskua\n"
-#: ../calendar/gui/e-itip-control.c:1979
-#: ../plugins/itip-formatter/itip-formatter.c:852
+#: calendar/gui/e-itip-control.c:1979
+#: plugins/itip-formatter/itip-formatter.c:852
msgid "Attendee status can not be updated because the item no longer exists"
msgstr "Gjendja e pjesmarrësit nuk mund të rifreskohet pasi elementi nuk ekziston më"
-#: ../calendar/gui/e-itip-control.c:2006
+#: calendar/gui/e-itip-control.c:2006
msgid "Removal Complete"
msgstr "Heqja u plotësua"
-#: ../calendar/gui/e-itip-control.c:2029 ../calendar/gui/e-itip-control.c:2077
+#: calendar/gui/e-itip-control.c:2029 calendar/gui/e-itip-control.c:2077
msgid "Item sent!\n"
msgstr "Elementi u dërgua!\n"
-#: ../calendar/gui/e-itip-control.c:2031 ../calendar/gui/e-itip-control.c:2081
+#: calendar/gui/e-itip-control.c:2031 calendar/gui/e-itip-control.c:2081
msgid "The item could not be sent!\n"
msgstr "Elementi nuk mund të dërgohet!\n"
-#: ../calendar/gui/e-itip-control.c:2161
+#: calendar/gui/e-itip-control.c:2161
msgid "Choose an action:"
msgstr "Zgjidh një veprim:"
-#: ../calendar/gui/e-itip-control.c:2232
+#: calendar/gui/e-itip-control.c:2232
msgid "Update"
msgstr "Rifresko"
-#: ../calendar/gui/e-itip-control.c:2260
+#: calendar/gui/e-itip-control.c:2260
msgid "Accept"
msgstr "Prano"
-#: ../calendar/gui/e-itip-control.c:2261
+#: calendar/gui/e-itip-control.c:2261
msgid "Tentatively accept"
msgstr "Prano me përpjekje"
-#: ../calendar/gui/e-itip-control.c:2262
+#: calendar/gui/e-itip-control.c:2262
msgid "Decline"
msgstr "Refuzo"
-#: ../calendar/gui/e-itip-control.c:2291
+#: calendar/gui/e-itip-control.c:2291
msgid "Send Free/Busy Information"
msgstr "Dërgo Informacionin mbi disponibilitetin"
-#: ../calendar/gui/e-itip-control.c:2319
+#: calendar/gui/e-itip-control.c:2319
msgid "Update respondent status"
msgstr "Rifresko gjendjen e përgjigjes"
-#: ../calendar/gui/e-itip-control.c:2347
+#: calendar/gui/e-itip-control.c:2347
msgid "Send Latest Information"
msgstr "Dërgo informacionet aktuale"
-#: ../calendar/gui/e-itip-control.c:2375 ../calendar/gui/itip-utils.c:441
-#: ../mail/mail-send-recv.c:414 ../mail/mail-send-recv.c:466
-#: ../ui/evolution-mail-global.xml.h:1
+#: calendar/gui/e-itip-control.c:2375 calendar/gui/itip-utils.c:441
+#: mail/mail-send-recv.c:414 mail/mail-send-recv.c:466
+#: ui/evolution-mail-global.xml.h:1
msgid "Cancel"
msgstr "Anullo"
-#: ../calendar/gui/e-itip-control.glade.h:2
+#: calendar/gui/e-itip-control.glade.h:2
#, no-c-format
msgid "%P %%"
msgstr "%P %%"
-#: ../calendar/gui/e-itip-control.glade.h:3
+#: calendar/gui/e-itip-control.glade.h:3
msgid "--to--"
msgstr "--për--"
-#: ../calendar/gui/e-itip-control.glade.h:4
+#: calendar/gui/e-itip-control.glade.h:4
msgid "Calendar Message"
msgstr "Mesazh i kalendarit"
-#: ../calendar/gui/e-itip-control.glade.h:5
+#: calendar/gui/e-itip-control.glade.h:5
msgid "Date:"
msgstr "Data:"
-#: ../calendar/gui/e-itip-control.glade.h:7
+#: calendar/gui/e-itip-control.glade.h:7
msgid "Loading Calendar"
msgstr "Duke ngarkuar kalendarin"
-#: ../calendar/gui/e-itip-control.glade.h:8
+#: calendar/gui/e-itip-control.glade.h:8
msgid "Loading calendar..."
msgstr "Duke ngarkuar kalendarin..."
-#: ../calendar/gui/e-itip-control.glade.h:10
+#: calendar/gui/e-itip-control.glade.h:10
msgid "Server Message:"
msgstr "Mesazhi i serverit:"
-#: ../calendar/gui/e-itip-control.glade.h:12
+#: calendar/gui/e-itip-control.glade.h:12
msgid "date-end"
msgstr "përfundimi"
-#: ../calendar/gui/e-itip-control.glade.h:13
+#: calendar/gui/e-itip-control.glade.h:13
msgid "date-start"
msgstr "fillimi"
-#: ../calendar/gui/e-meeting-list-view.c:59
+#: calendar/gui/e-meeting-list-view.c:59
msgid "Chair Persons"
msgstr "Moderues"
-#: ../calendar/gui/e-meeting-list-view.c:60
-#: ../calendar/gui/e-meeting-list-view.c:124
+#: calendar/gui/e-meeting-list-view.c:60
+#: calendar/gui/e-meeting-list-view.c:124
msgid "Required Participants"
msgstr "Pjesëmarrës të nevojshëm"
-#: ../calendar/gui/e-meeting-list-view.c:61
+#: calendar/gui/e-meeting-list-view.c:61
msgid "Optional Participants"
msgstr "Pjesmarrës opcionalë"
-#: ../calendar/gui/e-meeting-list-view.c:62
+#: calendar/gui/e-meeting-list-view.c:62
msgid "Resources"
msgstr "Gjëndja"
-#: ../calendar/gui/e-meeting-list-view.c:135
-#: ../calendar/gui/e-meeting-store.c:99 ../calendar/gui/e-meeting-store.c:116
-#: ../calendar/gui/e-meeting-store.c:802
+#: calendar/gui/e-meeting-list-view.c:135 calendar/gui/e-meeting-store.c:99
+#: calendar/gui/e-meeting-store.c:116 calendar/gui/e-meeting-store.c:802
msgid "Individual"
msgstr "Vetjake"
-#: ../calendar/gui/e-meeting-list-view.c:136
-#: ../calendar/gui/e-meeting-store.c:101 ../calendar/gui/e-meeting-store.c:118
+#: calendar/gui/e-meeting-list-view.c:136 calendar/gui/e-meeting-store.c:101
+#: calendar/gui/e-meeting-store.c:118
msgid "Group"
msgstr "Grupi"
-#: ../calendar/gui/e-meeting-list-view.c:137
-#: ../calendar/gui/e-meeting-store.c:103 ../calendar/gui/e-meeting-store.c:120
+#: calendar/gui/e-meeting-list-view.c:137 calendar/gui/e-meeting-store.c:103
+#: calendar/gui/e-meeting-store.c:120
msgid "Resource"
msgstr "Burimi"
-#: ../calendar/gui/e-meeting-list-view.c:138
-#: ../calendar/gui/e-meeting-store.c:105 ../calendar/gui/e-meeting-store.c:122
+#: calendar/gui/e-meeting-list-view.c:138 calendar/gui/e-meeting-store.c:105
+#: calendar/gui/e-meeting-store.c:122
msgid "Room"
msgstr "Dhoma"
-#: ../calendar/gui/e-meeting-list-view.c:149
-#: ../calendar/gui/e-meeting-store.c:134 ../calendar/gui/e-meeting-store.c:151
+#: calendar/gui/e-meeting-list-view.c:149 calendar/gui/e-meeting-store.c:134
+#: calendar/gui/e-meeting-store.c:151
msgid "Chair"
msgstr "Moderues"
-#: ../calendar/gui/e-meeting-list-view.c:150
-#: ../calendar/gui/e-meeting-store.c:136 ../calendar/gui/e-meeting-store.c:153
-#: ../calendar/gui/e-meeting-store.c:805
+#: calendar/gui/e-meeting-list-view.c:150 calendar/gui/e-meeting-store.c:136
+#: calendar/gui/e-meeting-store.c:153 calendar/gui/e-meeting-store.c:805
msgid "Required Participant"
msgstr "Pjesmarrësi i kërkuar"
-#: ../calendar/gui/e-meeting-list-view.c:151
-#: ../calendar/gui/e-meeting-store.c:138 ../calendar/gui/e-meeting-store.c:155
+#: calendar/gui/e-meeting-list-view.c:151 calendar/gui/e-meeting-store.c:138
+#: calendar/gui/e-meeting-store.c:155
msgid "Optional Participant"
msgstr "Pjesmarrës shtesë"
-#: ../calendar/gui/e-meeting-list-view.c:152
-#: ../calendar/gui/e-meeting-store.c:140 ../calendar/gui/e-meeting-store.c:157
+#: calendar/gui/e-meeting-list-view.c:152 calendar/gui/e-meeting-store.c:140
+#: calendar/gui/e-meeting-store.c:157
msgid "Non-Participant"
msgstr "Jo pjesmarrës"
-#: ../calendar/gui/e-meeting-list-view.c:174
-#: ../calendar/gui/e-meeting-store.c:186 ../calendar/gui/e-meeting-store.c:209
-#: ../calendar/gui/e-meeting-store.c:815
+#: calendar/gui/e-meeting-list-view.c:174 calendar/gui/e-meeting-store.c:186
+#: calendar/gui/e-meeting-store.c:209 calendar/gui/e-meeting-store.c:815
msgid "Needs Action"
msgstr "Kërkon veprim"
-#: ../calendar/gui/e-meeting-list-view.c:177
-#: ../calendar/gui/e-meeting-store.c:192 ../calendar/gui/e-meeting-store.c:215
-#: ../calendar/gui/e-meeting-time-sel.c:411
+#: calendar/gui/e-meeting-list-view.c:177 calendar/gui/e-meeting-store.c:192
+#: calendar/gui/e-meeting-store.c:215 calendar/gui/e-meeting-time-sel.c:411
msgid "Tentative"
msgstr "Përpjekje"
-#: ../calendar/gui/e-meeting-list-view.c:178
-#: ../calendar/gui/e-meeting-store.c:194 ../calendar/gui/e-meeting-store.c:217
+#: calendar/gui/e-meeting-list-view.c:178 calendar/gui/e-meeting-store.c:194
+#: calendar/gui/e-meeting-store.c:217
msgid "Delegated"
msgstr "Deleguar"
-#: ../calendar/gui/e-meeting-store.c:198 ../calendar/gui/e-meeting-store.c:221
+#: calendar/gui/e-meeting-store.c:198 calendar/gui/e-meeting-store.c:221
msgid "In Process"
msgstr "Në proçes"
#. 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:444
-#: ../calendar/gui/e-meeting-time-sel.c:2104
+#: calendar/gui/e-meeting-time-sel-item.c:444
+#: calendar/gui/e-meeting-time-sel.c:2104
msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y"
@@ -7301,9 +7236,9 @@ msgstr "%A, %B %d, %Y"
#. %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:448
-#: ../calendar/gui/e-meeting-time-sel.c:2137 ../e-util/e-time-utils.c:203
-#: ../e-util/e-time-utils.c:296 ../e-util/e-time-utils.c:384
+#: calendar/gui/e-meeting-time-sel-item.c:448
+#: calendar/gui/e-meeting-time-sel.c:2137 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 %m/%d/%Y"
@@ -7313,69 +7248,69 @@ msgstr "%a %m/%d/%Y"
#. 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:452 ../e-util/e-time-utils.c:238
-#: ../e-util/e-time-utils.c:299 ../widgets/misc/e-dateedit.c:1660
+#: calendar/gui/e-meeting-time-sel-item.c:452 e-util/e-time-utils.c:238
+#: e-util/e-time-utils.c:299 widgets/misc/e-dateedit.c:1660
msgid "%m/%d/%Y"
msgstr "%m/%d/%Y"
-#: ../calendar/gui/e-meeting-time-sel.c:413 ../designs/OOA/ooa.glade.h:11
+#: calendar/gui/e-meeting-time-sel.c:413 designs/OOA/ooa.glade.h:11
msgid "Out of Office"
msgstr "Jashtë Zyre"
-#: ../calendar/gui/e-meeting-time-sel.c:414
+#: calendar/gui/e-meeting-time-sel.c:414
msgid "No Information"
msgstr "Asnjë Informacion"
-#: ../calendar/gui/e-meeting-time-sel.c:445
+#: calendar/gui/e-meeting-time-sel.c:445
msgid "O_ptions"
msgstr "M_undësitë"
-#: ../calendar/gui/e-meeting-time-sel.c:462
+#: calendar/gui/e-meeting-time-sel.c:462
msgid "Show _only working hours"
msgstr "Shfaq _vetëm orët e punës"
-#: ../calendar/gui/e-meeting-time-sel.c:472
+#: calendar/gui/e-meeting-time-sel.c:472
msgid "Show _zoomed out"
msgstr "Shfaqe të _zvogëluar"
-#: ../calendar/gui/e-meeting-time-sel.c:487
+#: calendar/gui/e-meeting-time-sel.c:487
msgid "_Update free/busy"
msgstr "_Rifresko disponibilitetin"
-#: ../calendar/gui/e-meeting-time-sel.c:502
+#: calendar/gui/e-meeting-time-sel.c:502
msgid "_<<"
msgstr "_<<"
-#: ../calendar/gui/e-meeting-time-sel.c:520
+#: calendar/gui/e-meeting-time-sel.c:520
msgid "_Autopick"
msgstr "_Autopick"
-#: ../calendar/gui/e-meeting-time-sel.c:535
+#: calendar/gui/e-meeting-time-sel.c:535
msgid ">_>"
msgstr ">_>"
-#: ../calendar/gui/e-meeting-time-sel.c:552
+#: calendar/gui/e-meeting-time-sel.c:552
msgid "_All people and resources"
msgstr "Të _gjithë personat dhe gjëndjen"
-#: ../calendar/gui/e-meeting-time-sel.c:561
+#: calendar/gui/e-meeting-time-sel.c:561
msgid "All _people and one resource"
msgstr "Të gjithë _personat dhe një gjëndje"
-#: ../calendar/gui/e-meeting-time-sel.c:570
+#: calendar/gui/e-meeting-time-sel.c:570
msgid "_Required people"
msgstr "_Persona të kërkuar"
-#: ../calendar/gui/e-meeting-time-sel.c:579
+#: calendar/gui/e-meeting-time-sel.c:579
msgid "Required people and _one resource"
msgstr "Personat e duhur dhe _një gjëndje"
-#: ../calendar/gui/e-pub-utils.c:300
+#: calendar/gui/e-pub-utils.c:300
#, c-format
msgid "Enter the password for %s"
msgstr "Shkruaj fjalëkalimin për %s"
-#: ../calendar/gui/e-tasks.c:763 ../calendar/gui/gnome-cal.c:2372
+#: calendar/gui/e-tasks.c:763 calendar/gui/gnome-cal.c:2372
#, c-format
msgid ""
"Error on %s:\n"
@@ -7384,185 +7319,185 @@ msgstr ""
"Gabim në %s:\n"
" %s"
-#: ../calendar/gui/e-tasks.c:811
+#: calendar/gui/e-tasks.c:811
msgid "Loading tasks"
msgstr "Duke ngarkuar aktivitetet"
-#: ../calendar/gui/e-tasks.c:895
+#: calendar/gui/e-tasks.c:895
#, c-format
msgid "Opening tasks at %s"
msgstr "Duke lexuar aktivitetet tek %s"
-#: ../calendar/gui/e-tasks.c:1091
+#: calendar/gui/e-tasks.c:1091
msgid "Completing tasks..."
msgstr "Duke plotësuar aktivitetet..."
-#: ../calendar/gui/e-tasks.c:1114
+#: calendar/gui/e-tasks.c:1114
msgid "Deleting selected objects..."
msgstr "Duke eleminuar objektet e zgjedhur..."
-#: ../calendar/gui/e-tasks.c:1141
+#: calendar/gui/e-tasks.c:1141
msgid "Expunging"
msgstr "Duke pastruar"
-#: ../calendar/gui/e-timezone-entry.c:133
+#: calendar/gui/e-timezone-entry.c:133
msgid "Timezone Button"
msgstr "Pulsanti i zonës orare"
#. 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/e-week-view-main-item.c:329 ../calendar/gui/print.c:1501
+#: calendar/gui/e-week-view-main-item.c:329 calendar/gui/print.c:1501
msgid "%d %B"
msgstr "%d %B"
-#: ../calendar/gui/gnome-cal.c:718
+#: calendar/gui/gnome-cal.c:718
msgid "Updating query"
msgstr "Duke rifreskuar kërkesën"
#. bonobo displays this string so it must be in locale
-#: ../calendar/gui/gnome-cal.c:2057 ../widgets/menus/gal-view-menus.c:351
+#: calendar/gui/gnome-cal.c:2057 widgets/menus/gal-view-menus.c:351
msgid "Custom View"
msgstr "Paraqitja e personalizuar"
-#: ../calendar/gui/gnome-cal.c:2058
+#: calendar/gui/gnome-cal.c:2058
msgid "Save Custom View"
msgstr "Ruaj paraqitjen e personalizuar"
-#: ../calendar/gui/gnome-cal.c:2063 ../widgets/menus/gal-view-menus.c:373
+#: calendar/gui/gnome-cal.c:2063 widgets/menus/gal-view-menus.c:373
msgid "Define Views..."
msgstr "Përcakto paraqitjet..."
-#: ../calendar/gui/gnome-cal.c:2222
+#: calendar/gui/gnome-cal.c:2222
#, c-format
msgid "Loading appointments at %s"
msgstr "Duke lexuar takimet tek %s"
-#: ../calendar/gui/gnome-cal.c:2241
+#: calendar/gui/gnome-cal.c:2241
#, c-format
msgid "Loading tasks at %s"
msgstr "Duke lexuar aktivitetet tek %s"
-#: ../calendar/gui/gnome-cal.c:2338
+#: calendar/gui/gnome-cal.c:2338
#, c-format
msgid "Opening %s"
msgstr "Duke hapur %s"
-#: ../calendar/gui/gnome-cal.c:3228
+#: calendar/gui/gnome-cal.c:3228
msgid "Purging"
msgstr "Duke pastruar"
-#: ../calendar/gui/goto-dialog.glade.h:1
+#: calendar/gui/goto-dialog.glade.h:1
msgid "April"
msgstr "Prill"
-#: ../calendar/gui/goto-dialog.glade.h:2
+#: calendar/gui/goto-dialog.glade.h:2
msgid "August"
msgstr "Gusht"
-#: ../calendar/gui/goto-dialog.glade.h:3
+#: calendar/gui/goto-dialog.glade.h:3
msgid "December"
msgstr "Dhjetor"
-#: ../calendar/gui/goto-dialog.glade.h:4
+#: calendar/gui/goto-dialog.glade.h:4
msgid "February"
msgstr "Shkurt"
-#: ../calendar/gui/goto-dialog.glade.h:5
+#: calendar/gui/goto-dialog.glade.h:5
msgid "January"
msgstr "Janar"
-#: ../calendar/gui/goto-dialog.glade.h:6
+#: calendar/gui/goto-dialog.glade.h:6
msgid "July"
msgstr "Korrik"
-#: ../calendar/gui/goto-dialog.glade.h:7
+#: calendar/gui/goto-dialog.glade.h:7
msgid "June"
msgstr "Qershor"
-#: ../calendar/gui/goto-dialog.glade.h:8
+#: calendar/gui/goto-dialog.glade.h:8
msgid "March"
msgstr "Mars"
-#: ../calendar/gui/goto-dialog.glade.h:9
+#: calendar/gui/goto-dialog.glade.h:9
msgid "May"
msgstr "Maj"
-#: ../calendar/gui/goto-dialog.glade.h:10
+#: calendar/gui/goto-dialog.glade.h:10
msgid "November"
msgstr "Nëntor"
-#: ../calendar/gui/goto-dialog.glade.h:11
+#: calendar/gui/goto-dialog.glade.h:11
msgid "October"
msgstr "Tetor"
-#: ../calendar/gui/goto-dialog.glade.h:12
+#: calendar/gui/goto-dialog.glade.h:12
msgid "Select Date"
msgstr "Zgjidh datën"
-#: ../calendar/gui/goto-dialog.glade.h:13
+#: calendar/gui/goto-dialog.glade.h:13
msgid "September"
msgstr "Shtator"
-#: ../calendar/gui/goto-dialog.glade.h:14
+#: calendar/gui/goto-dialog.glade.h:14
msgid "_Select Today"
msgstr "_Zgjidh Sot"
-#: ../calendar/gui/itip-utils.c:270 ../calendar/gui/itip-utils.c:318
-#: ../calendar/gui/itip-utils.c:350
+#: calendar/gui/itip-utils.c:270 calendar/gui/itip-utils.c:318
+#: calendar/gui/itip-utils.c:350
msgid "An organizer must be set."
msgstr "Duhet të jetë përcaktuar një organizues."
-#: ../calendar/gui/itip-utils.c:305
+#: calendar/gui/itip-utils.c:305
msgid "At least one attendee is necessary"
msgstr "Nevoitet të paktën një pjesmarrës"
-#: ../calendar/gui/itip-utils.c:393 ../calendar/gui/itip-utils.c:502
+#: calendar/gui/itip-utils.c:393 calendar/gui/itip-utils.c:502
msgid "Event information"
msgstr "Informacione mbi ngjarjen"
-#: ../calendar/gui/itip-utils.c:395 ../calendar/gui/itip-utils.c:504
+#: calendar/gui/itip-utils.c:395 calendar/gui/itip-utils.c:504
msgid "Task information"
msgstr "Informacione mbi aktivitetin"
-#: ../calendar/gui/itip-utils.c:397 ../calendar/gui/itip-utils.c:506
+#: calendar/gui/itip-utils.c:397 calendar/gui/itip-utils.c:506
msgid "Journal information"
msgstr "Informacione mbi gazetën"
-#: ../calendar/gui/itip-utils.c:399 ../calendar/gui/itip-utils.c:524
+#: calendar/gui/itip-utils.c:399 calendar/gui/itip-utils.c:524
msgid "Free/Busy information"
msgstr "Informacione mbi gatishmërinë"
-#: ../calendar/gui/itip-utils.c:401
+#: calendar/gui/itip-utils.c:401
msgid "Calendar information"
msgstr "Informacione mbi kalendarin"
-#: ../calendar/gui/itip-utils.c:437
+#: calendar/gui/itip-utils.c:437
msgid "Updated"
msgstr "U rifreskua"
-#: ../calendar/gui/itip-utils.c:445
+#: calendar/gui/itip-utils.c:445
msgid "Refresh"
msgstr "Rifresko"
-#: ../calendar/gui/itip-utils.c:449
+#: calendar/gui/itip-utils.c:449
msgid "Counter-proposal"
msgstr "Kundër propozim"
-#: ../calendar/gui/itip-utils.c:520
+#: calendar/gui/itip-utils.c:520
#, c-format
msgid "Free/Busy information (%s to %s)"
msgstr "Informacione mbi gatishmërinë (nga %s në %s)"
-#: ../calendar/gui/itip-utils.c:530
+#: calendar/gui/itip-utils.c:530
msgid "iCalendar information"
msgstr "Informacione iCalendar"
-#: ../calendar/gui/itip-utils.c:672
+#: calendar/gui/itip-utils.c:672
msgid "You must be an attendee of the event."
msgstr "Duhet të jeni pjesmarrës i ngjarjes."
-#: ../calendar/gui/migration.c:151
+#: calendar/gui/migration.c:151
msgid ""
"The location and hierarchy of the Evolution task folders has changed since "
"Evolution 1.x.\n"
@@ -7574,7 +7509,7 @@ msgstr ""
"\n"
"Durim sa Evolution të migrojë kartelat tuaja..."
-#: ../calendar/gui/migration.c:155
+#: calendar/gui/migration.c:155
msgid ""
"The location and hierarchy of the Evolution calendar folders has changed "
"since Evolution 1.x.\n"
@@ -7587,319 +7522,319 @@ msgstr ""
"Durim sa Evolution të migrojë kartelat tuaja..."
#. FIXME: set proper domain/code
-#: ../calendar/gui/migration.c:745 ../calendar/gui/migration.c:912
+#: calendar/gui/migration.c:745 calendar/gui/migration.c:912
msgid "Unable to migrate old settings from evolution/config.xmldb"
msgstr "I pamundur migrimi i rregullimeve të vjetra nga evolution/config.xmldb"
#. FIXME: domain/code
-#: ../calendar/gui/migration.c:774
+#: calendar/gui/migration.c:774
#, c-format
msgid "Unable to migrate calendar `%s'"
msgstr "I pamundur migrimi i kalendarit `%s'"
#. FIXME: domain/code
-#: ../calendar/gui/migration.c:941
+#: calendar/gui/migration.c:941
#, c-format
msgid "Unable to migrate tasks `%s'"
msgstr "I pamundur migrimi i aktiviteteve `%s'"
-#: ../calendar/gui/print.c:492
+#: calendar/gui/print.c:492
msgid "1st"
msgstr "1-ri"
-#: ../calendar/gui/print.c:492
+#: calendar/gui/print.c:492
msgid "2nd"
msgstr "2-ti"
-#: ../calendar/gui/print.c:492
+#: calendar/gui/print.c:492
msgid "3rd"
msgstr "3-ti"
-#: ../calendar/gui/print.c:492
+#: calendar/gui/print.c:492
msgid "4th"
msgstr "4-ti"
-#: ../calendar/gui/print.c:492
+#: calendar/gui/print.c:492
msgid "5th"
msgstr "5-ti"
-#: ../calendar/gui/print.c:493
+#: calendar/gui/print.c:493
msgid "6th"
msgstr "6-ti"
-#: ../calendar/gui/print.c:493
+#: calendar/gui/print.c:493
msgid "7th"
msgstr "7-ti"
-#: ../calendar/gui/print.c:493
+#: calendar/gui/print.c:493
msgid "8th"
msgstr "8-ti"
-#: ../calendar/gui/print.c:493
+#: calendar/gui/print.c:493
msgid "9th"
msgstr "9-ti"
-#: ../calendar/gui/print.c:493
+#: calendar/gui/print.c:493
msgid "10th"
msgstr "10-ti"
-#: ../calendar/gui/print.c:494
+#: calendar/gui/print.c:494
msgid "11th"
msgstr "11-ti"
-#: ../calendar/gui/print.c:494
+#: calendar/gui/print.c:494
msgid "12th"
msgstr "12-ti"
-#: ../calendar/gui/print.c:494
+#: calendar/gui/print.c:494
msgid "13th"
msgstr "13-ti"
-#: ../calendar/gui/print.c:494
+#: calendar/gui/print.c:494
msgid "14th"
msgstr "14-ti"
-#: ../calendar/gui/print.c:494
+#: calendar/gui/print.c:494
msgid "15th"
msgstr "15-ti"
-#: ../calendar/gui/print.c:495
+#: calendar/gui/print.c:495
msgid "16th"
msgstr "16-ti"
-#: ../calendar/gui/print.c:495
+#: calendar/gui/print.c:495
msgid "17th"
msgstr "17-ti"
-#: ../calendar/gui/print.c:495
+#: calendar/gui/print.c:495
msgid "18th"
msgstr "18-ti"
-#: ../calendar/gui/print.c:495
+#: calendar/gui/print.c:495
msgid "19th"
msgstr "19-ti"
-#: ../calendar/gui/print.c:495
+#: calendar/gui/print.c:495
msgid "20th"
msgstr "20-ti"
-#: ../calendar/gui/print.c:496
+#: calendar/gui/print.c:496
msgid "21st"
msgstr "21-ti"
-#: ../calendar/gui/print.c:496
+#: calendar/gui/print.c:496
msgid "22nd"
msgstr "22-ti"
-#: ../calendar/gui/print.c:496
+#: calendar/gui/print.c:496
msgid "23rd"
msgstr "23-ti"
-#: ../calendar/gui/print.c:496
+#: calendar/gui/print.c:496
msgid "24th"
msgstr "24-ti"
-#: ../calendar/gui/print.c:496
+#: calendar/gui/print.c:496
msgid "25th"
msgstr "25-ti"
-#: ../calendar/gui/print.c:497
+#: calendar/gui/print.c:497
msgid "26th"
msgstr "26-ti"
-#: ../calendar/gui/print.c:497
+#: calendar/gui/print.c:497
msgid "27th"
msgstr "27-ti"
-#: ../calendar/gui/print.c:497
+#: calendar/gui/print.c:497
msgid "28th"
msgstr "28-ti"
-#: ../calendar/gui/print.c:497
+#: calendar/gui/print.c:497
msgid "29th"
msgstr "29-ti"
-#: ../calendar/gui/print.c:497
+#: calendar/gui/print.c:497
msgid "30th"
msgstr "30-ti"
-#: ../calendar/gui/print.c:498
+#: calendar/gui/print.c:498
msgid "31st"
msgstr "31-ti"
-#: ../calendar/gui/print.c:573
+#: calendar/gui/print.c:573
msgid "Su"
msgstr "Dj"
-#: ../calendar/gui/print.c:573
+#: calendar/gui/print.c:573
msgid "Mo"
msgstr "Hë"
-#: ../calendar/gui/print.c:573
+#: calendar/gui/print.c:573
msgid "Tu"
msgstr "Ma"
-#: ../calendar/gui/print.c:573
+#: calendar/gui/print.c:573
msgid "We"
msgstr "Më"
-#: ../calendar/gui/print.c:574
+#: calendar/gui/print.c:574
msgid "Th"
msgstr "En"
-#: ../calendar/gui/print.c:574
+#: calendar/gui/print.c:574
msgid "Fr"
msgstr "Pr"
-#: ../calendar/gui/print.c:574
+#: calendar/gui/print.c:574
msgid "Sa"
msgstr "Sh"
#. Day
-#: ../calendar/gui/print.c:1917
+#: calendar/gui/print.c:1917
msgid "Selected day (%a %b %d %Y)"
msgstr "Dita e zgjedhur (%a %b %d %Y)"
-#: ../calendar/gui/print.c:1942 ../calendar/gui/print.c:1946
+#: calendar/gui/print.c:1942 calendar/gui/print.c:1946
msgid "%a %b %d"
msgstr "%a %b %d"
-#: ../calendar/gui/print.c:1943
+#: calendar/gui/print.c:1943
msgid "%a %d %Y"
msgstr "%a %d %Y"
-#: ../calendar/gui/print.c:1947 ../calendar/gui/print.c:1949
-#: ../calendar/gui/print.c:1950
+#: calendar/gui/print.c:1947 calendar/gui/print.c:1949
+#: calendar/gui/print.c:1950
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: ../calendar/gui/print.c:1954
+#: calendar/gui/print.c:1954
#, c-format
msgid "Selected week (%s - %s)"
msgstr "Java e zgjedhur (%s - %s)"
#. Month
-#: ../calendar/gui/print.c:1962
+#: calendar/gui/print.c:1962
msgid "Selected month (%b %Y)"
msgstr "Muaji i zgjedhur (%b %Y)"
#. Year
-#: ../calendar/gui/print.c:1969
+#: calendar/gui/print.c:1969
msgid "Selected year (%Y)"
msgstr "Viti i zgjedhur (%Y)"
-#: ../calendar/gui/print.c:2359
+#: calendar/gui/print.c:2359
#, c-format
msgid "Status: %s"
msgstr "Gjendja: %s"
-#: ../calendar/gui/print.c:2376
+#: calendar/gui/print.c:2376
#, c-format
msgid "Priority: %s"
msgstr "Prioriteti: %s"
-#: ../calendar/gui/print.c:2388
+#: calendar/gui/print.c:2388
#, c-format
msgid "Percent Complete: %i"
msgstr "Përqind plotësuar: %i"
-#: ../calendar/gui/print.c:2400
+#: calendar/gui/print.c:2400
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: ../calendar/gui/print.c:2414
+#: calendar/gui/print.c:2414
#, c-format
msgid "Categories: %s"
msgstr "Kategoritë: %s"
-#: ../calendar/gui/print.c:2425
+#: calendar/gui/print.c:2425
msgid "Contacts: "
msgstr "Kontakte: "
-#: ../calendar/gui/print.c:2565 ../calendar/gui/print.c:2653
-#: ../calendar/gui/print.c:2779 ../mail/em-format-html-print.c:178
+#: calendar/gui/print.c:2565 calendar/gui/print.c:2653
+#: calendar/gui/print.c:2779 mail/em-format-html-print.c:178
msgid "Print Preview"
msgstr "Pamja e parë e printimit"
-#: ../calendar/gui/print.c:2600
+#: calendar/gui/print.c:2600
msgid "Print Item"
msgstr "Printo elementin"
-#: ../calendar/gui/tasks-component.c:428
+#: calendar/gui/tasks-component.c:428
msgid "New Task List"
msgstr "Listë e Re Aktivitetesh"
-#: ../calendar/gui/tasks-component.c:504
+#: calendar/gui/tasks-component.c:504
#, c-format
msgid "%d task"
msgid_plural "%d tasks"
msgstr[0] "%d aktivitet"
msgstr[1] "%d aktivitete"
-#: ../calendar/gui/tasks-component.c:506 ../mail/mail-component.c:544
+#: calendar/gui/tasks-component.c:506 mail/mail-component.c:544
#, c-format
msgid ", %d selected"
msgid_plural ", %d selected"
msgstr[0] ", %d i zgjedhur"
msgstr[1] ", %d të zgjedhur"
-#: ../calendar/gui/tasks-component.c:553
+#: calendar/gui/tasks-component.c:553
msgid "Failed upgrading tasks."
msgstr "Rifreskimi i aktiviteteve dështoi."
-#: ../calendar/gui/tasks-component.c:847
+#: calendar/gui/tasks-component.c:847
#, c-format
msgid "Unable to open the task list '%s' for creating events and meetings"
msgstr ""
"E pamundur hapja e listës së aktiviteve '%s' për të krijuar ngjarje dhe "
"mbledhje"
-#: ../calendar/gui/tasks-component.c:862
+#: calendar/gui/tasks-component.c:862
msgid "There is no calendar available for creating tasks"
msgstr "Asnjë kalendar në dispozicion për të krijuar aktivitete"
-#: ../calendar/gui/tasks-component.c:956
+#: calendar/gui/tasks-component.c:956
msgid "Task Source Selector"
msgstr "Zgjedhësi i origjinës së detyrës"
-#: ../calendar/gui/tasks-component.c:1139
+#: calendar/gui/tasks-component.c:1139
msgid "New task"
msgstr "Aktivitet i ri"
-#: ../calendar/gui/tasks-component.c:1140
+#: calendar/gui/tasks-component.c:1140
msgid "_Task"
msgstr "_Aktivitet"
-#: ../calendar/gui/tasks-component.c:1141
+#: calendar/gui/tasks-component.c:1141
msgid "Create a new task"
msgstr "Krijo një aktivitet të ri"
-#: ../calendar/gui/tasks-component.c:1147
+#: calendar/gui/tasks-component.c:1147
msgid "New assigned task"
msgstr "Aktivitet i ri i caktuar"
-#: ../calendar/gui/tasks-component.c:1148
+#: calendar/gui/tasks-component.c:1148
msgid "Assigne_d Task"
msgstr "Aktivitet i caktua_r"
-#: ../calendar/gui/tasks-component.c:1149
+#: calendar/gui/tasks-component.c:1149
msgid "Create a new assigned task"
msgstr "Krijo një aktivitet të ri të caktuar"
-#: ../calendar/gui/tasks-component.c:1155
+#: calendar/gui/tasks-component.c:1155
msgid "New task list"
msgstr "Listë e re aktivitetesh"
-#: ../calendar/gui/tasks-component.c:1156
+#: calendar/gui/tasks-component.c:1156
msgid "Task l_ist"
msgstr "L_ista e aktiviteteve"
-#: ../calendar/gui/tasks-component.c:1157
+#: calendar/gui/tasks-component.c:1157
msgid "Create a new task list"
msgstr "Krijo një listë të re aktivitetesh"
-#: ../calendar/gui/tasks-control.c:370
+#: 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"
@@ -7912,52 +7847,52 @@ msgstr ""
"\n"
"Eleminoj aktivitetet?"
-#: ../calendar/gui/tasks-control.c:373
+#: calendar/gui/tasks-control.c:373
msgid "Do not ask me again."
msgstr "Mos më pyet më."
-#: ../calendar/gui/tasks-control.c:408
+#: calendar/gui/tasks-control.c:408
msgid "Print Tasks"
msgstr "Printo aktivitetet"
#. The first letter of each day of the week starting with Sunday
-#: ../calendar/gui/weekday-picker.c:319
+#: calendar/gui/weekday-picker.c:319
msgid "SMTWTFS"
msgstr "SMTWTFS"
-#: ../calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:1
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:1
msgid "Evolution Calendar intelligent importer"
msgstr "Importuesi inteligjent i Kalendarit të Evolution"
-#: ../calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:2
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:2
msgid "Evolution iCalendar importer"
msgstr "Importuesi iCalendar i Evolution"
-#: ../calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:3
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:3
msgid "Evolution vCalendar importer"
msgstr "Importuesi vCalendar i Evolution"
-#: ../calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:4
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:4
msgid "iCalendar files (.ics)"
msgstr "Files iCalendar (.ics)"
-#: ../calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:5
+#: calendar/importers/GNOME_Evolution_Calendar_Importer.server.in.in.h:5
msgid "vCalendar files (.vcf)"
msgstr "Files vCalendar (.vcf)"
-#: ../calendar/importers/icalendar-importer.c:82
+#: calendar/importers/icalendar-importer.c:82
msgid "Appointments and Meetings"
msgstr "Takime dhe Mbledhje"
-#: ../calendar/importers/icalendar-importer.c:486
+#: calendar/importers/icalendar-importer.c:486
msgid "Reminder!!"
msgstr "Kujtesë!!"
-#: ../calendar/importers/icalendar-importer.c:694
+#: calendar/importers/icalendar-importer.c:694
msgid "Calendar Events"
msgstr "Ngjarje Kalendari"
-#: ../calendar/importers/icalendar-importer.c:719
+#: calendar/importers/icalendar-importer.c:719
msgid ""
"Evolution has found Gnome Calendar files.\n"
"Would you like to import them into Evolution?"
@@ -7970,1540 +7905,1539 @@ msgstr ""
#. * We only place them here so gettext picks them up for translation.
#. * Don't include in any C files.
#.
-#: ../calendar/zones.h:7
+#: calendar/zones.h:7
msgid "Africa/Abidjan"
msgstr "Afrikë/Abidjan"
-#: ../calendar/zones.h:8
+#: calendar/zones.h:8
msgid "Africa/Accra"
msgstr "Afrikë/Accra"
-#: ../calendar/zones.h:9
+#: calendar/zones.h:9
msgid "Africa/Addis_Ababa"
msgstr "Afrikë/Addis_Ababa"
-#: ../calendar/zones.h:10
+#: calendar/zones.h:10
msgid "Africa/Algiers"
msgstr "Afrikë/Algjir"
-#: ../calendar/zones.h:11
+#: calendar/zones.h:11
msgid "Africa/Asmera"
msgstr "Afrikë/Asmera"
-#: ../calendar/zones.h:12
+#: calendar/zones.h:12
msgid "Africa/Bamako"
msgstr "Afrikë/Bamako"
-#: ../calendar/zones.h:13
+#: calendar/zones.h:13
msgid "Africa/Bangui"
msgstr "Afrikë/Bangui"
-#: ../calendar/zones.h:14
+#: calendar/zones.h:14
msgid "Africa/Banjul"
msgstr "Afrikë/Banjul"
-#: ../calendar/zones.h:15
+#: calendar/zones.h:15
msgid "Africa/Bissau"
msgstr "Afrikë/Bissau"
-#: ../calendar/zones.h:16
+#: calendar/zones.h:16
msgid "Africa/Blantyre"
msgstr "Afrikë/Blantyre"
-#: ../calendar/zones.h:17
+#: calendar/zones.h:17
msgid "Africa/Brazzaville"
msgstr "Afrikë/Brazzaville"
-#: ../calendar/zones.h:18
+#: calendar/zones.h:18
msgid "Africa/Bujumbura"
msgstr "Afrikë/Bujumbura"
-#: ../calendar/zones.h:19
+#: calendar/zones.h:19
msgid "Africa/Cairo"
msgstr "Afrikë/Kairo"
-#: ../calendar/zones.h:20
+#: calendar/zones.h:20
msgid "Africa/Casablanca"
msgstr "Afrikë/Casablanca"
-#: ../calendar/zones.h:21
+#: calendar/zones.h:21
msgid "Africa/Ceuta"
msgstr "Afrikë/Ceuta"
-#: ../calendar/zones.h:22
+#: calendar/zones.h:22
msgid "Africa/Conakry"
msgstr "Afrikë/Conakry"
-#: ../calendar/zones.h:23
+#: calendar/zones.h:23
msgid "Africa/Dakar"
msgstr "Afrikë/Dakar"
-#: ../calendar/zones.h:24
+#: calendar/zones.h:24
msgid "Africa/Dar_es_Salaam"
msgstr "Afrikë/Dar_es_Salaam"
-#: ../calendar/zones.h:25
+#: calendar/zones.h:25
msgid "Africa/Djibouti"
msgstr "Afrikë/Djibouti"
-#: ../calendar/zones.h:26
+#: calendar/zones.h:26
msgid "Africa/Douala"
msgstr "Afrikë/Douala"
-#: ../calendar/zones.h:27
+#: calendar/zones.h:27
msgid "Africa/El_Aaiun"
msgstr "Afrikë/El_Aaiun"
-#: ../calendar/zones.h:28
+#: calendar/zones.h:28
msgid "Africa/Freetown"
msgstr "Afrikë/Freetown"
-#: ../calendar/zones.h:29
+#: calendar/zones.h:29
msgid "Africa/Gaborone"
msgstr "Afrikë/Gaborone"
-#: ../calendar/zones.h:30
+#: calendar/zones.h:30
msgid "Africa/Harare"
msgstr "Afrikë/Harare"
-#: ../calendar/zones.h:31
+#: calendar/zones.h:31
msgid "Africa/Johannesburg"
msgstr "Afrikë/Johannesburg"
-#: ../calendar/zones.h:32
+#: calendar/zones.h:32
msgid "Africa/Kampala"
msgstr "Afrikë/Kampala"
-#: ../calendar/zones.h:33
+#: calendar/zones.h:33
msgid "Africa/Khartoum"
msgstr "Afrikë/Khartoum"
-#: ../calendar/zones.h:34
+#: calendar/zones.h:34
msgid "Africa/Kigali"
msgstr "Afrikë/Kigali"
-#: ../calendar/zones.h:35
+#: calendar/zones.h:35
msgid "Africa/Kinshasa"
msgstr "Afrikë/Kinshasa"
-#: ../calendar/zones.h:36
+#: calendar/zones.h:36
msgid "Africa/Lagos"
msgstr "Afrikë/Lagos"
-#: ../calendar/zones.h:37
+#: calendar/zones.h:37
msgid "Africa/Libreville"
msgstr "Afrikë/Libreville"
-#: ../calendar/zones.h:38
+#: calendar/zones.h:38
msgid "Africa/Lome"
msgstr "Afrikë/Lome"
-#: ../calendar/zones.h:39
+#: calendar/zones.h:39
msgid "Africa/Luanda"
msgstr "Afrikë/Luanda"
-#: ../calendar/zones.h:40
+#: calendar/zones.h:40
msgid "Africa/Lubumbashi"
msgstr "Afrikë/Lubumbashi"
-#: ../calendar/zones.h:41
+#: calendar/zones.h:41
msgid "Africa/Lusaka"
msgstr "Afrikë/Lusaka"
-#: ../calendar/zones.h:42
+#: calendar/zones.h:42
msgid "Africa/Malabo"
msgstr "Afrikë/Malabo"
-#: ../calendar/zones.h:43
+#: calendar/zones.h:43
msgid "Africa/Maputo"
msgstr "Afrikë/Maputo"
-#: ../calendar/zones.h:44
+#: calendar/zones.h:44
msgid "Africa/Maseru"
msgstr "Afrikë/Maseru"
-#: ../calendar/zones.h:45
+#: calendar/zones.h:45
msgid "Africa/Mbabane"
msgstr "Afrikë/Mbabane"
-#: ../calendar/zones.h:46
+#: calendar/zones.h:46
msgid "Africa/Mogadishu"
msgstr "Afrikë/Mogadishu"
-#: ../calendar/zones.h:47
+#: calendar/zones.h:47
msgid "Africa/Monrovia"
msgstr "Afrikë/Monrovia"
-#: ../calendar/zones.h:48
+#: calendar/zones.h:48
msgid "Africa/Nairobi"
msgstr "Afrikë/Nairobi"
-#: ../calendar/zones.h:49
+#: calendar/zones.h:49
msgid "Africa/Ndjamena"
msgstr "Afrikë/Ndjamena"
-#: ../calendar/zones.h:50
+#: calendar/zones.h:50
msgid "Africa/Niamey"
msgstr "Afrikë/Niamey"
-#: ../calendar/zones.h:51
+#: calendar/zones.h:51
msgid "Africa/Nouakchott"
msgstr "Afrikë/Nouakchott"
-#: ../calendar/zones.h:52
+#: calendar/zones.h:52
msgid "Africa/Ouagadougou"
msgstr "Afrikë/Ouagadougou"
-#: ../calendar/zones.h:53
+#: calendar/zones.h:53
msgid "Africa/Porto-Novo"
msgstr "Afrikë/Porto-Novo"
-#: ../calendar/zones.h:54
+#: calendar/zones.h:54
msgid "Africa/Sao_Tome"
msgstr "Afrikë/Sao_Tome"
-#: ../calendar/zones.h:55
+#: calendar/zones.h:55
msgid "Africa/Timbuktu"
msgstr "Afrikë/Timbuktu"
-#: ../calendar/zones.h:56
+#: calendar/zones.h:56
msgid "Africa/Tripoli"
msgstr "Afrikë/Tripoli"
-#: ../calendar/zones.h:57
+#: calendar/zones.h:57
msgid "Africa/Tunis"
msgstr "Afrikë/Tunis"
-#: ../calendar/zones.h:58
+#: calendar/zones.h:58
msgid "Africa/Windhoek"
msgstr "Afrikë/Windhoek"
-#: ../calendar/zones.h:59
+#: calendar/zones.h:59
msgid "America/Adak"
msgstr "Amerikë/Adak"
-#: ../calendar/zones.h:60
+#: calendar/zones.h:60
msgid "America/Anchorage"
msgstr "Amerikë/Anchorage"
-#: ../calendar/zones.h:61
+#: calendar/zones.h:61
msgid "America/Anguilla"
msgstr "Amerikë/Anguilla"
-#: ../calendar/zones.h:62
+#: calendar/zones.h:62
msgid "America/Antigua"
msgstr "Amerikë/Antigua"
-#: ../calendar/zones.h:63
+#: calendar/zones.h:63
msgid "America/Araguaina"
msgstr "Amerikë/Araguaina"
-#: ../calendar/zones.h:64
+#: calendar/zones.h:64
msgid "America/Aruba"
msgstr "Amerikë/Aruba"
-#: ../calendar/zones.h:65
+#: calendar/zones.h:65
msgid "America/Asuncion"
msgstr "Amerikë/Asuncion"
-#: ../calendar/zones.h:66
+#: calendar/zones.h:66
msgid "America/Barbados"
msgstr "Amerikë/Barbados"
-#: ../calendar/zones.h:67
+#: calendar/zones.h:67
msgid "America/Belem"
msgstr "Amerikë/Belem"
-#: ../calendar/zones.h:68
+#: calendar/zones.h:68
msgid "America/Belize"
msgstr "Amerikë/Belize"
-#: ../calendar/zones.h:69
+#: calendar/zones.h:69
msgid "America/Boa_Vista"
msgstr "Amerikë/Boa_Vista"
-#: ../calendar/zones.h:70
+#: calendar/zones.h:70
msgid "America/Bogota"
msgstr "Amerikë/Bogota"
-#: ../calendar/zones.h:71
+#: calendar/zones.h:71
msgid "America/Boise"
msgstr "Amerikë/Boise"
-#: ../calendar/zones.h:72
+#: calendar/zones.h:72
msgid "America/Buenos_Aires"
msgstr "Amerikë/Buenos_Aires"
-#: ../calendar/zones.h:73
+#: calendar/zones.h:73
msgid "America/Cambridge_Bay"
msgstr "Amerikë/Cambridge_Bay"
-#: ../calendar/zones.h:74
+#: calendar/zones.h:74
msgid "America/Cancun"
msgstr "Amerikë/Cancun"
-#: ../calendar/zones.h:75
+#: calendar/zones.h:75
msgid "America/Caracas"
msgstr "Amerikë/Karakas"
-#: ../calendar/zones.h:76
+#: calendar/zones.h:76
msgid "America/Catamarca"
msgstr "Amerikë/Catamarca"
-#: ../calendar/zones.h:77
+#: calendar/zones.h:77
msgid "America/Cayenne"
msgstr "Amerikë/Cayenne"
-#: ../calendar/zones.h:78
+#: calendar/zones.h:78
msgid "America/Cayman"
msgstr "Amerikë/Cayman"
-#: ../calendar/zones.h:79
+#: calendar/zones.h:79
msgid "America/Chicago"
msgstr "Amerikë/Chicago"
-#: ../calendar/zones.h:80
+#: calendar/zones.h:80
msgid "America/Chihuahua"
msgstr "Amerikë/Chihuahua"
-#: ../calendar/zones.h:81
+#: calendar/zones.h:81
msgid "America/Cordoba"
msgstr "Amerikë/Kordoba"
-#: ../calendar/zones.h:82
+#: calendar/zones.h:82
msgid "America/Costa_Rica"
msgstr "Amerikë/Costa_Rica"
-#: ../calendar/zones.h:83
+#: calendar/zones.h:83
msgid "America/Cuiaba"
msgstr "Amerikë/Cuiaba"
-#: ../calendar/zones.h:84
+#: calendar/zones.h:84
msgid "America/Curacao"
msgstr "Amerikë/Curacao"
-#: ../calendar/zones.h:85
+#: calendar/zones.h:85
msgid "America/Danmarkshavn"
msgstr "Amerikë/Danmarkshavn"
-#: ../calendar/zones.h:86
+#: calendar/zones.h:86
msgid "America/Dawson"
msgstr "Amerikë/Dawson"
-#: ../calendar/zones.h:87
+#: calendar/zones.h:87
msgid "America/Dawson_Creek"
msgstr "Amerikë/Dawson_Creek"
-#: ../calendar/zones.h:88
+#: calendar/zones.h:88
msgid "America/Denver"
msgstr "Amerikë/Denver"
-#: ../calendar/zones.h:89
+#: calendar/zones.h:89
msgid "America/Detroit"
msgstr "Amerikë/Detroit"
-#: ../calendar/zones.h:90
+#: calendar/zones.h:90
msgid "America/Dominica"
msgstr "Amerikë/Dominica"
-#: ../calendar/zones.h:91
+#: calendar/zones.h:91
msgid "America/Edmonton"
msgstr "Amerikë/Edmonton"
-#: ../calendar/zones.h:92
+#: calendar/zones.h:92
msgid "America/Eirunepe"
msgstr "Amerikë/Eirunepe"
-#: ../calendar/zones.h:93
+#: calendar/zones.h:93
msgid "America/El_Salvador"
msgstr "Amerikë/El_Salvador"
-#: ../calendar/zones.h:94
+#: calendar/zones.h:94
msgid "America/Fortaleza"
msgstr "Amerikë/Fortaleza"
-#: ../calendar/zones.h:95
+#: calendar/zones.h:95
msgid "America/Glace_Bay"
msgstr "Amerikë/Glace_Bay"
-#: ../calendar/zones.h:96
+#: calendar/zones.h:96
msgid "America/Godthab"
msgstr "Amerikë/Godthab"
-#: ../calendar/zones.h:97
+#: calendar/zones.h:97
msgid "America/Goose_Bay"
msgstr "Amerikë/Goose_Bay"
-#: ../calendar/zones.h:98
+#: calendar/zones.h:98
msgid "America/Grand_Turk"
msgstr "Amerikë/Grand_Turk"
-#: ../calendar/zones.h:99
+#: calendar/zones.h:99
msgid "America/Grenada"
msgstr "Amerikë/Grenada"
-#: ../calendar/zones.h:100
+#: calendar/zones.h:100
msgid "America/Guadeloupe"
msgstr "Amerikë/Guadeloupe"
-#: ../calendar/zones.h:101
+#: calendar/zones.h:101
msgid "America/Guatemala"
msgstr "Amerikë/Guatemala"
-#: ../calendar/zones.h:102
+#: calendar/zones.h:102
msgid "America/Guayaquil"
msgstr "Amerikë/Guayaquil"
-#: ../calendar/zones.h:103
+#: calendar/zones.h:103
msgid "America/Guyana"
msgstr "Amerikë/Guyana"
-#: ../calendar/zones.h:104
+#: calendar/zones.h:104
msgid "America/Halifax"
msgstr "Amerikë/Halifax"
-#: ../calendar/zones.h:105
+#: calendar/zones.h:105
msgid "America/Havana"
msgstr "Amerikë/Havana"
-#: ../calendar/zones.h:106
+#: calendar/zones.h:106
msgid "America/Hermosillo"
msgstr "Amerikë/Hermosillo"
-#: ../calendar/zones.h:107
+#: calendar/zones.h:107
msgid "America/Indiana/Indianapolis"
msgstr "Amerikë/Indiana/Indianapolis"
-#: ../calendar/zones.h:108
+#: calendar/zones.h:108
msgid "America/Indiana/Knox"
msgstr "Amerikë/Indiana/Knox"
-#: ../calendar/zones.h:109
+#: calendar/zones.h:109
msgid "America/Indiana/Marengo"
msgstr "Amerikë/Indiana/Marengo"
-#: ../calendar/zones.h:110
+#: calendar/zones.h:110
msgid "America/Indiana/Vevay"
msgstr "Amerikë/Indiana/Vevay"
-#: ../calendar/zones.h:111
+#: calendar/zones.h:111
msgid "America/Indianapolis"
msgstr "Amerikë/Indianapolis"
-#: ../calendar/zones.h:112
+#: calendar/zones.h:112
msgid "America/Inuvik"
msgstr "Amerikë/Inuvik"
-#: ../calendar/zones.h:113
+#: calendar/zones.h:113
msgid "America/Iqaluit"
msgstr "Amerikë/Iqaluit"
-#: ../calendar/zones.h:114
+#: calendar/zones.h:114
msgid "America/Jamaica"
msgstr "Amerikë/Jamaica"
-#: ../calendar/zones.h:115
+#: calendar/zones.h:115
msgid "America/Jujuy"
msgstr "Amerikë/Jujuy"
-#: ../calendar/zones.h:116
+#: calendar/zones.h:116
msgid "America/Juneau"
msgstr "Amerikë/Juneau"
-#: ../calendar/zones.h:117
+#: calendar/zones.h:117
msgid "America/Kentucky/Louisville"
msgstr "Amerikë/Kentucky/Louisville"
-#: ../calendar/zones.h:118
+#: calendar/zones.h:118
msgid "America/Kentucky/Monticello"
msgstr "Amerikë/Kentucky/Monticello"
-#: ../calendar/zones.h:119
+#: calendar/zones.h:119
msgid "America/La_Paz"
msgstr "Amerikë/La_Paz"
-#: ../calendar/zones.h:120
+#: calendar/zones.h:120
msgid "America/Lima"
msgstr "Amerikë/Lima"
-#: ../calendar/zones.h:121
+#: calendar/zones.h:121
msgid "America/Los_Angeles"
msgstr "Amerikë/Los_Angeles"
-#: ../calendar/zones.h:122
+#: calendar/zones.h:122
msgid "America/Louisville"
msgstr "Amerikë/Louisville"
-#: ../calendar/zones.h:123
+#: calendar/zones.h:123
msgid "America/Maceio"
msgstr "Amerikë/Maceio"
-#: ../calendar/zones.h:124
+#: calendar/zones.h:124
msgid "America/Managua"
msgstr "Amerikë/Managua"
-#: ../calendar/zones.h:125
+#: calendar/zones.h:125
msgid "America/Manaus"
msgstr "Amerikë/Manaus"
-#: ../calendar/zones.h:126
+#: calendar/zones.h:126
msgid "America/Martinique"
msgstr "Amerikë/Martinique"
-#: ../calendar/zones.h:127
+#: calendar/zones.h:127
msgid "America/Mazatlan"
msgstr "Amerikë/Mazatlan"
-#: ../calendar/zones.h:128
+#: calendar/zones.h:128
msgid "America/Mendoza"
msgstr "Amerikë/Mendoza"
-#: ../calendar/zones.h:129
+#: calendar/zones.h:129
msgid "America/Menominee"
msgstr "Amerikë/Menominee"
-#: ../calendar/zones.h:130
+#: calendar/zones.h:130
msgid "America/Merida"
msgstr "Amerikë/Merida"
-#: ../calendar/zones.h:131
+#: calendar/zones.h:131
msgid "America/Mexico_City"
msgstr "Amerikë/Mexico_City"
-#: ../calendar/zones.h:132
+#: calendar/zones.h:132
msgid "America/Miquelon"
msgstr "Amerikë/Miquelon"
-#: ../calendar/zones.h:133
+#: calendar/zones.h:133
msgid "America/Monterrey"
msgstr "Amerikë/Monterrey"
-#: ../calendar/zones.h:134
+#: calendar/zones.h:134
msgid "America/Montevideo"
msgstr "Amerikë/Montevideo"
-#: ../calendar/zones.h:135
+#: calendar/zones.h:135
msgid "America/Montreal"
msgstr "Amerikë/Montreal"
-#: ../calendar/zones.h:136
+#: calendar/zones.h:136
msgid "America/Montserrat"
msgstr "Amerikë/Montserrat"
-#: ../calendar/zones.h:137
+#: calendar/zones.h:137
msgid "America/Nassau"
msgstr "Amerikë/Nassau"
-#: ../calendar/zones.h:138
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:4
+#: calendar/zones.h:138 widgets/e-timezone-dialog/e-timezone-dialog.glade.h:4
msgid "America/New_York"
msgstr "Amerikë/New_York"
-#: ../calendar/zones.h:139
+#: calendar/zones.h:139
msgid "America/Nipigon"
msgstr "Amerikë/Nipigon"
-#: ../calendar/zones.h:140
+#: calendar/zones.h:140
msgid "America/Nome"
msgstr "Amerikë/Nome"
-#: ../calendar/zones.h:141
+#: calendar/zones.h:141
msgid "America/Noronha"
msgstr "Amerikë/Noronha"
-#: ../calendar/zones.h:142
+#: calendar/zones.h:142
msgid "America/North_Dakota/Center"
msgstr "Amerikë/Dakota_Veriore/Qendër"
-#: ../calendar/zones.h:143
+#: calendar/zones.h:143
msgid "America/Panama"
msgstr "Amerikë/Panama"
-#: ../calendar/zones.h:144
+#: calendar/zones.h:144
msgid "America/Pangnirtung"
msgstr "Amerikë/Pangnirtung"
-#: ../calendar/zones.h:145
+#: calendar/zones.h:145
msgid "America/Paramaribo"
msgstr "Amerikë/Paramaribo"
-#: ../calendar/zones.h:146
+#: calendar/zones.h:146
msgid "America/Phoenix"
msgstr "Amerikë/Phoenix"
-#: ../calendar/zones.h:147
+#: calendar/zones.h:147
msgid "America/Port-au-Prince"
msgstr "Amerikë/Port-au-Prince"
-#: ../calendar/zones.h:148
+#: calendar/zones.h:148
msgid "America/Port_of_Spain"
msgstr "Amerikë/Port_of_Spain"
-#: ../calendar/zones.h:149
+#: calendar/zones.h:149
msgid "America/Porto_Velho"
msgstr "Amerikë/Porto_Velho"
-#: ../calendar/zones.h:150
+#: calendar/zones.h:150
msgid "America/Puerto_Rico"
msgstr "Amerikë/Puerto_Rico"
-#: ../calendar/zones.h:151
+#: calendar/zones.h:151
msgid "America/Rainy_River"
msgstr "Amerikë/Rainy_River"
-#: ../calendar/zones.h:152
+#: calendar/zones.h:152
msgid "America/Rankin_Inlet"
msgstr "Amerikë/Rankin_Inlet"
-#: ../calendar/zones.h:153
+#: calendar/zones.h:153
msgid "America/Recife"
msgstr "Amerikë/Recife"
-#: ../calendar/zones.h:154
+#: calendar/zones.h:154
msgid "America/Regina"
msgstr "Amerikë/Regina"
-#: ../calendar/zones.h:155
+#: calendar/zones.h:155
msgid "America/Rio_Branco"
msgstr "Amerikë/Rio_Branco"
-#: ../calendar/zones.h:156
+#: calendar/zones.h:156
msgid "America/Rosario"
msgstr "Amerikë/Rosario"
-#: ../calendar/zones.h:157
+#: calendar/zones.h:157
msgid "America/Santiago"
msgstr "Amerikë/Santiago"
-#: ../calendar/zones.h:158
+#: calendar/zones.h:158
msgid "America/Santo_Domingo"
msgstr "Amerikë/Santo_Domingo"
-#: ../calendar/zones.h:159
+#: calendar/zones.h:159
msgid "America/Sao_Paulo"
msgstr "Amerikë/Sao_Paulo"
-#: ../calendar/zones.h:160
+#: calendar/zones.h:160
msgid "America/Scoresbysund"
msgstr "Amerikë/Scoresbysund"
-#: ../calendar/zones.h:161
+#: calendar/zones.h:161
msgid "America/Shiprock"
msgstr "Amerikë/Shiprock"
-#: ../calendar/zones.h:162
+#: calendar/zones.h:162
msgid "America/St_Johns"
msgstr "Amerikë/St_Johns"
-#: ../calendar/zones.h:163
+#: calendar/zones.h:163
msgid "America/St_Kitts"
msgstr "Amerikë/St_Kitts"
-#: ../calendar/zones.h:164
+#: calendar/zones.h:164
msgid "America/St_Lucia"
msgstr "Amerikë/St_Lucia"
-#: ../calendar/zones.h:165
+#: calendar/zones.h:165
msgid "America/St_Thomas"
msgstr "Amerikë/St_Thomas"
-#: ../calendar/zones.h:166
+#: calendar/zones.h:166
msgid "America/St_Vincent"
msgstr "Amerikë/St_Vincent"
-#: ../calendar/zones.h:167
+#: calendar/zones.h:167
msgid "America/Swift_Current"
msgstr "Amerikë/Swift_Current"
-#: ../calendar/zones.h:168
+#: calendar/zones.h:168
msgid "America/Tegucigalpa"
msgstr "Amerikë/Tegucigalpa"
-#: ../calendar/zones.h:169
+#: calendar/zones.h:169
msgid "America/Thule"
msgstr "Amerikë/Thule"
-#: ../calendar/zones.h:170
+#: calendar/zones.h:170
msgid "America/Thunder_Bay"
msgstr "Amerikë/Thunder_Bay"
-#: ../calendar/zones.h:171
+#: calendar/zones.h:171
msgid "America/Tijuana"
msgstr "Amerikë/Tijuana"
-#: ../calendar/zones.h:172
+#: calendar/zones.h:172
msgid "America/Tortola"
msgstr "Amerikë/Tortola"
-#: ../calendar/zones.h:173
+#: calendar/zones.h:173
msgid "America/Vancouver"
msgstr "Amerikë/Vancouver"
-#: ../calendar/zones.h:174
+#: calendar/zones.h:174
msgid "America/Whitehorse"
msgstr "Amerikë/Whitehorse"
-#: ../calendar/zones.h:175
+#: calendar/zones.h:175
msgid "America/Winnipeg"
msgstr "Amerikë/Winnipeg"
-#: ../calendar/zones.h:176
+#: calendar/zones.h:176
msgid "America/Yakutat"
msgstr "Amerikë/Yakutat"
-#: ../calendar/zones.h:177
+#: calendar/zones.h:177
msgid "America/Yellowknife"
msgstr "Amerikë/Yellowknife"
-#: ../calendar/zones.h:178
+#: calendar/zones.h:178
msgid "Antarctica/Casey"
msgstr "Antarktika/Casey"
-#: ../calendar/zones.h:179
+#: calendar/zones.h:179
msgid "Antarctica/Davis"
msgstr "Antarktika/Davis"
-#: ../calendar/zones.h:180
+#: calendar/zones.h:180
msgid "Antarctica/DumontDUrville"
msgstr "Antarktika/DumontDUrville"
-#: ../calendar/zones.h:181
+#: calendar/zones.h:181
msgid "Antarctica/Mawson"
msgstr "Antarktika/Mawson"
-#: ../calendar/zones.h:182
+#: calendar/zones.h:182
msgid "Antarctica/McMurdo"
msgstr "Antarktika/McMurdo"
-#: ../calendar/zones.h:183
+#: calendar/zones.h:183
msgid "Antarctica/Palmer"
msgstr "Antarktika/Palmer"
-#: ../calendar/zones.h:184
+#: calendar/zones.h:184
msgid "Antarctica/South_Pole"
msgstr "Antarktika/Poli_Jugor"
-#: ../calendar/zones.h:185
+#: calendar/zones.h:185
msgid "Antarctica/Syowa"
msgstr "Antarktika/Syowa"
-#: ../calendar/zones.h:186
+#: calendar/zones.h:186
msgid "Antarctica/Vostok"
msgstr "Antarktika/Vostok"
-#: ../calendar/zones.h:187
+#: calendar/zones.h:187
msgid "Arctic/Longyearbyen"
msgstr "Arktika/Longyearbyen"
-#: ../calendar/zones.h:188
+#: calendar/zones.h:188
msgid "Asia/Aden"
msgstr "Azia/Aden"
-#: ../calendar/zones.h:189
+#: calendar/zones.h:189
msgid "Asia/Almaty"
msgstr "Azia/Almaty"
-#: ../calendar/zones.h:190
+#: calendar/zones.h:190
msgid "Asia/Amman"
msgstr "Azia/Aman"
-#: ../calendar/zones.h:191
+#: calendar/zones.h:191
msgid "Asia/Anadyr"
msgstr "Azia/Anadyr"
-#: ../calendar/zones.h:192
+#: calendar/zones.h:192
msgid "Asia/Aqtau"
msgstr "Azia/Aqtau"
-#: ../calendar/zones.h:193
+#: calendar/zones.h:193
msgid "Asia/Aqtobe"
msgstr "Azia/Aqtobe"
-#: ../calendar/zones.h:194
+#: calendar/zones.h:194
msgid "Asia/Ashgabat"
msgstr "Azia/Ashgabat"
-#: ../calendar/zones.h:195
+#: calendar/zones.h:195
msgid "Asia/Baghdad"
msgstr "Azia/Bagdad"
-#: ../calendar/zones.h:196
+#: calendar/zones.h:196
msgid "Asia/Bahrain"
msgstr "Azia/Bahrain"
-#: ../calendar/zones.h:197
+#: calendar/zones.h:197
msgid "Asia/Baku"
msgstr "Azia/Baku"
-#: ../calendar/zones.h:198
+#: calendar/zones.h:198
msgid "Asia/Bangkok"
msgstr "Azia/Bangkok"
-#: ../calendar/zones.h:199
+#: calendar/zones.h:199
msgid "Asia/Beirut"
msgstr "Azia/Beirut"
-#: ../calendar/zones.h:200
+#: calendar/zones.h:200
msgid "Asia/Bishkek"
msgstr "Azia/Bishkek"
-#: ../calendar/zones.h:201
+#: calendar/zones.h:201
msgid "Asia/Brunei"
msgstr "Azia/Brunei"
-#: ../calendar/zones.h:202
+#: calendar/zones.h:202
msgid "Asia/Calcutta"
msgstr "Azia/Kalkuta"
-#: ../calendar/zones.h:203
+#: calendar/zones.h:203
msgid "Asia/Choibalsan"
msgstr "Azia/Choibalsan"
-#: ../calendar/zones.h:204
+#: calendar/zones.h:204
msgid "Asia/Chongqing"
msgstr "Azia/Chongqing"
-#: ../calendar/zones.h:205
+#: calendar/zones.h:205
msgid "Asia/Colombo"
msgstr "Azia/Colombo"
-#: ../calendar/zones.h:206
+#: calendar/zones.h:206
msgid "Asia/Damascus"
msgstr "Azia/Damaskus"
-#: ../calendar/zones.h:207
+#: calendar/zones.h:207
msgid "Asia/Dhaka"
msgstr "Azia/Dhaka"
-#: ../calendar/zones.h:208
+#: calendar/zones.h:208
msgid "Asia/Dili"
msgstr "Azia/Dili"
-#: ../calendar/zones.h:209
+#: calendar/zones.h:209
msgid "Asia/Dubai"
msgstr "Azia/Dubai"
-#: ../calendar/zones.h:210
+#: calendar/zones.h:210
msgid "Asia/Dushanbe"
msgstr "Azia/Dushanbe"
-#: ../calendar/zones.h:211
+#: calendar/zones.h:211
msgid "Asia/Gaza"
msgstr "Azia/Gaza"
-#: ../calendar/zones.h:212
+#: calendar/zones.h:212
msgid "Asia/Harbin"
msgstr "Azia/Harbin"
-#: ../calendar/zones.h:213
+#: calendar/zones.h:213
msgid "Asia/Hong_Kong"
msgstr "Azia/Hong_Kong"
-#: ../calendar/zones.h:214
+#: calendar/zones.h:214
msgid "Asia/Hovd"
msgstr "Azia/Hovd"
-#: ../calendar/zones.h:215
+#: calendar/zones.h:215
msgid "Asia/Irkutsk"
msgstr "Azia/Irkutsk"
-#: ../calendar/zones.h:216
+#: calendar/zones.h:216
msgid "Asia/Istanbul"
msgstr "Azia/Istanbul"
-#: ../calendar/zones.h:217
+#: calendar/zones.h:217
msgid "Asia/Jakarta"
msgstr "Azia/Jakarta"
-#: ../calendar/zones.h:218
+#: calendar/zones.h:218
msgid "Asia/Jayapura"
msgstr "Azia/Jayapura"
-#: ../calendar/zones.h:219
+#: calendar/zones.h:219
msgid "Asia/Jerusalem"
msgstr "Azia/Jerusalem"
-#: ../calendar/zones.h:220
+#: calendar/zones.h:220
msgid "Asia/Kabul"
msgstr "Azia/Kabul"
-#: ../calendar/zones.h:221
+#: calendar/zones.h:221
msgid "Asia/Kamchatka"
msgstr "Azia/Kamchatka"
-#: ../calendar/zones.h:222
+#: calendar/zones.h:222
msgid "Asia/Karachi"
msgstr "Azia/Karachi"
-#: ../calendar/zones.h:223
+#: calendar/zones.h:223
msgid "Asia/Kashgar"
msgstr "Azia/Kashgar"
-#: ../calendar/zones.h:224
+#: calendar/zones.h:224
msgid "Asia/Katmandu"
msgstr "Azia/Katmandu"
-#: ../calendar/zones.h:225
+#: calendar/zones.h:225
msgid "Asia/Krasnoyarsk"
msgstr "Azia/Krasnoyarsk"
-#: ../calendar/zones.h:226
+#: calendar/zones.h:226
msgid "Asia/Kuala_Lumpur"
msgstr "Azia/Kuala_Lumpur"
-#: ../calendar/zones.h:227
+#: calendar/zones.h:227
msgid "Asia/Kuching"
msgstr "Azia/Kuching"
-#: ../calendar/zones.h:228
+#: calendar/zones.h:228
msgid "Asia/Kuwait"
msgstr "Azia/Kuwait"
-#: ../calendar/zones.h:229
+#: calendar/zones.h:229
msgid "Asia/Macao"
msgstr "Azia/Macao"
-#: ../calendar/zones.h:230
+#: calendar/zones.h:230
msgid "Asia/Macau"
msgstr "Azia/Macau"
-#: ../calendar/zones.h:231
+#: calendar/zones.h:231
msgid "Asia/Magadan"
msgstr "Azia/Magadan"
-#: ../calendar/zones.h:232
+#: calendar/zones.h:232
msgid "Asia/Makassar"
msgstr "Azia/Makassar"
-#: ../calendar/zones.h:233
+#: calendar/zones.h:233
msgid "Asia/Manila"
msgstr "Azia/Manila"
-#: ../calendar/zones.h:234
+#: calendar/zones.h:234
msgid "Asia/Muscat"
msgstr "Azia/Muscat"
-#: ../calendar/zones.h:235
+#: calendar/zones.h:235
msgid "Asia/Nicosia"
msgstr "Azia/Nicosia"
-#: ../calendar/zones.h:236
+#: calendar/zones.h:236
msgid "Asia/Novosibirsk"
msgstr "Azia/Novosibirsk"
-#: ../calendar/zones.h:237
+#: calendar/zones.h:237
msgid "Asia/Omsk"
msgstr "Azia/Omsk"
-#: ../calendar/zones.h:238
+#: calendar/zones.h:238
msgid "Asia/Oral"
msgstr "Azia/Oral"
-#: ../calendar/zones.h:239
+#: calendar/zones.h:239
msgid "Asia/Phnom_Penh"
msgstr "Azia/Phnom_Penh"
-#: ../calendar/zones.h:240
+#: calendar/zones.h:240
msgid "Asia/Pontianak"
msgstr "Azia/Pontianak"
-#: ../calendar/zones.h:241
+#: calendar/zones.h:241
msgid "Asia/Pyongyang"
msgstr "Azia/Pyongyang"
-#: ../calendar/zones.h:242
+#: calendar/zones.h:242
msgid "Asia/Qatar"
msgstr "Azia/Katar"
-#: ../calendar/zones.h:243
+#: calendar/zones.h:243
msgid "Asia/Qyzylorda"
msgstr "Azia/Qyzylorda"
-#: ../calendar/zones.h:244
+#: calendar/zones.h:244
msgid "Asia/Rangoon"
msgstr "Azia/Rangoon"
-#: ../calendar/zones.h:245
+#: calendar/zones.h:245
msgid "Asia/Riyadh"
msgstr "Azia/Riyad"
-#: ../calendar/zones.h:246
+#: calendar/zones.h:246
msgid "Asia/Saigon"
msgstr "Azia/Saigon"
-#: ../calendar/zones.h:247
+#: calendar/zones.h:247
msgid "Asia/Sakhalin"
msgstr "Azia/Sakhalin"
-#: ../calendar/zones.h:248
+#: calendar/zones.h:248
msgid "Asia/Samarkand"
msgstr "Azia/Samarkand"
-#: ../calendar/zones.h:249
+#: calendar/zones.h:249
msgid "Asia/Seoul"
msgstr "Azia/Seoul"
-#: ../calendar/zones.h:250
+#: calendar/zones.h:250
msgid "Asia/Shanghai"
msgstr "Azia/Shanghai"
-#: ../calendar/zones.h:251
+#: calendar/zones.h:251
msgid "Asia/Singapore"
msgstr "Azia/Singapore"
-#: ../calendar/zones.h:252
+#: calendar/zones.h:252
msgid "Asia/Taipei"
msgstr "Azia/Taipei"
-#: ../calendar/zones.h:253
+#: calendar/zones.h:253
msgid "Asia/Tashkent"
msgstr "Azia/Tashkent"
-#: ../calendar/zones.h:254
+#: calendar/zones.h:254
msgid "Asia/Tbilisi"
msgstr "Azia/Tbilisi"
-#: ../calendar/zones.h:255
+#: calendar/zones.h:255
msgid "Asia/Tehran"
msgstr "Azia/Teheran"
-#: ../calendar/zones.h:256
+#: calendar/zones.h:256
msgid "Asia/Thimphu"
msgstr "Azia/Thimphu"
-#: ../calendar/zones.h:257
+#: calendar/zones.h:257
msgid "Asia/Tokyo"
msgstr "Azia/Tokyo"
-#: ../calendar/zones.h:258
+#: calendar/zones.h:258
msgid "Asia/Ujung_Pandang"
msgstr "Azia/Ujung_Pandang"
-#: ../calendar/zones.h:259
+#: calendar/zones.h:259
msgid "Asia/Ulaanbaatar"
msgstr "Azia/Ulanbatar"
-#: ../calendar/zones.h:260
+#: calendar/zones.h:260
msgid "Asia/Urumqi"
msgstr "Azia/Urumqi"
-#: ../calendar/zones.h:261
+#: calendar/zones.h:261
msgid "Asia/Vientiane"
msgstr "Azia/Vientiane"
-#: ../calendar/zones.h:262
+#: calendar/zones.h:262
msgid "Asia/Vladivostok"
msgstr "Azia/Vladivostok"
-#: ../calendar/zones.h:263
+#: calendar/zones.h:263
msgid "Asia/Yakutsk"
msgstr "Azia/Yakutsk"
-#: ../calendar/zones.h:264
+#: calendar/zones.h:264
msgid "Asia/Yekaterinburg"
msgstr "Azia/Yekaterinburg"
-#: ../calendar/zones.h:265
+#: calendar/zones.h:265
msgid "Asia/Yerevan"
msgstr "Azia/Yerevan"
-#: ../calendar/zones.h:266
+#: calendar/zones.h:266
msgid "Atlantic/Azores"
msgstr "Atlantikë/Azores"
-#: ../calendar/zones.h:267
+#: calendar/zones.h:267
msgid "Atlantic/Bermuda"
msgstr "Antlantike/Bermuda"
-#: ../calendar/zones.h:268
+#: calendar/zones.h:268
msgid "Atlantic/Canary"
msgstr "Antlantike/Canary"
-#: ../calendar/zones.h:269
+#: calendar/zones.h:269
msgid "Atlantic/Cape_Verde"
msgstr "Antlantike/Cape_Verde"
-#: ../calendar/zones.h:270
+#: calendar/zones.h:270
msgid "Atlantic/Faeroe"
msgstr "Antlantike/Faeroe"
-#: ../calendar/zones.h:271
+#: calendar/zones.h:271
msgid "Atlantic/Jan_Mayen"
msgstr "Antlantike/Jan_Mayen"
-#: ../calendar/zones.h:272
+#: calendar/zones.h:272
msgid "Atlantic/Madeira"
msgstr "Antlantike/Madeira"
-#: ../calendar/zones.h:273
+#: calendar/zones.h:273
msgid "Atlantic/Reykjavik"
msgstr "Antlantike/Reykjavik"
-#: ../calendar/zones.h:274
+#: calendar/zones.h:274
msgid "Atlantic/South_Georgia"
msgstr "Antlantikë/Georgia_Jugore"
-#: ../calendar/zones.h:275
+#: calendar/zones.h:275
msgid "Atlantic/St_Helena"
msgstr "Antlantike/St_Helena"
-#: ../calendar/zones.h:276
+#: calendar/zones.h:276
msgid "Atlantic/Stanley"
msgstr "Antlantike/Stanley"
-#: ../calendar/zones.h:277
+#: calendar/zones.h:277
msgid "Australia/Adelaide"
msgstr "Australi/Adelaide"
-#: ../calendar/zones.h:278
+#: calendar/zones.h:278
msgid "Australia/Brisbane"
msgstr "Australi/Brisbane"
-#: ../calendar/zones.h:279
+#: calendar/zones.h:279
msgid "Australia/Broken_Hill"
msgstr "Australi/Broken_Hill"
-#: ../calendar/zones.h:280
+#: calendar/zones.h:280
msgid "Australia/Darwin"
msgstr "Australi/Darwin"
-#: ../calendar/zones.h:281
+#: calendar/zones.h:281
msgid "Australia/Hobart"
msgstr "Australi/Hobart"
-#: ../calendar/zones.h:282
+#: calendar/zones.h:282
msgid "Australia/Lindeman"
msgstr "Australi/Lindeman"
-#: ../calendar/zones.h:283
+#: calendar/zones.h:283
msgid "Australia/Lord_Howe"
msgstr "Australi/Lord_Howe"
-#: ../calendar/zones.h:284
+#: calendar/zones.h:284
msgid "Australia/Melbourne"
msgstr "Australi/Melbourne"
-#: ../calendar/zones.h:285
+#: calendar/zones.h:285
msgid "Australia/Perth"
msgstr "Australi/Perth"
-#: ../calendar/zones.h:286
+#: calendar/zones.h:286
msgid "Australia/Sydney"
msgstr "Australi/Sydney"
-#: ../calendar/zones.h:287
+#: calendar/zones.h:287
msgid "Europe/Amsterdam"
msgstr "Europë/Amsterdam"
-#: ../calendar/zones.h:288
+#: calendar/zones.h:288
msgid "Europe/Andorra"
msgstr "Europë/Andora"
-#: ../calendar/zones.h:289
+#: calendar/zones.h:289
msgid "Europe/Athens"
msgstr "Europë/Athina"
-#: ../calendar/zones.h:290
+#: calendar/zones.h:290
msgid "Europe/Belfast"
msgstr "Europë/Belfast"
-#: ../calendar/zones.h:291
+#: calendar/zones.h:291
msgid "Europe/Belgrade"
msgstr "Europë/Beograd"
-#: ../calendar/zones.h:292
+#: calendar/zones.h:292
msgid "Europe/Berlin"
msgstr "Europë/Berlin"
-#: ../calendar/zones.h:293
+#: calendar/zones.h:293
msgid "Europe/Bratislava"
msgstr "Europë/Bratisllava"
-#: ../calendar/zones.h:294
+#: calendar/zones.h:294
msgid "Europe/Brussels"
msgstr "Europë/Bruksel"
-#: ../calendar/zones.h:295
+#: calendar/zones.h:295
msgid "Europe/Bucharest"
msgstr "Europë/Bukuresht"
-#: ../calendar/zones.h:296
+#: calendar/zones.h:296
msgid "Europe/Budapest"
msgstr "Europë/Budapest"
-#: ../calendar/zones.h:297
+#: calendar/zones.h:297
msgid "Europe/Chisinau"
msgstr "Europë/Chisinau"
-#: ../calendar/zones.h:298
+#: calendar/zones.h:298
msgid "Europe/Copenhagen"
msgstr "Europë/Kopenhagen"
-#: ../calendar/zones.h:299
+#: calendar/zones.h:299
msgid "Europe/Dublin"
msgstr "Europë/Dublin"
-#: ../calendar/zones.h:300
+#: calendar/zones.h:300
msgid "Europe/Gibraltar"
msgstr "Europë/Gibraltar"
-#: ../calendar/zones.h:301
+#: calendar/zones.h:301
msgid "Europe/Helsinki"
msgstr "Europë/Helsinki"
-#: ../calendar/zones.h:302
+#: calendar/zones.h:302
msgid "Europe/Istanbul"
msgstr "Europë/Stamboll"
-#: ../calendar/zones.h:303
+#: calendar/zones.h:303
msgid "Europe/Kaliningrad"
msgstr "Europë/Kaliningrad"
-#: ../calendar/zones.h:304
+#: calendar/zones.h:304
msgid "Europe/Kiev"
msgstr "Europë/Kiev"
-#: ../calendar/zones.h:305
+#: calendar/zones.h:305
msgid "Europe/Lisbon"
msgstr "Europë/Lisbon"
-#: ../calendar/zones.h:306
+#: calendar/zones.h:306
msgid "Europe/Ljubljana"
msgstr "Europë/Ljubljana"
-#: ../calendar/zones.h:307
+#: calendar/zones.h:307
msgid "Europe/London"
msgstr "Europë/Londër"
-#: ../calendar/zones.h:308
+#: calendar/zones.h:308
msgid "Europe/Luxembourg"
msgstr "Europë/Luxembourg"
-#: ../calendar/zones.h:309
+#: calendar/zones.h:309
msgid "Europe/Madrid"
msgstr "Europë/Madrid"
-#: ../calendar/zones.h:310
+#: calendar/zones.h:310
msgid "Europe/Malta"
msgstr "Europë/Malta"
-#: ../calendar/zones.h:311
+#: calendar/zones.h:311
msgid "Europe/Minsk"
msgstr "Europë/Minsk"
-#: ../calendar/zones.h:312
+#: calendar/zones.h:312
msgid "Europe/Monaco"
msgstr "Europë/Monaco"
-#: ../calendar/zones.h:313
+#: calendar/zones.h:313
msgid "Europe/Moscow"
msgstr "Europë/Moska"
-#: ../calendar/zones.h:314
+#: calendar/zones.h:314
msgid "Europe/Nicosia"
msgstr "Europë/Nicosia"
-#: ../calendar/zones.h:315
+#: calendar/zones.h:315
msgid "Europe/Oslo"
msgstr "Europë/Oslo"
-#: ../calendar/zones.h:316
+#: calendar/zones.h:316
msgid "Europe/Paris"
msgstr "Europë/Paris"
-#: ../calendar/zones.h:317
+#: calendar/zones.h:317
msgid "Europe/Prague"
msgstr "Europë/Praga"
-#: ../calendar/zones.h:318
+#: calendar/zones.h:318
msgid "Europe/Riga"
msgstr "Europë/Riga"
-#: ../calendar/zones.h:319
+#: calendar/zones.h:319
msgid "Europe/Rome"
msgstr "Europë/Roma"
-#: ../calendar/zones.h:320
+#: calendar/zones.h:320
msgid "Europe/Samara"
msgstr "Europë/Samara"
-#: ../calendar/zones.h:321
+#: calendar/zones.h:321
msgid "Europe/San_Marino"
msgstr "Europë/San_Marino"
-#: ../calendar/zones.h:322
+#: calendar/zones.h:322
msgid "Europe/Sarajevo"
msgstr "Europë/Sarajevo"
-#: ../calendar/zones.h:323
+#: calendar/zones.h:323
msgid "Europe/Simferopol"
msgstr "Europë/Simferopol"
-#: ../calendar/zones.h:324
+#: calendar/zones.h:324
msgid "Europe/Skopje"
msgstr "Europë/Shkupi"
-#: ../calendar/zones.h:325
+#: calendar/zones.h:325
msgid "Europe/Sofia"
msgstr "Europë/Sofje"
-#: ../calendar/zones.h:326
+#: calendar/zones.h:326
msgid "Europe/Stockholm"
msgstr "Europë/Stokholm"
-#: ../calendar/zones.h:327
+#: calendar/zones.h:327
msgid "Europe/Tallinn"
msgstr "Europë/Tallinn"
-#: ../calendar/zones.h:328
+#: calendar/zones.h:328
msgid "Europe/Tirane"
msgstr "Europë/Tiranë"
-#: ../calendar/zones.h:329
+#: calendar/zones.h:329
msgid "Europe/Uzhgorod"
msgstr "Europë/Uzhgorod"
-#: ../calendar/zones.h:330
+#: calendar/zones.h:330
msgid "Europe/Vaduz"
msgstr "Europë/Vaduz"
-#: ../calendar/zones.h:331
+#: calendar/zones.h:331
msgid "Europe/Vatican"
msgstr "Europë/Vatikani"
-#: ../calendar/zones.h:332
+#: calendar/zones.h:332
msgid "Europe/Vienna"
msgstr "Europë/Vienë"
-#: ../calendar/zones.h:333
+#: calendar/zones.h:333
msgid "Europe/Vilnius"
msgstr "Europë/Vilnius"
-#: ../calendar/zones.h:334
+#: calendar/zones.h:334
msgid "Europe/Warsaw"
msgstr "Europë/Varshavë"
-#: ../calendar/zones.h:335
+#: calendar/zones.h:335
msgid "Europe/Zagreb"
msgstr "Europë/Zagreb"
-#: ../calendar/zones.h:336
+#: calendar/zones.h:336
msgid "Europe/Zaporozhye"
msgstr "Europë/Zaporozhje"
-#: ../calendar/zones.h:337
+#: calendar/zones.h:337
msgid "Europe/Zurich"
msgstr "Europë/Zurich"
-#: ../calendar/zones.h:338
+#: calendar/zones.h:338
msgid "Indian/Antananarivo"
msgstr "Indian/Antananarivo"
-#: ../calendar/zones.h:339
+#: calendar/zones.h:339
msgid "Indian/Chagos"
msgstr "Indian/Chagos"
-#: ../calendar/zones.h:340
+#: calendar/zones.h:340
msgid "Indian/Christmas"
msgstr "Indian/Christmas"
-#: ../calendar/zones.h:341
+#: calendar/zones.h:341
msgid "Indian/Cocos"
msgstr "Indian/Cocos"
-#: ../calendar/zones.h:342
+#: calendar/zones.h:342
msgid "Indian/Comoro"
msgstr "Indian/Comoro"
-#: ../calendar/zones.h:343
+#: calendar/zones.h:343
msgid "Indian/Kerguelen"
msgstr "Indian/Kerguelen"
-#: ../calendar/zones.h:344
+#: calendar/zones.h:344
msgid "Indian/Mahe"
msgstr "Indian/Mahe"
-#: ../calendar/zones.h:345
+#: calendar/zones.h:345
msgid "Indian/Maldives"
msgstr "Indian/Maldives"
-#: ../calendar/zones.h:346
+#: calendar/zones.h:346
msgid "Indian/Mauritius"
msgstr "Indian/Mauritius"
-#: ../calendar/zones.h:347
+#: calendar/zones.h:347
msgid "Indian/Mayotte"
msgstr "Indian/Mayotte"
-#: ../calendar/zones.h:348
+#: calendar/zones.h:348
msgid "Indian/Reunion"
msgstr "Indian/Reunion"
-#: ../calendar/zones.h:349
+#: calendar/zones.h:349
msgid "Pacific/Apia"
msgstr "Paqësor/Apia"
-#: ../calendar/zones.h:350
+#: calendar/zones.h:350
msgid "Pacific/Auckland"
msgstr "Paqësor/Auckland"
-#: ../calendar/zones.h:351
+#: calendar/zones.h:351
msgid "Pacific/Chatham"
msgstr "Paqësor/Chatham"
-#: ../calendar/zones.h:352
+#: calendar/zones.h:352
msgid "Pacific/Easter"
msgstr "Paqësor/Easter"
-#: ../calendar/zones.h:353
+#: calendar/zones.h:353
msgid "Pacific/Efate"
msgstr "Paqësor/Efate"
-#: ../calendar/zones.h:354
+#: calendar/zones.h:354
msgid "Pacific/Enderbury"
msgstr "Paqësor/Enderbury"
-#: ../calendar/zones.h:355
+#: calendar/zones.h:355
msgid "Pacific/Fakaofo"
msgstr "Paqësor/Fakaofo"
-#: ../calendar/zones.h:356
+#: calendar/zones.h:356
msgid "Pacific/Fiji"
msgstr "Paqësor/Fiji"
-#: ../calendar/zones.h:357
+#: calendar/zones.h:357
msgid "Pacific/Funafuti"
msgstr "Paqësor/Funafuti"
-#: ../calendar/zones.h:358
+#: calendar/zones.h:358
msgid "Pacific/Galapagos"
msgstr "Paqësor/Galapagos"
-#: ../calendar/zones.h:359
+#: calendar/zones.h:359
msgid "Pacific/Gambier"
msgstr "Paqësor/Gambier"
-#: ../calendar/zones.h:360
+#: calendar/zones.h:360
msgid "Pacific/Guadalcanal"
msgstr "Paqësor/Guadalcanal"
-#: ../calendar/zones.h:361
+#: calendar/zones.h:361
msgid "Pacific/Guam"
msgstr "Paqësor/Guam"
-#: ../calendar/zones.h:362
+#: calendar/zones.h:362
msgid "Pacific/Honolulu"
msgstr "Paqësor/Honolulu"
-#: ../calendar/zones.h:363
+#: calendar/zones.h:363
msgid "Pacific/Johnston"
msgstr "Paqësor/Johnston"
-#: ../calendar/zones.h:364
+#: calendar/zones.h:364
msgid "Pacific/Kiritimati"
msgstr "Paqësor/Kiritimati"
-#: ../calendar/zones.h:365
+#: calendar/zones.h:365
msgid "Pacific/Kosrae"
msgstr "Paqësor/Kosrae"
-#: ../calendar/zones.h:366
+#: calendar/zones.h:366
msgid "Pacific/Kwajalein"
msgstr "Paqësor/Kwajalein"
-#: ../calendar/zones.h:367
+#: calendar/zones.h:367
msgid "Pacific/Majuro"
msgstr "Paqësor/Majuro"
-#: ../calendar/zones.h:368
+#: calendar/zones.h:368
msgid "Pacific/Marquesas"
msgstr "Paqësor/Marquesas"
-#: ../calendar/zones.h:369
+#: calendar/zones.h:369
msgid "Pacific/Midway"
msgstr "Paqësor/Midway"
-#: ../calendar/zones.h:370
+#: calendar/zones.h:370
msgid "Pacific/Nauru"
msgstr "Paqësor/Nauru"
-#: ../calendar/zones.h:371
+#: calendar/zones.h:371
msgid "Pacific/Niue"
msgstr "Paqësor/Niue"
-#: ../calendar/zones.h:372
+#: calendar/zones.h:372
msgid "Pacific/Norfolk"
msgstr "Paqësor/Norfolk"
-#: ../calendar/zones.h:373
+#: calendar/zones.h:373
msgid "Pacific/Noumea"
msgstr "Paqësor/Noumea"
-#: ../calendar/zones.h:374
+#: calendar/zones.h:374
msgid "Pacific/Pago_Pago"
msgstr "Paqësor/Pago_Pago"
-#: ../calendar/zones.h:375
+#: calendar/zones.h:375
msgid "Pacific/Palau"
msgstr "Paqësor/Palau"
-#: ../calendar/zones.h:376
+#: calendar/zones.h:376
msgid "Pacific/Pitcairn"
msgstr "Paqësor/Pitcairn"
-#: ../calendar/zones.h:377
+#: calendar/zones.h:377
msgid "Pacific/Ponape"
msgstr "Paqësor/Ponape"
-#: ../calendar/zones.h:378
+#: calendar/zones.h:378
msgid "Pacific/Port_Moresby"
msgstr "Paqësor/Port_Moresby"
-#: ../calendar/zones.h:379
+#: calendar/zones.h:379
msgid "Pacific/Rarotonga"
msgstr "Paqësor/Rarotonga"
-#: ../calendar/zones.h:380
+#: calendar/zones.h:380
msgid "Pacific/Saipan"
msgstr "Paqësor/Saipan"
-#: ../calendar/zones.h:381
+#: calendar/zones.h:381
msgid "Pacific/Tahiti"
msgstr "Paqësor/Tahiti"
-#: ../calendar/zones.h:382
+#: calendar/zones.h:382
msgid "Pacific/Tarawa"
msgstr "Paqësor/Tarawa"
-#: ../calendar/zones.h:383
+#: calendar/zones.h:383
msgid "Pacific/Tongatapu"
msgstr "Paqësor/Tongatapu"
-#: ../calendar/zones.h:384
+#: calendar/zones.h:384
msgid "Pacific/Truk"
msgstr "Paqësor/Truk"
-#: ../calendar/zones.h:385
+#: calendar/zones.h:385
msgid "Pacific/Wake"
msgstr "Paqësor/Wake"
-#: ../calendar/zones.h:386
+#: calendar/zones.h:386
msgid "Pacific/Wallis"
msgstr "Paqësor/Wallis"
-#: ../calendar/zones.h:387
+#: calendar/zones.h:387
msgid "Pacific/Yap"
msgstr "Paqësor/Yap"
-#: ../composer/e-msg-composer-hdrs.c:519
+#: composer/e-msg-composer-hdrs.c:519
msgid "Posting destination"
msgstr "Marrësi"
-#: ../composer/e-msg-composer-hdrs.c:520
+#: composer/e-msg-composer-hdrs.c:520
msgid "Choose folders to post the message to."
msgstr "Zgjidh kartelat për t'u dërguar mesazhin."
-#: ../composer/e-msg-composer-hdrs.c:554
+#: composer/e-msg-composer-hdrs.c:554
msgid "Click here for the address book"
msgstr "Kliko këtu për rubrikën"
@@ -9514,45 +9448,45 @@ msgstr "Kliko këtu për rubrikën"
#. * because that causes from_changed to be called, which
#. * expects the reply_to fields to be initialized.
#.
-#: ../composer/e-msg-composer-hdrs.c:584
+#: composer/e-msg-composer-hdrs.c:584
msgid "_Reply-To:"
msgstr "_Përgjigju-Tek:"
#.
#. * From
#.
-#: ../composer/e-msg-composer-hdrs.c:591
+#: composer/e-msg-composer-hdrs.c:591
msgid "Fr_om:"
msgstr "_Nga:"
#.
#. * Subject
#.
-#: ../composer/e-msg-composer-hdrs.c:598
+#: composer/e-msg-composer-hdrs.c:598
msgid "S_ubject:"
msgstr "S_ubjekti:"
-#: ../composer/e-msg-composer-hdrs.c:608
+#: composer/e-msg-composer-hdrs.c:608
msgid "_To:"
msgstr "_Për:"
-#: ../composer/e-msg-composer-hdrs.c:609
+#: composer/e-msg-composer-hdrs.c:609
msgid "Enter the recipients of the message"
msgstr "Shkruaj marrësit e mesazhit"
-#: ../composer/e-msg-composer-hdrs.c:612
+#: composer/e-msg-composer-hdrs.c:612
msgid "_Cc:"
msgstr "_Cc:"
-#: ../composer/e-msg-composer-hdrs.c:613
+#: composer/e-msg-composer-hdrs.c:613
msgid "Enter the addresses that will receive a carbon copy of the message"
msgstr "Shkruaj adresat që kanë për të marrë një kopje konforme të mesazhit"
-#: ../composer/e-msg-composer-hdrs.c:616
+#: composer/e-msg-composer-hdrs.c:616
msgid "_Bcc:"
msgstr "_Bcc:"
-#: ../composer/e-msg-composer-hdrs.c:617
+#: composer/e-msg-composer-hdrs.c:617
msgid ""
"Enter the addresses that will receive a carbon copy of the message without "
"appearing in the recipient list of the message."
@@ -9563,25 +9497,25 @@ msgstr ""
#.
#. * Post-To
#.
-#: ../composer/e-msg-composer-hdrs.c:624
+#: composer/e-msg-composer-hdrs.c:624
msgid "_Post To:"
msgstr "_Dërgo Tek:"
-#: ../composer/e-msg-composer-hdrs.c:629
+#: composer/e-msg-composer-hdrs.c:629
msgid "Click here to select folders to post to"
msgstr "Kliko këtu për të zgjedhur kartelat ku duhet dërguar"
-#: ../composer/e-msg-composer-hdrs.c:635
+#: composer/e-msg-composer-hdrs.c:635
msgid "Post To:"
msgstr "Dërgo Tek:"
-#: ../composer/e-msg-composer.c:730
+#: composer/e-msg-composer.c:730
msgid "Cannot sign outgoing message: No signing certificate set for this account"
msgstr ""
"E pamundur firmosja e mesazhit në dalje: Nuk është përcaktuar asnjë "
"çertifikatë firme për këtë llogari"
-#: ../composer/e-msg-composer.c:737
+#: composer/e-msg-composer.c:737
msgid ""
"Cannot encrypt outgoing message: No encryption certificate set for this "
"account"
@@ -9589,42 +9523,42 @@ msgstr ""
"I pamundur kriptimi i mesazhit në dalje: Nuk është përcaktuar asnjë "
"çertifikatë kriptimi për këtë llogari"
-#: ../composer/e-msg-composer.c:1222 ../composer/e-msg-composer.c:1255
+#: composer/e-msg-composer.c:1222 composer/e-msg-composer.c:1255
msgid "Unknown reason"
msgstr "Arsye e panjohur"
-#: ../composer/e-msg-composer.c:1292
+#: composer/e-msg-composer.c:1292
msgid "Could not open file"
msgstr "E pamundur hapja e file"
-#: ../composer/e-msg-composer.c:1300
+#: composer/e-msg-composer.c:1300
msgid "Unable to retrieve message from editor"
msgstr "I pamundur shkarkimi i mesazhit nga editori"
-#: ../composer/e-msg-composer.c:1570
+#: composer/e-msg-composer.c:1570
msgid "Untitled Message"
msgstr "Mesazh pa titull"
#. NB: This function is never used anymore
-#: ../composer/e-msg-composer.c:1604
+#: composer/e-msg-composer.c:1604
msgid "Open File"
msgstr "Hap file"
-#: ../composer/e-msg-composer.c:2001 ../mail/em-account-editor.c:588
-#: ../mail/em-account-editor.c:633 ../mail/em-account-editor.c:700
+#: composer/e-msg-composer.c:2001 mail/em-account-editor.c:588
+#: mail/em-account-editor.c:633 mail/em-account-editor.c:700
msgid "Autogenerated"
msgstr "I auto krijuar"
-#: ../composer/e-msg-composer.c:2100
+#: composer/e-msg-composer.c:2100
msgid "Si_gnature:"
msgstr "Fi_rma:"
-#: ../composer/e-msg-composer.c:2359 ../composer/e-msg-composer.c:3360
-#: ../composer/e-msg-composer.c:3361
+#: composer/e-msg-composer.c:2359 composer/e-msg-composer.c:3360
+#: composer/e-msg-composer.c:3361
msgid "Compose a message"
msgstr "Kompozo një mesazh"
-#: ../composer/e-msg-composer.c:4542
+#: composer/e-msg-composer.c:4542
msgid ""
"<b>(The composer contains a non-text message body, which cannot be edited.)"
"<b>"
@@ -9633,24 +9567,24 @@ msgstr ""
"ndryshohet.)</b>"
#. mail-composer:no-attach primary
-#: ../composer/mail-composer-errors.xml.h:2
+#: composer/mail-composer-errors.xml.h:2
msgid "You cannot attach the file `{0}' to this message."
msgstr "Nuk mund t'i bashkangjitni file `{o}' këtij mesazhi."
#. mail-composer:attach-notfile primary
-#: ../composer/mail-composer-errors.xml.h:6
+#: composer/mail-composer-errors.xml.h:6
msgid "The file `{0}' is not a regular file and cannot be sent in a message."
msgstr ""
"File `{0}' nuk është një file i rregullt dhe nuk mund të dërgohet në një "
"mesazh."
#. mail-composer:attach-directory primary
-#: ../composer/mail-composer-errors.xml.h:8
+#: composer/mail-composer-errors.xml.h:8
msgid "Directories can not be attached to Messages."
msgstr "Directories nuk mund t'i bashkangjiten mesazhit."
#. mail-composer:attach-directory secondary
-#: ../composer/mail-composer-errors.xml.h:10
+#: 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."
@@ -9660,7 +9594,7 @@ msgstr ""
"bashkangjite atë."
#. mail-composer:attach-nomessages primary
-#: ../composer/mail-composer-errors.xml.h:12
+#: composer/mail-composer-errors.xml.h:12
msgid "Could not retrieve messages to attach from {0}."
msgstr "E pamundur marrja e mesazheve për t'u bashkangjitur nga {0}."
@@ -9670,25 +9604,25 @@ msgstr "E pamundur marrja e mesazheve për t'u bashkangjitur nga {0}."
#. 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:105
-#: ../mail/mail-errors.xml.h:117 ../widgets/misc/e-system-errors.xml.h:11
-#: ../widgets/misc/e-system-errors.xml.h:15
+#: composer/mail-composer-errors.xml.h:14
+#: composer/mail-composer-errors.xml.h:42 mail/mail-errors.xml.h:105
+#: mail/mail-errors.xml.h:117 widgets/misc/e-system-errors.xml.h:11
+#: widgets/misc/e-system-errors.xml.h:15
msgid "Because \"{1}\"."
msgstr "Sepse \"{1}\"."
#. mail-composer:recover-autosave title
-#: ../composer/mail-composer-errors.xml.h:16
+#: composer/mail-composer-errors.xml.h:16
msgid "Unfinished messages found"
msgstr "U gjetën mesazhe jo të plotë"
#. mail-composer:recover-autosave primary
-#: ../composer/mail-composer-errors.xml.h:18
+#: composer/mail-composer-errors.xml.h:18
msgid "Do you want to recover unfinished messages?"
msgstr "Dëshiron të rekuperosh mesazhet jo të plotë?"
#. mail-composer:recover-autosave secondary
-#: ../composer/mail-composer-errors.xml.h:20
+#: 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."
@@ -9697,31 +9631,31 @@ msgstr ""
"Duke rikoveruar mesazhin do të keni mundësi të vazhdoni shkrimin nga pika e "
"ndërprerjes."
-#: ../composer/mail-composer-errors.xml.h:21
+#: composer/mail-composer-errors.xml.h:21
msgid "Don't Recover"
msgstr "Mos rekupero"
-#: ../composer/mail-composer-errors.xml.h:22
+#: composer/mail-composer-errors.xml.h:22
msgid "Recover"
msgstr "Rekupero"
#. mail-composer:no-autosave primary
-#: ../composer/mail-composer-errors.xml.h:24
+#: composer/mail-composer-errors.xml.h:24
msgid "Could not save to autosave file \"{0}\"."
msgstr "E pamundur ruajtja tek file i autoruajtshëm \"{0}\"."
#. mail-composer:no-autosave secondary
-#: ../composer/mail-composer-errors.xml.h:26
+#: composer/mail-composer-errors.xml.h:26
msgid "Error saving to autosave because \"{1}\"."
msgstr "Gabim gjatë ruajtjes tek file i autoruajtshëm sepse \"{1}\"."
#. mail-composer:exit-unsaved title
-#: ../composer/mail-composer-errors.xml.h:28
+#: composer/mail-composer-errors.xml.h:28
msgid "Warning: Modified Message"
msgstr "Kujdes: Mesazh i ndryshuar"
#. mail-composer:exit-unsaved primary
-#: ../composer/mail-composer-errors.xml.h:30
+#: composer/mail-composer-errors.xml.h:30
msgid ""
"Are you sure you want to discard the message, titled '{0}', you are "
"composing?"
@@ -9730,7 +9664,7 @@ msgstr ""
"hartuar?"
#. mail-composer:exit-unsaved secondary
-#: ../composer/mail-composer-errors.xml.h:32
+#: 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 "
@@ -9740,53 +9674,53 @@ msgstr ""
"është mirë t'a ruani mesazhin tek kartela juaj e Kopjeve. Kjo do t'ju japë "
"mundësinë t'a vazhdoni mesazhin një herë tjetër."
-#: ../composer/mail-composer-errors.xml.h:33
+#: composer/mail-composer-errors.xml.h:33
msgid "_Discard Changes"
msgstr "_Anullo ndryshimet"
-#: ../composer/mail-composer-errors.xml.h:34
+#: composer/mail-composer-errors.xml.h:34
msgid "_Save Message"
msgstr "_Ruaj mesazhin"
#. mail-composer:no-build-message primary
-#: ../composer/mail-composer-errors.xml.h:36
+#: composer/mail-composer-errors.xml.h:36
msgid "Could not create message."
msgstr "I pamundur krijimi i mesazhit."
#. mail-composer:no-build-message secondary
-#: ../composer/mail-composer-errors.xml.h:38
+#: composer/mail-composer-errors.xml.h:38
msgid "Because \"{0}\", you may need to select different mail options."
msgstr "Për arsye \"{0}\", ndoshta do t'ju duhet të zgjidhni opcione të tjera mail."
#. mail-composer:no-sig-file primary
-#: ../composer/mail-composer-errors.xml.h:40
+#: composer/mail-composer-errors.xml.h:40
msgid "Could not read signature file \"{0}\"."
msgstr "I pamundur leximi i file me firmën \"{0}\"."
#. mail-composer:all-accounts-deleted primary
-#: ../composer/mail-composer-errors.xml.h:44
+#: composer/mail-composer-errors.xml.h:44
msgid "All accounts have been removed."
msgstr "Të gjitha llogaritë u eleminuan."
#. mail-composer:all-accounts-deleted secondary
-#: ../composer/mail-composer-errors.xml.h:46
+#: composer/mail-composer-errors.xml.h:46
msgid "You need to configure an account before you can compose mail."
msgstr "Para se të mund të kompozoni një mesazh duhet të konfiguroni një llogari."
#. 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
+#: composer/mail-composer-errors.xml.h:48
+#: composer/mail-composer-errors.xml.h:52
msgid "Could not create composer window."
msgstr "I pamundur krijimi i dritares së shkrimit të mesazhit."
#. mail-composer:no-address-control secondary
-#: ../composer/mail-composer-errors.xml.h:50
+#: composer/mail-composer-errors.xml.h:50
msgid "Unable to activate the address selector control."
msgstr "I pamundur aktivimi i kontrollit të zgjedhësit së adresës."
#. mail-composer:no-editor-control secondary
-#: ../composer/mail-composer-errors.xml.h:54
+#: composer/mail-composer-errors.xml.h:54
msgid ""
"Unable to activate the HTML editor control.\n"
"\n"
@@ -9796,23 +9730,23 @@ msgstr ""
"I pamundur aktivimi i kontrollit të editorit HTML.\n"
"Sigurohu që keni instaluar versionin korrekt të gtkhtm dhe të libgtkhtm."
-#: ../data/evolution.desktop.in.in.h:1 ../shell/main.c:521
+#: data/evolution.desktop.in.in.h:1 shell/main.c:521
msgid "Evolution"
msgstr "Evolution"
-#: ../data/evolution.desktop.in.in.h:2
+#: data/evolution.desktop.in.in.h:2
msgid "The Evolution Groupware Suite"
msgstr "Suite Groupware e Evolution."
-#: ../data/evolution.keys.in.in.h:1
+#: data/evolution.keys.in.in.h:1
msgid "address card"
msgstr "skedari i adresës"
-#: ../data/evolution.keys.in.in.h:2
+#: data/evolution.keys.in.in.h:2
msgid "calendar information"
msgstr "informacionet e kalendarit"
-#: ../designs/OOA/ooa.glade.h:1
+#: designs/OOA/ooa.glade.h:1
msgid ""
"<b>Currently, your status is \"Out of the Office\". </b>\n"
"\n"
@@ -9822,15 +9756,15 @@ msgstr ""
"\n"
"Dëshironi të ndryshoni gjendjen tuaj në \"Në Zyrë\"? "
-#: ../designs/OOA/ooa.glade.h:4
+#: designs/OOA/ooa.glade.h:4
msgid "<b>Out of Office Message:</b>"
msgstr "<b>Mesazhi i Jashtë Zyre:</b>"
-#: ../designs/OOA/ooa.glade.h:5
+#: designs/OOA/ooa.glade.h:5
msgid "<b>Status:</b>"
msgstr "<b>Gjendja:</b>"
-#: ../designs/OOA/ooa.glade.h:6
+#: designs/OOA/ooa.glade.h:6
msgid ""
"<small>The message specified below will be automatically sent to each person "
"who sends\n"
@@ -9840,39 +9774,39 @@ msgstr ""
"personi që ju\n"
"dërgon mail kur ju jeni jashtë zyre.</small>"
-#: ../designs/OOA/ooa.glade.h:8
+#: designs/OOA/ooa.glade.h:8
msgid "I am currently in the office"
msgstr "Aktualisht ndodhem në zyrë"
-#: ../designs/OOA/ooa.glade.h:9
+#: designs/OOA/ooa.glade.h:9
msgid "I am currently out of the office"
msgstr "Për momentin jam jashtë zyre"
-#: ../designs/OOA/ooa.glade.h:10
+#: designs/OOA/ooa.glade.h:10
msgid "No, Don't Change Status"
msgstr "Jo, mos e ndrysho gjendjen"
-#: ../designs/OOA/ooa.glade.h:12
+#: designs/OOA/ooa.glade.h:12
msgid "Out of Office Assistant"
msgstr "Asistenti i \"Jashtë Zyre\""
-#: ../designs/OOA/ooa.glade.h:13
+#: designs/OOA/ooa.glade.h:13
msgid "Yes, Change Status"
msgstr "Po, ndryshoje gjendjen"
-#: ../designs/read_receipts/read.glade.h:1
+#: designs/read_receipts/read.glade.h:1
msgid " "
msgstr " "
-#: ../designs/read_receipts/read.glade.h:2
+#: designs/read_receipts/read.glade.h:2
msgid "<b>Receiving Email</b>"
msgstr "<b>Duke marrë Email</b>"
-#: ../designs/read_receipts/read.glade.h:3
+#: designs/read_receipts/read.glade.h:3
msgid "<b>Sending Email:</b>"
msgstr "<b>Duke dërguar Email:</b>"
-#: ../designs/read_receipts/read.glade.h:4
+#: 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"
@@ -9884,37 +9818,37 @@ msgstr ""
"mesazh që keni dërguar është lexuar, dhe të specifikoni se si duhet të "
"veprojë Evolution kur dikush kërkon ricevutë prej jush</small>"
-#: ../designs/read_receipts/read.glade.h:6
+#: designs/read_receipts/read.glade.h:6
msgid "Always send back a read reciept"
msgstr "Kthe gjithmonë një ricevutë leximi"
-#: ../designs/read_receipts/read.glade.h:7
+#: designs/read_receipts/read.glade.h:7
msgid "Ask me if I want to send back a read receipt"
msgstr "Pyet nëse unë dua të dërgoj një ricevutë leximi"
-#: ../designs/read_receipts/read.glade.h:8
+#: designs/read_receipts/read.glade.h:8
msgid "Never send back a read receipt"
msgstr "Mos dërgo asnjëherë ricevutë leximi"
-#: ../designs/read_receipts/read.glade.h:9
+#: designs/read_receipts/read.glade.h:9
msgid "Read Receipts"
msgstr "Lexo ricevutat"
-#: ../designs/read_receipts/read.glade.h:10
+#: designs/read_receipts/read.glade.h:10
msgid "Request a read receipt for all messages I send"
msgstr "Kërko një ricevutë leximi për të gjithë mesazhet që dërgoj"
-#: ../designs/read_receipts/read.glade.h:11
+#: designs/read_receipts/read.glade.h:11
msgid "Unless the message is sent to a mailing list, and not to me personally"
msgstr "Përveç kur mesazhi i është dërguar një mailing list, dhe jo mua personalisht"
-#: ../designs/read_receipts/read.glade.h:12
+#: designs/read_receipts/read.glade.h:12
msgid ""
"When you receive an email with a read receipt request, what should Evolution "
"do?"
msgstr "Kur ju arrin një mesazh me kërkesë ricevute, si duhet të veprojë Evolution?"
-#: ../e-util/e-dialog-utils.c:267
+#: e-util/e-dialog-utils.c:267
msgid ""
"A file by that name already exists.\n"
"Overwrite it?"
@@ -9923,7 +9857,7 @@ msgstr ""
"Mbishkruan?"
#. system:ask-save-file-exists-overwrite title
-#: ../e-util/e-dialog-utils.c:269 ../widgets/misc/e-system-errors.xml.h:2
+#: e-util/e-dialog-utils.c:269 widgets/misc/e-system-errors.xml.h:2
msgid "Overwrite file?"
msgstr "Mbishkruaj file?"
@@ -9931,7 +9865,7 @@ msgstr "Mbishkruaj file?"
#. 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
+#: e-util/e-time-utils.c:185 e-util/e-time-utils.c:398
msgid "%a %m/%d/%Y %I:%M %p"
msgstr "%a %m/%d/%Y %I:%M %p"
@@ -9939,65 +9873,65 @@ msgstr "%a %m/%d/%Y %I:%M %p"
#. 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
+#: e-util/e-time-utils.c:190 e-util/e-time-utils.c:389
msgid "%a %m/%d/%Y %H:%M"
msgstr "%a %m/%d/%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
+#: e-util/e-time-utils.c:195
msgid "%a %m/%d/%Y %I %p"
msgstr "%a %m/%d/%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
+#: e-util/e-time-utils.c:200
msgid "%a %m/%d/%Y %H"
msgstr "%a %m/%d/%Y %H"
#. strptime format of a date and a time, in 12-hour format.
-#: ../e-util/e-time-utils.c:211
+#: e-util/e-time-utils.c:211
msgid "%m/%d/%Y %I:%M:%S %p"
msgstr "%m/%d/%Y %I:%M:%S %p"
#. strptime format of a date and a time, in 24-hour format.
-#: ../e-util/e-time-utils.c:215
+#: e-util/e-time-utils.c:215
msgid "%m/%d/%Y %H:%M:%S"
msgstr "%m/%d/%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
+#: e-util/e-time-utils.c:220
msgid "%m/%d/%Y %I:%M %p"
msgstr "%m/%d/%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
+#: e-util/e-time-utils.c:225
msgid "%m/%d/%Y %H:%M"
msgstr "%m/%d/%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
+#: e-util/e-time-utils.c:230
msgid "%m/%d/%Y %I %p"
msgstr "%m/%d/%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
+#: e-util/e-time-utils.c:235
msgid "%m/%d/%Y %H"
msgstr "%m/%d/%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
+#: 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
+#: e-util/e-time-utils.c:343 e-util/e-time-utils.c:430
msgid "%H:%M:%S"
msgstr "%H:%M:%S"
@@ -10006,8 +9940,8 @@ msgstr "%H:%M:%S"
#. 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:1431 ../widgets/misc/e-dateedit.c:1697
+#: e-util/e-time-utils.c:348 e-util/e-time-utils.c:435
+#: widgets/misc/e-dateedit.c:1431 widgets/misc/e-dateedit.c:1697
msgid "%I:%M %p"
msgstr "%I:%M %p"
@@ -10015,226 +9949,225 @@ msgstr "%I:%M %p"
#. 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:1428 ../widgets/misc/e-dateedit.c:1694
+#: e-util/e-time-utils.c:352 e-util/e-time-utils.c:427
+#: widgets/misc/e-dateedit.c:1428 widgets/misc/e-dateedit.c:1694
msgid "%H:%M"
msgstr "%H:%M"
#. strptime format for hour and AM/PM, 12-hour format.
-#: ../e-util/e-time-utils.c:356
+#: e-util/e-time-utils.c:356
msgid "%I %p"
msgstr "%I %p"
-#: ../e-util/eggtrayicon.c:119
+#: e-util/eggtrayicon.c:119
msgid "The orientation of the tray."
msgstr "Orientimi i sirtarit."
-#: ../filter/filter-datespec.c:73
+#: filter/filter-datespec.c:73
#, c-format
msgid "1 second ago"
msgid_plural "%d seconds ago"
msgstr[0] "1 sekondë më parë"
msgstr[1] "%d sekonda më parë"
-#: ../filter/filter-datespec.c:74
+#: filter/filter-datespec.c:74
#, c-format
msgid "1 minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "1 minutë më parë"
msgstr[1] "%d minutë më parë"
-#: ../filter/filter-datespec.c:75
+#: filter/filter-datespec.c:75
#, c-format
msgid "1 hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d orë më parë"
msgstr[1] "1 orë më parë"
-#: ../filter/filter-datespec.c:76
+#: filter/filter-datespec.c:76
#, c-format
msgid "1 day ago"
msgid_plural "%d days ago"
msgstr[0] "%d ditë më parë"
msgstr[1] "1 ditë më parë"
-#: ../filter/filter-datespec.c:77
+#: filter/filter-datespec.c:77
#, c-format
msgid "1 week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d javë më parë"
msgstr[1] "1 javë më parë"
-#: ../filter/filter-datespec.c:78
+#: filter/filter-datespec.c:78
#, c-format
msgid "1 month ago"
msgid_plural "%d months ago"
msgstr[0] "%d muaj më parë"
msgstr[1] "1 muaj më parë"
-#: ../filter/filter-datespec.c:79
+#: filter/filter-datespec.c:79
#, c-format
msgid "1 year ago"
msgid_plural "%d years ago"
msgstr[0] "%d vite më parë"
msgstr[1] "1 vit më parë"
-#: ../filter/filter-datespec.c:280
+#: filter/filter-datespec.c:280
msgid "<click here to select a date>"
msgstr "<kliko këtu për të zgjedhur një datë>"
-#: ../filter/filter-datespec.c:283 ../filter/filter-datespec.c:294
+#: filter/filter-datespec.c:283 filter/filter-datespec.c:294
msgid "now"
msgstr "tani"
#. strftime for date filter display, only needs to show a day date (i.e. no time)
-#: ../filter/filter-datespec.c:290
+#: filter/filter-datespec.c:290
msgid "%d-%b-%Y"
msgstr "%d-%b-%Y"
-#: ../filter/filter-datespec.c:406
+#: filter/filter-datespec.c:406
msgid "Select a time to compare against"
msgstr "Zgjidh një orë për konfrontim"
#. filter:no-date primary
-#: ../filter/filter-errors.xml.h:2
+#: filter/filter-errors.xml.h:2
msgid "Missing date."
msgstr "Mungon data."
#. filter:no-date secondary
-#: ../filter/filter-errors.xml.h:4
+#: filter/filter-errors.xml.h:4
msgid "You must choose a date."
msgstr "Duhet të zgjedhësh një datë."
#. filter:no-file primary
-#: ../filter/filter-errors.xml.h:6
+#: filter/filter-errors.xml.h:6
msgid "Missing file name."
msgstr "Mungon emri i file."
#. filter:no-file secondary
#. filter:bad-file secondary
-#: ../filter/filter-errors.xml.h:8 ../filter/filter-errors.xml.h:12
+#: filter/filter-errors.xml.h:8 filter/filter-errors.xml.h:12
msgid "You must specify a file name."
msgstr "Duhet të specifikoni emrin e file."
#. filter:bad-file primary
-#: ../filter/filter-errors.xml.h:10
+#: filter/filter-errors.xml.h:10
msgid "File \"{0}\" does not exist or is not a regular file."
msgstr "File \"{0}\" nuk ekziston ose nuk është i rregullt."
#. filter:bad-regexp primary
-#: ../filter/filter-errors.xml.h:14
+#: filter/filter-errors.xml.h:14
msgid "Bad regular expression \"{0}\"."
msgstr "Shprehje e rregullt e pavlefshme \"{0}\"."
#. filter:bad-regexp secondary
-#: ../filter/filter-errors.xml.h:16
+#: filter/filter-errors.xml.h:16
msgid "Could not compile regular expression \"{1}\"."
msgstr "I pamundur kompilimi i shprehjes së rregullt \"{1}\"."
#. filter:no-name primary
#. mail:no-name-vfolder primary
-#: ../filter/filter-errors.xml.h:18 ../mail/mail-errors.xml.h:219
+#: filter/filter-errors.xml.h:18 mail/mail-errors.xml.h:219
msgid "Missing name."
msgstr "Mungon emri."
#. filter:no-name secondary
-#: ../filter/filter-errors.xml.h:20
+#: filter/filter-errors.xml.h:20
msgid "You must name this filter."
msgstr "Duhet t'i caktoni një emër këtij filtri."
#. filter:bad-name-notunique primary
-#: ../filter/filter-errors.xml.h:22
+#: filter/filter-errors.xml.h:22
msgid "Name \"{0}\" already used."
msgstr "Emri \"{0}\" është në përdorim."
#. filter:bad-name-notunique secondary
-#: ../filter/filter-errors.xml.h:24
+#: filter/filter-errors.xml.h:24
msgid "Please choose another name."
msgstr "Zgjidh një emër tjetër."
-#: ../filter/filter-file.c:288
+#: filter/filter-file.c:288
msgid "Choose a file"
msgstr "Zgjidh një file"
-#: ../filter/filter-label.c:121 ../mail/em-filter-i18n.h:26
-#: ../mail/em-migrate.c:1041 ../mail/mail-config.c:76
-#: ../mail/mail-config.glade.h:90
+#: filter/filter-label.c:121 mail/em-filter-i18n.h:26 mail/em-migrate.c:1041
+#: mail/mail-config.c:76 mail/mail-config.glade.h:90
msgid "Important"
msgstr "I rëndësishëm"
#. forest green
-#: ../filter/filter-label.c:124 ../mail/em-migrate.c:1044
-#: ../mail/mail-config.c:79 ../mail/mail-config.glade.h:140
+#: filter/filter-label.c:124 mail/em-migrate.c:1044 mail/mail-config.c:79
+#: mail/mail-config.glade.h:140
msgid "To Do"
msgstr "Për të bërë"
#. blue
-#: ../filter/filter-label.c:125 ../mail/em-migrate.c:1045
-#: ../mail/mail-config.c:80 ../mail/mail-config.glade.h:93
+#: filter/filter-label.c:125 mail/em-migrate.c:1045 mail/mail-config.c:80
+#: mail/mail-config.glade.h:93
msgid "Later"
msgstr "Më vonë"
-#: ../filter/filter-part.c:532 ../shell/GNOME_Evolution_Test.server.in.in.h:3
+#: filter/filter-part.c:532 shell/GNOME_Evolution_Test.server.in.in.h:3
msgid "Test"
msgstr "Prova"
-#: ../filter/filter-rule.c:790
+#: filter/filter-rule.c:790
msgid "_Rule name:"
msgstr "Emri i _rregullës:"
-#: ../filter/filter-rule.c:818
+#: filter/filter-rule.c:818
msgid "<b>If</b>"
msgstr "<b>Nëse</b>"
-#: ../filter/filter-rule.c:855
+#: filter/filter-rule.c:855
msgid "if all criteria are met"
msgstr "nëse të gjithë kushtet plotësohen"
-#: ../filter/filter-rule.c:855
+#: filter/filter-rule.c:855
msgid "if any criteria are met"
msgstr "nëse çdo kusht plotësohet"
-#: ../filter/filter-rule.c:857
+#: filter/filter-rule.c:857
msgid "Execute actions"
msgstr "Ekzekuto veprimet"
-#: ../filter/filter-rule.c:878
+#: filter/filter-rule.c:878
msgid "All related"
msgstr "Gjithçka që ka të bëjë"
-#: ../filter/filter-rule.c:878
+#: filter/filter-rule.c:878
msgid "Replies"
msgstr "Përgjigjet"
-#: ../filter/filter-rule.c:878
+#: filter/filter-rule.c:878
msgid "Replies and parents"
msgstr "Përgjigjet dhe prindërit"
-#: ../filter/filter-rule.c:880
+#: filter/filter-rule.c:880
msgid "Include threads"
msgstr "Përfshi diskutimet"
-#: ../filter/filter-rule.c:975 ../filter/filter.glade.h:3
+#: filter/filter-rule.c:975 filter/filter.glade.h:3
msgid "Incoming"
msgstr "Në ardhje"
-#: ../filter/filter-rule.c:975
+#: filter/filter-rule.c:975
msgid "Outgoing"
msgstr "Në dalje"
-#: ../filter/filter.glade.h:1
+#: filter/filter.glade.h:1
msgid "<b>_Filter Rules</b>"
msgstr "<b>Rregullat e _Filtrit</b>"
-#: ../filter/filter.glade.h:2
+#: filter/filter.glade.h:2
msgid "Compare against"
msgstr "Krahaso me njëri tjetrin"
-#: ../filter/filter.glade.h:4
+#: filter/filter.glade.h:4
msgid "Show filters for mail:"
msgstr "Shfaq filtrat për mesazhet:"
-#: ../filter/filter.glade.h:5
+#: filter/filter.glade.h:5
msgid ""
"The message's date will be compared against\n"
"12:00am of the date specified."
@@ -10242,7 +10175,7 @@ msgstr ""
"Data e mesazhit do të krahasohet me\n"
"12:00pd të datës së specifikuar."
-#: ../filter/filter.glade.h:7
+#: filter/filter.glade.h:7
msgid ""
"The message's date will be compared against\n"
"a time relative to when filtering occurs."
@@ -10250,7 +10183,7 @@ msgstr ""
"Data e mesazhit do të krahasohet me\n"
"orën relative kur përdoret filtri."
-#: ../filter/filter.glade.h:9
+#: filter/filter.glade.h:9
msgid ""
"The message's date will be compared against\n"
"the current time when filtering occurs."
@@ -10258,115 +10191,113 @@ msgstr ""
"Data e mesazhit do të krahasohet me\n"
"orën aktuale kur përdoret filtri."
-#: ../filter/filter.glade.h:12
+#: filter/filter.glade.h:12
msgid "a time relative to the current time"
msgstr "një datë relative me aktualen"
-#: ../filter/filter.glade.h:13
+#: filter/filter.glade.h:13
msgid "ago"
msgstr "më parë"
-#: ../filter/filter.glade.h:17
+#: filter/filter.glade.h:17
msgid "months"
msgstr "muaj"
-#: ../filter/filter.glade.h:18 ../mail/mail-config.glade.h:172
+#: filter/filter.glade.h:18 mail/mail-config.glade.h:172
msgid "seconds"
msgstr "sekonda"
-#: ../filter/filter.glade.h:19
+#: filter/filter.glade.h:19
msgid "the current time"
msgstr "ora aktuale"
-#: ../filter/filter.glade.h:20
+#: filter/filter.glade.h:20
msgid "the time you specify"
msgstr "data e dhënë"
-#: ../filter/filter.glade.h:22
+#: filter/filter.glade.h:22
msgid "years"
msgstr "vite"
-#: ../filter/rule-editor.c:285
+#: filter/rule-editor.c:285
msgid "Add Rule"
msgstr "Shto rregull"
-#: ../filter/rule-editor.c:361
+#: filter/rule-editor.c:361
msgid "Edit Rule"
msgstr "Ndrysho rregullin"
-#: ../filter/rule-editor.c:693
+#: filter/rule-editor.c:693
msgid "Rule name"
msgstr "Emri i rregullit"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:1
+#: mail/GNOME_Evolution_Mail.server.in.in.h:1
msgid "Composer Preferences"
msgstr "Preferimet e hartuesit"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:2
+#: mail/GNOME_Evolution_Mail.server.in.in.h:2
msgid "Configure mail preferences, including security and message display, here"
msgstr ""
"Konfiguro preferimet e postës, përfshirë sigurinë dhe shfaqjen e mesazheve, "
"këtu"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:3
+#: mail/GNOME_Evolution_Mail.server.in.in.h:3
msgid "Configure spell-checking, signatures, and the message composer here"
msgstr "Konfiguro këtu kontrollin e drejtshkrimit, firmat dhe hartuesin e mesazheve"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:4
+#: mail/GNOME_Evolution_Mail.server.in.in.h:4
msgid "Configure your email accounts here"
msgstr "Konfiguro këtu llogaritë e postës elektronike"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:5
+#: mail/GNOME_Evolution_Mail.server.in.in.h:5
msgid "Evolution Mail"
msgstr "Posta e Evolution"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:6
+#: mail/GNOME_Evolution_Mail.server.in.in.h:6
msgid "Evolution Mail accounts configuration control"
msgstr "Kontrolli i konfigurimit të llogarive së postës Evolution"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:7
+#: mail/GNOME_Evolution_Mail.server.in.in.h:7
msgid "Evolution Mail component"
msgstr "Përbërës i postës së Evolution"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:8
+#: mail/GNOME_Evolution_Mail.server.in.in.h:8
msgid "Evolution Mail composer"
msgstr "Hartuesi i postës së Evolution"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:9
+#: mail/GNOME_Evolution_Mail.server.in.in.h:9
msgid "Evolution Mail composer configuration control"
msgstr "Kontrolli i konfigurimit të hartuesit të postës së Evolution"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:10
+#: mail/GNOME_Evolution_Mail.server.in.in.h:10
msgid "Evolution Mail preferences control"
msgstr "Kontrolli i preferimeve të postës së Evolution"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:11 ../mail/em-folder-view.c:469
-#: ../mail/importers/elm-importer.c:418
-#: ../mail/importers/netscape-importer.c:1902
-#: ../mail/importers/pine-importer.c:474 ../mail/mail-component.c:557
-#: ../mail/mail-component.c:608
+#: mail/GNOME_Evolution_Mail.server.in.in.h:11 mail/em-folder-view.c:469
+#: mail/importers/elm-importer.c:418 mail/importers/netscape-importer.c:1902
+#: mail/importers/pine-importer.c:474 mail/mail-component.c:557
+#: mail/mail-component.c:608
msgid "Mail"
msgstr "Posta"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:12
+#: mail/GNOME_Evolution_Mail.server.in.in.h:12
msgid "Mail Accounts"
msgstr "Llogaritë e postës"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:13
-#: ../mail/mail-config.glade.h:95
+#: mail/GNOME_Evolution_Mail.server.in.in.h:13 mail/mail-config.glade.h:95
msgid "Mail Preferences"
msgstr "Preferimet e postës"
-#: ../mail/GNOME_Evolution_Mail.server.in.in.h:14
+#: mail/GNOME_Evolution_Mail.server.in.in.h:14
msgid "_Mail"
msgstr "_Mail"
-#: ../mail/em-account-editor.c:387
+#: mail/em-account-editor.c:387
#, c-format
msgid "%s License Agreement"
msgstr "Marrëveshje autorizimi për %s"
-#: ../mail/em-account-editor.c:394
+#: mail/em-account-editor.c:394
#, c-format
msgid ""
"\n"
@@ -10379,94 +10310,94 @@ msgstr ""
"për %s shfaqur më poshtë\n"
"dhe shëno kutinë zgjedhëse për t'a pranuar atë\n"
-#: ../mail/em-account-editor.c:464 ../mail/em-filter-folder-element.c:237
-#: ../mail/em-vfolder-rule.c:494
+#: mail/em-account-editor.c:464 mail/em-filter-folder-element.c:237
+#: mail/em-vfolder-rule.c:494
msgid "Select Folder"
msgstr "Zgjidh Kartelë"
-#: ../mail/em-account-editor.c:1664 ../mail/mail-config.glade.h:89
+#: mail/em-account-editor.c:1664 mail/mail-config.glade.h:89
msgid "Identity"
msgstr "Identiteti"
-#: ../mail/em-account-editor.c:1700 ../mail/mail-config.glade.h:114
+#: mail/em-account-editor.c:1700 mail/mail-config.glade.h:114
msgid "Receiving Email"
msgstr "Marrja e email"
-#: ../mail/em-account-editor.c:1877
+#: mail/em-account-editor.c:1877
msgid "Automatically check for _new mail every"
msgstr "Kontrollo automatikisht për mesazhe të _rinj çdo"
-#: ../mail/em-account-editor.c:2045 ../mail/mail-config.glade.h:124
+#: mail/em-account-editor.c:2045 mail/mail-config.glade.h:124
msgid "Sending Email"
msgstr "Dërgimi i postës"
-#: ../mail/em-account-editor.c:2089 ../mail/mail-config.glade.h:67
+#: mail/em-account-editor.c:2089 mail/mail-config.glade.h:67
msgid "Defaults"
msgstr "Vlerat e prezgjedhura"
-#: ../mail/em-account-editor.c:2148 ../mail/mail-config.glade.h:119
+#: mail/em-account-editor.c:2148 mail/mail-config.glade.h:119
msgid "Security"
msgstr "Siguria"
#. Most sections for this is auto-generated fromt the camel config
-#: ../mail/em-account-editor.c:2185 ../mail/em-account-editor.c:2260
+#: mail/em-account-editor.c:2185 mail/em-account-editor.c:2260
msgid "Receiving Options"
msgstr "Opcionet e marrjes"
-#: ../mail/em-account-editor.c:2186 ../mail/em-account-editor.c:2261
+#: mail/em-account-editor.c:2186 mail/em-account-editor.c:2261
msgid "Checking for New Mail"
msgstr "Kontroll për mesazhe të rinj"
-#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:33
+#: mail/em-account-editor.c:2585 mail/mail-config.glade.h:33
msgid "Account Editor"
msgstr "Editori i llogarive"
-#: ../mail/em-account-editor.c:2585 ../mail/mail-config.glade.h:79
+#: mail/em-account-editor.c:2585 mail/mail-config.glade.h:79
msgid "Evolution Account Assistant"
msgstr "Asistenti i llogarive Evolution"
#. translators: default account indicator
-#: ../mail/em-account-prefs.c:428
+#: mail/em-account-prefs.c:428
msgid "[Default]"
msgstr "[Prezgjedhur]"
-#: ../mail/em-account-prefs.c:482
+#: mail/em-account-prefs.c:482
msgid "Account name"
msgstr "Emri i llogarisë"
-#: ../mail/em-account-prefs.c:484
+#: mail/em-account-prefs.c:484
msgid "Protocol"
msgstr "Protokolli"
-#: ../mail/em-composer-prefs.c:306 ../mail/em-composer-prefs.c:429
-#: ../mail/mail-config.c:935
+#: mail/em-composer-prefs.c:306 mail/em-composer-prefs.c:429
+#: mail/mail-config.c:935
msgid "Unnamed"
msgstr "Pa emër"
-#: ../mail/em-composer-prefs.c:894
+#: mail/em-composer-prefs.c:894
msgid "Language(s)"
msgstr "Gjuha(ët)"
-#: ../mail/em-composer-prefs.c:937
+#: mail/em-composer-prefs.c:937
msgid "Add signature script"
msgstr "Shto firmën"
-#: ../mail/em-composer-prefs.c:957
+#: mail/em-composer-prefs.c:957
msgid "Signature(s)"
msgstr "Firma(t)"
-#: ../mail/em-composer-utils.c:911
+#: mail/em-composer-utils.c:911
msgid "-------- Forwarded Message --------"
msgstr "-------- Mesazhi i Përcjellë --------"
-#: ../mail/em-composer-utils.c:1521
+#: mail/em-composer-utils.c:1521
msgid "an unknown sender"
msgstr "një dërgues i panjohur"
#. 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:1568
+#: mail/em-composer-utils.c:1568
msgid ""
"On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} "
"${TimeZone}, ${Sender} wrote:"
@@ -10474,604 +10405,600 @@ msgstr ""
"Më ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} "
"${TimeZone}, ${Sender} ka shkruar:"
-#: ../mail/em-filter-editor.c:147
+#: mail/em-filter-editor.c:147
msgid "_Filter Rules"
msgstr "Rregullat e _Filtrave"
#. Automatically generated. Do not edit.
-#: ../mail/em-filter-i18n.h:2
+#: mail/em-filter-i18n.h:2
msgid "Adjust Score"
msgstr "Përshtat Pikët"
-#: ../mail/em-filter-i18n.h:3
+#: mail/em-filter-i18n.h:3
msgid "Assign Color"
msgstr "Cakto ngjyrën"
-#: ../mail/em-filter-i18n.h:4
+#: mail/em-filter-i18n.h:4
msgid "Assign Score"
msgstr "Cakto pikët"
-#: ../mail/em-filter-i18n.h:5
+#: mail/em-filter-i18n.h:5
msgid "Attachments"
msgstr "Të bashkangjitur"
-#: ../mail/em-filter-i18n.h:6
+#: mail/em-filter-i18n.h:6
msgid "Beep"
msgstr "Beep"
-#: ../mail/em-filter-i18n.h:7
+#: mail/em-filter-i18n.h:7
msgid "contains"
msgstr "përmban"
-#: ../mail/em-filter-i18n.h:8
+#: mail/em-filter-i18n.h:8
msgid "Copy to Folder"
msgstr "Kopjoje tek kartela"
-#: ../mail/em-filter-i18n.h:9
+#: mail/em-filter-i18n.h:9
msgid "Date received"
msgstr "Data e marrjes"
-#: ../mail/em-filter-i18n.h:10
+#: mail/em-filter-i18n.h:10
msgid "Date sent"
msgstr "Data e dërgimit"
-#: ../mail/em-filter-i18n.h:12
+#: mail/em-filter-i18n.h:12
msgid "Deleted"
msgstr "Eleminuar"
-#: ../mail/em-filter-i18n.h:13
+#: mail/em-filter-i18n.h:13
msgid "does not contain"
msgstr "nuk përmban"
-#: ../mail/em-filter-i18n.h:14
+#: mail/em-filter-i18n.h:14
msgid "does not end with"
msgstr "nuk përfundon me"
-#: ../mail/em-filter-i18n.h:15
+#: mail/em-filter-i18n.h:15
msgid "does not exist"
msgstr "nuk ekziston"
-#: ../mail/em-filter-i18n.h:16
+#: mail/em-filter-i18n.h:16
msgid "does not return"
msgstr "nuk kthehet"
-#: ../mail/em-filter-i18n.h:17
+#: mail/em-filter-i18n.h:17
msgid "does not sound like"
msgstr "nuk duket si"
-#: ../mail/em-filter-i18n.h:18
+#: mail/em-filter-i18n.h:18
msgid "does not start with"
msgstr "nuk fillon me"
-#: ../mail/em-filter-i18n.h:19
+#: mail/em-filter-i18n.h:19
msgid "Do Not Exist"
msgstr "Not Ekziston"
-#: ../mail/em-filter-i18n.h:20
+#: mail/em-filter-i18n.h:20
msgid "Draft"
msgstr "Kopje e keqe"
-#: ../mail/em-filter-i18n.h:21
+#: mail/em-filter-i18n.h:21
msgid "ends with"
msgstr "mbaron me"
-#: ../mail/em-filter-i18n.h:22
+#: mail/em-filter-i18n.h:22
msgid "Exist"
msgstr "Ekziston"
-#: ../mail/em-filter-i18n.h:23
+#: mail/em-filter-i18n.h:23
msgid "exists"
msgstr "ekziston"
-#: ../mail/em-filter-i18n.h:24
+#: mail/em-filter-i18n.h:24
msgid "Expression"
msgstr "Shprehje"
-#: ../mail/em-filter-i18n.h:25
+#: mail/em-filter-i18n.h:25
msgid "Follow Up"
msgstr "Vazhdimi"
-#: ../mail/em-filter-i18n.h:27
+#: mail/em-filter-i18n.h:27
msgid "is"
msgstr "është"
-#: ../mail/em-filter-i18n.h:28
+#: mail/em-filter-i18n.h:28
msgid "is after"
msgstr "është mbas"
-#: ../mail/em-filter-i18n.h:29
+#: mail/em-filter-i18n.h:29
msgid "is before"
msgstr "është përpara"
-#: ../mail/em-filter-i18n.h:30
+#: mail/em-filter-i18n.h:30
msgid "is Flagged"
msgstr "është shënuar me flamurë"
-#: ../mail/em-filter-i18n.h:31
+#: mail/em-filter-i18n.h:31
msgid "is greater than"
msgstr "është më i madh se"
-#: ../mail/em-filter-i18n.h:32
+#: mail/em-filter-i18n.h:32
msgid "is less than"
msgstr "është më pak se"
-#: ../mail/em-filter-i18n.h:33
+#: mail/em-filter-i18n.h:33
msgid "is not"
msgstr "nuk është"
-#: ../mail/em-filter-i18n.h:34
+#: mail/em-filter-i18n.h:34
msgid "is not Flagged"
msgstr "nuk është shënuar me flamurë"
-#: ../mail/em-filter-i18n.h:35 ../mail/mail-config.glade.h:92
-#: ../ui/evolution-mail-message.xml.h:48
+#: mail/em-filter-i18n.h:35 mail/mail-config.glade.h:92
+#: ui/evolution-mail-message.xml.h:48
msgid "Junk"
msgstr "Për në plehra"
-#: ../mail/em-filter-i18n.h:36
+#: mail/em-filter-i18n.h:36
msgid "Junk Test"
msgstr "Teksti për t'u refuzuar"
-#: ../mail/em-filter-i18n.h:37 ../mail/em-folder-view.c:992
-#: ../widgets/misc/e-expander.c:189
+#: mail/em-filter-i18n.h:37 mail/em-folder-view.c:992
+#: widgets/misc/e-expander.c:189
msgid "Label"
msgstr "Etiketa"
-#: ../mail/em-filter-i18n.h:38
+#: mail/em-filter-i18n.h:38
msgid "Mailing list"
msgstr "Mailing list"
-#: ../mail/em-filter-i18n.h:39
+#: mail/em-filter-i18n.h:39
msgid "Match All"
msgstr "Korrispondencë e plotë"
-#: ../mail/em-filter-i18n.h:40
+#: mail/em-filter-i18n.h:40
msgid "Message Body"
msgstr "Trupi i mesazhit"
-#: ../mail/em-filter-i18n.h:41
+#: mail/em-filter-i18n.h:41
msgid "Message Header"
msgstr "Kreu i mesazhit"
-#: ../mail/em-filter-i18n.h:42
+#: mail/em-filter-i18n.h:42
msgid "Message is Junk"
msgstr "Mesazhi është për tu flakur"
-#: ../mail/em-filter-i18n.h:43
+#: mail/em-filter-i18n.h:43
msgid "Message is not Junk"
msgstr "Mesazhi nuk është për tu flakur"
-#: ../mail/em-filter-i18n.h:44
+#: mail/em-filter-i18n.h:44
msgid "Move to Folder"
msgstr "Lëvize tek kartela"
-#: ../mail/em-filter-i18n.h:45
+#: mail/em-filter-i18n.h:45
msgid "Pipe to Program"
msgstr "Ridrejtoje tek programi"
-#: ../mail/em-filter-i18n.h:46
+#: mail/em-filter-i18n.h:46
msgid "Play Sound"
msgstr "Lësho tingullin"
-#: ../mail/em-filter-i18n.h:47 ../mail/message-tag-followup.c:80
+#: mail/em-filter-i18n.h:47 mail/message-tag-followup.c:80
msgid "Read"
msgstr "Lexo"
-#: ../mail/em-filter-i18n.h:48
+#: mail/em-filter-i18n.h:48
msgid "Recipients"
msgstr "Marrës"
-#: ../mail/em-filter-i18n.h:49
+#: mail/em-filter-i18n.h:49
msgid "Regex Match"
msgstr "Regex Match"
-#: ../mail/em-filter-i18n.h:50
+#: mail/em-filter-i18n.h:50
msgid "Replied to"
msgstr "Në përgjigje të"
-#: ../mail/em-filter-i18n.h:51
+#: mail/em-filter-i18n.h:51
msgid "returns"
msgstr "të kthyer"
-#: ../mail/em-filter-i18n.h:52
+#: mail/em-filter-i18n.h:52
msgid "returns greater than"
msgstr "të kthyer më të mëdhenj se"
-#: ../mail/em-filter-i18n.h:53
+#: mail/em-filter-i18n.h:53
msgid "returns less than"
msgstr "të kthyer më të vegjël se"
-#: ../mail/em-filter-i18n.h:54
+#: mail/em-filter-i18n.h:54
msgid "Run Program"
msgstr "Zbato programin"
-#: ../mail/em-filter-i18n.h:55 ../mail/message-list.etspec.h:10
+#: mail/em-filter-i18n.h:55 mail/message-list.etspec.h:10
msgid "Score"
msgstr "Pikë"
-#: ../mail/em-filter-i18n.h:56
+#: mail/em-filter-i18n.h:56
msgid "Sender"
msgstr "Dërguesi"
-#: ../mail/em-filter-i18n.h:57
+#: mail/em-filter-i18n.h:57
msgid "Set Status"
msgstr "Vendos gjendjen"
-#: ../mail/em-filter-i18n.h:58
+#: mail/em-filter-i18n.h:58
msgid "Size (kB)"
msgstr "Madhësia (kB)"
-#: ../mail/em-filter-i18n.h:59
+#: mail/em-filter-i18n.h:59
msgid "sounds like"
msgstr "ngjan si"
-#: ../mail/em-filter-i18n.h:60
+#: mail/em-filter-i18n.h:60
msgid "Source Account"
msgstr "Buruesi i llogarisë"
-#: ../mail/em-filter-i18n.h:61
+#: mail/em-filter-i18n.h:61
msgid "Specific header"
msgstr "Titull specifik"
-#: ../mail/em-filter-i18n.h:62
+#: mail/em-filter-i18n.h:62
msgid "starts with"
msgstr "fillon me"
-#: ../mail/em-filter-i18n.h:64
+#: mail/em-filter-i18n.h:64
msgid "Stop Processing"
msgstr "Ndalo proçesimin"
-#: ../mail/em-filter-i18n.h:65 ../mail/em-format-html.c:1533
-#: ../mail/em-format-quote.c:306 ../mail/em-format.c:853
-#: ../mail/em-mailer-prefs.c:88 ../mail/message-list.etspec.h:13
-#: ../mail/message-tag-followup.c:330
-#: ../plugins/shared-folder/properties.glade.h:7 ../smime/lib/e-cert.c:1131
+#: mail/em-filter-i18n.h:65 mail/em-format-html.c:1533
+#: mail/em-format-quote.c:306 mail/em-format.c:853 mail/em-mailer-prefs.c:88
+#: mail/message-list.etspec.h:13 mail/message-tag-followup.c:330
+#: plugins/shared-folder/properties.glade.h:7 smime/lib/e-cert.c:1131
msgid "Subject"
msgstr "Subjekti"
-#: ../mail/em-filter-i18n.h:66
+#: mail/em-filter-i18n.h:66
msgid "Unset Status"
msgstr "Gjëndje e pacaktuar"
#. and now for the action area
-#: ../mail/em-filter-rule.c:488
+#: mail/em-filter-rule.c:488
msgid "<b>Then</b>"
msgstr "<b>Atëhere</b>"
-#: ../mail/em-folder-browser.c:133
+#: mail/em-folder-browser.c:133
msgid "Create _vFolder From Search..."
msgstr "Krijon kartelë _vFolder nga kërkimi..."
#. TODO: can this be done in a loop?
-#: ../mail/em-folder-properties.c:144
+#: mail/em-folder-properties.c:144
msgid "Total message:"
msgid_plural "Total messages:"
msgstr[0] "Gjithsej mesazh:"
msgstr[1] "Gjithsej mesazhe:"
-#: ../mail/em-folder-properties.c:156
+#: mail/em-folder-properties.c:156
msgid "Unread message:"
msgid_plural "Unread messages:"
msgstr[0] "Mesazh i palexuar:"
msgstr[1] "Mesazhe të palexuar:"
-#: ../mail/em-folder-properties.c:278
-#: ../plugins/shared-folder/properties.glade.h:3
+#: mail/em-folder-properties.c:278 plugins/shared-folder/properties.glade.h:3
msgid "Folder Properties"
msgstr "Pronësitë e kartelës"
-#: ../mail/em-folder-selection-button.c:123
+#: mail/em-folder-selection-button.c:123
msgid "<click here to select a folder>"
msgstr "<kliko këtu për të zgjedhur një kartelë>"
-#: ../mail/em-folder-selector.c:166
+#: mail/em-folder-selector.c:166
msgid "Create New Folder"
msgstr "Krijo një Kartelë të Re"
-#: ../mail/em-folder-selector.c:166 ../mail/em-folder-tree.c:2527
-#: ../mail/mail-component.c:770 ../plugins/shared-folder/install-shared.c:144
-#: ../plugins/shared-folder/share-folder-common.c:345
+#: mail/em-folder-selector.c:166 mail/em-folder-tree.c:2527
+#: mail/mail-component.c:770 plugins/shared-folder/install-shared.c:144
+#: plugins/shared-folder/share-folder-common.c:345
msgid "Specify where to create the folder:"
msgstr "Përcakto ku duhet krijuar kartela:"
-#: ../mail/em-folder-selector.c:304
+#: mail/em-folder-selector.c:304
msgid "Create"
msgstr "Krijo"
-#: ../mail/em-folder-selector.c:308
+#: mail/em-folder-selector.c:308
msgid "Folder _name:"
msgstr "_Emri i kartelës:"
-#: ../mail/em-folder-tree-model.c:201 ../mail/em-folder-tree-model.c:203
-#: ../mail/mail-vfolder.c:899 ../mail/mail-vfolder.c:969
+#: mail/em-folder-tree-model.c:201 mail/em-folder-tree-model.c:203
+#: mail/mail-vfolder.c:899 mail/mail-vfolder.c:969
msgid "vFolders"
msgstr "vKartelat"
#. UNMATCHED is always last
-#: ../mail/em-folder-tree-model.c:207 ../mail/em-folder-tree-model.c:209
+#: mail/em-folder-tree-model.c:207 mail/em-folder-tree-model.c:209
msgid "UNMATCHED"
msgstr "PAPËRPUTHJE"
-#: ../mail/em-folder-tree-model.c:468 ../mail/mail-component.c:142
+#: mail/em-folder-tree-model.c:468 mail/mail-component.c:142
msgid "Drafts"
msgstr "Kopje e keqe"
#. translators: standard local mailbox names
-#: ../mail/em-folder-tree-model.c:471 ../mail/mail-component.c:141
+#: mail/em-folder-tree-model.c:471 mail/mail-component.c:141
msgid "Inbox"
msgstr "Në ardhje"
-#: ../mail/em-folder-tree-model.c:474 ../mail/mail-component.c:143
+#: mail/em-folder-tree-model.c:474 mail/mail-component.c:143
msgid "Outbox"
msgstr "Në dalje"
-#: ../mail/em-folder-tree-model.c:476 ../mail/mail-component.c:144
+#: mail/em-folder-tree-model.c:476 mail/mail-component.c:144
msgid "Sent"
msgstr "Dërguar"
-#: ../mail/em-folder-tree-model.c:495 ../mail/em-folder-tree-model.c:799
+#: mail/em-folder-tree-model.c:495 mail/em-folder-tree-model.c:799
msgid "Loading..."
msgstr "Duke ngarkuar..."
-#: ../mail/em-folder-tree.c:688
+#: mail/em-folder-tree.c:688
msgid "Mail Folder Tree"
msgstr "Pema e kartelave të postës"
-#: ../mail/em-folder-tree.c:921
+#: mail/em-folder-tree.c:921
#, c-format
msgid "Moving folder %s"
msgstr "Duke lëvizur kartelën %s"
-#: ../mail/em-folder-tree.c:923
+#: mail/em-folder-tree.c:923
#, c-format
msgid "Copying folder %s"
msgstr "Duke kopjuar kartelën %s"
-#: ../mail/em-folder-tree.c:930 ../mail/message-list.c:1612
+#: mail/em-folder-tree.c:930 mail/message-list.c:1612
#, c-format
msgid "Moving messages into folder %s"
msgstr "Duke lëvizur mesazhet në kartelën %s"
-#: ../mail/em-folder-tree.c:932 ../mail/message-list.c:1614
+#: mail/em-folder-tree.c:932 mail/message-list.c:1614
#, c-format
msgid "Copying messages into folder %s"
msgstr "Duke kopjuar mesazhet në kartelën %s"
-#: ../mail/em-folder-tree.c:948
+#: mail/em-folder-tree.c:948
msgid "Cannot drop message(s) into toplevel store"
msgstr "E pamundur hedhja e mesazhit(eve) nën magazinën qendrore"
-#: ../mail/em-folder-tree.c:1044 ../ui/evolution-mail-message.xml.h:106
+#: mail/em-folder-tree.c:1044 ui/evolution-mail-message.xml.h:106
msgid "_Copy to Folder"
msgstr "_Kopjo tek Kartela"
-#: ../mail/em-folder-tree.c:1045 ../ui/evolution-mail-message.xml.h:115
+#: mail/em-folder-tree.c:1045 ui/evolution-mail-message.xml.h:115
msgid "_Move to Folder"
msgstr "_Lëviz tek Kartela"
-#: ../mail/em-folder-tree.c:1750 ../mail/mail-ops.c:1026
+#: mail/em-folder-tree.c:1750 mail/mail-ops.c:1026
#, c-format
msgid "Scanning folders in \"%s\""
msgstr "Duke kontrolluar kartelat në \"%s\""
-#: ../mail/em-folder-tree.c:2023
+#: mail/em-folder-tree.c:2023
#, c-format
msgid "Copying `%s' to `%s'"
msgstr "Duke kopjuar `%s' në `%s'"
-#: ../mail/em-folder-tree.c:2297 ../mail/em-folder-tree.c:2311
-#: ../mail/em-folder-view.c:862 ../mail/em-folder-view.c:877
-#: ../mail/importers/evolution-mbox-importer.c:120
-#: ../mail/importers/evolution-outlook-importer.c:134
+#: mail/em-folder-tree.c:2297 mail/em-folder-tree.c:2311
+#: mail/em-folder-view.c:862 mail/em-folder-view.c:877
+#: mail/importers/evolution-mbox-importer.c:120
+#: mail/importers/evolution-outlook-importer.c:134
msgid "Select folder"
msgstr "Zgjidh kartelën"
-#: ../mail/em-folder-tree.c:2297 ../mail/em-folder-view.c:877
+#: mail/em-folder-tree.c:2297 mail/em-folder-view.c:877
msgid "C_opy"
msgstr "K_opjo"
-#: ../mail/em-folder-tree.c:2338
-#: ../plugins/shared-folder/share-folder-common.c:138
+#: mail/em-folder-tree.c:2338 plugins/shared-folder/share-folder-common.c:138
#, c-format
msgid "Creating folder `%s'"
msgstr "Duke krijuar kartelën `%s'"
-#: ../mail/em-folder-tree.c:2527 ../mail/mail-component.c:770
-#: ../plugins/shared-folder/install-shared.c:144
-#: ../plugins/shared-folder/share-folder-common.c:345
+#: mail/em-folder-tree.c:2527 mail/mail-component.c:770
+#: plugins/shared-folder/install-shared.c:144
+#: plugins/shared-folder/share-folder-common.c:345
msgid "Create folder"
msgstr "Krijo kartelë"
-#: ../mail/em-folder-tree.c:2720
+#: mail/em-folder-tree.c:2720
#, c-format
msgid "Rename the \"%s\" folder to:"
msgstr "Riemërto kartelën \"%s\" në:"
-#: ../mail/em-folder-tree.c:2722
+#: mail/em-folder-tree.c:2722
msgid "Rename Folder"
msgstr "Riemërto kartelën"
-#: ../mail/em-folder-tree.c:2728
+#: mail/em-folder-tree.c:2728
msgid "Folder names cannot contain '/'"
msgstr "Emrat e kartelës nuk mund të përmbajnë simbolin \"/\"."
-#: ../mail/em-folder-tree.c:2802 ../ui/evolution-addressbook.xml.h:44
-#: ../ui/evolution-mail-global.xml.h:17
-#: ../ui/evolution-mail-messagedisplay.xml.h:8
-#: ../ui/evolution-message-composer.xml.h:53 ../ui/evolution.xml.h:49
+#: mail/em-folder-tree.c:2802 ui/evolution-addressbook.xml.h:44
+#: ui/evolution-mail-global.xml.h:17 ui/evolution-mail-messagedisplay.xml.h:8
+#: ui/evolution-message-composer.xml.h:53 ui/evolution.xml.h:49
msgid "_View"
msgstr "_Shfaq"
-#: ../mail/em-folder-tree.c:2803
+#: mail/em-folder-tree.c:2803
msgid "Open in _New Window"
msgstr "Hape në një dritare të _re"
-#: ../mail/em-folder-tree.c:2807
+#: mail/em-folder-tree.c:2807
msgid "_Copy..."
msgstr "_Kopjo..."
-#: ../mail/em-folder-tree.c:2808
+#: mail/em-folder-tree.c:2808
msgid "_Move..."
msgstr "_Lëvize..."
#. FIXME: need to disable for nochildren folders
-#: ../mail/em-folder-tree.c:2812
+#: mail/em-folder-tree.c:2812
msgid "_New Folder..."
msgstr "Kartelë e _Re..."
-#: ../mail/em-folder-tree.c:2815
+#: mail/em-folder-tree.c:2815
msgid "_Rename..."
msgstr "_Riemërto..."
-#: ../mail/em-folder-view.c:970 ../mail/em-popup.c:499
-#: ../ui/evolution-mail-message.xml.h:87
+#: mail/em-folder-view.c:970 mail/em-popup.c:499
+#: ui/evolution-mail-message.xml.h:87
msgid "Reply to _All"
msgstr "Përgjigju të _Gjithëve"
-#: ../mail/em-folder-view.c:971 ../ui/evolution-mail-message.xml.h:123
+#: mail/em-folder-view.c:971 ui/evolution-mail-message.xml.h:123
msgid "_Reply to Sender"
msgstr "_Përgjigju Dërguesit"
-#: ../mail/em-folder-view.c:972 ../mail/em-popup.c:501
-#: ../ui/evolution-mail-message.xml.h:110
+#: mail/em-folder-view.c:972 mail/em-popup.c:501
+#: ui/evolution-mail-message.xml.h:110
msgid "_Forward"
msgstr "_Vazhdo"
-#: ../mail/em-folder-view.c:975 ../ui/evolution-mail-message.xml.h:109
+#: mail/em-folder-view.c:975 ui/evolution-mail-message.xml.h:109
msgid "_Edit as New Message..."
msgstr "_Ndrysho si Mesazh i Ri..."
-#: ../mail/em-folder-view.c:977
+#: mail/em-folder-view.c:977
msgid "_Print"
msgstr "_Printo"
-#: ../mail/em-folder-view.c:981
+#: mail/em-folder-view.c:981
msgid "U_ndelete"
msgstr "A_nullo fshirjen"
-#: ../mail/em-folder-view.c:982
+#: mail/em-folder-view.c:982
msgid "Mo_ve to Folder..."
msgstr "Lë_viz tek Kartela..."
-#: ../mail/em-folder-view.c:983 ../ui/evolution-addressbook.xml.h:32
+#: mail/em-folder-view.c:983 ui/evolution-addressbook.xml.h:32
msgid "_Copy to Folder..."
msgstr "_Kopjo tek Kartela..."
-#: ../mail/em-folder-view.c:986
+#: mail/em-folder-view.c:986
msgid "Mark as _Important"
msgstr "Shëno si me _Rëndësi"
-#: ../mail/em-folder-view.c:987
+#: mail/em-folder-view.c:987
msgid "_Mark as Unimportant"
msgstr "_Shëno si Parëndësi"
-#: ../mail/em-folder-view.c:988 ../ui/evolution-mail-message.xml.h:54
+#: mail/em-folder-view.c:988 ui/evolution-mail-message.xml.h:54
msgid "Mark as _Junk"
msgstr "Shëno si _Plehrë"
-#: ../mail/em-folder-view.c:989 ../ui/evolution-mail-message.xml.h:55
+#: mail/em-folder-view.c:989 ui/evolution-mail-message.xml.h:55
msgid "Mark as _Not Junk"
msgstr "Shëno si _Jo për në plehra"
-#: ../mail/em-folder-view.c:990
+#: mail/em-folder-view.c:990
msgid "Mark for Follo_w Up..."
msgstr "Shëno për Nd_iqe..."
-#: ../mail/em-folder-view.c:998
+#: mail/em-folder-view.c:998
msgid "Fla_g Completed"
msgstr "Shën_o si plotësuar"
-#: ../mail/em-folder-view.c:999
+#: mail/em-folder-view.c:999
msgid "Cl_ear Flag"
msgstr "H_iq flamurin"
-#: ../mail/em-folder-view.c:1002
+#: mail/em-folder-view.c:1002
msgid "Crea_te Rule From Message"
msgstr "Kr_ijo Rregull Nga Mesazhi"
-#: ../mail/em-folder-view.c:1003
+#: mail/em-folder-view.c:1003
msgid "vFolder on _Subject"
msgstr "Kartela vFolder tek _Subjekti"
-#: ../mail/em-folder-view.c:1004
+#: mail/em-folder-view.c:1004
msgid "vFolder on Se_nder"
msgstr "Kartela vFolder tek Dër_guesi"
-#: ../mail/em-folder-view.c:1005
+#: mail/em-folder-view.c:1005
msgid "vFolder on _Recipients"
msgstr "Kartela vFolder tek _marrësit"
-#: ../mail/em-folder-view.c:1006
+#: mail/em-folder-view.c:1006
msgid "vFolder on Mailing _List"
msgstr "Kartela vFolder tek Mailing _List"
-#: ../mail/em-folder-view.c:1010
+#: mail/em-folder-view.c:1010
msgid "Filter on Sub_ject"
msgstr "Filtro Sub_jektin"
-#: ../mail/em-folder-view.c:1011
+#: mail/em-folder-view.c:1011
msgid "Filter on Sen_der"
msgstr "Filtro Dër_guesin"
-#: ../mail/em-folder-view.c:1012
+#: mail/em-folder-view.c:1012
msgid "Filter on Re_cipients"
msgstr "Filtro Marrë_sit"
-#: ../mail/em-folder-view.c:1013
+#: mail/em-folder-view.c:1013
msgid "Filter on _Mailing List"
msgstr "Filtro _Mailing List"
#. default charset used in mail view
-#: ../mail/em-folder-view.c:1844 ../mail/em-folder-view.c:1888
+#: mail/em-folder-view.c:1844 mail/em-folder-view.c:1888
msgid "Default"
msgstr "E prezgjedhur"
-#: ../mail/em-folder-view.c:1987
+#: mail/em-folder-view.c:1987
msgid "Print Message"
msgstr "Printo Mesazhin"
-#: ../mail/em-folder-view.c:2295
+#: mail/em-folder-view.c:2295
msgid "_Copy Link Location"
msgstr "_Kopjo Vendodhjen e Lidhjes"
-#: ../mail/em-folder-view.c:2297
+#: mail/em-folder-view.c:2297
msgid "Create _vFolder"
msgstr "Krijo kartelë _vFolder"
-#: ../mail/em-folder-view.c:2298
+#: mail/em-folder-view.c:2298
msgid "_From this Address"
msgstr "_Nga kjo adresë"
-#: ../mail/em-folder-view.c:2299
+#: mail/em-folder-view.c:2299
msgid "_To this Address"
msgstr "_Tek kjo adresë"
-#: ../mail/em-folder-view.c:2568
+#: mail/em-folder-view.c:2568
#, c-format
msgid "Click to mail %s"
msgstr "Kliko tek mesazhi %s"
#. message-search popup match count string
-#: ../mail/em-format-html-display.c:412
+#: mail/em-format-html-display.c:412
#, c-format
msgid "Matches: %d"
msgstr "Korrispondues: %d"
-#: ../mail/em-format-html-display.c:680 ../mail/em-format-html.c:579
+#: mail/em-format-html-display.c:680 mail/em-format-html.c:579
msgid "Unsigned"
msgstr "Pa firmë"
-#: ../mail/em-format-html-display.c:680
+#: mail/em-format-html-display.c:680
msgid ""
"This message is not signed. There is no guarantee that this message is "
"authentic."
msgstr "Ky mesazh nuk është i firmosur. Nuk ka garanci që mesazhi të jetë autentik."
-#: ../mail/em-format-html-display.c:681 ../mail/em-format-html.c:580
+#: mail/em-format-html-display.c:681 mail/em-format-html.c:580
msgid "Valid signature"
msgstr "Firmë e vlefshme"
-#: ../mail/em-format-html-display.c:681
+#: mail/em-format-html-display.c:681
msgid ""
"This message is signed and is valid meaning that it is very likely that this "
"message is authentic."
@@ -11079,11 +11006,11 @@ msgstr ""
"Ky mesazh është i firmosur dhe është i vlefshëm, do të thotë që ky mesazh "
"mund të konsiderohet si autentik."
-#: ../mail/em-format-html-display.c:682 ../mail/em-format-html.c:581
+#: mail/em-format-html-display.c:682 mail/em-format-html.c:581
msgid "Invalid signature"
msgstr "Firmë e pavlefshme"
-#: ../mail/em-format-html-display.c:682
+#: mail/em-format-html-display.c:682
msgid ""
"The signature of this message cannot be verified, it may have been altered "
"in transit."
@@ -11091,11 +11018,11 @@ msgstr ""
"Firma e mesazhit nuk mund të verifikohet, ka mundësi të jetë ndryshuar gjatë "
"përcjelljes."
-#: ../mail/em-format-html-display.c:683
+#: mail/em-format-html-display.c:683
msgid "Valid signature, cannot verify sender"
msgstr "Firmë e vlefshme, nuk mund të verifikoj dërguesin"
-#: ../mail/em-format-html-display.c:683
+#: mail/em-format-html-display.c:683
msgid ""
"This message is signed with a valid signature, but the sender of the message "
"cannot be verified."
@@ -11103,11 +11030,11 @@ msgstr ""
"Ky mesazh është firmosur me një firmë të vlefshme, por dërguesi i mesazhit "
"nuk mund të verifikohet."
-#: ../mail/em-format-html-display.c:689 ../mail/em-format-html.c:588
+#: mail/em-format-html-display.c:689 mail/em-format-html.c:588
msgid "Unencrypted"
msgstr "Jo i dekriptuar"
-#: ../mail/em-format-html-display.c:689
+#: mail/em-format-html-display.c:689
msgid ""
"This message is not encrypted. Its content may be viewed in transit across "
"the Internet."
@@ -11115,11 +11042,11 @@ msgstr ""
"Ky mesazh nuk është i kriptuar. Përmbajtja e tij mund të shikohet gjatë "
"kalimit në Internet."
-#: ../mail/em-format-html-display.c:690 ../mail/em-format-html.c:589
+#: mail/em-format-html-display.c:690 mail/em-format-html.c:589
msgid "Encrypted, weak"
msgstr "I shifruar, i dobët"
-#: ../mail/em-format-html-display.c:690
+#: mail/em-format-html-display.c:690
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 "
@@ -11129,11 +11056,11 @@ msgstr ""
"vështirë, por jo e pamundur që një i jashtëm të shikojë përmbajtjen e këtij "
"mesazhi brenda pak kohe."
-#: ../mail/em-format-html-display.c:691 ../mail/em-format-html.c:590
+#: mail/em-format-html-display.c:691 mail/em-format-html.c:590
msgid "Encrypted"
msgstr "Shifruar"
-#: ../mail/em-format-html-display.c:691
+#: mail/em-format-html-display.c:691
msgid ""
"This message is encrypted. It would be difficult for an outsider to view "
"the content of this message."
@@ -11141,11 +11068,11 @@ msgstr ""
"Ky mesazh është i kriptuar. Një i jashtëm do të ketë vështirësi të shikojë "
"përmbajtjen e këtij mesazhi."
-#: ../mail/em-format-html-display.c:692 ../mail/em-format-html.c:591
+#: mail/em-format-html-display.c:692 mail/em-format-html.c:591
msgid "Encrypted, strong"
msgstr "I shifruar, fort"
-#: ../mail/em-format-html-display.c:692
+#: mail/em-format-html-display.c:692
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 "
@@ -11155,189 +11082,186 @@ msgstr ""
"jetë tepër e vështirë për një të jashtëm të shikojë përmbajtjen e këtij "
"mesazhi brenda pak kohe."
-#: ../mail/em-format-html-display.c:793 ../smime/gui/smime-ui.glade.h:47
+#: mail/em-format-html-display.c:793 smime/gui/smime-ui.glade.h:47
msgid "_View Certificate"
msgstr "_Shiko çertifikatën"
-#: ../mail/em-format-html-display.c:808
+#: mail/em-format-html-display.c:808
msgid "This certificate is not viewable"
msgstr "Kjo çertifikatë nuk është e shikueshme"
-#: ../mail/em-format-html-display.c:1037
+#: mail/em-format-html-display.c:1037
msgid "Completed on %B %d, %Y, %l:%M %p"
msgstr "U plotësua në %B %d, %Y, %l:%M %p"
-#: ../mail/em-format-html-display.c:1045
+#: mail/em-format-html-display.c:1045
msgid "Overdue:"
msgstr "Të skaduara:"
-#: ../mail/em-format-html-display.c:1048
+#: mail/em-format-html-display.c:1048
msgid "by %B %d, %Y, %l:%M %p"
msgstr "nga %B %d, %Y, %l:%M %p"
-#: ../mail/em-format-html-display.c:1095
+#: mail/em-format-html-display.c:1095
msgid "_View Inline"
msgstr "_Shfaq Inline"
-#: ../mail/em-format-html-display.c:1096
+#: mail/em-format-html-display.c:1096
msgid "_Hide"
msgstr "_Fshih"
-#: ../mail/em-format-html-display.c:1340
+#: mail/em-format-html-display.c:1340
msgid "Attachment Button"
msgstr "Pulsanti i bashkangjitjes"
-#: ../mail/em-format-html-print.c:130
+#: mail/em-format-html-print.c:130
#, c-format
msgid "Page %d of %d"
msgstr "Faqja %d në %d"
-#: ../mail/em-format-html.c:472 ../mail/em-format-html.c:474
+#: mail/em-format-html.c:472 mail/em-format-html.c:474
#, c-format
msgid "Retrieving `%s'"
msgstr "Duke tërhequr `%s'"
-#: ../mail/em-format-html.c:582
+#: mail/em-format-html.c:582
msgid "Valid signature but cannot verify sender"
msgstr "Firmë e vlefshme por dërguesi nuk mund të verifikohet"
-#: ../mail/em-format-html.c:840
+#: mail/em-format-html.c:840
msgid "Malformed external-body part."
msgstr "Pjesë e keqformuar jashtë-trupi."
-#: ../mail/em-format-html.c:870
+#: mail/em-format-html.c:870
#, c-format
msgid "Pointer to FTP site (%s)"
msgstr "Tregues tek siti FTP (%s)"
-#: ../mail/em-format-html.c:881
+#: mail/em-format-html.c:881
#, c-format
msgid "Pointer to local file (%s) valid at site \"%s\""
msgstr "Treguesi tek file lokal (%s) i vlefshëm tek siti \"%s\""
-#: ../mail/em-format-html.c:883
+#: mail/em-format-html.c:883
#, c-format
msgid "Pointer to local file (%s)"
msgstr "Treguesi tek file lokal (%s)"
-#: ../mail/em-format-html.c:904
+#: mail/em-format-html.c:904
#, c-format
msgid "Pointer to remote data (%s)"
msgstr "Treguesi tek e dhëna remote (%s)"
-#: ../mail/em-format-html.c:915
+#: mail/em-format-html.c:915
#, c-format
msgid "Pointer to unknown external data (\"%s\" type)"
msgstr "Treguesi tek një e dhënë e panjohur e jashtme (e llojit \"%s\")"
-#: ../mail/em-format-html.c:1137
+#: mail/em-format-html.c:1137
msgid "Formatting message"
msgstr "Duke formatuar mesazhin"
-#: ../mail/em-format-html.c:1424 ../mail/em-format-quote.c:193
-#: ../mail/em-format.c:848 ../mail/em-mailer-prefs.c:83
-#: ../mail/message-list.etspec.h:7 ../mail/message-tag-followup.c:326
+#: mail/em-format-html.c:1424 mail/em-format-quote.c:193 mail/em-format.c:848
+#: mail/em-mailer-prefs.c:83 mail/message-list.etspec.h:7
+#: mail/message-tag-followup.c:326
msgid "From"
msgstr "Nga"
-#: ../mail/em-format-html.c:1424 ../mail/em-format-quote.c:193
-#: ../mail/em-format.c:849 ../mail/em-mailer-prefs.c:84
+#: mail/em-format-html.c:1424 mail/em-format-quote.c:193 mail/em-format.c:849
+#: mail/em-mailer-prefs.c:84
msgid "Reply-To"
msgstr "Përgjigju-Tek"
-#: ../mail/em-format-html.c:1424 ../mail/em-format-quote.c:193
-#: ../mail/em-format.c:850 ../mail/em-mailer-prefs.c:85
-#: ../mail/message-list.etspec.h:14
+#: mail/em-format-html.c:1424 mail/em-format-quote.c:193 mail/em-format.c:850
+#: mail/em-mailer-prefs.c:85 mail/message-list.etspec.h:14
msgid "To"
msgstr "Për"
-#: ../mail/em-format-html.c:1424 ../mail/em-format-quote.c:193
-#: ../mail/em-format.c:851 ../mail/em-mailer-prefs.c:86
+#: mail/em-format-html.c:1424 mail/em-format-quote.c:193 mail/em-format.c:851
+#: mail/em-mailer-prefs.c:86
msgid "Cc"
msgstr "Cc"
-#: ../mail/em-format-html.c:1424 ../mail/em-format-quote.c:193
-#: ../mail/em-format.c:852 ../mail/em-mailer-prefs.c:87
+#: mail/em-format-html.c:1424 mail/em-format-quote.c:193 mail/em-format.c:852
+#: mail/em-mailer-prefs.c:87
msgid "Bcc"
msgstr "Bcc"
#. pseudo-header
-#: ../mail/em-format-html.c:1537 ../mail/em-format-quote.c:315
-#: ../mail/em-mailer-prefs.c:986
+#: mail/em-format-html.c:1537 mail/em-format-quote.c:315
+#: mail/em-mailer-prefs.c:986
msgid "Mailer"
msgstr "Trajtuesi i postës"
#. translators: strftime format for local time equivalent in Date header display, with day
-#: ../mail/em-format-html.c:1564
+#: mail/em-format-html.c:1564
msgid "<I> (%a, %R %Z)</I>"
msgstr "<I> (%a, %R %Z)</I>"
#. translators: strftime format for local time equivalent in Date header display, without day
-#: ../mail/em-format-html.c:1567
+#: mail/em-format-html.c:1567
msgid "<I> (%R %Z)</I>"
msgstr "<I> (%R %Z)</I>"
-#: ../mail/em-format-html.c:1577 ../mail/em-format-quote.c:322
-#: ../mail/em-format.c:854 ../mail/em-mailer-prefs.c:89
-#: ../mail/message-list.etspec.h:2
+#: mail/em-format-html.c:1577 mail/em-format-quote.c:322 mail/em-format.c:854
+#: mail/em-mailer-prefs.c:89 mail/message-list.etspec.h:2
msgid "Date"
msgstr "Data"
-#: ../mail/em-format-html.c:1600 ../mail/em-format.c:855
-#: ../mail/em-mailer-prefs.c:90
+#: mail/em-format-html.c:1600 mail/em-format.c:855 mail/em-mailer-prefs.c:90
msgid "Newsgroups"
msgstr "GrupeLajmesh"
-#: ../mail/em-format.c:1104
+#: mail/em-format.c:1104
#, c-format
msgid "%s attachment"
msgstr "%s bashkangjitur"
-#: ../mail/em-format.c:1143 ../mail/em-format.c:1276
+#: mail/em-format.c:1143 mail/em-format.c:1276
msgid "Could not parse S/MIME message: Unknown error"
msgstr "I pamundur analizimi i mesazhit S/MIME: Gabim i panjohur"
-#: ../mail/em-format.c:1266
+#: mail/em-format.c:1266
msgid "Unsupported encryption type for multipart/encrypted"
msgstr "Lloj i pasuportuar kriptimi për multipart/encrypted"
-#: ../mail/em-format.c:1414
+#: mail/em-format.c:1414
msgid "Could not parse MIME message. Displaying as source."
msgstr "I apmundur analizimi i mesazhit MIME. Po shfaqet si burim."
-#: ../mail/em-format.c:1433
+#: mail/em-format.c:1433
msgid "Unsupported signature format"
msgstr "Format firme i pasuportuar"
-#: ../mail/em-format.c:1441
+#: mail/em-format.c:1441
msgid "Error verifying signature"
msgstr "Gabim gjatë kontrollit të firmës"
-#: ../mail/em-format.c:1441
+#: mail/em-format.c:1441
msgid "Unknown error verifying signature"
msgstr "Gabim i panjohur gjatë verifikimit të firmës"
-#: ../mail/em-junk-filter.c:111
+#: mail/em-junk-filter.c:111
msgid "Spamassassin (built-in)"
msgstr "Spamassassin (built-in)"
-#: ../mail/em-mailer-prefs.c:101
+#: mail/em-mailer-prefs.c:101
msgid "Every time"
msgstr "Në çdo kohë"
-#: ../mail/em-mailer-prefs.c:102
+#: mail/em-mailer-prefs.c:102
msgid "Once per day"
msgstr "Një herë në ditë"
-#: ../mail/em-mailer-prefs.c:103
+#: mail/em-mailer-prefs.c:103
msgid "Once per week"
msgstr "Një herë në javë"
-#: ../mail/em-mailer-prefs.c:104
+#: mail/em-mailer-prefs.c:104
msgid "Once per month"
msgstr "Një herë në muaj"
-#: ../mail/em-migrate.c:1198
+#: mail/em-migrate.c:1198
msgid ""
"The location and hierarchy of the Evolution mailbox folders has changed "
"since Evolution 1.x.\n"
@@ -11349,49 +11273,49 @@ msgstr ""
"\n"
"Durim derisa Evolution të migrojë kartelat tuaja..."
-#: ../mail/em-migrate.c:1632
+#: mail/em-migrate.c:1632
#, c-format
msgid "Unable to create new folder `%s': %s"
msgstr "I pamundur krijimi i kartelës së re `%s': %s"
-#: ../mail/em-migrate.c:1658
+#: mail/em-migrate.c:1658
#, c-format
msgid "Unable to copy folder `%s' to `%s': %s"
msgstr "I pamundur kopjimi i kartelës `%s' tek `%s': %s"
-#: ../mail/em-migrate.c:1843
+#: mail/em-migrate.c:1843
#, c-format
msgid "Unable to scan for existing mailboxes at `%s': %s"
msgstr "I pamundur kërkimi për mailboxe ekzistuese tek `%s': %s"
-#: ../mail/em-migrate.c:2047
+#: mail/em-migrate.c:2047
#, c-format
msgid "Unable to open old POP keep-on-server data `%s': %s"
msgstr "E pamundur hapja e të dhënava të vjetra POP \"lër-në-server\" `%s': %s"
-#: ../mail/em-migrate.c:2061
+#: mail/em-migrate.c:2061
#, c-format
msgid "Unable to create POP3 keep-on-server data directory `%s': %s"
msgstr ""
"I pamundur krijimi i kartelës `%s' me të dhëna POP3 për t'u mbajtur në "
"server: %s"
-#: ../mail/em-migrate.c:2090
+#: mail/em-migrate.c:2090
#, c-format
msgid "Unable to copy POP3 keep-on-server data `%s': %s"
msgstr "I pamundur kopjimi e të dhënave POP3 \"lër-në-server\" `%s': %s"
-#: ../mail/em-migrate.c:2561 ../mail/em-migrate.c:2573
+#: mail/em-migrate.c:2561 mail/em-migrate.c:2573
#, c-format
msgid "Failed to create local mail storage `%s': %s"
msgstr "Krijimi i arkivit lokal të postës `%s' dështoi: %s"
-#: ../mail/em-migrate.c:2693
+#: mail/em-migrate.c:2693
#, c-format
msgid "Unable to create local mail folders at `%s': %s"
msgstr "I pamundur krijimi i kartelave lokale të postës `%s': %s"
-#: ../mail/em-migrate.c:2711
+#: mail/em-migrate.c:2711
msgid ""
"Unable to read settings from previous Evolution install, `evolution/config."
"xmldb' does not exist or is corrupt."
@@ -11399,206 +11323,206 @@ msgstr ""
"I pamundur leximi i rregullimeve nga instalimi i vjetër i Evolution, "
"`evolution/config.xmldb' nuk ekziston ose është i dëmtuar."
-#: ../mail/em-popup.c:382
+#: mail/em-popup.c:382
msgid "Save As..."
msgstr "Ruaj Si..."
-#: ../mail/em-popup.c:401
+#: mail/em-popup.c:401
#, c-format
msgid "untitled_image.%s"
msgstr "figurë_paemër.%s"
-#: ../mail/em-popup.c:495
+#: mail/em-popup.c:495
msgid "Set as _Background"
msgstr "Vendose si _sfond"
-#: ../mail/em-popup.c:497
+#: mail/em-popup.c:497
msgid "_Reply to sender"
msgstr "_Përgjigju dërguesit"
-#: ../mail/em-popup.c:498 ../ui/evolution-mail-message.xml.h:88
+#: mail/em-popup.c:498 ui/evolution-mail-message.xml.h:88
msgid "Reply to _List"
msgstr "Përgjigju _Listës"
-#: ../mail/em-popup.c:549
+#: mail/em-popup.c:549
msgid "_Open Link in Browser"
msgstr "_Hape lidhjen në Shfletues"
-#: ../mail/em-popup.c:550
+#: mail/em-popup.c:550
msgid "_Send New Message To..."
msgstr "Dër_go një mesazh të ri tek..."
-#: ../mail/em-popup.c:551
+#: mail/em-popup.c:551
msgid "_Add to Addressbook"
msgstr "_Shtoje në rubrikë"
-#: ../mail/em-popup.c:666
+#: mail/em-popup.c:666
#, c-format
msgid "Open in %s..."
msgstr "Hap në %s..."
-#: ../mail/em-subscribe-editor.c:611
+#: mail/em-subscribe-editor.c:611
msgid "This store does not support subscriptions, or they are not enabled."
msgstr "Ky arkiv nuk suporton regjistrimet, ose ato nuk janë aktive."
-#: ../mail/em-subscribe-editor.c:640
+#: mail/em-subscribe-editor.c:640
msgid "Subscribed"
msgstr "I regjistruar"
-#: ../mail/em-subscribe-editor.c:644
+#: mail/em-subscribe-editor.c:644
msgid "Folder"
msgstr "Kartelë"
#. FIXME: This is just to get the shadow, is there a better way?
-#: ../mail/em-subscribe-editor.c:859
+#: mail/em-subscribe-editor.c:859
msgid "Please select a server."
msgstr "Ju lutem zgjidhni një server."
-#: ../mail/em-subscribe-editor.c:880
+#: mail/em-subscribe-editor.c:880
msgid "No server has been selected"
msgstr "Nuk është zgjedhur asnjë server"
-#: ../mail/em-utils.c:105
+#: mail/em-utils.c:105
msgid "Don't show this message again."
msgstr "Mos e shfaq më këtë mesazh."
-#: ../mail/em-utils.c:294
+#: mail/em-utils.c:294
msgid "Filters"
msgstr "Filtrat"
-#: ../mail/em-utils.c:434
+#: mail/em-utils.c:434
msgid "message"
msgstr "mesazh"
-#: ../mail/em-utils.c:543
+#: mail/em-utils.c:543
msgid "Save Message..."
msgstr "Ruaj mesazhin..."
-#: ../mail/em-utils.c:592
+#: mail/em-utils.c:592
msgid "Add address"
msgstr "Shto adresën"
#. Drop filename for messages from a mailbox
-#: ../mail/em-utils.c:1071
+#: mail/em-utils.c:1071
#, c-format
msgid "Messages from %s"
msgstr "Mesazhet nga %s"
-#: ../mail/em-vfolder-editor.c:104
+#: mail/em-vfolder-editor.c:104
msgid "v_Folders"
msgstr "Kartela v_Folder"
-#: ../mail/em-vfolder-rule.c:574
+#: mail/em-vfolder-rule.c:574
msgid "vFolder source"
msgstr "Origjina e kartelës vFolder"
-#: ../mail/evolution-mail.schemas.in.in.h:1
+#: mail/evolution-mail.schemas.in.in.h:1
msgid "Automatic link recognition"
msgstr "Kontrolli automatik i lidhjeve"
-#: ../mail/evolution-mail.schemas.in.in.h:2
+#: mail/evolution-mail.schemas.in.in.h:2
msgid "Automatic smiley recognition"
msgstr "Kontrolli automatik i smiley"
-#: ../mail/evolution-mail.schemas.in.in.h:3
+#: mail/evolution-mail.schemas.in.in.h:3
msgid "Check incoming mail being junk"
msgstr "Kontrollo që posta në ardhje të mos përmbajë material për t'u refuzuar"
-#: ../mail/evolution-mail.schemas.in.in.h:4
+#: mail/evolution-mail.schemas.in.in.h:4
msgid "Citation highlight color"
msgstr "Ngjyra e vënies në dukje të citimeve"
-#: ../mail/evolution-mail.schemas.in.in.h:5
+#: mail/evolution-mail.schemas.in.in.h:5
msgid "Citation highlight color."
msgstr "Ngjyra e vënies në dukje të citimeve."
-#: ../mail/evolution-mail.schemas.in.in.h:6
+#: mail/evolution-mail.schemas.in.in.h:6
msgid "Composer Window default height"
msgstr "Lartësia e dritares së prezgjedhur të kompozuesit"
-#: ../mail/evolution-mail.schemas.in.in.h:7
+#: mail/evolution-mail.schemas.in.in.h:7
msgid "Composer Window default width"
msgstr "Gjerësia e dritares së prezgjedhur të kompozuesit"
-#: ../mail/evolution-mail.schemas.in.in.h:8
+#: mail/evolution-mail.schemas.in.in.h:8
msgid "Default charset in which to compose messages"
msgstr "Kodifikimi i prezgjedhur për hartimin e mesazheve"
-#: ../mail/evolution-mail.schemas.in.in.h:9
+#: mail/evolution-mail.schemas.in.in.h:9
msgid "Default charset in which to compose messages."
msgstr "Kodifikimi i prezgjedhur për hartimin e mesazheve."
-#: ../mail/evolution-mail.schemas.in.in.h:10
+#: mail/evolution-mail.schemas.in.in.h:10
msgid "Default charset in which to display messages"
msgstr "Kodifikimi i prezgjedhur për shfaqjen e mesazheve"
-#: ../mail/evolution-mail.schemas.in.in.h:11
+#: mail/evolution-mail.schemas.in.in.h:11
msgid "Default charset in which to display messages."
msgstr "Kodifikimi i prezgjedhur për shfaqjen e mesazheve."
-#: ../mail/evolution-mail.schemas.in.in.h:12
+#: mail/evolution-mail.schemas.in.in.h:12
msgid "Default forward style"
msgstr "Stili i prezgjedhur i përcjelljes"
-#: ../mail/evolution-mail.schemas.in.in.h:13
+#: mail/evolution-mail.schemas.in.in.h:13
msgid "Default height of the Composer Window"
msgstr "Lartësia e prezgjedhur e dritares së hartuesit"
-#: ../mail/evolution-mail.schemas.in.in.h:14
+#: mail/evolution-mail.schemas.in.in.h:14
msgid "Default height of the Message Window"
msgstr "Lartësia e prezgjedhur e dritares së mesazhit"
-#: ../mail/evolution-mail.schemas.in.in.h:15
+#: mail/evolution-mail.schemas.in.in.h:15
msgid "Default height of the Subscribe dialog"
msgstr "Lartësia e prezgjedhur e dritares së dialogut të regjistrimit"
-#: ../mail/evolution-mail.schemas.in.in.h:16
+#: mail/evolution-mail.schemas.in.in.h:16
msgid "Default reply style"
msgstr "Stili i prezgjedhur i përgjigjes"
-#: ../mail/evolution-mail.schemas.in.in.h:17
+#: mail/evolution-mail.schemas.in.in.h:17
msgid "Default width of the Composer Window"
msgstr "Gjerësia e prezgjedhur e dritares së hartuesit"
-#: ../mail/evolution-mail.schemas.in.in.h:18
+#: mail/evolution-mail.schemas.in.in.h:18
msgid "Default width of the Message Window"
msgstr "Gjerësia e prezgjedhur e dritares së mesazhit"
-#: ../mail/evolution-mail.schemas.in.in.h:19
+#: mail/evolution-mail.schemas.in.in.h:19
msgid "Default width of the Subscribe dialog"
msgstr "Gjerësia e prezgjedhur e dritares së dialogut të regjistrimit"
-#: ../mail/evolution-mail.schemas.in.in.h:20
+#: mail/evolution-mail.schemas.in.in.h:20
msgid "Draw spelling error indicators on words as you type."
msgstr "Vizato treguesit e gabimeve drejtshkrimore tek fjalët që shkruani."
-#: ../mail/evolution-mail.schemas.in.in.h:21
+#: mail/evolution-mail.schemas.in.in.h:21
msgid "Empty Trash folders on exit"
msgstr "Zbraz kartelat e koshit kur mbyllet programi"
-#: ../mail/evolution-mail.schemas.in.in.h:22
+#: mail/evolution-mail.schemas.in.in.h:22
msgid "Empty all Trash folders when exiting Evolution."
msgstr "Zraz të kartelat e koshit kur del nga Evolution."
-#: ../mail/evolution-mail.schemas.in.in.h:23
+#: mail/evolution-mail.schemas.in.in.h:23
msgid "Enable caret mode, so that you can see a cursor when reading mail."
msgstr ""
"Aktivo modalitetin \"vizore\", në këtë menyrë do të shihni një kursor gjatë "
"leximit të një mesazhi."
-#: ../mail/evolution-mail.schemas.in.in.h:24
+#: mail/evolution-mail.schemas.in.in.h:24
msgid "Enable/disable caret mode"
msgstr "Aktivo/ç'aktivo modalitetin vizore"
-#: ../mail/evolution-mail.schemas.in.in.h:25
+#: mail/evolution-mail.schemas.in.in.h:25
msgid "Height of the message-list pane"
msgstr "Lartësia e panelit me listën e mesazheve"
-#: ../mail/evolution-mail.schemas.in.in.h:26
+#: mail/evolution-mail.schemas.in.in.h:26
msgid "Height of the message-list pane."
msgstr "Lartësia e panelit me listën e mesazheve."
-#: ../mail/evolution-mail.schemas.in.in.h:27
+#: mail/evolution-mail.schemas.in.in.h:27
msgid ""
"If a user tries to open 10 or more messages at one time, ask the user if "
"they really want to do it."
@@ -11606,7 +11530,7 @@ msgstr ""
"Nëse një përdorues përpiqet të hapë 10 apo më shumë mesazhe njëkohësisht, "
"pyet përdoruesin nëse me të vërtetë dëshiron një gjë të tillë."
-#: ../mail/evolution-mail.schemas.in.in.h:28
+#: mail/evolution-mail.schemas.in.in.h:28
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 "
@@ -11617,23 +11541,23 @@ msgstr ""
"bonobo-component nga databaza e llojeve të mime të GNOME mund të përdoret "
"për të shfaqur përmbajtjen."
-#: ../mail/evolution-mail.schemas.in.in.h:29
+#: mail/evolution-mail.schemas.in.in.h:29
msgid "Last time empty trash was run"
msgstr "Hera e fundit kur është zbrazur koshi"
-#: ../mail/evolution-mail.schemas.in.in.h:30
+#: mail/evolution-mail.schemas.in.in.h:30
msgid "List of Labels and their associated colors"
msgstr "Lista e etiketave dhe ngjyrat relative"
-#: ../mail/evolution-mail.schemas.in.in.h:31
+#: mail/evolution-mail.schemas.in.in.h:31
msgid "List of accepted licenses"
msgstr "Lista e liçencave të pranuara"
-#: ../mail/evolution-mail.schemas.in.in.h:32
+#: mail/evolution-mail.schemas.in.in.h:32
msgid "List of accounts"
msgstr "Lista e llogarive"
-#: ../mail/evolution-mail.schemas.in.in.h:33
+#: mail/evolution-mail.schemas.in.in.h:33
msgid ""
"List of accounts known to the mail component of Evolution. The list contains "
"strings naming subdirectories relative to /apps/evolution/mail/accounts."
@@ -11641,11 +11565,11 @@ msgstr ""
"Lista e llogarive të njohura nga komponenti mail i Evolution. Lista përmban "
"vlerat me emrat e nëndirektorive relative me /apps/evolution/mail/accounts."
-#: ../mail/evolution-mail.schemas.in.in.h:34
+#: mail/evolution-mail.schemas.in.in.h:34
msgid "List of custom headers and whether they are enabled."
msgstr "Lista me headers e personalizuar dhe nëse ato janë aktivë."
-#: ../mail/evolution-mail.schemas.in.in.h:35
+#: mail/evolution-mail.schemas.in.in.h:35
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."
@@ -11653,21 +11577,21 @@ msgstr ""
"Lista e etiketave të njohura nga komponenti mail i Evolution. Lista përmban "
"vlerat me emri:ngjyra ku ngjyra përdor kodifikimin hex të HTML"
-#: ../mail/evolution-mail.schemas.in.in.h:36
+#: mail/evolution-mail.schemas.in.in.h:36
msgid "List of mime types to check for bonobo component viewers"
msgstr ""
"Lista e llojeve mime për të cilët duhet kontrolluar për shikuesit e "
"komponentëve bonobo"
-#: ../mail/evolution-mail.schemas.in.in.h:37
+#: mail/evolution-mail.schemas.in.in.h:37
msgid "List of protocol names whose license has been accepted."
msgstr "Lista me emrat e protokollëve për të cilët është pranuar liçenca."
-#: ../mail/evolution-mail.schemas.in.in.h:38
+#: mail/evolution-mail.schemas.in.in.h:38
msgid "Load images for HTML messages over http"
msgstr "Ngarko figurat për mesazhet HTML over http"
-#: ../mail/evolution-mail.schemas.in.in.h:39
+#: mail/evolution-mail.schemas.in.in.h:39
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 - "
@@ -11677,95 +11601,95 @@ msgstr ""
"Asnjëherë mos ngarko figurat e internet 1 - Ngarko figurat nëse dërguesi "
"rezulton në rubrikë 2 - Ngarko gjithmonë figurat nga internet"
-#: ../mail/evolution-mail.schemas.in.in.h:40
+#: mail/evolution-mail.schemas.in.in.h:40
msgid "Log filter actions"
msgstr "Veprimet e filtrimit të log"
-#: ../mail/evolution-mail.schemas.in.in.h:41
+#: mail/evolution-mail.schemas.in.in.h:41
msgid "Log filter actions to the specified log file."
msgstr "Regjistron veprimet e filtrit tek file i specifikuar log."
-#: ../mail/evolution-mail.schemas.in.in.h:42
+#: mail/evolution-mail.schemas.in.in.h:42
msgid "Logfile to log filter actions"
msgstr "File log për regjistrimin e veprimeve të filtrit"
-#: ../mail/evolution-mail.schemas.in.in.h:43
+#: mail/evolution-mail.schemas.in.in.h:43
msgid "Logfile to log filter actions."
msgstr "File log për regjistrimin e veprimeve të filtrit."
-#: ../mail/evolution-mail.schemas.in.in.h:44
+#: mail/evolution-mail.schemas.in.in.h:44
msgid "Mark as Seen after specified timeout"
msgstr "Shëno si të \"Shikuar\" mbas një kohe të caktuar"
-#: ../mail/evolution-mail.schemas.in.in.h:45
+#: mail/evolution-mail.schemas.in.in.h:45
msgid "Mark as Seen after specified timeout."
msgstr "Shëno si të \"Shikuar\" mbas një kohe të caktuar."
-#: ../mail/evolution-mail.schemas.in.in.h:46
+#: mail/evolution-mail.schemas.in.in.h:46
msgid "Mark citations in the message \"Preview\""
msgstr "Shëno citimet tek \"Pamja e Parë\" e mesazhit"
-#: ../mail/evolution-mail.schemas.in.in.h:47
+#: mail/evolution-mail.schemas.in.in.h:47
msgid "Mark citations in the message \"Preview\"."
msgstr "Shëno citimet tek \"Pamja e Parë\" e mesazhit."
-#: ../mail/evolution-mail.schemas.in.in.h:48
+#: mail/evolution-mail.schemas.in.in.h:48
msgid "Message Window default height"
msgstr "Lartësia e prezgjedhur e dritares së mesazhit"
-#: ../mail/evolution-mail.schemas.in.in.h:49
+#: mail/evolution-mail.schemas.in.in.h:49
msgid "Message Window default width"
msgstr "Gjerësia e prezgjedhur e dritares së mesazhit"
-#: ../mail/evolution-mail.schemas.in.in.h:50
+#: mail/evolution-mail.schemas.in.in.h:50
msgid "Message-display style (normal, full headers, source)"
msgstr "Stili i shfaqjes së mesazhit (normal, me gjithë tituj, burimi)"
-#: ../mail/evolution-mail.schemas.in.in.h:51
+#: mail/evolution-mail.schemas.in.in.h:51
msgid "Minimum days between emptying the trash on exit"
msgstr "Numri minimum i ditëve para se të zbrazet koshi kur mbyllet programi"
-#: ../mail/evolution-mail.schemas.in.in.h:52
+#: mail/evolution-mail.schemas.in.in.h:52
msgid "Minimum time between emptying the trash on exit, in days."
msgstr "Koha minimum para zbrazjes së koshit në dalje, në ditë."
-#: ../mail/evolution-mail.schemas.in.in.h:53
+#: mail/evolution-mail.schemas.in.in.h:53
msgid "New Mail Notify sound file"
msgstr "File me tingullin për njoftimin e mesazheve të rinj"
-#: ../mail/evolution-mail.schemas.in.in.h:54
+#: mail/evolution-mail.schemas.in.in.h:54
msgid "New Mail Notify type"
msgstr "Lloji i njoftimit të mesazheve të rinj"
-#: ../mail/evolution-mail.schemas.in.in.h:55
+#: mail/evolution-mail.schemas.in.in.h:55
msgid "Prompt on empty subject"
msgstr "Tërhiq vëmendjen kur subjekti është bosh"
-#: ../mail/evolution-mail.schemas.in.in.h:56
+#: mail/evolution-mail.schemas.in.in.h:56
msgid "Prompt the user when he or she tries to expunge a folder."
msgstr "Paralajmëro përdoruesin nëse ai apo ajo përpiqen të fshijnë një kartelë."
-#: ../mail/evolution-mail.schemas.in.in.h:57
+#: mail/evolution-mail.schemas.in.in.h:57
msgid "Prompt the user when he or she tries to send a message without a Subject."
msgstr ""
"Paralajmëro përdoruesin nëse ai apo ajo përpiqen të dërgojnë një mesazh pa "
"subjekt."
-#: ../mail/evolution-mail.schemas.in.in.h:58
+#: mail/evolution-mail.schemas.in.in.h:58
msgid "Prompt when user expunges"
msgstr "Paralajmërim kur përdoruesi fshin"
-#: ../mail/evolution-mail.schemas.in.in.h:59
+#: mail/evolution-mail.schemas.in.in.h:59
msgid "Prompt when user only fills Bcc"
msgstr "Paralajmërim nëse përdoruesi plotëson vetëm Bcc"
-#: ../mail/evolution-mail.schemas.in.in.h:60
+#: mail/evolution-mail.schemas.in.in.h:60
msgid "Prompt when user tries to open 10 or more messages at once"
msgstr ""
"Paralajmëro kur përdoruesi kërkon të hapë 10 apo më shumë mesazhe "
"njëkohësisht"
-#: ../mail/evolution-mail.schemas.in.in.h:61
+#: mail/evolution-mail.schemas.in.in.h:61
msgid ""
"Prompt when user tries to send HTML mail to recipients that may not want to "
"receive HTML mail."
@@ -11773,99 +11697,99 @@ msgstr ""
"Paralajmëro kur përdoruesi kërkon t'u dërgojë mesazhe HTML marrësve që nuk "
"dëshirojnë të marrin mesazhe në HTML."
-#: ../mail/evolution-mail.schemas.in.in.h:62
+#: mail/evolution-mail.schemas.in.in.h:62
msgid "Prompt when user tries to send a message with no To or Cc recipients."
msgstr ""
"Paralajmëro kur përdoruesi kërkon të dërgojë një mesazh pa përmbajtje tek "
"\"Për\" apo \"Cc\"."
-#: ../mail/evolution-mail.schemas.in.in.h:63
+#: mail/evolution-mail.schemas.in.in.h:63
msgid "Prompt when user tries to send unwanted HTML"
msgstr "Paralajmërim kur përdoruesi kërkon të dërgojë HTML të padëshiruar"
-#: ../mail/evolution-mail.schemas.in.in.h:64
+#: mail/evolution-mail.schemas.in.in.h:64
msgid "Recognize links in text and replace them."
msgstr "Kontrollo lidhjet në tekst dhe zëvendësoi."
-#: ../mail/evolution-mail.schemas.in.in.h:65
+#: mail/evolution-mail.schemas.in.in.h:65
msgid "Recognize smileys in text and replace them with images."
msgstr "Kontrollo smiles në tekst dhe zëvendësoi me figurat."
-#: ../mail/evolution-mail.schemas.in.in.h:66
+#: mail/evolution-mail.schemas.in.in.h:66
msgid "Run junk test on incoming mail"
msgstr "Vër në funksion provën për material për t'u refuzuar tek mesazhet në ardhje"
-#: ../mail/evolution-mail.schemas.in.in.h:67
+#: mail/evolution-mail.schemas.in.in.h:67
msgid "Send HTML mail by default"
msgstr "Dërgo postën gjithmonë në HTML"
-#: ../mail/evolution-mail.schemas.in.in.h:68
+#: mail/evolution-mail.schemas.in.in.h:68
msgid "Send HTML mail by default."
msgstr "Dërgo postën në HTML si menyrë e prezgjedhur."
-#: ../mail/evolution-mail.schemas.in.in.h:69
+#: mail/evolution-mail.schemas.in.in.h:69
msgid "Show Animations"
msgstr "Shfaq kontaktet"
-#: ../mail/evolution-mail.schemas.in.in.h:70
+#: mail/evolution-mail.schemas.in.in.h:70
msgid "Show animated images as animations."
msgstr "Shfaq imazhet e animuar si animime."
-#: ../mail/evolution-mail.schemas.in.in.h:71
+#: mail/evolution-mail.schemas.in.in.h:71
msgid "Show deleted messages (with a strike-through) in the message-list."
msgstr "Shfaq mesazhet e fshira (me përvizim) tek lista e mesazheve."
-#: ../mail/evolution-mail.schemas.in.in.h:72
+#: mail/evolution-mail.schemas.in.in.h:72
msgid "Show deleted messages in the message-list"
msgstr "Shfaq mesazhet e fshira tek lista e mesazheve"
-#: ../mail/evolution-mail.schemas.in.in.h:73
+#: mail/evolution-mail.schemas.in.in.h:73
msgid "Show the \"Preview\" pane"
msgstr "Shfaq panelin \"Pamja e Parë\""
-#: ../mail/evolution-mail.schemas.in.in.h:74
+#: mail/evolution-mail.schemas.in.in.h:74
msgid "Show the \"Preview\" pane."
msgstr "Shfaq panelin \"Pamja e Parë\"."
-#: ../mail/evolution-mail.schemas.in.in.h:75
+#: mail/evolution-mail.schemas.in.in.h:75
msgid "Sound file to play when new mail arrives."
msgstr "File audio që duhet ekzekutuar kur arrijnë mesazhe të rinj."
-#: ../mail/evolution-mail.schemas.in.in.h:76
+#: mail/evolution-mail.schemas.in.in.h:76
msgid "Specifies the type of New Mail Notification the user wishes to use."
msgstr ""
"Specifikon llojin e njoftimit të mesazheve të rinj që përdoruesi dëshiron të "
"përdorë."
-#: ../mail/evolution-mail.schemas.in.in.h:77
+#: mail/evolution-mail.schemas.in.in.h:77
msgid "Spell check inline"
msgstr "Kontroll direkt drejtshkrimi"
-#: ../mail/evolution-mail.schemas.in.in.h:78
+#: mail/evolution-mail.schemas.in.in.h:78
msgid "Subscribe dialog default height"
msgstr "Lartësia e prezgjedhur e dritares së dialogut të regjistrimit"
-#: ../mail/evolution-mail.schemas.in.in.h:79
+#: mail/evolution-mail.schemas.in.in.h:79
msgid "Subscribe dialog default width"
msgstr "Gjerësia e prezgjedhur e dritares së dialogut të regjistrimit"
-#: ../mail/evolution-mail.schemas.in.in.h:80
+#: mail/evolution-mail.schemas.in.in.h:80
msgid "Terminal font"
msgstr "Gërmat e terminalit"
-#: ../mail/evolution-mail.schemas.in.in.h:81
+#: mail/evolution-mail.schemas.in.in.h:81
msgid "The last time empty trash was run, in days since the epoch."
msgstr "Hera e fundit që është zbrazur koshi, shprehur në ditë."
-#: ../mail/evolution-mail.schemas.in.in.h:82
+#: mail/evolution-mail.schemas.in.in.h:82
msgid "The terminal font for mail display"
msgstr "Gërmat e terminalit për shfaqjen e mesazhit"
-#: ../mail/evolution-mail.schemas.in.in.h:83
+#: mail/evolution-mail.schemas.in.in.h:83
msgid "The variable width font for mail display"
msgstr "Gjerësia e ndryshueshme e gërmave për shfaqjen e mesazheve"
-#: ../mail/evolution-mail.schemas.in.in.h:84
+#: mail/evolution-mail.schemas.in.in.h:84
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;"
@@ -11877,99 +11801,99 @@ msgstr ""
"header enabled&gt; - cakto aktiv nëse header duhet shfaqur gjatë shikimit të "
"mesazhit."
-#: ../mail/evolution-mail.schemas.in.in.h:85
+#: mail/evolution-mail.schemas.in.in.h:85
msgid "Thread the message list."
msgstr "Rregullo sipas temave listën e mesazheve."
-#: ../mail/evolution-mail.schemas.in.in.h:86
+#: mail/evolution-mail.schemas.in.in.h:86
msgid "Thread the message-list"
msgstr "Rregullo sipas temave listën e mesazheve"
-#: ../mail/evolution-mail.schemas.in.in.h:87
+#: mail/evolution-mail.schemas.in.in.h:87
msgid "Thread the message-list based on Subject"
msgstr "Rregullo sipas temave, bazuar në subjekt, listën e mesazheve"
-#: ../mail/evolution-mail.schemas.in.in.h:88
+#: mail/evolution-mail.schemas.in.in.h:88
msgid "Timeout for marking message as Seen"
msgstr "Periudha e kohës për të shënuar mesazhin si të \"Shikuar\""
-#: ../mail/evolution-mail.schemas.in.in.h:89
+#: mail/evolution-mail.schemas.in.in.h:89
msgid "Timeout for marking message as Seen."
msgstr "Periudha e kohës për të shënuar mesazhin si të \"Shikuar\"."
-#: ../mail/evolution-mail.schemas.in.in.h:90
+#: mail/evolution-mail.schemas.in.in.h:90
msgid "UID string of the default account."
msgstr "Vlera UID për llogarinë e prezgjedhur."
-#: ../mail/evolution-mail.schemas.in.in.h:91
+#: mail/evolution-mail.schemas.in.in.h:91
msgid "Use Spamassassin daemon and client"
msgstr "Përdor shërbimin dhe klientin Spamassassin"
-#: ../mail/evolution-mail.schemas.in.in.h:92
+#: mail/evolution-mail.schemas.in.in.h:92
msgid "Use Spamassassin daemon and client (spamc/spamd)"
msgstr "Përdor shërbimin dhe klientin Spamassassin (spamc/spamd)"
-#: ../mail/evolution-mail.schemas.in.in.h:93
+#: mail/evolution-mail.schemas.in.in.h:93
msgid "Use custom fonts"
msgstr "Përdor gërma të personalizuara"
-#: ../mail/evolution-mail.schemas.in.in.h:94
+#: mail/evolution-mail.schemas.in.in.h:94
msgid "Use custom fonts for displaying mail"
msgstr "Përdor gërma të personalizuara për të shfaqur mesazhet"
-#: ../mail/evolution-mail.schemas.in.in.h:95
+#: mail/evolution-mail.schemas.in.in.h:95
msgid "Use only local spam tests."
msgstr "Përdor vetëm testet spam lokalë."
-#: ../mail/evolution-mail.schemas.in.in.h:96
+#: mail/evolution-mail.schemas.in.in.h:96
msgid "Use only the local spam tests (no DNS)."
msgstr "Përdor vetëm testet spam lokalë (jo DNS)."
-#: ../mail/evolution-mail.schemas.in.in.h:97
+#: mail/evolution-mail.schemas.in.in.h:97
msgid "Variable width font"
msgstr "Gjerësia e ndryshueshme e gërmave"
-#: ../mail/evolution-mail.schemas.in.in.h:98
+#: mail/evolution-mail.schemas.in.in.h:98
msgid "View/Bcc menu item is checked"
msgstr "Është zgjedhur elementi i menusë Shfaq/Bcc"
-#: ../mail/evolution-mail.schemas.in.in.h:99
+#: mail/evolution-mail.schemas.in.in.h:99
msgid "View/Bcc menu item is checked."
msgstr "Është zgjedhur elementi i menusë Shfaq/Bcc."
-#: ../mail/evolution-mail.schemas.in.in.h:100
+#: mail/evolution-mail.schemas.in.in.h:100
msgid "View/Cc menu item is checked"
msgstr "Është zgjedhur elementi i menusë Shfaq/Cc"
-#: ../mail/evolution-mail.schemas.in.in.h:101
+#: mail/evolution-mail.schemas.in.in.h:101
msgid "View/Cc menu item is checked."
msgstr "Është zgjedhur elementi i menusë Shfaq/Cc."
-#: ../mail/evolution-mail.schemas.in.in.h:102
+#: mail/evolution-mail.schemas.in.in.h:102
msgid "View/From menu item is checked"
msgstr "Është zgjedhur elementi i menusë Shfaq/Nga"
-#: ../mail/evolution-mail.schemas.in.in.h:103
+#: mail/evolution-mail.schemas.in.in.h:103
msgid "View/From menu item is checked."
msgstr "Është zgjedhur elementi i menusë Shfaq/Nga."
-#: ../mail/evolution-mail.schemas.in.in.h:104
+#: mail/evolution-mail.schemas.in.in.h:104
msgid "View/PostTo menu item is checked"
msgstr "Është zgjedhur elementi i menusë Shfaq/Dërgo tek"
-#: ../mail/evolution-mail.schemas.in.in.h:105
+#: mail/evolution-mail.schemas.in.in.h:105
msgid "View/PostTo menu item is checked."
msgstr "Është zgjedhur elementi i menusë Shfaq/Dërgo tek."
-#: ../mail/evolution-mail.schemas.in.in.h:106
+#: mail/evolution-mail.schemas.in.in.h:106
msgid "View/ReplyTo menu item is checked"
msgstr "Është zgjedhur elementi i menusë Shfaq/Përgjigju tek"
-#: ../mail/evolution-mail.schemas.in.in.h:107
+#: mail/evolution-mail.schemas.in.in.h:107
msgid "View/ReplyTo menu item is checked."
msgstr "Është zgjedhur elementi i menusë Shfaq/Përgjigju tek."
-#: ../mail/evolution-mail.schemas.in.in.h:108
+#: mail/evolution-mail.schemas.in.in.h:108
msgid ""
"Whether or not to fall back on threading by subjects when the messages do "
"not contain In-Reply-To or References headers."
@@ -11977,67 +11901,65 @@ msgstr ""
"Rivendos listën për tema në bazë të subjektit nëse mesazhet nuk përmbajnë "
"headers Në-Përgjigje-Të apo Riferimentet."
-#: ../mail/evolution-mail.schemas.in.in.h:109
+#: mail/evolution-mail.schemas.in.in.h:109
msgid "port for starting user runned spamd"
msgstr "porta për të nisur spamd e filluar nga përdoruesi"
-#: ../mail/evolution-mail.schemas.in.in.h:110
+#: mail/evolution-mail.schemas.in.in.h:110
msgid "spamd port"
msgstr "porta e spamd"
-#: ../mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:1
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:1
msgid "Evolution Elm importer"
msgstr "Importuesi nga Elm i Evolution"
-#: ../mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:2
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:2
msgid "Evolution Netscape Mail importer"
msgstr "Importuesi i mesazheve të Netscape i Evolution"
-#: ../mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:3
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:3
msgid "Evolution Outlook Express 4 importer"
msgstr "Importuesi nga Outlook Express 4 i Evolution"
-#: ../mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:4
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:4
msgid "Evolution Pine importer"
msgstr "Importuesi nga Pine i Evolution"
-#: ../mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:5
+#: mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:5
msgid "Evolution mbox importer"
msgstr "Importuesi nga mbox i Evolution"
-#: ../mail/importers/GNOME_Evolution_Mail_Importers.server.in.in.h:6
+#: 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
+#: 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
+#: mail/importers/elm-importer.c:88
msgid "Evolution is importing your old Elm mail"
msgstr "Evolution është duke importuar mesazhet tuaj të vjetër Elm"
-#: ../mail/importers/elm-importer.c:89
-#: ../mail/importers/evolution-mbox-importer.c:225
-#: ../mail/importers/evolution-outlook-importer.c:259
-#: ../mail/importers/netscape-importer.c:1251
-#: ../mail/importers/pine-importer.c:117
+#: mail/importers/elm-importer.c:89
+#: mail/importers/evolution-mbox-importer.c:225
+#: mail/importers/evolution-outlook-importer.c:259
+#: mail/importers/netscape-importer.c:1251 mail/importers/pine-importer.c:117
msgid "Importing..."
msgstr "Duke importuar..."
-#: ../mail/importers/elm-importer.c:91
-#: ../mail/importers/evolution-mbox-importer.c:227
-#: ../mail/importers/evolution-outlook-importer.c:261
-#: ../mail/importers/netscape-importer.c:1253
-#: ../mail/importers/pine-importer.c:119
+#: mail/importers/elm-importer.c:91
+#: mail/importers/evolution-mbox-importer.c:227
+#: mail/importers/evolution-outlook-importer.c:261
+#: mail/importers/netscape-importer.c:1253 mail/importers/pine-importer.c:119
msgid "Please wait"
msgstr "Ju lutem prisni"
-#: ../mail/importers/elm-importer.c:244
+#: mail/importers/elm-importer.c:244
msgid "Importing Elm data"
msgstr "Duke importuar të dhënat Elm"
-#: ../mail/importers/elm-importer.c:436
+#: mail/importers/elm-importer.c:436
msgid ""
"Evolution has found Elm mail files\n"
"Would you like to import them into Evolution?"
@@ -12045,43 +11967,43 @@ msgstr ""
"Evolution ka gjetur files mail Elm\n"
"Dëshironi t'i importoni nën Evolution?"
-#: ../mail/importers/elm-importer.c:444
+#: mail/importers/elm-importer.c:444
msgid "Elm"
msgstr "Elm"
-#: ../mail/importers/evolution-mbox-importer.c:117
-#: ../mail/importers/evolution-outlook-importer.c:131
+#: mail/importers/evolution-mbox-importer.c:117
+#: mail/importers/evolution-outlook-importer.c:131
msgid "Destination folder:"
msgstr "Kartela e destinuar:"
-#: ../mail/importers/evolution-mbox-importer.c:120
-#: ../mail/importers/evolution-outlook-importer.c:134
+#: mail/importers/evolution-mbox-importer.c:120
+#: mail/importers/evolution-outlook-importer.c:134
msgid "Select folder to import into"
msgstr "Zgjidh kartelën ku do të importohen"
-#: ../mail/importers/evolution-mbox-importer.c:223
-#: ../mail/importers/evolution-outlook-importer.c:257
-#: ../mail/importers/mail-importer.c:226
+#: mail/importers/evolution-mbox-importer.c:223
+#: mail/importers/evolution-outlook-importer.c:257
+#: mail/importers/mail-importer.c:226
#, c-format
msgid "Importing `%s'"
msgstr "Duke importuar `%s'"
-#: ../mail/importers/evolution-outlook-importer.c:305
-#: ../mail/importers/mail-importer.c:140
+#: mail/importers/evolution-outlook-importer.c:305
+#: mail/importers/mail-importer.c:140
msgid "Importing mailbox"
msgstr "Duke importuar mailbox"
-#: ../mail/importers/mail-importer.c:363
+#: mail/importers/mail-importer.c:363
#, c-format
msgid "Scanning %s"
msgstr "Duke kontrolluar %s"
-#: ../mail/importers/netscape-importer.c:73
+#: mail/importers/netscape-importer.c:73
#, c-format
msgid "Priority Filter \"%s\""
msgstr "Filtri prioritetit \"%s\""
-#: ../mail/importers/netscape-importer.c:662
+#: 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"
@@ -12107,7 +12029,7 @@ msgstr ""
"përdorin pikët në vend të prioritetit. Kontrollo filtrat e\n"
"importuar për t'u siguruar që gjithçka punon sikurse pritet."
-#: ../mail/importers/netscape-importer.c:686
+#: mail/importers/netscape-importer.c:686
msgid ""
"Some of your Netscape email filters use\n"
"the \"Ignore Thread\" or \"Watch Thread\"\n"
@@ -12119,7 +12041,7 @@ msgstr ""
"që nuk suportohet në Evolution. Këto filtra do të\n"
"eleminohen."
-#: ../mail/importers/netscape-importer.c:703
+#: 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"
@@ -12133,23 +12055,23 @@ msgstr ""
"ndryshuar për të testuar nëse ajo vlerë është prezente\n"
"apo jo në tekstin e mesazhit."
-#: ../mail/importers/netscape-importer.c:1250
+#: mail/importers/netscape-importer.c:1250
msgid "Evolution is importing your old Netscape data"
msgstr "Evolution është duke importuar të dhënat tuaj të vjetra nga Netscape"
-#: ../mail/importers/netscape-importer.c:1707
+#: mail/importers/netscape-importer.c:1707
msgid "Importing Netscape data"
msgstr "Duke importuar të dhënat nga Netscape"
-#: ../mail/importers/netscape-importer.c:1907
+#: mail/importers/netscape-importer.c:1907
msgid "Settings"
msgstr "Rregullimet"
-#: ../mail/importers/netscape-importer.c:1912
+#: mail/importers/netscape-importer.c:1912
msgid "Mail Filters"
msgstr "Filtrat e mesazheve"
-#: ../mail/importers/netscape-importer.c:1933
+#: mail/importers/netscape-importer.c:1933
msgid ""
"Evolution has found Netscape mail files.\n"
"Would you like them to be imported into Evolution?"
@@ -12157,15 +12079,15 @@ msgstr ""
"Evolution ka gjetur files mail të Netscape.\n"
"Dëshironi t'i importoni nën Evolution?"
-#: ../mail/importers/pine-importer.c:116
+#: mail/importers/pine-importer.c:116
msgid "Evolution is importing your old Pine data"
msgstr "Evolution është duke importuar të dhënat tuaja të vjetra të Pine"
-#: ../mail/importers/pine-importer.c:314
+#: mail/importers/pine-importer.c:314
msgid "Importing Pine data"
msgstr "Duke importuar të dhënat e Pine"
-#: ../mail/importers/pine-importer.c:498
+#: mail/importers/pine-importer.c:498
msgid ""
"Evolution has found Pine mail files.\n"
"Would you like to import them into Evolution?"
@@ -12173,337 +12095,336 @@ msgstr ""
"Evolution ka gjetur files mail të Pine.\n"
"Dëshironi t'i importoni nën Evolution?"
-#: ../mail/importers/pine-importer.c:506
+#: mail/importers/pine-importer.c:506
msgid "Pine"
msgstr "Pine"
-#: ../mail/mail-autofilter.c:74
+#: mail/mail-autofilter.c:74
#, c-format
msgid "Mail to %s"
msgstr "Mesazh për %s"
-#: ../mail/mail-autofilter.c:238 ../mail/mail-autofilter.c:277
+#: mail/mail-autofilter.c:238 mail/mail-autofilter.c:277
#, c-format
msgid "Mail from %s"
msgstr "Mesazh nga %s"
-#: ../mail/mail-autofilter.c:261
+#: mail/mail-autofilter.c:261
#, c-format
msgid "Subject is %s"
msgstr "Subjekti është %s"
-#: ../mail/mail-autofilter.c:296
+#: mail/mail-autofilter.c:296
#, c-format
msgid "%s mailing list"
msgstr "Lista mail %s"
-#: ../mail/mail-autofilter.c:365
+#: mail/mail-autofilter.c:365
msgid "Add Filter Rule"
msgstr "Shto rregull filtrimi"
-#: ../mail/mail-component.c:505
+#: mail/mail-component.c:505
#, c-format
msgid "%d deleted"
msgid_plural "%d deleted"
msgstr[0] "%d fshirë"
msgstr[1] "%d fshirë"
-#: ../mail/mail-component.c:507
+#: mail/mail-component.c:507
#, c-format
msgid "%d junk"
msgid_plural "%d junk"
msgstr[0] "%d refuzim"
msgstr[1] "%d refuzime"
-#: ../mail/mail-component.c:530
+#: mail/mail-component.c:530
#, c-format
msgid "%d draft"
msgid_plural "%d drafts"
msgstr[0] "%d kopje"
msgstr[1] "%d kopje"
-#: ../mail/mail-component.c:532
+#: mail/mail-component.c:532
#, c-format
msgid "%d sent"
msgid_plural "%d sent"
msgstr[0] "%d dërguar"
msgstr[1] "%d dërguar"
-#: ../mail/mail-component.c:534
+#: mail/mail-component.c:534
#, c-format
msgid "%d unsent"
msgid_plural "%d unsent"
msgstr[0] "%d pa dërguar"
msgstr[1] "%d pa dërguar"
-#: ../mail/mail-component.c:538
+#: mail/mail-component.c:538
#, c-format
msgid "%d total"
msgid_plural "%d total"
msgstr[0] "%d gjithsej"
msgstr[1] "%d gjithsej"
-#: ../mail/mail-component.c:540
+#: mail/mail-component.c:540
#, c-format
msgid ", %d unread"
msgid_plural ", %d unread"
msgstr[0] ", %d palexuar"
msgstr[1] ", %d palexuar"
-#: ../mail/mail-component.c:722
+#: mail/mail-component.c:722
msgid "New Mail Message"
msgstr "Mesazh i ri poste"
-#: ../mail/mail-component.c:723
+#: mail/mail-component.c:723
msgid "_Mail Message"
msgstr "_Mesazh poste"
-#: ../mail/mail-component.c:724
+#: mail/mail-component.c:724
msgid "Compose a new mail message"
msgstr "Kompozo një mesazh të ri poste"
-#: ../mail/mail-component.c:730
+#: mail/mail-component.c:730
msgid "New Mail Folder"
msgstr "Kartelë e re poste"
-#: ../mail/mail-component.c:731
+#: mail/mail-component.c:731
msgid "Mail _Folder"
msgstr "_Kartela Postës"
-#: ../mail/mail-component.c:732
+#: mail/mail-component.c:732
msgid "Create a new mail folder"
msgstr "Krijo një kartelë të re poste"
-#: ../mail/mail-component.c:879
+#: mail/mail-component.c:879
msgid "Failed upgrading Mail settings or folders."
msgstr "Përditësimi i rregullimeve të postës apo kartelave dështoi."
-#: ../mail/mail-config.glade.h:1 ../mail/mail-dialogs.glade.h:5
+#: mail/mail-config.glade.h:1 mail/mail-dialogs.glade.h:5
msgid " "
msgstr " "
-#: ../mail/mail-config.glade.h:2
+#: mail/mail-config.glade.h:2
msgid " Ch_eck for Supported Types "
msgstr " K_ontrollo për llojet e suportuar "
-#: ../mail/mail-config.glade.h:4
+#: mail/mail-config.glade.h:4
msgid "<b>SSL is not supported in this build of Evolution</b>"
msgstr "<b>SSL nuk suportohet në këtë konfigurim të Evolution</b>"
-#: ../mail/mail-config.glade.h:5
+#: mail/mail-config.glade.h:5
msgid "<b>S_ignatures</b>"
msgstr "<b>F_irmat</b>"
-#: ../mail/mail-config.glade.h:6
+#: mail/mail-config.glade.h:6
msgid "<b>_Languages</b>"
msgstr "<b>_Gjuhët</b>"
-#: ../mail/mail-config.glade.h:7
+#: mail/mail-config.glade.h:7
msgid "<small>This will make the the filter more reliable, but slower</small>"
msgstr "<small>Kjo do t'a bëjë filtrin më të sigurt, por më të ngadaltë</small>"
-#: ../mail/mail-config.glade.h:8
+#: mail/mail-config.glade.h:8
msgid "<span weight=\"bold\">Account Information</span>"
msgstr "<span weight=\"bold\">Informacione në lidhje me llogarinë</span>"
-#: ../mail/mail-config.glade.h:9
+#: mail/mail-config.glade.h:9
msgid "<span weight=\"bold\">Alerts</span>"
msgstr "<span weight=\"bold\">Paralajmërime</span>"
-#: ../mail/mail-config.glade.h:10
+#: mail/mail-config.glade.h:10
msgid "<span weight=\"bold\">Authentication Type</span>"
msgstr "<span weight=\"bold\">Lloji i autentifikimit</span>"
-#: ../mail/mail-config.glade.h:11
+#: mail/mail-config.glade.h:11
msgid "<span weight=\"bold\">Authentication</span>"
msgstr "<span weight=\"bold\">Autentifikimi</span>"
-#: ../mail/mail-config.glade.h:12
+#: mail/mail-config.glade.h:12
msgid "<span weight=\"bold\">Composing Messages</span>"
msgstr "<span weight=\"bold\">Kompozimi i mesazheve</span>"
-#: ../mail/mail-config.glade.h:13
+#: mail/mail-config.glade.h:13
msgid "<span weight=\"bold\">Configuration</span>"
msgstr "<span weight=\"bold\">Konfigurimi</span>"
-#: ../mail/mail-config.glade.h:14
+#: mail/mail-config.glade.h:14
msgid "<span weight=\"bold\">Default Behavior</span>"
msgstr "<span weight=\"bold\">Sjellja e prezgjedhur</span>"
-#: ../mail/mail-config.glade.h:15
+#: mail/mail-config.glade.h:15
msgid "<span weight=\"bold\">Delete Mail</span>"
msgstr "<span weight=\"bold\">Elemino mesazhin</span>"
-#: ../mail/mail-config.glade.h:16
+#: mail/mail-config.glade.h:16
msgid "<span weight=\"bold\">Displayed Mail _Headers</span>"
msgstr "<span weight=\"bold\">_Headers e shfaqur mail</span>"
-#: ../mail/mail-config.glade.h:17
+#: mail/mail-config.glade.h:17
msgid "<span weight=\"bold\">Filter Options</span>"
msgstr "<span weight=\"bold\">Opcionet e filtrimit</span>"
-#: ../mail/mail-config.glade.h:18
-#: ../plugins/itip-formatter/itip-formatter.c:1667
+#: mail/mail-config.glade.h:18 plugins/itip-formatter/itip-formatter.c:1667
msgid "<span weight=\"bold\">General</span>"
msgstr "<span weight=\"bold\">E përgjithshme</span>"
-#: ../mail/mail-config.glade.h:19
+#: mail/mail-config.glade.h:19
msgid "<span weight=\"bold\">Labels and Colors</span>"
msgstr "<span weight=\"bold\">Etiketat dhe ngjyrat</span>"
-#: ../mail/mail-config.glade.h:20
+#: mail/mail-config.glade.h:20
msgid "<span weight=\"bold\">Loading Images</span>"
msgstr "<span weight=\"bold\">Ngarkimi i figurave</span>"
-#: ../mail/mail-config.glade.h:21
+#: mail/mail-config.glade.h:21
msgid "<span weight=\"bold\">Message Display</span>"
msgstr "<span weight=\"bold\">Shfaqja e mesazhit</span>"
-#: ../mail/mail-config.glade.h:22
+#: mail/mail-config.glade.h:22
msgid "<span weight=\"bold\">Message Fonts</span>"
msgstr "<span weight=\"bold\">Gërmat e mesazhit</span>"
-#: ../mail/mail-config.glade.h:23
+#: mail/mail-config.glade.h:23
msgid "<span weight=\"bold\">New Mail Notification</span>"
msgstr "<span weight=\"bold\">Njoftimi i mesazheve të rinj</span>"
-#: ../mail/mail-config.glade.h:24
+#: mail/mail-config.glade.h:24
msgid "<span weight=\"bold\">Optional Information</span>"
msgstr "<span weight=\"bold\">Informacione shtesë</span>"
-#: ../mail/mail-config.glade.h:25
+#: mail/mail-config.glade.h:25
msgid "<span weight=\"bold\">Options</span>"
msgstr "<span weight=\"bold\">Opcione</span>"
-#: ../mail/mail-config.glade.h:26
+#: mail/mail-config.glade.h:26
msgid "<span weight=\"bold\">Pretty Good Privacy (PGP/GPG)</span>"
msgstr "<span weight=\"bold\">Pretty Good Privacy (PGP/GPG)</span>"
-#: ../mail/mail-config.glade.h:27
+#: mail/mail-config.glade.h:27
msgid "<span weight=\"bold\">Printed Fonts</span>"
msgstr "<span weight=\"bold\">Gërmat për printim</span>"
-#: ../mail/mail-config.glade.h:28
+#: mail/mail-config.glade.h:28
msgid "<span weight=\"bold\">Required Information</span>"
msgstr "<span weight=\"bold\">Informacionet e kërkuara</span>"
-#: ../mail/mail-config.glade.h:29
+#: mail/mail-config.glade.h:29
msgid "<span weight=\"bold\">Secure MIME (S/MIME)</span>"
msgstr "<span weight=\"bold\">Secure MIME (S/MIME)</span>"
-#: ../mail/mail-config.glade.h:30
+#: mail/mail-config.glade.h:30
msgid "<span weight=\"bold\">Security</span>"
msgstr "<span weight=\"bold\">Siguria</span>"
-#: ../mail/mail-config.glade.h:31
+#: mail/mail-config.glade.h:31
msgid "<span weight=\"bold\">Sent and Draft Messages</span>"
msgstr "<span weight=\"bold\">Mesazhet e dërguar dhe kopjet</span>"
-#: ../mail/mail-config.glade.h:32
+#: mail/mail-config.glade.h:32
msgid "<span weight=\"bold\">Server Configuration</span>"
msgstr "<span weight=\"bold\">Konfigurimi i serverit</span>"
-#: ../mail/mail-config.glade.h:34
+#: mail/mail-config.glade.h:34
msgid "Account Management"
msgstr "Mirëmbajtja e llogarive"
-#: ../mail/mail-config.glade.h:35
+#: mail/mail-config.glade.h:35
msgid "Add Ne_w Signature..."
msgstr "Shto firmë të _re..."
-#: ../mail/mail-config.glade.h:36
+#: mail/mail-config.glade.h:36
msgid "Add _Script"
msgstr "Shto _Script"
-#: ../mail/mail-config.glade.h:37
+#: mail/mail-config.glade.h:37
msgid "Al_ways sign outgoing messages when using this account"
msgstr "Firmos gjit_hmonë mesazhet në dalje kur përdor këtë llogari"
-#: ../mail/mail-config.glade.h:38
+#: mail/mail-config.glade.h:38
msgid "Also encrypt to sel_f when sending encrypted mail"
msgstr "Shifro gji_thashtu edhe për vetveten kur dërgohen mesazhe të kriptuar"
-#: ../mail/mail-config.glade.h:39
+#: mail/mail-config.glade.h:39
msgid "Alway_s carbon-copy (cc) to:"
msgstr "Gjithmo_në dërgo kopje (cc) tek:"
-#: ../mail/mail-config.glade.h:40
+#: mail/mail-config.glade.h:40
msgid "Always _blind carbon-copy (bcc) to:"
msgstr "Gjithmonë _kopje karboni të verbër (bcc) tek:"
-#: ../mail/mail-config.glade.h:41
+#: mail/mail-config.glade.h:41
msgid "Always _trust keys in my keyring when encrypting"
msgstr "_Beso gjithmonë kyçet e mi kur kripton"
-#: ../mail/mail-config.glade.h:42
+#: mail/mail-config.glade.h:42
msgid "Always encrypt to _myself when sending encrypted mail"
msgstr "Gjithmonë shifro edhe për _vetveten kur dërgohen mesazhe të kriptuar"
-#: ../mail/mail-config.glade.h:43
+#: mail/mail-config.glade.h:43
msgid "Attach original message"
msgstr "Bashkangjit mesazhin orgjinal"
-#: ../mail/mail-config.glade.h:44 ../mail/message-list.etspec.h:1
+#: mail/mail-config.glade.h:44 mail/message-list.etspec.h:1
msgid "Attachment"
msgstr "Bashkangjitur"
-#: ../mail/mail-config.glade.h:45
+#: mail/mail-config.glade.h:45
msgid "Automatically _insert smiley images"
msgstr "_Fut automatikisht figurat smiley"
-#: ../mail/mail-config.glade.h:46
+#: mail/mail-config.glade.h:46
msgid "Baltic (ISO-8859-13)"
msgstr "Balltike (ISO-8859-13)"
-#: ../mail/mail-config.glade.h:47
+#: mail/mail-config.glade.h:47
msgid "Baltic (ISO-8859-4)"
msgstr "Balltike (ISO-8859-4)"
-#: ../mail/mail-config.glade.h:48
+#: mail/mail-config.glade.h:48
msgid "Beep w_hen new mail arrives"
msgstr "Lësho tingull kur arrin _postë e re"
-#: ../mail/mail-config.glade.h:49
+#: mail/mail-config.glade.h:49
msgid "C_haracter set:"
msgstr "Rregullimi i gë_rmave:"
-#: ../mail/mail-config.glade.h:50
+#: mail/mail-config.glade.h:50
msgid "Ch_eck for Supported Types "
msgstr "K_ontrollo për llojet suportuar "
-#: ../mail/mail-config.glade.h:51
+#: mail/mail-config.glade.h:51
msgid "Check _incoming mail for junk"
msgstr "Kontrollo postën në _hyrje për material për t'u refuzuar"
-#: ../mail/mail-config.glade.h:52
+#: mail/mail-config.glade.h:52
msgid "Check spelling while I _type"
msgstr "Kontrollo drejtshkrimin kur _shkruan"
-#: ../mail/mail-config.glade.h:53
+#: mail/mail-config.glade.h:53
msgid "Checks incoming mail messages to be Junk"
msgstr "Kontrolli i mesazheve në hyrje të postës për në plehra"
-#: ../mail/mail-config.glade.h:54
+#: mail/mail-config.glade.h:54
msgid "Cle_ar"
msgstr "P_astro"
-#: ../mail/mail-config.glade.h:55
+#: mail/mail-config.glade.h:55
msgid "Clea_r"
msgstr "Past_ro"
-#: ../mail/mail-config.glade.h:56
+#: mail/mail-config.glade.h:56
msgid "Color for _misspelled words:"
msgstr "Ngjyra për fjalët me _gabime:"
-#: ../mail/mail-config.glade.h:57
+#: mail/mail-config.glade.h:57
msgid "Colors"
msgstr "Ngjyrat"
-#: ../mail/mail-config.glade.h:58
+#: mail/mail-config.glade.h:58
msgid "Confirm _when expunging a folder"
msgstr "Konfermo _kur eleminohet një kartelë"
-#: ../mail/mail-config.glade.h:59
+#: mail/mail-config.glade.h:59
msgid ""
"Congratulations, your mail configuration is complete.\n"
"\n"
@@ -12519,117 +12440,117 @@ msgstr ""
"\n"
"Kliko \"Apliko\" për të ruajtur rregullimet."
-#: ../mail/mail-config.glade.h:65
+#: mail/mail-config.glade.h:65
msgid "De_fault"
msgstr "Pr_ezgjedhur"
-#: ../mail/mail-config.glade.h:66
+#: mail/mail-config.glade.h:66
msgid "Default character e_ncoding:"
msgstr "Ko_difikimi i prezgjedhur i gërmave:"
-#: ../mail/mail-config.glade.h:69
+#: mail/mail-config.glade.h:69
msgid "Digitally _sign outgoing messages (by default)"
msgstr "Firmë _dixhitale për mesazhet në dalje (e prezgjedhur)"
-#: ../mail/mail-config.glade.h:70
+#: mail/mail-config.glade.h:70
msgid "Do not quote original message"
msgstr "Mos kuoto mesazhin orgjinal"
-#: ../mail/mail-config.glade.h:71 ../shell/evolution-startup-wizard.glade.h:1
+#: mail/mail-config.glade.h:71 shell/evolution-startup-wizard.glade.h:1
msgid "Done"
msgstr "U plotësua"
-#: ../mail/mail-config.glade.h:72
+#: mail/mail-config.glade.h:72
msgid "Drafts _Folder:"
msgstr "_Kartela e kopjeve:"
-#: ../mail/mail-config.glade.h:74
+#: mail/mail-config.glade.h:74
msgid "Email Accounts"
msgstr "Llogaritë email"
-#: ../mail/mail-config.glade.h:75
+#: mail/mail-config.glade.h:75
msgid "Email _Address:"
msgstr "_Adresa Email:"
-#: ../mail/mail-config.glade.h:76
+#: mail/mail-config.glade.h:76
msgid "Empty trash folders on e_xit"
msgstr "Zbraz kartelat e koshit kur de_l"
-#: ../mail/mail-config.glade.h:77
+#: mail/mail-config.glade.h:77
msgid "Encry_ption certificate:"
msgstr "Çertifikata e kri_ptimit:"
-#: ../mail/mail-config.glade.h:78
+#: mail/mail-config.glade.h:78
msgid "Encrypt out_going messages (by default)"
msgstr "Kriptim për mesazhet në da_lje (e prezgjedhur)"
-#: ../mail/mail-config.glade.h:80
+#: mail/mail-config.glade.h:80
msgid "Execute Command..."
msgstr "Ekzekuto komandën..."
-#: ../mail/mail-config.glade.h:81
+#: mail/mail-config.glade.h:81
msgid "Fi_xed-width:"
msgstr "Gjerësia-fi_ksuar:"
-#: ../mail/mail-config.glade.h:82
+#: mail/mail-config.glade.h:82
msgid "Font Properties"
msgstr "Pronësitë e shkronjave"
-#: ../mail/mail-config.glade.h:83
+#: mail/mail-config.glade.h:83
msgid "Format messages in _HTML"
msgstr "Formato mesazhet në _HTML"
-#: ../mail/mail-config.glade.h:85
+#: mail/mail-config.glade.h:85
msgid "HTML Mail"
msgstr "Mesazh HTML"
-#: ../mail/mail-config.glade.h:86
+#: mail/mail-config.glade.h:86
msgid "Headers"
msgstr "Headers"
-#: ../mail/mail-config.glade.h:87
+#: mail/mail-config.glade.h:87
msgid "Highlight _quotations with"
msgstr "Vër në dukje _kuotimet me"
-#: ../mail/mail-config.glade.h:88
+#: mail/mail-config.glade.h:88
msgid "I_nclude remote tests"
msgstr "Pë_rfshi provat remote"
-#: ../mail/mail-config.glade.h:91
+#: mail/mail-config.glade.h:91
msgid "Inline"
msgstr "Direkt"
-#: ../mail/mail-config.glade.h:94
+#: mail/mail-config.glade.h:94
msgid "Mail Configuration"
msgstr "Konfigurimi i Mail"
-#: ../mail/mail-config.glade.h:96
+#: mail/mail-config.glade.h:96
msgid "Mailbox location"
msgstr "Vendodhja e mailbox"
-#: ../mail/mail-config.glade.h:97
+#: mail/mail-config.glade.h:97
msgid "Message Composer"
msgstr "Kompozuesi i mesazheve"
-#: ../mail/mail-config.glade.h:98
+#: mail/mail-config.glade.h:98
msgid ""
"Note: you will not be prompted for a password until you connect for the "
"first time"
msgstr "Shënim: nuk do t'ju kërkohet fjalëkalimi derisa të kryeni lidhjen e parë"
-#: ../mail/mail-config.glade.h:99
+#: mail/mail-config.glade.h:99
msgid "Or_ganization:"
msgstr "Or_ganizata:"
-#: ../mail/mail-config.glade.h:100
+#: mail/mail-config.glade.h:100
msgid "PGP/GPG _Key ID:"
msgstr "ID e _Kyçit PGP/GPG:"
-#: ../mail/mail-config.glade.h:103
+#: mail/mail-config.glade.h:103
msgid "Play sound file when new mail arri_ves"
msgstr "Lësho tingull kur _arrijnë mesazhe të rinj"
-#: ../mail/mail-config.glade.h:104
+#: mail/mail-config.glade.h:104
msgid ""
"Please enter a descriptive name for this account in the space below.\n"
"This name will be used for display purposes only."
@@ -12637,7 +12558,7 @@ msgstr ""
"Shkruaj një përshkrim për këtë llogari në hapësirën e mëposhtme.\n"
"Ky emër do të përdoret vetëm për paraqitjen."
-#: ../mail/mail-config.glade.h:106
+#: mail/mail-config.glade.h:106
msgid ""
"Please enter information about the way you will send mail. If you are not "
"sure, ask your system administrator or Internet Service Provider."
@@ -12645,7 +12566,7 @@ msgstr ""
"Ju lutem plotësoni informacionet në lidhje me menyrën e dërgimit të postës. "
"Nëse nuk jeni i sigurt, pyetni administratorin e sistemit tuaj ose ISP."
-#: ../mail/mail-config.glade.h:107
+#: mail/mail-config.glade.h:107
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 "
@@ -12655,107 +12576,107 @@ msgstr ""
"nuk ka nevojë të plotësohen, po të mos dëshironi të përfshini ato "
"informacione tek mesazhet e postës që dërgoni."
-#: ../mail/mail-config.glade.h:108
+#: mail/mail-config.glade.h:108
msgid "Please select among the following options"
msgstr "Ju lutem zgjidhni nga opcionet në vazhdim"
-#: ../mail/mail-config.glade.h:109
+#: mail/mail-config.glade.h:109
msgid "Pr_ompt when sending messages with only Bcc recipients defined"
msgstr "Pa_ralajmëro kur dërgohen mesazhe me vetëm marrësit Bcc të përcaktuar"
-#: ../mail/mail-config.glade.h:110
+#: mail/mail-config.glade.h:110
msgid "Quote original message"
msgstr "Kuoto mesazhin orgjinal"
-#: ../mail/mail-config.glade.h:111
+#: mail/mail-config.glade.h:111
msgid "Quoted"
msgstr "I kuotuar"
-#: ../mail/mail-config.glade.h:112
+#: mail/mail-config.glade.h:112
msgid "Re_member password"
msgstr "Ku_jto fjalëkalimin"
-#: ../mail/mail-config.glade.h:113
+#: mail/mail-config.glade.h:113
msgid "Re_ply-To:"
msgstr "Për_gjigju-Tek:"
-#: ../mail/mail-config.glade.h:115
+#: mail/mail-config.glade.h:115
msgid "Remember _password"
msgstr "Kujto _fjalëkalimin"
-#: ../mail/mail-config.glade.h:116
+#: mail/mail-config.glade.h:116
msgid "S_elect..."
msgstr "Z_gjidh..."
-#: ../mail/mail-config.glade.h:117
+#: mail/mail-config.glade.h:117
msgid "S_tandard Font:"
msgstr "Gërmat s_tandart:"
-#: ../mail/mail-config.glade.h:118
+#: mail/mail-config.glade.h:118
msgid "Se_lect..."
msgstr "Zg_jidh..."
-#: ../mail/mail-config.glade.h:120
+#: mail/mail-config.glade.h:120
msgid "Select HTML fixed width font"
msgstr "Zgjidh gërmat me gjerësi fikse të HTML"
-#: ../mail/mail-config.glade.h:121
+#: mail/mail-config.glade.h:121
msgid "Select HTML fixed width font for printing"
msgstr "Zgjidh gërmat me gjerësi fikse të HTML për printim"
-#: ../mail/mail-config.glade.h:122
+#: mail/mail-config.glade.h:122
msgid "Select HTML variable width font"
msgstr "Zgjidh gërmat me gjerësi të ndryshueshme të HTML"
-#: ../mail/mail-config.glade.h:123
+#: mail/mail-config.glade.h:123
msgid "Select HTML variable width font for printing"
msgstr "Zgjidh gërmat me gjerësi të ndryshueshme të HTML për printim"
-#: ../mail/mail-config.glade.h:125
+#: mail/mail-config.glade.h:125
msgid "Sending Mail"
msgstr "Dërgimi i Postës"
-#: ../mail/mail-config.glade.h:126
+#: mail/mail-config.glade.h:126
msgid "Sent _Messages Folder:"
msgstr "Kartela e _mesazheve të dërguar:"
-#: ../mail/mail-config.glade.h:127
+#: mail/mail-config.glade.h:127
msgid "Ser_ver requires authentication"
msgstr "Ser_veri kërkon autentifikimin"
-#: ../mail/mail-config.glade.h:128
+#: mail/mail-config.glade.h:128
msgid "Server _Type: "
msgstr "_Lloji i serverit: "
-#: ../mail/mail-config.glade.h:129
+#: mail/mail-config.glade.h:129
msgid "Sig_ning certificate:"
msgstr "Çertifikata e fir_mës:"
-#: ../mail/mail-config.glade.h:130
+#: mail/mail-config.glade.h:130
msgid "Signat_ure:"
msgstr "Fir_ma:"
-#: ../mail/mail-config.glade.h:131
+#: mail/mail-config.glade.h:131
msgid "Signatures"
msgstr "Firmat"
-#: ../mail/mail-config.glade.h:132
+#: mail/mail-config.glade.h:132
msgid "Specify _filename:"
msgstr "Specifiko emrin e _file:"
-#: ../mail/mail-config.glade.h:133
+#: mail/mail-config.glade.h:133
msgid "Spell Checking"
msgstr "Kontrolli i drejtshkrimit"
-#: ../mail/mail-config.glade.h:134
+#: mail/mail-config.glade.h:134
msgid "T_erminal Font:"
msgstr "Gërmat e terminalit:"
-#: ../mail/mail-config.glade.h:135
+#: mail/mail-config.glade.h:135
msgid "T_ype: "
msgstr "Ll_oji: "
-#: ../mail/mail-config.glade.h:136
+#: mail/mail-config.glade.h:136
msgid ""
"The list of languages here reflects only the languages for which you have a "
"dictionary installed."
@@ -12763,7 +12684,7 @@ msgstr ""
"Lista e gjuhëve reflekton vetëm gjuhët për të cilat keni instaluar një "
"fjalor."
-#: ../mail/mail-config.glade.h:137
+#: mail/mail-config.glade.h:137
msgid ""
"The output of this script will be used as your\n"
"signature. The name you specify will be used\n"
@@ -12773,7 +12694,7 @@ msgstr ""
"Emri i specifikuar nga ju do të përdoret vetëm për\n"
"t'u shfaqur. "
-#: ../mail/mail-config.glade.h:141
+#: mail/mail-config.glade.h:141
msgid ""
"Type the name by which you would like to refer to this account.\n"
"For example: \"Work\" or \"Personal\""
@@ -12781,15 +12702,15 @@ msgstr ""
"Shkruani emrin sipas të cilit dëshironi t'i referoheni kësaj llogarie.\n"
"Për shembull: \"Punë\" ose \"Personale\""
-#: ../mail/mail-config.glade.h:143
+#: mail/mail-config.glade.h:143
msgid "User_name:"
msgstr "_Përdoruesi:"
-#: ../mail/mail-config.glade.h:144
+#: mail/mail-config.glade.h:144
msgid "V_ariable-width:"
msgstr "Gjerësia e nd_ryshueshme:"
-#: ../mail/mail-config.glade.h:145
+#: mail/mail-config.glade.h:145
msgid ""
"Welcome to the Evolution Mail Configuration Assistant.\n"
"\n"
@@ -12799,91 +12720,91 @@ msgstr ""
"\n"
"Kliko \"Vazhdo\" për të filluar. "
-#: ../mail/mail-config.glade.h:149
+#: mail/mail-config.glade.h:149
msgid "_Add Signature"
msgstr "_Shto firmë"
-#: ../mail/mail-config.glade.h:150
+#: mail/mail-config.glade.h:150
msgid "_Always load images from the Internet"
msgstr "_Gjithmonë ngarko figurat nga Internet"
-#: ../mail/mail-config.glade.h:151
+#: mail/mail-config.glade.h:151
msgid "_Do not notify me when new mail arrives"
msgstr "_Mos më njofto kur arrijnë mesazhe të rinj"
-#: ../mail/mail-config.glade.h:152
+#: mail/mail-config.glade.h:152
msgid "_Don't sign meeting requests (for Outlook compatibility)"
msgstr "_Mos shëno kërkesat për mbledhje (për pajtueshmëri me Outlook)"
-#: ../mail/mail-config.glade.h:154
+#: mail/mail-config.glade.h:154
msgid "_Forward style:"
msgstr "Stili i _përcjelljes:"
-#: ../mail/mail-config.glade.h:155
+#: mail/mail-config.glade.h:155
msgid "_Full Name:"
msgstr "Emri dhe _mbiemri:"
-#: ../mail/mail-config.glade.h:156
+#: mail/mail-config.glade.h:156
msgid "_Host:"
msgstr "_Host:"
-#: ../mail/mail-config.glade.h:157
+#: mail/mail-config.glade.h:157
msgid "_Load images if sender is in address book"
msgstr "_Ngarko figurat nëse dërguesi rezulton në rubrikë"
-#: ../mail/mail-config.glade.h:158
+#: mail/mail-config.glade.h:158
msgid "_Make this my default account"
msgstr "_Ktheje në llogarinë time të prezgjedhur"
-#: ../mail/mail-config.glade.h:159
+#: mail/mail-config.glade.h:159
msgid "_Mark messages as read after"
msgstr "_Shëno si të lexuar mesazhet mbas"
-#: ../mail/mail-config.glade.h:161
+#: mail/mail-config.glade.h:161
msgid "_Never load images from the Internet"
msgstr "_Asnjëherë mos ngarko figura nga Internet"
-#: ../mail/mail-config.glade.h:162
+#: mail/mail-config.glade.h:162
msgid "_Path:"
msgstr "_Vendodhja:"
-#: ../mail/mail-config.glade.h:163
+#: mail/mail-config.glade.h:163
msgid "_Prompt when sending HTML messages to contacts that don't want them"
msgstr "_Paralajmërim kur u dërgohen mesazhe HTML marrësve që nuk i dëshirojnë ato"
-#: ../mail/mail-config.glade.h:164
+#: mail/mail-config.glade.h:164
msgid "_Prompt when sending messages with an empty subject line"
msgstr "_Paralajmërim kur dërgohen mesazhe me rreshtin e subjektit bosh"
-#: ../mail/mail-config.glade.h:165
+#: mail/mail-config.glade.h:165
msgid "_Reply style:"
msgstr "Stili i _përgjigjes:"
-#: ../mail/mail-config.glade.h:166
+#: mail/mail-config.glade.h:166
msgid "_Script:"
msgstr "_Script:"
-#: ../mail/mail-config.glade.h:167
+#: mail/mail-config.glade.h:167
msgid "_Show animated images"
msgstr "_Shfaq imazhet e animuara"
-#: ../mail/mail-config.glade.h:168
+#: mail/mail-config.glade.h:168
msgid "_Use Secure Connection:"
msgstr "_Përdor lidhje të sigurt:"
-#: ../mail/mail-config.glade.h:169
+#: mail/mail-config.glade.h:169
msgid "_Use the same fonts as other applications"
msgstr "_Përdor të njëjtat gërma si programet e tjerë"
-#: ../mail/mail-config.glade.h:170
+#: mail/mail-config.glade.h:170
msgid "color"
msgstr "ngjyra"
-#: ../mail/mail-config.glade.h:171
+#: mail/mail-config.glade.h:171
msgid "description"
msgstr "përshkrimi"
-#: ../mail/mail-dialogs.glade.h:1
+#: mail/mail-dialogs.glade.h:1
msgid ""
"\n"
" Please read carefully the license agreement displayed\n"
@@ -12893,60 +12814,60 @@ msgstr ""
"Lu lutem lexoni me kujdes kushtet e autorizimit të shfaqur\n"
"më poshtë dhe shëno kutinë zgjedhëse për t'a pranuar\n"
-#: ../mail/mail-dialogs.glade.h:7
+#: mail/mail-dialogs.glade.h:7
msgid "<b>vFolder Sources</b>"
msgstr "<b>Burimet e kartelave virtuale</b>"
-#: ../mail/mail-dialogs.glade.h:8
+#: mail/mail-dialogs.glade.h:8
msgid "<span weight=\"bold\">Digital Signature</span>"
msgstr "<span weight=\"bold\">Firma dixhitale</span>"
-#: ../mail/mail-dialogs.glade.h:9
+#: mail/mail-dialogs.glade.h:9
msgid "<span weight=\"bold\">Encryption</span>"
msgstr "<span weight=\"bold\">Kriptimi</span>"
-#: ../mail/mail-dialogs.glade.h:10
+#: mail/mail-dialogs.glade.h:10
msgid "Case _Sensitive"
msgstr "_Gërma të mëdha/të vogla"
-#: ../mail/mail-dialogs.glade.h:11 ../mail/message-tags.glade.h:2
+#: mail/mail-dialogs.glade.h:11 mail/message-tags.glade.h:2
msgid "Co_mpleted"
msgstr "U _plotësua"
-#: ../mail/mail-dialogs.glade.h:13
+#: mail/mail-dialogs.glade.h:13
msgid "F_ind:"
msgstr "G_jej:"
-#: ../mail/mail-dialogs.glade.h:14
+#: mail/mail-dialogs.glade.h:14
msgid "Find in Message"
msgstr "Gjej në mesazh"
-#: ../mail/mail-dialogs.glade.h:15 ../mail/message-tag-followup.c:295
-#: ../mail/message-tags.glade.h:3
+#: mail/mail-dialogs.glade.h:15 mail/message-tag-followup.c:295
+#: mail/message-tags.glade.h:3
msgid "Flag to Follow Up"
msgstr "Flamuri për ndjekjen e rrjedhës"
-#: ../mail/mail-dialogs.glade.h:16
+#: mail/mail-dialogs.glade.h:16
msgid "Folder Subscriptions"
msgstr "Regjistrimet në kartelë"
-#: ../mail/mail-dialogs.glade.h:17
+#: mail/mail-dialogs.glade.h:17
msgid "License Agreement"
msgstr "Marrëveshje autorizimi"
-#: ../mail/mail-dialogs.glade.h:18
+#: mail/mail-dialogs.glade.h:18
msgid "None Selected"
msgstr "Asnjë zgjedhje"
-#: ../mail/mail-dialogs.glade.h:19
+#: mail/mail-dialogs.glade.h:19
msgid "S_erver:"
msgstr "S_erveri:"
-#: ../mail/mail-dialogs.glade.h:20
+#: mail/mail-dialogs.glade.h:20
msgid "Security Information"
msgstr "Informacione sigurie"
-#: ../mail/mail-dialogs.glade.h:22 ../mail/message-tags.glade.h:4
+#: mail/mail-dialogs.glade.h:22 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."
@@ -12954,53 +12875,53 @@ msgstr ""
"Mesazhet që keni shënuar për ndjekje janë rreshtuar në vazhdim.\n"
"Ju lutem zgjidh veprimin e ndjekjes nga menuja \"Flamurë\"."
-#: ../mail/mail-dialogs.glade.h:24
+#: mail/mail-dialogs.glade.h:24
msgid "_Accept License"
msgstr "_Prano liçencën"
-#: ../mail/mail-dialogs.glade.h:25 ../mail/message-tags.glade.h:6
+#: mail/mail-dialogs.glade.h:25 mail/message-tags.glade.h:6
msgid "_Due By:"
msgstr "_Skadimi më:"
-#: ../mail/mail-dialogs.glade.h:26 ../mail/message-tags.glade.h:7
+#: mail/mail-dialogs.glade.h:26 mail/message-tags.glade.h:7
msgid "_Flag:"
msgstr "_Flamuri:"
-#: ../mail/mail-dialogs.glade.h:27
+#: mail/mail-dialogs.glade.h:27
msgid "_Subscribe"
msgstr "_Abonohu"
-#: ../mail/mail-dialogs.glade.h:28
+#: mail/mail-dialogs.glade.h:28
msgid "_Tick this to accept the license agreement"
msgstr "_Zgjidh këtë për të pranuar marrëveshjen e autorizimit"
-#: ../mail/mail-dialogs.glade.h:29
+#: mail/mail-dialogs.glade.h:29
msgid "_Unsubscribe"
msgstr "_Ç'regjistrohu"
-#: ../mail/mail-dialogs.glade.h:30
+#: mail/mail-dialogs.glade.h:30
msgid "specific folders only"
msgstr "vetëm kartelat e caktuara"
-#: ../mail/mail-dialogs.glade.h:31
+#: mail/mail-dialogs.glade.h:31
msgid "with all active remote folders"
msgstr "me të gjitha kartelat aktive remote"
-#: ../mail/mail-dialogs.glade.h:32
+#: mail/mail-dialogs.glade.h:32
msgid "with all local and active remote folders"
msgstr "me të gjitha kartelat lokale dhe kartelat aktive remote"
-#: ../mail/mail-dialogs.glade.h:33
+#: mail/mail-dialogs.glade.h:33
msgid "with all local folders"
msgstr "me të gjitha kartelat lokale"
#. mail:camel-service-auth-invalid primary
-#: ../mail/mail-errors.xml.h:2
+#: mail/mail-errors.xml.h:2
msgid "Invalid authentication"
msgstr "Autentifikim i pavlefshëm"
#. mail:camel-service-auth-invalid secondary
-#: ../mail/mail-errors.xml.h:4
+#: mail/mail-errors.xml.h:4
msgid ""
"This server does not support this type of authentication and may not support "
"authentication at all."
@@ -13009,12 +12930,12 @@ msgstr ""
"suportojë fare autentifikimet."
#. mail:camel-service-auth-failed primary
-#: ../mail/mail-errors.xml.h:6
+#: mail/mail-errors.xml.h:6
msgid "Your login to your server \"{0}\" as \"{0}\" failed."
msgstr "Futja në serverin tuaj \"{0}\" si \"{0}\" dështoi."
#. mail:camel-service-auth-failed secondary
-#: ../mail/mail-errors.xml.h:8
+#: 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."
@@ -13024,12 +12945,12 @@ msgstr ""
"shkrimit me gërma të mëdha."
#. mail:ask-send-html primary
-#: ../mail/mail-errors.xml.h:10
+#: mail/mail-errors.xml.h:10
msgid "Are you sure you want to send a message in HTML format?"
msgstr "Jeni i sigurt që dëshironi të dërgoni një mesazh në formatin HTML?"
#. mail:ask-send-html secondary
-#: ../mail/mail-errors.xml.h:12
+#: mail/mail-errors.xml.h:12
msgid ""
"Please make sure the following recipients are willing and able to receive "
"HTML email:\n"
@@ -13042,12 +12963,12 @@ msgstr ""
"Dërgoj sidoqoftë?"
#. mail:ask-send-no-subject primary
-#: ../mail/mail-errors.xml.h:17
+#: mail/mail-errors.xml.h:17
msgid "Are you sure you want to send a message without a subject?"
msgstr "Jeni i sigurt që dëshironi të dërgoni një mesazh pa subjekt?"
#. mail:ask-send-no-subject secondary
-#: ../mail/mail-errors.xml.h:19
+#: 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."
@@ -13057,12 +12978,12 @@ 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
+#: mail/mail-errors.xml.h:22 mail/mail-errors.xml.h:29
msgid "Are you sure you want to send a message with only BCC recipients?"
msgstr "Jeni i sigurt që dëshironi të dërgoni një mesazh vetëm me marrësit BCC?"
#. mail:ask-send-only-bcc-contact secondary
-#: ../mail/mail-errors.xml.h:24
+#: mail/mail-errors.xml.h:24
msgid ""
"The contact list you are sending to is configured to hide list recipients.\n"
"\n"
@@ -13080,7 +13001,7 @@ msgstr ""
"Për: ose CC. "
#. mail:ask-send-only-bcc secondary
-#: ../mail/mail-errors.xml.h:31
+#: 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 "
@@ -13093,12 +13014,12 @@ msgstr ""
"Për: ose CC."
#. mail:send-no-recipients primary
-#: ../mail/mail-errors.xml.h:34
+#: mail/mail-errors.xml.h:34
msgid "This message cannot be sent because you have not specified any Recipients"
msgstr "Ky mesazh nuk mund të dërgohet pasi nuk keni specifikuar asnjë marrës"
#. mail:send-no-recipients secondary
-#: ../mail/mail-errors.xml.h:36
+#: 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."
@@ -13108,12 +13029,12 @@ msgstr ""
"e zërave."
#. mail:ask-default-drafts primary
-#: ../mail/mail-errors.xml.h:38
+#: mail/mail-errors.xml.h:38
msgid "Use default drafts folder?"
msgstr "Përdor kartelën e prezgjedhur të kopjeve?"
#. mail:ask-default-drafts secondary
-#: ../mail/mail-errors.xml.h:40
+#: mail/mail-errors.xml.h:40
msgid ""
"Unable to open the drafts folder for this account. Use the system drafts "
"folder instead?"
@@ -13121,12 +13042,12 @@ msgstr ""
"E pamundur hapja e kartelës së kopjeve për kë llogari. Dëshironi të "
"përdorni kartelën e kopjeve të sistemit?"
-#: ../mail/mail-errors.xml.h:41
+#: mail/mail-errors.xml.h:41
msgid "Use _Default"
msgstr "Përdor të _Prezgjedhurin"
#. mail:ask-expunge primary
-#: ../mail/mail-errors.xml.h:43
+#: mail/mail-errors.xml.h:43
msgid ""
"Are you sure you want to permanently remove all the deleted message in "
"folder \"{0}\"?"
@@ -13136,16 +13057,16 @@ msgstr ""
#. mail:ask-expunge secondary
#. mail:ask-empty-trash secondary
-#: ../mail/mail-errors.xml.h:45 ../mail/mail-errors.xml.h:50
+#: 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 "Nëse vazhdoni, nuk do të jeni në gjendje të rekuperoni këto mesazhe."
-#: ../mail/mail-errors.xml.h:46
+#: mail/mail-errors.xml.h:46
msgid "_Expunge"
msgstr "_Pastro"
#. mail:ask-empty-trash primary
-#: ../mail/mail-errors.xml.h:48
+#: mail/mail-errors.xml.h:48
msgid ""
"Are you sure you want to permanently remove all the deleted messages in all "
"folders?"
@@ -13153,31 +13074,31 @@ msgstr ""
"Jeni i sigurt që dëshironi të eleminoni përgjithmonë të gjithë mesazhet e "
"fshirë në të gjitha kartelat?"
-#: ../mail/mail-errors.xml.h:51
+#: mail/mail-errors.xml.h:51
msgid "_Empty Trash"
msgstr "_Zbraz Koshin"
#. mail:ask-open-many primary
-#: ../mail/mail-errors.xml.h:53
+#: mail/mail-errors.xml.h:53
msgid "Are you sure you want to open {0} messages at once?"
msgstr "Jeni i sigurt që dëshironi të hapni {0} mesazhe njëkohësisht?"
#. mail:ask-open-many secondary
-#: ../mail/mail-errors.xml.h:55
+#: mail/mail-errors.xml.h:55
msgid "Opening too many messages at once may take a long time."
msgstr "Hapja e shumë mesazheve njëkohësisht mund të marrë një kohë tepër të gjatë."
-#: ../mail/mail-errors.xml.h:56
+#: mail/mail-errors.xml.h:56
msgid "_Open Messages"
msgstr "_Hap mesazhet"
#. mail:exit-unsaved primary
-#: ../mail/mail-errors.xml.h:58
+#: mail/mail-errors.xml.h:58
msgid "You have unsent messages, do you wish to quit anyway?"
msgstr "Keni akoma mesazhe të padërguar, dëshironi të dilni sidoqoftë?"
#. mail:exit-unsaved secondary
-#: ../mail/mail-errors.xml.h:60
+#: mail/mail-errors.xml.h:60
msgid ""
"If you quit, these messages will not be sent until Evolution is started "
"again."
@@ -13186,12 +13107,12 @@ msgstr ""
"përsëri."
#. mail:camel-exception primary
-#: ../mail/mail-errors.xml.h:62
+#: mail/mail-errors.xml.h:62
msgid "Your message with the subject \"{0}\" was not delivered."
msgstr "Mesazhi juaj me subjekt \"{0}\" nuk u dërgua."
#. mail:camel-exception secondary
-#: ../mail/mail-errors.xml.h:64
+#: mail/mail-errors.xml.h:64
msgid ""
"The message was sent via the \"sendmail\" external application. Sendmail "
"reports the following error: status 67: mail not sent.\n"
@@ -13204,81 +13125,81 @@ msgstr ""
"gabime dhe rinise."
#. mail:async-error primary
-#: ../mail/mail-errors.xml.h:67
+#: mail/mail-errors.xml.h:67
msgid "Error while {0}."
msgstr "Gabim kur {0}."
#. mail:async-error secondary
-#: ../mail/mail-errors.xml.h:69
+#: mail/mail-errors.xml.h:69
msgid "{1}."
msgstr "{1}."
#. mail:async-error-nodescribe primary
-#: ../mail/mail-errors.xml.h:71
+#: mail/mail-errors.xml.h:71
msgid "Error while performing operation."
msgstr "Gabim gjatë kryerjes së operacionit."
#. mail:async-error-nodescribe secondary
-#: ../mail/mail-errors.xml.h:73
+#: mail/mail-errors.xml.h:73
msgid "{0}."
msgstr "{0}."
#. mail:ask-session-password primary
-#: ../mail/mail-errors.xml.h:87
+#: mail/mail-errors.xml.h:87
msgid "Enter password."
msgstr "Shkruaj fjalëkalimin."
#. mail:filter-load-error primary
-#: ../mail/mail-errors.xml.h:91
+#: mail/mail-errors.xml.h:91
msgid "Error loading filter definitions."
msgstr "Gabim gjatë ngarkimit përcaktimeve të filtrit."
#. mail:no-save-path primary
-#: ../mail/mail-errors.xml.h:95
+#: mail/mail-errors.xml.h:95
msgid "Cannot save to directory \"{0}\"."
msgstr "E pamundur ruajtja tek directory \"{0}\"."
#. mail:no-create-path primary
#. mail:no-write-path-exists primary
#. mail:no-write-path-notfile primary
-#: ../mail/mail-errors.xml.h:99 ../mail/mail-errors.xml.h:107
-#: ../mail/mail-errors.xml.h:111
+#: mail/mail-errors.xml.h:99 mail/mail-errors.xml.h:107
+#: mail/mail-errors.xml.h:111
msgid "Cannot save to file \"{0}\"."
msgstr "E pamundur ruajtja tek file \"{0}\"."
#. mail:no-create-path secondary
-#: ../mail/mail-errors.xml.h:101
+#: mail/mail-errors.xml.h:101
msgid "Cannot create the save directory, because \"{1}\""
msgstr "I pamundur krijimi i directory për ruajtje, sepse \"{1}\""
#. mail:no-create-tmp-path primary
-#: ../mail/mail-errors.xml.h:103
+#: mail/mail-errors.xml.h:103
msgid "Cannot create temporary save directory."
msgstr "I pamundur krijimi i directory për ruajtjen e përkohshme."
#. mail:no-write-path-exists secondary
-#: ../mail/mail-errors.xml.h:109
+#: mail/mail-errors.xml.h:109
msgid "File exists but cannot overwrite it."
msgstr "File ekziston por nuk mund të mbishkruhet."
#. mail:no-write-path-notfile secondary
-#: ../mail/mail-errors.xml.h:113
+#: mail/mail-errors.xml.h:113
msgid "File exists but is not a regular file."
msgstr "File ekziston por nuk është një file i rregullt."
#. mail:no-delete-folder primary
-#: ../mail/mail-errors.xml.h:115
+#: mail/mail-errors.xml.h:115
msgid "Cannot delete folder \"{0}\"."
msgstr "I pamundur eleminimi i kartelës \"{0}\"."
#. mail:no-delete-special-folder primary
-#: ../mail/mail-errors.xml.h:119
+#: mail/mail-errors.xml.h:119
msgid "Cannot delete system folder \"{0}\"."
msgstr "E pamundur fshirja e kartelës së sistemit \"{0}\"."
#. mail:no-delete-special-folder secondary
#. mail:no-rename-special-folder secondary
-#: ../mail/mail-errors.xml.h:121 ../mail/mail-errors.xml.h:125
+#: mail/mail-errors.xml.h:121 mail/mail-errors.xml.h:125
msgid ""
"System folders are required for Ximian Evolution to function correctly and "
"cannot be renamed, moved, or deleted."
@@ -13287,22 +13208,22 @@ msgstr ""
"ato nuk mund të riemërtohen, lëvizen, apo eleminohen."
#. mail:no-rename-special-folder primary
-#: ../mail/mail-errors.xml.h:123
+#: mail/mail-errors.xml.h:123
msgid "Cannot rename or move system folder \"{0}\"."
msgstr "I pamundur riemërtimi apo lëvizja e kartelës së sistemit \"{0}\"."
#. mail:ask-delete-folder title
-#: ../mail/mail-errors.xml.h:127
+#: mail/mail-errors.xml.h:127
msgid "Delete \"{0}\"?"
msgstr "Eleminoj \"{0}\"?"
#. mail:ask-delete-folder primary
-#: ../mail/mail-errors.xml.h:129
+#: mail/mail-errors.xml.h:129
msgid "Really delete folder \"{0}\" and all of its subfolders?"
msgstr "Me të vërtetë eleminon kartelën \"{0}\" me të gjitha nënkartelat e saj?"
#. mail:ask-delete-folder secondary
-#: ../mail/mail-errors.xml.h:131
+#: mail/mail-errors.xml.h:131
msgid ""
"If you delete the folder, all of its contents and its subfolders contents "
"will be deleted permanently."
@@ -13312,136 +13233,136 @@ msgstr ""
#. mail:no-rename-folder-exists primary
#. mail:no-rename-folder primary
-#: ../mail/mail-errors.xml.h:133 ../mail/mail-errors.xml.h:137
+#: mail/mail-errors.xml.h:133 mail/mail-errors.xml.h:137
msgid "Cannot rename \"{0}\" to \"{1}\"."
msgstr "I pamundur riemërtimi i \"{0}\" në \"{1}\"."
#. mail:no-rename-folder-exists secondary
#. mail:vfolder-notunique secondary
-#: ../mail/mail-errors.xml.h:135 ../mail/mail-errors.xml.h:197
+#: mail/mail-errors.xml.h:135 mail/mail-errors.xml.h:197
msgid "A folder named \"{1}\" already exists. Please use a different name."
msgstr "Një kartelë me emër \"{0}\" ekziston. Ju lutem zgjidhni një emër tjetër."
#. mail:no-rename-folder secondary
-#: ../mail/mail-errors.xml.h:139
+#: mail/mail-errors.xml.h:139
msgid "Because \"{2}\"."
msgstr "Sepse \"{2}\"."
#. mail:no-move-folder-nostore primary
#. mail:no-move-folder-to-nostore primary
-#: ../mail/mail-errors.xml.h:141 ../mail/mail-errors.xml.h:145
+#: mail/mail-errors.xml.h:141 mail/mail-errors.xml.h:145
msgid "Cannot move folder \"{0}\" to \"{1}\"."
msgstr "E pamundur lëvizja e kartelës \"{0}\" në \"{1}\"."
#. mail:no-move-folder-nostore secondary
#. mail:no-copy-folder-nostore secondary
-#: ../mail/mail-errors.xml.h:143 ../mail/mail-errors.xml.h:151
+#: mail/mail-errors.xml.h:143 mail/mail-errors.xml.h:151
msgid "Cannot open source \"{2}\"."
msgstr "E pamundur hapja e burimit \"{2}\"."
#. mail:no-move-folder-to-nostore secondary
#. mail:no-copy-folder-to-nostore secondary
-#: ../mail/mail-errors.xml.h:147 ../mail/mail-errors.xml.h:155
+#: mail/mail-errors.xml.h:147 mail/mail-errors.xml.h:155
msgid "Cannot open target \"{2}\"."
msgstr "E pamundur hapja e objektivit \"{2}\"."
#. mail:no-copy-folder-nostore primary
#. mail:no-copy-folder-to-nostore primary
-#: ../mail/mail-errors.xml.h:149 ../mail/mail-errors.xml.h:153
+#: mail/mail-errors.xml.h:149 mail/mail-errors.xml.h:153
msgid "Cannot copy folder \"{0}\" to \"{1}\"."
msgstr "I pamundur kopjimi i kartelës \"{0}\" tek \"{1}\"."
#. mail:no-create-folder-nostore primary
-#: ../mail/mail-errors.xml.h:157
+#: mail/mail-errors.xml.h:157
msgid "Cannot create folder \"{0}\"."
msgstr "I pamundur krijimi i kartelës \"{0}\"."
#. mail:no-create-folder-nostore secondary
-#: ../mail/mail-errors.xml.h:159
+#: mail/mail-errors.xml.h:159
msgid "Cannot open source \"{1}\""
msgstr "E pamundur hapja e burimit \"{1}\""
#. mail:account-incomplete primary
#. mail:account-notunique primary
-#: ../mail/mail-errors.xml.h:161 ../mail/mail-errors.xml.h:165
+#: mail/mail-errors.xml.h:161 mail/mail-errors.xml.h:165
msgid "Cannot save changes to account."
msgstr "E pamundur ruajtja e ndryshimeve në llogari."
#. mail:account-incomplete secondary
-#: ../mail/mail-errors.xml.h:163
+#: mail/mail-errors.xml.h:163
msgid "You have not filled in all of the required information."
msgstr "Nuk keni plotësuar të gjitha informacionet e kërkuara."
#. mail:account-notunique secondary
-#: ../mail/mail-errors.xml.h:167
+#: mail/mail-errors.xml.h:167
msgid "You may not create two accounts with the same name."
msgstr "Nuk mund të krijohen dy llogari me të njëjtin emër."
#. mail:ask-delete-account title
-#: ../mail/mail-errors.xml.h:169
+#: mail/mail-errors.xml.h:169
msgid "Delete account?"
msgstr "Eleminon llogarinë?"
#. mail:ask-delete-account primary
-#: ../mail/mail-errors.xml.h:171
+#: mail/mail-errors.xml.h:171
msgid "Are you sure you want to delete this account?"
msgstr "Jeni i sigurt që dëshironi të eleminoni këtë llogari?"
#. mail:ask-delete-account secondary
-#: ../mail/mail-errors.xml.h:173
+#: mail/mail-errors.xml.h:173
msgid "If you proceed, the account information will be deleted permanently."
msgstr "Nëse vazhdoni, informacionet e llogarisë do të fshihen përgjithmonë."
-#: ../mail/mail-errors.xml.h:174
+#: mail/mail-errors.xml.h:174
msgid "Don't delete"
msgstr "Mos elemino"
#. mail:no-save-signature primary
-#: ../mail/mail-errors.xml.h:176
+#: mail/mail-errors.xml.h:176
msgid "Could not save signature file."
msgstr "E pamundur ruajtja e file të firmës."
#. mail:no-save-signature secondary
-#: ../mail/mail-errors.xml.h:178
+#: mail/mail-errors.xml.h:178
msgid "Because \"{0}\"."
msgstr "Sepse \"{0}\"."
#. mail:signature-notscript primary
-#: ../mail/mail-errors.xml.h:180
+#: mail/mail-errors.xml.h:180
msgid "Cannot set signature script \"{0}\"."
msgstr "I pamundur caktimi i skriptit të firmës \"{0}\"."
#. mail:signature-notscript secondary
-#: ../mail/mail-errors.xml.h:182
+#: mail/mail-errors.xml.h:182
msgid "The script file must exist and be executable."
msgstr "File me script duhet të ekzistojë dhe duhet të jetë i ekzekutueshëm."
#. mail:ask-signature-changed title
-#: ../mail/mail-errors.xml.h:184
+#: mail/mail-errors.xml.h:184
msgid "Discard changed?"
msgstr "Anullon ndryshimet?"
#. mail:ask-signature-changed primary
-#: ../mail/mail-errors.xml.h:186
+#: mail/mail-errors.xml.h:186
msgid "Do you wish to save your changes?"
msgstr "Dëshiron të ruash ndryshimet e kryera?"
#. mail:ask-signature-changed secondary
-#: ../mail/mail-errors.xml.h:188
+#: mail/mail-errors.xml.h:188
msgid "This signature has been changed, but has not been saved."
msgstr "Firma është ndryshuar, por nuk është ruajtur."
-#: ../mail/mail-errors.xml.h:189
+#: mail/mail-errors.xml.h:189
msgid "_Discard changes"
msgstr "_Anullo ndryshimet"
#. mail:vfolder-notexist primary
-#: ../mail/mail-errors.xml.h:191
+#: mail/mail-errors.xml.h:191
msgid "Cannot edit vFolder \"{0}\" as it does not exist."
msgstr "I pamundur ndryshimi i kartelës virtuale \"{0}\" m.q.s. nuk ekziston."
#. mail:vfolder-notexist secondary
-#: ../mail/mail-errors.xml.h:193
+#: mail/mail-errors.xml.h:193
msgid ""
"This folder may have been added implicitly, go to the vFolder editor to add "
"it explicitly, if required."
@@ -13450,17 +13371,17 @@ msgstr ""
"virtuale për t'a shtuar si duhet, nëse ka nevojë."
#. mail:vfolder-notunique primary
-#: ../mail/mail-errors.xml.h:195
+#: mail/mail-errors.xml.h:195
msgid "Cannot add vFolder \"{0}\"."
msgstr "I pamundur shtimi i kartelës virtuale \"{0}\"."
#. mail:vfolder-updated primary
-#: ../mail/mail-errors.xml.h:199
+#: mail/mail-errors.xml.h:199
msgid "vFolders automatically updated."
msgstr "vKartelat u përditësua automatikisht."
#. mail:vfolder-updated secondary
-#: ../mail/mail-errors.xml.h:201
+#: mail/mail-errors.xml.h:201
msgid ""
"The following vFolder(s):\n"
"{0}\n"
@@ -13475,12 +13396,12 @@ msgstr ""
"Dhe u përditësua."
#. mail:filter-updated primary
-#: ../mail/mail-errors.xml.h:207
+#: mail/mail-errors.xml.h:207
msgid "Mail filters automatically updated."
msgstr "Filtrat e mesazheve u rifreskuan automatikisht."
#. mail:filter-updated secondary
-#: ../mail/mail-errors.xml.h:209
+#: mail/mail-errors.xml.h:209
msgid ""
"The following filter rule(s):\n"
"{0}\n"
@@ -13495,27 +13416,27 @@ msgstr ""
"Dhe u përditësuan."
#. mail:no-folder primary
-#: ../mail/mail-errors.xml.h:215
+#: mail/mail-errors.xml.h:215
msgid "Missing folder."
msgstr "Kartela mungon."
#. mail:no-folder secondary
-#: ../mail/mail-errors.xml.h:217
+#: mail/mail-errors.xml.h:217
msgid "You must specify a folder."
msgstr "Ju duhet të përcaktoni një kartelë."
#. mail:no-name-vfolder secondary
-#: ../mail/mail-errors.xml.h:221
+#: mail/mail-errors.xml.h:221
msgid "You must name this vFolder."
msgstr "Duhet t'i jepni një emër kësaj vKartele."
#. mail:vfolder-no-source primary
-#: ../mail/mail-errors.xml.h:223
+#: mail/mail-errors.xml.h:223
msgid "No sources selected."
msgstr "Nuk është zgjedhur burimi."
#. mail:vfolder-no-source secondary
-#: ../mail/mail-errors.xml.h:225
+#: mail/mail-errors.xml.h:225
msgid ""
"You must specify at least one folder as a source.\n"
"Either by selecting the folders individually, and/or by selecting\n"
@@ -13526,12 +13447,12 @@ msgstr ""
"të gjitha kartelat lokale, të gjitha kartelat remote, ose së bashku."
#. mail:ask-migrate-existing primary
-#: ../mail/mail-errors.xml.h:229
+#: mail/mail-errors.xml.h:229
msgid "Problem migrating old mail folder \"{0}\"."
msgstr "Problem gjatë migrimit të kartelës së vjetër së postës \"{0}\"."
#. mail:ask-migrate-existing secondary
-#: ../mail/mail-errors.xml.h:231
+#: mail/mail-errors.xml.h:231
msgid ""
"A non-empty folder at \"{1}\" already exists.\n"
"\n"
@@ -13543,25 +13464,25 @@ msgstr ""
"Mund të vendosni t'a shpërfillni këtë kartelë, mbishkruani apo shtoni "
"përmbajtjen e saj, ose të dilni.\n"
-#: ../mail/mail-errors.xml.h:235
+#: mail/mail-errors.xml.h:235
msgid "Ignore"
msgstr "Shpërfill"
-#: ../mail/mail-errors.xml.h:236 ../widgets/misc/e-system-errors.xml.h:7
+#: mail/mail-errors.xml.h:236 widgets/misc/e-system-errors.xml.h:7
msgid "_Overwrite"
msgstr "_Mbishkruaj"
-#: ../mail/mail-errors.xml.h:237
+#: mail/mail-errors.xml.h:237
msgid "_Append"
msgstr "_Shto (në fund)"
#. mail:no-load-license primary
-#: ../mail/mail-errors.xml.h:239
+#: mail/mail-errors.xml.h:239
msgid "Unable to read license file."
msgstr "I pamundur leximi i file të liçencës."
#. mail:no-load-license secondary
-#: ../mail/mail-errors.xml.h:241
+#: mail/mail-errors.xml.h:241
msgid ""
"Cannot read the license file \"{0}\", due to an\n"
" installation problem. You will not be able to use this provider "
@@ -13574,22 +13495,22 @@ msgstr ""
" të pranoni liçencën e tij."
#. mail:checking-service title
-#: ../mail/mail-errors.xml.h:245
+#: mail/mail-errors.xml.h:245
msgid "Querying server"
msgstr "Duke pyetur serverin"
#. mail:checking-service primary
-#: ../mail/mail-errors.xml.h:247
+#: mail/mail-errors.xml.h:247
msgid "Please wait."
msgstr "Ju lutem prisni."
#. mail:checking-service secondary
-#: ../mail/mail-errors.xml.h:249
+#: mail/mail-errors.xml.h:249
msgid "Querying server for a list of supported authentication mechanisms."
msgstr "Duke pyetur serverin për listën me mekanizmat e suportuar të autentifikimit."
#. mail:gw-accountsetup-error primary
-#: ../mail/mail-errors.xml.h:251
+#: mail/mail-errors.xml.h:251
msgid ""
"Unable to connect to the GroupWise\n"
"server."
@@ -13598,7 +13519,7 @@ msgstr ""
"GroupWise."
#. mail:gw-accountsetup-error secondary
-#: ../mail/mail-errors.xml.h:254
+#: mail/mail-errors.xml.h:254
msgid ""
"\n"
"Please check your account settings and try again.\n"
@@ -13606,20 +13527,20 @@ msgstr ""
"\n"
"Kontrollo rregullimet e llogarisë suaj dhe riprovo.\n"
-#: ../mail/mail-folder-cache.c:813
+#: mail/mail-folder-cache.c:813
#, c-format
msgid "Pinging %s"
msgstr "Duke ping-uar %s"
-#: ../mail/mail-ops.c:101
+#: mail/mail-ops.c:101
msgid "Filtering Folder"
msgstr "Duke filtruar kartelën"
-#: ../mail/mail-ops.c:262
+#: mail/mail-ops.c:262
msgid "Fetching Mail"
msgstr "Duke marrë postën"
-#: ../mail/mail-ops.c:542 ../mail/mail-ops.c:585
+#: mail/mail-ops.c:542 mail/mail-ops.c:585
#, c-format
msgid ""
"Failed to append to %s: %s\n"
@@ -13629,119 +13550,119 @@ msgstr ""
"Po shtoj tek kartela lokale `Dërguar`."
#. sending mail, filtering failed
-#: ../mail/mail-ops.c:564
+#: mail/mail-ops.c:564
#, c-format
msgid "Failed to apply outgoing filters: %s"
msgstr "I pamundur aplikimi i filtrimit në dalje: %s"
-#: ../mail/mail-ops.c:602
+#: mail/mail-ops.c:602
#, c-format
msgid "Failed to append to local `Sent' folder: %s"
msgstr "I pamundur shtimi tek kartela lokale `Dërguar': %s"
-#: ../mail/mail-ops.c:702
+#: mail/mail-ops.c:702
#, c-format
msgid "Sending message %d of %d"
msgstr "Duke dërguar mesazhin %d në %d"
-#: ../mail/mail-ops.c:727
+#: mail/mail-ops.c:727
#, c-format
msgid "Failed to send %d of %d messages"
msgstr "Dërgimi i %d nga %d mesazhe dështoi"
-#: ../mail/mail-ops.c:729 ../mail/mail-send-recv.c:613
+#: mail/mail-ops.c:729 mail/mail-send-recv.c:613
msgid "Cancelled."
msgstr "U anullua."
-#: ../mail/mail-ops.c:731
+#: mail/mail-ops.c:731
msgid "Complete."
msgstr "U plotësua."
-#: ../mail/mail-ops.c:828
+#: mail/mail-ops.c:828
msgid "Saving message to folder"
msgstr "Duke ruajtur mesazhin tek kartela"
-#: ../mail/mail-ops.c:913
+#: mail/mail-ops.c:913
#, c-format
msgid "Moving messages to %s"
msgstr "Duke lëvizur mesazhet tek %s"
-#: ../mail/mail-ops.c:913
+#: mail/mail-ops.c:913
#, c-format
msgid "Copying messages to %s"
msgstr "Duke kopjuar mesazhet tek %s"
-#: ../mail/mail-ops.c:1139
+#: mail/mail-ops.c:1139
msgid "Forwarded messages"
msgstr "Mesazhet e përcjellë"
-#: ../mail/mail-ops.c:1182
+#: mail/mail-ops.c:1182
#, c-format
msgid "Opening folder %s"
msgstr "Duke hapur kartelën %s"
-#: ../mail/mail-ops.c:1254
+#: mail/mail-ops.c:1254
#, c-format
msgid "Opening store %s"
msgstr "Duke hapur arkivin %s"
-#: ../mail/mail-ops.c:1332
+#: mail/mail-ops.c:1332
#, c-format
msgid "Removing folder %s"
msgstr "Duke hequr kartelën %s"
-#: ../mail/mail-ops.c:1426
+#: mail/mail-ops.c:1426
#, c-format
msgid "Storing folder '%s'"
msgstr "Duke arkivuar kartelën '%s'"
-#: ../mail/mail-ops.c:1491
+#: mail/mail-ops.c:1491
#, c-format
msgid "Expunging and storing account '%s'"
msgstr "Duke pastruar dhe magazinuar llogarinë '%s'"
-#: ../mail/mail-ops.c:1492
+#: mail/mail-ops.c:1492
#, c-format
msgid "Storing account '%s'"
msgstr "Duke magazinuar llogarinë '%s'"
-#: ../mail/mail-ops.c:1547
+#: mail/mail-ops.c:1547
msgid "Refreshing folder"
msgstr "Duke rifreskuar kartelën"
-#: ../mail/mail-ops.c:1583 ../mail/mail-ops.c:1634
+#: mail/mail-ops.c:1583 mail/mail-ops.c:1634
msgid "Expunging folder"
msgstr "Duke pastruar kartelën"
-#: ../mail/mail-ops.c:1631
+#: mail/mail-ops.c:1631
#, c-format
msgid "Emptying trash in '%s'"
msgstr "Duke zbrazur koshin në '%s'"
-#: ../mail/mail-ops.c:1632
+#: mail/mail-ops.c:1632
msgid "Local Folders"
msgstr "Kartelat lokale"
-#: ../mail/mail-ops.c:1715
+#: mail/mail-ops.c:1715
#, c-format
msgid "Retrieving message %s"
msgstr "Duke tërhequr mesazhin %s"
-#: ../mail/mail-ops.c:1787
+#: mail/mail-ops.c:1787
#, c-format
msgid "Retrieving %d message"
msgid_plural "Retrieving %d messages"
msgstr[0] "Duke tërhequr %d mesazh"
msgstr[1] "Duke tërhequr %d mesazhe"
-#: ../mail/mail-ops.c:1873
+#: mail/mail-ops.c:1873
#, c-format
msgid "Saving %d message"
msgid_plural "Saving %d messsages"
msgstr[0] "Duke ruajtur %d mesazh"
msgstr[1] "Duke ruajtur %d mesazhe"
-#: ../mail/mail-ops.c:1923
+#: mail/mail-ops.c:1923
#, c-format
msgid ""
"Unable to create output file: %s\n"
@@ -13750,7 +13671,7 @@ msgstr ""
"I pamundur krijimi i file në dalje: %s\n"
" %s"
-#: ../mail/mail-ops.c:1951
+#: mail/mail-ops.c:1951
#, c-format
msgid ""
"Error saving messages to: %s:\n"
@@ -13759,11 +13680,11 @@ msgstr ""
"Gabim gjatë ruajtjes së mesazheve në: %s\n"
" %s"
-#: ../mail/mail-ops.c:2022
+#: mail/mail-ops.c:2022
msgid "Saving attachment"
msgstr "Duke ruajtur të bashkangjiturin"
-#: ../mail/mail-ops.c:2034
+#: mail/mail-ops.c:2034
#, c-format
msgid ""
"Cannot create output file: %s:\n"
@@ -13772,426 +13693,425 @@ msgstr ""
"I pamundur krijimi i file në dalje: %s:\n"
" %s"
-#: ../mail/mail-ops.c:2044
+#: mail/mail-ops.c:2044
#, c-format
msgid "Could not write data: %s"
msgstr "I pamundur shkrimi i të dhënave: %s"
-#: ../mail/mail-ops.c:2194
+#: mail/mail-ops.c:2194
#, c-format
msgid "Disconnecting from %s"
msgstr "Duke u shkëputur nga %s"
-#: ../mail/mail-ops.c:2194
+#: mail/mail-ops.c:2194
#, c-format
msgid "Reconnecting to %s"
msgstr "Duke u rilidhur me %s"
-#: ../mail/mail-ops.c:2310
+#: mail/mail-ops.c:2310
msgid "Checking Service"
msgstr "Kontrolli i shërbimit"
-#: ../mail/mail-send-recv.c:158
+#: mail/mail-send-recv.c:158
msgid "Cancelling..."
msgstr "Duke fshirë..."
-#: ../mail/mail-send-recv.c:265
+#: mail/mail-send-recv.c:265
#, c-format
msgid "Server: %s, Type: %s"
msgstr "Serveri: %s, Lloji: %s"
-#: ../mail/mail-send-recv.c:267
+#: mail/mail-send-recv.c:267
#, c-format
msgid "Path: %s, Type: %s"
msgstr "Pozicioni: %s, Lloji: %s"
-#: ../mail/mail-send-recv.c:269
+#: mail/mail-send-recv.c:269
#, c-format
msgid "Type: %s"
msgstr "Lloji: %s"
-#: ../mail/mail-send-recv.c:320
+#: mail/mail-send-recv.c:320
msgid "Send & Receive Mail"
msgstr "Dërgo & Merr Postën"
-#: ../mail/mail-send-recv.c:327
+#: mail/mail-send-recv.c:327
msgid "Cancel _All"
msgstr "Anullo _gjithçka"
-#: ../mail/mail-send-recv.c:416
+#: mail/mail-send-recv.c:416
msgid "Updating..."
msgstr "Duke rifreskuar të dhënat..."
-#: ../mail/mail-send-recv.c:416 ../mail/mail-send-recv.c:468
+#: mail/mail-send-recv.c:416 mail/mail-send-recv.c:468
msgid "Waiting..."
msgstr "Në pritje..."
-#: ../mail/mail-session.c:208
+#: mail/mail-session.c:208
#, c-format
msgid "Enter Password for %s"
msgstr "Shkruaj fjalëkalimin për %s"
-#: ../mail/mail-session.c:210
+#: mail/mail-session.c:210
msgid "Enter Password"
msgstr "Shkruaj fjalëkalimin"
-#: ../mail/mail-session.c:239
+#: mail/mail-session.c:239
msgid "User canceled operation."
msgstr "Veprim i anulluar nga përdoruesi."
-#: ../mail/mail-signature-editor.c:372
+#: mail/mail-signature-editor.c:372
msgid "Edit signature"
msgstr "Ndrysho firmën"
-#: ../mail/mail-signature-editor.c:412
+#: mail/mail-signature-editor.c:412
msgid "Enter a name for this signature."
msgstr "Shkruaj një emër për këtë firmë."
-#: ../mail/mail-signature-editor.c:415
-#: ../plugins/shared-folder/properties.glade.h:5
+#: mail/mail-signature-editor.c:415 plugins/shared-folder/properties.glade.h:5
msgid "Name:"
msgstr "Emri:"
-#: ../mail/mail-tools.c:115
+#: mail/mail-tools.c:115
#, c-format
msgid "Could not create spool directory `%s': %s"
msgstr "I pamundur krijimi i directory spool `%s': %s"
-#: ../mail/mail-tools.c:142
+#: mail/mail-tools.c:142
#, c-format
msgid "Trying to movemail a non-mbox source `%s'"
msgstr "Përpjekje për të lëvizur postën e një burimi jo-mbox `%s'"
-#: ../mail/mail-tools.c:277
+#: mail/mail-tools.c:277
#, c-format
msgid "Forwarded message - %s"
msgstr "Mesazhi i përcjellë - %s"
-#: ../mail/mail-tools.c:279
+#: mail/mail-tools.c:279
msgid "Forwarded message"
msgstr "Mesazhi i përcjellë"
-#: ../mail/mail-tools.c:320
+#: mail/mail-tools.c:320
#, c-format
msgid "Invalid folder: `%s'"
msgstr "Kartelë e pavlefshme: `%s'"
-#: ../mail/mail-vfolder.c:90
+#: mail/mail-vfolder.c:90
#, c-format
msgid "Setting up vFolder: %s"
msgstr "Rregullimi i kartelës vFolder: %s"
-#: ../mail/mail-vfolder.c:239
+#: mail/mail-vfolder.c:239
#, c-format
msgid "Updating vFolders for '%s:%s'"
msgstr "Duke rifreskuar kartelat virtuale për '%s:%s'"
-#: ../mail/mail-vfolder.c:246
+#: mail/mail-vfolder.c:246
#, c-format
msgid "Updating vFolders for '%s'"
msgstr "Duke rifreskuar kartelat virtuale për '%s'"
-#: ../mail/mail-vfolder.c:1008
+#: mail/mail-vfolder.c:1008
msgid "Edit vFolder"
msgstr "Ndrysho kartelën vFolder"
-#: ../mail/mail-vfolder.c:1092
+#: mail/mail-vfolder.c:1092
msgid "New vFolder"
msgstr "Kartelë e re vFolder"
-#: ../mail/message-list.c:994
+#: mail/message-list.c:994
msgid "Unseen"
msgstr "Paparë"
-#: ../mail/message-list.c:995
+#: mail/message-list.c:995
msgid "Seen"
msgstr "Shikuar"
-#: ../mail/message-list.c:996
+#: mail/message-list.c:996
msgid "Answered"
msgstr "Përgjigjur"
-#: ../mail/message-list.c:997
+#: mail/message-list.c:997
msgid "Multiple Unseen Messages"
msgstr "Mesazhe shumëfishë të palexuar"
-#: ../mail/message-list.c:998
+#: mail/message-list.c:998
msgid "Multiple Messages"
msgstr "Mesazhe shumëfishë"
-#: ../mail/message-list.c:1002
+#: mail/message-list.c:1002
msgid "Lowest"
msgstr "Më i ulti"
-#: ../mail/message-list.c:1003
+#: mail/message-list.c:1003
msgid "Lower"
msgstr "Inferior"
-#: ../mail/message-list.c:1007
+#: mail/message-list.c:1007
msgid "Higher"
msgstr "Më i lartë"
-#: ../mail/message-list.c:1008
+#: mail/message-list.c:1008
msgid "Highest"
msgstr "Më i larti"
-#: ../mail/message-list.c:1336
+#: mail/message-list.c:1336
msgid "?"
msgstr "?"
#. strftime format of a time,
#. in 12-hour format, without seconds.
-#: ../mail/message-list.c:1343 ../plugins/itip-formatter/itip-view.c:189
+#: mail/message-list.c:1343 plugins/itip-formatter/itip-view.c:189
msgid "Today %l:%M %p"
msgstr "Sot %l:%M %p"
-#: ../mail/message-list.c:1352
+#: mail/message-list.c:1352
msgid "Yesterday %l:%M %p"
msgstr "Dje %l:%M %p"
-#: ../mail/message-list.c:1364
+#: mail/message-list.c:1364
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
-#: ../mail/message-list.c:1372
+#: mail/message-list.c:1372
msgid "%b %d %l:%M %p"
msgstr "%b %d %l:%M %p"
-#: ../mail/message-list.c:1374
+#: mail/message-list.c:1374
msgid "%b %d %Y"
msgstr "%b %d %Y"
-#: ../mail/message-list.c:2041
+#: mail/message-list.c:2041
msgid "Message List"
msgstr "Lista e mesazheve"
-#: ../mail/message-list.c:3384
+#: mail/message-list.c:3384
msgid "Generating message list"
msgstr "Duke krijuar listën e mesazheve"
-#: ../mail/message-list.etspec.h:3
+#: mail/message-list.etspec.h:3
msgid "Due By"
msgstr "Për shkak të"
-#: ../mail/message-list.etspec.h:4
+#: mail/message-list.etspec.h:4
msgid "Flag Status"
msgstr "Gjendja e flamurëve"
-#: ../mail/message-list.etspec.h:5
+#: mail/message-list.etspec.h:5
msgid "Flagged"
msgstr "Me flamurë"
-#: ../mail/message-list.etspec.h:6
+#: mail/message-list.etspec.h:6
msgid "Follow Up Flag"
msgstr "Flamuri \"ndiq rrjedhën\""
-#: ../mail/message-list.etspec.h:8
+#: mail/message-list.etspec.h:8
msgid "Original Location"
msgstr "Vendodhja orgjinale"
-#: ../mail/message-list.etspec.h:9
+#: mail/message-list.etspec.h:9
msgid "Received"
msgstr "Marrë"
-#: ../mail/message-list.etspec.h:11
+#: mail/message-list.etspec.h:11
msgid "Size"
msgstr "Madhësia"
-#: ../mail/message-tag-followup.c:74
+#: mail/message-tag-followup.c:74
msgid "Call"
msgstr "Thirrje"
-#: ../mail/message-tag-followup.c:75
+#: mail/message-tag-followup.c:75
msgid "Do Not Forward"
msgstr "Mos përcill"
-#: ../mail/message-tag-followup.c:76
+#: mail/message-tag-followup.c:76
msgid "Follow-Up"
msgstr "Vazhdon"
-#: ../mail/message-tag-followup.c:77
+#: mail/message-tag-followup.c:77
msgid "For Your Information"
msgstr "Për informacion"
-#: ../mail/message-tag-followup.c:78 ../ui/evolution-mail-message.xml.h:42
+#: mail/message-tag-followup.c:78 ui/evolution-mail-message.xml.h:42
msgid "Forward"
msgstr "Vazhdo"
-#: ../mail/message-tag-followup.c:79
+#: mail/message-tag-followup.c:79
msgid "No Response Necessary"
msgstr "Nuk ka nevojë të përgjigjesh"
-#: ../mail/message-tag-followup.c:81 ../ui/evolution-mail-message.xml.h:85
+#: mail/message-tag-followup.c:81 ui/evolution-mail-message.xml.h:85
msgid "Reply"
msgstr "Përgjigju"
-#: ../mail/message-tag-followup.c:82 ../ui/evolution-mail-message.xml.h:86
+#: mail/message-tag-followup.c:82 ui/evolution-mail-message.xml.h:86
msgid "Reply to All"
msgstr "Përgjigju të gjithëve"
-#: ../mail/message-tag-followup.c:83
+#: mail/message-tag-followup.c:83
msgid "Review"
msgstr "Pamja e parë"
-#: ../mail/searchtypes.xml.h:1
+#: mail/searchtypes.xml.h:1
msgid "Body contains"
msgstr "Trupi përmban"
-#: ../mail/searchtypes.xml.h:2
+#: mail/searchtypes.xml.h:2
msgid "Message contains"
msgstr "Mesazhi përmban"
-#: ../mail/searchtypes.xml.h:3
+#: mail/searchtypes.xml.h:3
msgid "Recipients contain"
msgstr "Marrësit përmban"
-#: ../mail/searchtypes.xml.h:4
+#: mail/searchtypes.xml.h:4
msgid "Sender contains"
msgstr "Dërguesi përmban"
-#: ../mail/searchtypes.xml.h:5
+#: mail/searchtypes.xml.h:5
msgid "Subject contains"
msgstr "Subjekti përmban"
-#: ../mail/searchtypes.xml.h:6
+#: mail/searchtypes.xml.h:6
msgid "Subject or Sender contains"
msgstr "Subjekti apo Dërguesi përmban"
-#: ../plugins/backup-restore/backup-restore.c:51
+#: plugins/backup-restore/backup-restore.c:51
msgid "Select name of Evolution archive"
msgstr "Zgjidh emrin e arkivit të Evolution"
-#: ../plugins/backup-restore/backup-restore.c:61
+#: plugins/backup-restore/backup-restore.c:61
msgid "_Restart Evolution after backup"
msgstr "_Rinis Evolution mbas ruajtjes së kopjes së sigurisë"
-#: ../plugins/backup-restore/backup-restore.c:89
+#: plugins/backup-restore/backup-restore.c:89
msgid "Select Evolution archive to restore"
msgstr "Zgjidh arkivin e Evolution që duhet rikthyer"
-#: ../plugins/backup-restore/backup-restore.c:97
+#: plugins/backup-restore/backup-restore.c:97
msgid "_Restart Evolution after restore"
msgstr "_Rinis Evolution mbas rikthimit"
-#: ../plugins/backup-restore/backup.c:109
+#: plugins/backup-restore/backup.c:109
msgid "Backup Evolution directory"
msgstr "Backup kartela e Evolution"
-#: ../plugins/backup-restore/backup.c:111
+#: plugins/backup-restore/backup.c:111
msgid "Restore Evolution directory"
msgstr "Rikthe kartelën e Evolution"
-#: ../plugins/backup-restore/backup.c:113
+#: plugins/backup-restore/backup.c:113
msgid "Check Evolution archive"
msgstr "Kontrollo arkivin e Evolution"
-#: ../plugins/backup-restore/backup.c:115
+#: plugins/backup-restore/backup.c:115
msgid "Restart Evolution"
msgstr "Rinis Evolution"
-#: ../plugins/backup-restore/org-gnome-backup-restore.xml.h:1
+#: plugins/backup-restore/org-gnome-backup-restore.xml.h:1
msgid "Backup Settings..."
msgstr "Rregullimet e backup..."
-#: ../plugins/backup-restore/org-gnome-backup-restore.xml.h:2
+#: plugins/backup-restore/org-gnome-backup-restore.xml.h:2
msgid "Backup and restore Evolution data and settings"
msgstr "Bën backup dhe rikthen të dhënat dhe rregullimet e Evolution"
-#: ../plugins/backup-restore/org-gnome-backup-restore.xml.h:3
+#: plugins/backup-restore/org-gnome-backup-restore.xml.h:3
msgid "Restore Settings..."
msgstr "Rikthe rregullimet..."
-#: ../plugins/bbdb/bbdb.c:388
+#: plugins/bbdb/bbdb.c:388
msgid "Automatic Contacts"
msgstr "Kontakte automatike"
-#: ../plugins/bbdb/bbdb.c:397
+#: plugins/bbdb/bbdb.c:397
msgid "<span weight=\"bold\">Automatic Contacts</span>"
msgstr "<span weight=\"bold\">Kontakte automatike</span>"
#. Enable BBDB checkbox
-#: ../plugins/bbdb/bbdb.c:410
+#: plugins/bbdb/bbdb.c:410
msgid "_Automatically create entries in the addressbook when responding to mail"
msgstr "_Automatikisht të krijohen zërat në rubrikë kur i jipet përgjigje një email-i"
-#: ../plugins/bbdb/bbdb.c:428
+#: plugins/bbdb/bbdb.c:428
msgid "<span weight=\"bold\">Instant Messaging Contacts</span>"
msgstr "<span weight=\"bold\">Kontaktet e mesazheve të menjëhershëm</span>"
#. Enable Gaim Checkbox
-#: ../plugins/bbdb/bbdb.c:441
+#: plugins/bbdb/bbdb.c:441
msgid ""
"Periodically synchronize contact information and images from my _instant "
"messenger"
msgstr ""
-"Sinkronizim periodik i informacioneve dhe figurave të kontakteve nga mesazhet "
-"e _menjëhershëm"
+"Sinkronizim periodik i informacioneve dhe figurave të kontakteve nga "
+"mesazhet e _menjëhershëm"
#. Synchronize now button.
-#: ../plugins/bbdb/bbdb.c:448
+#: plugins/bbdb/bbdb.c:448
msgid "Synchronize with _buddy list now"
msgstr "Sinkronizo tani listën _buddy"
-#: ../plugins/calendar-weather/calendar-weather.c:54
-#: ../plugins/calendar-weather/calendar-weather.c:60
+#: plugins/calendar-weather/calendar-weather.c:54
+#: plugins/calendar-weather/calendar-weather.c:60
msgid "Weather: Cloudy"
msgstr "Moti: Me re"
-#: ../plugins/calendar-weather/calendar-weather.c:61
+#: plugins/calendar-weather/calendar-weather.c:61
msgid "Weather: Fog"
msgstr "Moti: Mjegull"
-#: ../plugins/calendar-weather/calendar-weather.c:62
+#: plugins/calendar-weather/calendar-weather.c:62
msgid "Weather: Partly Cloudy"
msgstr "Moti: Pjesërisht me re"
-#: ../plugins/calendar-weather/calendar-weather.c:63
+#: plugins/calendar-weather/calendar-weather.c:63
msgid "Weather: Rain"
msgstr "Moti: Shi"
-#: ../plugins/calendar-weather/calendar-weather.c:64
+#: plugins/calendar-weather/calendar-weather.c:64
msgid "Weather: Snow"
msgstr "Moti: Borë"
-#: ../plugins/calendar-weather/calendar-weather.c:65
+#: plugins/calendar-weather/calendar-weather.c:65
msgid "Weather: Sunny"
msgstr "Moti: Me diell"
-#: ../plugins/calendar-weather/calendar-weather.c:66
+#: plugins/calendar-weather/calendar-weather.c:66
msgid "Weather: Thunderstorms"
msgstr "Moti: Stuhi me vetëtima"
-#: ../plugins/calendar-weather/calendar-weather.c:268
+#: plugins/calendar-weather/calendar-weather.c:268
msgid "Select a location"
msgstr "Zgjidh një zonë"
-#: ../plugins/calendar-weather/calendar-weather.c:655
+#: plugins/calendar-weather/calendar-weather.c:655
msgid "_Units:"
msgstr "_Njësitë:"
-#: ../plugins/calendar-weather/calendar-weather.c:662
+#: plugins/calendar-weather/calendar-weather.c:662
msgid "Metric (Celsius, cm, etc)"
msgstr "Metrike (Celsius, cm, etj.)"
-#: ../plugins/calendar-weather/calendar-weather.c:663
+#: plugins/calendar-weather/calendar-weather.c:663
msgid "Imperial (Fahrenheit, inches, etc)"
msgstr "Anglosaksone (Fahrenheit, inches, etj.)"
-#: ../plugins/default-source/default-source.c:82
+#: plugins/default-source/default-source.c:82
msgid "Mark as default folder"
msgstr "Shëno si kartela e prezgjedhur"
-#: ../plugins/default-source/default-source.c:108
+#: plugins/default-source/default-source.c:108
msgid "Mark as default folder"
msgstr "Shëno si kartela e prezgjedhur"
#. i18n: "Secure Password Authentication" is an Outlookism
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:59
+#: plugins/exchange-account-setup/exchange-account-setup.c:59
msgid "Secure Password"
msgstr "Fjalëkalim i sigurt"
#. i18n: "NTLM" probably doesn't translate
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:62
+#: plugins/exchange-account-setup/exchange-account-setup.c:62
msgid ""
"This option will connect to the Exchange server using secure password (NTLM) "
"authentication."
@@ -14199,20 +14119,20 @@ msgstr ""
"Me këtë opcion lidheni me serverin Exchange duke përdorur autentifikim me "
"fjalëkalim të sigurt (NTLM)."
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:70
+#: plugins/exchange-account-setup/exchange-account-setup.c:70
msgid "Plaintext Password"
msgstr "Fjalëkalim në tekst të thjeshtë"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:72
+#: plugins/exchange-account-setup/exchange-account-setup.c:72
msgid ""
"This option will connect to the Exchange server using standard plaintext "
"password authentication."
msgstr ""
-"Me këtë opcion do të lidheni me serverin Exchange duke përdorur autentifikimin "
-"me një fjalëkalim standart në tekst të thjeshtë."
+"Me këtë opcion do të lidheni me serverin Exchange duke përdorur "
+"autentifikimin me një fjalëkalim standart në tekst të thjeshtë."
#. Description section
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:193
+#: plugins/exchange-account-setup/exchange-account-setup.c:193
msgid ""
"The message specified below will be automatically sent to \n"
"each person who sends mail to you while you are out of the office."
@@ -14220,121 +14140,123 @@ msgstr ""
"Mesazhi i specifikuar në vazhdim do t'i dërgohet automatikisht \n"
"çdo personi që ju dërgon mail kur ju jeni jashtë zyre."
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:221
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:231
+#: plugins/exchange-account-setup/exchange-account-setup.c:221
+#: plugins/exchange-account-setup/exchange-account-setup.c:231
msgid "I am out of the office"
msgstr "Nuk jam në zyrë"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:224
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:228
+#: plugins/exchange-account-setup/exchange-account-setup.c:224
+#: plugins/exchange-account-setup/exchange-account-setup.c:228
msgid "I am in the office"
msgstr "Tani jam në zyrë"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:257
+#: plugins/exchange-account-setup/exchange-account-setup.c:257
msgid "Out of office Message:"
msgstr "Mesazhi jashtë zyre:"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:302
+#: plugins/exchange-account-setup/exchange-account-setup.c:302
msgid "Exchange Settings"
msgstr "Rregullimet e Exchange"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:448
-#: ../plugins/exchange-account-setup/exchange-ask-password.c:200
+#: plugins/exchange-account-setup/exchange-account-setup.c:448
+#: plugins/exchange-account-setup/exchange-ask-password.c:200
msgid "_OWA Url:"
msgstr "Url _OWA:"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:456
-#: ../plugins/exchange-account-setup/exchange-ask-password.c:193
+#: plugins/exchange-account-setup/exchange-account-setup.c:456
+#: plugins/exchange-account-setup/exchange-ask-password.c:193
msgid "A_uthenticate"
msgstr "A_utentikimi"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:664
+#: plugins/exchange-account-setup/exchange-account-setup.c:664
msgid "Authentication Type"
msgstr "Lloji i autentikimit"
-#: ../plugins/exchange-account-setup/exchange-account-setup.c:678
+#: plugins/exchange-account-setup/exchange-account-setup.c:678
msgid "Ch_eck for Supported Types"
msgstr "Kontrollo për lloj_et suportuar"
-#: ../plugins/folder-unsubscribe/folder-unsubscribe.c:57
+#: plugins/folder-unsubscribe/folder-unsubscribe.c:57
#, c-format
msgid "Unsubscribing from folder \"%s\""
msgstr "Duke u ç'regjistruar nga kartela \"%s\""
-#: ../plugins/groupwise-account-setup/camel-gw-listener.c:413
+#: plugins/groupwise-account-setup/camel-gw-listener.c:413
msgid "Checklist"
msgstr "Lista zgjedhjes"
-#: ../plugins/groupwise-send-options/org-gnome-compose-send-options.xml.h:1
+#: plugins/groupwise-send-options/org-gnome-compose-send-options.xml.h:1
msgid "Add Send Options to groupwise messages"
msgstr "Shtoi \"Opcione dërgimi\" mesazheve groupwise"
-#: ../plugins/groupwise-send-options/org-gnome-compose-send-options.xml.h:2
-#: ../widgets/misc/e-send-options.glade.h:20
+#: plugins/groupwise-send-options/org-gnome-compose-send-options.xml.h:2
+#: widgets/misc/e-send-options.glade.h:20
msgid "Send Options"
msgstr "Opcione dërgimi"
-#: ../plugins/itip-formatter/itip-formatter.c:704
+#: plugins/itip-formatter/itip-formatter.c:704
msgid "Unable to parse item"
msgstr "I pamundur analizimi i elementit"
-#: ../plugins/itip-formatter/itip-formatter.c:757
+#: plugins/itip-formatter/itip-formatter.c:757
#, c-format
msgid "Unable to send item to calendar '%s'. %s"
msgstr "I pamundur dërgimi i elementit kalendarit '%s'. %s"
-#: ../plugins/itip-formatter/itip-formatter.c:768
+#: plugins/itip-formatter/itip-formatter.c:768
#, c-format
msgid "Sent to calendar '%s' as accepted"
msgstr "Dërguar kalendarit «%s» si e pranuar"
-#: ../plugins/itip-formatter/itip-formatter.c:772
+#: plugins/itip-formatter/itip-formatter.c:772
#, c-format
msgid "Sent to calendar '%s' as tentative"
msgstr "Dërguar kalendarit «%s» si përpjekje"
-#: ../plugins/itip-formatter/itip-formatter.c:777
+#: plugins/itip-formatter/itip-formatter.c:777
#, c-format
msgid "Sent to calendar '%s' as declined"
msgstr "Dërguar kalendarit «%s» si e papranuar"
-#: ../plugins/itip-formatter/itip-formatter.c:782
+#: plugins/itip-formatter/itip-formatter.c:782
#, c-format
msgid "Sent to calendar '%s' as cancelled"
msgstr "Dërguar kalendarit «%s» si e anulluar"
-#: ../plugins/itip-formatter/itip-formatter.c:833
+#: plugins/itip-formatter/itip-formatter.c:833
msgid "Attendee status could not be updated because the status is invalid"
msgstr ""
"Gjendja e pjesmarrësit nuk mund të rifreskohet për shkak të një gjendje të "
"pavlefshme"
-#: ../plugins/itip-formatter/itip-formatter.c:844
+#: plugins/itip-formatter/itip-formatter.c:844
#, c-format
msgid "Unable to update attendee. %s"
msgstr "I pamundur rifreskimi i pjesmarrësit. %s"
-#: ../plugins/itip-formatter/itip-formatter.c:848
+#: plugins/itip-formatter/itip-formatter.c:848
msgid "Attendee status updated"
msgstr "Gjendja e pjesmarrësit u rifreskua"
-#: ../plugins/itip-formatter/itip-formatter.c:973
+#: plugins/itip-formatter/itip-formatter.c:973
msgid "The calendar attached is not valid"
msgstr "Kalendari i bashkangjitur nuk është i vlefshëm"
-#: ../plugins/itip-formatter/itip-formatter.c:974
+#: plugins/itip-formatter/itip-formatter.c:974
msgid ""
"The message claims to contain a calendar, but the calendar is not valid "
"iCalendar."
-msgstr "Mesazhi përmban një kalendar, por kalendari nuk është një iCalendar i vlefshëm."
+msgstr ""
+"Mesazhi përmban një kalendar, por kalendari nuk është një iCalendar i "
+"vlefshëm."
-#: ../plugins/itip-formatter/itip-formatter.c:1008
-#: ../plugins/itip-formatter/itip-formatter.c:1064
+#: plugins/itip-formatter/itip-formatter.c:1008
+#: plugins/itip-formatter/itip-formatter.c:1064
msgid "The item in the calendar is not valid"
msgstr "Elementi në kalendar nuk është i vlefshëm"
-#: ../plugins/itip-formatter/itip-formatter.c:1009
-#: ../plugins/itip-formatter/itip-formatter.c:1065
+#: plugins/itip-formatter/itip-formatter.c:1009
+#: plugins/itip-formatter/itip-formatter.c:1065
msgid ""
"The message does contain a calendar, but the calendar contains no events, "
"tasks or free/busy information"
@@ -14342,11 +14264,11 @@ msgstr ""
"Mesazhi përmban një kalendar, por kalendari nuk përmban ndodhi, aktivitete "
"apo informacione disponibiliteti"
-#: ../plugins/itip-formatter/itip-formatter.c:1020
+#: plugins/itip-formatter/itip-formatter.c:1020
msgid "The calendar attached contains multiple items"
msgstr "Kalendari i bashkangjitur përmban elementë shumëfishë"
-#: ../plugins/itip-formatter/itip-formatter.c:1021
+#: plugins/itip-formatter/itip-formatter.c:1021
msgid ""
"To process all of these items, the file should be saved and the calendar "
"imported"
@@ -14354,274 +14276,278 @@ msgstr ""
"Për të proçesuar të gjithë elementët, file duhet ruajtur dhe kalendari duhet "
"importuar"
-#: ../plugins/itip-formatter/itip-formatter.c:1658
+#: plugins/itip-formatter/itip-formatter.c:1658
msgid "Meetings and Tasks"
msgstr "Takime dhe punë"
#. Delete message after acting
#. FIXME Need a schema for this
-#: ../plugins/itip-formatter/itip-formatter.c:1681
+#: plugins/itip-formatter/itip-formatter.c:1681
msgid "_Delete message after acting"
msgstr "_Elemino mesazhin mbas aksionit"
-#: ../plugins/itip-formatter/itip-formatter.c:1691
+#: plugins/itip-formatter/itip-formatter.c:1691
msgid "<span weight=\"bold\">Conflict Search</span>"
msgstr "<span weight=\"bold\">Kërkimi konflikteve</span>"
#. Source selector
-#: ../plugins/itip-formatter/itip-formatter.c:1704
+#: plugins/itip-formatter/itip-formatter.c:1704
msgid "Select the calendars to search for meeting conflicts"
msgstr "Zgjidh kalendarët ku duhet kërkuar për takime në konflikt"
#. strftime format of a weekday and a date.
-#: ../plugins/itip-formatter/itip-view.c:175 ../ui/evolution-calendar.xml.h:34
-#: ../widgets/misc/e-cell-date-edit.c:240 ../widgets/misc/e-dateedit.c:450
+#: plugins/itip-formatter/itip-view.c:175 ui/evolution-calendar.xml.h:34
+#: widgets/misc/e-cell-date-edit.c:240 widgets/misc/e-dateedit.c:450
msgid "Today"
msgstr "Sot"
#. strftime format of a time,
#. in 24-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:180
+#: plugins/itip-formatter/itip-view.c:180
msgid "Today %H:%M"
msgstr "Sot në %H:%M"
#. strftime format of a time,
#. in 24-hour format.
-#: ../plugins/itip-formatter/itip-view.c:184
+#: plugins/itip-formatter/itip-view.c:184
msgid "Today %H:%M:%S"
msgstr "Sot në %H:%M:%S"
#. strftime format of a time,
#. in 12-hour format.
-#: ../plugins/itip-formatter/itip-view.c:193
+#: plugins/itip-formatter/itip-view.c:193
msgid "Today %l:%M:%S %p"
msgstr "Sot në %l:%M:%S %p"
#. strftime format of a weekday and a date.
-#: ../plugins/itip-formatter/itip-view.c:203
+#: plugins/itip-formatter/itip-view.c:203
msgid "Tomorrow"
msgstr "Nesër"
#. strftime format of a time,
#. in 24-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:208
+#: plugins/itip-formatter/itip-view.c:208
msgid "Tomorrow %H:%M"
msgstr "Nesër në %H:%M"
#. strftime format of a time,
#. in 24-hour format.
-#: ../plugins/itip-formatter/itip-view.c:212
+#: plugins/itip-formatter/itip-view.c:212
msgid "Tomorrow %H:%M:%S"
msgstr "Nesër në %H:%M:%S"
#. strftime format of a time,
#. in 12-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:217
+#: plugins/itip-formatter/itip-view.c:217
msgid "Tomorrow %l:%M %p"
msgstr "Nesër në %l:%M %p"
#. strftime format of a time,
#. in 12-hour format.
-#: ../plugins/itip-formatter/itip-view.c:221
+#: plugins/itip-formatter/itip-view.c:221
msgid "Tomorrow %l:%M:%S %p"
msgstr "Nesër në %l:%M:%S %p"
#. strftime format of a weekday.
-#: ../plugins/itip-formatter/itip-view.c:240
+#: plugins/itip-formatter/itip-view.c:240
#, c-format
msgid "%A"
msgstr "%A"
#. strftime format of a weekday and a
#. time, in 24-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:245
+#: plugins/itip-formatter/itip-view.c:245
msgid "%A %H:%M"
msgstr "%A në orën %H:%M"
#. strftime format of a weekday and a
#. time, in 24-hour format.
-#: ../plugins/itip-formatter/itip-view.c:249
+#: plugins/itip-formatter/itip-view.c:249
msgid "%A %H:%M:%S"
msgstr "%A në orën %H:%M:%S"
#. strftime format of a weekday and a
#. time, in 12-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:254
+#: plugins/itip-formatter/itip-view.c:254
msgid "%A %l:%M %p"
msgstr "%A në orën %l:%M %p"
#. strftime format of a weekday and a
#. time, in 12-hour format.
-#: ../plugins/itip-formatter/itip-view.c:258
+#: plugins/itip-formatter/itip-view.c:258
msgid "%A %l:%M:%S %p"
msgstr "%A në orën %l:%M:%S %p"
#. strftime format of a weekday and a date
#. without a year.
-#: ../plugins/itip-formatter/itip-view.c:267
+#: plugins/itip-formatter/itip-view.c:267
msgid "%A, %B %e"
msgstr "%A, %e %B"
#. strftime format of a weekday, a date
#. without a year and a time,
#. in 24-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:273
+#: plugins/itip-formatter/itip-view.c:273
msgid "%A, %B %e %H:%M"
msgstr "%A, %e %B në orën %H:%M"
#. strftime format of a weekday, a date without a year
#. and a time, in 24-hour format.
-#: ../plugins/itip-formatter/itip-view.c:277
+#: plugins/itip-formatter/itip-view.c:277
msgid "%A, %B %e %H:%M:%S"
msgstr "%A, %e %B në orën %H:%M:%S"
#. strftime format of a weekday, a date without a year
#. and a time, in 12-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:282
+#: plugins/itip-formatter/itip-view.c:282
msgid "%A, %B %e %l:%M %p"
msgstr "%A, %e %B në orën %l:%M %p"
#. strftime format of a weekday, a date without a year
#. and a time, in 12-hour format.
-#: ../plugins/itip-formatter/itip-view.c:286
+#: plugins/itip-formatter/itip-view.c:286
msgid "%A, %B %e %l:%M:%S %p"
msgstr "%A, %e %B në orën %l:%M:%S %p"
#. strftime format of a weekday and a date.
-#: ../plugins/itip-formatter/itip-view.c:292
+#: plugins/itip-formatter/itip-view.c:292
msgid "%A, %B %e, %Y"
msgstr "%A, %e %B, %Y"
#. strftime format of a weekday, a date and a
#. time, in 24-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:297
+#: plugins/itip-formatter/itip-view.c:297
msgid "%A, %B %e, %Y %H:%M"
msgstr "%A, %e %B %Y në orën %H:%M"
#. strftime format of a weekday, a date and a
#. time, in 24-hour format.
-#: ../plugins/itip-formatter/itip-view.c:301
+#: plugins/itip-formatter/itip-view.c:301
msgid "%A, %B %e, %Y %H:%M:%S"
msgstr "%A, %e %B %Y në orën %H:%M:%S"
#. strftime format of a weekday, a date and a
#. time, in 12-hour format, without seconds.
-#: ../plugins/itip-formatter/itip-view.c:306
+#: plugins/itip-formatter/itip-view.c:306
msgid "%A, %B %e, %Y %l:%M %p"
msgstr "%A, %e %B %Y në orën %l:%M %p"
#. strftime format of a weekday, a date and a
#. time, in 12-hour format.
-#: ../plugins/itip-formatter/itip-view.c:310
+#: plugins/itip-formatter/itip-view.c:310
msgid "%A, %B %e, %Y %l:%M:%S %p"
msgstr "%A, %e %B %Y në orën %l:%M:%S %p"
-#: ../plugins/itip-formatter/itip-view.c:335
+#: plugins/itip-formatter/itip-view.c:335
#, c-format
msgid "<b>%s</b> through %s has published the following meeting information:"
-msgstr "<b>%s</b> me anë të %s ka publikuar informacionet në vazhdim në lidhje me mbledhjen:"
+msgstr ""
+"<b>%s</b> me anë të %s ka publikuar informacionet në vazhdim në lidhje me "
+"mbledhjen:"
-#: ../plugins/itip-formatter/itip-view.c:337
+#: plugins/itip-formatter/itip-view.c:337
#, c-format
msgid "<b>%s</b> has published the following meeting information:"
msgstr "<b>%s</b> ka publikuar informacionet në vazhdim në lidhje me mbledhjen:"
-#: ../plugins/itip-formatter/itip-view.c:342
+#: plugins/itip-formatter/itip-view.c:342
#, c-format
msgid "<b>%s</b> requests the presence of %s at the following meeting:"
msgstr "<b>%s</b> kërkon praninë e %s tek mbledhja në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:345
+#: plugins/itip-formatter/itip-view.c:345
#, c-format
msgid "<b>%s</b> through %s requests your presence at the following meeting:"
msgstr "<b>%s</b> nëpërmjet %s kërkon praninë tuaj tek mbledhja në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:347
+#: plugins/itip-formatter/itip-view.c:347
#, c-format
msgid "<b>%s</b> requests your presence at the following meeting:"
msgstr "<b>%s</b> kërkon praninë tuaj tek mbledhja në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:353
+#: plugins/itip-formatter/itip-view.c:353
#, c-format
msgid "<b>%s</b> through %s wishes to add to an existing meeting:"
msgstr "<b>%s</b> nëpërmjet %s dëshiron t'i shtohet një mbledhjeje ekzistuese:"
-#: ../plugins/itip-formatter/itip-view.c:355
+#: plugins/itip-formatter/itip-view.c:355
#, c-format
msgid "<b>%s</b> wishes to add to an existing meeting:"
msgstr "<b>%s</b> dëshiron t'i shtohet një mbledhjeje ekzistuese:"
-#: ../plugins/itip-formatter/itip-view.c:358
+#: plugins/itip-formatter/itip-view.c:358
#, c-format
msgid "<b>%s</b> wishes to receive the latest information for the following meeting:"
-msgstr "<b>%s</b> dëshiron të marrë informacionet e fundit në lidhje me mbledhjen në vazhdim:"
+msgstr ""
+"<b>%s</b> dëshiron të marrë informacionet e fundit në lidhje me mbledhjen në "
+"vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:361
+#: plugins/itip-formatter/itip-view.c:361
#, c-format
msgid "<b>%s</b> has sent back the following meeting response:"
msgstr "<b>%s</b> ka dërguar mbrapsht përgjigjen në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:365
+#: plugins/itip-formatter/itip-view.c:365
#, c-format
msgid "<b>%s</b> through %s has cancelled the following meeting:"
msgstr "<b>%s</b> nëpërmjet %s ka anulluar mbledhjen në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:367
+#: plugins/itip-formatter/itip-view.c:367
#, c-format
msgid "<b>%s</b> has cancelled the following meeting."
msgstr "<b>%s</b> ka anulluar mbledhjen në vazhdim."
-#: ../plugins/itip-formatter/itip-view.c:370
+#: plugins/itip-formatter/itip-view.c:370
#, c-format
msgid "<b>%s</b> has proposed the following meeting changes."
msgstr "<b>%s</b> ka propozuar ndryshimet në vazhdim për mbledhjen."
-#: ../plugins/itip-formatter/itip-view.c:374
+#: plugins/itip-formatter/itip-view.c:374
#, c-format
msgid "<b>%s</b> through %s has declined the following meeting changes:"
msgstr "<b>%s</b> nëpërmjet %s ka shmangur ndryshimet në vazhdim për mbledhjen:"
-#: ../plugins/itip-formatter/itip-view.c:376
+#: plugins/itip-formatter/itip-view.c:376
#, c-format
msgid "<b>%s</b> has declined the following meeting changes."
msgstr "<b>%s</b> ka shmangur ndryshimet në vazhdim për mbledhjen."
-#: ../plugins/itip-formatter/itip-view.c:403
+#: plugins/itip-formatter/itip-view.c:403
#, c-format
msgid "<b>%s</b> through %s has published the following task:"
msgstr "<b>%s</b> nëpërmjet %s ka publikuar punën në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:405
+#: plugins/itip-formatter/itip-view.c:405
#, c-format
msgid "<b>%s</b> has published the following task:"
msgstr "<b>%s</b> ka publikuar punën në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:410
+#: plugins/itip-formatter/itip-view.c:410
#, c-format
msgid "<b>%s</b> requests the assignment of %s to the following task:"
msgstr "<b>%s</b> kërkon caktimin e %s për detyrën në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:413
+#: plugins/itip-formatter/itip-view.c:413
#, c-format
msgid "<b>%s</b> through %s has assigned you a task:"
msgstr "<b>%s</b> me anë të %s ju ka caktuar një detyrë:"
-#: ../plugins/itip-formatter/itip-view.c:415
+#: plugins/itip-formatter/itip-view.c:415
#, c-format
msgid "<b>%s</b> has assigned you a task:"
msgstr "<b>%s</b> ju ka caktuar një detyrë:"
-#: ../plugins/itip-formatter/itip-view.c:421
+#: plugins/itip-formatter/itip-view.c:421
#, c-format
msgid "<b>%s</b> through %s wishes to add to an existing task:"
msgstr "<b>%s</b> me anë të %s dëshiron të shtohet tek një detyrë ekzistuese:"
-#: ../plugins/itip-formatter/itip-view.c:423
+#: plugins/itip-formatter/itip-view.c:423
#, c-format
msgid "<b>%s</b> wishes to add to an existing task:"
msgstr "<b>%s</b> dëshiron të shtohet tek një detyrë ekzistuese:"
-#: ../plugins/itip-formatter/itip-view.c:426
+#: plugins/itip-formatter/itip-view.c:426
#, c-format
msgid ""
"<b>%s</b> wishes to receive the latest information for the following "
@@ -14630,77 +14556,75 @@ msgstr ""
"<b>%s</b> dëshiron të marrë informacionet e fundit në lidhje me detyrën e "
"shënuar në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:429
+#: plugins/itip-formatter/itip-view.c:429
#, c-format
msgid "<b>%s</b> has sent back the following assigned task response:"
msgstr "<b>%s</b> ka dërguar përgjigjen në vazhdim mbi detyrën e shënuar:"
-#: ../plugins/itip-formatter/itip-view.c:433
+#: plugins/itip-formatter/itip-view.c:433
#, c-format
msgid "<b>%s</b> through %s has cancelled the following assigned task:"
msgstr "<b>%s</b> me anë të %s ka anulluar detyrën e shënuar në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:435
+#: plugins/itip-formatter/itip-view.c:435
#, c-format
msgid "<b>%s</b> has cancelled the following assigned task:"
msgstr "<b>%s</b> ka anulluar detyrën e shënuar në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:438
+#: plugins/itip-formatter/itip-view.c:438
#, c-format
msgid "<b>%s</b> has proposed the following task assignment changes:"
-msgstr ""
-"<b>%s</b> ka propozuar ndryshimet në vazhdim në lidhje me shënimin "
-"e detyrës:"
+msgstr "<b>%s</b> ka propozuar ndryshimet në vazhdim në lidhje me shënimin e detyrës:"
-#: ../plugins/itip-formatter/itip-view.c:442
+#: plugins/itip-formatter/itip-view.c:442
#, c-format
msgid "<b>%s</b> through %s has declined the following assigned task:"
msgstr "<b>%s</b> me anë të %s nuk ka pranuar detyrën e shënuar në vazhdim:"
-#: ../plugins/itip-formatter/itip-view.c:444
+#: plugins/itip-formatter/itip-view.c:444
#, c-format
msgid "<b>%s</b> has declined the following assigned task:"
msgstr "<b>%s</b> nuk ka pranuar detyrën e shënuar në vazhdim:"
#. Comment
-#: ../plugins/itip-formatter/itip-view.c:892
-#: ../plugins/itip-formatter/itip-view.c:942
+#: plugins/itip-formatter/itip-view.c:892
+#: plugins/itip-formatter/itip-view.c:942
msgid "Comment:"
msgstr "Komente:"
#. org.gnome.mailing-list-actions:no-header primary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:2
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:2
msgid "Action not available"
msgstr "Veprim jo në dispozicion"
#. org.gnome.mailing-list-actions:no-header secondary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:4
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:4
msgid ""
"This message does not contain the header information required for this "
"action."
msgstr "Ky mesazh nuk përmban informacione e titullit të nevojshëm për këtë veprim."
#. org.gnome.mailing-list-actions:posting-not-allowed primary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:6
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:6
msgid "Posting not allowed"
msgstr "Postimi nuk lejohet"
#. org.gnome.mailing-list-actions:posting-not-allowed secondary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:8
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:8
msgid ""
"Posting to this mailing list is not allowed. Possibly, this is a read-only "
"mailing list. Contact the list owner for details."
msgstr ""
-"Postimi tek kjo mailing list nuk lejohet. Ndoshta është një listë në vetëm-lexim. "
-"Kontakto administratorin e listës për hollësi."
+"Postimi tek kjo mailing list nuk lejohet. Ndoshta është një listë në vetëm-"
+"lexim. Kontakto administratorin e listës për hollësi."
#. org.gnome.mailing-list-actions:ask-send-message primary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:10
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:10
msgid "Send e-mail message to mailing list?"
msgstr "Dërgon mesazh e-mail listës?"
#. org.gnome.mailing-list-actions:ask-send-message secondary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:12
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:12
msgid ""
"An e-mail message will be sent to the URL \"{0}\". You can either send the "
"message automatically, or see and change it first.\n"
@@ -14711,23 +14635,24 @@ msgstr ""
"Një mesazh e-mail do të dërgohet tek URL \"{0}\". Mund t'a dërgoni mesazhin "
"automatikisht, ose paraprakisht t'a shihni dhe t'a ndryshoni.\n"
"\n"
-"Pak mbas dërgimit të mesazhit duhet t'ju arrijë një përgjigje nga mailing list."
+"Pak mbas dërgimit të mesazhit duhet t'ju arrijë një përgjigje nga mailing "
+"list."
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:15
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:15
msgid "_Send message"
msgstr "_Dërgo mesazhin"
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:16
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:16
msgid "_Edit message"
msgstr "_Ndrysho mesazhin"
#. org.gnome.mailing-list-actions:malformed-header primary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:18
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:18
msgid "Malformed header"
msgstr "Titull i keqformuar"
#. org.gnome.mailing-list-actions:malformed-header secondary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:20
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:20
msgid ""
"The {0} header of this message is malformed and could not be processed.\n"
"\n"
@@ -14738,177 +14663,177 @@ msgstr ""
"Header: {1}"
#. org.gnome.mailing-list-actions:no-action primary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:24
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:24
msgid "No e-mail action"
msgstr "Asnjë veprim e-mail"
#. org.gnome.mailing-list-actions:no-action secondary
-#: ../plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:26
+#: plugins/mailing-list-actions/org-gnome-mailing-list-actions-errors.xml.h:26
msgid ""
"The action could not be performed. This means the header for this action did "
"not contain any action we could handle.\n"
"\n"
"Header: {0}"
msgstr ""
-"Veprimi nuk mund të kryhet. Kjo do të thotë që header për këtë veprim nuk përmban "
-"asnjë veprim të trajtueshëm nga ne.\n"
+"Veprimi nuk mund të kryhet. Kjo do të thotë që header për këtë veprim nuk "
+"përmban asnjë veprim të trajtueshëm nga ne.\n"
"\n"
"Header: {0}"
#. Create the checkbox we will display, complete with mnemonic that is unique in the dialog
-#: ../plugins/new-mail-notify/new-mail-notify.c:66
+#: plugins/new-mail-notify/new-mail-notify.c:66
msgid "_Generates a D-BUS message when new mail arrives"
msgstr "_Gjenero një mesazh D-BUS kur arrin postë e re"
-#: ../plugins/plugin-manager/org-gnome-plugin-manager.xml.h:1
+#: plugins/plugin-manager/org-gnome-plugin-manager.xml.h:1
msgid "Enable and disable plugins"
msgstr "Aktivo dhe ç'aktivo plugins"
-#: ../plugins/plugin-manager/org-gnome-plugin-manager.xml.h:2
+#: plugins/plugin-manager/org-gnome-plugin-manager.xml.h:2
msgid "Manage Plugins..."
msgstr "Kontrolli plugins..."
-#: ../plugins/plugin-manager/plugin-manager.c:45
+#: plugins/plugin-manager/plugin-manager.c:45
msgid "Author(s)"
msgstr "Autori(ët)"
-#: ../plugins/plugin-manager/plugin-manager.c:46
+#: plugins/plugin-manager/plugin-manager.c:46
msgid "Id"
msgstr "Id"
-#: ../plugins/plugin-manager/plugin-manager.c:47
+#: plugins/plugin-manager/plugin-manager.c:47
msgid "Path"
msgstr "Pozicioni"
-#: ../plugins/plugin-manager/plugin-manager.c:48
+#: plugins/plugin-manager/plugin-manager.c:48
msgid "Description"
msgstr "Përshkrimi"
#. Setup the ui
-#: ../plugins/plugin-manager/plugin-manager.c:188
+#: plugins/plugin-manager/plugin-manager.c:188
msgid "Plugin Manager"
msgstr "Manazhuesi i plugin"
-#: ../plugins/plugin-manager/plugin-manager.c:201
+#: plugins/plugin-manager/plugin-manager.c:201
msgid "Note: Some changes will not take effect until restart"
msgstr "Shënim: disa nga ndryshimet do të kenë efekt mbas rinisjes së programit"
-#: ../plugins/plugin-manager/plugin-manager.c:210
+#: plugins/plugin-manager/plugin-manager.c:210
msgid "Plugin"
msgstr "Plugin"
-#: ../plugins/prefer-plain/prefer-plain.c:105
+#: plugins/prefer-plain/prefer-plain.c:105
msgid "Show HTML if present"
msgstr "Shfaq HTML nëse ka"
-#: ../plugins/prefer-plain/prefer-plain.c:106
+#: plugins/prefer-plain/prefer-plain.c:106
msgid "Prefer PLAIN"
msgstr "Preferon tekst të thjeshtë"
-#: ../plugins/prefer-plain/prefer-plain.c:107
+#: plugins/prefer-plain/prefer-plain.c:107
msgid "Only ever show PLAIN"
msgstr "Shfaq vetëm dhe gjithmonë tekst të thjeshtë"
-#: ../plugins/prefer-plain/prefer-plain.c:150
+#: plugins/prefer-plain/prefer-plain.c:150
msgid "HTML Mode"
msgstr "Modalitet HTML"
-#: ../plugins/save-attachments/org-gnome-save-attachments.xml.h:1
+#: plugins/save-attachments/org-gnome-save-attachments.xml.h:1
msgid "Save Attachments ..."
msgstr "Ruaj të bashkangjiturit ..."
-#: ../plugins/save-attachments/org-gnome-save-attachments.xml.h:2
+#: plugins/save-attachments/org-gnome-save-attachments.xml.h:2
msgid "Save all attachments"
msgstr "Ruaj të gjithë të bashkangjiturit"
-#: ../plugins/save-attachments/save-attachments.c:331
+#: plugins/save-attachments/save-attachments.c:331
msgid "Select save base name"
msgstr "Zgjidh emrin bazë të ruajtjes"
-#: ../plugins/save-attachments/save-attachments.c:351
+#: plugins/save-attachments/save-attachments.c:351
msgid "MIME Type"
msgstr "Lloji MIME"
-#: ../plugins/save-attachments/save-attachments.c:359
-#: ../ui/evolution-message-composer.xml.h:16
-#: ../ui/evolution-signature-editor.xml.h:6
+#: plugins/save-attachments/save-attachments.c:359
+#: ui/evolution-message-composer.xml.h:16
+#: ui/evolution-signature-editor.xml.h:6
msgid "Save"
msgstr "Ruaj"
-#: ../plugins/save-calendar/csv-format.c:167
+#: plugins/save-calendar/csv-format.c:167
#, c-format
msgid "%s%d/%s%d/%s%d %s%d:%s%d:%s%d"
msgstr "%s%d/%s%d/%s%d %s%d:%s%d:%s%d"
-#: ../plugins/save-calendar/csv-format.c:370
+#: plugins/save-calendar/csv-format.c:370
#, c-format
msgid ""
"Uid%sSummary%sDescription List%sCategories List%sComment List%sCompleted%"
"sCreated%sContact List%sStart%sEnd%sDue%sPercent Done%sPriority%sUrl%"
"sAttendees List%sLocation%sModified%s"
msgstr ""
-"Uid%sTreguesi%sLista përshkrimeve%sLista kategorive%sLista komentevet%sPlotësuar%"
-"sKrijuar%sLista kontakteve%sFillimi%sPërfundimi%sSkadimi%spërqindje "
-"e kryer%sPrioriteti%sUrl%sLista pjesmarrësve%sVendi%sNdryshuar%s"
+"Uid%sTreguesi%sLista përshkrimeve%sLista kategorive%sLista komentevet%"
+"sPlotësuar%sKrijuar%sLista kontakteve%sFillimi%sPërfundimi%sSkadimi%"
+"spërqindje e kryer%sPrioriteti%sUrl%sLista pjesmarrësve%sVendi%sNdryshuar%s"
-#: ../plugins/save-calendar/csv-format.c:519
+#: plugins/save-calendar/csv-format.c:519
msgid "Advanced options for the CSV format"
msgstr "Opcionet e detajuara për formatin CSV"
-#: ../plugins/save-calendar/csv-format.c:526
+#: plugins/save-calendar/csv-format.c:526
msgid "Prepend a header"
msgstr "Propozoi një titull"
-#: ../plugins/save-calendar/csv-format.c:535
+#: plugins/save-calendar/csv-format.c:535
msgid "Value delimiter:"
msgstr "Kufizuesi i vlerave:"
-#: ../plugins/save-calendar/csv-format.c:541
+#: plugins/save-calendar/csv-format.c:541
msgid "Record delimiter:"
msgstr "Kufizuesi i regjistrimeve:"
-#: ../plugins/save-calendar/csv-format.c:547
+#: plugins/save-calendar/csv-format.c:547
msgid "Encapsulate values with:"
msgstr "Kufizo vlerat me:"
-#: ../plugins/save-calendar/csv-format.c:569
+#: plugins/save-calendar/csv-format.c:569
msgid "Comma separated value format (.csv)"
msgstr "Format vlerash të ndara me presje (.csv)"
-#: ../plugins/save-calendar/ical-format.c:136
+#: plugins/save-calendar/ical-format.c:136
msgid "iCalendar format (.ics)"
msgstr "Format iCalendar (.ics)"
-#: ../plugins/save-calendar/rdf-format.c:390
+#: plugins/save-calendar/rdf-format.c:390
msgid "RDF format (.rdf)"
msgstr "Format RDF (.rdf)"
-#: ../plugins/save-calendar/save-calendar.c:171
-#: ../plugins/save-calendar/save-calendar.c:181
+#: plugins/save-calendar/save-calendar.c:171
+#: plugins/save-calendar/save-calendar.c:181
msgid "Select destination file"
msgstr "Zgjidh file e destinuar"
-#: ../plugins/save-calendar/save-calendar.c:216
+#: plugins/save-calendar/save-calendar.c:216
#, c-format
msgid ""
"The suggested filename extension of this filetype (%s) is unused in the "
"chosen filename. Do you want to continue?"
msgstr ""
-"Prapashtesa e emrit të file për këtë lloj file (%s) nuk përdoret për file e zgjedhur. "
-"Dëshiron të vazhdosh?"
+"Prapashtesa e emrit të file për këtë lloj file (%s) nuk përdoret për file e "
+"zgjedhur. Dëshiron të vazhdosh?"
-#: ../plugins/send-options/send-options.c:82
+#: plugins/send-options/send-options.c:82
#, c-format
msgid "%sEnter password for %s (user %s)"
msgstr "%sShkruaj fjalëkalimin për %s (përdoruesi %s)"
#. org.gnome.evolution.mail_shared_folder:invalid-user primary
-#: ../plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:2
+#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:2
msgid "Invalid user"
msgstr "Përdorues i pavlefshëm"
#. org.gnome.evolution.mail_shared_folder:invalid-user secondary
-#: ../plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:4
+#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:4
msgid ""
"\n"
"You cannot share folder with specified user \"{0}\" \n"
@@ -14917,12 +14842,12 @@ msgstr ""
"E pamundur ndarja e kartelës me përdoruesin e specifikuar \"{0}\" \n"
#. org.gnome.evolution.mail_shared_folder:no-user primary
-#: ../plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:8
+#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:8
msgid "Specify User"
msgstr "Specifiko përdoruesin"
#. org.gnome.evolution.mail_shared_folder:no-user secondary
-#: ../plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:10
+#: plugins/shared-folder/org-gnome-shared-folder-errors.xml.h:10
msgid ""
"\n"
"\tYou have to specify a user name whom you want to add to the list \n"
@@ -14930,204 +14855,204 @@ msgstr ""
"\n"
"\tDuhet specifikuar emri i përdoruesit për t'ja shtuar listës \n"
-#: ../plugins/shared-folder/properties.glade.h:2
+#: plugins/shared-folder/properties.glade.h:2
msgid "<b>Users :</b>"
msgstr "<b>Përdoruesit :</b>"
-#: ../plugins/shared-folder/properties.glade.h:4
+#: plugins/shared-folder/properties.glade.h:4
msgid "Message"
msgstr "Mesazhi"
-#: ../plugins/shared-folder/properties.glade.h:6
+#: plugins/shared-folder/properties.glade.h:6
msgid "Shared Folder Notification"
msgstr "Njofto bashkandarjen e kartelës"
-#: ../plugins/shared-folder/properties.glade.h:8
+#: plugins/shared-folder/properties.glade.h:8
msgid "The participants will receive the following notification.\n"
msgstr "Pjesmarrësit do të marrin njoftimin në vazhdim.\n"
-#: ../plugins/shared-folder/properties.glade.h:11
+#: plugins/shared-folder/properties.glade.h:11
msgid "_Contacts..."
msgstr "_Kontakte..."
-#: ../plugins/shared-folder/properties.glade.h:12
+#: plugins/shared-folder/properties.glade.h:12
msgid "_Cutomize notification message"
msgstr "_Personalizo mesazhin e njoftimit"
-#: ../plugins/shared-folder/properties.glade.h:13
+#: plugins/shared-folder/properties.glade.h:13
msgid "_Not Shared"
msgstr "_Jo e përbashkët"
-#: ../plugins/shared-folder/properties.glade.h:15
+#: plugins/shared-folder/properties.glade.h:15
msgid "_Shared With ..."
msgstr "_E përbashkët me ..."
-#: ../plugins/shared-folder/properties.glade.h:16
+#: plugins/shared-folder/properties.glade.h:16
msgid "_Sharing"
msgstr "_Bashkandarje"
-#: ../plugins/shared-folder/share-folder-common.c:315
+#: plugins/shared-folder/share-folder-common.c:315
msgid "Users"
msgstr "Përdorues"
-#: ../plugins/shared-folder/share-folder-common.c:316
+#: plugins/shared-folder/share-folder-common.c:316
msgid "Enter the users and set permissions"
msgstr "Shto përdoruesit dhe cakto të drejtat"
-#: ../plugins/shared-folder/share-folder-common.c:401
+#: plugins/shared-folder/share-folder-common.c:401
msgid "Sharing"
msgstr "Bashkandarje"
#. Create the checkbox we will display, complete with mnemonic that is unique in the dialog
-#: ../plugins/subject-thread/subject-thread.c:54
-#, fuzzy
+#: plugins/subject-thread/subject-thread.c:54
msgid "Fall back to threading messages by sub_ject"
-msgstr "mbrapa tek sipas"
+msgstr "Kthehu tek sistemimi i mesazheve sipas sub_jektit"
-#: ../shell/GNOME_Evolution_Shell.server.in.in.h:1
+#: shell/GNOME_Evolution_Shell.server.in.in.h:1
msgid "Evolution Shell"
msgstr "Shell i Evolution"
-#: ../shell/GNOME_Evolution_Test.server.in.in.h:1
+#: shell/GNOME_Evolution_Test.server.in.in.h:1
msgid "Evolution Test"
msgstr "Provë e Evolution"
-#: ../shell/GNOME_Evolution_Test.server.in.in.h:2
+#: shell/GNOME_Evolution_Test.server.in.in.h:2
msgid "Evolution Test component"
msgstr "Komponues i provave të Evolution"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:1
+#: shell/apps_evolution_shell.schemas.in.in.h:1
msgid "A GNOME Print description of the current printer settings"
msgstr "Një përshkrim i llojit «GNOME Print» i rregullimeve aktuale të printerit"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:2
+#: shell/apps_evolution_shell.schemas.in.in.h:2
msgid "Configuration version"
msgstr "Versioni i konfigurimit"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:3
+#: shell/apps_evolution_shell.schemas.in.in.h:3
msgid "Default sidebar width"
msgstr "Gjerësia e prezgjedhur e kuadratit anësor"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:4
+#: shell/apps_evolution_shell.schemas.in.in.h:4
msgid "Default window height"
msgstr "Lartësia e prezgjedhur e dritares"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:5
+#: shell/apps_evolution_shell.schemas.in.in.h:5
msgid "Default window width"
msgstr "Gjerësia e prezgjedhur e dritares"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:6
+#: shell/apps_evolution_shell.schemas.in.in.h:6
msgid "ID or alias of the component to be shown by default at start-up."
msgstr "ID apo alias i komponentit që duhet shfaqur si i prezgjedhur në nisje."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:7
+#: shell/apps_evolution_shell.schemas.in.in.h:7
msgid "Last upgraded configuration version"
msgstr "Versioni i fundit i përditsuar i konfigurimit"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:8
+#: shell/apps_evolution_shell.schemas.in.in.h:8
msgid "List of paths for the folders to be synchronized to disk for offline usage"
msgstr ""
"Lista e pozicioneve të kartelave për t'u sinkronizuar në disk për përdorim "
"jashtë linje"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:9
+#: shell/apps_evolution_shell.schemas.in.in.h:9
msgid "Printer settings"
msgstr "Rregullimet e printerit"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:10
+#: shell/apps_evolution_shell.schemas.in.in.h:10
msgid "Skip development warning dialog"
msgstr "Kapërce dialogun e paralajmërimit të versionit në zhvillim"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:11 ../shell/main.c:476
+#: shell/apps_evolution_shell.schemas.in.in.h:11 shell/main.c:476
msgid "Start in offline mode"
msgstr "Fillo në modalitetin jashtë linje"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:12
+#: shell/apps_evolution_shell.schemas.in.in.h:12
msgid "The configuration version of Evolution, with major/minor/configuration level"
msgstr "Versioni i konfigurimit të Evolution, me nivelet major/minor/konfigurim"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:13
+#: shell/apps_evolution_shell.schemas.in.in.h:13
msgid "The default height for the main window, in pixels."
msgstr "Lartësia e prezgjedhur e dritares qendrore, në pixel."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:14
+#: shell/apps_evolution_shell.schemas.in.in.h:14
msgid "The default width for the main window, in pixels."
msgstr "Gjerësia e prezgjedhur e dritares qendrore, në pixel."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:15
+#: shell/apps_evolution_shell.schemas.in.in.h:15
msgid "The default width for the sidebar, in pixels."
msgstr "Gjerësia e prezgjedhur e kuadratit anësor, në pixel."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:16
+#: shell/apps_evolution_shell.schemas.in.in.h:16
msgid ""
"The last upgraded configuration version of Evolution, with major/minor/"
"configuration level"
-msgstr "Versioni i fundit i përditsuar i konfigurimit të Evolution, me nivelet major/minor/konfigurim"
+msgstr ""
+"Versioni i fundit i përditsuar i konfigurimit të Evolution, me nivelet major/"
+"minor/konfigurim"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:17
+#: shell/apps_evolution_shell.schemas.in.in.h:17
msgid ""
"The style of the window buttons. Can be \"text\", \"icons\", \"both\", "
"\"toolbar\". If \"toolbar\" is set, the style of the buutons is determined "
"by the GNOME toolbar setting."
msgstr ""
"Stili i pulsantëve të dritares. Vlerat e lejuara janë \"text\", \"icons\", "
-"\"both\", \"toolbar\". Nëse caktohet \"toolbar\", stili i shtyllës së instrumentëve "
-"përcaktohet nga rregullimet e GNOME."
+"\"both\", \"toolbar\". Nëse caktohet \"toolbar\", stili i shtyllës së "
+"instrumentëve përcaktohet nga rregullimet e GNOME."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:18
+#: shell/apps_evolution_shell.schemas.in.in.h:18
msgid "Toolbar is visible"
msgstr "Paneli i instrumentëve është i dukshëm"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:19
+#: shell/apps_evolution_shell.schemas.in.in.h:19
msgid "Whether Evolution will start up in offline mode instead of online mode."
msgstr ""
"Nëse Evolution duhet të niset në modalitetin jashtë linje në vend të "
"modalitetit në linjë."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:20
+#: shell/apps_evolution_shell.schemas.in.in.h:20
msgid "Whether the toolbar should be visible."
msgstr "Nëse paneli i instrumentëve duhet të jetë i dukshëm."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:21
+#: shell/apps_evolution_shell.schemas.in.in.h:21
msgid "Whether the warning dialog in development versions of Evolution is skipped."
msgstr ""
-"Nëse dritarja e dialogut të paralajmërimit tek versioni në zhvillim i Evolution "
-"duhet kapërcyer."
+"Nëse dritarja e dialogut të paralajmërimit tek versioni në zhvillim i "
+"Evolution duhet kapërcyer."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:22
+#: shell/apps_evolution_shell.schemas.in.in.h:22
msgid "Whether the window buttons should be visible."
msgstr "Nëse pulsantët e dritares duhet të jenë të dukshëm."
-#: ../shell/apps_evolution_shell.schemas.in.in.h:23
+#: shell/apps_evolution_shell.schemas.in.in.h:23
msgid "Window button style"
msgstr "Stili i pulsantëve të dritares"
-#: ../shell/apps_evolution_shell.schemas.in.in.h:24
+#: shell/apps_evolution_shell.schemas.in.in.h:24
msgid "Window buttons are visible"
msgstr "Pulsantët e dritares janë të dukshëm"
-#: ../shell/e-active-connection-dialog.glade.h:1
+#: shell/e-active-connection-dialog.glade.h:1
msgid "<b>Active Connections</b>"
msgstr "<b>Lidhjet aktive</b>"
-#: ../shell/e-active-connection-dialog.glade.h:2
+#: shell/e-active-connection-dialog.glade.h:2
msgid "Active Connections"
msgstr "Lidhjet aktive"
-#: ../shell/e-active-connection-dialog.glade.h:3
+#: shell/e-active-connection-dialog.glade.h:3
msgid "Click OK to close these connections and go offline"
msgstr "Kliko OK për të mbyllur këto lidhje dhe për të shkuar jashtë linje"
-#: ../shell/e-shell-folder-title-bar.c:586
-#: ../shell/e-shell-folder-title-bar.c:587
+#: shell/e-shell-folder-title-bar.c:586 shell/e-shell-folder-title-bar.c:587
msgid "(Untitled)"
msgstr "(Pa titull)"
-#: ../shell/e-shell-importer.c:147
+#: shell/e-shell-importer.c:147
msgid "Choose the type of importer to run:"
msgstr "Zgjidh llojin e importuesit për t'u përdorur:"
-#: ../shell/e-shell-importer.c:150
+#: shell/e-shell-importer.c:150
msgid ""
"Choose the file that you want to import into Evolution, and select what type "
"of file it is from the list.\n"
@@ -15141,15 +15066,15 @@ msgstr ""
"Mund të zgjidhni \"Automatike\" nëse nuk e njihni, dhe Evolution do të "
"mundohet t'a përpunojë."
-#: ../shell/e-shell-importer.c:156
+#: shell/e-shell-importer.c:156
msgid "Choose the destination for this import"
msgstr "Zgjidh destinimin për këtë importim"
-#: ../shell/e-shell-importer.c:159 ../shell/e-shell-startup-wizard.c:750
+#: shell/e-shell-importer.c:159 shell/e-shell-startup-wizard.c:750
msgid "Please select the information that you would like to import:"
msgstr "Zgjidhni informacionet që dëshironi të importoni:"
-#: ../shell/e-shell-importer.c:162
+#: shell/e-shell-importer.c:162
msgid ""
"Evolution checked for settings to import from the following\n"
"applications: Pine, Netscape, Elm, iCalendar. No settings\n"
@@ -15161,7 +15086,7 @@ msgstr ""
"Nuk u gjet asnjë rregullim i importueshëm. Nëse dëshironi të\n"
"riprovoni, kliko tek butoni \"Mbrapa\".\n"
-#: ../shell/e-shell-importer.c:233 ../shell/e-shell-importer.c:267
+#: shell/e-shell-importer.c:233 shell/e-shell-importer.c:267
#, c-format
msgid ""
"Importing %s\n"
@@ -15170,30 +15095,30 @@ msgstr ""
"Duke importuar %s\n"
"Duke importuar elementin %d."
-#: ../shell/e-shell-importer.c:341
+#: shell/e-shell-importer.c:341
msgid "Select importer"
msgstr "Zgjidh importuesin"
-#: ../shell/e-shell-importer.c:462 ../shell/e-shell-importer.c:1086
+#: shell/e-shell-importer.c:462 shell/e-shell-importer.c:1086
#, c-format
msgid "File %s does not exist"
msgstr "File %s nuk ekziston"
-#: ../shell/e-shell-importer.c:470
+#: shell/e-shell-importer.c:470
msgid "Importing"
msgstr "Duke importuar"
-#: ../shell/e-shell-importer.c:478
+#: shell/e-shell-importer.c:478
#, c-format
msgid "Importing %s.\n"
msgstr "Duke importuar %s.\n"
-#: ../shell/e-shell-importer.c:488 ../shell/e-shell-importer.c:489
+#: shell/e-shell-importer.c:488 shell/e-shell-importer.c:489
#, c-format
msgid "Error loading %s"
msgstr "Gabim gjatë ngarkimit të %s"
-#: ../shell/e-shell-importer.c:507
+#: shell/e-shell-importer.c:507
#, c-format
msgid ""
"Importing %s\n"
@@ -15202,31 +15127,31 @@ msgstr ""
"Duke importuar %s\n"
"Duke importuar elementin 1."
-#: ../shell/e-shell-importer.c:583
+#: shell/e-shell-importer.c:583
msgid "Automatic"
msgstr "Në menyrë automatike"
-#: ../shell/e-shell-importer.c:639
+#: shell/e-shell-importer.c:639
msgid "F_ilename:"
msgstr "Emri i f_ile:"
-#: ../shell/e-shell-importer.c:644
+#: shell/e-shell-importer.c:644
msgid "Select a file"
msgstr "Zgjidh një file"
-#: ../shell/e-shell-importer.c:656
+#: shell/e-shell-importer.c:656
msgid "File _type:"
msgstr "_Lloji i file:"
-#: ../shell/e-shell-importer.c:695
+#: shell/e-shell-importer.c:695
msgid "Import data and settings from _older programs"
msgstr "Importo të dhënat dhe rregullimet nga programe të _vjetër"
-#: ../shell/e-shell-importer.c:698
+#: shell/e-shell-importer.c:698
msgid "Import a _single file"
msgstr "Importo një file të _vetëm"
-#: ../shell/e-shell-importer.c:766 ../shell/e-shell-startup-wizard.c:571
+#: shell/e-shell-importer.c:766 shell/e-shell-startup-wizard.c:571
msgid ""
"Please wait...\n"
"Scanning for existing setups"
@@ -15234,41 +15159,41 @@ msgstr ""
"Durim...\n"
"Duke kontrolluar për rregullime ekzistuese"
-#: ../shell/e-shell-importer.c:773
+#: shell/e-shell-importer.c:773
msgid "Starting Intelligent Importers"
msgstr "Duke filluar importuesit inteligjentë"
-#: ../shell/e-shell-importer.c:899 ../shell/e-shell-startup-wizard.c:700
+#: shell/e-shell-importer.c:899 shell/e-shell-startup-wizard.c:700
#, c-format
msgid "From %s:"
msgstr "Nga %s:"
-#: ../shell/e-shell-importer.c:1105
+#: shell/e-shell-importer.c:1105
#, c-format
msgid "No importer available for file %s"
msgstr "Asnjë importues për file %s"
-#: ../shell/e-shell-importer.c:1119
+#: shell/e-shell-importer.c:1119
msgid "Unable to execute importer"
msgstr "I pamundur ekzekutimi i importuesit"
-#: ../shell/e-shell-importer.c:1235
+#: shell/e-shell-importer.c:1235
msgid "_Import"
msgstr "_Importo"
-#: ../shell/e-shell-offline-handler.c:589
+#: shell/e-shell-offline-handler.c:589
msgid "Closing connections..."
msgstr "Duke mbyllur lidhjet..."
-#: ../shell/e-shell-settings-dialog.c:318
+#: shell/e-shell-settings-dialog.c:318
msgid "Evolution Settings"
msgstr "Rregullimet e Evolution"
-#: ../shell/e-shell-startup-wizard.c:577
+#: shell/e-shell-startup-wizard.c:577
msgid "Starting import"
msgstr "Duke filluar importimin"
-#: ../shell/e-shell-startup-wizard.c:797
+#: shell/e-shell-startup-wizard.c:797
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 "
@@ -15282,145 +15207,146 @@ msgstr ""
"\n"
"Dëshironi të përfundoni tani përdorimin e Asistentit?"
-#: ../shell/e-shell-utils.c:116
+#: shell/e-shell-utils.c:116
msgid "No folder name specified."
msgstr "Nuk është specifikuar emri i kartelës."
-#: ../shell/e-shell-utils.c:123
+#: shell/e-shell-utils.c:123
msgid "Folder name cannot contain the Return character."
msgstr "Emri i kartelës nuk mund të përmbajë simbolin \"Return\"."
-#: ../shell/e-shell-utils.c:129
+#: shell/e-shell-utils.c:129
msgid "Folder name cannot contain the character \"/\"."
msgstr "Emri i kartelës nuk mund të përmbajë shenjën \"/\"."
-#: ../shell/e-shell-utils.c:135
+#: shell/e-shell-utils.c:135
msgid "Folder name cannot contain the character \"#\"."
msgstr "Emri i kartelës nuk mund të përmbajë shenjën \"#\"."
-#: ../shell/e-shell-utils.c:141
+#: shell/e-shell-utils.c:141
msgid "'.' and '..' are reserved folder names."
msgstr "'.' and '..' janë emra kartelash të rezervuar."
-#: ../shell/e-shell-window-commands.c:69
+#: shell/e-shell-window-commands.c:69
msgid "The GNOME Pilot tools do not appear to be installed on this system."
msgstr "Veglat GNOME Pilot nuk duken të jenë të instaluara në këtë sistem."
-#: ../shell/e-shell-window-commands.c:77
+#: shell/e-shell-window-commands.c:77
#, c-format
msgid "Error executing %s."
msgstr "Gabim gjatë ekzekutimit të %s."
-#: ../shell/e-shell-window-commands.c:126
+#: shell/e-shell-window-commands.c:126
msgid "Bug buddy is not installed."
msgstr "Bug buddy nuk është i instaluar."
-#: ../shell/e-shell-window-commands.c:134
+#: shell/e-shell-window-commands.c:134
msgid "Bug buddy could not be run."
msgstr "Bug buddy nuk mund të vihet në funksionim."
#. The translator-credits string is for translators to list
#. * per language credits for translation, displayed in the
#. * about box
-#: ../shell/e-shell-window-commands.c:501
+#: shell/e-shell-window-commands.c:501
msgid "translator-credits"
msgstr "Laurent Dhima <laurenti@alblinux.net>"
-#: ../shell/e-shell-window-commands.c:515
+#: shell/e-shell-window-commands.c:515
msgid "Groupware Suite"
msgstr "Suite Groupware"
-#: ../shell/e-shell-window-commands.c:742
+#: shell/e-shell-window-commands.c:742
msgid "_Work Online"
msgstr "_Puno online"
-#: ../shell/e-shell-window-commands.c:755 ../ui/evolution.xml.h:51
+#: shell/e-shell-window-commands.c:755 ui/evolution.xml.h:51
msgid "_Work Offline"
msgstr "_Puno Jashtë Linje"
-#: ../shell/e-shell-window-commands.c:768 ../ui/evolution.xml.h:34
+#: shell/e-shell-window-commands.c:768 ui/evolution.xml.h:34
msgid "Work Offline"
msgstr "Puno online"
-#: ../shell/e-shell-window.c:341
+#: shell/e-shell-window.c:341
msgid "Evolution is currently online. Click on this button to work offline."
msgstr "Evolution aktualisht është online. Kliko tek ky buton për të punuar offline."
-#: ../shell/e-shell-window.c:349
+#: shell/e-shell-window.c:349
msgid "Evolution is in the process of going offline."
msgstr "Evolution është në procesin e daljes offline."
-#: ../shell/e-shell-window.c:356
+#: shell/e-shell-window.c:356
msgid "Evolution is currently offline. Click on this button to work online."
msgstr "Evolution aktualisht është offline. Kliko tek ky buton për të punuar online."
-#: ../shell/e-shell-window.c:713
+#: shell/e-shell-window.c:713
#, c-format
msgid "Switch to %s"
msgstr "Kalo tek %s"
-#: ../shell/e-shell.c:598
+#: shell/e-shell.c:598
msgid "Uknown system error."
msgstr "Gabim i panjohur sistemi."
-#: ../shell/e-shell.c:800 ../shell/e-shell.c:801
+#: shell/e-shell.c:800 shell/e-shell.c:801
#, c-format
msgid "%ld KB"
msgstr "%ld KB"
-#: ../shell/e-shell.c:1254 ../widgets/misc/e-cell-date-edit.c:256
+#: shell/e-shell.c:1254 widgets/misc/e-cell-date-edit.c:256
msgid "OK"
msgstr "OK"
-#: ../shell/e-shell.c:1256
+#: shell/e-shell.c:1256
msgid "Invalid arguments"
msgstr "Argumente të pavlefshme"
-#: ../shell/e-shell.c:1258
+#: shell/e-shell.c:1258
msgid "Cannot register on OAF"
msgstr "I pamundur regjistrimi në OAF"
-#: ../shell/e-shell.c:1260
+#: shell/e-shell.c:1260
msgid "Configuration Database not found"
msgstr "Nuk u gjet databaza e konfigurimit "
-#: ../shell/e-shell.c:1262
+#: shell/e-shell.c:1262
msgid "Generic error"
msgstr "Gabim i përgjithshëm"
-#: ../shell/e-user-creatable-items-handler.c:685
+#: shell/e-user-creatable-items-handler.c:685
msgid "New"
msgstr "E re"
-#: ../shell/evolution-startup-wizard.glade.h:2
+#: shell/evolution-startup-wizard.glade.h:2
msgid "Evolution Setup Assistant"
msgstr "Asistenti i rregullimit të Evolution"
-#: ../shell/evolution-startup-wizard.glade.h:3
+#: shell/evolution-startup-wizard.glade.h:3
msgid "Importing Files"
msgstr "Duke importuar files"
-#: ../shell/evolution-startup-wizard.glade.h:4
+#: shell/evolution-startup-wizard.glade.h:4
msgid "Timezone "
msgstr "Zona orare "
-#: ../shell/evolution-startup-wizard.glade.h:5
+#: shell/evolution-startup-wizard.glade.h:5
msgid "Welcome"
msgstr "Mirësevini"
-#: ../shell/evolution-startup-wizard.glade.h:6
+#: shell/evolution-startup-wizard.glade.h:6
msgid ""
"Welcome to Evolution. The next few screens will allow Evolution to connect "
"to your email accounts, and to import files from other applications. \n"
"\n"
"Please click the \"Forward\" button to continue. "
msgstr ""
-"Mirësevini tek Evolution. Hapat në vazhdim do të mundësojnë Evolution të lidhet "
-"me llogaritë e tua email, dhe të imortojë filesnga programet e tjerë. \n"
+"Mirësevini tek Evolution. Hapat në vazhdim do të mundësojnë Evolution të "
+"lidhet me llogaritë e tua email, dhe të imortojë filesnga programet e "
+"tjerë. \n"
"\n"
"Ju lutem kliko butonin \"Vazhdo\" për të vazhduar. "
-#: ../shell/evolution-startup-wizard.glade.h:9
+#: shell/evolution-startup-wizard.glade.h:9
msgid ""
"You have successfully entered all of the information needed to set up "
"Evolution. \n"
@@ -15432,47 +15358,47 @@ msgstr ""
"\n"
"Kliko butonin \"Apliko\" për të ruajtur rregullimet. "
-#: ../shell/evolution-test-component.c:140
+#: shell/evolution-test-component.c:140
msgid "New Test"
msgstr "Provë e re"
-#: ../shell/evolution-test-component.c:141
+#: shell/evolution-test-component.c:141
msgid "_Test"
msgstr "_Kontrolloje"
-#: ../shell/evolution-test-component.c:142
+#: shell/evolution-test-component.c:142
msgid "Create a new test item"
msgstr "Krijo një element të ri prove"
-#: ../shell/importer/import.glade.h:1
+#: shell/importer/import.glade.h:1
msgid "Click \"Import\" to begin importing the file into Evolution. "
msgstr "Kliko \"Importo\" për të filluar importimin e file nën Evolution. "
-#: ../shell/importer/import.glade.h:2
+#: shell/importer/import.glade.h:2
msgid "Evolution Import Assistant"
msgstr "Asistenti i importimeve në Evolution"
-#: ../shell/importer/import.glade.h:3
+#: shell/importer/import.glade.h:3
msgid "Import File"
msgstr "Importimi i file"
-#: ../shell/importer/import.glade.h:4
+#: shell/importer/import.glade.h:4
msgid "Import Location"
msgstr "Pozicioni i importimit"
-#: ../shell/importer/import.glade.h:5
+#: shell/importer/import.glade.h:5
msgid "Importer Type"
msgstr "Lloji i importuesit"
-#: ../shell/importer/import.glade.h:6
+#: shell/importer/import.glade.h:6
msgid "Select Importers"
msgstr "Zgjidh importuesit"
-#: ../shell/importer/import.glade.h:7
+#: shell/importer/import.glade.h:7
msgid "Select a File"
msgstr "Zgjidh një file"
-#: ../shell/importer/import.glade.h:8
+#: 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"
@@ -15482,28 +15408,28 @@ msgstr ""
"Me këtë asistent ju do të udhëhiqeni gjatë proçesit të importimit\n"
"të files së jashtëm nën Evolution."
-#: ../shell/importer/intelligent.c:193
+#: shell/importer/intelligent.c:193
msgid "Importers"
msgstr "Importues"
-#: ../shell/importer/intelligent.c:195 ../smime/gui/smime-ui.glade.h:28
+#: shell/importer/intelligent.c:195 smime/gui/smime-ui.glade.h:28
msgid "Import"
msgstr "Importo"
-#: ../shell/importer/intelligent.c:199
+#: shell/importer/intelligent.c:199
msgid "Don't import"
msgstr "Mos importo"
-#: ../shell/importer/intelligent.c:203
+#: shell/importer/intelligent.c:203
msgid "Don't ask me again"
msgstr "Mos më pyet më"
-#: ../shell/importer/intelligent.c:211
+#: shell/importer/intelligent.c:211
msgid "Evolution can import data from the following files:"
msgstr "Evolution mund të importojë të dhënat nga files në vazhdim:"
#. Preview/Alpha/Beta version warning message
-#: ../shell/main.c:238
+#: shell/main.c:238
#, no-c-format
msgid ""
"Hi. Thanks for taking the time to download this preview release\n"
@@ -15541,7 +15467,7 @@ msgstr ""
"Shpresojmë t'ju pëlqejë rezultati i punës sonë të vështirë, dhe\n"
"ne presim me dëshirë kontributin tuaj!\n"
-#: ../shell/main.c:262
+#: shell/main.c:262
msgid ""
"Thanks\n"
"The Evolution Team\n"
@@ -15549,39 +15475,39 @@ msgstr ""
"Ju faleminderit\n"
"The Evolution Team\n"
-#: ../shell/main.c:269
+#: shell/main.c:269
msgid "Don't tell me again"
msgstr "Mos e shfaq më"
-#: ../shell/main.c:474
+#: shell/main.c:474
msgid "Start Evolution activating the specified component"
msgstr "Fillo Evolution duke aktivuar komponentin e specifikuar"
-#: ../shell/main.c:478
+#: shell/main.c:478
msgid "Start in online mode"
msgstr "Fillo në modalitetin në linjë"
-#: ../shell/main.c:481
+#: shell/main.c:481
msgid "Forcibly shut down all Evolution components"
msgstr "Detyro përfundimin e të gjithë komponentëve të Evolution"
-#: ../shell/main.c:485
+#: shell/main.c:485
msgid "Forcibly re-migrate from Evolution 1.4"
msgstr "Detyro ri-emigrimin nga Evolution 1.4"
-#: ../shell/main.c:488
+#: shell/main.c:488
msgid "Send the debugging output of all components to a file."
msgstr "Dërgo rezultatin e debug të të gjithë komponuesve në një file."
-#: ../shell/main.c:491
+#: shell/main.c:491
msgid "Disable the mono plugin environment."
msgstr "Ç'aktivo ambientin mono plugin."
-#: ../shell/main.c:494
+#: shell/main.c:494
msgid "Disable loading of any plugins."
msgstr "Ç'aktivo ngarkimin e çfarëdo plugin."
-#: ../shell/main.c:525
+#: shell/main.c:525
#, c-format
msgid ""
"%s: --online and --offline cannot be used together.\n"
@@ -15591,12 +15517,12 @@ msgstr ""
" Përdor %s --help për informacione të detajuara.\n"
#. shell:upgrade-nospace primary
-#: ../shell/shell-errors.xml.h:2
+#: shell/shell-errors.xml.h:2
msgid "Insufficient disk space for upgrade."
msgstr "Hapësirë e pamjaftueshme për upgrade."
#. shell:upgrade-nospace secondary
-#: ../shell/shell-errors.xml.h:4
+#: 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"
@@ -15611,7 +15537,7 @@ msgstr ""
"vazhdoni."
#. shell:upgrade-failed primary
-#: ../shell/shell-errors.xml.h:8
+#: shell/shell-errors.xml.h:8
msgid ""
"Upgrade from previous version failed:\n"
"{0}"
@@ -15620,7 +15546,7 @@ msgstr ""
"{0}"
#. shell:upgrade-failed secondary
-#: ../shell/shell-errors.xml.h:11
+#: shell/shell-errors.xml.h:11
msgid ""
"{1}\n"
"\n"
@@ -15632,18 +15558,18 @@ msgstr ""
"Nëse vendosni të vazhdoni, ndoshta nuk do të keni më hyrje në disa nga të "
"dhënat e vjetra.\n"
-#: ../shell/shell-errors.xml.h:15
+#: shell/shell-errors.xml.h:15
msgid "Continue"
msgstr "Vazhdo"
#. shell:upgrade-remove-1-4 title
#. shell:upgrade-remove-1-4 primary
-#: ../shell/shell-errors.xml.h:17 ../shell/shell-errors.xml.h:19
+#: shell/shell-errors.xml.h:17 shell/shell-errors.xml.h:19
msgid "Delete old data from version {0}?"
msgstr "Eleminon të dhënat e vjetra nga versioni {0}?"
#. shell:upgrade-remove-1-4 secondary
-#: ../shell/shell-errors.xml.h:21
+#: shell/shell-errors.xml.h:21
msgid ""
"The previous version of evolution stored its data in a different location.\n"
"\n"
@@ -15660,22 +15586,22 @@ msgstr ""
"dhënat, atëhere do të mund të eleminoni manualisht përmbajtjen e \"evolution"
"\" sipas dëshirës.\n"
-#: ../shell/shell-errors.xml.h:25
+#: shell/shell-errors.xml.h:25
msgid "_Remind Me Later"
msgstr "_Kujtomë më vonë"
-#: ../shell/shell-errors.xml.h:26
+#: shell/shell-errors.xml.h:26
msgid "_Keep Data"
msgstr "_Mbaj të dhënat"
#. 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
+#: shell/shell-errors.xml.h:28 shell/shell-errors.xml.h:30
msgid "Really delete old data?"
msgstr "Me të vërtetë eleminon të dhënat e vjetra?"
#. shell:upgrade-remove-1-4-confirm secondary
-#: ../shell/shell-errors.xml.h:32
+#: shell/shell-errors.xml.h:32
msgid ""
"The entire contents of the \"evolution\" directory is about to be be "
"permanently removed.\n"
@@ -15698,18 +15624,18 @@ msgstr ""
#. shell:noshell title
#. shell:noshell-reason title
-#: ../shell/shell-errors.xml.h:39 ../shell/shell-errors.xml.h:47
+#: shell/shell-errors.xml.h:39 shell/shell-errors.xml.h:47
msgid "Cannot start Evolution"
msgstr "E pamundur nisja e Evolution"
#. shell:noshell primary
#. shell:noshell-reason primary
-#: ../shell/shell-errors.xml.h:41 ../shell/shell-errors.xml.h:49
+#: shell/shell-errors.xml.h:41 shell/shell-errors.xml.h:49
msgid "Evolution can not start."
msgstr "E pamundur nisja e Evolution."
#. shell:noshell secondary
-#: ../shell/shell-errors.xml.h:43
+#: shell/shell-errors.xml.h:43
msgid ""
"Your system configuration does not match your Evolution configuration.\n"
"\n"
@@ -15720,7 +15646,7 @@ msgstr ""
"Kliko \"ndihmë\" për detajet"
#. shell:noshell-reason secondary
-#: ../shell/shell-errors.xml.h:51
+#: shell/shell-errors.xml.h:51
msgid ""
"Your system configuration does not match your Evolution configuration:\n"
"\n"
@@ -15734,7 +15660,7 @@ msgstr ""
"\n"
"Kliko \"ndihmë\" për detajet."
-#: ../smime/gui/ca-trust-dialog.c:96
+#: smime/gui/ca-trust-dialog.c:96
#, c-format
msgid ""
"Certificate '%s' is a CA certificate.\n"
@@ -15745,7 +15671,7 @@ msgstr ""
"\n"
"Ndrysho rregullimet e besueshmërisë:"
-#: ../smime/gui/cert-trust-dialog.c:145
+#: 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 "
@@ -15755,7 +15681,7 @@ msgstr ""
"atëhere ju i besoni vërtetësisë së kësaj çertifikate, me përjashtim të "
"specifikimit të kundërt këtu"
-#: ../smime/gui/cert-trust-dialog.c:149
+#: 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 "
@@ -15765,60 +15691,55 @@ msgstr ""
"çertifikatë, atëhere ju nuk i besoni vërtetësisë së kësaj çertifikate, me "
"përjashtim të specifikimit të kundërt këtu"
-#: ../smime/gui/certificate-manager.c:134
-#: ../smime/gui/certificate-manager.c:142
-#: ../smime/gui/certificate-manager.c:377
-#: ../smime/gui/certificate-manager.c:385
-#: ../smime/gui/certificate-manager.c:597
-#: ../smime/gui/certificate-manager.c:605
+#: smime/gui/certificate-manager.c:134 smime/gui/certificate-manager.c:142
+#: smime/gui/certificate-manager.c:377 smime/gui/certificate-manager.c:385
+#: smime/gui/certificate-manager.c:597 smime/gui/certificate-manager.c:605
msgid "Select a cert to import..."
msgstr "Zgjidh një çertifikatë për t'a importuar..."
-#: ../smime/gui/certificate-manager.c:265
-#: ../smime/gui/certificate-manager.c:474
-#: ../smime/gui/certificate-manager.c:692
+#: smime/gui/certificate-manager.c:265 smime/gui/certificate-manager.c:474
+#: smime/gui/certificate-manager.c:692
msgid "Certificate Name"
msgstr "Emri i çertifikatës"
-#: ../smime/gui/certificate-manager.c:274
-#: ../smime/gui/certificate-manager.c:492
+#: smime/gui/certificate-manager.c:274 smime/gui/certificate-manager.c:492
msgid "Purposes"
msgstr "Qëllime"
-#: ../smime/gui/certificate-manager.c:283 ../smime/gui/smime-ui.glade.h:36
-#: ../smime/lib/e-cert.c:569
+#: smime/gui/certificate-manager.c:283 smime/gui/smime-ui.glade.h:36
+#: smime/lib/e-cert.c:569
msgid "Serial Number"
msgstr "Numri i serisë"
-#: ../smime/gui/certificate-manager.c:291
+#: smime/gui/certificate-manager.c:291
msgid "Expires"
msgstr "Skadimi"
-#: ../smime/gui/certificate-manager.c:483
+#: smime/gui/certificate-manager.c:483
msgid "E-Mail Address"
msgstr "Adresa E-Mail"
-#: ../smime/gui/certificate-viewer.c:334
+#: smime/gui/certificate-viewer.c:334
#, c-format
msgid "Certificate Viewer: %s"
msgstr "Shikuesi i çertifikatave: %s"
-#: ../smime/gui/component.c:45
+#: smime/gui/component.c:45
#, c-format
msgid "Enter the password for `%s'"
msgstr "Shkruaj fjalëkalimin për `%s'"
#. we're setting the password initially
-#: ../smime/gui/component.c:68
+#: smime/gui/component.c:68
msgid "Enter new password for certificate database"
msgstr "Shkruaj fjalëkalimin e ri për databazën e çertifikatave"
-#: ../smime/gui/component.c:70
+#: smime/gui/component.c:70
msgid "Enter new password"
msgstr "Shkruaj fjalëkalimin e ri"
#. FIXME: add serial no, validity date, uses
-#: ../smime/gui/e-cert-selector.c:119
+#: smime/gui/e-cert-selector.c:119
#, c-format
msgid ""
"Issued to:\n"
@@ -15827,7 +15748,7 @@ msgstr ""
"Dërguar për:\n"
" Subjekti: %s\n"
-#: ../smime/gui/e-cert-selector.c:120
+#: smime/gui/e-cert-selector.c:120
#, c-format
msgid ""
"Issued by:\n"
@@ -15836,59 +15757,59 @@ msgstr ""
"Dërguar nga:\n"
" Subjekti: %s\n"
-#: ../smime/gui/e-cert-selector.c:167
+#: smime/gui/e-cert-selector.c:167
msgid "Select certificate"
msgstr "Zgjidh një çertifikatë"
-#: ../smime/gui/smime-ui.glade.h:1
+#: smime/gui/smime-ui.glade.h:1
msgid "<Not Part of Certificate>"
msgstr "<Nuk është pjesë e një çertifikate>"
-#: ../smime/gui/smime-ui.glade.h:2
+#: smime/gui/smime-ui.glade.h:2
msgid "<b>Certificate Fields</b>"
msgstr "<b>Fushat e çertifikatës</b>"
-#: ../smime/gui/smime-ui.glade.h:3
+#: smime/gui/smime-ui.glade.h:3
msgid "<b>Certificate Hierarchy</b>"
msgstr "<b>Gjerarkia e çertifikatës</b>"
-#: ../smime/gui/smime-ui.glade.h:4
+#: smime/gui/smime-ui.glade.h:4
msgid "<b>Field Value</b>"
msgstr "<b>Vlera e fushës</b>"
-#: ../smime/gui/smime-ui.glade.h:5
+#: smime/gui/smime-ui.glade.h:5
msgid "<b>Fingerprints</b>"
msgstr "<b>Shenjat dalluese</b>"
-#: ../smime/gui/smime-ui.glade.h:6
+#: smime/gui/smime-ui.glade.h:6
msgid "<b>Issued By</b>"
msgstr "<b>Lëshuar nga</b>"
-#: ../smime/gui/smime-ui.glade.h:7
+#: smime/gui/smime-ui.glade.h:7
msgid "<b>Issued To</b>"
msgstr "<b>Lëshuar për</b>"
-#: ../smime/gui/smime-ui.glade.h:8
+#: smime/gui/smime-ui.glade.h:8
msgid "<b>This certificate has been verified for the following uses:</b>"
msgstr "<b>Kjo çertifikatë është verifikuar për përdorimet në vazhdim:</b>"
-#: ../smime/gui/smime-ui.glade.h:9
+#: smime/gui/smime-ui.glade.h:9
msgid "<b>Validity</b>"
msgstr "<b>Vlefshmëria</b>"
-#: ../smime/gui/smime-ui.glade.h:10
+#: smime/gui/smime-ui.glade.h:10
msgid "Authorities"
msgstr "Autoritetet"
-#: ../smime/gui/smime-ui.glade.h:11
+#: smime/gui/smime-ui.glade.h:11
msgid "Backup"
msgstr "Backup (kopje)"
-#: ../smime/gui/smime-ui.glade.h:12
+#: smime/gui/smime-ui.glade.h:12
msgid "Backup All"
msgstr "Backup Gjithçka"
-#: ../smime/gui/smime-ui.glade.h:13
+#: 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)."
@@ -15896,1751 +15817,1750 @@ msgstr ""
"Para se t'i besoni CA për çdo përdorim, duhet të kontrolloni çertifikatën e "
"tij dhe politikën e proçedurat (nëse jepen)."
-#: ../smime/gui/smime-ui.glade.h:14 ../smime/lib/e-cert.c:1076
+#: smime/gui/smime-ui.glade.h:14 smime/lib/e-cert.c:1076
msgid "Certificate"
msgstr "Çertifikatë"
-#: ../smime/gui/smime-ui.glade.h:15
+#: smime/gui/smime-ui.glade.h:15
msgid "Certificate Authority Trust"
msgstr "Vërtetsia e autoritetit çertifikues"
-#: ../smime/gui/smime-ui.glade.h:16
+#: smime/gui/smime-ui.glade.h:16
msgid "Certificate details"
msgstr "Hollësitë e çertifikatës"
-#: ../smime/gui/smime-ui.glade.h:17
+#: smime/gui/smime-ui.glade.h:17
msgid "Common Name (CN)"
msgstr "Emri i përbashkët (CN)"
-#: ../smime/gui/smime-ui.glade.h:18
+#: smime/gui/smime-ui.glade.h:18
msgid "Contact Certificates"
msgstr "Çertifikatat e kontakteve"
-#: ../smime/gui/smime-ui.glade.h:20
+#: smime/gui/smime-ui.glade.h:20
msgid "Do not trust the authenticity of this certificate"
msgstr "Mos beso vërtetsinë e kësaj çertifikate"
-#: ../smime/gui/smime-ui.glade.h:21
+#: smime/gui/smime-ui.glade.h:21
msgid "Dummy window only"
msgstr "Vetëm dritare bosh"
-#: ../smime/gui/smime-ui.glade.h:22
+#: smime/gui/smime-ui.glade.h:22
msgid "Edit"
msgstr "Ndrysho"
-#: ../smime/gui/smime-ui.glade.h:23
+#: smime/gui/smime-ui.glade.h:23
msgid "Email Certificate Trust Settings"
msgstr "Rregullimet e besimit tek çertifikimi email"
-#: ../smime/gui/smime-ui.glade.h:24
+#: smime/gui/smime-ui.glade.h:24
msgid "Email Recipient Certificate"
msgstr "Çertifikata e përmbajtjes së email"
-#: ../smime/gui/smime-ui.glade.h:25
+#: smime/gui/smime-ui.glade.h:25
msgid "Email Signer Certificate"
msgstr "Çertifikata e firmuesit të email"
-#: ../smime/gui/smime-ui.glade.h:26
+#: smime/gui/smime-ui.glade.h:26
msgid "Expires On"
msgstr "Skadon në datën"
-#: ../smime/gui/smime-ui.glade.h:29
+#: smime/gui/smime-ui.glade.h:29
msgid "Issued On"
msgstr "Lëshuar në datën"
-#: ../smime/gui/smime-ui.glade.h:30
+#: smime/gui/smime-ui.glade.h:30
msgid "MD5 Fingerprint"
msgstr "Shenjë dallimi dixhital MD5"
-#: ../smime/gui/smime-ui.glade.h:31
+#: smime/gui/smime-ui.glade.h:31
msgid "Organization (O)"
msgstr "Organizata (O)"
-#: ../smime/gui/smime-ui.glade.h:32
+#: smime/gui/smime-ui.glade.h:32
msgid "Organizational Unit (OU)"
msgstr "Njësia organizative (OU)"
-#: ../smime/gui/smime-ui.glade.h:33
+#: smime/gui/smime-ui.glade.h:33
msgid "SHA1 Fingerprint"
msgstr "Shenjë dallimi dixhital SHA1"
-#: ../smime/gui/smime-ui.glade.h:34 ../smime/lib/e-cert.c:818
+#: smime/gui/smime-ui.glade.h:34 smime/lib/e-cert.c:818
msgid "SSL Client Certificate"
msgstr "Çertifikata e klientit SSL"
-#: ../smime/gui/smime-ui.glade.h:35 ../smime/lib/e-cert.c:822
+#: smime/gui/smime-ui.glade.h:35 smime/lib/e-cert.c:822
msgid "SSL Server Certificate"
msgstr "Çertifikata e serverit SSL"
-#: ../smime/gui/smime-ui.glade.h:37
+#: smime/gui/smime-ui.glade.h:37
msgid "Trust the authenticity of this certificate"
msgstr "Beso vërtetsinë e kësaj çertifikate"
-#: ../smime/gui/smime-ui.glade.h:38
+#: smime/gui/smime-ui.glade.h:38
msgid "Trust this CA to identify email users."
msgstr "Besoi këtij CA për të identifikuar përdoruesit e postës."
-#: ../smime/gui/smime-ui.glade.h:39
+#: smime/gui/smime-ui.glade.h:39
msgid "Trust this CA to identify software developers."
msgstr "Besoi këtij CA për të identifikuar zhvilluesit e programeve."
-#: ../smime/gui/smime-ui.glade.h:40
+#: smime/gui/smime-ui.glade.h:40
msgid "Trust this CA to identify web sites."
msgstr "Besoi këtij CA për të identifikuar sitet web."
-#: ../smime/gui/smime-ui.glade.h:41
+#: smime/gui/smime-ui.glade.h:41
msgid "View"
msgstr "Shfaq"
-#: ../smime/gui/smime-ui.glade.h:42
+#: smime/gui/smime-ui.glade.h:42
msgid "You have certificates from these organizations that identify you:"
msgstr "Keni çertifikata nga këto organizata që ju identifikojnë:"
-#: ../smime/gui/smime-ui.glade.h:43
+#: smime/gui/smime-ui.glade.h:43
msgid "You have certificates on file that identify these certificate authorities:"
msgstr "Keni çertifikata në file që identifikojnë këto autoritete:"
-#: ../smime/gui/smime-ui.glade.h:44
+#: smime/gui/smime-ui.glade.h:44
msgid "You have certificates on file that identify these people:"
msgstr "Keni çertifikata në file që identifikojnë këta persona:"
-#: ../smime/gui/smime-ui.glade.h:45
+#: smime/gui/smime-ui.glade.h:45
msgid "Your Certificates"
msgstr "Çertifikatat tuaja"
-#: ../smime/gui/smime-ui.glade.h:46
+#: smime/gui/smime-ui.glade.h:46
msgid "_Edit CA Trust"
msgstr "_Ndrysho besimin tek CA"
-#: ../smime/gui/smime-ui.glade.h:48
+#: smime/gui/smime-ui.glade.h:48
msgid "dialog1"
msgstr "dialogu1"
#. XXX we shouldn't be popping up dialogs in this code.
-#: ../smime/lib/e-cert-db.c:612
+#: smime/lib/e-cert-db.c:612
msgid "Certificate already exists"
msgstr "Çertifikata ekziston"
-#: ../smime/lib/e-cert.c:238 ../smime/lib/e-cert.c:248
+#: smime/lib/e-cert.c:238 smime/lib/e-cert.c:248
msgid "%d/%m/%Y"
msgstr "%d/%m/%Y"
#. x509 certificate usage types
-#: ../smime/lib/e-cert.c:424
+#: smime/lib/e-cert.c:424
msgid "Sign"
msgstr "Sinj"
-#: ../smime/lib/e-cert.c:425
+#: smime/lib/e-cert.c:425
msgid "Encrypt"
msgstr "Kriptimi"
-#: ../smime/lib/e-cert.c:530
+#: smime/lib/e-cert.c:530
msgid "Version"
msgstr "Versioni"
-#: ../smime/lib/e-cert.c:545
+#: smime/lib/e-cert.c:545
msgid "Version 1"
msgstr "Versioni 1"
-#: ../smime/lib/e-cert.c:548
+#: smime/lib/e-cert.c:548
msgid "Version 2"
msgstr "Versioni 2"
-#: ../smime/lib/e-cert.c:551
+#: smime/lib/e-cert.c:551
msgid "Version 3"
msgstr "Versioni 3"
-#: ../smime/lib/e-cert.c:633
+#: smime/lib/e-cert.c:633
msgid "PKCS #1 MD2 With RSA Encryption"
msgstr "PKCS #1 MD2 me kriptim RSA"
-#: ../smime/lib/e-cert.c:636
+#: smime/lib/e-cert.c:636
msgid "PKCS #1 MD5 With RSA Encryption"
msgstr "PKCS #1 MD5 me kriptim RSA"
-#: ../smime/lib/e-cert.c:639
+#: smime/lib/e-cert.c:639
msgid "PKCS #1 SHA-1 With RSA Encryption"
msgstr "PKCS #1 SHA-1 me kriptim RSA"
-#: ../smime/lib/e-cert.c:642
+#: smime/lib/e-cert.c:642
msgid "C"
msgstr "C"
-#: ../smime/lib/e-cert.c:645
+#: smime/lib/e-cert.c:645
msgid "CN"
msgstr "CN"
-#: ../smime/lib/e-cert.c:648
+#: smime/lib/e-cert.c:648
msgid "OU"
msgstr "OU"
-#: ../smime/lib/e-cert.c:651
+#: smime/lib/e-cert.c:651
msgid "O"
msgstr "O"
-#: ../smime/lib/e-cert.c:654
+#: smime/lib/e-cert.c:654
msgid "L"
msgstr "L"
-#: ../smime/lib/e-cert.c:657
+#: smime/lib/e-cert.c:657
msgid "DN"
msgstr "DN"
-#: ../smime/lib/e-cert.c:660
+#: smime/lib/e-cert.c:660
msgid "DC"
msgstr "DC"
-#: ../smime/lib/e-cert.c:663
+#: smime/lib/e-cert.c:663
msgid "ST"
msgstr "ST"
-#: ../smime/lib/e-cert.c:666
+#: smime/lib/e-cert.c:666
msgid "PKCS #1 RSA Encryption"
msgstr "PKCS #1 Kriptim RSA"
-#: ../smime/lib/e-cert.c:669
+#: smime/lib/e-cert.c:669
msgid "Certificate Key Usage"
msgstr "Përdorimi i kyçeve të çertifikatës"
-#: ../smime/lib/e-cert.c:672
+#: smime/lib/e-cert.c:672
msgid "Netscape Certificate Type"
msgstr "Lloj çertifikate Netscape"
-#: ../smime/lib/e-cert.c:675
+#: smime/lib/e-cert.c:675
msgid "Certificate Authority Key Identifier"
msgstr "Identifikuesi i autoritetit të çertifikimit të kyçit"
-#: ../smime/lib/e-cert.c:678
+#: smime/lib/e-cert.c:678
msgid "UID"
msgstr "UID"
-#: ../smime/lib/e-cert.c:687
+#: smime/lib/e-cert.c:687
#, c-format
msgid "Object Identifier (%s)"
msgstr "Identifikuesi i objektit (%s)"
-#: ../smime/lib/e-cert.c:738
+#: smime/lib/e-cert.c:738
msgid "Algorithm Identifier"
msgstr "Identifikuesi i algoritmit"
-#: ../smime/lib/e-cert.c:746
+#: smime/lib/e-cert.c:746
msgid "Algorithm Parameters"
msgstr "Parametrat e algoritmit"
-#: ../smime/lib/e-cert.c:768
+#: smime/lib/e-cert.c:768
msgid "Subject Public Key Info"
msgstr "Informacionet e kyçit publik të subjektit"
-#: ../smime/lib/e-cert.c:773
+#: smime/lib/e-cert.c:773
msgid "Subject Public Key Algorithm"
msgstr "Algoritmi i kyçit publik të subjektit"
-#: ../smime/lib/e-cert.c:788
+#: smime/lib/e-cert.c:788
msgid "Subject's Public Key"
msgstr "Kyçi publik i subjektit"
-#: ../smime/lib/e-cert.c:809 ../smime/lib/e-cert.c:858
+#: smime/lib/e-cert.c:809 smime/lib/e-cert.c:858
msgid "Error: Unable to process extension"
msgstr "Gabim: I pamundur analizimi i shtesës"
-#: ../smime/lib/e-cert.c:830 ../smime/lib/e-cert.c:842
+#: smime/lib/e-cert.c:830 smime/lib/e-cert.c:842
msgid "Object Signer"
msgstr "Firmuesi i objektit"
-#: ../smime/lib/e-cert.c:834
+#: smime/lib/e-cert.c:834
msgid "SSL Certificate Authority"
msgstr "Autoriteti i çertifikimit SSL"
-#: ../smime/lib/e-cert.c:838
+#: smime/lib/e-cert.c:838
msgid "Email Certificate Authority"
msgstr "Autoriteti i çertifikimit të email"
-#: ../smime/lib/e-cert.c:866
+#: smime/lib/e-cert.c:866
msgid "Signing"
msgstr "Duke firmosur"
-#: ../smime/lib/e-cert.c:870
+#: smime/lib/e-cert.c:870
msgid "Non-repudiation"
msgstr "Jo-ripudio"
-#: ../smime/lib/e-cert.c:874
+#: smime/lib/e-cert.c:874
msgid "Key Encipherment"
msgstr "Shifrimi i kyçit"
-#: ../smime/lib/e-cert.c:878
+#: smime/lib/e-cert.c:878
msgid "Data Encipherment"
msgstr "Shifrimi i të dhënave"
-#: ../smime/lib/e-cert.c:882
+#: smime/lib/e-cert.c:882
msgid "Key Agreement"
msgstr "Njohja e kyçit"
-#: ../smime/lib/e-cert.c:886
+#: smime/lib/e-cert.c:886
msgid "Certificate Signer"
msgstr "Firmuesi i çertifikatës"
-#: ../smime/lib/e-cert.c:890
+#: smime/lib/e-cert.c:890
msgid "CRL Signer"
msgstr "Firmuesi CRL"
-#: ../smime/lib/e-cert.c:938
+#: smime/lib/e-cert.c:938
msgid "Critical"
msgstr "Kritik"
-#: ../smime/lib/e-cert.c:940 ../smime/lib/e-cert.c:943
+#: smime/lib/e-cert.c:940 smime/lib/e-cert.c:943
msgid "Not Critical"
msgstr "Jo kritik"
-#: ../smime/lib/e-cert.c:964
+#: smime/lib/e-cert.c:964
msgid "Extensions"
msgstr "Shtesat"
-#: ../smime/lib/e-cert.c:1035
+#: smime/lib/e-cert.c:1035
#, c-format
msgid "%s = %s"
msgstr "%s = %s"
-#: ../smime/lib/e-cert.c:1091 ../smime/lib/e-cert.c:1211
+#: smime/lib/e-cert.c:1091 smime/lib/e-cert.c:1211
msgid "Certificate Signature Algorithm"
msgstr "Algoritmi i firmës së çertifikatës"
-#: ../smime/lib/e-cert.c:1100
+#: smime/lib/e-cert.c:1100
msgid "Issuer"
msgstr "Dërgues"
-#: ../smime/lib/e-cert.c:1154
+#: smime/lib/e-cert.c:1154
msgid "Issuer Unique ID"
msgstr "ID e vetme e dërguesit"
-#: ../smime/lib/e-cert.c:1173
+#: smime/lib/e-cert.c:1173
msgid "Subject Unique ID"
msgstr "ID e vetme e subjektit"
-#: ../smime/lib/e-cert.c:1216
+#: smime/lib/e-cert.c:1216
msgid "Certificate Signature Value"
msgstr "Vlera firmës së çertifikuar"
-#: ../smime/lib/e-pkcs12.c:264
+#: smime/lib/e-pkcs12.c:264
msgid "PKCS12 File Password"
msgstr "File i fjalëkalimeve PKCS12"
-#: ../smime/lib/e-pkcs12.c:264
+#: smime/lib/e-pkcs12.c:264
msgid "Enter password for PKCS12 file:"
msgstr "Shkruaj fjalëkalimin për file PKCS12:"
-#: ../smime/lib/e-pkcs12.c:363
+#: smime/lib/e-pkcs12.c:363
msgid "Imported Certificate"
msgstr "Çertifikata e importuar"
-#: ../tools/evolution-launch-composer.c:324
+#: tools/evolution-launch-composer.c:324
msgid "An attachment to add."
msgstr "Një i bashkangjitur për t'u shtuar."
-#: ../tools/evolution-launch-composer.c:325
+#: tools/evolution-launch-composer.c:325
msgid "Content type of the attachment."
msgstr "Lloji i përmbajtjes së bashkangjiturit."
-#: ../tools/evolution-launch-composer.c:326
+#: tools/evolution-launch-composer.c:326
msgid "The filename to display in the mail."
msgstr "Emri i file që duhet shfaqur në mail."
-#: ../tools/evolution-launch-composer.c:327
+#: tools/evolution-launch-composer.c:327
msgid "Description of the attachment."
msgstr "Përshkrimi i të bashkangjiturit."
-#: ../tools/evolution-launch-composer.c:328
+#: tools/evolution-launch-composer.c:328
msgid "Mark attachment to be shown inline by default."
msgstr "Shëno si rregullim të prezgjedhur shfaqjen në linjë të të bashkangjiturit."
-#: ../tools/evolution-launch-composer.c:329
+#: tools/evolution-launch-composer.c:329
msgid "Default subject for the message."
msgstr "Subjekti i prezgjedhur për mesazhin."
#. This most likely means that KILL_PROCESS_CMD wasn't
#. * found, so just bail completely.
#.
-#: ../tools/killev.c:61
+#: tools/killev.c:61
#, c-format
msgid "Could not execute '%s': %s\n"
msgstr "I pamundur ekzekutimi i '%s': %s\n"
-#: ../tools/killev.c:76
+#: tools/killev.c:76
#, c-format
msgid "Shutting down %s (%s)\n"
msgstr "Duke mbyllur %s (%s)\n"
-#: ../ui/evolution-addressbook.xml.h:3
+#: ui/evolution-addressbook.xml.h:3
msgid "Copy Contact(s) to Another Folder..."
msgstr "Kopjo kontaktin(et) tek një kartelë tjetër..."
-#: ../ui/evolution-addressbook.xml.h:4 ../ui/evolution-calendar.xml.h:2
+#: ui/evolution-addressbook.xml.h:4 ui/evolution-calendar.xml.h:2
msgid "Copy the selection"
msgstr "Kopjo pjesën e zgjedhur"
-#: ../ui/evolution-addressbook.xml.h:5
+#: ui/evolution-addressbook.xml.h:5
msgid "Copy to Folder..."
msgstr "Kopjo tek kartela..."
-#: ../ui/evolution-addressbook.xml.h:7 ../ui/evolution-calendar.xml.h:3
+#: ui/evolution-addressbook.xml.h:7 ui/evolution-calendar.xml.h:3
msgid "Cut the selection"
msgstr "Preje pjesën e zgjedhur"
-#: ../ui/evolution-addressbook.xml.h:9
+#: ui/evolution-addressbook.xml.h:9
msgid "Delete selected contacts"
msgstr "Fshi kontaktet e zgjedhur"
-#: ../ui/evolution-addressbook.xml.h:11
+#: ui/evolution-addressbook.xml.h:11
msgid "Move Contact(s) to Another Folder..."
msgstr "Lëviz kontaktin(et) tek një kartelë tjetër..."
-#: ../ui/evolution-addressbook.xml.h:12
+#: ui/evolution-addressbook.xml.h:12
msgid "Move to Folder..."
msgstr "Lëvize tek kartela..."
-#: ../ui/evolution-addressbook.xml.h:14 ../ui/evolution-calendar.xml.h:16
+#: ui/evolution-addressbook.xml.h:14 ui/evolution-calendar.xml.h:16
msgid "Paste the clipboard"
msgstr "Ngjit nga shënimet"
-#: ../ui/evolution-addressbook.xml.h:15
+#: ui/evolution-addressbook.xml.h:15
msgid "Previews the contacts to be printed"
msgstr "Shiko kontaktet që do të printohen"
-#: ../ui/evolution-addressbook.xml.h:17 ../ui/evolution-calendar.xml.h:20
-#: ../ui/evolution-mail-message.xml.h:81 ../ui/evolution-tasks.xml.h:15
+#: ui/evolution-addressbook.xml.h:17 ui/evolution-calendar.xml.h:20
+#: ui/evolution-mail-message.xml.h:81 ui/evolution-tasks.xml.h:15
msgid "Print Pre_view"
msgstr "Pamja e _parë e printimit"
-#: ../ui/evolution-addressbook.xml.h:18
+#: ui/evolution-addressbook.xml.h:18
msgid "Print selected contacts"
msgstr "Printo kontaktet e zgjedhur"
-#: ../ui/evolution-addressbook.xml.h:20
+#: ui/evolution-addressbook.xml.h:20
msgid "Save selected contacts as a VCard."
msgstr "Ruaj kontaktet e zgjedhur si një VCard."
-#: ../ui/evolution-addressbook.xml.h:21
+#: ui/evolution-addressbook.xml.h:21
msgid "Select All"
msgstr "Zgjidh gjithçka"
-#: ../ui/evolution-addressbook.xml.h:22
+#: ui/evolution-addressbook.xml.h:22
msgid "Select all contacts"
msgstr "Zgjidh të gjithë kontaktet"
-#: ../ui/evolution-addressbook.xml.h:23
+#: ui/evolution-addressbook.xml.h:23
msgid "Send a message to the selected contacts."
msgstr "Dërgo një mesazh tek kontaktet e zgjedhur."
-#: ../ui/evolution-addressbook.xml.h:24
+#: ui/evolution-addressbook.xml.h:24
msgid "Send message to contact"
msgstr "Dërgoi një mesazh kontaktit"
-#: ../ui/evolution-addressbook.xml.h:25
+#: ui/evolution-addressbook.xml.h:25
msgid "Send selected contacts to another person."
msgstr "Dërgoja një personi tjetër kontaktet e zgjedhur."
-#: ../ui/evolution-addressbook.xml.h:26
+#: ui/evolution-addressbook.xml.h:26
msgid "Show contact preview window"
msgstr "Shfaq dritaren e pamjes së parë të kontaktit"
-#: ../ui/evolution-addressbook.xml.h:27
+#: ui/evolution-addressbook.xml.h:27
msgid "Stop"
msgstr "Ndal"
-#: ../ui/evolution-addressbook.xml.h:28
+#: ui/evolution-addressbook.xml.h:28
msgid "Stop Loading"
msgstr "Ndalo ngarkimin"
-#: ../ui/evolution-addressbook.xml.h:29
+#: ui/evolution-addressbook.xml.h:29
msgid "View the current contact"
msgstr "Shiko kontaktin aktual"
-#: ../ui/evolution-addressbook.xml.h:30 ../ui/evolution-calendar.xml.h:38
-#: ../ui/evolution-mail-global.xml.h:14 ../ui/evolution-mail-list.xml.h:23
-#: ../ui/evolution-mail-message.xml.h:103
-#: ../ui/evolution-mail-messagedisplay.xml.h:4 ../ui/evolution-tasks.xml.h:19
-#: ../ui/evolution.xml.h:36
+#: ui/evolution-addressbook.xml.h:30 ui/evolution-calendar.xml.h:38
+#: ui/evolution-mail-global.xml.h:14 ui/evolution-mail-list.xml.h:23
+#: ui/evolution-mail-message.xml.h:103
+#: ui/evolution-mail-messagedisplay.xml.h:4 ui/evolution-tasks.xml.h:19
+#: ui/evolution.xml.h:36
msgid "_Actions"
msgstr "_Veprimet"
-#: ../ui/evolution-addressbook.xml.h:35
+#: ui/evolution-addressbook.xml.h:35
msgid "_Forward Contact..."
msgstr "_Përcill kontaktin..."
-#: ../ui/evolution-addressbook.xml.h:36
+#: ui/evolution-addressbook.xml.h:36
msgid "_Move to Folder..."
msgstr "_Lëvize tek kartela..."
-#: ../ui/evolution-addressbook.xml.h:39 ../ui/evolution-mail-global.xml.h:16
+#: ui/evolution-addressbook.xml.h:39 ui/evolution-mail-global.xml.h:16
msgid "_Preview Pane"
msgstr "_Pamja e parë"
-#: ../ui/evolution-addressbook.xml.h:41
+#: ui/evolution-addressbook.xml.h:41
msgid "_Save as VCard..."
msgstr "_Ruaje si VCard..."
-#: ../ui/evolution-addressbook.xml.h:42
+#: ui/evolution-addressbook.xml.h:42
msgid "_Select All"
msgstr "_Zgjidh gjithçka"
-#: ../ui/evolution-addressbook.xml.h:43
+#: ui/evolution-addressbook.xml.h:43
msgid "_Send Message to Contact..."
msgstr "_Dërgo mesazh kontaktit..."
-#: ../ui/evolution-calendar.xml.h:4
+#: ui/evolution-calendar.xml.h:4
msgid "Day"
msgstr "Dita"
-#: ../ui/evolution-calendar.xml.h:6
+#: ui/evolution-calendar.xml.h:6
msgid "Delete All Occurrences"
msgstr "Elemino të gjithë përvjetorët"
-#: ../ui/evolution-calendar.xml.h:7
+#: ui/evolution-calendar.xml.h:7
msgid "Delete the appointment"
msgstr "Elemino takimin"
-#: ../ui/evolution-calendar.xml.h:8
+#: ui/evolution-calendar.xml.h:8
msgid "Delete this Occurrence"
msgstr "Elemino këtë përvjetor"
-#: ../ui/evolution-calendar.xml.h:9
+#: ui/evolution-calendar.xml.h:9
msgid "Delete this occurrence"
msgstr "Elemino këtë ngjarje"
-#: ../ui/evolution-calendar.xml.h:10
+#: ui/evolution-calendar.xml.h:10
msgid "Go To"
msgstr "Shko tek"
-#: ../ui/evolution-calendar.xml.h:11
+#: ui/evolution-calendar.xml.h:11
msgid "Go back"
msgstr "Kthehu mbrapa"
-#: ../ui/evolution-calendar.xml.h:12
+#: ui/evolution-calendar.xml.h:12
msgid "Go forward"
msgstr "Shko përpara"
-#: ../ui/evolution-calendar.xml.h:13
+#: ui/evolution-calendar.xml.h:13
msgid "List"
msgstr "Lista"
-#: ../ui/evolution-calendar.xml.h:14
+#: ui/evolution-calendar.xml.h:14
msgid "Month"
msgstr "Muaji"
-#: ../ui/evolution-calendar.xml.h:15 ../ui/evolution-mail-message.xml.h:65
+#: ui/evolution-calendar.xml.h:15 ui/evolution-mail-message.xml.h:65
msgid "Next"
msgstr "Vazhdo"
-#: ../ui/evolution-calendar.xml.h:17
+#: ui/evolution-calendar.xml.h:17
msgid "Previews the calendar to be printed"
msgstr "Pamja e parë e kalendarit që do të printohet"
-#: ../ui/evolution-calendar.xml.h:18 ../ui/evolution-mail-message.xml.h:79
+#: ui/evolution-calendar.xml.h:18 ui/evolution-mail-message.xml.h:79
msgid "Previous"
msgstr "Paraardhëse"
-#: ../ui/evolution-calendar.xml.h:21
+#: ui/evolution-calendar.xml.h:21
msgid "Print this calendar"
msgstr "Printo këtë kalendar"
-#: ../ui/evolution-calendar.xml.h:22
+#: ui/evolution-calendar.xml.h:22
msgid "Publish Free/Busy information for this calendar"
msgstr "Publiko informacionet e disponibilitetit për këtë kalendar"
-#: ../ui/evolution-calendar.xml.h:23 ../ui/evolution-tasks.xml.h:17
+#: ui/evolution-calendar.xml.h:23 ui/evolution-tasks.xml.h:17
msgid "Purg_e"
msgstr "Pastr_o"
-#: ../ui/evolution-calendar.xml.h:24
+#: ui/evolution-calendar.xml.h:24
msgid "Purge old appointments and meetings"
msgstr "Fshi takimet dhe mbledhjet e vjetra"
-#: ../ui/evolution-calendar.xml.h:25
+#: ui/evolution-calendar.xml.h:25
msgid "Select _Date"
msgstr "Zgjidh _Datën"
-#: ../ui/evolution-calendar.xml.h:27
+#: ui/evolution-calendar.xml.h:27
msgid "Select a specific date"
msgstr "Zgjidh një datë të caktuar"
-#: ../ui/evolution-calendar.xml.h:28
+#: ui/evolution-calendar.xml.h:28
msgid "Select today"
msgstr "Zgjidh ditën e sotme"
-#: ../ui/evolution-calendar.xml.h:29
+#: ui/evolution-calendar.xml.h:29
msgid "Show as list"
msgstr "Paraqite si listë"
-#: ../ui/evolution-calendar.xml.h:30
+#: ui/evolution-calendar.xml.h:30
msgid "Show one day"
msgstr "Shfaq një ditë"
-#: ../ui/evolution-calendar.xml.h:31
+#: ui/evolution-calendar.xml.h:31
msgid "Show one month"
msgstr "Shfaq një muaj"
-#: ../ui/evolution-calendar.xml.h:32
+#: ui/evolution-calendar.xml.h:32
msgid "Show one week"
msgstr "Shfaq një javë"
-#: ../ui/evolution-calendar.xml.h:33
+#: ui/evolution-calendar.xml.h:33
msgid "Show the working week"
msgstr "Shfaq javën punuese"
-#: ../ui/evolution-calendar.xml.h:35
+#: ui/evolution-calendar.xml.h:35
msgid "View the current appointment"
msgstr "Shiko takimin aktual"
-#: ../ui/evolution-calendar.xml.h:36
+#: ui/evolution-calendar.xml.h:36
msgid "Week"
msgstr "Java"
-#: ../ui/evolution-calendar.xml.h:37
+#: ui/evolution-calendar.xml.h:37
msgid "Work Week"
msgstr "Java punuese"
-#: ../ui/evolution-calendar.xml.h:42
+#: ui/evolution-calendar.xml.h:42
msgid "_Open Appointment"
msgstr "_Hap një Takim"
-#: ../ui/evolution-composer-entries.xml.h:1
+#: ui/evolution-composer-entries.xml.h:1
msgid "Copy selected text to the clipboard"
msgstr "Kopjo tekstin e zgjedhur tek Shënimet"
-#: ../ui/evolution-composer-entries.xml.h:2
-#: ../ui/evolution-mail-message.xml.h:21
+#: ui/evolution-composer-entries.xml.h:2 ui/evolution-mail-message.xml.h:21
msgid "Cu_t"
msgstr "Pre_je"
-#: ../ui/evolution-composer-entries.xml.h:3
+#: ui/evolution-composer-entries.xml.h:3
msgid "Cut selected text to the clipboard"
msgstr "Preje tekstin e zgjedhur tek Shënimet"
-#: ../ui/evolution-composer-entries.xml.h:4
+#: ui/evolution-composer-entries.xml.h:4
msgid "Paste text from the clipboard"
msgstr "Ngjite tekstin nga Shënimet"
-#: ../ui/evolution-composer-entries.xml.h:5 ../ui/evolution-mail-list.xml.h:13
-#: ../ui/evolution-subscribe.xml.h:6
+#: ui/evolution-composer-entries.xml.h:5 ui/evolution-mail-list.xml.h:13
+#: ui/evolution-subscribe.xml.h:6
msgid "Select _All"
msgstr "Zgjidh _gjithçka"
-#: ../ui/evolution-composer-entries.xml.h:6
+#: ui/evolution-composer-entries.xml.h:6
msgid "Select all text"
msgstr "Zgjith të gjithë tekstin"
-#: ../ui/evolution-executive-summary.xml.h:1
+#: ui/evolution-executive-summary.xml.h:1
msgid "Customize My Evolution"
msgstr "Personalizo Evolution"
-#: ../ui/evolution-mail-global.xml.h:2
+#: ui/evolution-mail-global.xml.h:2
msgid "Cancel the current mail operation"
msgstr "Anullo operacionin aktual të postës"
-#: ../ui/evolution-mail-global.xml.h:3
+#: ui/evolution-mail-global.xml.h:3
msgid "Compose _New Message"
msgstr "Harto një mesazh të _ri"
-#: ../ui/evolution-mail-global.xml.h:4
+#: ui/evolution-mail-global.xml.h:4
msgid "Create or edit rules for filtering new mail"
msgstr "Krijo apo ndrysho rregullat për filtrimin e mesazheve të rinj"
-#: ../ui/evolution-mail-global.xml.h:5
+#: ui/evolution-mail-global.xml.h:5
msgid "Create or edit vFolder definitions"
msgstr "Krijo apo ndrysho përcaktimet e kartelës vFolder"
-#: ../ui/evolution-mail-global.xml.h:6
+#: ui/evolution-mail-global.xml.h:6
msgid "Empty _Trash"
msgstr "Zbraz _Koshin"
-#: ../ui/evolution-mail-global.xml.h:7
+#: ui/evolution-mail-global.xml.h:7
msgid "Open a window for composing a mail message"
msgstr "Hap një dritare për të hartuar një mesazh"
-#: ../ui/evolution-mail-global.xml.h:8
+#: ui/evolution-mail-global.xml.h:8
msgid "Permanently remove all deleted messages from all folders"
msgstr "Elemino përgjithmonë të gjithë mesazhet e fshirë nga të gjitha kartelat"
-#: ../ui/evolution-mail-global.xml.h:9
+#: ui/evolution-mail-global.xml.h:9
msgid "Post Ne_w Message"
msgstr "Posto një mesazh të _ri"
-#: ../ui/evolution-mail-global.xml.h:10
+#: ui/evolution-mail-global.xml.h:10
msgid "Post a message to a Public folder"
msgstr "Posto një mesazh tek një kartelë publike"
-#: ../ui/evolution-mail-global.xml.h:11
+#: ui/evolution-mail-global.xml.h:11
msgid "S_ubscribe to Folders..."
msgstr "Regjistroh_u tek kartelat..."
-#: ../ui/evolution-mail-global.xml.h:12
+#: ui/evolution-mail-global.xml.h:12
msgid "Show message preview window"
msgstr "Shfaqe mesazhin në dritaren e pamjes së parë"
-#: ../ui/evolution-mail-global.xml.h:13
+#: ui/evolution-mail-global.xml.h:13
msgid "Subscribe or unsubscribe to folders on remote servers"
msgstr "Regjistrohu apo ç'regjistrohu tek kartelat në server-ët remote"
-#: ../ui/evolution-mail-global.xml.h:15
+#: ui/evolution-mail-global.xml.h:15
msgid "_Filters..."
msgstr "_Filtrat..."
-#: ../ui/evolution-mail-global.xml.h:18
+#: ui/evolution-mail-global.xml.h:18
msgid "vFolder _Editor..."
msgstr "_Editori i kartelave vFolder..."
-#: ../ui/evolution-mail-list.xml.h:1
+#: ui/evolution-mail-list.xml.h:1
msgid "Change the properties of this folder"
msgstr "Ndrysho pronësitë e kësaj kartele"
-#: ../ui/evolution-mail-list.xml.h:2 ../ui/evolution-mail-message.xml.h:10
+#: ui/evolution-mail-list.xml.h:2 ui/evolution-mail-message.xml.h:10
msgid "Copy selected message(s) to the clipboard"
msgstr "Kopjo mesazhin(et) e zgjedhur tek Shënimet"
-#: ../ui/evolution-mail-list.xml.h:3 ../ui/evolution-mail-message.xml.h:22
+#: ui/evolution-mail-list.xml.h:3 ui/evolution-mail-message.xml.h:22
msgid "Cut selected message(s) to the clipboard"
msgstr "Preje mesazhin(et) e zgjedhur tek Shënimet"
-#: ../ui/evolution-mail-list.xml.h:4
+#: ui/evolution-mail-list.xml.h:4
msgid "E_xpunge"
msgstr "_Elemino përgjithmonë"
-#: ../ui/evolution-mail-list.xml.h:5
+#: ui/evolution-mail-list.xml.h:5
msgid "Hide S_elected Messages"
msgstr "Fshih mesazhet e zgj_edhur"
-#: ../ui/evolution-mail-list.xml.h:6
+#: ui/evolution-mail-list.xml.h:6
msgid "Hide _Deleted Messages"
msgstr "Fshih mesazhet e _fshirë"
-#: ../ui/evolution-mail-list.xml.h:7
+#: ui/evolution-mail-list.xml.h:7
msgid "Hide _Read Messages"
msgstr "Fshih mesazhet e _lexuar"
-#: ../ui/evolution-mail-list.xml.h:8
+#: ui/evolution-mail-list.xml.h:8
msgid "Hide deleted messages rather than displaying them with a line through them"
msgstr "Fshih mesazhet e fshirë në vend që t'i shfaqësh të vizuar"
-#: ../ui/evolution-mail-list.xml.h:9
+#: ui/evolution-mail-list.xml.h:9
msgid "Mark All as _Read"
msgstr "Shënoi të gjithë si të _lexuar"
-#: ../ui/evolution-mail-list.xml.h:10
+#: ui/evolution-mail-list.xml.h:10
msgid "Mark all visible messages as read"
msgstr "Shëno si të lexuar të gjithë mesazhet e dukshëm"
-#: ../ui/evolution-mail-list.xml.h:11 ../ui/evolution-mail-message.xml.h:74
+#: ui/evolution-mail-list.xml.h:11 ui/evolution-mail-message.xml.h:74
msgid "Paste message(s) from the clipboard"
msgstr "Ngjit mesazhin(et) nga shënimet"
-#: ../ui/evolution-mail-list.xml.h:12
+#: ui/evolution-mail-list.xml.h:12
msgid "Permanently remove all deleted messages from this folder"
msgstr "Elemino përgjithmonë të gjithë mesazhet e fshirë nga kjo kartelë"
-#: ../ui/evolution-mail-list.xml.h:14
+#: ui/evolution-mail-list.xml.h:14
msgid "Select _Thread"
msgstr "Zgjidh _diskutimin"
-#: ../ui/evolution-mail-list.xml.h:15
+#: ui/evolution-mail-list.xml.h:15
msgid "Select all and only the messages that are not currently selected"
msgstr "Zgjidh gjithçka dhe vetëm mesazhet që nuk janë aktualisht të zgjedhur"
-#: ../ui/evolution-mail-list.xml.h:16
+#: ui/evolution-mail-list.xml.h:16
msgid "Select all messages in the same thread as the selected message"
msgstr ""
"Zgjidh të gjithë mesazhet që bëjnë pjesë në të njëjtin diskutim me mesazhin "
"e zgjedhur"
-#: ../ui/evolution-mail-list.xml.h:17
+#: ui/evolution-mail-list.xml.h:17
msgid "Select all visible messages"
msgstr "Zgjidh të gjithë mesazhet e dukshëm"
-#: ../ui/evolution-mail-list.xml.h:18
+#: ui/evolution-mail-list.xml.h:18
msgid "Sh_ow Hidden Messages"
msgstr "Sh_faq mesazhet e fshehur"
-#: ../ui/evolution-mail-list.xml.h:19
+#: ui/evolution-mail-list.xml.h:19
msgid "Show messages that have been temporarily hidden"
msgstr "Shfaq mesazhet që ishin fshehur përkohësisht"
-#: ../ui/evolution-mail-list.xml.h:20
+#: ui/evolution-mail-list.xml.h:20
msgid "Temporarily hide all messages that have already been read"
msgstr "Fshih të gjithë mesazhet e lexuar përkohësisht"
-#: ../ui/evolution-mail-list.xml.h:21
+#: ui/evolution-mail-list.xml.h:21
msgid "Temporarily hide the selected messages"
msgstr "Fshih mesazhet e zgjedhur përkohësisht"
-#: ../ui/evolution-mail-list.xml.h:22
+#: ui/evolution-mail-list.xml.h:22
msgid "Threaded Message list"
msgstr "Rreshtim sipas diskutimeve"
-#: ../ui/evolution-mail-list.xml.h:25
+#: ui/evolution-mail-list.xml.h:25
msgid "_Folder"
msgstr "_Kartela"
-#: ../ui/evolution-mail-list.xml.h:26 ../ui/evolution-subscribe.xml.h:12
+#: ui/evolution-mail-list.xml.h:26 ui/evolution-subscribe.xml.h:12
msgid "_Invert Selection"
msgstr "_Inverto zgjedhjen"
-#: ../ui/evolution-mail-list.xml.h:28
+#: ui/evolution-mail-list.xml.h:28
msgid "_Threaded Message List"
msgstr "Rreshtoi sipas _Diskutimeve"
-#: ../ui/evolution-mail-message.xml.h:1
+#: ui/evolution-mail-message.xml.h:1
msgid "A_dd Sender to Address Book"
msgstr "Sh_to dërguesin në rubrikë"
-#: ../ui/evolution-mail-message.xml.h:2
+#: ui/evolution-mail-message.xml.h:2
msgid "A_pply Filters"
msgstr "A_pliko filtrat"
-#: ../ui/evolution-mail-message.xml.h:3
+#: ui/evolution-mail-message.xml.h:3
msgid "Add Sender to Address Book"
msgstr "Shtoje dërguesin në rubrikë"
-#: ../ui/evolution-mail-message.xml.h:4
+#: ui/evolution-mail-message.xml.h:4
msgid "Apply filter rules to the selected messages"
msgstr "Aplikoi rregullat e filtrit mesazheve të zgjedhur"
-#: ../ui/evolution-mail-message.xml.h:5
+#: ui/evolution-mail-message.xml.h:5
msgid "Caret _Mode"
msgstr "_Modalitet paraqitje kursori"
-#: ../ui/evolution-mail-message.xml.h:6
+#: ui/evolution-mail-message.xml.h:6
msgid "Compose a reply to all of the recipients of the selected message"
msgstr "Shkruaj një përgjigje për të gjithë marrësit e mesazhit të zgjedhur"
-#: ../ui/evolution-mail-message.xml.h:7
+#: ui/evolution-mail-message.xml.h:7
msgid "Compose a reply to the mailing list of the selected message"
msgstr "Shkruaj një përgjigje për tek mailing list e mesazhit të zgjedhur"
-#: ../ui/evolution-mail-message.xml.h:8
+#: ui/evolution-mail-message.xml.h:8
msgid "Compose a reply to the sender of the selected message"
msgstr "Shkruaj një përgjigje dërguesit të mesazhit të zgjedhur"
-#: ../ui/evolution-mail-message.xml.h:11
+#: ui/evolution-mail-message.xml.h:11
msgid "Copy selected messages to another folder"
msgstr "Kopjo mesazhet e zgjedhur në një kartelë tjetër"
-#: ../ui/evolution-mail-message.xml.h:12
+#: ui/evolution-mail-message.xml.h:12
msgid "Create _vFolder From Message"
msgstr "Krijo kartelë _vFolder nga mesazhi"
-#: ../ui/evolution-mail-message.xml.h:13
+#: ui/evolution-mail-message.xml.h:13
msgid "Create a rule to filter messages from this sender"
msgstr "Krijo një rregull për të filtruar mesazhet nga ky dërgues"
-#: ../ui/evolution-mail-message.xml.h:14
+#: ui/evolution-mail-message.xml.h:14
msgid "Create a rule to filter messages to these recipients"
msgstr "Krijo një rregull për të filtruar mesazhet për tek këta marrës"
-#: ../ui/evolution-mail-message.xml.h:15
+#: ui/evolution-mail-message.xml.h:15
msgid "Create a rule to filter messages to this mailing list"
msgstr "Krijo një rregull për të filtruar mesazhet për tek kjo mailing list"
-#: ../ui/evolution-mail-message.xml.h:16
+#: ui/evolution-mail-message.xml.h:16
msgid "Create a rule to filter messages with this subject"
msgstr "Krijo një rregull për të filtruar mesazhet me këtë subjekt"
-#: ../ui/evolution-mail-message.xml.h:17
+#: ui/evolution-mail-message.xml.h:17
msgid "Create a vFolder for these recipients"
msgstr "Krijo një kartelë vFolder për këta marrës"
-#: ../ui/evolution-mail-message.xml.h:18
+#: ui/evolution-mail-message.xml.h:18
msgid "Create a vFolder for this mailing list"
msgstr "Krijo një kartelë vFolder për këtë mailing list"
-#: ../ui/evolution-mail-message.xml.h:19
+#: ui/evolution-mail-message.xml.h:19
msgid "Create a vFolder for this sender"
msgstr "Krijo një kartelë vFolder për këtë dërgues"
-#: ../ui/evolution-mail-message.xml.h:20
+#: ui/evolution-mail-message.xml.h:20
msgid "Create a vFolder for this subject"
msgstr "Krijo një kartelë vFolder për këtë subjekt"
-#: ../ui/evolution-mail-message.xml.h:23
+#: ui/evolution-mail-message.xml.h:23
msgid "Decrease the text size"
msgstr "Zvogëlo madhësinë e tekstit"
-#: ../ui/evolution-mail-message.xml.h:25
+#: ui/evolution-mail-message.xml.h:25
msgid "Display the next important message"
msgstr "Shfaq mesazhin e rendësishëm në vazhdim"
-#: ../ui/evolution-mail-message.xml.h:26
+#: ui/evolution-mail-message.xml.h:26
msgid "Display the next message"
msgstr "Shfaq mesazhin në vazhdim"
-#: ../ui/evolution-mail-message.xml.h:27
+#: ui/evolution-mail-message.xml.h:27
msgid "Display the next unread message"
msgstr "Shfaq mesazhin e palexuar në vazhdim"
-#: ../ui/evolution-mail-message.xml.h:28
+#: ui/evolution-mail-message.xml.h:28
msgid "Display the next unread thread"
msgstr "Shfaq diskutimin e palexuar në vazhdim"
-#: ../ui/evolution-mail-message.xml.h:29
+#: ui/evolution-mail-message.xml.h:29
msgid "Display the previous important message"
msgstr "Shfaq mesazhin paraardhës të rendësishëm"
-#: ../ui/evolution-mail-message.xml.h:30
+#: ui/evolution-mail-message.xml.h:30
msgid "Display the previous message"
msgstr "Shfaq mesazhin paraardhës"
-#: ../ui/evolution-mail-message.xml.h:31
+#: ui/evolution-mail-message.xml.h:31
msgid "Display the previous unread message"
msgstr "Shfaq mesazhin paraardhës të palexuar"
-#: ../ui/evolution-mail-message.xml.h:32
+#: ui/evolution-mail-message.xml.h:32
msgid "F_orward As..."
msgstr "Përci_lle Si..."
-#: ../ui/evolution-mail-message.xml.h:33
+#: ui/evolution-mail-message.xml.h:33
msgid "Filter _Junk"
msgstr "Filtro postën për të _Flakur"
-#: ../ui/evolution-mail-message.xml.h:34
+#: ui/evolution-mail-message.xml.h:34
msgid "Filter on Mailing _List..."
msgstr "Filtro në Mailing _List..."
-#: ../ui/evolution-mail-message.xml.h:35
+#: ui/evolution-mail-message.xml.h:35
msgid "Filter on Se_nder..."
msgstr "Filtro në Dë_rguesi..."
-#: ../ui/evolution-mail-message.xml.h:36
+#: ui/evolution-mail-message.xml.h:36
msgid "Filter on _Recipients..."
msgstr "Filtro në _Marrësit..."
-#: ../ui/evolution-mail-message.xml.h:37
+#: ui/evolution-mail-message.xml.h:37
msgid "Filter on _Subject..."
msgstr "Filtro në _Subjekt..."
-#: ../ui/evolution-mail-message.xml.h:38
+#: ui/evolution-mail-message.xml.h:38
msgid "Filter the selected messages for junk status"
msgstr "Kontrollo nëse duhen flakur mesazhet e zgjedhur"
-#: ../ui/evolution-mail-message.xml.h:39
+#: ui/evolution-mail-message.xml.h:39
msgid "Flag selected message(s) for follow-up"
msgstr "Shëno mesazhin(et) e zgjedhur si vazhdim"
-#: ../ui/evolution-mail-message.xml.h:40
+#: ui/evolution-mail-message.xml.h:40
msgid "Follow _Up..."
msgstr "_Vazhdon..."
-#: ../ui/evolution-mail-message.xml.h:41
+#: ui/evolution-mail-message.xml.h:41
msgid "Force images in HTML mail to be loaded"
msgstr "Detyro ngarkimin e figurave në mesazhet HTML"
-#: ../ui/evolution-mail-message.xml.h:43
+#: ui/evolution-mail-message.xml.h:43
msgid "Forward the selected message in the body of a new message"
msgstr "Përcille mesazhin e zgjedhur si trup i një mesazhi të ri"
-#: ../ui/evolution-mail-message.xml.h:44
+#: ui/evolution-mail-message.xml.h:44
msgid "Forward the selected message quoted like a reply"
msgstr "Përcille mesazhin e zgjedhur duke e cituar si përgjigje"
-#: ../ui/evolution-mail-message.xml.h:45
+#: ui/evolution-mail-message.xml.h:45
msgid "Forward the selected message to someone"
msgstr "Përcillja dikujt mesazhin e zgjedhur"
-#: ../ui/evolution-mail-message.xml.h:46
+#: ui/evolution-mail-message.xml.h:46
msgid "Forward the selected message to someone as an attachment"
msgstr "Përcillja dikujt mesazhin e zgjedhur si i bashkangjitur"
-#: ../ui/evolution-mail-message.xml.h:47
+#: ui/evolution-mail-message.xml.h:47
msgid "Increase the text size"
msgstr "Rrit madhësinë e tekstit"
-#: ../ui/evolution-mail-message.xml.h:49
+#: ui/evolution-mail-message.xml.h:49
msgid "Load _Images"
msgstr "Ngarko _Figurat"
-#: ../ui/evolution-mail-message.xml.h:50
+#: ui/evolution-mail-message.xml.h:50
msgid "Mar_k as Read"
msgstr "Shë_no si të Lexuar"
-#: ../ui/evolution-mail-message.xml.h:51
+#: ui/evolution-mail-message.xml.h:51
msgid "Mark as I_mportant"
msgstr "Shëno si i re_ndësishëm"
-#: ../ui/evolution-mail-message.xml.h:52
+#: ui/evolution-mail-message.xml.h:52
msgid "Mark as U_nread"
msgstr "Shëno si të Pa_lexuar"
-#: ../ui/evolution-mail-message.xml.h:53
+#: ui/evolution-mail-message.xml.h:53
msgid "Mark as Unimp_ortant"
msgstr "Shëno si të p_arendësishëm"
-#: ../ui/evolution-mail-message.xml.h:56
+#: ui/evolution-mail-message.xml.h:56
msgid "Mark the selected message(s) as having been read"
msgstr "Shëno mesazhin(et) e zgjedhur si të lexuar"
-#: ../ui/evolution-mail-message.xml.h:57
+#: ui/evolution-mail-message.xml.h:57
msgid "Mark the selected message(s) as important"
msgstr "Shëno mesazhin(et) e zgjedhur si të rendësishëm"
-#: ../ui/evolution-mail-message.xml.h:58
+#: ui/evolution-mail-message.xml.h:58
msgid "Mark the selected message(s) as junk"
msgstr "Shëno mesazhin(et) e zgjedhur si për tu hedhur në kosh"
-#: ../ui/evolution-mail-message.xml.h:59
+#: ui/evolution-mail-message.xml.h:59
msgid "Mark the selected message(s) as not being junk"
msgstr "Shëno mesazhin(et) e zgjedhur si jo për tu hedhur në kosh"
-#: ../ui/evolution-mail-message.xml.h:60
+#: ui/evolution-mail-message.xml.h:60
msgid "Mark the selected message(s) as not having been read"
msgstr "Shëno mesazhin(et) e zgjedhur si të palexuar"
-#: ../ui/evolution-mail-message.xml.h:61
+#: ui/evolution-mail-message.xml.h:61
msgid "Mark the selected message(s) as unimportant"
msgstr "Shëno mesazhin(et) e zgjedhur si të parendësishëm"
-#: ../ui/evolution-mail-message.xml.h:62
+#: ui/evolution-mail-message.xml.h:62
msgid "Mark the selected messages for deletion"
msgstr "Shëno mesazhet e zgjedhur për t'i eleminuar"
-#: ../ui/evolution-mail-message.xml.h:63
+#: ui/evolution-mail-message.xml.h:63
msgid "Move"
msgstr "Lëvize"
-#: ../ui/evolution-mail-message.xml.h:64
+#: ui/evolution-mail-message.xml.h:64
msgid "Move selected message(s) to another folder"
msgstr "Lëviz mesazhin(et) e zgjedhur në një kartelë tjetër"
-#: ../ui/evolution-mail-message.xml.h:66
+#: ui/evolution-mail-message.xml.h:66
msgid "Next _Important Message"
msgstr "Mesazhi i _rendësishëm në vazhdim"
-#: ../ui/evolution-mail-message.xml.h:67
+#: ui/evolution-mail-message.xml.h:67
msgid "Next _Thread"
msgstr "_Diskutimi në vazhdim"
-#: ../ui/evolution-mail-message.xml.h:68
+#: ui/evolution-mail-message.xml.h:68
msgid "Next _Unread Message"
msgstr "Mesazhi në vazhdim i _Palexuar"
-#: ../ui/evolution-mail-message.xml.h:69
+#: ui/evolution-mail-message.xml.h:69
msgid "Not Junk"
msgstr "Jo për t'u flakur"
-#: ../ui/evolution-mail-message.xml.h:70
+#: ui/evolution-mail-message.xml.h:70
msgid "Open the selected message in a new window"
msgstr "Hape mesazhin e zgjedhur në një dritare të re"
-#: ../ui/evolution-mail-message.xml.h:71
+#: ui/evolution-mail-message.xml.h:71
msgid "Open the selected message in the composer for editing"
msgstr "Hape mesazhin e zgjedhur në një dritare për t'a ndryshuar"
-#: ../ui/evolution-mail-message.xml.h:72
+#: ui/evolution-mail-message.xml.h:72
msgid "Original Si_ze"
msgstr "Madhë_sia Orgjinale"
-#: ../ui/evolution-mail-message.xml.h:73
+#: ui/evolution-mail-message.xml.h:73
msgid "P_revious Unread Message"
msgstr "Mesazhi pa_raardhës i palexuar"
-#: ../ui/evolution-mail-message.xml.h:75
+#: ui/evolution-mail-message.xml.h:75
msgid "Post a Repl_y"
msgstr "Dërgo një Përgji_gje"
-#: ../ui/evolution-mail-message.xml.h:76
+#: ui/evolution-mail-message.xml.h:76
msgid "Post a reply to a message in a Public folder"
msgstr "Përgjigju mesazhit në një kartelë publike"
-#: ../ui/evolution-mail-message.xml.h:77
+#: ui/evolution-mail-message.xml.h:77
msgid "Pr_evious Important Message"
msgstr "Mesazhi par_aardhës i rendësishëm"
-#: ../ui/evolution-mail-message.xml.h:78
+#: ui/evolution-mail-message.xml.h:78
msgid "Preview the message to be printed"
msgstr "Shiko se si do të printohet mesazhi"
-#: ../ui/evolution-mail-message.xml.h:82
+#: ui/evolution-mail-message.xml.h:82
msgid "Print this message"
msgstr "Printo këtë mesazh"
-#: ../ui/evolution-mail-message.xml.h:83
+#: ui/evolution-mail-message.xml.h:83
msgid "Re_direct"
msgstr "Ri_drejto"
-#: ../ui/evolution-mail-message.xml.h:84
+#: ui/evolution-mail-message.xml.h:84
msgid "Redirect (bounce) the selected message to someone"
msgstr "Ridrejtoja (bounce) mesazhin e zgjedhur dikujt"
-#: ../ui/evolution-mail-message.xml.h:89
+#: ui/evolution-mail-message.xml.h:89
msgid "Reset the text to its original size"
msgstr "Rikthe tekstin në madhësine e tij orgjinale"
-#: ../ui/evolution-mail-message.xml.h:90
+#: ui/evolution-mail-message.xml.h:90
msgid "S_earch in Message..."
msgstr "_Kërko në mesazh..."
-#: ../ui/evolution-mail-message.xml.h:91
+#: ui/evolution-mail-message.xml.h:91
msgid "S_maller"
msgstr "Më i _vogël"
-#: ../ui/evolution-mail-message.xml.h:92
+#: ui/evolution-mail-message.xml.h:92
msgid "Save the message as a text file"
msgstr "Ruaj mesazhin si file teksti"
-#: ../ui/evolution-mail-message.xml.h:93
+#: ui/evolution-mail-message.xml.h:93
msgid "Search for text in the body of the displayed message"
msgstr "Kryej një kërkim në trupin e mesazhit të shfaqur"
-#: ../ui/evolution-mail-message.xml.h:94
+#: ui/evolution-mail-message.xml.h:94
msgid "Set up the page settings for your current printer"
msgstr "Përcakto rregullimet e faqes për printerin tuaj aktual"
-#: ../ui/evolution-mail-message.xml.h:95
+#: ui/evolution-mail-message.xml.h:95
msgid "Show Email _Source"
msgstr "Shfaq _buruesin e email"
-#: ../ui/evolution-mail-message.xml.h:96
+#: ui/evolution-mail-message.xml.h:96
msgid "Show Full _Headers"
msgstr "Shfaq _Titujt e plotë"
-#: ../ui/evolution-mail-message.xml.h:97
+#: ui/evolution-mail-message.xml.h:97
msgid "Show a blinking cursor in the body of displayed messages"
msgstr "Shfaq një kursor pulsues në trupin e mesazheve"
-#: ../ui/evolution-mail-message.xml.h:98
+#: ui/evolution-mail-message.xml.h:98
msgid "Show message in the normal style"
msgstr "Paraqit mesazhin në stil normal"
-#: ../ui/evolution-mail-message.xml.h:99
+#: ui/evolution-mail-message.xml.h:99
msgid "Show message with all email headers"
msgstr "Shfaq mesazhin me të gjithë emrat e email-it"
-#: ../ui/evolution-mail-message.xml.h:100
+#: ui/evolution-mail-message.xml.h:100
msgid "Show the raw email source of the message"
msgstr "Shfaq buruesin e papërpunuar të mesazhit"
-#: ../ui/evolution-mail-message.xml.h:101
+#: ui/evolution-mail-message.xml.h:101
msgid "Text Si_ze"
msgstr "Madhë_sia e tekstit"
-#: ../ui/evolution-mail-message.xml.h:102
+#: ui/evolution-mail-message.xml.h:102
msgid "Un-delete the selected messages"
msgstr "Anullo fshirjen e mesazheve të zgjedhur"
-#: ../ui/evolution-mail-message.xml.h:104
+#: ui/evolution-mail-message.xml.h:104
msgid "_Attached"
msgstr "_Bashkangjitur"
-#: ../ui/evolution-mail-message.xml.h:107
+#: ui/evolution-mail-message.xml.h:107
msgid "_Create Filter From Message"
msgstr "_Krijo filtër nga mesazhi"
-#: ../ui/evolution-mail-message.xml.h:111
+#: ui/evolution-mail-message.xml.h:111
msgid "_Go To"
msgstr "_Shko Tek"
-#: ../ui/evolution-mail-message.xml.h:112
+#: ui/evolution-mail-message.xml.h:112
msgid "_Inline"
msgstr "_Inline"
-#: ../ui/evolution-mail-message.xml.h:113
+#: ui/evolution-mail-message.xml.h:113
msgid "_Larger"
msgstr "Më i _madh"
-#: ../ui/evolution-mail-message.xml.h:114
+#: ui/evolution-mail-message.xml.h:114
msgid "_Message Display"
msgstr "Paraqitja e _Mesazhit"
-#: ../ui/evolution-mail-message.xml.h:116
+#: ui/evolution-mail-message.xml.h:116
msgid "_Next Message"
msgstr "Mesazhi në _Vazhdim"
-#: ../ui/evolution-mail-message.xml.h:117
+#: ui/evolution-mail-message.xml.h:117
msgid "_Normal Display"
msgstr "Paraqitje _Normale"
-#: ../ui/evolution-mail-message.xml.h:118
+#: ui/evolution-mail-message.xml.h:118
msgid "_Open Message"
msgstr "_Hape mesazhin"
-#: ../ui/evolution-mail-message.xml.h:120
+#: ui/evolution-mail-message.xml.h:120
msgid "_Previous Message"
msgstr "Mesazhi _Paraardhës"
-#: ../ui/evolution-mail-message.xml.h:122
+#: ui/evolution-mail-message.xml.h:122
msgid "_Quoted"
msgstr "_Cituar"
-#: ../ui/evolution-mail-message.xml.h:125 ../ui/evolution.xml.h:48
+#: ui/evolution-mail-message.xml.h:125 ui/evolution.xml.h:48
msgid "_Tools"
msgstr "_Instrumentë"
-#: ../ui/evolution-mail-message.xml.h:126
+#: ui/evolution-mail-message.xml.h:126
msgid "_Undelete"
msgstr "_Risill"
-#: ../ui/evolution-mail-message.xml.h:127
+#: ui/evolution-mail-message.xml.h:127
msgid "vFolder on Mailing _List..."
msgstr "Kartelë vFolder tek Mailing _List..."
-#: ../ui/evolution-mail-message.xml.h:128
+#: ui/evolution-mail-message.xml.h:128
msgid "vFolder on Se_nder..."
msgstr "Kartelë vFolder tek _Dërguesi..."
-#: ../ui/evolution-mail-message.xml.h:129
+#: ui/evolution-mail-message.xml.h:129
msgid "vFolder on _Recipients..."
msgstr "Kartelë vFolder tek _Marrësit..."
-#: ../ui/evolution-mail-message.xml.h:130
+#: ui/evolution-mail-message.xml.h:130
msgid "vFolder on _Subject..."
msgstr "Kartelë vFolder tek _Subjekti..."
-#: ../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
+#: 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 "Mbyll"
-#: ../ui/evolution-mail-messagedisplay.xml.h:2 ../ui/evolution.xml.h:5
+#: ui/evolution-mail-messagedisplay.xml.h:2 ui/evolution.xml.h:5
msgid "Close this window"
msgstr "Mbyll këtë dritare"
-#: ../ui/evolution-mail-messagedisplay.xml.h:3 ../ui/evolution.xml.h:19
+#: ui/evolution-mail-messagedisplay.xml.h:3 ui/evolution.xml.h:19
msgid "Main toolbar"
msgstr "Paneli qendror i instrumentëve"
-#: ../ui/evolution-mail-messagedisplay.xml.h:5
-#: ../ui/evolution-message-composer.xml.h:41 ../ui/evolution-subscribe.xml.h:9
-#: ../ui/evolution.xml.h:37
+#: ui/evolution-mail-messagedisplay.xml.h:5
+#: ui/evolution-message-composer.xml.h:41 ui/evolution-subscribe.xml.h:9
+#: ui/evolution.xml.h:37
msgid "_Close"
msgstr "_Mbyll"
-#: ../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:39
+#: 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:39
msgid "_File"
msgstr "_File"
-#: ../ui/evolution-message-composer.xml.h:1
+#: ui/evolution-message-composer.xml.h:1
msgid "Attach"
msgstr "Bashkangjit"
-#: ../ui/evolution-message-composer.xml.h:2
+#: ui/evolution-message-composer.xml.h:2
msgid "Attach a file"
msgstr "Bashkangjit një file"
-#: ../ui/evolution-message-composer.xml.h:4
-#: ../ui/evolution-signature-editor.xml.h:3
+#: ui/evolution-message-composer.xml.h:4 ui/evolution-signature-editor.xml.h:3
msgid "Close the current file"
msgstr "Mbylle file aktual"
-#: ../ui/evolution-message-composer.xml.h:5
+#: ui/evolution-message-composer.xml.h:5
msgid "Delete all but signature"
msgstr "Fshi gjithçka me përjashtim të firmës"
-#: ../ui/evolution-message-composer.xml.h:6
+#: ui/evolution-message-composer.xml.h:6
msgid "Encrypt this message with PGP"
msgstr "Kripto këtë mesazh me PGP"
-#: ../ui/evolution-message-composer.xml.h:7
+#: ui/evolution-message-composer.xml.h:7
msgid "Encrypt this message with your S/MIME Encryption Cetificate"
msgstr "Kripto këtë mesazh me çertifikatën e kriptimit tuaj S/MIME"
-#: ../ui/evolution-message-composer.xml.h:8
-#: ../ui/evolution-signature-editor.xml.h:4
+#: ui/evolution-message-composer.xml.h:8 ui/evolution-signature-editor.xml.h:4
msgid "For_mat"
msgstr "For_mati"
-#: ../ui/evolution-message-composer.xml.h:9
+#: ui/evolution-message-composer.xml.h:9
msgid "HT_ML"
msgstr "HT_ML"
-#: ../ui/evolution-message-composer.xml.h:11
+#: ui/evolution-message-composer.xml.h:11
msgid "Open a file"
msgstr "Hap një file"
-#: ../ui/evolution-message-composer.xml.h:12
+#: ui/evolution-message-composer.xml.h:12
msgid "PGP Encrypt"
msgstr "Kripto me PGP"
-#: ../ui/evolution-message-composer.xml.h:13
+#: ui/evolution-message-composer.xml.h:13
msgid "PGP Sign"
msgstr "Firmos me PGP"
-#: ../ui/evolution-message-composer.xml.h:14
+#: ui/evolution-message-composer.xml.h:14
msgid "S/MIME Encrypt"
msgstr "Kripto me S/MIME"
-#: ../ui/evolution-message-composer.xml.h:15
+#: ui/evolution-message-composer.xml.h:15
msgid "S/MIME Sign"
msgstr "Firmos me S/MIME"
-#: ../ui/evolution-message-composer.xml.h:17
+#: ui/evolution-message-composer.xml.h:17
msgid "Save As"
msgstr "Ruaj si"
-#: ../ui/evolution-message-composer.xml.h:18
+#: ui/evolution-message-composer.xml.h:18
msgid "Save _As..."
msgstr "Ruaje _Si..."
-#: ../ui/evolution-message-composer.xml.h:19
+#: ui/evolution-message-composer.xml.h:19
msgid "Save _Draft"
msgstr "Ruaj _Kopjen"
-#: ../ui/evolution-message-composer.xml.h:20
+#: ui/evolution-message-composer.xml.h:20
msgid "Save in folder..."
msgstr "Ruaje tek kartela..."
-#: ../ui/evolution-message-composer.xml.h:21
-#: ../ui/evolution-signature-editor.xml.h:9
+#: ui/evolution-message-composer.xml.h:21
+#: ui/evolution-signature-editor.xml.h:9
msgid "Save the current file"
msgstr "Ruaj file aktual"
-#: ../ui/evolution-message-composer.xml.h:22
+#: ui/evolution-message-composer.xml.h:22
msgid "Save the current file with a different name"
msgstr "Ruaj file aktual me një emër tjetër"
-#: ../ui/evolution-message-composer.xml.h:23
+#: ui/evolution-message-composer.xml.h:23
msgid "Save the message in a specified folder"
msgstr "Ruaje mesazhin në një kartelë të caktuar"
-#: ../ui/evolution-message-composer.xml.h:25
-#: ../ui/evolution-signature-editor.xml.h:11
+#: ui/evolution-message-composer.xml.h:25
+#: ui/evolution-signature-editor.xml.h:11
msgid "Send the mail in HTML format"
msgstr "Dërgoje postën në formatin HTML"
-#: ../ui/evolution-message-composer.xml.h:26
+#: ui/evolution-message-composer.xml.h:26
msgid "Send this message"
msgstr "Nise këtë mesazh"
-#: ../ui/evolution-message-composer.xml.h:27
+#: ui/evolution-message-composer.xml.h:27
msgid "Show / hide attachments"
msgstr "Shfaq / fshih të bashkangjiturit"
-#: ../ui/evolution-message-composer.xml.h:28
+#: ui/evolution-message-composer.xml.h:28
msgid "Show _attachments"
msgstr "Shfaq të _bashkangjiturit"
-#: ../ui/evolution-message-composer.xml.h:29
+#: ui/evolution-message-composer.xml.h:29
msgid "Show attachments"
msgstr "Shfaq të bashkangjiturit"
-#: ../ui/evolution-message-composer.xml.h:30
+#: ui/evolution-message-composer.xml.h:30
msgid "Sign this message with your PGP key"
msgstr "Firmos këtë mesazh me kyçin tuaj PGP"
-#: ../ui/evolution-message-composer.xml.h:31
+#: ui/evolution-message-composer.xml.h:31
msgid "Sign this message with your S/MIME Signature Certificate"
msgstr "Firmos këtë mesazh me çertifikatën e firmës suaj S/MIME"
-#: ../ui/evolution-message-composer.xml.h:32
+#: ui/evolution-message-composer.xml.h:32
msgid "Toggles whether the BCC field is displayed"
msgstr "Shkëmbe shfaqjen e fushës BCC"
-#: ../ui/evolution-message-composer.xml.h:33
+#: ui/evolution-message-composer.xml.h:33
msgid "Toggles whether the CC field is displayed"
msgstr "Shkëmbe shfaqjen e fushës CC"
-#: ../ui/evolution-message-composer.xml.h:34
+#: ui/evolution-message-composer.xml.h:34
msgid "Toggles whether the From chooser is displayed"
msgstr "Shkëmbe shfaqjen e fushës Nga"
-#: ../ui/evolution-message-composer.xml.h:35
+#: ui/evolution-message-composer.xml.h:35
msgid "Toggles whether the Post-To field is displayed"
msgstr "Shkëmbe shfaqjen e fushës Posto-Tek"
-#: ../ui/evolution-message-composer.xml.h:36
+#: ui/evolution-message-composer.xml.h:36
msgid "Toggles whether the Reply-To field is displayed"
msgstr "Shkëmbe shfaqjen e fushës Përgjigju-Tek"
-#: ../ui/evolution-message-composer.xml.h:37
+#: ui/evolution-message-composer.xml.h:37
msgid "Toggles whether the To field is displayed"
msgstr "Shkëmbe shfaqjen e fushës Për"
-#: ../ui/evolution-message-composer.xml.h:38
+#: ui/evolution-message-composer.xml.h:38
msgid "_Attachment..."
msgstr "_Të bashkangjitur..."
-#: ../ui/evolution-message-composer.xml.h:39
+#: ui/evolution-message-composer.xml.h:39
msgid "_Bcc Field"
msgstr "Fusha _Bcc"
-#: ../ui/evolution-message-composer.xml.h:40
+#: ui/evolution-message-composer.xml.h:40
msgid "_Cc Field"
msgstr "Fusha _Cc"
-#: ../ui/evolution-message-composer.xml.h:42
+#: ui/evolution-message-composer.xml.h:42
msgid "_Delete all"
msgstr "_Elemino gjithçka"
-#: ../ui/evolution-message-composer.xml.h:45
+#: ui/evolution-message-composer.xml.h:45
msgid "_From Field"
msgstr "Fusha _Nga"
-#: ../ui/evolution-message-composer.xml.h:46
-#: ../ui/evolution-signature-editor.xml.h:14
+#: ui/evolution-message-composer.xml.h:46
+#: ui/evolution-signature-editor.xml.h:14
msgid "_Insert"
msgstr "_Ndërfut"
-#: ../ui/evolution-message-composer.xml.h:47
+#: ui/evolution-message-composer.xml.h:47
msgid "_Open..."
msgstr "_Hap..."
-#: ../ui/evolution-message-composer.xml.h:48
+#: ui/evolution-message-composer.xml.h:48
msgid "_Post-To Field"
msgstr "Fusha _Posto-Tek"
-#: ../ui/evolution-message-composer.xml.h:49
+#: ui/evolution-message-composer.xml.h:49
msgid "_Reply-To Field"
msgstr "Fusha _Përgjigju-Tek"
-#: ../ui/evolution-message-composer.xml.h:50
-#: ../ui/evolution-signature-editor.xml.h:15
+#: ui/evolution-message-composer.xml.h:50
+#: ui/evolution-signature-editor.xml.h:15
msgid "_Save"
msgstr "_Ruaj"
-#: ../ui/evolution-message-composer.xml.h:51
+#: ui/evolution-message-composer.xml.h:51
msgid "_Security"
msgstr "_Siguria"
-#: ../ui/evolution-message-composer.xml.h:52
+#: ui/evolution-message-composer.xml.h:52
msgid "_To Field"
msgstr "Fusha _Për"
-#: ../ui/evolution-signature-editor.xml.h:1
+#: ui/evolution-signature-editor.xml.h:1
msgid "C_lose"
msgstr "M_byll"
-#: ../ui/evolution-signature-editor.xml.h:5
+#: ui/evolution-signature-editor.xml.h:5
msgid "H_TML"
msgstr "H_TML"
-#: ../ui/evolution-signature-editor.xml.h:7
+#: ui/evolution-signature-editor.xml.h:7
msgid "Save and Close"
msgstr "Ruaje dhe Mbylle"
-#: ../ui/evolution-signature-editor.xml.h:8
+#: ui/evolution-signature-editor.xml.h:8
msgid "Save and _Close"
msgstr "Ruaje dhe _Mbylle"
-#: ../ui/evolution-signature-editor.xml.h:10
+#: ui/evolution-signature-editor.xml.h:10
msgid "Save the current file and close the window"
msgstr "Ruaj file aktual dhe mbyll dritaren"
-#: ../ui/evolution-subscribe.xml.h:1
+#: ui/evolution-subscribe.xml.h:1
msgid "Add folder to your list of subscribed folders"
msgstr "Shtoje kartelën tek lista juaj e kartelave të regjistruara"
-#: ../ui/evolution-subscribe.xml.h:2
+#: ui/evolution-subscribe.xml.h:2
msgid "F_older"
msgstr "K_artela"
-#: ../ui/evolution-subscribe.xml.h:3
+#: ui/evolution-subscribe.xml.h:3
msgid "Refresh List"
msgstr "Rifresko Listën"
-#: ../ui/evolution-subscribe.xml.h:4
+#: ui/evolution-subscribe.xml.h:4
msgid "Refresh List of Folders"
msgstr "Rifresko Listën e Kartelave"
-#: ../ui/evolution-subscribe.xml.h:5
+#: ui/evolution-subscribe.xml.h:5
msgid "Remove folder from your list of subscribed folders"
msgstr "Hiqe kartelën nga lista juaj e kartelave të regjistruara"
-#: ../ui/evolution-subscribe.xml.h:7
+#: ui/evolution-subscribe.xml.h:7
msgid "Subscribe"
msgstr "Regjistrimi"
-#: ../ui/evolution-subscribe.xml.h:8
+#: ui/evolution-subscribe.xml.h:8
msgid "Unsubscribe"
msgstr "Ç'regjistrohu"
-#: ../ui/evolution-tasks.xml.h:3
+#: ui/evolution-tasks.xml.h:3
msgid "Copy selected task"
msgstr "Kopjo aktivitetin e zgjedhur"
-#: ../ui/evolution-tasks.xml.h:5
+#: ui/evolution-tasks.xml.h:5
msgid "Cut selected task"
msgstr "Preje aktivitetin e zgjedhur"
-#: ../ui/evolution-tasks.xml.h:7
+#: ui/evolution-tasks.xml.h:7
msgid "Delete completed tasks"
msgstr "Elemino aktivitetet e plotësuar"
-#: ../ui/evolution-tasks.xml.h:8
+#: ui/evolution-tasks.xml.h:8
msgid "Delete selected tasks"
msgstr "Elemino aktivitetet e zgjedhur"
-#: ../ui/evolution-tasks.xml.h:9
+#: ui/evolution-tasks.xml.h:9
msgid "Mar_k as Complete"
msgstr "Shë_no si të Plotësuar"
-#: ../ui/evolution-tasks.xml.h:10
+#: ui/evolution-tasks.xml.h:10
msgid "Mark selected tasks as complete"
msgstr "Shëno aktivitetet e zgjedhura si të plotësuara"
-#: ../ui/evolution-tasks.xml.h:12
+#: ui/evolution-tasks.xml.h:12
msgid "Paste task from the clipboard"
msgstr "Ngjit aktivitete nga shënimet"
-#: ../ui/evolution-tasks.xml.h:13
+#: ui/evolution-tasks.xml.h:13
msgid "Previews the list of tasks to be printed"
msgstr "Pamja e parë e listës së aktiviteteve që duhet printuar"
-#: ../ui/evolution-tasks.xml.h:16
+#: ui/evolution-tasks.xml.h:16
msgid "Print the list of tasks"
msgstr "Printo listën e aktiviteteve"
-#: ../ui/evolution-tasks.xml.h:18
+#: ui/evolution-tasks.xml.h:18
msgid "View the selected task"
msgstr "Shiko aktivitetin e zgjedhur"
-#: ../ui/evolution-tasks.xml.h:23
+#: ui/evolution-tasks.xml.h:23
msgid "_Open Task"
msgstr "_Hap Aktivitetin"
-#: ../ui/evolution.xml.h:1
+#: ui/evolution.xml.h:1
msgid "About Evolution..."
msgstr "Informacione mbi Evolution..."
-#: ../ui/evolution.xml.h:2
+#: ui/evolution.xml.h:2
msgid "Change Evolution's settings"
msgstr "Ndrysho rregullimet e Evolution"
-#: ../ui/evolution.xml.h:3
+#: ui/evolution.xml.h:3
msgid "Change the visibility of the toolbar"
msgstr "Ndrysho dukshmërinë e panelit të instrumentëve"
-#: ../ui/evolution.xml.h:6
+#: ui/evolution.xml.h:6
msgid "Create a new window displaying this folder"
msgstr "Krijo një dritare të re për të shfaqur këtë kartelë"
-#: ../ui/evolution.xml.h:7
+#: ui/evolution.xml.h:7
msgid "Display window buttons using the desktop toolbar setting"
-msgstr "Vizato pulsantët e dritares duke përdorur rregullimet e desktop për panelin e instrumentëve"
+msgstr ""
+"Vizato pulsantët e dritares duke përdorur rregullimet e desktop për panelin "
+"e instrumentëve"
-#: ../ui/evolution.xml.h:8
+#: ui/evolution.xml.h:8
msgid "Display window buttons with icons and text"
msgstr "Shfaq pulsantët e dritares me ikona dhe tekst"
-#: ../ui/evolution.xml.h:9
+#: ui/evolution.xml.h:9
msgid "Display window buttons with icons only"
msgstr "Shfaq pulsantët e dritares vetëm me ikona"
-#: ../ui/evolution.xml.h:10
+#: ui/evolution.xml.h:10
msgid "Display window buttons with text only"
msgstr "Shfaq pulsantët e dritares vetëm me tekst"
-#: ../ui/evolution.xml.h:11
+#: ui/evolution.xml.h:11
msgid "E_xit"
msgstr "D_alja"
-#: ../ui/evolution.xml.h:12
+#: ui/evolution.xml.h:12
msgid "Evolution _FAQ"
msgstr "_FAQ të Evolution"
-#: ../ui/evolution.xml.h:13
+#: ui/evolution.xml.h:13
msgid "Exit the program"
msgstr "Mbyll programin"
-#: ../ui/evolution.xml.h:14
+#: ui/evolution.xml.h:14
msgid "Forget _Passwords"
msgstr "Harro _Fjalëkalimet"
-#: ../ui/evolution.xml.h:15
+#: ui/evolution.xml.h:15
msgid "Forget remembered passwords so you will be prompted for them again"
msgstr "Harro fjalëkalimet në kujtesë në menyrë që t'ju kërkohen përsëri të rejat"
-#: ../ui/evolution.xml.h:16
+#: ui/evolution.xml.h:16
msgid "Hide window buttons"
msgstr "Fshih pulsantët e dritares"
-#: ../ui/evolution.xml.h:17
+#: ui/evolution.xml.h:17
msgid "Icons _and text"
msgstr "Ikona _dhe tekst"
-#: ../ui/evolution.xml.h:18
+#: ui/evolution.xml.h:18
msgid "Import data from other programs"
msgstr "Importo të dhëna nga programe të tjerë"
-#: ../ui/evolution.xml.h:20
+#: ui/evolution.xml.h:20
msgid "New _Window"
msgstr "_Dritare e Re"
-#: ../ui/evolution.xml.h:21
+#: ui/evolution.xml.h:21
msgid "Pi_lot Settings..."
msgstr "Rregullimet e Pi_lot-it..."
-#: ../ui/evolution.xml.h:22
+#: ui/evolution.xml.h:22
msgid "Prefere_nces"
msgstr "Preferi_met"
-#: ../ui/evolution.xml.h:23
+#: ui/evolution.xml.h:23
msgid "Send / Receive"
msgstr "Dërgo / Merr"
-#: ../ui/evolution.xml.h:24
+#: ui/evolution.xml.h:24
msgid "Send queued items and retrieve new items"
msgstr "Dërgo elementët në pritje dhe tërhiq elementët e rinj"
-#: ../ui/evolution.xml.h:25
+#: ui/evolution.xml.h:25
msgid "Set up Pilot configuration"
msgstr "Vendos konfigurimin e Pilot-it"
-#: ../ui/evolution.xml.h:26
+#: ui/evolution.xml.h:26
msgid "Show information about Evolution"
msgstr "Shfaq informacionet në lidhje me Evolution"
-#: ../ui/evolution.xml.h:27
+#: ui/evolution.xml.h:27
msgid "Submit Bug Report"
msgstr "Dërgo një Raport Difekti"
-#: ../ui/evolution.xml.h:28
+#: ui/evolution.xml.h:28
msgid "Submit _Bug Report"
msgstr "Dërgo një Raport _Difekti"
-#: ../ui/evolution.xml.h:29
+#: ui/evolution.xml.h:29
msgid "Submit a bug report using Bug Buddy"
msgstr "Njofto një mosfunksionim duke përdorur Bug Buddy"
-#: ../ui/evolution.xml.h:30
+#: ui/evolution.xml.h:30
msgid "Toggle whether we are working offline."
msgstr "Ndrysho menyrën e funksionimit (lidhur apo shkëputur)."
-#: ../ui/evolution.xml.h:31
+#: ui/evolution.xml.h:31
msgid "Tool_bar"
msgstr "Paneli i _instrumentëve"
-#: ../ui/evolution.xml.h:32
+#: ui/evolution.xml.h:32
msgid "Tool_bar style"
msgstr "Stili i panelit të _instrumentëve"
-#: ../ui/evolution.xml.h:33
+#: ui/evolution.xml.h:33
msgid "Window B_uttons"
msgstr "B_utonat e dritares"
-#: ../ui/evolution.xml.h:35
+#: ui/evolution.xml.h:35
msgid "_About Evolution..."
msgstr "_Informacione mbi Evolution..."
-#: ../ui/evolution.xml.h:40
+#: ui/evolution.xml.h:40
msgid "_Help"
msgstr "_Ndihmë"
-#: ../ui/evolution.xml.h:41
+#: ui/evolution.xml.h:41
msgid "_Hide buttons"
msgstr "_Fshih pulsantët"
-#: ../ui/evolution.xml.h:42
+#: ui/evolution.xml.h:42
msgid "_Icons only"
msgstr "Vetëm _Ikona"
-#: ../ui/evolution.xml.h:43
+#: ui/evolution.xml.h:43
msgid "_Import..."
msgstr "_Importim..."
-#: ../ui/evolution.xml.h:44
+#: ui/evolution.xml.h:44
msgid "_New"
msgstr "_E re"
-#: ../ui/evolution.xml.h:45
+#: ui/evolution.xml.h:45
msgid "_Quick Reference"
msgstr "Preferimet e _shpejta"
-#: ../ui/evolution.xml.h:46
+#: ui/evolution.xml.h:46
msgid "_Send / Receive"
msgstr "_Dërgo / Merr"
-#: ../ui/evolution.xml.h:47
+#: ui/evolution.xml.h:47
msgid "_Text only"
msgstr "Vetëm _Tekst"
-#: ../ui/evolution.xml.h:50
+#: ui/evolution.xml.h:50
msgid "_Window"
msgstr "_Dritare"
-#: ../views/addressbook/galview.xml.h:1
+#: views/addressbook/galview.xml.h:1
msgid "By _Company"
msgstr "Sipas _Shoqërisë"
-#: ../views/addressbook/galview.xml.h:2
+#: views/addressbook/galview.xml.h:2
msgid "_Address Cards"
msgstr "Card-at e _Adresave"
-#: ../views/addressbook/galview.xml.h:3
+#: views/addressbook/galview.xml.h:3
msgid "_Phone List"
msgstr "_Rubrika telefonike"
-#: ../views/calendar/galview.xml.h:1
+#: views/calendar/galview.xml.h:1
msgid "W_eek View"
msgstr "Paraqitja Javor_e"
-#: ../views/calendar/galview.xml.h:2
+#: views/calendar/galview.xml.h:2
msgid "_Day View"
msgstr "Paraqitja _Ditore"
-#: ../views/calendar/galview.xml.h:3
+#: views/calendar/galview.xml.h:3
msgid "_List View"
msgstr "Paraqitja si _Listë"
-#: ../views/calendar/galview.xml.h:4
+#: views/calendar/galview.xml.h:4
msgid "_Month View"
msgstr "Paraqitja _Mujore"
-#: ../views/calendar/galview.xml.h:5
+#: views/calendar/galview.xml.h:5
msgid "_Work Week View"
msgstr "Paraqitja Java _Punuese"
-#: ../views/mail/galview.xml.h:1
+#: views/mail/galview.xml.h:1
msgid "As _Sent Folder"
msgstr "Si Kartela _të dërguar"
-#: ../views/mail/galview.xml.h:2
+#: views/mail/galview.xml.h:2
msgid "By S_tatus"
msgstr "Sipas Gj_endjes"
-#: ../views/mail/galview.xml.h:3
+#: views/mail/galview.xml.h:3
msgid "By Se_nder"
msgstr "Sipas Dër_guesit"
-#: ../views/mail/galview.xml.h:4
+#: views/mail/galview.xml.h:4
msgid "By Su_bject"
msgstr "Sipas Su_bjektit"
-#: ../views/mail/galview.xml.h:5
+#: views/mail/galview.xml.h:5
msgid "By _Follow Up Flag"
msgstr "Sipas shënimit si në _vazhdim"
-#: ../views/mail/galview.xml.h:6
+#: views/mail/galview.xml.h:6
msgid "_Messages"
msgstr "_Mesazhet"
-#: ../views/tasks/galview.xml.h:1
+#: views/tasks/galview.xml.h:1
msgid "With _Due Date"
msgstr "Me _Skadim"
-#: ../views/tasks/galview.xml.h:2
+#: views/tasks/galview.xml.h:2
msgid "With _Status"
msgstr "Me _Gjendje"
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.c:195
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.c:637
+#: widgets/e-timezone-dialog/e-timezone-dialog.c:195
+#: widgets/e-timezone-dialog/e-timezone-dialog.c:637
msgid "UTC"
msgstr "UTC"
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:2
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:2
msgid "<b>Time Zones</b>"
msgstr "<b>Zona e orarit</b>"
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:3
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:3
msgid "<b>_Selection</b>"
msgstr "<b>_Zgjedhja</b>"
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:5
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:5
msgid "Select a Time Zone"
msgstr "Zgjidh zonën e orarit"
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:6
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:6
msgid "TimeZone Combobox"
msgstr "Kutia e kombinuar e zonës orare"
-#: ../widgets/e-timezone-dialog/e-timezone-dialog.glade.h:7
+#: widgets/e-timezone-dialog/e-timezone-dialog.glade.h:7
msgid ""
"Use the left mouse button to zoom in on an area of the map and select a time "
"zone.\n"
@@ -17650,203 +17570,202 @@ msgstr ""
"zgjidh zonën e orarit.\n"
"Përdor butonin e djathtë për të zvogëluar zonën e hartës."
-#: ../widgets/menus/gal-view-menus.c:292
+#: widgets/menus/gal-view-menus.c:292
msgid "_Current View"
msgstr "_Paraqitja aktuale"
-#: ../widgets/menus/gal-view-menus.c:360
+#: widgets/menus/gal-view-menus.c:360
msgid "Save Custom View..."
msgstr "Ruaj paraqitjes e personalizuar..."
#. 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:415
+#: widgets/misc/e-calendar-item.c:415
msgid "MTWTFSS"
msgstr "HMMEPSD"
#. This is a strftime() format. %B = Month name, %Y = Year.
-#: ../widgets/misc/e-calendar-item.c:1123
+#: widgets/misc/e-calendar-item.c:1123
msgid "%B %Y"
msgstr "%B %Y"
-#: ../widgets/misc/e-calendar.c:177 ../widgets/misc/e-calendar.c:201
+#: widgets/misc/e-calendar.c:177 widgets/misc/e-calendar.c:201
msgid "Previous Button"
msgstr "Pulsanti paraardhës"
-#: ../widgets/misc/e-calendar.c:226
+#: widgets/misc/e-calendar.c:226
msgid "Month Calendar"
msgstr "Kalendari mujor"
-#: ../widgets/misc/e-cell-date-edit.c:232 ../widgets/misc/e-dateedit.c:444
+#: widgets/misc/e-cell-date-edit.c:232 widgets/misc/e-dateedit.c:444
msgid "Now"
msgstr "Tani"
-#: ../widgets/misc/e-cell-date-edit.c:801
+#: widgets/misc/e-cell-date-edit.c:801
#, c-format
msgid "The time must be in the format: %s"
msgstr "Data duhet të jetë e formës: %s"
-#: ../widgets/misc/e-cell-percent.c:76
+#: widgets/misc/e-cell-percent.c:76
msgid "The percent value must be between 0 and 100, inclusive"
msgstr "Vlera në përqindje duhet të jetë midis 0 dhe 100, të përfshirë"
-#: ../widgets/misc/e-charset-picker.c:63
+#: widgets/misc/e-charset-picker.c:63
msgid "Baltic"
msgstr "Balltike"
-#: ../widgets/misc/e-charset-picker.c:64
+#: widgets/misc/e-charset-picker.c:64
msgid "Central European"
msgstr "Europa Qendrore"
-#: ../widgets/misc/e-charset-picker.c:65
+#: widgets/misc/e-charset-picker.c:65
msgid "Chinese"
msgstr "Kineze"
-#: ../widgets/misc/e-charset-picker.c:66
+#: widgets/misc/e-charset-picker.c:66
msgid "Cyrillic"
msgstr "Cyrillic"
-#: ../widgets/misc/e-charset-picker.c:67
+#: widgets/misc/e-charset-picker.c:67
msgid "Greek"
msgstr "Greqisht"
-#: ../widgets/misc/e-charset-picker.c:68
+#: widgets/misc/e-charset-picker.c:68
msgid "Hebrew"
msgstr "Hebraike"
-#: ../widgets/misc/e-charset-picker.c:69
+#: widgets/misc/e-charset-picker.c:69
msgid "Japanese"
msgstr "Japonisht"
-#: ../widgets/misc/e-charset-picker.c:70
+#: widgets/misc/e-charset-picker.c:70
msgid "Korean"
msgstr "Koreane"
-#: ../widgets/misc/e-charset-picker.c:71
+#: widgets/misc/e-charset-picker.c:71
msgid "Turkish"
msgstr "Turqisht"
-#: ../widgets/misc/e-charset-picker.c:72
+#: widgets/misc/e-charset-picker.c:72
msgid "Unicode"
msgstr "Unicode"
-#: ../widgets/misc/e-charset-picker.c:73
+#: widgets/misc/e-charset-picker.c:73
msgid "Western European"
msgstr "Europa perëndimore"
-#: ../widgets/misc/e-charset-picker.c:74
+#: widgets/misc/e-charset-picker.c:74
msgid "Western European, New"
msgstr "Europa Perëndimore, e re"
-#: ../widgets/misc/e-charset-picker.c:91 ../widgets/misc/e-charset-picker.c:92
-#: ../widgets/misc/e-charset-picker.c:93
+#: widgets/misc/e-charset-picker.c:91 widgets/misc/e-charset-picker.c:92
+#: widgets/misc/e-charset-picker.c:93
msgid "Traditional"
msgstr "Tradicionale"
-#: ../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
+#: 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 "I thjeshtuar"
-#: ../widgets/misc/e-charset-picker.c:100
+#: widgets/misc/e-charset-picker.c:100
msgid "Ukrainian"
msgstr "Ukrahinase"
-#: ../widgets/misc/e-charset-picker.c:103
+#: widgets/misc/e-charset-picker.c:103
msgid "Visual"
msgstr "Viazual"
-#: ../widgets/misc/e-charset-picker.c:171
+#: widgets/misc/e-charset-picker.c:171
#, c-format
msgid "Unknown character set: %s"
msgstr "Grup i panjohur gërmash: %s"
-#: ../widgets/misc/e-charset-picker.c:216
-#: ../widgets/misc/e-charset-picker.c:479
+#: widgets/misc/e-charset-picker.c:216 widgets/misc/e-charset-picker.c:479
msgid "Character Encoding"
msgstr "Kodifikimi i gërmave"
-#: ../widgets/misc/e-charset-picker.c:231
+#: widgets/misc/e-charset-picker.c:231
msgid "Enter the character set to use"
msgstr "Shkruaj grupin e gërmave që duhen përdorur"
-#: ../widgets/misc/e-charset-picker.c:338
+#: widgets/misc/e-charset-picker.c:338
msgid "Other..."
msgstr "Tjetër..."
-#: ../widgets/misc/e-clipped-label.c:111
+#: widgets/misc/e-clipped-label.c:111
msgid "..."
msgstr "..."
-#: ../widgets/misc/e-dateedit.c:313
+#: widgets/misc/e-dateedit.c:313
msgid "Date and Time Entry"
msgstr "Shtimi i datës dhe orës"
-#: ../widgets/misc/e-dateedit.c:332
+#: widgets/misc/e-dateedit.c:332
msgid "Text entry to input date"
msgstr "Shtimi i tekstit për dhënien e një date"
-#: ../widgets/misc/e-dateedit.c:333
+#: widgets/misc/e-dateedit.c:333
msgid "Text Date Entry"
msgstr "Shkrimi i tekstit të datës"
-#: ../widgets/misc/e-dateedit.c:350
+#: widgets/misc/e-dateedit.c:350
msgid "Click this button to show a calendar"
msgstr "Kliko këtë pulsant për të shfaqur një kalendar"
-#: ../widgets/misc/e-dateedit.c:351
+#: widgets/misc/e-dateedit.c:351
msgid "Date Button"
msgstr "Pulsanti i datës"
-#: ../widgets/misc/e-dateedit.c:371
+#: widgets/misc/e-dateedit.c:371
msgid "Combo box to select time"
msgstr "Kuti e kombinuar për zgjedhjen e orarit"
-#: ../widgets/misc/e-dateedit.c:372
+#: widgets/misc/e-dateedit.c:372
msgid "Time Combo Box"
msgstr "Kutia e kombinuar e orës"
-#: ../widgets/misc/e-error.c:84 ../widgets/misc/e-error.c:85
-#: ../widgets/misc/e-error.c:127
+#: widgets/misc/e-error.c:84 widgets/misc/e-error.c:85
+#: widgets/misc/e-error.c:127
msgid "Evolution Error"
msgstr "Gabim i Evolution"
-#: ../widgets/misc/e-error.c:86 ../widgets/misc/e-error.c:87
-#: ../widgets/misc/e-error.c:125
+#: widgets/misc/e-error.c:86 widgets/misc/e-error.c:87
+#: widgets/misc/e-error.c:125
msgid "Evolution Warning"
msgstr "Paralajmërime të Evolution"
-#: ../widgets/misc/e-error.c:124
+#: widgets/misc/e-error.c:124
msgid "Evolution Information"
msgstr "Informacion i Evolution"
-#: ../widgets/misc/e-error.c:126
+#: widgets/misc/e-error.c:126
msgid "Evolution Query"
msgstr "Kërkimi në Evolution"
#. setup a dummy error
-#: ../widgets/misc/e-error.c:438
+#: widgets/misc/e-error.c:438
#, c-format
msgid "<span weight=\"bold\">Internal error, unknown error '%s' requested</span>"
msgstr "<span weight=\"bold\">Gabim i brendshëm, gabim i panjohur '%s'</span>"
-#: ../widgets/misc/e-expander.c:181
+#: widgets/misc/e-expander.c:181
msgid "Expanded"
msgstr "Shpalosur"
-#: ../widgets/misc/e-expander.c:182
+#: widgets/misc/e-expander.c:182
msgid "Whether or not the expander is expanded"
msgstr "Nëse zgjeruesi duhet të jetë i shpalosur"
-#: ../widgets/misc/e-expander.c:190
+#: widgets/misc/e-expander.c:190
msgid "Text of the expander's label"
msgstr "Teksti i etiketës së shpalosësit"
-#: ../widgets/misc/e-expander.c:197
+#: widgets/misc/e-expander.c:197
msgid "Use underline"
msgstr "Përdor nënvijë"
-#: ../widgets/misc/e-expander.c:198
+#: 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"
@@ -17854,173 +17773,173 @@ msgstr ""
"Nëse vihet, një nënvijë në tekst tregon që gërma pasuese duhet përdorur si "
"kyç për përshpejtues \"mnemonic\""
-#: ../widgets/misc/e-expander.c:205
+#: widgets/misc/e-expander.c:205
msgid "Spacing"
msgstr "Hapësira e ndërmjetme"
-#: ../widgets/misc/e-expander.c:206
+#: widgets/misc/e-expander.c:206
msgid "Space to put between the label and the child"
msgstr "Hapësira që duhet lënë midis etiketës dhe birit"
-#: ../widgets/misc/e-expander.c:215
+#: widgets/misc/e-expander.c:215
msgid "Label widget"
msgstr "Instrumenti etiketë"
-#: ../widgets/misc/e-expander.c:216
+#: widgets/misc/e-expander.c:216
msgid "A widget to display in place of the usual expander label"
msgstr ""
"Një instrument që do të shfaqet në vend të etiketës së zakonshme të "
"shpalosësit"
-#: ../widgets/misc/e-expander.c:222
+#: widgets/misc/e-expander.c:222
msgid "Expander Size"
msgstr "Madhësia e shpalosësit"
-#: ../widgets/misc/e-expander.c:223
+#: widgets/misc/e-expander.c:223
msgid "Size of the expander arrow"
msgstr "Madhësia e shigjetës së shpalosësit"
-#: ../widgets/misc/e-expander.c:231
+#: widgets/misc/e-expander.c:231
msgid "Indicator Spacing"
msgstr "Hapësira e treguesit"
-#: ../widgets/misc/e-expander.c:232
+#: widgets/misc/e-expander.c:232
msgid "Spacing around expander arrow"
msgstr "Hapësira rreth kutisë së shpalosësit"
-#: ../widgets/misc/e-filter-bar.c:195
+#: widgets/misc/e-filter-bar.c:195
msgid "_Searches"
msgstr "_Kërkimet"
-#: ../widgets/misc/e-filter-bar.c:197
+#: widgets/misc/e-filter-bar.c:197
msgid "Search Editor"
msgstr "Editori i kërkimeve"
#. FIXME: get the toplevel window...
-#: ../widgets/misc/e-filter-bar.c:220
+#: widgets/misc/e-filter-bar.c:220
msgid "Save Search"
msgstr "Ruaj Kërkimin"
-#: ../widgets/misc/e-filter-bar.h:92 ../widgets/misc/e-filter-bar.h:99
+#: widgets/misc/e-filter-bar.h:92 widgets/misc/e-filter-bar.h:99
msgid "_Save Search..."
msgstr "_Ruaj kërkimin..."
-#: ../widgets/misc/e-filter-bar.h:93 ../widgets/misc/e-filter-bar.h:100
+#: widgets/misc/e-filter-bar.h:93 widgets/misc/e-filter-bar.h:100
msgid "_Edit Saved Searches..."
msgstr "_Ndrysho kërkimet e ruajtura..."
-#: ../widgets/misc/e-filter-bar.h:94 ../widgets/misc/e-filter-bar.h:101
+#: widgets/misc/e-filter-bar.h:94 widgets/misc/e-filter-bar.h:101
msgid "_Advanced..."
msgstr "_Të hollësishme..."
-#: ../widgets/misc/e-image-chooser.c:172
+#: widgets/misc/e-image-chooser.c:172
msgid "Choose Image"
msgstr "Zgjidh figurën"
-#: ../widgets/misc/e-map.c:647
+#: widgets/misc/e-map.c:647
msgid "World Map"
msgstr "Harta e botës"
-#: ../widgets/misc/e-map.c:649
+#: widgets/misc/e-map.c:649
msgid ""
"Mouse-based interactive map widget for selecting timezone. Keyboard users "
"should select the timezone from the below combo box instead."
msgstr ""
-"Hartë interaktive bazuar në mouse për zgjedhjen e zonës orare. Përdoruesit që "
-"dëshirojnë të përdorin tastierën për të zgjedhur zonën orare duhet të veprojnë "
-"me anë të quadratit të mëposhtëm."
+"Hartë interaktive bazuar në mouse për zgjedhjen e zonës orare. Përdoruesit "
+"që dëshirojnë të përdorin tastierën për të zgjedhur zonën orare duhet të "
+"veprojnë me anë të quadratit të mëposhtëm."
-#: ../widgets/misc/e-pilot-settings.c:103
+#: widgets/misc/e-pilot-settings.c:103
msgid "Sync with:"
msgstr "Sink me:"
-#: ../widgets/misc/e-pilot-settings.c:111
+#: widgets/misc/e-pilot-settings.c:111
msgid "Sync Private Records:"
msgstr "Sinkronizimi i regjistrimeve private:"
-#: ../widgets/misc/e-pilot-settings.c:120
+#: widgets/misc/e-pilot-settings.c:120
msgid "Sync Categories:"
msgstr "Sinkronizimi i kategorive:"
#. To translators: This is the accessibility name of
#. the search bar's text entry widget
-#: ../widgets/misc/e-search-bar.c:343
+#: widgets/misc/e-search-bar.c:343
msgid "Search Text Entry"
msgstr "Shkrimi i tekstit që duhet kërkuar"
-#: ../widgets/misc/e-search-bar.c:547
+#: widgets/misc/e-search-bar.c:547
msgid "_Search"
msgstr "_Kërko"
-#: ../widgets/misc/e-search-bar.c:553
+#: widgets/misc/e-search-bar.c:553
msgid "_Find Now"
msgstr "_Gjej tani"
-#: ../widgets/misc/e-search-bar.c:554 ../widgets/misc/e-search-bar.c:941
+#: widgets/misc/e-search-bar.c:554 widgets/misc/e-search-bar.c:941
msgid "_Clear"
msgstr "_Pastro"
-#: ../widgets/misc/e-search-bar.c:645
+#: widgets/misc/e-search-bar.c:645
msgid "Search Type"
msgstr "Lloji i kërkimit"
-#: ../widgets/misc/e-search-bar.c:849
+#: widgets/misc/e-search-bar.c:849
msgid "Item ID"
msgstr "ID e elementit"
-#: ../widgets/misc/e-search-bar.c:856
+#: widgets/misc/e-search-bar.c:856
msgid "Subitem ID"
msgstr "ID e nënelementit"
-#: ../widgets/misc/e-search-bar.c:863
+#: widgets/misc/e-search-bar.c:863
msgid "Text"
msgstr "Teksti"
-#: ../widgets/misc/e-search-bar.c:943
+#: widgets/misc/e-search-bar.c:943
msgid "Find _Now"
msgstr "Gjej _Tani"
-#: ../widgets/misc/e-send-options.c:505
+#: widgets/misc/e-send-options.c:505
msgid "When de_leted:"
msgstr "Kur është e_leminuar:"
-#: ../widgets/misc/e-send-options.glade.h:1
+#: widgets/misc/e-send-options.glade.h:1
msgid "<b>Delivery Options</b>"
msgstr "<b>Dërgo opcionet</b>"
-#: ../widgets/misc/e-send-options.glade.h:2
+#: widgets/misc/e-send-options.glade.h:2
msgid "<b>Replies</b>"
msgstr "<b>Përgjigju</b>"
-#: ../widgets/misc/e-send-options.glade.h:3
+#: widgets/misc/e-send-options.glade.h:3
msgid "<b>Return Notification</b>"
msgstr "<b>Rikthe njoftimin</b>"
-#: ../widgets/misc/e-send-options.glade.h:4
+#: widgets/misc/e-send-options.glade.h:4
msgid "<b>Status Tracking</b>"
msgstr "<b>Kontrolli i gjendjes</b>"
-#: ../widgets/misc/e-send-options.glade.h:5
+#: widgets/misc/e-send-options.glade.h:5
msgid "A_uto-delete sent item"
msgstr "A_uto elemino elementët e dërguar"
-#: ../widgets/misc/e-send-options.glade.h:6
+#: widgets/misc/e-send-options.glade.h:6
msgid "C_lassification"
msgstr "K_lasifikimi"
-#: ../widgets/misc/e-send-options.glade.h:7
+#: widgets/misc/e-send-options.glade.h:7
msgid "Creat_e a sent item to track information"
msgstr "Krijo një _element dërgimi për të gjurmuar informacionet"
-#: ../widgets/misc/e-send-options.glade.h:8
+#: widgets/misc/e-send-options.glade.h:8
msgid "Deli_vered and opened"
msgstr "Dër_guar dhe hapur"
-#: ../widgets/misc/e-send-options.glade.h:9
+#: widgets/misc/e-send-options.glade.h:9
msgid "Gene_ral Options"
msgstr "Opcionet e pë_rgjithshme"
-#: ../widgets/misc/e-send-options.glade.h:10
+#: widgets/misc/e-send-options.glade.h:10
msgid ""
"None\n"
"Mail Receipt"
@@ -18028,7 +17947,7 @@ msgstr ""
"Asnjë\n"
"Ricevutë leximi"
-#: ../widgets/misc/e-send-options.glade.h:12
+#: widgets/misc/e-send-options.glade.h:12
msgid ""
"None\n"
"Mail Receipt\n"
@@ -18036,7 +17955,7 @@ msgstr ""
"Asnjë\n"
"Ricevutë leximi\n"
-#: ../widgets/misc/e-send-options.glade.h:15
+#: widgets/misc/e-send-options.glade.h:15
msgid ""
"Public\n"
"Private\n"
@@ -18046,15 +17965,15 @@ msgstr ""
"Private\n"
"Në konfidencë\n"
-#: ../widgets/misc/e-send-options.glade.h:19
+#: widgets/misc/e-send-options.glade.h:19
msgid "R_eply requested"
msgstr "Kërk_esë përgjigje"
-#: ../widgets/misc/e-send-options.glade.h:21
+#: widgets/misc/e-send-options.glade.h:21
msgid "Sta_tus Tracking"
msgstr "Gjurm_imi i gjendjes"
-#: ../widgets/misc/e-send-options.glade.h:22
+#: widgets/misc/e-send-options.glade.h:22
msgid ""
"Undefined\n"
"High\n"
@@ -18066,85 +17985,85 @@ msgstr ""
"Standart\n"
"I ulët"
-#: ../widgets/misc/e-send-options.glade.h:26
+#: widgets/misc/e-send-options.glade.h:26
msgid "W_ithin"
msgstr "B_renda"
-#: ../widgets/misc/e-send-options.glade.h:27
+#: widgets/misc/e-send-options.glade.h:27
msgid "When acce_pted: "
msgstr "Kur _pranohet: "
-#: ../widgets/misc/e-send-options.glade.h:28
+#: widgets/misc/e-send-options.glade.h:28
msgid "When co_mpleted:"
msgstr "Kur plotës_ohet:"
-#: ../widgets/misc/e-send-options.glade.h:29
+#: widgets/misc/e-send-options.glade.h:29
msgid "When decli_ned: "
msgstr "Kur refu_zohet: "
-#: ../widgets/misc/e-send-options.glade.h:30
+#: widgets/misc/e-send-options.glade.h:30
msgid "_After:"
msgstr "_Mbas:"
-#: ../widgets/misc/e-send-options.glade.h:31
+#: widgets/misc/e-send-options.glade.h:31
msgid "_All information"
msgstr "_Të gjitha informacionet"
-#: ../widgets/misc/e-send-options.glade.h:32
+#: widgets/misc/e-send-options.glade.h:32
msgid "_Delay message delivery"
msgstr "_Vono dorëzimin e mesazhit"
-#: ../widgets/misc/e-send-options.glade.h:33
+#: widgets/misc/e-send-options.glade.h:33
msgid "_Delivered"
msgstr "_Dërguar"
-#: ../widgets/misc/e-send-options.glade.h:35
+#: widgets/misc/e-send-options.glade.h:35
msgid "_Set expiration date"
msgstr "_Cakto datën e skadimit"
-#: ../widgets/misc/e-send-options.glade.h:36
+#: widgets/misc/e-send-options.glade.h:36
msgid "_Until:"
msgstr "_Deri më:"
-#: ../widgets/misc/e-send-options.glade.h:37
+#: widgets/misc/e-send-options.glade.h:37
msgid "_When convenient"
msgstr "_Kur ja vlen"
-#: ../widgets/misc/e-send-options.glade.h:38
+#: widgets/misc/e-send-options.glade.h:38
msgid "_When opened: "
msgstr "_Kur hapet: "
#. system:ask-save-file-exists-overwrite primary
-#: ../widgets/misc/e-system-errors.xml.h:4
+#: widgets/misc/e-system-errors.xml.h:4
msgid "File exists \"{0}\"."
msgstr "File ekziston \"{0}\"."
#. system:ask-save-file-exists-overwrite secondary
-#: ../widgets/misc/e-system-errors.xml.h:6
+#: widgets/misc/e-system-errors.xml.h:6
msgid "Do you wish to overwrite it?"
msgstr "Dëshiron t'a mbishkruash?"
#. system:no-save-file primary
-#: ../widgets/misc/e-system-errors.xml.h:9
+#: widgets/misc/e-system-errors.xml.h:9
msgid "Cannot save file \"{0}\"."
msgstr "E pamundur ruajtja e file \"{0}\"."
#. system:no-load-file primary
-#: ../widgets/misc/e-system-errors.xml.h:13
+#: widgets/misc/e-system-errors.xml.h:13
msgid "Cannot open file \"{0}\"."
msgstr "E pamundur hapja e file \"{0}\"."
-#: ../widgets/misc/e-task-widget.c:208
+#: widgets/misc/e-task-widget.c:208
#, c-format
msgid "%s (...)"
msgstr "%s (...)"
-#: ../widgets/misc/e-task-widget.c:213
+#: widgets/misc/e-task-widget.c:213
#, c-format
msgid "%s (%d%% complete)"
msgstr "%s (%d%% plotësuar)"
-#: ../widgets/misc/e-url-entry.c:107
+#: widgets/misc/e-url-entry.c:107
msgid "click here to go to url"
msgstr "kliko këtu për të shkuar tek url"
diff --git a/po/sr.po b/po/sr.po
index fbbcdcf1af..05131e1c36 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -5,17 +5,16 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: evolution 2.0\n"
+"Project-Id-Version: evolution\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-03-05 08:58+0100\n"
-"PO-Revision-Date: 2005-03-05 08:53+0100\n"
+"POT-Creation-Date: 2005-03-05 09:22+0100\n"
+"PO-Revision-Date: 2005-03-05 09:22+0100\n"
"Last-Translator: Игор ÐеÑторовић <jung@one.ekof.bg.ac.yu>\n"
"Language-Team: Serbian (sr) <gnom@prevod.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: a11y/addressbook/ea-addressbook-view.c:94
#: a11y/addressbook/ea-addressbook-view.c:103
diff --git a/po/sr@Latn.po b/po/sr@Latn.po
index 797cbebf2c..caf19d95cf 100644
--- a/po/sr@Latn.po
+++ b/po/sr@Latn.po
@@ -5,17 +5,16 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: evolution 2.0\n"
+"Project-Id-Version: evolution\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-03-05 08:58+0100\n"
-"PO-Revision-Date: 2005-03-05 08:53+0100\n"
+"POT-Creation-Date: 2005-03-05 09:22+0100\n"
+"PO-Revision-Date: 2005-03-05 09:22+0100\n"
"Last-Translator: Igor Nestorović <jung@one.ekof.bg.ac.yu>\n"
"Language-Team: Serbian (sr) <gnom@prevod.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: a11y/addressbook/ea-addressbook-view.c:94
#: a11y/addressbook/ea-addressbook-view.c:103
diff --git a/po/vi.po b/po/vi.po
index 02d6b35746..94335174e3 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,19 +1,21 @@
+# translation of vi.po to
# Copyright (C) 2002 Free Software Foundattion, Inc.
# This file is distributed under the same license as the evolution package.
-# pclouds <pclouds@gmx.net>, 2002-2004.
+# pclouds <pclouds@gmx.net>, 2002-2004, 2005.
#
msgid ""
msgstr ""
-"Project-Id-Version: evolution VERSION\n"
+"Project-Id-Version: vi\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-08-13 14:55-0400\n"
-"PO-Revision-Date: 2004-10-10 18:54+0700\n"
-"Last-Translator: pclouds <pclouds@vnlinux.org>\n"
-"Language-Team: GnomeVI <gnomevi-list@lists.sourceforge.net>\n"
+"PO-Revision-Date: 2005-03-05 02:42+0700\n"
+"Last-Translator: \n"
+"Language-Team: <en@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.9.1\n"
#: a11y/addressbook/ea-addressbook-view.c:94
#: a11y/addressbook/ea-addressbook-view.c:103
@@ -215,8 +217,7 @@ msgstr "Sổ địa chỉ evolution kết thúc bất ngá»."
#. addressbook:backend-died secondary
#: addressbook/addressbook-errors.xml.h:55
-msgid ""
-"Your contacts for {0} will not be available until Evolution is restarted."
+msgid "Your contacts for {0} will not be available until Evolution is restarted."
msgstr ""
"Liên lạc cho {0} của bạn không thể sử dụng cho tới khi khởi động lại "
"Evolution."
@@ -576,8 +577,7 @@ msgid "Email address"
msgstr "Äịa chỉ email"
#: addressbook/gui/component/ldap-config.glade.h:21
-msgid ""
-"Evolution will use this email address to authenticate you with the server."
+msgid "Evolution will use this email address to authenticate you with the server."
msgstr "Evolution dùng địa chỉ email này để xác thực bạn với máy chủ."
#: addressbook/gui/component/ldap-config.glade.h:22
@@ -3441,20 +3441,16 @@ msgid "Export in asynchronous mode "
msgstr "Xuất theo chế độ không đồng bộ "
#: addressbook/tools/evolution-addressbook-export.c:63
-msgid ""
-"The number of cards in one output file in asychronous mode,default size 100."
-msgstr ""
-"Số card trong tập tin kết xuất trong chế độ không đồng bộ, mặc định là 100."
+msgid "The number of cards in one output file in asychronous mode,default size 100."
+msgstr "Số card trong tập tin kết xuất trong chế độ không đồng bộ, mặc định là 100."
#: addressbook/tools/evolution-addressbook-export.c:63
msgid "NUMBER"
msgstr "Sá»"
#: addressbook/tools/evolution-addressbook-export.c:91
-msgid ""
-"Command line arguments error, please use --help option to see the usage."
-msgstr ""
-"Lá»—i tham số dòng lệnh, vui lòng dùng tùy chá»n --help để xem cách sá»­ dụng."
+msgid "Command line arguments error, please use --help option to see the usage."
+msgstr "Lá»—i tham số dòng lệnh, vui lòng dùng tùy chá»n --help để xem cách sá»­ dụng."
#: addressbook/tools/evolution-addressbook-export.c:105
msgid "Only support csv or vcard format."
@@ -3522,8 +3518,7 @@ msgstr "Bạn có chắc muốn xóa cuá»™c há»p này không?"
#. 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."
+msgid "All information on this meeting will be deleted and can not be restored."
msgstr "Má»i thông tin của cuá»™c há»p này sẽ bị xóa và không thể được phục hồi."
#. calendar:prompt-cancel-task secondary
@@ -3572,8 +3567,7 @@ msgstr "Bạn có chắc muốn xóa mục nhật ký này không?"
msgid ""
"All information on this journal entry will be deleted and can not be "
"restored."
-msgstr ""
-"Má»i thông tin của mục nhật ký này sẽ bị xóa và không thể được phục hồi."
+msgstr "Má»i thông tin của mục nhật ký này sẽ bị xóa và không thể được phục hồi."
#. calendar:prompt-delete-titled-appointment primary
#: calendar/calendar-errors.xml.h:32
@@ -3583,8 +3577,7 @@ msgstr "Bạn có chắc muốn xóa cuộc hẹn tên `{0}' không?"
#. 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."
+msgid "All information on this appointment will be deleted and can not be restored."
msgstr "Má»i thông tin của cuá»™c hẹn này sẽ bị xóa và không thể được phục hồi."
#. calendar:prompt-delete-appointment primary
@@ -3605,8 +3598,7 @@ msgstr "Bạn có chắc muốn xóa mục nhật ký `{0}' không?"
#. 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."
+msgid "All information in this journal will be deleted and can not be restored."
msgstr "Má»i thông tin của nhật ký này sẽ bị xóa và không thể được phục hồi."
#. calendar:prompt-delete-appointments primary
@@ -3619,8 +3611,7 @@ msgstr "Bạn có chắc muốn xóa {0} cuộc hẹn này không?"
msgid ""
"All information on these appointments will be deleted and can not be "
"restored."
-msgstr ""
-"Má»i thông tin của những cuá»™c hẹn này sẽ bị xóa và không thể được phục hồi."
+msgstr "Má»i thông tin của những cuá»™c hẹn này sẽ bị xóa và không thể được phục hồi."
#. calendar:prompt-delete-tasks primary
#: calendar/calendar-errors.xml.h:60
@@ -3630,8 +3621,7 @@ msgstr "Bạn có chắc muốn xóa {0} công việc này không?"
#. 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 ""
-"Má»i thông tin của những công việc này sẽ bị xóa và không thể được phục hồi."
+msgstr "Má»i thông tin của những công việc này sẽ bị xóa và không thể được phục hồi."
#. calendar:prompt-delete-journals primary
#: calendar/calendar-errors.xml.h:64
@@ -3643,8 +3633,7 @@ msgstr "Bạn có chắc muốn xóa {0} mục nhật ký này không?"
msgid ""
"All information in these journal entries will be deleted and can not be "
"restored."
-msgstr ""
-"Má»i thông tin của những mục nhật ký này sẽ bị xóa và không thể được phục hồi."
+msgstr "Má»i thông tin của những mục nhật ký này sẽ bị xóa và không thể được phục hồi."
#. calendar:prompt-save-appointment title
#: calendar/calendar-errors.xml.h:68
@@ -3692,8 +3681,7 @@ msgstr "Bạn có muốn gá»­i lá»i má»i há»p đến những ngÆ°á»i tham dá
#. 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."
+msgid "Email invitations will be sent to all participants and allow them to RSVP."
msgstr "Email má»i dá»± sẽ được gá»­i cho má»i ngÆ°á»i tham dá»± và cho phép há» RSVP."
#: calendar/calendar-errors.xml.h:88 calendar/calendar-errors.xml.h:94
@@ -3714,8 +3702,7 @@ msgstr ""
msgid ""
"Sending updated information allows other participants to keep their "
"calendars up to date."
-msgstr ""
-"Gá»­i thông tin cập nhật cho phép những ngÆ°á»i khác cập nhật lại lịch của há»."
+msgstr "Gá»­i thông tin cập nhật cho phép những ngÆ°á»i khác cập nhật lại lịch của há»."
#. calendar:prompt-send-task primary
#: calendar/calendar-errors.xml.h:96
@@ -3767,8 +3754,7 @@ msgstr "Lịch Evolution kết thúc bất ngá»."
#. calendar:calendar-crashed secondary
#: calendar/calendar-errors.xml.h:114
msgid "Your calendars will not be available until Evolution is restarted."
-msgstr ""
-"Các lịch của bạn sẽ không sẵn sàng cho đến khi bạn khởi động lại Evolution."
+msgstr "Các lịch của bạn sẽ không sẵn sàng cho đến khi bạn khởi động lại Evolution."
#: calendar/common/authentication.c:48 calendar/gui/e-pub-utils.c:301
#: smime/gui/component.c:48
@@ -4141,7 +4127,6 @@ msgstr ""
"Nếu bạn tiếp tục, bạn sẽ không thể phục hồi những công việc này."
#: calendar/gui/calendar-commands.c:358
-#, fuzzy
msgid "Purge events older than"
msgstr "Xóa sự kiện trước"
@@ -5277,8 +5262,7 @@ msgid "You are modifying a recurring task, what would you like to modify?"
msgstr "Bạn đang thay đổi công việc lặp, bạn muốn thay đổi cái nào?"
#: calendar/gui/dialogs/recur-comp.c:59
-msgid ""
-"You are modifying a recurring journal entry, what would you like to modify?"
+msgid "You are modifying a recurring journal entry, what would you like to modify?"
msgstr "Bạn đang thay đổi mục nhật ký lặp, bạn muốn thay đổi cái nào?"
#: calendar/gui/dialogs/recur-comp.c:85
@@ -6181,8 +6165,7 @@ msgstr "NgÆ°á»i lạ"
msgid ""
"<br> Please review the following information, and then select an action from "
"the menu below."
-msgstr ""
-"<br> Vui lòng xem lại các chỉ dẫn sau và chá»n má»™t hành Ä‘á»™ng từ menu bên dÆ°á»›i."
+msgstr "<br> Vui lòng xem lại các chỉ dẫn sau và chá»n má»™t hành Ä‘á»™ng từ menu bên dÆ°á»›i."
#: calendar/gui/e-itip-control.c:967
msgid "Location:"
@@ -6249,14 +6232,11 @@ msgstr "Gửi thông tin mới nhất"
msgid ""
"The meeting has been cancelled, however it could not be found in your "
"calendars"
-msgstr ""
-"Cuá»™c há»p đã bị hủy tuy nhiên không tìm thấy cuá»™c há»p trong lịch của bạn."
+msgstr "Cuá»™c há»p đã bị hủy tuy nhiên không tìm thấy cuá»™c há»p trong lịch của bạn."
#: calendar/gui/e-itip-control.c:1146
-msgid ""
-"The task has been cancelled, however it could not be found in your task lists"
-msgstr ""
-"Công việc đã bị hủy tuy nhiên không tìm thấy cuá»™c há»p trong lịch của bạn."
+msgid "The task has been cancelled, however it could not be found in your task lists"
+msgstr "Công việc đã bị hủy tuy nhiên không tìm thấy cuá»™c há»p trong lịch của bạn."
#: 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
@@ -6459,8 +6439,7 @@ msgstr ""
#: calendar/gui/e-itip-control.c:1879
msgid "Attendee status could not be updated because of an invalid status!\n"
-msgstr ""
-"Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
+msgstr "Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
#: calendar/gui/e-itip-control.c:1896
msgid "Attendee status updated\n"
@@ -6468,8 +6447,7 @@ msgstr "Äã cập nhật trạng thái ngÆ°á»i tham dá»±\n"
#: calendar/gui/e-itip-control.c:1899
msgid "Attendee status can not be updated because the item no longer exists"
-msgstr ""
-"Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì chÆ°a có ngÆ°á»i nào tham dá»±"
+msgstr "Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì chÆ°a có ngÆ°á»i nào tham dá»±"
#: calendar/gui/e-itip-control.c:1926
msgid "Removal Complete"
@@ -7120,8 +7098,7 @@ msgstr "Thiết lập in"
#: calendar/gui/tasks-component.c:314
#, c-format
msgid "Task List '%s' will be removed. Are you sure you want to continue?"
-msgstr ""
-"Danh sách công việc '%s' sẽ bị loại bá». Bạn có chắc muốn tiếp tục không?"
+msgstr "Danh sách công việc '%s' sẽ bị loại bá». Bạn có chắc muốn tiếp tục không?"
#: calendar/gui/tasks-component.c:372
msgid "New Task List"
@@ -10088,8 +10065,7 @@ msgstr "Kiểm tra tìm thÆ° má»›i trên má»i thÆ° mục"
#: camel/providers/groupwise/camel-groupwise-provider.c:59
msgid "Apply filters to new messages in Inbox on this server"
-msgstr ""
-"Ãp dụng bá»™ lá»c vá»›i những thông Ä‘iệp má»›i trong thÆ° mục INBOX trên máy chủ này"
+msgstr "Ãp dụng bá»™ lá»c vá»›i những thông Ä‘iệp má»›i trong thÆ° mục INBOX trên máy chủ này"
#: camel/providers/groupwise/camel-groupwise-provider.c:61
#: camel/providers/imap/camel-imap-provider.c:66
@@ -10143,8 +10119,7 @@ msgstr "Mật khẩu"
#: 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 ""
-"Tùy chá»n này sẽ kết nối tá»›i máy chủ IMAP bằng mật khẩu thô (không mã hóa)."
+msgstr "Tùy chá»n này sẽ kết nối tá»›i máy chủ IMAP bằng mật khẩu thô (không mã hóa)."
#: camel/providers/groupwise/camel-gw-listener.c:332
#: camel/providers/groupwise/camel-gw-listener.c:362
@@ -10270,8 +10245,7 @@ msgstr ""
#: camel/providers/imap/camel-imap-folder.c:2482
#, c-format
-msgid ""
-"Unexpected server response: Identical UIDs provided for messages %d and %d"
+msgid "Unexpected server response: Identical UIDs provided for messages %d and %d"
msgstr ""
#: camel/providers/imap/camel-imap-folder.c:2658
@@ -10453,8 +10427,7 @@ msgstr "Không có thư mục %s"
#: camel/providers/imap/camel-imap-store.c:2259
#: camel/providers/imap4/camel-imap4-store.c:764
#, c-format
-msgid ""
-"The folder name \"%s\" is invalid because it contains the character \"%c\""
+msgid "The folder name \"%s\" is invalid because it contains the character \"%c\""
msgstr "Tên thư mục \"%s\" không hợp lệ vì chứa ký tự \"%c\""
#: camel/providers/imap/camel-imap-store.c:1939
@@ -10592,10 +10565,8 @@ msgstr "Äể Ä‘á»c và lÆ°u thÆ° trên IMAP server."
#: camel/providers/imap4/camel-imap4-provider.c:72
#, fuzzy
-msgid ""
-"This option will connect to the IMAPv4rev1 server using a plaintext password."
-msgstr ""
-"Tùy chá»n này sẽ kết nối tá»›i IMAP server bằng mật khẩu thô (không mã hóa)."
+msgid "This option will connect to the IMAPv4rev1 server using a plaintext password."
+msgstr "Tùy chá»n này sẽ kết nối tá»›i IMAP server bằng mật khẩu thô (không mã hóa)."
#: camel/providers/imap4/camel-imap4-store.c:257
#, fuzzy, c-format
@@ -10606,10 +10577,8 @@ msgstr "Lỗi kết nối tới IMAP server %s trong chế độ an toàn: %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 ""
-"Không thể kết nối tới POP server %s: Không hỗ trợ cơ chế xác thực yêu cầu."
+msgid "Cannot authenticate to IMAP server %s using the %s authentication mechanism"
+msgstr "Không thể kết nối tới POP server %s: Không hỗ trợ cơ chế xác thực yêu cầu."
#: camel/providers/imap4/camel-imap4-store.c:408
#, c-format
@@ -11330,8 +11299,7 @@ msgid "Unable to save grouplist file for %s: %s"
msgstr "Không thể lưu tập tin danh sách nhóm cho %s: %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)"
+msgid "Show folders in short notation (e.g. c.o.linux rather than comp.os.linux)"
msgstr "Hiện thÆ° mục kiểu ngắn gá»n (v.d. c.o.linux thay vì comp.os.linux)"
#: camel/providers/nntp/camel-nntp-provider.c:45
@@ -11350,8 +11318,7 @@ msgstr "Äây là bá»™ cung cấp Ä‘á»c và gá»­i thÆ° tá»›i các nhóm tin USE
msgid ""
"This option will authenticate with the NNTP server using a plaintext "
"password."
-msgstr ""
-"Tùy chá»n này sẽ xác thá»±c vá»›i máy chủ NNTP bằng mật khẩu thô (không mã hóa)"
+msgstr "Tùy chá»n này sẽ xác thá»±c vá»›i máy chủ NNTP bằng mật khẩu thô (không mã hóa)"
#: camel/providers/nntp/camel-nntp-store.c:118
#: camel/providers/nntp/camel-nntp-store.c:1233
@@ -11559,8 +11526,7 @@ msgstr "Không thể kết nối tới máy chủ POP %s"
msgid ""
"Unable to connect to POP server %s: No support for requested authentication "
"mechanism."
-msgstr ""
-"Không thể kết nối tới máy chủ POP %s: Không hỗ trợ cơ chế xác thực yêu cầu."
+msgstr "Không thể kết nối tới máy chủ POP %s: Không hỗ trợ cơ chế xác thực yêu cầu."
#: camel/providers/pop3/camel-pop3-store.c:428
#, c-format
@@ -11615,8 +11581,7 @@ msgstr "Sendmail"
msgid ""
"For delivering mail by passing it to the \"sendmail\" program on the local "
"system."
-msgstr ""
-"Äể gá»­i thÆ° bằng cách chuyển nó cho chÆ°Æ¡ng trình sendmail trên hệ thống này."
+msgstr "Äể gá»­i thÆ° bằng cách chuyển nó cho chÆ°Æ¡ng trình sendmail trên hệ thống này."
#: camel/providers/sendmail/camel-sendmail-transport.c:113
msgid "Could not parse recipient list"
@@ -12071,8 +12036,7 @@ msgstr "Äính kèm tập tin"
#: composer/e-msg-composer.c:704
#, fuzzy
-msgid ""
-"Cannot sign outgoing message: No signing certificate set for this account"
+msgid "Cannot sign outgoing message: No signing certificate set for this account"
msgstr "_Luôn ký tên lên các thư cần gửi khi dùng tài khoản này"
#: composer/e-msg-composer.c:711
@@ -12817,8 +12781,7 @@ msgid "Composer Preferences"
msgstr "Thông số bộ soạn thảo"
#: mail/GNOME_Evolution_Mail.server.in.in.h:3
-msgid ""
-"Configure mail preferences, including security and message display, here"
+msgid "Configure mail preferences, including security and message display, here"
msgstr ""
"Cấu hình thông số thư tín, bao gồm tính bảo mật và hiển thị thông điệp, ở "
"đây."
@@ -13195,16 +13158,14 @@ msgstr "Thuộc tính thư mục"
#. TODO: can this be done in a loop?
#: mail/em-folder-properties.c:161
-#, fuzzy
msgid "Total message:"
msgid_plural "Total messages:"
-msgstr[0] "Tất cả thông điệp"
+msgstr[0] "Tất cả thông điệp:"
#: mail/em-folder-properties.c:173
-#, fuzzy
msgid "Unread message:"
msgid_plural "Unread messages:"
-msgstr[0] "Thông Ä‘iệp chÆ°a Ä‘á»c"
+msgstr[0] "Thông Ä‘iệp chÆ°a Ä‘á»c:"
#: mail/em-folder-selection-button.c:120
msgid "<click here to select a folder>"
@@ -13971,9 +13932,8 @@ msgid "Default height of the Subscribe dialog"
msgstr "Cắt thông Ä‘iệp đã chá»n"
#: mail/evolution-mail.schemas.in.in.h:16
-#, fuzzy
msgid "Default reply style"
-msgstr "Kiểu chuyển tiếp mặc định là: "
+msgstr "Kiểu trả lá»i mặc định"
#: mail/evolution-mail.schemas.in.in.h:17
#, fuzzy
@@ -14150,8 +14110,7 @@ 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."
+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
@@ -15537,8 +15496,7 @@ 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"
+msgid "This message cannot be sent because you have not specified any Recipients"
msgstr ""
#. mail:send-no-recipients secondary
@@ -16469,8 +16427,7 @@ msgid "Last upgraded Evolution configuration version"
msgstr "Giao diện cấu hình mail."
#: shell/apps_evolution_shell.schemas.in.in.h:10
-msgid ""
-"List of paths for the folders to be synchronized to disk for offline usage"
+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
@@ -16710,8 +16667,7 @@ msgstr "Ngoại tuyến"
#: shell/e-shell-window.c:337
msgid "Evolution is currently online. Click on this button to work offline."
-msgstr ""
-"Evolution hiện thá»i Ä‘ang trá»±c tuyến. Nhấn nút này để chuyển sang ngoại tuyến."
+msgstr "Evolution hiện thá»i Ä‘ang trá»±c tuyến. Nhấn nút này để chuyển sang ngoại tuyến."
#: shell/e-shell-window.c:344
msgid "Evolution is in the process of going offline."
@@ -17298,8 +17254,7 @@ 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:"
+msgid "You have certificates on file that identify these certificate authorities:"
msgstr ""
#: smime/gui/smime-ui.glade.h:44
@@ -18067,10 +18022,8 @@ msgid "Hide _Read Messages"
msgstr "Ẩn thông Ä‘iệp đã Ä‘á»c"
#: ui/evolution-mail-list.xml.h:8
-msgid ""
-"Hide deleted messages rather than displaying them with a line through them"
-msgstr ""
-"Ẩn thông Ä‘iệp đã xoá thay vì hiển thị chúng vá»›i má»™t Ä‘Æ°á»ng gạch ngang qua"
+msgid "Hide deleted messages rather than displaying them with a line through them"
+msgstr "Ẩn thông Ä‘iệp đã xoá thay vì hiển thị chúng vá»›i má»™t Ä‘Æ°á»ng gạch ngang qua"
#: ui/evolution-mail-list.xml.h:9
msgid "Mark All as _Read"
@@ -19181,8 +19134,7 @@ msgstr "Truy vấn Evolution"
#. setup a dummy error
#: widgets/misc/e-error.c:421
#, c-format
-msgid ""
-"<span weight=\"bold\">Internal error, unknown error '%s' requested</span>"
+msgid "<span weight=\"bold\">Internal error, unknown error '%s' requested</span>"
msgstr "<span weight=\"bold\">Lỗi nội tại, lỗi lạ '%s' được yêu cầu</span>"
#: widgets/misc/e-expander.c:181
@@ -19351,14 +19303,12 @@ msgstr "Nhớ mật khẩu này"
msgid "Remember this password for the remainder of this session"
msgstr "Nhớ mật khẩu này để nhắc nhở cho những lần sử dụng sau"
-#, fuzzy
msgid "Keep"
-msgstr "Bíp"
+msgstr "Giữ"
msgid "New Contacts Group"
msgstr "Nhóm Liên lạc mới"
-#, fuzzy
msgid "Contacts Grou_p"
msgstr "Nhóm _Liên lạc"
@@ -19398,18 +19348,15 @@ msgstr "Thêm Nhóm công việc"
msgid "L_ocation:"
msgstr "Äị_a Ä‘iểm:"
-#, fuzzy
msgid "<b>Organizer</b>"
-msgstr "<b>Khác</b>"
+msgstr "<b>NgÆ°á»i tổ chức</b>"
-#, fuzzy
msgid "_Organizer:"
-msgstr "Tổ chức:"
+msgstr "_NgÆ°á»i tổ chức:"
msgid "New tasks group"
msgstr "Nhóm công việc mới"
-#, fuzzy
msgid "Tasks Gro_up"
msgstr "_Nhóm công việc"
@@ -19679,9 +19626,8 @@ msgstr "Äang kết nối"
msgid "Distinguished _name:"
msgstr "Tên _phân biệt:"
-#, fuzzy
msgid "Email address:"
-msgstr "Äịa chỉ _email:"
+msgstr "Äịa chỉ email:"
msgid "Evolution will use this DN to authenticate you with the server"
msgstr "Evolution sẽ dùng DN này để xác thực bạn với server"
@@ -19726,9 +19672,8 @@ msgstr "searching-tab"
msgid "Job title:"
msgstr "Tên n_ghá»:"
-#, fuzzy
msgid "Webcam:"
-msgstr "Trang"
+msgstr "Webcam:"
msgid "Could not find widget for a field: `%s'"
msgstr "Không thể tìm thấy widget cho trÆ°á»ng: `%s'"
@@ -19748,29 +19693,24 @@ msgstr ""
"%s\n"
"đã há»ng. Bạn phải khởi Ä‘á»™ng lại Evolution để dùng lại."
-#, fuzzy
msgid "Can not load URI"
-msgstr "Không có card"
+msgstr "Không thể nạp URI"
-#, fuzzy
msgid "Calendar Properties"
-msgstr "Lá»—i iCalendar"
+msgstr "Thuộc tính lịch"
-#, fuzzy
msgid "Remote"
-msgstr "Loại bá»"
+msgstr "Từ xa"
-#, fuzzy
msgid "Task List Properties"
-msgstr "Danh sách công việc"
+msgstr "Thuộc tính Danh sách công việc"
#, fuzzy
msgid "_Refresh Interval:"
msgstr "_Danh sách cập nhật"
-#, fuzzy
msgid "_Source URL:"
-msgstr "URI của POP"
+msgstr "URL _nguồn:"
msgid ""
"The event being deleted is a meeting, would you like to send a cancellation "
@@ -19814,9 +19754,8 @@ msgstr ""
msgid "_Discard Changes"
msgstr "_Hủy thay đổi"
-#, fuzzy
msgid "Save Event"
-msgstr "Sự kiện lịch"
+msgstr "Lưu sự kiện"
msgid "The meeting information has been created. Send it?"
msgstr "Thông tin cuá»™c há»p đã được tại. Gá»­i nó Ä‘i chứ?"
@@ -19860,9 +19799,8 @@ msgstr "Äang làm việc"
msgid "Brought to you by"
msgstr "Äược mang lại bởi"
-#, fuzzy
msgid "_Filename:"
-msgstr "Tên tập tin:"
+msgstr "_Tên tập tin:"
msgid ""
"%s\n"
@@ -19895,9 +19833,8 @@ msgstr ""
"Lỗi từ hệ thống kích hoạt:\n"
"%s"
-#, fuzzy
msgid "View Certificate"
-msgstr "_ID Chứng nhận:"
+msgstr "Xem Chứng nhận"
msgid "About Ximian Evolution..."
msgstr "Giới thiệu Ximian Evolution..."
@@ -19909,13 +19846,11 @@ msgstr "_Giới thiệu Ximian Evolution..."
msgid "Evolution Addressbook folder viewer"
msgstr "Bộ xem Minicard sổ địa chỉ evolution"
-#, fuzzy
msgid "Address 2:"
-msgstr "Äịa chỉ _2:"
+msgstr "Äịa chỉ 2:"
-#, fuzzy
msgid "Blog:"
-msgstr "Bologna"
+msgstr "Blog:"
#, fuzzy
msgid "Evolution Calendar viewer"
@@ -19949,13 +19884,11 @@ msgstr "Thá»i gian"
msgid "_General"
msgstr "_Chung"
-#, fuzzy
msgid "Select source"
-msgstr "Chá»n bá»™ nhập"
+msgstr "Chá»n nguồn"
-#, fuzzy
msgid "calendar"
-msgstr "Lịch"
+msgstr "lịch"
msgid "Calendar file could not be updated!\n"
msgstr "Không thể cập nhật tập tin lịch!\n"
@@ -20087,9 +20020,8 @@ msgid ""
"\t\t\t up an address book."
msgstr "Xác định tên hiển thị là bước cuối cùng để cấu hình LDAP server."
-#, fuzzy
msgid "Step 3: Connecting to Server"
-msgstr "Bước 2: Kết nối tới server"
+msgstr "Bước 3: Kết nối tới máy chủ"
#, fuzzy
msgid "Step 4: Searching the Directory"
@@ -20143,28 +20075,23 @@ msgstr ""
"tin đăng nhập của bạn. Vui lòng há»i quản trị hệ thống của bạn nếu bạn không\n"
"chắc vỠnhững thông tin này."
-#, fuzzy
msgid " B_usiness:"
-msgstr "Kinh doanh"
+msgstr "_Kinh doanh:"
-#, fuzzy
msgid "A_ddress..."
-msgstr "Äị_a chỉ.."
+msgstr "Äị_a chỉ..."
msgid "A_ssistant's name:"
msgstr "Tên p_hụ tá:"
-#, fuzzy
msgid "Addressbook:"
-msgstr "Sổ địa chỉ"
+msgstr "Sổ địa chỉ:"
-#, fuzzy
msgid "Blog address:"
-msgstr "Äịa chỉ _email:"
+msgstr "Äịa chỉ Blog:"
-#, fuzzy
msgid "Business fa_x:"
-msgstr "Fax Kinh doanh"
+msgstr "Fa_x Kinh doanh:"
msgid "Collaboration"
msgstr "Hợp tác"
@@ -21335,8 +21262,7 @@ msgstr "Gửi bất cứ giá nào?"
msgid "Folder _name"
msgstr "Tên thư mục:"
-msgid ""
-"This message is digitally signed. Click the lock icon for more information."
+msgid "This message is digitally signed. Click the lock icon for more information."
msgstr "Thông điệp này dùng chữ ký số. Nhấn biểu tượng khóa để biết thêm."
#, fuzzy
@@ -21688,8 +21614,7 @@ msgstr "contains? cần đối số thứ hai là chuỗi"
msgid ""
"contains? expects argument 1 to be one of \"any\", \"summary\", \"description"
"\""
-msgstr ""
-"contains? cần đối số thứ nhất là \"bất kỳ\", \"tóm tắt\", hoặc \"mô tả\""
+msgstr "contains? cần đối số thứ nhất là \"bất kỳ\", \"tóm tắt\", hoặc \"mô tả\""
#, fuzzy
msgid "has-alarms? expects at least 1 argument"
@@ -21881,10 +21806,8 @@ msgstr "In card"
msgid "Error while communicating with calendar server"
msgstr "Lỗi khi liên lạc với server lịch"
-msgid ""
-"Could not create the calendar view. Please check your ORBit and OAF setup."
-msgstr ""
-"Không thể tạo khung xem lịch. Vui lòng kiểm tra thiết lập ORBit và OAF."
+msgid "Could not create the calendar view. Please check your ORBit and OAF setup."
+msgstr "Không thể tạo khung xem lịch. Vui lòng kiểm tra thiết lập ORBit và OAF."
msgid "Folder containing appointments and events"
msgstr "Thư mục chứa các cuộc hẹn và sự kiện"
@@ -21912,18 +21835,15 @@ msgstr "Bạn không có đủ quyá»n để cập nhật đối tượng này"
#, fuzzy
msgid "The event could not be deleted because it was invalid"
-msgstr ""
-"Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
+msgstr "Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
#, fuzzy
msgid "The task could not be deleted because it was invalid"
-msgstr ""
-"Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
+msgstr "Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
#, fuzzy
msgid "The item could not be deleted because it was invalid"
-msgstr ""
-"Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
+msgstr "Không thể cập nhật trạng thái ngÆ°á»i tham dá»± vì trạng thái không hợp lệ!\n"
msgid "That person is already attending the meeting!"
msgstr "NgÆ°á»i này đã có tên trong cuá»™c há»p rồi!"
@@ -30991,10 +30911,8 @@ msgstr "Không thể tạo Factory bộ soạn thảo thành phần"
msgid "Print Calendar"
msgstr "In lịch"
-msgid ""
-"Could not create the tasks view. Please check your ORBit and OAF setup."
-msgstr ""
-"Không thể tạo cửa sổ công việc. Vui lòng kiểm tra thiết lập ORBit và OAF."
+msgid "Could not create the tasks view. Please check your ORBit and OAF setup."
+msgstr "Không thể tạo cửa sổ công việc. Vui lòng kiểm tra thiết lập ORBit và OAF."
msgid "Warning!"
msgstr "Cảnh báo!"
@@ -31059,8 +30977,7 @@ msgstr ""
"thư mục Evolution cá nhân"
msgid "Please click \"OK\" to install the files, or \"Cancel\" to exit."
-msgstr ""
-"Vui lòng nhấn \"Äồng ý\" để cài đặt tập tin, hoặc nhấn \"Hủy bá»' để thoát."
+msgstr "Vui lòng nhấn \"Äồng ý\" để cài đặt tập tin, hoặc nhấn \"Hủy bá»' để thoát."
msgid ""
"Evolution has detected an old\n"
@@ -31567,8 +31484,7 @@ msgstr "Không thể mở thư mục cho news server: %s"
msgid "Could not open folder: message listing was incomplete."
msgstr "Không thể mở thư mục: danh sách thông điệp chưa hoàn chỉnh."
-msgid ""
-"This will connect to the POP server and use Kerberos 4 to authenticate to it."
+msgid "This will connect to the POP server and use Kerberos 4 to authenticate to it."
msgstr "Việc này sẽ kết nối tới POP server và dùng Kerberos 4 để xác thực."
msgid "(Unknown)"
@@ -31783,3 +31699,4 @@ msgstr "Tên chứa"
msgid "Unable to find any of your identities in the attendees list!\n"
msgstr "Không thể tìm thấy định danh của bạn trong danh sách ngÆ°á»i tham dá»±!\n"
+
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/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 cd05fd017f..0000000000
--- a/widgets/misc/e-reflow.c
+++ /dev/null
@@ -1,1509 +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,
- "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 ) {
- /* don't allow to drag the first line*/
- if (e_reflow_pick_line(reflow, button->x) == 0)
- return TRUE;
- 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 3ff3488ae5..0000000000
--- a/widgets/table/e-cell-combo.c
+++ /dev/null
@@ -1,703 +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 <glib/gi18n.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;
- AtkObject *a11y;
-
- /* 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);
-
- a11y = gtk_widget_get_accessible (ecc->popup_list);
- atk_object_set_name (a11y, _("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;
-
- listitem = gtk_list_item_new_with_label (utf8_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);
- gdk_keyboard_grab (ecc->popup_list->window, TRUE, time);
-
- 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);
- gdk_keyboard_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);
- gdk_keyboard_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);
- gdk_keyboard_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);
- gdk_keyboard_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 cbc0fddca8..0000000000
--- a/widgets/table/e-cell-text.c
+++ /dev/null
@@ -1,2854 +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
-#define VIEW_TO_CELL(view) E_CELL_TEXT (((ECellView *)view)->ecell)
-
-#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
-};
-
-/* signals */
-enum {
- TEXT_INSERTED,
- TEXT_DELETED,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = { 0 };
-
-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);
-
- signals [TEXT_INSERTED] =
- g_signal_new ("text_inserted",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (ECellTextClass, text_inserted),
- NULL, NULL,
- e_marshal_VOID__POINTER_INT_INT_INT_INT,
- G_TYPE_NONE, 5,
- G_TYPE_POINTER, G_TYPE_INT, G_TYPE_INT,
- G_TYPE_INT, G_TYPE_INT);
-
- signals [TEXT_DELETED] =
- g_signal_new ("text_deleted",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (ECellTextClass, text_deleted),
- NULL, NULL,
- e_marshal_VOID__POINTER_INT_INT_INT_INT,
- G_TYPE_NONE, 5,
- G_TYPE_POINTER, G_TYPE_INT, G_TYPE_INT,
- G_TYPE_INT, G_TYPE_INT);
-
-
-
- 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;
-
- g_signal_emit (VIEW_TO_CELL (text_view), signals[TEXT_DELETED], 0, text_view, edit->selection_start, ep-sp, edit->row, edit->model_col);
-}
-
-/* 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;
-
- g_signal_emit (VIEW_TO_CELL (text_view), signals[TEXT_INSERTED], 0, text_view, edit->selection_end-value, value, edit->row, edit->model_col);
-}
-
-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);
-}
-
-/**
- * e_cell_text_get_text_by_view:
- * @cell_view: the given cell view
- * @col: column of the given cell in the model
- * @row: row of the given cell in the model
- *
- * Get the cell's text directly from CellEdit,
- * during editting this cell, the cell's text value maybe inconsistant
- * with the text got from table_model.
- * The caller should free the text after using it.
- *
- * This API is most likely to be used by a11y implementations.
- */
-char *
-e_cell_text_get_text_by_view (ECellView *cell_view, gint col, gint row)
-{
- ECellTextView *ectv;
- CellEdit *edit;
- gchar *ret, *model_text;
-
- ectv = (ECellTextView *)cell_view;
- edit = ectv->edit;
-
- if (edit && ectv->edit->row == row && ectv->edit->model_col == col) { /* being editted now */
- ret = g_strdup (edit->text);
- } else{
- model_text = e_cell_text_get_text (E_CELL_TEXT (cell_view->ecell),
- cell_view->e_table_model, col, row);
- ret = g_strdup (model_text);
- e_cell_text_free_text (E_CELL_TEXT (cell_view->ecell), model_text);
- }
-
- return ret;
-
-}
diff --git a/widgets/table/e-cell-text.h b/widgets/table/e-cell-text.h
deleted file mode 100644
index 0ef32b9ede..0000000000
--- a/widgets/table/e-cell-text.h
+++ /dev/null
@@ -1,129 +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);
- /* signal handlers */
- void (*text_inserted) (ECellText *cell, ECellView *cell_view, int pos, int len, int row, int model_col);
- void (*text_deleted) (ECellText *cell, ECellView *cell_view, int pos, int len, int row, int model_col);
-} 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);
-
-/* get text directly from view, both col and row are model format */
-char *e_cell_text_get_text_by_view (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 34e8a8b76d..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 < 0 || 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 ee18694742..0000000000
--- a/widgets/table/e-cell-vbox.c
+++ /dev/null
@@ -1,486 +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 "gal/a11y/e-table/gal-a11y-e-cell-registry.h"
-#include "gal/a11y/e-table/gal-a11y-e-cell-vbox.h"
-#include "e-table-item.h"
-#include "e-cell-vbox.h"
-
-#define PARENT_TYPE e_cell_get_type ()
-
-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);
-
- gal_a11y_e_cell_registry_add_cell_type (NULL, E_CELL_VBOX_TYPE, gal_a11y_e_cell_vbox_new);
-}
-
-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 f08e106128..0000000000
--- a/widgets/table/e-cell-vbox.h
+++ /dev/null
@@ -1,72 +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 {
- ECellView cell_view;
- int subcell_view_count;
- ECellView **subcell_views;
- int *model_cols;
-} ECellVboxView;
-
-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 544cbcbd86..0000000000
--- a/widgets/table/e-table-click-to-add.c
+++ /dev/null
@@ -1,601 +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 <atk/atkutil.h>
-#include <atk/atkgobjectaccessible.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.h"
-
-enum {
- CURSOR_CHANGE,
- STYLE_SET,
- 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_style_set (ETableClickToAdd *etcta, GtkStyle *previous_style)
-{
- GtkWidget *widget = GTK_WIDGET(GNOME_CANVAS_ITEM(etcta)->canvas);
-
- if (etcta->rect) {
- gnome_canvas_item_set (etcta->rect,
- "outline_color_gdk", &widget->style->fg[GTK_STATE_NORMAL],
- "fill_color_gdk", &widget->style->bg[GTK_STATE_NORMAL],
- NULL );
-
- }
-
- if (etcta->text)
- gnome_canvas_item_set (etcta->text,
- "fill_color_gdk", &widget->style->text[GTK_STATE_NORMAL],
- NULL);
-
-}
-
-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
-create_rect_and_text (ETableClickToAdd *etcta)
-{
- GtkWidget *widget = GTK_WIDGET (GNOME_CANVAS_ITEM(etcta)->canvas);
-
- 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_gdk", &widget->style->fg[GTK_STATE_NORMAL],
- "fill_color_gdk", &widget->style->bg[GTK_STATE_NORMAL],
- 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,
- "fill_color_gdk", &widget->style->text[GTK_STATE_NORMAL],
- NULL);
-}
-
-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);
-
- create_rect_and_text (etcta);
- 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;
- klass->style_set = etcta_style_set;
-
- 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);
-
- etcta_signals [STYLE_SET] =
- g_signal_new ("style_set",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ETableClickToAddClass, style_set),
- NULL, NULL,
- e_marshal_NONE__OBJECT,
- G_TYPE_NONE, 1, GTK_TYPE_STYLE);
-
- gal_a11y_e_table_click_to_add_init ();
-}
-
-static void
-etcta_init (GnomeCanvasItem *item)
-{
- ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);
- AtkObject *a11y;
-
- 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);
-
- /* create its a11y object at this time if accessibility is enabled*/
- if (atk_get_root () != NULL) {
- a11y = atk_gobject_accessible_for_object (G_OBJECT (etcta));
- atk_object_set_name (a11y, _("click to add"));
- }
-}
-
-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;
- }
- create_rect_and_text (etcta);
- 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 42ffd42d07..0000000000
--- a/widgets/table/e-table-click-to-add.h
+++ /dev/null
@@ -1,78 +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);
- void (*style_set) (ETableClickToAdd *etcta, GtkStyle *previous_style);
-} 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 0fff43fd37..0000000000
--- a/widgets/table/e-table-config-no-group.glade
+++ /dev/null
@@ -1,2114 +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>
- <property name="mnemonic_widget">custom-available</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>
- <property name="mnemonic_widget">custom-shown</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 4e40c150fd..0000000000
--- a/widgets/table/e-table-config.c
+++ /dev/null
@@ -1,1225 +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);
-
- /* if no columns left, just return */
- if (columns == NULL)
- return;
-
- 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);
-
- /* if no columns left, just return */
- if (columns == NULL)
- return;
-
-
- 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 718c89e7ae..0000000000
--- a/widgets/table/e-table-config.glade
+++ /dev/null
@@ -1,2183 +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>
- <property name="mnemonic_widget">custom-available</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>
- <property name="mnemonic_widget">custom-shown</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 2fc0617e8f..0000000000
--- a/widgets/table/e-table-group-container.c
+++ /dev/null
@@ -1,1503 +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
-};
-
-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 d1809e48fd..0000000000
--- a/widgets/table/e-table-group-container.h
+++ /dev/null
@@ -1,108 +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;
-
-typedef struct {
- ETableGroup *child;
- void *key;
- char *string;
- GnomeCanvasItem *text;
- GnomeCanvasItem *rect;
- gint count;
-} ETableGroupContainerChildNode;
-
-
-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 265d29fed0..0000000000
--- a/widgets/table/e-table-header-item.c
+++ /dev/null
@@ -1,1910 +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->etfcd)
- g_object_remove_weak_pointer (G_OBJECT (ethi->etfcd), (gpointer *)&ethi->etfcd);
-
-
- 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)
-{
- if (info->ethi->etfcd) {
- gtk_window_present (GTK_WINDOW (info->ethi->etfcd));
-
- return;
- }
-
- info->ethi->etfcd = e_table_field_chooser_dialog_new();
- g_object_add_weak_pointer (G_OBJECT (info->ethi->etfcd), (gpointer *)&info->ethi->etfcd);
-
- g_object_set(info->ethi->etfcd,
- "full_header", info->ethi->full_header,
- "header", info->ethi->eth,
- "dnd_code", info->ethi->dnd_code,
- NULL);
-
- gtk_widget_show(info->ethi->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 d1e539888c..0000000000
--- a/widgets/table/e-table-header-item.h
+++ /dev/null
@@ -1,119 +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;
- GtkWidget *etfcd;
- 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 33798cc716..0000000000
--- a/widgets/table/e-table-item.c
+++ /dev/null
@@ -1,3735 +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/a11y/e-table/gal-a11y-e-table-item.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->cols = -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 ((view_col >= 0) && (view_col < eti->cols))
- 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);
-
- /* A11y Init */
- gal_a11y_e_table_item_init ();
-}
-
-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 3a849fbf26..0000000000
--- a/widgets/table/e-table.c
+++ /dev/null
@@ -1,3349 +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.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 FALSE;
- } 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);
- } else if (canvas->focused_item) {
- ESelectionModel *selection = (ESelectionModel *)etable->selection;
-
- /* check whether click_to_add already got the focus */
- if (etable->click_to_add) {
- GnomeCanvasItem *row = E_TABLE_CLICK_TO_ADD(etable->click_to_add)->row;
- if (canvas->focused_item == row)
- return TRUE;
- }
-
- if (e_selection_model_cursor_row (selection) == -1)
- 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 FALSE;
-}
-
-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 && table->table_canvas)
- (*x_return) -= GTK_LAYOUT(table->table_canvas)->hadjustment->value;
- if (y_return) {
- if (table->table_canvas)
- (*y_return) -= GTK_LAYOUT(table->table_canvas)->vadjustment->value;
- if (table->header_canvas)
- (*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));
-
- gal_a11y_e_table_init ();
-}
-
-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 fa3dafa2fa..0000000000
--- a/widgets/table/e-tree.c
+++ /dev/null
@@ -1,3324 +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.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));
-
- gal_a11y_e_tree_init ();
-}
-
-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 b3ad50b868..0000000000
--- a/widgets/text/e-text.c
+++ /dev/null
@@ -1,3867 +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.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,
- 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);
-
- gal_a11y_e_text_init ();
-}
-
-/* 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