本文整理汇总了C++中DockCont::Serialize方法的典型用法代码示例。如果您正苦于以下问题:C++ DockCont::Serialize方法的具体用法?C++ DockCont::Serialize怎么用?C++ DockCont::Serialize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DockCont
的用法示例。
在下文中一共展示了DockCont::Serialize方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Serialize
void DockCont::Serialize(Stream& s)
{
int ctrl = 'D';
int cont = 'C';
const Vector<DockableCtrl *> &dcs = base->GetDockableCtrls();
if (s.IsStoring()) {
if (GetCount() == 1 && IsDockCont(tabbar.Get(0)))
return ContCast(tabbar.Get(0))->Serialize(s);
int cnt = GetCount();
s / cont / cnt;
for (int i = GetCount() - 1; i >= 0; i--) {
if (IsDockCont(tabbar.Get(i)))
ContCast(tabbar.Get(i))->Serialize(s);
else {
DockableCtrl *dc = DockCast(tabbar.Get(i));
int ix = base->FindDocker(dc);
s / ctrl / ix;
}
}
int cursor = tabbar.GetCursor();
int groupix = tabbar.GetGroup();
s / cursor / groupix;
}
else {
int cnt;
int type;
s / type / cnt;
ASSERT(type == cont);
for (int i = 0; i < cnt; i++) {
int64 pos = s.GetPos();
s / type;
if (type == cont) {
s.Seek(pos);
DockCont *dc = base->CreateContainer();
dc->Serialize(s);
base->DockContainerAsTab(*this, *dc, true);
}
else if (type == ctrl) {
int ix;
s / ix;
if (ix >= 0 && ix <= dcs.GetCount())
Add(*dcs[ix]);
}
else
ASSERT(false);
}
int cursor, groupix;
s / cursor / groupix;
tabbar.SetGroup(groupix);
tabbar.SetCursor(min(tabbar.GetCount()-1, cursor));
TabSelected();
}
}
示例2: SerializeLayout
void DockWindow::SerializeLayout(Stream &s, bool withsavedlayouts)
{
StopHighlight(false);
int cnt = 0;
s.Magic();
// Groups
ArrayMap<String, Vector<int> > groups;
if (s.IsStoring())
for (int i = 0; i < dockers.GetCount(); i++) {
String g = dockers[i]->GetGroup();
if (!g.IsEmpty()) {
int ix = groups.Find(g);
if (ix < 0) {
groups.Add(dockers[i]->GetGroup(), Vector<int>());
ix = groups.GetCount() - 1;
}
groups[ix].Add(i);
}
}
s % groups;
if (s.IsLoading()) {
ClearLayout();
for (int i = 0; i < dockers.GetCount(); i++)
dockers[i]->SetGroup(Null);
for (int i = 0; i < groups.GetCount(); i++) {
Vector<int> &v = groups[i];
const String &g = groups.GetKey(i);
for (int j = 0; j < v.GetCount(); j++) {
int ix = v[j];
if (ix >= 0 && ix < dockers.GetCount())
dockers[ix]->SetGroup(g);
}
}
}
if (s.IsStoring()) {
// Write docked
for (int i = 0; i < 4; i++) {
DockPane &pane = dockpane[i];
int fsz = dockframe[i].IsShown() ? dockframe[i].GetSize() : 0;
s / fsz % pane;
DockCont *dc = dynamic_cast<DockCont *>(pane.GetFirstChild());
for (int j = 0; dc && j < pane.GetCount(); j++) {
s % *dc;
dc = dynamic_cast<DockCont *>(dc->GetNext());
}
}
cnt = 0;
// Count Floating
for (int i = 0; i < conts.GetCount(); i++)
if (conts[i].IsFloating()) cnt++;
// Write Floating
s / cnt;
for (int i = 0; i < conts.GetCount(); i++) {
if (conts[i].IsFloating()) {
conts[i].Serialize(s);
conts[i].SerializePlacement(s, false);
}
}
// Write Autohidden
for (int i = 0; i < 4; i++) {
cnt = hideframe[i].GetCount();
s / cnt;
for (int j = 0; j < hideframe[i].GetCount(); j++) {
int ix = FindDocker(&hideframe[i].GetCtrl(j)->Get(0));
if (ix >= 0)
s / ix;
}
}
}
else {
// Read docked
for (int i = 0; i < 4; i++) {
DockPane &pane = dockpane[i];
dockframe[i].Hide();
int fsz;
s / fsz % pane;
for (int j = 0; j < pane.GetCount(); j++) {
DockCont *dc = CreateContainer();
s % *dc;
dc->StateDocked(*this);
pane << *dc;
}
if (fsz && pane.GetCount()) {
dockframe[i].SetSize(fsz);
dockframe[i].Show();
}
else
dockframe[i].SetSize(0);
}
// Read floating
s / cnt;
for (int i = 0; i < cnt; i++) {
DockCont *dc = CreateContainer();
dc->Serialize(s);
//.........这里部分代码省略.........