diff --git a/src/ViewTask.cpp b/src/ViewTask.cpp index 16d5001a4..e31613726 100644 --- a/src/ViewTask.cpp +++ b/src/ViewTask.cpp @@ -307,6 +307,25 @@ std::string ViewTask::render (std::vector & data, std::vector & seque max_lines = cells[c].size (); } + // Listing breaks are simply blank lines inserted when a column value + // changes. + if (s > 0 && + _breaks.size () > 0) + { + std::vector ::iterator b; + for (b = _breaks.begin (); b != _breaks.end (); ++b) + { + if (data[sequence[s - 1]].get (*b) != data[sequence[s]].get (*b)) + { + out += "\n"; + ++_lines; + + // Only want one \n, regardless of how many values change. + break; + } + } + } + for (unsigned int i = 0; i < max_lines; ++i) { out += left_margin + (odd ? extra_odd : extra_even); diff --git a/src/ViewTask.h b/src/ViewTask.h index d81a34e64..a0d646ded 100644 --- a/src/ViewTask.h +++ b/src/ViewTask.h @@ -40,43 +40,45 @@ public: ~ViewTask (); // View specifications. - void add (Column* column) { _columns.push_back (column); } - void width (int width) { _width = width; } - void leftMargin (int margin) { _left_margin = margin; } - void colorHeader (Color& c) { _header = c; } - void colorOdd (Color& c) { _odd = c; } - void colorEven (Color& c) { _even = c; } - void intraPadding (int padding) { _intra_padding = padding; } - void intraColorOdd (Color& c) { _intra_odd = c; } - void intraColorEven (Color& c) { _intra_even = c; } - void extraPadding (int padding) { _extra_padding = padding; } - void extraColorOdd (Color& c) { _extra_odd = c; } - void extraColorEven (Color& c) { _extra_even = c; } - void truncateLines (int n) { _truncate_lines = n; } - void truncateRows (int n) { _truncate_rows = n; } - int lines () { return _lines; } - int rows () { return _rows; } + void add (Column* column) { _columns.push_back (column); } + void width (int width) { _width = width; } + void leftMargin (int margin) { _left_margin = margin; } + void colorHeader (Color& c) { _header = c; } + void colorOdd (Color& c) { _odd = c; } + void colorEven (Color& c) { _even = c; } + void intraPadding (int padding) { _intra_padding = padding; } + void intraColorOdd (Color& c) { _intra_odd = c; } + void intraColorEven (Color& c) { _intra_even = c; } + void extraPadding (int padding) { _extra_padding = padding; } + void extraColorOdd (Color& c) { _extra_odd = c; } + void extraColorEven (Color& c) { _extra_even = c; } + void truncateLines (int n) { _truncate_lines = n; } + void truncateRows (int n) { _truncate_rows = n; } + void addBreak (const std::string& attr) { _breaks.push_back (attr); } + int lines () { return _lines; } + int rows () { return _rows; } // View rendering. std::string render (std::vector &, std::vector &); private: - std::vector _columns; - int _width; - int _left_margin; - Color _header; - Color _odd; - Color _even; - int _intra_padding; - Color _intra_odd; - Color _intra_even; - int _extra_padding; - Color _extra_odd; - Color _extra_even; - int _truncate_lines; - int _truncate_rows; - int _lines; - int _rows; + std::vector _columns; + std::vector _breaks; + int _width; + int _left_margin; + Color _header; + Color _odd; + Color _even; + int _intra_padding; + Color _intra_odd; + Color _intra_even; + int _extra_padding; + Color _extra_odd; + Color _extra_even; + int _truncate_lines; + int _truncate_rows; + int _lines; + int _rows; }; #endif