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

📄 foldpanelitem.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        foldpanelitem.cpp// Purpose:// Author:      Jorgen Bodde// Modified by: ABX - 19/12/2004 : possibility of horizontal orientation//                               : wxWidgets coding standards// Created:     22/06/2004// RCS-ID:      $Id: foldpanelitem.cpp,v 1.4 2004/12/10 12:01:04 ABX Exp $// Copyright:   (c) Jorgen Bodde// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// For compilers that support precompilation, includes "wx/wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#ifndef WX_PRECOMP    #include "wx/wx.h"#endif#include "wx/foldbar/foldpanelbar.h"#include <wx/arrimpl.cpp>WX_DEFINE_OBJARRAY(wxFoldWindowItemArray);//----------------------------------------------------------------------------// wxFoldPanelItem//----------------------------------------------------------------------------IMPLEMENT_CLASS( wxFoldPanelItem, wxPanel )BEGIN_EVENT_TABLE(wxFoldPanelItem,wxPanel)    EVT_CAPTIONBAR(wxID_ANY, wxFoldPanelItem::OnPressCaption)    EVT_PAINT(wxFoldPanelItem::OnPaint)    //EVT_SIZE(wxFoldPanelItem::OnSize)END_EVENT_TABLE()wxFoldPanelItem::wxFoldPanelItem( wxWindow *parent, const wxString &caption, wxImageList *icons, bool collapsedInitially,                                  const wxCaptionBarStyle &style )    : m_controlCreated(false)    , m_userSize(0)    , m_panelSize(0)    , m_lastInsertPos(0)    , m_itemPos(0)    , m_userSized(false){    wxCHECK2(parent, return);    wxPanel::Create(parent, wxID_ANY);    // create the caption bar, in collapsed or expanded state    m_captionBar = new wxCaptionBar(this, caption, icons, wxID_ANY, style, wxPoint(0,0));    //m_captionBar->SetBoldFont();    if(collapsedInitially)        m_captionBar->Collapse();    m_controlCreated = true;    // make initial size for component, if collapsed, the    // size is determined on the panel height and won't change    wxSize size = m_captionBar->GetSize();    m_panelSize = IsVertical()?size.GetHeight():size.GetWidth();    m_lastInsertPos = m_panelSize;}void wxFoldPanelItem::AddWindow(wxWindow *window, int flags, int ySpacing, int leftSpacing, int rightSpacing){    wxASSERT(window);    wxFoldWindowItem *wi = new wxFoldWindowItem(window, flags, ySpacing, leftSpacing, rightSpacing);    m_items.Add(wi);    bool vertical = this->IsVertical();    window->SetSize( vertical ? leftSpacing : m_lastInsertPos + ySpacing,                     vertical ? m_lastInsertPos + ySpacing : leftSpacing,                     wxDefaultCoord,                     wxDefaultCoord,                     wxSIZE_USE_EXISTING);    m_lastInsertPos += wi->GetWindowLength( vertical );    ResizePanel();}void wxFoldPanelItem::AddSeparator(const wxColour &color, int ySpacing, int leftSpacing, int rightSpacing){    wxFoldWindowItem *wi = new wxFoldWindowItem(m_lastInsertPos, color, ySpacing, leftSpacing, rightSpacing);    m_items.Add(wi);    m_lastInsertPos += wi->GetWindowLength( this->IsVertical() );    ResizePanel();}wxFoldPanelItem::~wxFoldPanelItem(){    m_items.Clear();}void wxFoldPanelItem::OnPressCaption(wxCaptionBarEvent &event){    // tell the upper container we are responsible    // for this event, so it can fold the panel item    // and do a refresh    event.SetTag((void *)this);    event.Skip();}/* Inactive */void wxFoldPanelItem::OnSize(wxSizeEvent &event){    // deny access to pointers (yet)    if(!m_controlCreated)    {        event.Skip();        return;    }    // calculate the size needed for this window, so    // we get the parent size, and determine the size for the caption and the panel    //wxRect rect = GetRect();    //wxSize size(0,wxDefaultCoord);    //size.SetWidth(rect.GetWidth());    //m_captionBar->SetSize(size);}int wxFoldPanelItem::Reposition(int pos){    // NOTE: Call Resize before Reposition when an item is added, because the new    // size needed will be calculated by Resize. Ofcourse the relative position    // of the controls have to be correct in respect to the caption bar    Freeze();    bool vertical = this->IsVertical();    SetSize( vertical ? wxDefaultCoord : pos,             vertical ? pos : wxDefaultCoord,             wxDefaultCoord,             wxDefaultCoord,             wxSIZE_USE_EXISTING);    m_itemPos = pos;    Thaw();    return GetPanelLength();}void wxFoldPanelItem::ResizePanel(){    bool vertical = IsVertical();    // prevent unnecessary updates by blocking repaints for a sec    Freeze();    // force this panel to take the width of the parent panel and the y of the    // user or calulated width (which will be recalculated by the contents here    wxSize size;    if(m_captionBar->IsCollapsed())    {        size = m_captionBar->GetSize();        m_panelSize = vertical ? size.GetHeight() : size.GetWidth();    }    else    {        size = GetBestSize();        m_panelSize = vertical ? size.GetHeight() : size.GetWidth();        if(m_userSized)        {            if ( vertical )                size.SetHeight(m_userSize);            else                size.SetWidth(m_userSize);        }    }    wxSize pnlsize = GetParent()->GetSize();    if ( vertical )        size.SetWidth(pnlsize.GetWidth());    else        size.SetHeight(pnlsize.GetHeight());    // resize caption bar    m_captionBar->SetSize( vertical ? size.GetWidth() : wxDefaultCoord,                          vertical ? wxDefaultCoord : size.GetHeight());    // resize the panel    SetSize(size);    // go by all the controls and call Layout    for(size_t i = 0; i < m_items.GetCount(); i++)        m_items.Item(i).ResizeItem( vertical ? size.GetWidth() : size.GetHeight() , vertical );    // and draw all    Thaw();}void wxFoldPanelItem::OnPaint(wxPaintEvent& WXUNUSED(event)){    // draw all the items that are lines    wxPaintDC dc(this);    bool vertical = IsVertical();    for(size_t i = 0; i < m_items.GetCount(); i++)    {        wxFoldWindowItem &item = m_items.Item(i);        wxPen pen(item.GetLineColour(), 1, wxSOLID);        if(item.GetType() == wxFoldWindowItem::SEPARATOR)        {            dc.SetPen(pen);            int a = item.GetLeftSpacing();            int b = item.GetLineY() + item.GetSpacing();            int c = item.GetLineLength();            int d = a + c;            if (vertical)                dc.DrawLine(a, b, d, b);            else                dc.DrawLine(b, a, b, d);        }    }}bool wxFoldPanelItem::IsVertical() const{    // grandparent of wxFoldPanelItem is wxFoldPanelBar    // default is vertical    wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);    wxCHECK_MSG( panel, true, _T("wrong parent") );    wxFoldPanelBar *bar = wxDynamicCast(panel->GetParent(), wxFoldPanelBar);    wxCHECK_MSG( bar, true, _T("wrong parent") );    return bar->IsVertical();}

⌨️ 快捷键说明

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