summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/shared-modules/ViewHelpers.jsm
blob: 33d39a8e0740a55afb05cd7ce3ed24591c394300 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/** Module to help debugging view wrapper issues. */

const EXPORTED_SYMBOLS = ["dump_view_contents", "dump_view_state"];

function dump_view_state(aViewWrapper, aDoNotDumpContents) {
  if (aViewWrapper.dbView == null) {
    dump("no nsIMsgDBView instance!\n");
    return;
  }
  if (!aDoNotDumpContents) {
    dump_view_contents(aViewWrapper);
  }
  dump("View: " + aViewWrapper.dbView + "\n");
  dump(
    "  View Type: " +
      _lookupValueNameInInterface(
        aViewWrapper.dbView.viewType,
        Ci.nsMsgViewType
      ) +
      "   " +
      "View Flags: " +
      aViewWrapper.dbView.viewFlags +
      "\n"
  );
  dump(
    "  Sort Type: " +
      _lookupValueNameInInterface(
        aViewWrapper.dbView.sortType,
        Ci.nsMsgViewSortType
      ) +
      "   " +
      "Sort Order: " +
      _lookupValueNameInInterface(
        aViewWrapper.dbView.sortOrder,
        Ci.nsMsgViewSortOrder
      ) +
      "\n"
  );
  dump(aViewWrapper.search.prettyString());
}

var WHITESPACE = "                                              ";
var MSG_VIEW_FLAG_DUMMY = 0x20000000;
function dump_view_contents(aViewWrapper) {
  let dbView = aViewWrapper.dbView;
  let treeView = aViewWrapper.dbView.QueryInterface(Ci.nsITreeView);
  let rowCount = treeView.rowCount;

  dump("********* Current View Contents\n");
  for (let iViewIndex = 0; iViewIndex < rowCount; iViewIndex++) {
    let level = treeView.getLevel(iViewIndex);
    let flags = dbView.getFlagsAt(iViewIndex);
    let msgHdr = dbView.getMsgHdrAt(iViewIndex);

    let s = WHITESPACE.substr(0, level * 2);
    if (treeView.isContainer(iViewIndex)) {
      s += treeView.isContainerOpen(iViewIndex) ? "- " : "+ ";
    } else {
      s += ". ";
    }
    // s += treeView.getCellText(iViewIndex, )
    if (flags & MSG_VIEW_FLAG_DUMMY) {
      s += "dummy: ";
    }
    s += dbView.cellTextForColumn(iViewIndex, "subject");
    s += " [" + msgHdr.folder.prettyName + "," + msgHdr.messageKey + "]";

    dump(s + "\n");
  }
  dump("********* end view contents\n");
}

function _lookupValueNameInInterface(aValue, aInterface) {
  for (let key in aInterface) {
    let value = aInterface[key];
    if (value == aValue) {
      return key;
    }
  }
  return "unknown: " + aValue;
}