Welcome!

Microsoft Cloud Authors: David H Deans, Pat Romanski, Janakiram MSV, Jnan Dash, Andreas Grabner

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.

W_main.open
// 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
next

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
With billions of sensors deployed worldwide, the amount of machine-generated data will soon exceed what our networks can handle. But consumers and businesses will expect seamless experiences and real-time responsiveness. What does this mean for IoT devices and the infrastructure that supports them? More of the data will need to be handled at - or closer to - the devices themselves.
Things are changing so quickly in IoT that it would take a wizard to predict which ecosystem will gain the most traction. In order for IoT to reach its potential, smart devices must be able to work together. Today, there are a slew of interoperability standards being promoted by big names to make this happen: HomeKit, Brillo and Alljoyn. In his session at @ThingsExpo, Adam Justice, vice president and general manager of Grid Connect, will review what happens when smart devices don’t work togethe...
SYS-CON Events announced today that Dataloop.IO, an innovator in cloud IT-monitoring whose products help organizations save time and money, has been named “Bronze Sponsor” of SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Dataloop.IO is an emerging software company on the cutting edge of major IT-infrastructure trends including cloud computing and microservices. The company, founded in the UK but now based in San Fran...
A strange thing is happening along the way to the Internet of Things, namely far too many devices to work with and manage. It has become clear that we'll need much higher efficiency user experiences that can allow us to more easily and scalably work with the thousands of devices that will soon be in each of our lives. Enter the conversational interface revolution, combining bots we can literally talk with, gesture to, and even direct with our thoughts, with embedded artificial intelligence, whic...
In his session at @ThingsExpo, Sudarshan Krishnamurthi, a Senior Manager, Business Strategy, at Cisco Systems, will discuss how IT and operational technology (OT) work together, as opposed to being in separate siloes as once was traditional. Attendees will learn how to fully leverage the power of IoT in their organization by bringing the two sides together and bridging the communication gap. He will also look at what good leadership must entail in order to accomplish this, and how IT managers ca...
SYS-CON Events announced today that CA Technologies has been named “Platinum Sponsor” of SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY, and the 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. CA Technologies helps customers succeed in a future where every business – from apparel to energy – is being rewritten by software. From ...
In his keynote at 18th Cloud Expo, Andrew Keys, Co-Founder of ConsenSys Enterprise, provided an overview of the evolution of the Internet and the Database and the future of their combination – the Blockchain. Andrew Keys is Co-Founder of ConsenSys Enterprise. He comes to ConsenSys Enterprise with capital markets, technology and entrepreneurial experience. Previously, he worked for UBS investment bank in equities analysis. Later, he was responsible for the creation and distribution of life settle...
TechTarget storage websites are the best online information resource for news, tips and expert advice for the storage, backup and disaster recovery markets. By creating abundant, high-quality editorial content across more than 140 highly targeted technology-specific websites, TechTarget attracts and nurtures communities of technology buyers researching their companies' information technology needs. By understanding these buyers' content consumption behaviors, TechTarget creates the purchase inte...
The best way to leverage your Cloud Expo presence as a sponsor and exhibitor is to plan your news announcements around our events. The press covering Cloud Expo and @ThingsExpo will have access to these releases and will amplify your news announcements. More than two dozen Cloud companies either set deals at our shows or have announced their mergers and acquisitions at Cloud Expo. Product announcements during our show provide your company with the most reach through our targeted audiences.
SYS-CON Events announced today that Cloud Academy will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Cloud Academy is the industry’s most innovative, vendor-neutral cloud technology training platform. Cloud Academy provides continuous learning solutions for individuals and enterprise teams for Amazon Web Services, Microsoft Azure, Google Cloud Platform, and the most popular cloud computing technologies. Ge...
SYS-CON Events announced today that Fusion, a leading provider of cloud services, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Fusion, a leading provider of integrated cloud solutions to small, medium and large businesses, is the industry’s single source for the cloud. Fusion’s advanced, proprietary cloud service platform enables the integration of leading edge solutions in the cloud, including cloud...
Your homes and cars can be automated and self-serviced. Why can't your storage? From simply asking questions to analyze and troubleshoot your infrastructure, to provisioning storage with snapshots, recovery and replication, your wildest sci-fi dream has come true. In his session at @DevOpsSummit at 20th Cloud Expo, Dan Florea, Director of Product Management at Tintri, will provide a ChatOps demo where you can talk to your storage and manage it from anywhere, through Slack and similar services ...
20th Cloud Expo, taking place June 6-8, 2017, at the Javits Center in New York City, NY, will feature technical sessions from a rock star conference faculty and the leading industry players in the world. Cloud computing is now being embraced by a majority of enterprises of all sizes. Yesterday's debate about public vs. private has transformed into the reality of hybrid cloud: a recent survey shows that 74% of enterprises have a hybrid cloud strategy.
Have you ever noticed how some IT people seem to lead successful, rewarding, and satisfying lives and careers, while others struggle? IT author and speaker Don Crawley uncovered the five principles that successful IT people use to build satisfying lives and careers and he shares them in this fast-paced, thought-provoking webinar. You'll learn the importance of striking a balance with technical skills and people skills, challenge your pre-existing ideas about IT customer service, and gain new in...
With major technology companies and startups seriously embracing Cloud strategies, now is the perfect time to attend @CloudExpo | @ThingsExpo, June 6-8, 2017, at the Javits Center in New York City, NY and October 31 - November 2, 2017, Santa Clara Convention Center, CA. Learn what is going on, contribute to the discussions, and ensure that your enterprise is on the right path to Digital Transformation.
@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 ca...
Bert Loomis was a visionary. This general session will highlight how Bert Loomis and people like him inspire us to build great things with small inventions. In their general session at 19th Cloud Expo, Harold Hannon, Architect at IBM Bluemix, and Michael O'Neill, Strategic Business Development at Nvidia, discussed the accelerating pace of AI development and how IBM Cloud and NVIDIA are partnering to bring AI capabilities to "every day," on-demand. They also reviewed two "free infrastructure" pr...
With major technology companies and startups seriously embracing Cloud strategies, now is the perfect time to attend @CloudExpo | @ThingsExpo, June 6-8, 2017, at the Javits Center in New York City, NY and October 31 - November 2, 2017, Santa Clara Convention Center, CA. Learn what is going on, contribute to the discussions, and ensure that your enterprise is on the right path to Digital Transformation.
Almost two-thirds of companies either have or soon will have IoT as the backbone of their business. Though, IoT is far more complex than most firms expected with a majority of IoT projects having failed. How can you not get trapped in the pitfalls? In his session at @ThingsExpo, Tony Shan, Chief IoTologist at Wipro, will introduce a holistic method of IoTification, which is the process of IoTifying the existing technology portfolios and business models to adopt and leverage IoT. He will delve in...
In the enterprise today, connected IoT devices are everywhere – both inside and outside corporate environments. The need to identify, manage, control and secure a quickly growing web of connections and outside devices is making the already challenging task of security even more important, and onerous. In his session at @ThingsExpo, Rich Boyer, CISO and Chief Architect for Security at NTT i3, will discuss new ways of thinking and the approaches needed to address the emerging challenges of securit...