ultimatepp/bazaar/FormEditor/FormViewActions.cpp
koldo ac7821deb8 Form: Form core package, Editor and sample from Sc0rch
git-svn-id: svn://ultimatepp.org/upp/trunk@2412 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2010-05-19 18:38:45 +00:00

242 lines
4.8 KiB
C++

#include "FormView.hpp"
void FormView::CreateObject(Point p, const char* type)
{
if (!IsLayout())
return;
p = DeZoom(p);
Rect pageRect = GetPageRect();
Rect objRect;
if (GetBool("Grid.Binding", true))
PointToGrid(p);
if (AsString(type) == "Button")
objRect = Rect(Point(p.x - pageRect.left, p.y - pageRect.top),
Size(GetNumber("Grid.CX", 10) * 10, GetNumber("Grid.CY", 10) * 3)
);
else
objRect = Rect(Point(p.x - pageRect.left, p.y - pageRect.top),
Size(GetNumber("Grid.CX", 10) * 10, GetNumber("Grid.CY", 10) * 2)
);
pageRect = Deoffseted(GetPageRect());
if (objRect.right > pageRect.right) objRect.Offset(- objRect.right + pageRect.right, 0);
if (objRect.bottom > pageRect.bottom) objRect.Offset(0, - objRect.bottom + pageRect.bottom);
FormObject obj(objRect);
obj.Set("Type", type);
if (AsString(type) == "EditField")
obj.Set("TextAlign", "Left");
GetObjects()->Add(obj);
ClearSelection();
AddToSelection(GetObjectCount() - 1);
Refresh();
WhenUpdate.Execute();
WhenChildSelected.Execute(GetSelected());
WhenChildCount.Execute(GetObjectCount());
}
void FormView::SetSprings(dword hAlign, dword vAlign)
{
if (!IsLayout())
return;
Vector<int> sel = GetSelected();
for (int i = 0; i < sel.GetCount(); ++i)
{
FormObject* pI = GetObject(sel[i]);
if (!pI) continue;
if (hAlign != -1) pI->SetHAlign(_HAlign = hAlign);
if (vAlign != -1) pI->SetVAlign(_VAlign = vAlign);
}
WhenUpdate.Execute();
Refresh();
}
void FormView::RemoveSelection()
{
if (!IsLayout())
return;
Vector<int> sel = GetSelected();
Sort(sel);
for (int i = sel.GetCount() - 1; i >= 0; --i)
GetObjects()->Remove(sel[i]);
Refresh();
WhenChildCount.Execute(GetObjectCount());
}
void FormView::MoveUpObject(int id)
{
if (!IsLayout())
return;
if (id < 0 || id >= GetObjectCount() - 1)
return;
GetObjects()->Swap(id, id + 1);
Refresh();
WhenChildZ.Execute();
}
void FormView::MoveDownObject(int id)
{
if (!IsLayout())
return;
if (id <= 0 || id >= GetObjectCount())
return;
GetObjects()->Swap(id, id - 1);
Refresh();
WhenChildZ.Execute();
}
void FormView::MoveToTopObject(int id)
{
if (!IsLayout())
return;
if (id < 0 || id >= GetObjectCount() - 1)
return;
for (int i = id; i < GetObjectCount() - 1; ++i)
GetObjects()->Swap(i, i + 1);
Refresh();
WhenChildZ.Execute();
}
void FormView::MoveToBottomObject(int id)
{
if (!IsLayout())
return;
if (id <= 0 || id >= GetObjectCount())
return;
for (int i = id; i > 0; --i)
GetObjects()->Swap(i, i - 1);
Refresh();
WhenChildZ.Execute();
}
void FormView::InvertSelection()
{
if (!IsLayout())
return;
for (int i = 0; i < GetObjectCount(); ++i)
{
FormObject* p = &(*GetObjects())[i];
p->GetState() == FormObject::SELECTED
? p->SetState(FormObject::NONE)
: p->SetState(FormObject::SELECTED);
}
Refresh();
}
void FormView::AlignTopSelection()
{
if (!IsLayout())
return;
int min = Deoffseted(GetSelectionRect()).top;
Vector<int> sel = GetSelected();
for (int i = 0; i < sel.GetCount(); ++i)
{
FormObject* p = GetObject(sel[i]);
if (!p) continue;
p->SetRect( Rect(Point(p->GetRect().left, min), p->GetSize()) );
}
WhenChildPos.Execute(sel);
}
void FormView::AlignLeftSelection()
{
if (!IsLayout())
return;
int min = Deoffseted(GetSelectionRect()).left;
Vector<int> sel = GetSelected();
for (int i = 0; i < sel.GetCount(); ++i)
{
FormObject* p = GetObject(sel[i]);
if (!p) continue;
p->SetRect( Rect(Point(min, p->GetRect().top), p->GetSize()) );
}
WhenChildPos.Execute(sel);
}
void FormView::AlignRightSelection()
{
if (!IsLayout())
return;
int min = Deoffseted(GetSelectionRect()).right;
Vector<int> sel = GetSelected();
for (int i = 0; i < sel.GetCount(); ++i)
{
FormObject* p = GetObject(sel[i]);
if (!p) continue;
p->SetRect( Rect(Point(min - p->GetRect().Width(), p->GetRect().top), p->GetSize()) );
}
WhenChildPos.Execute(sel);
}
void FormView::AlignBottomSelection()
{
if (!IsLayout())
return;
int min = Deoffseted(GetSelectionRect()).bottom;
Vector<int> sel = GetSelected();
for (int i = 0; i < sel.GetCount(); ++i)
{
FormObject* p = GetObject(sel[i]);
if (!p) continue;
p->SetRect( Rect(Point(p->GetRect().left, min - p->GetRect().Height()), p->GetSize()) );
}
WhenChildPos.Execute(sel);
}
void FormView::ToggleOutlineDraw(int obj)
{
if (!IsLayout())
return;
FormObject* pI = GetObject(obj);
if (!pI) return;
pI->SetBool("OutlineDraw", !pI->GetBool("OutlineDraw", false));
WhenChildZ.Execute();
}
bool FormView::IsOutlineDraw(int obj)
{
if (!IsLayout())
return false;
FormObject* pI = GetObject(obj);
if (!pI) return false;
return pI->GetBool("OutlineDraw", false);
}