void CRSpinCtrlUpdateEvent::Process (CRCapturedEvent **pendingEvt)
{
    wxWindow *wdwEvtObject = wxDynamicCast (m_event->GetEventObject (), wxWindow);
    wxASSERT (wdwEvtObject != NULL);

    // If pending event is a text update event on the same (!) control, then
    // destroy it to prevent undesirable code emitting:
    if (*pendingEvt != NULL) {

        CRTextUpdateEvent *pendingTextUpdateEvt =
            dynamic_cast< CRTextUpdateEvent * >(*pendingEvt);
        if (pendingTextUpdateEvt != NULL) {
            if (m_event->GetEventObject () ==
                    pendingTextUpdateEvt->GetEvent ()->GetEventObject ()) {

                delete *pendingEvt;
                *pendingEvt = NULL;
            }
        }
    }

    CRWindowHierarchyHandler *hierarchy = CRWindowHierarchyHandler::GetInstance ();
    wxASSERT (hierarchy != NULL);

    m_spinCtrlName = wdwEvtObject->GetName ();
    m_containerName = hierarchy->FindContainerName (wdwEvtObject);
    wxASSERT (!m_containerName.IsEmpty ());

    wxASSERT (m_event->IsCommandEvent ());
    wxCommandEvent *cmdEvt = wxDynamicCast (m_event, wxCommandEvent);
    wxASSERT (cmdEvt != NULL);
    m_spinCtrlValue = cmdEvt->GetInt ();
}
void CRButtonClickEvent::Process (CRCapturedEvent** WXUNUSED(pendingEvt))
{
    wxWindow *wdwEvtObject = wxDynamicCast (m_event->GetEventObject (), wxWindow);
    wxASSERT (wdwEvtObject != NULL);

    CRWindowHierarchyHandler *hierarchy = CRWindowHierarchyHandler::GetInstance();
    wxASSERT (hierarchy != NULL);
    m_buttonName = wdwEvtObject->GetName ();
    m_containerName = hierarchy->FindContainerName (wdwEvtObject);
    wxASSERT (!m_containerName.IsEmpty ());
}
void CRTreeItemRightClickEvent::Process (CRCapturedEvent **pendingEvt)
{
    wxWindow *wdwEvtObject = wxDynamicCast (m_event->GetEventObject (), wxWindow);
    wxASSERT (wdwEvtObject != NULL);

    CRWindowHierarchyHandler *hierarchy = CRWindowHierarchyHandler::GetInstance();
    wxASSERT (hierarchy != NULL);
    m_treeCtrlName = wdwEvtObject->GetName ();
    m_containerName = hierarchy->FindContainerName (wdwEvtObject);
    wxASSERT (!m_containerName.IsEmpty ());

    this->BuildTreeItemSiblingIdxHierarchyList ();
}
void CRWindowHierarchyHandlerTest::testFindWindowContainerName ()
{
    wxDialog dialog (NULL, -1, _T("CRWindowHierarchyHandlerTest Dialog"),
            wxDefaultPosition);
#ifndef __WXGTK__
    WxGuiTestHelper::FlushEventQueue ();
#endif

    wxSizer *topSizer = new wxBoxSizer (wxVERTICAL);
    wxPanel *upperPanel = new wxPanel (&dialog);
    upperPanel->SetName (_T("UpperPanel"));
    // XRC panel and button:
    wxPanel *panel = wxXmlResource::Get ()->LoadPanel (upperPanel, _T("CapturePanel"));
    CPPUNIT_ASSERT_MESSAGE ("Loading test panel failed", panel != NULL);
    wxButton *button = XRCCTRL (*panel, "ExitButton", wxButton);
    CPPUNIT_ASSERT_MESSAGE ("Test button not found", button != NULL);
    // "Manual panel and button:
    wxPanel *panel2 = new wxPanel (&dialog);
    panel2->SetName (_T("NonXRCPanel"));
    wxButton *button2 = new wxButton (panel2, -1, _T("Button2"));//, wxDefaultPosition
    button2->SetName (_T("NonXRCButton"));
    wxSizer *sizer = new wxBoxSizer (wxVERTICAL);
    sizer->Add (button2);
    panel2->SetSizer (sizer);
    // Finish dialog creation:
    topSizer->Add (upperPanel, 0, wxEXPAND| wxALL | wxGROW | wxADJUST_MINSIZE );
    topSizer->Add (panel2, 0, wxEXPAND| wxALL | wxGROW | wxADJUST_MINSIZE );
    dialog.SetSizer (topSizer);
    topSizer->SetSizeHints (&dialog);
    //dialog.Show ();
    //Tst::TempInteractive interactive;
    //interactive.ShowCurrentGui ();

    CRWindowHierarchyHandler *hierarchy = CRWindowHierarchyHandler::GetInstance ();
    
    wxString btnContName = hierarchy->FindContainerName (button);
    CPPUNIT_ASSERT_MESSAGE ("Find button window container name failed",
            !btnContName.IsEmpty ());
    CPPUNIT_ASSERT_MESSAGE ("Find button window container returned wrong name",
            panel->GetName () == btnContName);

    wxString btnContName2 = hierarchy->FindContainerName (button2);
    CPPUNIT_ASSERT_MESSAGE ("Find button window container name failed (non XRC)",
            !btnContName2.IsEmpty ());
    CPPUNIT_ASSERT_MESSAGE ("Find button window container returned wrong name (non XRC)",
            panel2->GetName () == btnContName2);
}
void CRChoiceSelectionEvent::Process (CRCapturedEvent **pendingEvt)
{
    wxWindow *wdwEvtObject = wxDynamicCast (m_event->GetEventObject (), wxWindow);
    wxASSERT (wdwEvtObject != NULL);

    CRWindowHierarchyHandler *hierarchy = CRWindowHierarchyHandler::GetInstance ();
    wxASSERT (hierarchy != NULL);

    m_choiceName = wdwEvtObject->GetName ();
    m_containerName = hierarchy->FindContainerName (wdwEvtObject);
    wxASSERT (!m_containerName.IsEmpty ());

    wxASSERT (m_event->IsCommandEvent ());
    wxCommandEvent *cmdEvt = wxDynamicCast (m_event, wxCommandEvent);
    wxASSERT (cmdEvt != NULL);
    int choiceSel = cmdEvt->GetSelection ();
    wxChoice *choice = wxDynamicCast (wdwEvtObject, wxChoice);
    wxASSERT (choice != NULL);
    m_choiceValue = choice->GetString (choiceSel);
}
void CRCheckBoxClickEvent::Process (CRCapturedEvent **pendingEvt)
{
    wxWindow *wdwEvtObject = wxDynamicCast (m_event->GetEventObject (), wxWindow);
    wxASSERT (wdwEvtObject != NULL);

    CRWindowHierarchyHandler *hierarchy = CRWindowHierarchyHandler::GetInstance ();
    wxASSERT (hierarchy != NULL);

    if (hierarchy->FindXRCNode (wdwEvtObject) != NULL) {

        m_isXRC = true;
    }
    m_checkBoxName = wdwEvtObject->GetName ();
    m_containerName = hierarchy->FindContainerName (wdwEvtObject);
    wxASSERT (!m_containerName.IsEmpty ());

    wxASSERT (m_event->IsCommandEvent ());
    wxCommandEvent *cmdEvt = wxDynamicCast (m_event, wxCommandEvent);
    wxASSERT (cmdEvt != NULL);
    m_isChecked = cmdEvt->IsChecked ();
}