Home » U++ Library support » Splitter » add controls to splitter bar, how? [NEEDS MORE IMPLEMENTATION...]
|
|
|
|
Re: add controls to splitter bar, how? [message #1878 is a reply to message #1877] |
Fri, 24 March 2006 17:58 |
|
fudadmin
Messages: 1321 Registered: November 2005 Location: Kaunas, Lithuania
|
Ultimate Contributor Administrator |
|
|
ok, in fact, semi-working example is this:
#include <CtrlLib/CtrlLib.h>
class App : public TopWindow {
LineEdit ed1,ed2;
Splitter horz;
Option btn;
public:
typedef App CLASSNAME;
void Move();
App();
};
void App::Move(){
if (btn.Get())
horz.SetPos(1000);
else horz.SetPos(5000);
btn.SetRectX(horz.GetPos()/13-10,10);
}
App::App(){
horz.Add(ed1);
horz.Add(ed2);
Add(horz.Horz().VSizePos(35,35));
btn.SetRectY(50,50);
btn.SetRectX(horz.GetPos()/13-10,10);
Add(btn);
btn.WhenAction=THISBACK(Move);
Sizeable().Zoomable();
}
GUI_APP_MAIN
{
App().Run();
}
First problem is that position returned from splitter is in different units than from other controls...
Second problem is that in this case I need to catch splitter bar events and update button position...
What I wanted was the same like for HeaderCtrl - public access Splitter Bar...
|
|
|
|
|
Re: add controls to splitter bar, how? [message #1958 is a reply to message #1889] |
Tue, 28 March 2006 20:43 |
|
fudadmin
Messages: 1321 Registered: November 2005 Location: Kaunas, Lithuania
|
Ultimate Contributor Administrator |
|
|
improved example which works if you make Splitter::PosToClient() public... or add that piece of code instead ...
#include <CtrlLib/CtrlLib.h>
class App : public TopWindow {
LineEdit ed1,ed2;
Splitter horz;
Option btn;
public:
typedef App CLASSNAME;
void MoveSplitter();
App();
};
void App::MoveSplitter(){
if (btn.Get())
horz.SetPos(1000);
else horz.SetPos(5000);
btn.SetRectX( horz.PosToClient(horz.GetPos(0))-7, 15 );
}
App::App(){
horz.Add(ed1);
horz.Add(ed2);
Add(horz.Horz().VSizePos(35,35));
Add(btn);
SetRect(20,30,950,720); //can't leave without it because you will not get Pos's...
btn.SetRectX( horz.PosToClient(horz.GetPos(0))-7, 15 ); //have to make Splitter::PosToClient() public... :(
btn.SetRectY(50,50);
btn.WhenAction=THISBACK(MoveSplitter);
Sizeable().Zoomable();
}
GUI_APP_MAIN
{
App().Run();
}
Now the problem is how to keep the "switcher" in place when resizing parent Ctrl's...?
[Updated on: Tue, 28 March 2006 20:44] Report message to a moderator
|
|
|
Re: add controls to splitter bar, how? [message #1960 is a reply to message #1958] |
Tue, 28 March 2006 21:44 |
|
mirek
Messages: 14105 Registered: November 2005
|
Ultimate Member |
|
|
I am afraid this will to satisfy your appetitte, but for illustration:
#include <CtrlLib/CtrlLib.h>
class App : public TopWindow {
LineEdit ed1,ed2;
Splitter horz;
FrameRight<StaticRect> sr;
Option btn;
public:
typedef App CLASSNAME;
void MoveSplitter();
App();
};
void App::MoveSplitter()
{
if(btn)
horz.SetPos(1000);
else
horz.SetPos(5000);
}
App::App()
{
horz.Add(ed1);
horz.Add(ed2);
Add(horz.Horz().VSizePos(35,35));
ed1.SetFrame(0, sr);
sr.Width(20);
ed1.AddFrame(FieldFrame());
sr.Add(btn.LeftPos(5, 20).TopPos(0, 20));
btn.WhenAction=THISBACK(MoveSplitter);
Sizeable().Zoomable();
}
GUI_APP_MAIN
{
App().Run();
}
As for the right solution, I believe something close how "edit window split" is done in TheIDE should be OK for you.
In fact, this is not much about U++, but about UI design. I do not believe that that option over split area looks nice
Mirek
|
|
|
|
|
Goto Forum:
Current Time: Fri Nov 01 00:23:03 CET 2024
Total time taken to generate the page: 0.01331 seconds
|