Archive: ComponentOwl Rails app, DB backups, go redirect script

This commit is contained in:
EC2 Default User
2026-03-23 16:20:05 +00:00
commit 50037f386f
218 changed files with 14558 additions and 0 deletions

View File

@@ -0,0 +1,150 @@
<h2>Bugs and wrong behavior:</h2>
<table cellspacing="0">
<tr>
<th>Regular .NET ListView Control</th>
<th>Better ListView control</th>
</tr>
<tr>
<td>Some events fire twice bug</td>
<td>Fixed</td>
</tr>
<tr>
<td>Selection behavior different from Windows Explorer</td>
<td>Fixed; Behaves as expected</td>
</tr>
<tr>
<td>Drag &amp; Drop behavior different from Windows Explorer</td>
<td>Fixed; Behaves as expected</td>
</tr>
<tr>
<td>Checkboxes do not stay in the first column when the first column is reordered</td>
<td>Fixed; Behaves as expected</td>
</tr>
<tr>
<td>Non-standard checkboxes behavior (e.g. when using spacebar)</td>
<td>Fixed</td>
</tr>
<tr>
<td>Non-standard look, incompatible with system themes</td>
<td>Fixed; Always uses system theme. Looks great on all Windows versions. Works with Windows 7 themes and Aero</td>
</tr>
</table>
<h2>Limitations:</h2>
<table cellspacing="0">
<tr>
<th>Regular .NET ListView Control</th>
<th>Better ListView control</th>
</tr>
<tr>
<td>Just one image per item</td>
<td>Enhanced; Each sub-item can have image</td>
</tr>
<tr>
<td>ImageList must be used to display images</td>
<td>Both ImageList and Image instances can be used</td>
</tr>
<tr>
<td>Simple sorting only</td>
<td>Multi-column sorting; Users can use Shift+Click to add additional columns to the sort</td>
</tr>
<tr>
<td>Three-state checkboxes not supported</td>
<td>Support for both two-state and three-state check boxes</td>
</tr>
<tr>
<td>Very limited event data</td>
<td>Enhanced; Many events have rich event data with useful information</td>
</tr>
<tr>
<td>Only 1 context menu for whole ListView</td>
<td>Up to 3 separate context menus: One for column headers, one for items, and one for empty area</td>
</tr>
<tr>
<td>Columns can be shown only in &ldquo;Details&rdquo; layout</td>
<td>Columns can be shown in all layouts</td>
</tr>
<tr>
<td>Only &ldquo;SmallIcon&rdquo; and &ldquo;LargeIcon&rdquo; size supported</td>
<td>Images can be of arbitrary size per layout.</td>
</tr>
<tr>
<td>Image size is static</td>
<td>Images are scaled and centered smoothly when necessary while keeping their respective aspect ratios</td>
</tr>
<tr>
<td>Column header images are not supported</td>
<td>Both ImageList and custom Image instances can be set on column headers</td>
</tr>
<tr>
<td>Custom comparer for sorting has to be implemented from scratch</td>
<td>Custom comparer can be inherited from BetterListView&rsquo;s default comparer to extend its functionality; Any custom IComparer is supported as well</td>
</tr>
<tr>
<td>Sub-item images very limited; Usable only via WinAPI with limitations in size and color depth</td>
<td>Images for sub-item fully supported (both ImageList and custom Image instances)</td>
</tr>
<tr>
<td>Check boxes do not have animation effect like the standard control</td>
<td>Check boxes are animated when used with mouse or keyboard the same way as the CheckBox control</td>
</tr>
<tr>
<td>Searching with keyboard only on first column and limited to string prefixes</td>
<td>Keyboard searching can be used on columns of choice and the searching behavior can be further adjusted (any substring, character-based or word-based search)</td>
</tr>
<tr>
<td>Only simple item tooltips supported</td>
<td>Automatic and customizable tooltips on items, sub-items and columns are supported</td>
</tr>
<tr>
<td>Can scroll to just one item</td>
<td>One or several items can be specified to be scrolled into view</td>
</tr>
<tr>
<td>Vista-look only with WinAPI extension</td>
<td>Visual elements are used by default</td>
</tr>
<tr>
<td>No Drag &amp; Drop item highlighting</td>
<td>Items under cursor are properly highlighted during dragging; Highlighting can be switched off for selected items</td>
</tr>
</table>
<h2>Missing features:</h2>
<table cellspacing="0">
<tr>
<th>Regular .NET ListView Control</th>
<th>Better ListView control</th>
</tr>
<tr>
<td>No empty text support (watermark text when ListView is empty)</td>
<td>Added support; Empty text for empty ListView is supported; You can give hint to your users now</td>
</tr>
<tr>
<td>No inbuilt sort</td>
<td>Added inbuilt sort support; Zero-code sorting</td>
</tr>
<tr>
<td>No auto-scroll when reordering items</td>
<td>Added; Auto-scroll speed can be adjusted</td>
</tr>
<tr>
<td>No auto-scroll when reordering columns</td>
<td>Added; Auto-scroll speed can be adjusted</td>
</tr>
<tr>
<td>No inbuilt item/column reordering</td>
<td>Added item/column reordering support; Zero-code reordering</td>
</tr>
<tr>
<td>No auto-scroll when dragging an item</td>
<td>Added; Auto-scroll speed can be adjusted</td>
</tr>
<tr>
<td>Complex data binding not supported</td>
<td>Support for complex data binding; Any IList, DataSet, DataTable or several other types can be bound directly to the Better ListView</td>
</tr>
</table>

View File

@@ -0,0 +1,191 @@
<h1>Licensing &amp; pricing for Better ListView</h1>
<p class="section-info">Purchase the ideal replacement component for .NET ListView.</p>
<ul id="buy-nav" class="nav">
<li><%= link_to("Buy new licenses", {}, :class => "current") %></li>
<li><%= link_to("Renew subscription", {}) %></li>
</ul>
<div id="buy-panels">
<div class="panel">
<% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%>
<%= hidden_field_tag "CID", Settings.order.cid %>
<%= hidden_field_tag "CLR", Settings.order.clr %>
<%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %>
<table cellspacing="0">
<tr>
<th colspan="4">Single developer licenses</th>
</tr>
<tr>
<td>Single developer license with 1 year subscription</td>
<td class="price">$345</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300056", false, :id => "support-single" %>
<%= label_tag "support-single", "Add 1 year priority support ($99)" %>
</td>
<td class="buy"><%= buy "18300042" %></td>
</tr>
<tr>
<td>Single developer license with source code and 1 year subscription</td>
<td class="price">$795</td>
<td class="buy"><%= buy "18300043" %></td>
</tr>
<tr>
<th colspan="4">5 developers licenses</th>
</tr>
<tr>
<td>5 developer license with 1 year subscription</td>
<td class="price">$995</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300057", false, :id => "support-5" %>
<%= label_tag "support-5", "Add 1 year priority support ($295)" %>
</td>
<td class="buy"><%= buy "18300044" %></td>
</tr>
<tr>
<td>5 developer license with source code and 1 year subscription</td>
<td class="price">$1995</td>
<td class="buy"><%= buy "18300045" %></td>
</tr>
<tr>
<th colspan="4">Site licenses - use at 1 site (office or building)</th>
</tr>
<tr>
<td>Site license with 1 year subscription</td>
<td class="price">$1995</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300058", false, :id => "support-site" %>
<%= label_tag "support-site", "Add 1 year priority support ($495)" %>
</td>
<td class="buy"><%= buy "18300046" %></td>
</tr>
<tr>
<td>Site license with source code and 1 year subscription</td>
<td class="price">$3995</td>
<td class="buy"><%= buy "18300047" %></td>
</tr>
<tr>
<th colspan="4">Enterprise license - use world-wide at unlimited sites</th>
</tr>
<tr>
<td>Enterprise license with source code and 1 year subscription</td>
<td class="price">$8995</td>
<td class="addon">
<%= check_box_tag "PRODUCTID", "18300059", false, :id => "support-enterprise" %>
<%= label_tag "support-enterprise", "Add 1 year priority support ($995)" %>
</td>
<td class="buy"><%= buy "18300048" %></td>
</tr>
</table>
<% end -%>
</div>
<div class="panel">
<% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%>
<%= hidden_field_tag "CID", Settings.order.cid %>
<%= hidden_field_tag "CLR", Settings.order.clr %>
<%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %>
<table cellspacing="0">
<tr>
<th colspan="4">Single developer licenses</th>
</tr>
<tr>
<td>Renew single developer 1 year subscription</td>
<td class="price">$138</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300056", false, :id => "renew-support-single" %>
<%= label_tag "renew-support-single", "Add 1 year priority support ($99)" %>
</td>
<td class="buy"><%= renew "18300049" %></td>
</tr>
<tr>
<td>Renew single developer 1 year subscription with source code</td>
<td class="price">$318</td>
<td class="buy"><%= renew "18300050" %></td>
</tr>
<tr>
<th colspan="4">5 developers licenses</th>
</tr>
<tr>
<td>Renew 5 developer 1 year subscription</td>
<td class="price">$398</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300057", false, :id => "renew-support-5" %>
<%= label_tag "renew-support-5", "Add 1 year priority support ($295)" %>
</td>
<td class="buy"><%= renew "18300051" %></td>
</tr>
<tr>
<td>Renew 5 developer 1 year subscription with source code</td>
<td class="price">$798</td>
<td class="buy"><%= renew "18300052" %></td>
</tr>
<tr>
<th colspan="4">Site licenses - use at 1 site (office or building)</th>
</tr>
<tr>
<td>Renew site license 1 year subscription</td>
<td class="price">$798</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300058", false, :id => "renew-support-site" %>
<%= label_tag "renew-support-site", "Add 1 year priority support ($495)" %>
</td>
<td class="buy"><%= renew "18300053" %></td>
</tr>
<tr>
<td>Renews site license 1 year subscription with source code</td>
<td class="price">$1598</td>
<td class="buy"><%= renew "18300054" %></td>
</tr>
<tr>
<th colspan="4">Enterprise license - use world-wide at unlimited sites</th>
</tr>
<tr>
<td>Renew enterprise license 1 year subscription with source code</td>
<td class="price">$3598</td>
<td class="addon">
<%= check_box_tag "PRODUCTID", "18300059", false, :id => "renew-support-enterprise" %>
<%= label_tag "renew-support-enterprise", "Add 1 year priority support ($995)" %>
</td>
<td class="buy"><%= renew "18300055" %></td>
</tr>
</table>
<% end -%>
</div>
</div>
<div class="licenses-info">
<div class="block">
<p>All licenses are:</p>
<ul class="common">
<li>Life-time (non-expiring)</li>
<li>Royalty free</li>
</ul>
</div>
<div class="block">
<p>Subscription gets you:</p>
<ul class="common">
<li>Support</li>
<li>Updates</li>
</ul>
</div>
<div class="block last">
<p>Priority support gets you:</p>
<ul class="common">
<li>Guaranteed 24 hour reply</li>
<li>Help with implementing new features and extending Better ListView</li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,9 @@
<div class="screenshots">
<% reset_cycle %>
<% for screenshot in @product.screenshots.all_ordered %>
<% c = cycle("odd", "even") %>
<% if c == "odd" %><div class="screenshot-row"><% end %>
<div class="<%= c %>"><%= screenshot_link(screenshot, :version => :thumb_big) %><strong><%= truncate(screenshot.label, 40) %></strong></div>
<% if c == "even" || @product.screenshots.all_ordered.last == screenshot %></div><% end %>
<% end %>
</div>

View File

@@ -0,0 +1,91 @@
<h2>The story behind Better Listview</h2>
<p>Hi, my name is Jiri Novotny and Im the founder of Dextronet.com, a small software startup that operates ComponentOwl.com among other things.
Me and my team think of ourselves as independent software vendors (or mISV).</p>
<p>Surprise surprise - as it is with most independent components today, we did not originally actually intended to create Better ListView.</p>
<p>Our flagship product is Swift To-Do List, a desktop task management software. The old version of Swift To-Do List has been written in Visual Basic 6
which has many limitations, so weve decided to make a total rewrite in VB.NET and C#. The development started in July 2009.</p>
<p>Because Swift To-Do List is highly list-centric product (as the name suggests ), it soon become apparent that we will need excellent ListView control.
The ListView control included in .NET just didnt cut it. Not only its features are very limited, but there are braincracking bugs and strange behavior
in lots of cases. In fact, the default .NET ListView was so bad, that Ive oftentimes wished I could just use the ListView included in VB6
it has at least behaved mostly correctly.</p>
<p>So, because we couldnt use the default .NET ListView, I began searching for a replacement ListView
control. My requirements were actually not very demanding - I wanted a ListView control that looked and
behaved similarly as the one used in Windows Explorer. </p>
<p>Unfortunately, Ive soon discovered that in reality, I want lots of things that are not taken for granted in any ListView control that Ive found.
My requirements for a usable .NET ListView control are:</p>
<ul class="common">
<li>It must either inherit from native ListView or mimick it perfectly</li>
<li>It must use system theme seamlessly and not have some weird inconsistent custom look</li>
<li>It must support sub-item images flawlessly</li>
<li>It must have excellent drag &amp; drop support for item reordering</li>
<li>It must have perfect implementation of selection and drag-selection</li>
<li>It must support 3 different context menus: For items, column headers, and empty space</li>
<li>Multi-column sort</li>
<li>Must not be part of some huge control pack that I need to bundle with my app</li>
<li>Must be light-weight, fast and optimized</li>
<li>Must have all bugs and strange behavior of .NET ListView fixed</li>
</ul>
<p>There was also lot of nice-to-have things that Ive looked for, like:</p>
<ul class="common">
<li>Watermark text that is shown when the ListView is empty</li>
<li>Column reordering with auto-scrolling</li>
<li>100% managed code</li>
<li>... co mame dal? Napady! ...</li>
</ul>
<p>I did not want to use any DataGrid-based control, as it cant really replace ListView control it is much harder to manipulate for the user in most
cases, and it doesnt support many things that ListView does. </p>
<p>Swift To-Do List is a mass-market product, so it needed a ListView control that behaved as expected in all cases, no exceptions.
The ListView control used in Windows Explorer is a great model: Because every user knows how to work with Windows Explorer ListView already,
you can leverage that knowledge in your own applications. Your applications will be truly easy to use and learn.</p>
<p>Ive looked over dozen of ListView controls and Im not afraid to name them, because they just dont meet the above criteria.
The controls I looked over included ListView from SoftGroup, three different open source ListView controls from CodeProject,
ListView from Lidor systems, Grid and TreeView-Grid hybrid from DevExpres, WinListView from Infragistics, Ive also looked at all
ListView controls to be found at CodeGuru and ComponentSource and more basically everything that I could Google and everything
from all well-known (or not so well known) component providers.</p>
<p>I was disappointed with every single of these controls. Not one of them met my criteria.</p>
<p>Believe me, I *wanted* to find the perfect ListView control after all, I desperately needed it so we could use it in our own product.
But what Ive found during my extensive research? Nothing. Null. Nilch. Nada. Zero. My heart was broken. The dreams of our awesome Swift To-Do List 7
product started to shatter, because we needed an adequate ListView control first. When it comes to user experience, we simply couldnt settle
for anything less than great.</p>
<p>But we havent given up. The solution? To create our own ListView control. A Better ListView control. It was not originally intended to be
a product on its own, but when it has been finished, it was so good that it would be a sin to keep it selfishly just for ourselves.
So weve started selling it.</p>
<p>When we started building our own better ListView control, we wanted it to inherit from System.Windows.Forms.ListView at first.
Weve tried our best, but some of the bugs of .NET ListView were simply impossible to fix, even with ridiculous hacks. However, luck has shined upon us. </p>
<p>Weve met Libor Tinka, a genius C# developer with extensive experience with not just programming in general, but specifically Windows
control development as well. Hes the author and sole developer of ImagingShop, a powerful digital photography processing desktop application
that includes many of his custom controls, and lots of hardcore mathematics and unique algorithms (It has over 220k lines of code in total!).
That guy <strong>really</strong> is a genius and let me tell you, the code he writes is just beautiful. Hes an artist.</p>
<p>When weve asked Libor to create a better ListView control for us, he accepted the challenge. </p>
<p>(By the way, it might look easy at first, but implementing your own ListView control is extremely difficult, daunting and complicated task
there are so many corner cases in the controls behavior that it will make your brain want run away.)</p>
<p>Weve worked very closely with Libor during the intensive development process. Fast forward 10 months into the future - Better ListView is done,
and Libor is an integral part of our team. We still work together as we support and constantly enhance BetterListview.</p>
<p>Better ListView is now used not just in Swift To-Do List, but also in Libors own product ImagingShop, so we are trully eating our own dog foot.
This is your <strong>guarantee</strong> that we will <strong>not</strong> stop supporting Better ListView, fixing bugs and implementing new features
its the <strong>core</strong> and <strong>heart</strong> of our own desktop software products after all. We walk the talk.</p>
<p>If Better ListView existed before, I know I would be absolutely positively <strong>thrilled</strong> about it.
And so I hope that you are thrilled about it now that youve found it.</p>
<p>Any questions or comments? I would love to get them. Contact me at novotny@dextronet.com

View File

@@ -0,0 +1,4 @@
"product_code","code","name","tab","position"
"better-listview","story","Story",1,3
"better-listview","screenshots","Screenshots",1,3
"better-listview","pricing-licensing","Pricing &amp; Licensing",0,1
1 product_code code name tab position
2 better-listview story Story 1 3
3 better-listview screenshots Screenshots 1 3
4 better-listview pricing-licensing Pricing &amp; Licensing 0 1