|
|
Home » U++ Library support » LineEdit, EditFields, DocEdit » Wrap EditString Rect to text
Wrap EditString Rect to text [message #40900] |
Sat, 05 October 2013 11:08  |
iST1
Messages: 107 Registered: August 2013
|
Experienced Member |
|
|
I use EditString field as a TreeCtrl node for editing like in MS Word's list and for hiding it boundary i use edit.SetFrame(NullFrame()); But
all the same around EditString hidden indents exist. How to wrap border to text?
|
|
|
|
|
|
Re: Wrap EditString Rect to text [message #40942 is a reply to message #40927] |
Fri, 11 October 2013 09:57   |
iST1
Messages: 107 Registered: August 2013
|
Experienced Member |
|
|

This code illustrate also a setting user defined font size, where some trouble occur with changing initial text's position
enum {fntSize = 19};
struct AppNodeSize : public Display {
virtual void Paint(Draw& w,const Rect& r, const Value& q,Color ink,Color paper,dword style) const {
w.DrawRect(r, paper);
w.DrawText(r.left, r.top, (String)q, StdFont().Height(fntSize), ink);
}
Size GetStdSize(const Value& q) const {
//1.5 is a empirical multiplier for increasing row height when fntSize used in (1) and (2);
//how to universally set it based on fntSize?
return 1.5 * StdDisplay().GetStdSize(q);
}
};
class EditableTree : public TreeCtrl {
public:
typedef EditableTree CLASSNAME;
EditableTree() : selId_(0) {
NoRoot();
editNode_.SetCtrl(edit_);
edit_.NoInternalMargin().SetFrame(NullFrame());//crashes when NoInternalMargin
edit_.SetFont(StdFont().Height(fntSize));//(1)
WhenSel = THISBACK(OnSelect);
}
void AddNode() {
CloseEdit();
//with some ico in /**/ offset lines more visible
selNode_ = Node(/*espudImg::secExpand(), */"NODE" + AsString(GetChildCount(0) + 1));
selNode_.SetDisplay(Single<AppNodeSize>());//(2)
selId_ = Add(0, selNode_);
BeginEdit();
}
void OnSelect() {
CloseEdit();
selId_ = GetSel()[0];
selNode_ = GetNode(selId_);
BeginEdit();
}
private:
int selId_;
Node selNode_;
EditString edit_;
Node editNode_;
void BeginEdit() {
editNode_.image = selNode_.image;
SetNode(selId_, editNode_);
String val = selNode_.value;
edit_.SetData(val);
edit_.AutoSize();
edit_.Show();
edit_.SetFocus();
edit_.SetSelection(val.GetCount());
}
void CloseEdit() {
if (selId_ > 0) {
selNode_.value = ~edit_;
SetNode(selId_, selNode_);
edit_.Hide();
}
}
};
[Updated on: Fri, 11 October 2013 10:00] Report message to a moderator
|
|
|
|
Re: Wrap EditString Rect to text [message #40974 is a reply to message #40946] |
Wed, 16 October 2013 08:35  |
 |
mirek
Messages: 14255 Registered: November 2005
|
Ultimate Member |
|
|
NoInternalMargin fixed, the method definition you seek is
Size GetStdSize(const Value& q) const {
return GetTextSize((String)q, StdFont().Height(fntSize));
}
However, there are still some minor problems (selected node is vertically shifting); will fix those soon.
Mirek
P.S.: Complete testcase (for my reference):
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
enum {fntSize = 19};
struct AppNodeSize : public Display {
virtual void Paint(Draw& w,const Rect& r, const Value& q,Color ink,Color paper,dword style) const {
w.DrawRect(r, paper);
w.DrawText(r.left, r.top, (String)q, StdFont().Height(fntSize), ink);
}
Size GetStdSize(const Value& q) const {
return GetTextSize((String)q, StdFont().Height(fntSize));
}
};
class EditableTree : public TreeCtrl {
public:
typedef EditableTree CLASSNAME;
EditableTree() : selId_(0) {
NoRoot();
editNode_.SetCtrl(edit_);
edit_.NoInternalMargin().SetFrame(NullFrame());
edit_.SetFont(StdFont().Height(fntSize));
WhenSel = THISBACK(OnSelect);
}
void AddNode() {
CloseEdit();
//with some ico in /**/ offset lines more visible
selNode_ = Node(/*espudImg::secExpand(), */"NODE" + AsString(GetChildCount(0) + 1));
selNode_.SetDisplay(Single<AppNodeSize>());//(2)
selId_ = Add(0, selNode_);
BeginEdit();
}
void OnSelect() {
CloseEdit();
selId_ = GetSel()[0];
selNode_ = GetNode(selId_);
BeginEdit();
}
private:
int selId_;
Node selNode_;
EditString edit_;
Node editNode_;
void BeginEdit() {
editNode_.image = selNode_.image;
SetNode(selId_, editNode_);
String val = selNode_.value;
edit_.SetData(val);
edit_.AutoSize();
edit_.Show();
edit_.SetFocus();
edit_.SetSelection(val.GetCount());
}
void CloseEdit() {
if (selId_ > 0) {
selNode_.value = ~edit_;
SetNode(selId_, selNode_);
edit_.Hide();
}
}
};
GUI_APP_MAIN
{
TopWindow wnd;
Button btn;
wnd.Add(btn.SetLabel("Add").LeftPos(10).TopPos(10));
EditableTree tree;
wnd.Add(tree.VSizePos(40).HSizePos());
btn <<= callback(&tree, &EditableTree::AddNode);
wnd.Run();
}
|
|
|
Goto Forum:
Current Time: Sat Apr 26 14:55:31 CEST 2025
Total time taken to generate the page: 0.00953 seconds
|
|
|