1 21 22 package org.armedbear.j.mail; 23 24 import org.armedbear.j.Formatter; 25 import org.armedbear.j.Buffer; 26 import org.armedbear.j.Editor; 27 import org.armedbear.j.Line; 28 import org.armedbear.j.LineSegment; 29 import org.armedbear.j.LineSegmentList; 30 import org.armedbear.j.Property; 31 import org.armedbear.j.Utilities; 32 import org.armedbear.j.FormatTable; 33 34 public final class MailboxFormatter extends Formatter 35 { 36 private static final boolean SHOW_MESSAGE_NUMBERS = 37 Editor.preferences().getBooleanProperty(Property.SHOW_MESSAGE_NUMBERS); 38 39 private static final byte FORMAT_TEXT = 0; 40 private static final byte FORMAT_DELETED = 1; 41 private static final byte FORMAT_TAGGED = 2; 42 43 private static final byte FORMAT_TO = 3; private static final byte FORMAT_FLAGS = 4; 45 private static final byte FORMAT_DATE = 5; 46 private static final byte FORMAT_FROM = 6; 47 private static final byte FORMAT_SIZE = 7; 48 private static final byte FORMAT_SUBJECT = 8; 49 50 private static final byte FORMAT_FLAGGED_TO = 9; 51 private static final byte FORMAT_FLAGGED_FLAGS = 10; 52 private static final byte FORMAT_FLAGGED_DATE = 11; 53 private static final byte FORMAT_FLAGGED_FROM = 12; 54 private static final byte FORMAT_FLAGGED_SIZE = 13; 55 private static final byte FORMAT_FLAGGED_SUBJECT = 14; 56 57 private static final int TO_COLUMN_WIDTH = 2; 58 private static final int FLAGS_COLUMN_WIDTH = 3; 59 private static final int DATE_COLUMN_WIDTH = 14; 60 private static final int FROM_COLUMN_WIDTH = 22; 61 private static final int SIZE_COLUMN_WIDTH = 6; 62 63 private static final int TO_COLUMN = SHOW_MESSAGE_NUMBERS ? 6 : 0; 64 private static final int FLAGS_COLUMN = TO_COLUMN + TO_COLUMN_WIDTH; 65 private static final int DATE_COLUMN = FLAGS_COLUMN + FLAGS_COLUMN_WIDTH; 66 private static final int FROM_COLUMN = DATE_COLUMN + DATE_COLUMN_WIDTH; 67 private static final int SIZE_COLUMN = FROM_COLUMN + FROM_COLUMN_WIDTH; 68 private static final int SUBJECT_COLUMN = SIZE_COLUMN + SIZE_COLUMN_WIDTH; 69 70 public MailboxFormatter(Buffer buffer) 71 { 72 this.buffer = buffer; 73 } 74 75 public LineSegmentList formatLine(Line line) 76 { 77 String text; 78 if (Editor.tabsAreVisible()) 79 text = Utilities.makeTabsVisible(line.getText(), buffer.getTabWidth()); 80 else 81 text = Utilities.detab(line.getText(), buffer.getTabWidth()); 82 clearSegmentList(); 83 if (line instanceof MailboxLine) { 84 MailboxEntry entry = ((MailboxLine) line).getMailboxEntry(); 85 if (entry.isTagged()) { 86 addSegment(text, FORMAT_TAGGED); 87 } else if (entry.isDeleted()) { 88 addSegment(text, FORMAT_DELETED); 89 } else if (entry.isFlagged()) { 90 if (TO_COLUMN > 0) 91 addSegment(text, 0, TO_COLUMN, FORMAT_TEXT); 92 addSegment(text, TO_COLUMN, FLAGS_COLUMN, FORMAT_FLAGGED_TO); 93 addSegment(text, FLAGS_COLUMN, DATE_COLUMN, FORMAT_FLAGGED_FLAGS); 94 addSegment(text, DATE_COLUMN, FROM_COLUMN, FORMAT_FLAGGED_DATE); 95 addSegment(text, FROM_COLUMN, SIZE_COLUMN, FORMAT_FLAGGED_FROM); 96 addSegment(text, SIZE_COLUMN, SUBJECT_COLUMN, FORMAT_FLAGGED_SIZE); 97 addSegment(text, SUBJECT_COLUMN, FORMAT_FLAGGED_SUBJECT); 98 } else { 99 if (TO_COLUMN > 0) 101 addSegment(text, 0, TO_COLUMN, FORMAT_TEXT); 102 addSegment(text, TO_COLUMN, FLAGS_COLUMN, FORMAT_TO); 103 addSegment(text, FLAGS_COLUMN, DATE_COLUMN, FORMAT_FLAGS); 104 addSegment(text, DATE_COLUMN, FROM_COLUMN, FORMAT_DATE); 105 addSegment(text, FROM_COLUMN, SIZE_COLUMN, FORMAT_FROM); 106 addSegment(text, SIZE_COLUMN, SUBJECT_COLUMN, FORMAT_SIZE); 107 addSegment(text, SUBJECT_COLUMN, FORMAT_SUBJECT); 108 } 109 } else 110 addSegment(text, FORMAT_TEXT); 111 return segmentList; 112 } 113 114 public FormatTable getFormatTable() 115 { 116 if (formatTable == null) { 117 formatTable = new FormatTable("MailboxMode"); 118 formatTable.addEntryFromPrefs(FORMAT_TEXT, "text"); 119 formatTable.addEntryFromPrefs(FORMAT_DELETED, "deleted", "disabled"); 120 formatTable.addEntryFromPrefs(FORMAT_TAGGED, "marked"); 121 formatTable.addEntryFromPrefs(FORMAT_TO, "to", "function"); 122 formatTable.addEntryFromPrefs(FORMAT_FLAGS, "flags", "text"); 123 formatTable.addEntryFromPrefs(FORMAT_DATE, "date", "keyword"); 124 formatTable.addEntryFromPrefs(FORMAT_FROM, "from", "function"); 125 formatTable.addEntryFromPrefs(FORMAT_SIZE, "size", "text"); 126 formatTable.addEntryFromPrefs(FORMAT_SUBJECT, "subject", "string"); 127 formatTable.addEntryFromPrefs(FORMAT_FLAGGED_TO, "flaggedTo", "to"); 128 formatTable.addEntryFromPrefs(FORMAT_FLAGGED_FLAGS, "flaggedFlags", "flags"); 129 formatTable.addEntryFromPrefs(FORMAT_FLAGGED_DATE, "flaggedDate", "date"); 130 formatTable.addEntryFromPrefs(FORMAT_FLAGGED_FROM, "flaggedFrom", "from"); 131 formatTable.addEntryFromPrefs(FORMAT_FLAGGED_SIZE, "flaggedSize", "size"); 132 formatTable.addEntryFromPrefs(FORMAT_FLAGGED_SUBJECT, "flaggedSubject", "subject"); 133 } 134 return formatTable; 135 } 136 } 137 | Popular Tags |