Bazaar/XMLMenu : updated to new UPP and fixed some bugs

git-svn-id: svn://ultimatepp.org/upp/trunk@12148 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
micio 2018-08-05 18:05:43 +00:00
parent ee1e357fc1
commit 90fa5e186d
6 changed files with 58 additions and 30 deletions

View file

@ -12,7 +12,7 @@ XMLCommand::XMLCommand(XMLCommand const &c, int)
ctrlSize = c.ctrlSize;
callback = c.callback;
menuCallback = c.menuCallback;
menuTb <<= c.menuTb;
menuTb = One<XMLToolBar>(new XMLToolBar(*c.menuTb, 1)); // @@ was deep copy operator <<=
enabled = c.enabled;
custom = c.custom;
commandString = c.commandString;

View file

@ -219,15 +219,15 @@ void XMLBarEditor::fieldsModCb(void)
return;
if(i == 0)
{
bar->SetName(itemPane.label);
bar->SetName(~itemPane.label);
barTree.SetRoot(Null, itemPane.label);
return;
}
XMLToolBarItem item(ValueTo<XMLToolBarItem>(barTree.Get(i)), 0);
item.label = itemPane.label;
item.commandId = itemPane.cmdId;
item.tooltip = itemPane.tooltip;
item.label = ~itemPane.label;
item.commandId = ~itemPane.cmdId;
item.tooltip = ~itemPane.tooltip;
item.icon = curIcon;
TreeCtrl::Node node(item.GetIcon(), RawDeepToValue(item), item.GetLabel());
barTree.SetNode(i, node);
@ -469,7 +469,7 @@ void XMLBarsEditor::barContextAddCb(void)
add.Close();
if(res == IDOK)
{
toolBars.Add(~add.barName, XMLToolBar());
toolBars.AddPick(~add.barName, XMLToolBar());
barListPane.barList.Add(~add.barName);
barListPane.barList.SetCursor(barListPane.barList.GetCount() - 1);
}
@ -646,7 +646,7 @@ void XMLMenuEditor::cmdContextAddCb(void)
edit.Close();
if(res == IDOK)
{
commands.Add(edit.cmdId, edit.cmdStr);
commands.Add(~edit.cmdId, ~edit.cmdStr);
FillCmdList();
cmdPane.commandList.SetCursor(cmdPane.commandList.Find(~edit.cmdId));
}
@ -662,7 +662,7 @@ void XMLMenuEditor::cmdContextEditCb(void)
if(res == IDOK)
{
int idx = commands.Find(~edit.cmdId);
commands[idx].SetCommandString(edit.cmdStr);
commands[idx].SetCommandString(~edit.cmdStr);
FillCmdList();
cmdPane.commandList.SetCursor(cmdPane.commandList.Find(~edit.cmdId));
}

View file

@ -97,7 +97,7 @@ class XMLBarAdd : public WithBarAddLayout<TopWindow>
Exclamation(t_("Invalid empty bar name"));
return;
}
if(bars.Find(barName) >= 0)
if(bars.Find(~barName) >= 0)
{
Exclamation(Format(t_("Bar '%s' already present"), ~barName));
return;
@ -191,7 +191,7 @@ class XMLCmdEdit : public WithCmdEditLayout<TopWindow>
Exclamation(t_("Invalid empty command Id"));
return;
}
if(adding && cmds.Has(cmdId))
if(adding && cmds.Has(~cmdId))
{
Exclamation(Format(t_("Command '%s' already present"), ~cmdId));
return;

View file

@ -13,28 +13,34 @@ XMLToolBarItem::XMLToolBarItem()
icon = Null;
tooltip = "";
isSeparator = false;
internalCb.Clear();
subMenu.Clear();
}
// copy constructor
XMLToolBarItem::XMLToolBarItem(const XMLToolBarItem &item, int dummy)
XMLToolBarItem::XMLToolBarItem(const XMLToolBarItem &item, int)
{
commandId = item.commandId;
label = item.label;
icon = item.icon;
tooltip = item.tooltip;
isSeparator = item.isSeparator;
subMenu <<= item.subMenu;
internalCb = item.internalCb;
if(!item.subMenu.IsEmpty())
subMenu = One<XMLToolBar>(new XMLToolBar(*item.subMenu, 1)); // @@ it was <<= deep copy....
else
subMenu.Clear();
}
// pick constructor
XMLToolBarItem::XMLToolBarItem(XMLToolBarItem rval_ item)
XMLToolBarItem::XMLToolBarItem(XMLToolBarItem &&item)
{
commandId = item.commandId;
label = item.label;
icon = item.icon;
tooltip = item.tooltip;
isSeparator = item.isSeparator;
internalCb = item.internalCb;
subMenu = pick(item.subMenu);
}
@ -113,7 +119,7 @@ XMLToolBar::XMLToolBar()
}
// pick constructor
XMLToolBar::XMLToolBar(XMLToolBar pick_ &tb)
XMLToolBar::XMLToolBar(XMLToolBar &&tb)
{
name = tb.name;
items = pick(tb.items);
@ -122,17 +128,17 @@ XMLToolBar::XMLToolBar(XMLToolBar pick_ &tb)
}
// copy constructor
XMLToolBar::XMLToolBar(XMLToolBar const &tb, int dummy)
XMLToolBar::XMLToolBar(XMLToolBar const &tb, int)
{
name = tb.name;
items <<= tb.items;
items = clone(tb.items);
state = tb.state;
prevState = tb.prevState;
position = tb.position;
}
// copy operator
XMLToolBar &XMLToolBar::operator=(XMLToolBar pick_ &tb)
// pick operator =
XMLToolBar &XMLToolBar::operator=(XMLToolBar &&tb)
{
name = tb.name;
items = pick(tb.items);
@ -142,6 +148,17 @@ XMLToolBar &XMLToolBar::operator=(XMLToolBar pick_ &tb)
return *this;
}
// copy operator =
XMLToolBar const &XMLToolBar::operator=(XMLToolBar const &tb)
{
name = tb.name;
items = clone(tb.items);
state = tb.state;
prevState = tb.prevState;
position = tb.position;
return *this;
}
// add an entry, various ways
XMLToolBar &XMLToolBar::Add(String const &commandId)
{
@ -228,22 +245,22 @@ XMLToolBar &XMLToolBar::Add(String const &commandId, String const &label, Image
}
// add a submenu entry
XMLToolBar &XMLToolBar::Add(String const &subLabel, XMLToolBar pick_ &subMenu)
XMLToolBar &XMLToolBar::Add(String const &subLabel, XMLToolBar const &subMenu)
{
XMLToolBarItem *item = new XMLToolBarItem;
item->label = subLabel;
item->subMenu = new XMLToolBar(subMenu);
item->subMenu = new XMLToolBar(clone(subMenu));
item->subMenu->name = subLabel;
items.Add(item);
return *this;
}
XMLToolBar &XMLToolBar::Add(String const &subLabel, Image const &icon, XMLToolBar pick_ &subMenu)
XMLToolBar &XMLToolBar::Add(String const &subLabel, Image const &icon, XMLToolBar const &subMenu)
{
XMLToolBarItem *item = new XMLToolBarItem;
item->label = subLabel;
item->icon = icon;
item->subMenu = new XMLToolBar(subMenu);
item->subMenu = new XMLToolBar(clone(subMenu));
item->subMenu->name = subLabel;
items.Add(item);
return *this;
@ -260,7 +277,7 @@ XMLToolBar &XMLToolBar::Add(Callback1<XMLToolBar &> bar)
{
XMLToolBar tb;
bar(tb);
items.Append(tb.items);
items.AppendPick(pick(tb.items));
return *this;
}

View file

@ -100,13 +100,16 @@ class XMLToolBar : DeepCopyOption<XMLToolBar>
XMLToolBar();
// pick constructor
XMLToolBar(XMLToolBar pick_ &tb);
XMLToolBar(XMLToolBar &&tb);
// copy constructor
XMLToolBar(XMLToolBar const &tb, int dummy);
XMLToolBar(XMLToolBar const &tb, int);
// copy operator
XMLToolBar &operator=(XMLToolBar pick_ &tb);
// pick operator =
XMLToolBar &operator=(XMLToolBar &&tb);
// copy operator =
XMLToolBar const &operator=(XMLToolBar const &tb);
// add an entry, various ways
XMLToolBar &SetName(String const &_name) { name = _name; return *this; }
@ -123,8 +126,8 @@ class XMLToolBar : DeepCopyOption<XMLToolBar>
XMLToolBar &Add(String const &commandId, String const &label, Image const &icon, String const &tooltip);
// add a submenu entry
XMLToolBar &Add(String const &subLabel, XMLToolBar pick_ &subMenu);
XMLToolBar &Add(String const &subLabel, Image const &icon, XMLToolBar pick_ &subMenu);
XMLToolBar &Add(String const &subLabel, XMLToolBar const &subMenu);
XMLToolBar &Add(String const &subLabel, Image const &icon, XMLToolBar const &subMenu);
// creates a submenu entry
XMLToolBar SubMenu(void);
@ -162,7 +165,7 @@ class XMLToolBar : DeepCopyOption<XMLToolBar>
// debugging stuff -- dumps bar content
void Dump(int level = 0);
#endif
rval_default(XMLToolBar);
// rval_default(XMLToolBar);
};
////////////////////////////////////////////////////////////////////////////////////

View file

@ -7,9 +7,17 @@ NAMESPACE_UPP
// handler for window drag events
void XMLToolBarFloating::WindowDragged(DragWindow::DragEvent e, Point p)
{
// avoid re-entering - caused a sigseg error
static bool inside = false;
if(inside)
return;
inside = true;
XMLMenuInterface *iFace = toolBar->GetInterface();
if(iFace && e == DragWindow::DRAG_DRAG)
iFace->FloatingDraggedEvent(*toolBar, p);
inside = false;
}
XMLToolBarFloating::XMLToolBarFloating(XMLToolBarCtrl &tb, Point p)