Ejemplo n.º 1
0
void
compzillaWindow::Destroyed ()
{
    SPEW ("DestroyWindow this=%p, window=%p, observers=%d, canvases=%d\n", 
          this, mWindow, mObservers.Count(), mContentNodes.Count());

    if (mIsDestroyed)
        return;

    mIsDestroyed = true;

    // Allow a caller to remove O(N^2) behavior by removing end-to-start.
    for (PRUint32 i = mContentNodes.Count() - 1; i != PRUint32(-1); --i) {
        ConnectListeners (false, mContentNodes.ObjectAt(i));
    }
    mContentNodes.Clear ();

    // Copy the observers so list iteration is reentrant.
    nsCOMArray<compzillaIWindowObserver> observers(mObservers);
    mObservers.Clear ();

    for (PRUint32 i = observers.Count() - 1; i != PRUint32(-1); --i) {
        observers.ObjectAt(i)->Destroy ();
    }
}
Ejemplo n.º 2
0
void ScriptState::disposePerContextData()
{
    Vector<Observer*> observers(m_observers);
    for (auto& observer : observers)
        observer->willDisposeScriptState(this);
    m_perContextData = nullptr;
}
Ejemplo n.º 3
0
// Notify
void
Notifier::Notify() const
{
	if (!fSuspended) {
		BList observers(fListeners);
		int32 count = observers.CountItems();
		for (int32 i = 0; i < count; i++)
			((Listener*)observers.ItemAtFast(i))->ObjectChanged(this);
		fPendingNotifications = false;
	} else {
		fPendingNotifications = true;
	}
}
Ejemplo n.º 4
0
TEST(ObserverListTest, Basic) {
	Observer a(1), b(2), c(3);
	EXPECT_EQ(1, a.num());
	EXPECT_EQ(2, b.num());
	EXPECT_EQ(3, c.num());
	std::shared_ptr<base::ObserverList<Observer>> observers(new base::ObserverList<Observer>());
	observers->AddObserver(&a);
	observers->AddObserver(&b);
	observers->AddObserver(&c);
	FOR_EACH_OBSERVER(Observer, observers, set_num(10));
	EXPECT_EQ(10, a.num());
	EXPECT_EQ(10, b.num());
	EXPECT_EQ(10, c.num());

}
Ejemplo n.º 5
0
TEST(state, capsule_carries_its_own_watchers)
{
  auto sig = std::shared_ptr<detail::state_up_down_signal<int>>{};
  auto s = testing::spy();
  {
    auto st = make_state(42);
    sig = detail::access::signal(st);
    watch(st, s);
    sig->push_down(12);
    sig->send_down();
    sig->notify();
    EXPECT_EQ(1, s.count());
  }
  sig->push_down(7);
  sig->send_down();
  sig->notify();
  EXPECT_EQ(1, s.count());
  EXPECT_TRUE(sig->observers().empty());
}
Ejemplo n.º 6
0
void
nsObserverList::FillObserverArray(nsCOMArray<nsIObserver>& aArray)
{
  aArray.SetCapacity(mObservers.Length());

  nsTArray<ObserverRef> observers(mObservers);

  for (int32_t i = observers.Length() - 1; i >= 0; --i) {
    if (observers[i].isWeakRef) {
      nsCOMPtr<nsIObserver> o(do_QueryReferent(observers[i].asWeak()));
      if (o) {
        aArray.AppendObject(o);
      } else {
        // the object has gone away, remove the weakref
        mObservers.RemoveElement(observers[i].asWeak());
      }
    } else {
      aArray.AppendObject(observers[i].asObserver());
    }
  }
}
Ejemplo n.º 7
0
void LineChartCanvas::OnDblClick(wxMouseEvent& event)
{
    wxPoint pos = event.GetPosition();
    
    wxSize size(GetVirtualSize());
    int win_width = size.GetWidth();
    int win_height = size.GetHeight();
    size_t tms = tm_rects.size();
    for (size_t t=0; t<tms; ++t) {
        GdaRectangle r(*((GdaRectangle*) tm_rects[t]));
        if (r.lower_left.y - pos.y < 40 && r.lower_left.y - pos.y > -40) {
            bool opened = false;
            wxPoint pt;
            FramesManager* fm = project->GetFramesManager();
            std::list<FramesManagerObserver*> observers(fm->getCopyObservers());
            std::list<FramesManagerObserver*>::iterator it;
            for (it=observers.begin(); it != observers.end(); ++it) {
                if (TimeChooserDlg* w = dynamic_cast<TimeChooserDlg*>(*it)) {
                    LOG_MSG("TimeChooserDlg already opened.");
                    w->Show(true);
                    w->Maximize(false);
                    w->Raise();
                    pt = w->GetPosition();
                    opened = true;
                }
            }
            if (!opened) {
                LOG_MSG("Opening a new TimeChooserDlg");
                TimeChooserDlg* dlg = new TimeChooserDlg(0, project->GetFramesManager(),
                                                         project->GetTimeState(),
                                                         project->GetTableState(),
                                                         project->GetTableInt());
                dlg->Show(true);
                pt = dlg->GetPosition();
            }
            
            opened = false;
            for (it=observers.begin(); it != observers.end(); ++it) {
                if (VarGroupingEditorDlg* w = dynamic_cast<VarGroupingEditorDlg*>(*it))
                {
                    LOG_MSG("VarGroupingEditorDlg already opened.");
                    w->Show(true);
                    w->Maximize(false);
                    w->Raise();
                    w->SetPosition(wxPoint(pt.x, pt.y + 130));
                    opened =true;
                    break;
                }
            }
            if (!opened) {
                LOG_MSG("Opening a new VarGroupingEditorDlg");
                VarGroupingEditorDlg* dlg = new VarGroupingEditorDlg(project, this);
                dlg->Show(true);
                int start_x = pt.x - 200;
                if (start_x) start_x = 0;
                dlg->SetPosition(wxPoint(pt.x, pt.y + 130));
            }
            return;
        }
    }
}