{"id":12578,"date":"2015-10-15T14:01:59","date_gmt":"2015-10-15T18:01:59","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=12578"},"modified":"2015-12-10T17:56:42","modified_gmt":"2015-12-10T22:56:42","slug":"customizing-columns-in-omnifocus-2-3","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2015\/10\/15\/customizing-columns-in-omnifocus-2-3\/","title":{"rendered":"Customizing Columns in OmniFocus 2.3"},"content":{"rendered":"<p><a href=\"https:\/\/www.omnigroup.com\/blog\/customizing-columns-in-omnifocus-2.3\">Derek Reiff<\/a>:<\/p>\r\n<blockquote cite=\"https:\/\/www.omnigroup.com\/blog\/customizing-columns-in-omnifocus-2.3\">\r\n<p>Today&rsquo;s update to OmniFocus, v2.3, is all about (OK, is mostly about) column customization. OmniFocus 2 introduced the <strong>Fluid<\/strong> layout, which turned tasks with a lot of data&mdash;defer and due dates, flags, context, project, and notes&mdash;into a readable row.<\/p>\r\n<p>With 2.3&rsquo;s <strong>Custom Columns<\/strong> layout, you can pick and choose what data you&rsquo;d like to show, which Perspectives show what (Pro), or just flip a switch once to effect change everywhere.<\/p>\r\n<p>[&#8230;]<\/p>\r\n<p>This update also introduces Title Folding, which collapses an action&rsquo;s title to <em>just<\/em> one line to keep row height consistent. Unless the row is selected, of course, in which case it&rsquo;ll unfold. Turn it on in the View menu (Show Full Item Title-&gt;When Selected).<\/p>\r\n<\/blockquote>\r\n<p>The Fluid layout was <a href=\"http:\/\/mjtsai.com\/blog\/2014\/04\/27\/omnifocus-2s-low-information-density\/\">terrible for data density<\/a>. An esoteric preference was added to put everything back on one line, but there was still <a href=\"http:\/\/mjtsai.com\/blog\/2015\/03\/10\/omnifocus-2-1\/\">too much white space<\/a>. This update is a step in the right direction because in Custom Columns mode the rows are spaced more tightly. I&rsquo;m not fond of seeing &ldquo;defer&rdquo; and &ldquo;due&rdquo; placeholders in every row, though; previous versions only showed these on mouseover, reducing the clutter.<\/p>\r\n<p>There&rsquo;s still no way to reduce the width of the sidebar (which is about 2x as wide as my widest context name), nor is there a way to resize the columns (which devote 3&#8211;4x as much space as needed to my project names).<\/p>\r\n<p>Update (2015-12-04): <a href=\"https:\/\/www.omnigroup.com\/developer\/designing-custom-columns-layout-in-omnifocus-for-mac\">William Van Hecke and Curt Clifton<\/a>:<\/p>\r\n<blockquote cite=\"https:\/\/www.omnigroup.com\/developer\/designing-custom-columns-layout-in-omnifocus-for-mac\">\r\n<p>On the surface, the solution might seem to be to just bring back OmniFocus 1\u2019s spreadsheetesque layout. But we believed we could design for these needs while holding on to OmniFocus 2\u2019s hard-earned improvements in approachability. The result of this quest for balance is the new Custom Columns layout. Superficially, it looks a bit like OmniFocus 1, but Custom Columns have a lot more intelligence behind the scenes.<\/p>\r\n<\/blockquote>\r\n<p>Update (2015-12-10): <a href=\"https:\/\/www.omnigroup.com\/developer\/implementing-custom-columns-layout-in-omnifocus-for-mac\">William Van Hecke and Curt Clifton<\/a>:<\/p>\r\n<blockquote cite=\"https:\/\/www.omnigroup.com\/developer\/implementing-custom-columns-layout-in-omnifocus-for-mac\"><p>Here\u2019s a diagram showing the structure of controllers and views in an OmniFocus window before we added Custom Columns layout.<\/p>\r\n<p>[\u2026]<\/p>\r\n<p>For Custom Columns layout we needed to use different table cell views, but wanted to retain as much of the existing, working code as possible. As the figure above shows, both <code>OFIProjectTableCellView<\/code> and <code>OFIActionTableCellView<\/code> are backed by <code>.xib<\/code> files and have a common superclass, <code>OFIActionProxyTableCellView<\/code>. We wanted to add two more leaf nodes and <code>.xib<\/code>s for Custom Columns layout: <code>OFIProjectColumnarTableCellView<\/code> and <code>OFIActionColumnarTableCellView<\/code>. These classes needed to share some behavior with each other, but also needed to share some behavior with their corresponding Fluid variant. For example, both <code>OFIActionTableCellView<\/code> and <code>OFIActionColumnarTableCellView<\/code> needed to manage their status circles. This is a classic example of the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Multiple_inheritance#The_diamond_problem\">diamond inheritance problem<\/a>.<\/p>\r\n<p>Since Objective-C (and Swift) don\u2019t have multiple inheritance, we chose to solve this diamond inheritance by introducing <em>assistant<\/em> classes for the action and project table cell views. Here\u2019s a diagram showing that design.<\/p>\r\n<p>[\u2026]<\/p>\r\n<p>Cocoa\u2019s solution for these cases is <code>NSStackView<\/code>, which allows you to set priorities on subviews and have them automatically removed as needed. <code>NSStackView<\/code> is great for many use cases. Unfortunately, we\u2019ve found that it doesn\u2019t yet perform adequately when used in table cell views, many dozens of which can be laying out at once (for example, while you resize a window).<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Derek Reiff: Today&rsquo;s update to OmniFocus, v2.3, is all about (OK, is mostly about) column customization. OmniFocus 2 introduced the Fluid layout, which turned tasks with a lot of data&mdash;defer and due dates, flags, context, project, and notes&mdash;into a readable row. With 2.3&rsquo;s Custom Columns layout, you can pick and choose what data you&rsquo;d like [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"","apple_news_api_id":"","apple_news_api_modified_at":"","apple_news_api_revision":"","apple_news_api_share_url":"","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[200,77,30,32,526],"class_list":["post-12578","post","type-post","status-publish","format-standard","hentry","category-technology","tag-autolayout","tag-design","tag-mac","tag-macapp","tag-omnifocus"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/12578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=12578"}],"version-history":[{"count":5,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/12578\/revisions"}],"predecessor-version":[{"id":13068,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/12578\/revisions\/13068"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=12578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=12578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=12578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}