Home » U++ Library support » ArrayCtrl, HeaderCtrl & GridCtrl » GridCtrl and diff Edit()'s per row, same column
GridCtrl and diff Edit()'s per row, same column [message #21761] |
Thu, 04 June 2009 14:36  |
jeremy_c
Messages: 175 Registered: August 2007 Location: Ohio, USA
|
Experienced Member |
|
|
I am making my first real application in U++ and it is to manage apiaries (yards of bee hives) and bee hives. Each bee hive can have different components installed, each component can have different questions that must be answered during a routine inspection. These questions can be of different answer types:
- String
- Number
- Percentage
- Yes/No
I have everything up and working to allow the addition of apiaries, bee hives, components, assigning components to bee hives and assigning questions to components. It then will generate a QTF report for them to print and take to the apiary for their visit. The report looks something like:
Hive Id: 1
Feeder: Filled With: ________ Refilled: Yes/No
Honey Super: Frames Filled: _____# Harvested: _______#
etc... So, with filled with, they will write in a string "water", they will circule Yes or No with Refilled, they will enter a number "7" in the Frames Filled field... etc...
Now, my GUI design was going to have a list of hives in the same order as on their printed sheet that they select, then in a grid control it would have the questions in 1 column and the place they give their answer in a second column (of course in the order it was printed on their sheet). The problem is I will need something like:
Feeder: Filled With | EditString
Feeder: Refilled | OptionButton
Honey Super: Frames Filled | EditInt
Honey Super: Harvested | EditInt
... etc ... The components and questions are not standard but totally user definable. Depending on climate, equipment styles and even bee keeping methods these components/questions could be 100% different from one beekeeper to another.
Any thoughts on making this work with GridCtrl or should I be looking at some other method to get the feedback back from the sheet into the computer?
Thanks,
Jeremy
|
|
|
|
Re: GridCtrl and diff Edit()'s per row, same column [message #21767 is a reply to message #21761] |
Thu, 04 June 2009 16:11   |
mrjt
Messages: 705 Registered: March 2007 Location: London
|
Contributor |
|
|
I don't use GridCtrl, but this is the technique for ArrayCtrl (deopending on your needs GridCtrl might be overkill anyway):
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
class CtrlLibTest : public TopWindow {
struct Question : public Moveable<Question> {
void Set(String question, int _type, Value _default_value = Value()) {
type = _type;
text = question;
default_value = _default_value;
}
dword type;
String text;
Value default_value;
};
private:
ArrayCtrl list;
Vector<Question> questions;
Array<Ctrl> ctrls;
Button finish;
Button close;
public:
typedef CtrlLibTest CLASSNAME;
CtrlLibTest();
void SetQuestions();
void FillList();
void GetAnswers();
String FormatAnswer(int type, const Value &v);
};
CtrlLibTest::CtrlLibTest()
{
Title("Question/Answer program");
SetRect(Size(300,300));
list.ColumnWidths("186 93").HSizePosZ().VSizePosZ(0, 32);
finish.Ok().SetLabel("Finish").LeftPosZ(4, 64).BottomPosZ(4, 24) <<= THISBACK(GetAnswers);
close.Cancel().SetLabel("Cancel").RightPosZ(4, 64).BottomPosZ(4, 24) <<= Rejector(IDCANCEL);
*this << list << finish << close;
list.AddIndex(); // Question id
list.AddColumn("Question");
list.AddColumn("Answer");
SetQuestions();
FillList();
}
void CtrlLibTest::SetQuestions()
{
questions.Add().Set("Feeder: Filled With", STRING_V);
questions.Add().Set("Feeder: Refilled", BOOL_V);
questions.Add().Set("Honey Super: Frames Filled", INT_V);
questions.Add().Set("Honey Super: Harvested", INT_V);
}
void CtrlLibTest::FillList()
{
ctrls.Clear();
for (int i = 0; i < questions.GetCount(); i++) {
list.Add(i, questions[i].text, questions[i].default_value);
switch (questions[i].type) {
case INT_V:
ctrls.Create<EditInt>();
break;
case STRING_V:
ctrls.Create<EditString>();
break;
case BOOL_V:
ctrls.Create<Option>();
break;
case DOUBLE_V:
ctrls.Create<EditDouble>();
break;
default:
NEVER();
continue;
}
list.SetCtrl(i, 1, ctrls.Top());
}
}
void CtrlLibTest::GetAnswers()
{
if (!Accept()) return;
// Because ArrayCtrl doesn't Accept properly:
for (int i = 0; i < ctrls.GetCount(); i++)
if (!ctrls[i].Accept()) return;
String qtf("Here are your answers:&");
for (int i = 0; i < list.GetCount(); i++)
qtf << list.Get(i, 1) << "- "
<< FormatAnswer(questions[(int)list.Get(i, 0)].type, list.Get(i, 2)) << "&";
PromptOK(qtf);
}
String CtrlLibTest::FormatAnswer(int type, const Value &v)
{
if (type == BOOL_V)
return ((bool)v) ? "Yes" : "No";
return StdConvert().Format(v);
}
GUI_APP_MAIN
{
CtrlLibTest().Execute();
}
|
|
|
|
|
|
Re: GridCtrl and diff Edit()'s per row, same column [message #27477 is a reply to message #27462] |
Tue, 20 July 2010 00:03   |
|
MatthiasG wrote on Mon, 19 July 2010 03:11 |
unodgs wrote on Thu, 04 June 2009 15:34 | What you need is ability to set cell's indyvidual control grid.SetCtrl(r, c, Ctrl&) . Yesterday I almost finished adding this feature and I'll probably commit this tonight.
|
got this ever implemented by now? i would be really glad to see this in gridctrl
greetings,
matthias
|
I have just added SetCtrl. Please take a look.
|
|
|
Re: GridCtrl and diff Edit()'s per row, same column [message #27479 is a reply to message #27477] |
Tue, 20 July 2010 09:11   |
MatthiasG
Messages: 27 Registered: January 2008 Location: Germany
|
Promising Member |
|
|
unodgs wrote on Tue, 20 July 2010 00:03 |
MatthiasG wrote on Mon, 19 July 2010 03:11 |
unodgs wrote on Thu, 04 June 2009 15:34 | What you need is ability to set cell's indyvidual control grid.SetCtrl(r, c, Ctrl&) . Yesterday I almost finished adding this feature and I'll probably commit this tonight.
|
got this ever implemented by now? i would be really glad to see this in gridctrl
|
I have just added SetCtrl. Please take a look.
|
Thank you very much. Seems to work great so far 
only one thing:
if i want to set a ctrl, row index seems to start from 0, but if i later want to do a getctrl, index starts from 1. e.g. if i do setctrl (0, 0, myctrl) i later have to do getctrl (1, 0) to get it... seems index 0 is used for header or something.
|
|
|
Re: GridCtrl and diff Edit()'s per row, same column [message #27490 is a reply to message #27479] |
Tue, 20 July 2010 21:32  |
|
MatthiasG wrote on Tue, 20 July 2010 03:11 |
only one thing:
if i want to set a ctrl, row index seems to start from 0, but if i later want to do a getctrl, index starts from 1. e.g. if i do setctrl (0, 0, myctrl) i later have to do getctrl (1, 0) to get it... seems index 0 is used for header or something.
|
Should be fixed now. Please check 
|
|
|
Goto Forum:
Current Time: Mon Apr 28 23:22:29 CEST 2025
Total time taken to generate the page: 0.00889 seconds
|