Click here to Skip to main content
15,881,248 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
INTRODUCTION:

I am inexperienced software developer who had a task to implement informational system all on my own. Since the deadline was short, I was unable to design UI to provide convenient experience for the user. I had no one to turn to for help either but have managed to somehow “finish” the job on time. Since only one user uses the software at the moment, there are no complaints, but UI really needs to be improved fast and this is where this community can help.

Since this is my first post here for this kind of a problem, I will provide as much detail as possible. Feel free to edit this post to fit the criteria of this site.

In case it is important, I have used C++, ResEdit[^] and pure WinAPI to create UI.

Also take into account that English is not my native, so I apologize in front for any spelling and grammar mistakes I make.

THE PROBLEM:

The main task is to optimize the space UI occupies on the desktop, and provide pleasant user experience during data entry. I gave my best to do this, but I just consider my work to be horrible.

RELEVANT INFORMATION:

Here[^] is the dialog box that was designed to collect data that will be entered into database.

IMPORTANT: Rectangles in the images are not the part of the UI, they are added in Paint, so I can have an easier job explaining my problem.

Controls in the orange rectangle have the task to collect the data about location of a building. Combobox is used for county, edit boxes for street, street number, x and y coordinate. All these controls are doing a fine job, but visually they are grouped badly in my opinion as they take up too much space and don’t offer pleasant user experience during data entry.

Controls in the red rectangle are used to collect general information about the building. Here I must mention that treeview control does an excellent job for my needs and I would prefer if I could keep it. Comboboxes and edit controls also do their job well, but they take up too much space and badly organized which worsens the user experience in my opinion.Two radio buttons should represent “Yes”, “No” and “Unknown”.

So far, “the left side” of the dialog box is just “too big” and slightly unpleasant to work with, but it might “pass” for now. My goal for this side would be to optimize space and to reorganize them in such a way user can have easier task with entering data.

It is the purple rectangle that encloses the most problematic part. Right “off the bat” we can see two problematic sections enclosed in green rectangles, see image[^].

These groups of controls have the same task, to collect yearly data but for two different units of measure ( let us say water consumption for the left side and electrical consumption for the right ). This feature was added at the very end of the project when everything else was already done. I had no time to think of a better solution than the current one. Therefore the only thing that is different is the way application treats the data entered in edit control at the bottom. User must be able to browse, delete or edit the values he entered. Again, I was improvising with this design due to tight deadline and since this feature request came in the last minute.

Here comes another important part: once finishing entering the above described data, user must enter additional data by choosing between left and right radio button, which are in the blue circle at the top ( see the first image above ).

Let us start with the easier case, let us assume user clicked the left radio button in the blue circle. Here[^] is what we get:

IMPORTANT NOTE: The space enclosed in orange rectangle is reserved for hidden controls that will become visible when user chooses right radio button. This leaves only the space in the purple rectangle to work with, because controls in the green circle are used in both cases to ease my programming work.

Edit controls in purple rectangle represent a pair of data user must enter. Something like name and last name. The number of these pairs user enters is unknown so I had to add controls in the green circle to enable user to add ( + button ), delete ( - button ) , edit ( E button ) and browse through entries ( arrows ). This is really inconvenient for the user.

Now is the time to cover the case when user chooses right radio button:

First, there are two types of data user must enter, see image[^]. Let me first describe the role of the combobox in the purple rectangle: User can chose one of the two values from the droplist, and then the following controls appear, see image[^].

The only difference between first and second choice from the combobox is the extra edit control, marked with the purple rectangle in the image above. Notice again that I am using the same controls for edit, delete, and browsing through data as in previous case, which is marked in red circle. Edit controls are representing complex entry. Something like name, last name, date of birth… Again, the number of entries is unknown, so the situation is similar to the one described when user chooses left radio button, only the data is more complex.

Second, there is the orange rectangle, again see this picture[^].

Controls at the bottom of the rectangle store single entries and are not much of a problem. Perhaps they too can be reordered to provide better user experience. The controls at the top of the orange rectangle are the problem though. Depending on the choice from combobox, there are two cases. First[^] is similar to the ones described earlier.

Again, a pair of values is stored, I don’t know the number of times they will be entered, and again I use the same approach as before. Second[^] simply shows combobox from which user chooses the value.

MY EFFORTS TO SOLVE THIS:

To substitute my "Frankenstein mechanism", I checked WinAPI documentation and code examples for listview control but it doesn’t offer subitem editing and doesn’t allow combobox to be an item.

Currently I am trying to code my own grid control as I believe this would be excellent solution for these cases. All I need to do then is to add support for editing, adding, viewing and deleting the data.

Simply clicking on the listview row and pressing delete would do the trick for deleting, which means I would lose one needless button ( the button in the images ), and edit would be solved as well since user could double click the cell to edit the text. Again, this would lose unnecessary button ( E button in the above images ) and provide intuitive keyboard solution in the spirit of Windows. Seeing all the data is easy as listview has scrollbars. As for adding new data, I still haven’t got a good idea but I could code data entry to start after user presses + for example...

This is the most important problem I need to solve about my UI and I am simply not a match for such a challenge :(

As for conserving space, I got an idea to use tab control and move the three groups of data in the initial dialog box into separate tabs. The inspiration came after reading this MSDN article.[^]

Although I have a concept – moving groups of data into tabs and using grid control instead of my “Frankenstein mechanism” – I still can’t “see he final picture”.

QUESTIONS:

Can you advise me how to redesign my dialog box and its data entry mechanics so I don’t scream around in pain around the room each time I take a look at it?

I know I might be asking a lot, but please help me as I have tried to visualize the solution myself but just am not up to it. :(

If further info is required, or I need to clear some part of my post, leave a comment and I will reply as soon as possible.

Thank you for your help.

Best regards.
Posted
Comments
Sergey Alexandrovich Kryukov 29-Oct-14 20:31pm    
I know a very good online manual of design, short, irregular, but striking in its simplicity and unclouded views of things. I can understand your language just a bit. Is it possible that you could read and understand it in Russian? At least I could reference some pieces.

Yes, I must agree that the look of your screenshot is horrible. Most repelling flaws, spoiling some 95% of the picture, are not related to your question. As you probably know me just a little bit, I'm just curious: can you guess what are they? Just two? I cannot spend much time at this moment, but I'll read it all a bit later and try to reply.

Generally, property sheets is a good idea...
Just one thing: I don't want to discuss C++ and MFC and pure Windows API UI. I know pretty well how it works, and that's why I consider it really crazy, to develop real-life UI using them. I would better limit discussion to pure design, which is always possible to implement, one way or another...

—SA
AlwaysLearningNewStuff 29-Oct-14 21:09pm    
I know a very good online manual of design, short, irregular, but striking in its simplicity and unclouded views of things. I can understand your language just a bit. Is it possible that you could read and understand it in Russian? At least I could reference some pieces. Russian and Serbian share some similarities but in the long run I doubt I could understand it. Still, it is worth a shot. I might find someone who speaks Russian to try and translate it...

Yes, I must agree that the look of your screenshot is horrible. Most repelling flaws, spoiling some 95% of the picture, are not related to your question. As you probably know me just a little bit, I'm just curious: can you guess what are they? Just two? I cannot spend much time at this moment, but I'll read it all a bit later and try to reply. No I can't, but those group boxes and that map are so unnecessary that it drives me insane...

Generally, property sheets is a good idea...
Just one thing: I don't want to discuss C++ and MFC and pure Windows API UI. I know pretty well how it works, and that's why I consider it really crazy, to develop real-life UI using them. I would better limit discussion to pure design, which is always possible to implement, one way or another...
Couldn't agree more. I have started learning C# and .NET but I don't have enough skill to rewrite the graphical part of this app. Once I get those skills I will never "fight" winapi again :)

We can discuss the concept and design, there is no reason for both of us to suffer with winapi :)

Best regards :)
Sergey Alexandrovich Kryukov 29-Oct-14 22:37pm    
The most horrible thing is background. Get rid of it. Map should be separate, text and control separate. No ifs no buts. Yes, this is 100% obvious. Second horrible thing is font. First of all, forget about ALL-CAPS style, once and forever (maybe, only some logo can carry it, just a bit). Don't get into the opposite: many fonts. 1-3, no more. All right, I'll try to find some more time soon and understand your problems...
—SA
enhzflep 31-Oct-14 19:07pm    
SA's suggestion of property-sheets is one I would make, in conjunction with following some of the ideas set-out in the Layout guide I linked earlier.
The property sheet allows the user to concentrate on the data that's relevant any any moment in time, while the layout guide will aid in the positioning of controls within the individual pages of a property sheet.

As an extension of the property-sheet idea, you may or may not find the wizard variant of prop-sheets to be a good idea. The important difference between the 'plain' variety and the 'wizard' variety is the way one navigates between individual pages.

While the normal type's pages may be navigated in a random manner via a tabbed interface, the wizard variant forces the user to access the pages in an application-defined order.

This gives you a number of advantages including, but not limited to:
0) reducing the number of on-screen controls at any time.
1) an easy mechanism to ensure all required data has been entered before moving on to the next section.
2) a way by which you can guide (force) the user through the expected/required sequence of steps.

In win7:
Setting the time/date (double-click the clock) uses a plain property-sheet, while
Adding a new wireless network (Control Panel\Network and Internet\Manage Wireless Networks) uses the wizard variety.

More info:
About Property Sheets
How to Create Wizards
AlwaysLearningNewStuff 31-Oct-14 20:03pm    
I had those options in mind ( property sheet and wizards ). Being inexperienced with these, I don't know if I could do this without them by creating them on my own in ResEdit... Thanks for the tips, if you get any other ideas please leave a comment. I have thrown in a bounty on UX SE so maybe I will get lucky. Maybe something will popup... Best regards.

1 solution

As you understand, I hardly can design it all for you, but I'll try to give you some ideas, which cannot be comprehensive.

To me, it looks like your main problem is to represent the tree of choices which makes some controls relevant for some subset of states and irrelevant to others. To handle it, you are trying to make control properties dynamically dependent on others, say, make them hidden or showing. Apparently, you have trouble seeing the whole picture and picturing your workflow. Additionally, I can add a number of other properties. For example, if you change selection in some control, and that control becomes inaccessible and then accessible again, the previous selection should be correct. Also, you apparently have the problem of using the space. This is another problem, but it should be solved on the second step, in connection with the first problem. This is how I managed to generalize your problems. If I'm not covering something, we can discuss is later; for now, let's focus on main things.

First of all, you need to create your design workflow. What can you do? I would suggest something like that:
  • I guess you already have all the detail of your data structure. You need to review it, to see what depends on what; in your case, you need to pay special attention for the master-detail relationships.
  • Analyze the constraints defined by the application problem but not defined by the data structure. Here, you need to analyze such cases as "if X is selected, Y is irrelevant", and the like.
  • Then you need to make the data structure onto your view structure. Basically, you need to decide what would you need to show where, taking into account all of the above.
  • Define primary layout. Be ready to change it later, so use well-maintainable techniques of prototyping/development.
  • Decide on the controls to be used.
  • Balance content in the window. Remember that empty space is nearly as important as the occupied place.


You will need to understand and use some basic principles. There are many different considerations you need to take into account; let's consider only those immediately related to your present problem:
  1. The principle I call "one screen is always enough". Even if in practice this is not exactly so (so many people want to have bigger and even bigger screen), you cannot do anything with that. It's most productive to assume some model of a customer who obtained the monitor of a perfect size. This person needs to see only on screen at a time. If presentation of your data needs more, you need to hide some data. Remember: you are hiding all this data not because you have no more room on screen, but because customer does not really want to see it all.
  2. Controls should not be hidden/shown, they should overlap. This is harder to explain not having an example, but let's look at your choice between "Гидротермална" and "Литогеотермална". If I'm not much mistaken, you want to show some controls if one radio button is selected, and some other control is another one is selected. (If not, I think you are trying to do it somewhere else; correct me). What are you going to do?

    If you hide one piece and show another one, you will get ugly empty space. If you move some content to fill in empty space, it will be even worse. This is related to another principle I'll discuss in another point, but also understand this: the user don't want anything to move without one's direct order — this is not arcade!

    Therefore, you will need to have different panels overlapping one over another one. This is normal. There are different functional styles of doing so.
  3. Use standard controls in an expected way. What would a user expect on selection of a radio button? Almost nothing: radio buttons should form a distinct group (very important its visual separation from other content), this button should be selected, all other one unselected. You can also enable/disable something on this event, minimally change some colors, etc., but you should not move/show/hide anything. The user expects a radio button to be just a radio button. Therefore, radio buttons are not very suitable for switching the content, panels mentioned above. What is suitable? I'll suggest something below.
  4. It does not mean that you should not use non-standard behavior at all. Sometimes you should, but then the control should be non-standard. One example: I once created some control visually resembling an aircraft's rudder control. The user doesn't know what is that at first, but it is associated with some complex motion control or monitoring, say, with 3-6 degrees of freedom; so the user tries it carefully and see that it really controls the motion. How is that related to your case? I saw a map as a background. Yes, you should get rid of it (please see my comment to the question), but what if this is something functional? Then it is something which may need 3D control (X, Y, zoom). If so, look, say, at Google Maps controls. The user should get something which is likely to confirm one's intuitive expectations.

  5. Try to create a "non-linear editor". I borrowed the idea from the field of video editing. It simply means that the user should be able to modify any aspect of the data at any time, without any predefined order. As we are talking about showing/hiding some controls, it means that this might be impossible to do in one step. You will need to steps: chose option or navigate to a different view and then change the control state — two steps, but no more. This is related to the next item.
  6. Single-window UI is the best. This principle, as all of them, has a number of exclusions. However, you probably want "non-linear" editing. It works the best if you put it all in one main window. All other windows should be children, then you can quickly switch them. This is also related to the single-screen principle #1. I don't mean some modal (pop-up) windows, which don't count, but even they should be limited. If a window in in modal state, you cannot change anything else until it is closed.

    You pictures suggest that you plan on several separate windows. Better rethink it.
  7. Let's go back to hiding/showing parts of the UI. Another idea is: "scrolling can only be the last resort". More exactly, this principle is good just for your case, but for some other cases scrolling is the best, in particular, for flow documents. An text or mixed-content document can be scrolled, a survey, a database, but not the window controlling some options and configurations.
  8. Visually separate logical groups of control and watch the edges of rectangular areas. However, be very careful with lines. Generally, you should allow yourself to add any graphical element only if it carry distinct function. The best device for visual separation is empty space.


Now, it's time to consider some control. As I said, you should overlap controls (panels) which you cannot show at the same time. I'll tell you two the very simplest designs doing exactly that. First one is the tab control. Each tap page plays the role of a group of controls which goes to background or foreground. All tab pages overlap, using the same space on your window. This is the natural alternative to your radio buttons, those tabs of a tab control.

The second design is something which you would need to develop yourself: tree view on left (in Western culture), a set of overlapping panels on right. Tree view shows the hierarchy of views shown on right. As you select a tree view item, one or another panel is shown on right. Now, one practical recommendation: what to do if you have only one level of hierarchy. List box? No! Still a tree view of one level. (You will need to disable dotted lines and other unwanted elements.) Why? There are several reasons: Tree view is newer control of Windows, it is better in quality, but nearly as easy in use. More importantly, you have big chances that eventually you will want to add one or two levels of hierarchy; and what, replace the whole control? No, better start with a tree view.

What else? (Oh, unfortunately, I'll never stop writing if I try to be comprehensive…)
I already told you, no background, no ALL-CAPS. Generally, good UI design should not be show-off, it should look nice and easy. Simplicity without primitivism. Not a single detail without purpose. Modest balanced colors and fonts. Be careful, don't rip out the customer's eye.

The "manual" I promised to reference is actually not a reference (but its name is a word play around the word "manual") but a unordered set of thoughts on design. Anyway, very useful. You wanted to give it a shot? Well, you can try: http://www.artlebedev.ru/kovodstvo/sections[^].

To give some idea, please see my translation of just one piece, here: Help Me to Choose A Better Final year Project[^].

—SA
 
Share this answer
 
v5
Comments
AlwaysLearningNewStuff 31-Oct-14 7:19am    
Thank you for your help. I will need time to fully grasp your concepts and read that manual, before officially accepting the answer. Please be patient. I will try and update my post with images of my new design so we can confirm that I understood you right. Until we hear again, best regards.
Sergey Alexandrovich Kryukov 31-Oct-14 11:18am    
I can wait any time, just don't worry about it at all. The point is to provide useful and interesting advice. Unfortunately, I could not make it in a systematic and mature way; those are just irregular notes based on your original post. After some your feedback, we can continue discussion: related aspects, clarifications, etc.
—SA
AlwaysLearningNewStuff 14-Nov-14 19:44pm    
I have learned how to create tabbed dialog box. I am now trying to create editable listview ( with combo boxes and other controls ). If I manage somehow to achieve this, I would successfully implement nearly all of your advices and would be able to update my post with screenshots of my new GUI. Then I could officially accept your answer and vote 5 :)

Hopefully I will be able to succeed in my quest...
Sergey Alexandrovich Kryukov 14-Nov-14 20:05pm    
Wish you the best of luck.
—SA

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900