.RichEdit/RichEdit.h, Mouse.cpp: fixed incorrect handling of object / field modifications in new customizable local menu implementation

git-svn-id: svn://ultimatepp.org/upp/trunk@3996 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
rylek 2011-10-13 05:49:30 +00:00
parent b32e651019
commit b267d9ceed
2 changed files with 20 additions and 19 deletions

View file

@ -189,20 +189,17 @@ void RichEdit::StdBar(Bar& menu)
Id field;
String fieldparam;
String ofieldparam;
RichObject object, o;
RichObject object;
if(GetSelection(l, h)) {
// if(c >= l && c < h) {
CopyTool(menu);
CutTool(menu);
// }
PasteTool(menu);
}
else {
if(objectpos >= 0) {
object = GetObject();
if(!object) return;
o = object;
o.Menu(menu, context);
bar_object = GetObject();
if(!bar_object) return;
bar_object.Menu(menu, context);
if(!menu.IsEmpty())
menu.Separator();
menu.Add(t_("Object position.."), THISBACK(AdjustObjectSize));
@ -228,12 +225,11 @@ void RichEdit::StdBar(Bar& menu)
else {
RichPos p = cursorp;
field = p.field;
fieldparam = p.fieldparam;
bar_fieldparam = p.fieldparam;
RichPara::FieldType *ft = RichPara::fieldtype().Get(field, NULL);
if(ft) {
ofieldparam = fieldparam;
fieldpos = cursor;
ft->Menu(menu, &fieldparam);
ft->Menu(menu, &bar_fieldparam);
if(!menu.IsEmpty())
menu.Separator();
CopyTool(menu);
@ -264,20 +260,21 @@ void RichEdit::RightDown(Point p, dword flags)
int c = GetMousePos(p);
int fieldpos = -1;
Id field;
String fieldparam;
String ofieldparam;
RichObject object, o;
RichObject o;
bar_object.Clear();
bar_fieldparam = Null;
if(!GetSelection(l, h)) {
LeftDown(p, flags);
if(objectpos >= 0)
o = object = GetObject();
o = bar_object = GetObject();
else {
RichPos p = cursorp;
field = p.field;
fieldparam = p.fieldparam;
bar_fieldparam = p.fieldparam;
RichPara::FieldType *ft = RichPara::fieldtype().Get(field, NULL);
if(ft) {
ofieldparam = fieldparam;
ofieldparam = bar_fieldparam;
fieldpos = cursor;
}
}
@ -290,18 +287,20 @@ void RichEdit::RightDown(Point p, dword flags)
menu.Execute();
paintcarect = false;
Refresh(r);
if(object && o && o.GetSerialId() != object.GetSerialId())
ReplaceObject(o);
if(fieldpos >= 0 && fieldparam != ofieldparam) {
if(bar_object && o && o.GetSerialId() != bar_object.GetSerialId())
ReplaceObject(bar_object);
if(fieldpos >= 0 && bar_fieldparam != ofieldparam) {
RichText::FormatInfo f = text.GetFormatInfo(fieldpos, 1);
Remove(fieldpos, 1);
RichPara p;
p.Cat(field, fieldparam, f);
p.Cat(field, bar_fieldparam, f);
RichText clip;
clip.Cat(p);
Insert(fieldpos, clip, false);
Finish();
}
bar_object.Clear();
bar_fieldparam = Null;
}
void RichEdit::LeftDouble(Point p, dword flags)

View file

@ -261,6 +261,8 @@ private:
bool useraction, modified;
bool singleline;
static int fixedlang;
RichObject bar_object;
String bar_fieldparam;
WithRichFindReplaceLayout<TopWindow> findreplace;