Microsoft Cloud Authors: Andreas Grabner, Jim Kaskade, Lori MacVittie, Janakiram MSV, Pat Romanski

Related Topics: PowerBuilder, Microsoft Cloud

PowerBuilder: Article

Dancing Checkboxes

Writing a window that will allow you to “set the day of the week”

Normally I write columns about the DataWindow or Appeon. This month though I ran into an interesting little logic problem and when I solved it I realized it was really a nice piece of code so, even though it is not in my normal genre I thought I'd share it.

I was tasked with allowing the user to pick a combination of days of the week with these specifications.

  1. The user may select no more than three days prior to today.
  2. The user may select no more than three days in the future.
  3. The user may not have both prior and future dates in the same group
  4. If there are not three days in the past available in this week then the week "wraps." That is to say, if the day is Monday then you only have Sunday as a past day in the week, but for our purposes Saturday and Friday would be considered past days of the same week.
  5. Repeat rule 4 for future days.

It was actually rules 4 and 5 that gave me fits. If it hadn't been for those rules this would be a straightforward thing. Rules 4 and 5 meant that I had to get really creative. Rules 4 and 5 stem from the fact that this is a means of selecting days for a report. The report may be historical or projected (future). They are only interested in four days at any time. Those four days being the current day and either up to three days in the past or future. In fact they aren't necessarily interested in today. They may only choose last Tuesday - as long as last Tuesday was not farther than three days in the past.

For the purposes of this article I am going to write a window that will allow you to "set the day of the week" so that we can test.

I created a small window and put seven checkboxes thereupon. They were named, predictably, cbx_Sunday, cbx_Monday, cbx_Tuesday, cbx_Wednesday, etc. Each of the checkbox controls were carefully sized to be just a little bit bigger than the text. I put each of them inside a group box that had the text attribute removed so it just looked like a 3D box. Then I aligned them horizontally, see Figure 1.

Here is where the problems with rules 4 and 5 become apparent. If today is Wednesday then everything looks and acts fine. We could have the previous three days selected with no problem. Look at Figure 2.

We are supposing in Figure 2 that today is June 25, 2012. We have Monday checked. Also Sunday is checked and that would be June 24. Sunday and Saturday are both checked and according to our rules they would be June 23 and June 22. However, if you look at Figure 2, does it appear that Saturday and Sunday are in the past? No, of course it doesn't. I found this to be deceptive and prone to user error. Clearly some creativity is required here.

My first idea was to let the checkboxes be moved so that the middle day of the seven was always in the middle. That way the days on the left are always in the past and the days on the right are always in the future. For my first attempt I made all the controls equal size, as big as the biggest, and then it was easy to just move them around.

The problem with this is that the display looked horrible. There was more space between Monday and Tuesday than Wednesday and Thursday. It just didn't look good, see Figure 3.

Compare the space between Wednesday and Thursday to the space between Friday and Saturday. Clearly this is inconsistent. We needed a better idea.

I went back to the original idea of having the controls just a little bit bigger than they needed to be. Now I couldn't use fixed positions for the x coordinate. I needed to generate the x coordinates. That meant that I could start where cbx_Sunday.x is but after that I need to put the second one at cbx_Sunday.x + cbx_Sunday.width + li_some_small_buffer.

To do this I created an instance array of checkboxes (did you know you could do that?). Here is what it looks like:

W_main Instance Variables

checkbox icbx_days[7]

The icbx_days array will hold the days of the week in their proper order. If today is Friday then icbx_days[1] will be the checkbox for cbx_Tuesday. We will handle that in the open event. Let's take a look at the open event, which is the core of this whole thing.

First we need an array that will be the checkboxes in the order in which they will eventually be needed. I named that lcbx.

We can find out the day of the week with the dayNumber function passing today() as an argument. The fourth element of icbx_days should always be today, so we start from there. We set the background color since we want it obvious that is today. After that we set the fourth element (middle) of the instance variable icbx_days to be the checkbox in the local array that is at the day number.

If this isn't clear, go to the listing and look at the four lines under the comment //Today is in the middle. That should make sense to you.

After that there is series of code segments where I decrement the li_index variable, loop it around if needed, then just set the checkbox in the local array to the instance variable. In essence I'm loading the instance array with the checkboxes in the order that I need to display.

You might want to look about halfway down these segments for the comment that says // Now Tomorrow. That's where I start loading the future days.

Finally there is a for-next loop that moves the checkboxes to the proper places.

It is Monday when I wrote this column so if you look at Figure 4 you will see the final result.

// Move the checkboxes to the proper sequence
int li_cbx_x_positions[7], li_index, li_y = 112
long ll_start, ll_delta, ll_count, ll_width

checkbox lcbx[]
lcbx = {cbx_sunday, cbx_monday, cbx_tuesday, cbx_wednesday, cbx_thursday, cbx_friday, cbx_saturday}

// Today is in the middle
li_index = dayNumber(today())
lcbx[li_index].backcolor = rgb(178, 34, 34)
lcbx[li_index].textcolor = rgb(255, 255, 255)

icbx_days[4] = lcbx[li_index]

// Let's do yesterday
li_index --
if li_index < 1 then li_index = 7
icbx_days[3] = lcbx[li_index]

// Now the day before yesterday
li_index --
if li_index < 1 then li_index = 7
icbx_days[2] = lcbx[li_index]

// Now the day before that
li_index --
if li_index < 1 then li_index = 7
icbx_days[1] = lcbx[li_index]

// Now tomorrow
li_index = dayNumber(today()) + 1
if li_index > 7 then li_index = 1
icbx_days[5] = lcbx[li_index]

// Now tomorrow
li_index ++
if li_index > 7 then li_index = 1
icbx_days[6] = lcbx[li_index]

// Now the last day
li_index ++
if li_index > 7 then li_index = 1
icbx_days[7] = lcbx[li_index]

//Now we move them to the right places
ll_delta = 30
ll_start = cbx_sunday.x
ll_width = cbx_wednesday.width

for ll_count = 1 to 7
icbx_days[ll_count].move(ll_start, li_y)
ll_start += icbx_days[ll_count].width + ll_delta

Download source code here.

More Stories By Richard (Rik) Brooks

Rik Brooks has been programming in PowerBuilder since the final beta release before version 1. He has authored or co-authored five books on PowerBuilder including “The Definitive DataWindow”. Currently he lives in Mississippi and works in Memphis, Tennessee.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.

@ThingsExpo Stories
SYS-CON Events announced today that Embotics, the cloud automation company, will exhibit at the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Embotics is the cloud automation company for IT organizations and service providers that need to improve provisioning or enable self-service capabilities. With a relentless focus on delivering a premier user experience and unmatched customer support, Embotics is the fas...
In an era of historic innovation fueled by unprecedented access to data and technology, the low cost and risk of entering new markets has leveled the playing field for business. Today, any ambitious innovator can easily introduce a new application or product that can reinvent business models and transform the client experience. In their Day 2 Keynote at 19th Cloud Expo, Mercer Rowe, IBM Vice President of Strategic Alliances, and Raejeanne Skillern, Intel Vice President of Data Center Group and ...
Virgil consists of an open-source encryption library, which implements Cryptographic Message Syntax (CMS) and Elliptic Curve Integrated Encryption Scheme (ECIES) (including RSA schema), a Key Management API, and a cloud-based Key Management Service (Virgil Keys). The Virgil Keys Service consists of a public key service and a private key escrow service. 

Data is the fuel that drives the machine learning algorithmic engines and ultimately provides the business value. In his session at Cloud Expo, Ed Featherston, a director and senior enterprise architect at Collaborative Consulting, will discuss the key considerations around quality, volume, timeliness, and pedigree that must be dealt with in order to properly fuel that engine.
More and more brands have jumped on the IoT bandwagon. We have an excess of wearables – activity trackers, smartwatches, smart glasses and sneakers, and more that track seemingly endless datapoints. However, most consumers have no idea what “IoT” means. Creating more wearables that track data shouldn't be the aim of brands; delivering meaningful, tangible relevance to their users should be. We're in a period in which the IoT pendulum is still swinging. Initially, it swung toward "smart for smar...
Fifty billion connected devices and still no winning protocols standards. HTTP, WebSockets, MQTT, and CoAP seem to be leading in the IoT protocol race at the moment but many more protocols are getting introduced on a regular basis. Each protocol has its pros and cons depending on the nature of the communications. Does there really need to be only one protocol to rule them all? Of course not. In his session at @ThingsExpo, Chris Matthieu, co-founder and CTO of Octoblu, walk you through how Oct...
Fact is, enterprises have significant legacy voice infrastructure that’s costly to replace with pure IP solutions. How can we bring this analog infrastructure into our shiny new cloud applications? There are proven methods to bind both legacy voice applications and traditional PSTN audio into cloud-based applications and services at a carrier scale. Some of the most successful implementations leverage WebRTC, WebSockets, SIP and other open source technologies. In his session at @ThingsExpo, Da...
In past @ThingsExpo presentations, Joseph di Paolantonio has explored how various Internet of Things (IoT) and data management and analytics (DMA) solution spaces will come together as sensor analytics ecosystems. This year, in his session at @ThingsExpo, Joseph di Paolantonio from DataArchon, will be adding the numerous Transportation areas, from autonomous vehicles to “Uber for containers.” While IoT data in any one area of Transportation will have a huge impact in that area, combining sensor...
The Internet of Things (IoT), in all its myriad manifestations, has great potential. Much of that potential comes from the evolving data management and analytic (DMA) technologies and processes that allow us to gain insight from all of the IoT data that can be generated and gathered. This potential may never be met as those data sets are tied to specific industry verticals and single markets, with no clear way to use IoT data and sensor analytics to fulfill the hype being given the IoT today.
@ThingsExpo has been named the Top 5 Most Influential M2M Brand by Onalytica in the ‘Machine to Machine: Top 100 Influencers and Brands.' Onalytica analyzed the online debate on M2M by looking at over 85,000 tweets to provide the most influential individuals and brands that drive the discussion. According to Onalytica the "analysis showed a very engaged community with a lot of interactive tweets. The M2M discussion seems to be more fragmented and driven by some of the major brands present in the...
If you had a chance to enter on the ground level of the largest e-commerce market in the world – would you? China is the world’s most populated country with the second largest economy and the world’s fastest growing market. It is estimated that by 2018 the Chinese market will be reaching over $30 billion in gaming revenue alone. Admittedly for a foreign company, doing business in China can be challenging. Often changing laws, administrative regulations and the often inscrutable Chinese Interne...
SYS-CON Events announced today that SoftNet Solutions will exhibit at the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. SoftNet Solutions specializes in Enterprise Solutions for Hadoop and Big Data. It offers customers the most open, robust, and value-conscious portfolio of solutions, services, and tools for the shortest route to success with Big Data. The unique differentiator is the ability to architect and ...
SYS-CON Events announced today that Pulzze Systems will exhibit at the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Pulzze Systems, Inc. provides infrastructure products for the Internet of Things to enable any connected device and system to carry out matched operations without programming. For more information, visit http://www.pulzzesystems.com.
In the next forty months – just over three years – businesses will undergo extraordinary changes. The exponential growth of digitization and machine learning will see a step function change in how businesses create value, satisfy customers, and outperform their competition. In the next forty months companies will take the actions that will see them get to the next level of the game called Capitalism. Or they won’t – game over. The winners of today and tomorrow think differently, follow different...
One of biggest questions about Big Data is “How do we harness all that information for business use quickly and effectively?” Geographic Information Systems (GIS) or spatial technology is about more than making maps, but adding critical context and meaning to data of all types, coming from all different channels – even sensors. In his session at @ThingsExpo, William (Bill) Meehan, director of utility solutions for Esri, will take a closer look at the current state of spatial technology and ar...
The Open Connectivity Foundation (OCF), sponsor of the IoTivity open source project, and AllSeen Alliance, which provides the AllJoyn® open source IoT framework, today announced that the two organizations’ boards have approved a merger under the OCF name and bylaws. This merger will advance interoperability between connected devices from both groups, enabling the full operating potential of IoT and representing a significant step towards a connected ecosystem.
SYS-CON Media announced today that @WebRTCSummit Blog, the largest WebRTC resource in the world, has been launched. @WebRTCSummit Blog offers top articles, news stories, and blog posts from the world's well-known experts and guarantees better exposure for its authors than any other publication. @WebRTCSummit Blog can be bookmarked ▸ Here @WebRTCSummit conference site can be bookmarked ▸ Here
SYS-CON Events announced today that Streamlyzer will exhibit at the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Streamlyzer is a powerful analytics for video streaming service that enables video streaming providers to monitor and analyze QoE (Quality-of-Experience) from end-user devices in real time.
You have great SaaS business app ideas. You want to turn your idea quickly into a functional and engaging proof of concept. You need to be able to modify it to meet customers' needs, and you need to deliver a complete and secure SaaS application. How could you achieve all the above and yet avoid unforeseen IT requirements that add unnecessary cost and complexity? You also want your app to be responsive in any device at any time. In his session at 19th Cloud Expo, Mark Allen, General Manager of...
@ThingsExpo has been named the Top 5 Most Influential Internet of Things Brand by Onalytica in the ‘The Internet of Things Landscape 2015: Top 100 Individuals and Brands.' Onalytica analyzed Twitter conversations around the #IoT debate to uncover the most influential brands and individuals driving the conversation. Onalytica captured data from 56,224 users. The PageRank based methodology they use to extract influencers on a particular topic (tweets mentioning #InternetofThings or #IoT in this ...