static void ClearSplineList() { wxList::compatibility_iterator node = ocpn_wx_spline_point_list.GetFirst(); while (node) { wxPoint *point = (wxPoint *)node->GetData(); delete point; ocpn_wx_spline_point_list.Erase(node); node = ocpn_wx_spline_point_list.GetFirst(); } }
static void wx_spline_draw_point_array(wxDCBase *dc) { dc->DrawLines(&wx_spline_point_list, 0, 0 ); wxList::compatibility_iterator node = wx_spline_point_list.GetFirst(); while (node) { wxPoint *point = (wxPoint *)node->GetData(); delete point; wx_spline_point_list.Erase(node); node = wx_spline_point_list.GetFirst(); } }
void csDiagramView::DoCut(wxList& shapes) { csDiagramDocument *doc = (csDiagramDocument *)GetDocument(); if (shapes.GetCount() > 0) { csDiagramCommand* cmd = new csDiagramCommand(_T("Cut"), doc); wxObjectList::compatibility_iterator node = shapes.GetFirst(); while (node) { wxShape *theShape = (wxShape*) node->GetData(); csCommandState* state = new csCommandState(ID_CS_CUT, NULL, theShape); // Insert lines at the front, so they are cut first. // Otherwise we may try to remove a shape with a line still // attached. if (theShape->IsKindOf(CLASSINFO(wxLineShape))) cmd->InsertState(state); else cmd->AddState(state); node = node->GetNext(); } cmd->RemoveLines(); // Schedule any connected lines, not already mentioned, // to be removed first doc->GetCommandProcessor()->Submit(cmd); } }
void MyFrame::OnClose(wxCloseEvent& event) { if ( !event.CanVeto() ) { event.Skip(); return ; } if ( m_children.GetCount () < 1 ) { event.Skip(); return ; } // now try the children wxObjectList::compatibility_iterator pNode = m_children.GetFirst (); wxObjectList::compatibility_iterator pNext ; MyChild * pChild ; while ( pNode ) { pNext = pNode -> GetNext (); pChild = (MyChild*) pNode -> GetData (); if (pChild -> Close ()) { m_children.Erase(pNode) ; } else { event.Veto(); return; } pNode = pNext ; } event.Skip(); }
void GarbageCollector::DestroyItemList( wxList& lst ) { wxNode* pNode = lst.GetFirst(); while( pNode ) { delete &node_to_item( pNode ); pNode = pNode->GetNext(); } lst.Clear(); }
void wxFontRefData::ClearX11Fonts() { #if wxUSE_UNICODE #else wxList::compatibility_iterator node = m_fonts.GetFirst(); while (node) { wxXFont* f = (wxXFont*) node->GetData(); delete f; node = node->GetNext(); } m_fonts.Clear(); #endif }
// Generalised command void csDiagramView::DoCmd(wxList& shapes, wxList& oldShapes, int cmd, const wxString& op) { csDiagramDocument *doc = (csDiagramDocument *)GetDocument(); if (shapes.GetCount() > 0) { csDiagramCommand* command = new csDiagramCommand(op, doc); wxObjectList::compatibility_iterator node = shapes.GetFirst(); wxObjectList::compatibility_iterator node1 = oldShapes.GetFirst(); while (node && node1) { wxShape *theShape = (wxShape*) node->GetData(); wxShape *oldShape = (wxShape*) node1->GetData(); csCommandState* state = new csCommandState(cmd, theShape, oldShape); command->AddState(state); node = node->GetNext(); node1 = node1->GetNext(); } doc->GetCommandProcessor()->Submit(command); } }
wxOGLConstraint::wxOGLConstraint(int type, wxShape *constraining, wxList &constrained) { m_xSpacing = 0.0; m_ySpacing = 0.0; m_constraintType = type; m_constrainingObject = constraining; m_constraintId = 0; m_constraintName = wxT("noname"); wxNode *node = constrained.GetFirst(); while (node) { m_constrainedObjects.Append(node->GetData()); node = node->GetNext(); } }
void wxFontRefData::ClearX11Fonts() { #if wxUSE_UNICODE #else wxList::compatibility_iterator node = m_fonts.GetFirst(); #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ while (node) { wxXFont* f = (wxXFont*) node->GetData(); delete f; node = node->GetNext(); } m_fonts.Clear(); #endif }
//--------------------------------------------------------------- void IsoLine::drawIsoLine(GRIBOverlayFactory *pof, wxDC *dc, PlugIn_ViewPort *vp, bool bHiDef) { int nsegs = trace.size(); if(nsegs < 1) return; GetGlobalColor ( _T ( "UITX1" ), &isoLineColor ); #if wxUSE_GRAPHICS_CONTEXT wxGraphicsContext *pgc = NULL; #endif if(dc) { wxPen ppISO ( isoLineColor, 2 ); #if wxUSE_GRAPHICS_CONTEXT wxMemoryDC *pmdc; pmdc= wxDynamicCast(dc, wxMemoryDC); pgc = wxGraphicsContext::Create(*pmdc); pgc->SetPen(ppISO); #endif dc->SetPen(ppISO); } else { /* opengl */ #ifdef ocpnUSE_GL if(m_pixelMM > 0.2){ // pixel size large enough to render well // Enable anti-aliased lines, at best quality glEnable( GL_LINE_SMOOTH ); glEnable( GL_BLEND ); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); glHint( GL_LINE_SMOOTH_HINT, GL_NICEST ); glLineWidth( 2 ); } else{ glLineWidth( 0.4/m_pixelMM); // set a target line width by MM } glColor4ub(isoLineColor.Red(), isoLineColor.Green(), isoLineColor.Blue(), 255/*isoLineColor.Alpha()*/); glBegin( GL_LINES ); #endif } std::list<Segment *>::iterator it; //--------------------------------------------------------- // Dessine les segments //--------------------------------------------------------- for (it=trace.begin(); it!=trace.end(); it++) { Segment *seg = *it; if(vp->m_projection_type == PI_PROJECTION_MERCATOR || vp->m_projection_type == PI_PROJECTION_EQUIRECTANGULAR) { /* skip segments that go the wrong way around the world */ double sx1 = seg->px1, sx2 = seg->px2; if(sx2 - sx1 > 180) sx2 -= 360; else if(sx1 - sx2 > 180) sx1 -= 360; if((sx1+180 < vp->clon && sx2+180 > vp->clon) || (sx1+180 > vp->clon && sx2+180 < vp->clon) || (sx1-180 < vp->clon && sx2-180 > vp->clon) || (sx1-180 > vp->clon && sx2-180 < vp->clon)) continue; } wxPoint ab; GetCanvasPixLL(vp, &ab, seg->py1, seg->px1); wxPoint cd; GetCanvasPixLL(vp, &cd, seg->py2, seg->px2); if(dc) { #if wxUSE_GRAPHICS_CONTEXT if(bHiDef && pgc) pgc->StrokeLine(ab.x, ab.y, cd.x, cd.y); else #endif dc->DrawLine(ab.x, ab.y, cd.x, cd.y); } else { /* opengl */ #ifdef ocpnUSE_GL glVertex2d(ab.x, ab.y); glVertex2d(cd.x, cd.y); #endif } } #if 0 int text_sx, text_sy; dc.GetTextExtent(_T("10000"), &text_sx, &text_sy); // double m = text_sy / 2; int label_size = text_sx; int label_space = 400; // double coef = .01; int len = label_space/4; // Allocate an array big enough wxPoint *pPoints = new wxPoint[nsegs+1]; MySegListList::Node *listnode; listnode = m_SegListList.GetFirst(); while(listnode) { MySegList *listsort = listnode->GetData(); // Fill in the array MySegList::Node *node; Segment *seg; node = listsort->GetFirst(); if(node) { seg = node->GetData(); // wxPoint ab = vp->GetMercatorPixFromLL(seg->py1, seg->px1); // wxPoint ab(0,0); wxPoint ab; GetCanvasPixLL(vp, &ab, seg->py1, seg->px1); pPoints[0] = ab; } int ip=1; while (node) { seg = node->GetData(); // wxPoint cd = vp->GetMercatorPixFromLL(seg->py2, seg->px2); // wxPoint cd(0,0); wxPoint cd; GetCanvasPixLL(vp, &cd, seg->py2, seg->px2); pPoints[ip++] = cd; node=node->GetNext(); } int np = listsort->GetCount() + 1; if(np > 1) { // Test code // dc.DrawLines(np, pPoints); GenerateSpline(np, pPoints); // Test Code // dc.DrawLines(&ocpn_wx_spline_point_list, 0, 0 ); bool bDrawing = true; wxPoint lstart; wxList::compatibility_iterator snode = ocpn_wx_spline_point_list.GetFirst(); wxPoint *point0 = (wxPoint *)snode->GetData(); snode=snode->GetNext(); while (snode) { wxPoint *point = (wxPoint *)snode->GetData(); ClipResult res = cohen_sutherland_line_clip_i ( &point0->x, &point0->y, &point->x, &point->y, 0, vp->pix_width, 0, vp->pix_height ); if ( res != Invisible ) { int dl = (int)sqrt( (double)((point0->x - point->x) * (point0->x - point->x)) +(double)((point0->y - point->y) * (point0->y - point->y))); if(bDrawing) { len += dl; if(len > label_space) { bDrawing = false; len = 0; lstart = *point; } } else { len += dl; if(len > label_size) { bDrawing = true; len = 0; } } } *point0 = *point; snode=snode->GetNext(); } ClearSplineList(); } listnode = listnode->GetNext(); // Next continuous chain } delete[] pPoints; #endif #if wxUSE_GRAPHICS_CONTEXT delete pgc; #endif if(!dc) /* opengl */ glEnd(); }
void cbGCUpdatesMgr::DoRepositionItems( wxList& items ) { wxNode* pNode1 = items.GetFirst(); while( pNode1 ) { cbRectInfo& info = node_to_rect_info( pNode1 ); wxNode* pNode2 = items.GetFirst(); // and node itself mGC.AddObject( &info ); while( pNode2 ) { if ( pNode2 != pNode1 ) // node should not depend on itself { // Add references to objects on which this object // depends. Dependency here indicates intersection of current // bounds of this object with the initial bounds of the // other object. cbRectInfo& otherInfo = node_to_rect_info( pNode2 ); if ( rect_hits_rect( *info.mpCurBounds, *otherInfo.mpPrevBounds ) ) // the node depends on node mGC.AddDependency( &info, &otherInfo ); } pNode2 = pNode2->GetNext(); } pNode1 = pNode1->GetNext(); } mGC.ArrangeCollection(); // order nodes according "least-dependency" rule, // and find out cycled chains // Regular item nodes need to be resized, but not repainted (since // they stand in linear (not cyclic) dependency with other // regular nodes). wxNode* pNode = mGC.GetRegularObjects().GetFirst(); while ( pNode ) { cbRectInfo& info = *((cbRectInfo*)gc_node_to_obj(pNode)); if ( info.mpBar == NULL ) mpLayout->PositionClientWindow(); else info.mpPane->SizeBar( info.mpBar ); pNode = pNode->GetNext(); } // cycled item nodes, need to be both resized and repainted pNode = mGC.GetCycledObjects().GetFirst(); while ( pNode ) { cbRectInfo& info = *((cbRectInfo*)gc_node_to_obj(pNode)); if ( info.mpBar == NULL ) { wxWindow* pClntWnd = mpLayout->GetFrameClient(); mpLayout->PositionClientWindow(); // FIXME FIXME:: excessive! pClntWnd->Show( false ); pClntWnd->Show( true ); // OLD STUFF:: mpLayout->PositionClientWindow(); } else if ( info.mpBar->mpBarWnd ) { wxWindow* pWnd = info.mpBar->mpBarWnd; // resize info.mpPane->SizeBar( info.mpBar ); // repaint /* OLD STUFF:: bool isChoice = info.mpBar->IsKindOf( CLASSINFO( wxChoice ) ); //#ifdef __WINDOWS__ //int result = ::SendMessage( (HWND)pWnd->m_hWnd, WM_NCPAINT, 0, 0 ); //#endif */ // FIXME FIXME:: there's no other way to repaint non-client area of the wxWindow!! // so we do *excessive* "hide 'n show" pWnd->Show(false); pWnd->Show(true); pWnd->Refresh(); } pNode = pNode->GetNext(); } // release data prepared for GC alg. pNode = items.GetFirst(); while( pNode ) { cbRectInfo* pInfo = (cbRectInfo*)(pNode->GetData()); delete pInfo; pNode = pNode->GetNext(); } mGC.Reset(); // reinit GC // FIXME:: this is a dirty-workaround for messy client-area, // as a result of docking bar out of floated-container window if ( mpLayout->mClientWndRefreshPending ) { mpLayout->PositionClientWindow(); mpLayout->GetFrameClient()->Refresh(); } }
//--------------------------------------------------------------- void IsoLine::drawIsoLine(GRIBOverlayFactory *pof, wxDC &dc, PlugIn_ViewPort *vp, bool bShowLabels, bool bHiDef) { int nsegs = trace.size(); if(nsegs < 1) return; GetGlobalColor ( _T ( "UITX1" ), &isoLineColor ); wxPen ppISO ( isoLineColor, 2 ); #if wxUSE_GRAPHICS_CONTEXT wxMemoryDC *pmdc; // pmdc = dynamic_cast<wxMemoryDC*>(&dc); pmdc= wxDynamicCast(&dc, wxMemoryDC); wxGraphicsContext *pgc = wxGraphicsContext::Create(*pmdc); pgc->SetPen(ppISO); #endif dc.SetPen(ppISO); std::list<Segment *>::iterator it; //--------------------------------------------------------- // Dessine les segments //--------------------------------------------------------- for (it=trace.begin(); it!=trace.end(); it++) { Segment *seg = *it; { // wxPoint ab = vp->GetMercatorPixFromLL(seg->py1, seg->px1); // wxPoint cd = vp->GetMercatorPixFromLL(seg->py2, seg->px2); wxPoint ab; GetCanvasPixLL(vp, &ab, seg->py1, seg->px1); wxPoint cd; GetCanvasPixLL(vp, &cd, seg->py2, seg->px2); /// ClipResult res = cohen_sutherland_line_clip_i ( &ab.x, &ab.y, &cd.x, &cd.y, /// 0, vp->pix_width, 0, vp->pix_height ); /// if ( res != Invisible ) { #if wxUSE_GRAPHICS_CONTEXT if(bHiDef && pgc) pgc->StrokeLine(ab.x, ab.y, cd.x, cd.y); else dc.DrawLine(ab.x, ab.y, cd.x, cd.y); #else dc.DrawLine(ab.x, ab.y, cd.x, cd.y); #endif } } } //#endif int text_sx, text_sy; dc.GetTextExtent(_T("10000"), &text_sx, &text_sy); // double m = text_sy / 2; int label_size = text_sx; int label_space = 400; // double coef = .01; int len = label_space/4; // Allocate an array big enough wxPoint *pPoints = new wxPoint[nsegs+1]; MySegListList::Node *listnode; listnode = m_SegListList.GetFirst(); while(listnode) { MySegList *listsort = listnode->GetData(); // Fill in the array MySegList::Node *node; Segment *seg; node = listsort->GetFirst(); if(node) { seg = node->GetData(); // wxPoint ab = vp->GetMercatorPixFromLL(seg->py1, seg->px1); // wxPoint ab(0,0); wxPoint ab; GetCanvasPixLL(vp, &ab, seg->py1, seg->px1); pPoints[0] = ab; } int ip=1; while (node) { seg = node->GetData(); // wxPoint cd = vp->GetMercatorPixFromLL(seg->py2, seg->px2); // wxPoint cd(0,0); wxPoint cd; GetCanvasPixLL(vp, &cd, seg->py2, seg->px2); pPoints[ip++] = cd; node=node->GetNext(); } int np = listsort->GetCount() + 1; if(np > 1) { // Test code // dc.DrawLines(np, pPoints); GenerateSpline(np, pPoints); // Test Code // dc.DrawLines(&ocpn_wx_spline_point_list, 0, 0 ); bool bDrawing = true; wxPoint lstart; wxList::compatibility_iterator snode = ocpn_wx_spline_point_list.GetFirst(); wxPoint *point0 = (wxPoint *)snode->GetData(); snode=snode->GetNext(); while (snode) { wxPoint *point = (wxPoint *)snode->GetData(); ClipResult res = cohen_sutherland_line_clip_i ( &point0->x, &point0->y, &point->x, &point->y, 0, vp->pix_width, 0, vp->pix_height ); if ( res != Invisible ) { int dl = (int)sqrt( (double)((point0->x - point->x) * (point0->x - point->x)) +(double)((point0->y - point->y) * (point0->y - point->y))); if(bDrawing) { len += dl; if(len > label_space) { bDrawing = false; len = 0; lstart = *point; } } else { len += dl; if(len > label_size) { bDrawing = true; len = 0; #if 0 if(bShowLabels) { double label_angle = atan2((double)(lstart.y - point->y), (double)(point->x - lstart.x)) * 180. / PI; wxString label; label.Printf(_T("%d"), (int)(value*coef+0.5)); double xs = lstart.x - (m * sin(label_angle * PI / 180.)); double ys = lstart.y - (m * cos(label_angle * PI / 180.)); dc.DrawRotatedText(label, (int)xs, (int)ys, label_angle); } #endif } } #if 0 // if(bDrawing || !bShowLabels) { if(bHiDef) dc.StrokeLine(point0->x, point0->y, point->x, point->y); else dc.DrawLine(point0->x, point0->y, point->x, point->y); } #endif } *point0 = *point; snode=snode->GetNext(); } ClearSplineList(); } listnode = listnode->GetNext(); // Next continuous chain } delete[] pPoints; #if wxUSE_GRAPHICS_CONTEXT delete pgc; #endif }