Manipulator* NarrowTool::CreateManipulator (Viewer* v, Event& e,Transformer*){ Manipulator* m = nil; _popup = false; GraphicView* views = v->GetGraphicView(); if (!e.shift_is_down()) { Selection* s = v->GetSelection(), *newSel = new Selection; s->Clear(); ComputeViewPath(e, views, newSel); if (!newSel->IsEmpty()) { Iterator i; newSel->First(i); GraphicView* gv = newSel->GetView(i); s->Append(gv); s->Update(); m = CreatePopupManip(newSel, v); _popup = true; } delete newSel; } else { m = new NarrowManip(v); } return m; }
Manipulator* ScaleTool::CreateManipulator ( Viewer* v, Event& e, Transformer* rel ) { GraphicView* views = v->GetGraphicView(); Selection* s = v->GetSelection(), *newSel; GraphicView* gv; Manipulator* m = nil; Iterator i; newSel = views->ViewIntersecting(e.x-SLOP, e.y-SLOP, e.x+SLOP, e.y+SLOP); if (newSel->IsEmpty()) { s->Clear(); } else { newSel->First(i); gv = newSel->GetView(i); if (s->Includes(gv)) { s->Remove(gv); s->Prepend(gv); } else { s->Clear(); s->Append(gv); s->Update(); } m = gv->CreateManipulator(v, e, rel, this); } delete newSel; return m; }
Manipulator* ExamineTool::CreateManipulator ( Viewer* v, Event& e, Transformer* t ){ GraphicView* views = v->GetGraphicView(); Selection* s = v->GetSelection(); _selPath = new Selection; Manipulator* m = nil; s->Clear(); ComputeViewPath(e, views, _selPath); _shift = e.shift_is_down(); if (!_selPath->IsEmpty()) { Iterator i; _selPath->First(i); GraphicView* gv = _selPath->GetView(i); s->Append(gv); s->Update(); _selPath->Last(i); gv = _selPath->GetView(i); m = gv->CreateManipulator(v, e, t, this); } delete _selPath; return m; }
PictSelection::PictSelection (Graphic* gs) : (gs) { valid = true; } // PictSelection knows it's the outermost PictSelection because it was // called with a FILE* pointer, so it must read a version number, skip // over its name, read its graphic state and children, and scale // itself back to screen coordinates when it's finished. PictSelection::PictSelection (FILE* stream, State* state) : (nil) { int fd = fileno(stream); istream from(fd); ReadVersion(from); ReadGridSpacing(from); if (versionnumber < 3) { Skip(from); } ReadPictGS(from, state); ReadChildren(from, state); ScaleToScreenCoords(); valid = from.good(); } // Copy returns a copy of the PictSelection. Graphic* PictSelection::Copy () { Selection* copy = new PictSelection(this); for (First(); !AtEnd(); Next()) { copy->Append(GetCurrent()->Copy()); } return copy; } // HasChildren returns true so Idraw can ungroup this Picture. boolean PictSelection::HasChildren () { return Picture::HasChildren(); } // Propagate must preserve the PictSelection's transformation matrix // if it has any. void PictSelection::Propagate () { Transformer* original = GetTransformer(); if (original != nil) { original->Reference(); Selection::Propagate(); SetTransformer(original); delete original; } else { Selection::Propagate(); } }
void OverlaysComp::SelectViewsOf (OverlayComp* comp, Editor* ed) { Selection* s = ed->GetSelection(); s->Clear(); Viewer* viewer; for (int i = 0; (viewer = ed->GetViewer(i)) != nil; ++i) { GraphicView* views = viewer->GetGraphicView(); GraphicView* view = views->GetGraphicView(comp); if (view != nil) s->Append(view); } }
void OverlaysComp::SelectClipboard (Clipboard* cb, Editor* ed) { Selection* s = ed->GetSelection(); s->Clear(); Viewer* viewer; Iterator i; for (int j = 0; (viewer = ed->GetViewer(j)) != nil; ++j) { for (cb->First(i); !cb->Done(i); cb->Next(i)) { GraphicView* views = viewer->GetGraphicView(); GraphicView* view = views->GetGraphicView(cb->GetComp(i)); if (view != nil) s->Append(view); } } ((OverlaySelection*)s)->Reserve(); }
void LinkSelection::Reserve() { #if 0 fprintf(stderr, "LinkSelection::Reserve\n"); #endif CompIdTable* table = ((DrawServ*)unidraw)->compidtable(); /* clear anything that was in the previous selection, but not in this one */ Selection* lastsel = _editor->last_selection(); if (!lastsel) return; Iterator lt; lastsel->First(lt); Iterator it; while (!lastsel->Done(lt)) { First(it); boolean match = false; while (!Done(it) && !match) { if(GetView(it)==lastsel->GetView(lt)) match = true; else Next(it); } if (!match) { OverlayComp* comp = ((OverlayView*)lastsel->GetView(lt))->GetOverlayComp(); void* ptr = nil; table->find(ptr, (void*)comp); if (ptr) { GraphicId* grid = (GraphicId*)ptr; grid->selected(NotSelected); ((DrawServ*)unidraw)->grid_message(grid); } } lastsel->Remove(lt); } /* remove anything from selection that has a remote selector */ First(it); while (!Done(it)) { int removed = false; OverlayView* view = GetView(it); OverlayComp* comp = view ? view->GetOverlayComp() : nil; void* ptr = nil; table->find(ptr, (void*)comp); if (ptr) { GraphicId* grid = (GraphicId*)ptr; if (grid->selector() && ((DrawServ*)unidraw)->sessionid()!=grid->selector()) { Remove(it); removed = true; if (grid->selected()==NotSelected) { /* make a request to select this in the future */ grid->selected(WaitingToBeSelected); ((DrawServ*)unidraw)->grid_message(grid); } } else { if (grid->selected()!=LocallySelected) { grid->selected(LocallySelected); ((DrawServ*)unidraw)->grid_message(grid); } } } if (!removed) Next(it); } /* store copy of selection */ First(it); while (!Done(it)) { lastsel->Append(GetView(it)); Next(it); } }