From owner-freebsd-hackers Thu Apr 11 22:13:18 1996 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id WAA21553 for hackers-outgoing; Thu, 11 Apr 1996 22:13:18 -0700 (PDT) Received: from rover.village.org (rover.village.org [204.144.255.49]) by freefall.freebsd.org (8.7.3/8.7.3) with SMTP id WAA21531 for ; Thu, 11 Apr 1996 22:13:04 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by rover.village.org (8.6.12/8.6.6) with SMTP id XAA04252; Thu, 11 Apr 1996 23:10:26 -0600 Message-Id: <199604120510.XAA04252@rover.village.org> To: Terry Lambert Subject: Re: Lesstif (motif compatible) package. Cc: jkh@time.cdrom.com (Jordan K. Hubbard), alk@Think.COM, hackers@freefall.freebsd.org In-reply-to: Your message of Thu, 11 Apr 1996 19:22:47 PDT Date: Thu, 11 Apr 1996 23:10:26 -0600 From: Warner Losh Sender: owner-hackers@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk : Wrongo. I'm going to say that using custom frobs is bad, and that : if you need a triangular button, your user interface design is bad. : If you succeed in creating your little triangle, where in the users : previous training does the information on how to use it come from? Hmmm. We found in OI that when you customized the toolkit (as a user) then you would be able to 1) reuse code all over the place, and 2) enforce more easily style guides built on top of OSF/Motif. Many companies have additional rules based on their business practices that work well in code. If you have 50 screens for doing, say, stock market things, then having one entry field that knows how to deal with the various conventions of price in all of them is a good thing, rather than 50 slightly different ones.... The "I gotta subclass everything, because I have to show how big an OO (or C++) dick I have" is clearly wrong, but used wisely customized widgets can be a big win. I know that I eliminated about 1000 lines of code from a 5k line resource editor in the builder by making subclasses that groked the basic concept of setting attributes to values, then deriving subclasses from them that groked other things, displayed things differently, etc. This was a big win and let some fairly powerful extensions be written that I hadn't originally envisioned but turned out to be easy in the framework provided. I really can't see how you'd think that training would be higher when you wisely subclass. Warner