Click here to Skip to main content
15,885,875 members
Articles / Desktop Programming / MFC
Article

CP<sup>2</sup> Universal Gui LibrarY (UGLY) Project - MAIN PAGE

Rate me:
Please Sign up or sign in to vote.
2.05/5 (31 votes)
3 Sep 20035 min read 286.2K   608   26   186
A GUI library collaborative project.

A Code Project Project by Bob's loyal subjects
What is CP2?
Code Project Project is a collaborative effort, first brought forward by Joel Holdsworth and later Jamie Hale, to produce quality software by all and for all CodeProject users, by utilizing their collective knowledge and expertise in the software development profession. If you have general questions or comments pertaining to CP2, please direct them to Jason Henderson.

All Code Project Projects are works in progress. Not all pages may be available until progress has been made in that area. Please do not pass judgement on this project or it's article series until its completion. Thank you.

CP2 Universal Gui LibrarY (UGLY) Project

 

***NOTE:  This project is in the process of moving to a new location.***

It will no longer be affiliated with CodeProject, and it will have a new name - FLUID UI Toolkit.

Its new location is http://www.fluiduitoolkit.com.

You are welcome to join this project.  To sign up, please register on the forums.

Critical Documents:
critical_documents.zip

Project Leader:
Justin Dunlap

Project Abstract

The UGLY Library - Universal Graphical User Interface LibrarY is a project aimed at providing a comprehensive, modern, and innovative suite controls and support classes to the user interface designer. These classes will allow them to access new, easy to use controls and UI layout options such as user configurable menus and toolbars, floating windows, etc.

Scope

To start with, the project will be aimed at getting a suite of standard windows controls together that will be drop-in replacements for the existing ones. These replacements will have extended functionality and drawing capabilities - the type of which will be dependent on the control type.

Starting in this way, we can keep the project small and build from there, we need to see how enthusiastic people are going to be and small bite sized chunks will be easier to digest.

Skill Set

It looks like the kind of people we will need are those who are familiar with developing controls under Windows. I myself have quite some experience in this area. We are implementing the controls in both C# (for .NET) and C++ (for Win32), so we need people with experience in one or both of these languages.

Architecture

Since the project consists of controls/components, it should be fairly easy to divide it up into sub-sections.  Besides the control, there will be:

  • A base framework
  • A base control class(es)
  • An example test application (one or more)  - to start with, I suggest a bitmap editor (with a bit more features than Paint) and a rich text editor (like WordPad).

We will have a DLL for the framework, and one for the basic controls.  For the special controls, a DLL should be created for each class of controls - one for all special listview-related controls, one for all special buton-related controls, etc.

Some of the areas we will want to provide enhanced support for are: 

  • Printing functionality - controls should have a GetRendering() method that gets a rendering of the control.
  • Owner drawn/skinnable - through an advanced rendering/behavior subsystem.
  • Better UI

The User's view

As the intended users will be application programmers, we need decent documentation on the classes and the API's. Keeping everything as consistent as possible across all the classes is a must. To begin with, we will simply define the interfaces in XML, to be viewed with the XSLT transform I created for the purpose.  Eventually, though, we will probably want to use an automatic documentation system (I am trying to find one for use with C++).

We're aiming here to make the target audience's life as easy as possible. You want a spin control that increments in 0.01 units? You got it! etc.

A list of controls we may support

STANDARD

NON-STANDARD

UNCONVENTIONAL

  • treeview
  • listview
  • listbox
  • combobox
  • fontcombo
  • ip address box
  • masked edit control
  • property page
  • grid control
  • button
  • toolbar
  • rebar
  • commandbar
  • richedit control
  • MDI tabs
  • chart
  • date picker
  • calendar
  • (marquee)
  • slider
  • tab page
  • explorer treeview
  • explorer listview
  • progress bar
  • syntax highlight numbered text control
  • property grid
  • statusbar
  • updown - spin?
  • scrollable viewport
  • monthview
  • ruler
  • commandbar
  • treelistview
  • listbar (outlook-style)
  • toolbox listbar
  • clock
  • dial
  • range picker
  • skinnable popup - for balloons, etc.
  • data navbar
  • collapsible panel
  • color picker bar - functionality is like scrollbar
  • color palette
  • color picker gradient - round, square, etc
  • auto-complete textbox
  • image-calendar
  • time-scheduler
  • topiclist
  • imagelistview
  • appbar
  • wizard ctl
  • advanced message box
  • analog meter control
  • peak-meter
  • number ticker (like odometer)
  • colorcombo
  • lcd display
  • dockable / pinnable dialogs
  • LED controls
  • enhanced MessageBox
  • radio dial/wheel
  • dockable slide panels/drop down lists
  • maybe a door control
  • book pages control
  • a control like the flexible PowerBuilder datawindow
  • a sticky-note control or undockable thumbtacks (stick a note anywhere on the window and move it anywhere)
  • a rolodex control
  • file cabinet control (user can lable outside and drag and drop things in and out)
  • <lcd a="" light="" panel="" (ever="" play="" with="" lite-brite?)="" li="" <="">
  • flip switches (like a light switch)
  • springy Slinky-like dropdown list control (release and it springs back up)
  • slot machine lever control

I am especially interested in a commandbar and an image thumbnail viewer.

History

June 12 2003 - Posted

<Other updates - were not kept track of>

July 31 2003 - Updated by Justin Dunlap - did a full update.

Other CP2 projects

Defect Tracking and Source Control Project
Scripting Framework Project


Group projects like this one cannot succeed without the help of dedicated individuals. If you are interesting in volunteering your time and expertise to this project, please post a message in the VOLUNTEERS thread on this page and the Project Leader will contact you for confirmation.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
My main goal as a developer is to improve the way software is designed, and how it interacts with the user. I like designing software best, but I also like coding and documentation. I especially like to work with user interfaces and graphics.

I have extensive knowledge of the .NET Framework, and like to delve into its internals. I specialize in working with VG.net and MyXaml. I also like to work with ASP.NET, AJAX, and DHTML.

Comments and Discussions

 
GeneralRe: Serious doubt about this project! Pin
J. Dunlap30-Jul-03 12:52
J. Dunlap30-Jul-03 12:52 
GeneralRe: Serious doubt about this project! Pin
Jim Crafton30-Jul-03 7:17
Jim Crafton30-Jul-03 7:17 
GeneralRe: Serious doubt about this project! Pin
Anonymous30-Jul-03 15:01
Anonymous30-Jul-03 15:01 
GeneralRe: Serious doubt about this project! Pin
J. Dunlap30-Jul-03 15:42
J. Dunlap30-Jul-03 15:42 
GeneralRe: Serious doubt about this project! Pin
Anonymous30-Jul-03 16:24
Anonymous30-Jul-03 16:24 
GeneralRe: Serious doubt about this project! Pin
Jim Crafton30-Jul-03 17:15
Jim Crafton30-Jul-03 17:15 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs30-Jul-03 22:09
Joey Bloggs30-Jul-03 22:09 
GeneralRe: Serious doubt about this project! Pin
Jim Crafton31-Jul-03 3:12
Jim Crafton31-Jul-03 3:12 
Adding multithreading support to a GUI framework is a major undertaking. It is non trivial, and one could argue that the amount of work spent making the whole thing support this for the general case is so much work that it might not be worth it. Notice I say *might*, because you could also argue that there are benefits as well.
In my own experience, multithreading usage doesn't come up that often, and when it does, I have found that posting events back to the main UI thread works quite nicely to prevent weird read/write lock issues. In other words, instead of calling a method like MyDataModel::removeItem() directly from another thread, have the thread post and event that gets handled in the main UI thread's event queue and when it's handled then call the removeItem() method.

Just a thought.

Another thought is how well does the underlying Windowing system support multithreading in the GUI. As I understand it, WIn32, X11, etc, do not *really* support multithreading all that well. That's simply not how they were designed. To my knowledge, BeOS is the only GUI that was designed to be pervasively multithreaded from the ground up, and fully supports it.

¡El diablo está en mis pantalones! ¡Mire, mire!

Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 3:52
Joey Bloggs31-Jul-03 3:52 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 4:18
Joey Bloggs31-Jul-03 4:18 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs30-Jul-03 22:11
Joey Bloggs30-Jul-03 22:11 
GeneralRe: Serious doubt about this project! Pin
Jim Crafton31-Jul-03 3:17
Jim Crafton31-Jul-03 3:17 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 3:24
Joey Bloggs31-Jul-03 3:24 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 3:28
Joey Bloggs31-Jul-03 3:28 
GeneralRe: Serious doubt about this project! Pin
Jim Crafton31-Jul-03 3:49
Jim Crafton31-Jul-03 3:49 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs30-Jul-03 23:12
Joey Bloggs30-Jul-03 23:12 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 1:39
Joey Bloggs31-Jul-03 1:39 
GeneralRe: Serious doubt about this project! Pin
Jim Crafton31-Jul-03 3:24
Jim Crafton31-Jul-03 3:24 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 4:02
Joey Bloggs31-Jul-03 4:02 
GeneralRe: Serious doubt about this project! Pin
Jim Crafton31-Jul-03 4:19
Jim Crafton31-Jul-03 4:19 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 5:05
Joey Bloggs31-Jul-03 5:05 
GeneralRe: Serious doubt about this project! Pin
Nemanja Trifunovic31-Jul-03 6:16
Nemanja Trifunovic31-Jul-03 6:16 
GeneralRe: Serious doubt about this project! Pin
Joey Bloggs31-Jul-03 13:55
Joey Bloggs31-Jul-03 13:55 
GeneralRe: Serious doubt about this project! Pin
Nemanja Trifunovic1-Aug-03 5:14
Nemanja Trifunovic1-Aug-03 5:14 
GeneralRe: Serious doubt about this project! Pin
J. Dunlap31-Jul-03 15:00
J. Dunlap31-Jul-03 15:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.