⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wxsresourcetree.cpp

📁 非常好用的可移植的多平台C/C++源代码编辑器
💻 CPP
字号:
#include "wxsheaders.h"
#include "wxsresourcetree.h"
#include "wxsglobals.h"
#include "resources/wxswindowres.h"
#include "resources/wxswindowresdataobject.h"
#include "wxsevent.h"
#include "widget.h"
#include "wxspalette.h"
#include "wxswidgetfactory.h"
#include "wxswinundobuffer.h"

void wxsResourceTree::OnSelectResource(wxTreeEvent& event)
{
    wxsResourceTreeData* Data = ((wxsResourceTreeData*)GetItemData(event.GetItem()));
    if ( Data )
    {
        switch ( Data->Type )
        {
            case wxsResourceTreeData::tWidget:
                {
                    wxsSelectWidget(Data->Widget);
                }
                break;

            case wxsResourceTreeData::tResource:
                {
                    wxsSelectRes(Data->Resource);
                }
                break;

            default:;
        }
    }
}

void wxsResourceTree::OnBeginDrag(wxTreeEvent& event)
{
    wxsResourceTreeData* Data = ((wxsResourceTreeData*)GetItemData(event.GetItem()));

    if ( !Data ) return;
    if ( Data->Type == wxsResourceTreeData::tWidget &&
         Data->Widget->GetParent() )
    {
        Dragged = Data->Widget;
        event.Allow();
    }
}

void wxsResourceTree::OnEndDrag(wxTreeEvent& event)
{
    wxsResourceTreeData* Data = ((wxsResourceTreeData*)GetItemData(event.GetItem()));

    if ( !Data ) return;
    // Because we're dragging widgets, both widgets muse have open eeditors
    if ( Data->Type == wxsResourceTreeData::tWidget )
    {
        wxsWidget* Dest = Data->Widget;
        if ( Dest == Dragged ) return;

        // Determining insertion method
        int InsertionType = wxsPalette::itBefore; //wxsPALETTE()->GetInsertionType();

        switch ( InsertionType )
        {
        	case wxsPalette::itAfter:
        	case wxsPalette::itBefore:
                if (  !Dest->GetParent() ||
                     ( Dest->GetInfo().Sizer &&
                      !Dest->GetParent()->GetInfo().Sizer ) )
                {
                	InsertionType = wxsPalette::itInto;
                }
                break;

            case wxsPalette::itInto:
                if ( !Dest->IsContainer() )
                {
                	InsertionType = wxsPalette::itBefore;
                }
                break;
        }

        // Copying data
        wxsWindowResDataObject Data;
        Data.AddWidget(Dragged);

        wxsWidget* Insert = Data.BuildWidget(Dest->GetResource());
        if ( !Insert )
        {
        	DebLog(_("wxSmith: Error while cloning widget"));
        	return;
        }

        wxsWindowEditor* Editor1 = (wxsWindowEditor*)Dest->GetResource()->GetEditor();
        wxsWindowEditor* Editor2 = (wxsWindowEditor*)Dragged->GetResource()->GetEditor();
        Editor1->StartMultipleChange();
        bool Done;
        switch ( InsertionType )
        {
        	case wxsPalette::itAfter:
                Done = Editor1->InsertAfter(Insert,Dest);
                break;

            case wxsPalette::itBefore:
                Done = Editor1->InsertBefore(Insert,Dest);
                break;

            case wxsPalette::itInto:
                Done = Editor1->InsertInto(Insert,Dest);
                break;

            default:
                DebLog(_T("wxSmith: Internal error inside dragging copy"));
                wxsKILL(Insert);
                Done = false;
        }

        if ( Editor1 != Editor2 )
        {
        	Editor1->EndMultipleChange();
        	Editor2->StartMultipleChange();
        }

        if ( Done && !::wxGetKeyState(WXK_CONTROL) )
        {
        	wxsKILL(Dragged);
        }

        Dest->GetResource()->CheckBaseProperties(true,NULL);

        Editor2->EndMultipleChange();

        if ( Done )
        {
        	Editor1->GetUndoBuff()->StoreChange();
        }
    }
}

BEGIN_EVENT_TABLE(wxsResourceTree,wxTreeCtrl)
    EVT_TREE_SEL_CHANGED(wxID_ANY,wxsResourceTree::OnSelectResource)
    EVT_TREE_BEGIN_DRAG(wxID_ANY,wxsResourceTree::OnBeginDrag)
    EVT_TREE_BEGIN_RDRAG(wxID_ANY,wxsResourceTree::OnBeginDrag)
    EVT_TREE_END_DRAG(wxID_ANY,wxsResourceTree::OnEndDrag)
END_EVENT_TABLE()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -