wxRTC functions now operate on the currently focused object, which by default is the whole buffer. Up to three property commands are now shown on the context menu, depending on available objects in the current hierarchy. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66680 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
364 lines
10 KiB
C++
364 lines
10 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/richtext/richtexttabspage.cpp
|
|
// Purpose:
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 10/4/2006 8:03:20 AM
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if wxUSE_RICHTEXT
|
|
|
|
#include "wx/richtext/richtexttabspage.h"
|
|
|
|
/*!
|
|
* wxRichTextTabsPage type definition
|
|
*/
|
|
|
|
IMPLEMENT_DYNAMIC_CLASS( wxRichTextTabsPage, wxRichTextDialogPage )
|
|
|
|
/*!
|
|
* wxRichTextTabsPage event table definition
|
|
*/
|
|
|
|
BEGIN_EVENT_TABLE( wxRichTextTabsPage, wxRichTextDialogPage )
|
|
|
|
////@begin wxRichTextTabsPage event table entries
|
|
EVT_LISTBOX( ID_RICHTEXTTABSPAGE_TABLIST, wxRichTextTabsPage::OnTablistSelected )
|
|
|
|
EVT_BUTTON( ID_RICHTEXTTABSPAGE_NEW_TAB, wxRichTextTabsPage::OnNewTabClick )
|
|
EVT_UPDATE_UI( ID_RICHTEXTTABSPAGE_NEW_TAB, wxRichTextTabsPage::OnNewTabUpdate )
|
|
|
|
EVT_BUTTON( ID_RICHTEXTTABSPAGE_DELETE_TAB, wxRichTextTabsPage::OnDeleteTabClick )
|
|
EVT_UPDATE_UI( ID_RICHTEXTTABSPAGE_DELETE_TAB, wxRichTextTabsPage::OnDeleteTabUpdate )
|
|
|
|
EVT_BUTTON( ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS, wxRichTextTabsPage::OnDeleteAllTabsClick )
|
|
EVT_UPDATE_UI( ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS, wxRichTextTabsPage::OnDeleteAllTabsUpdate )
|
|
|
|
////@end wxRichTextTabsPage event table entries
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
IMPLEMENT_HELP_PROVISION(wxRichTextTabsPage)
|
|
|
|
/*!
|
|
* wxRichTextTabsPage constructors
|
|
*/
|
|
|
|
wxRichTextTabsPage::wxRichTextTabsPage( )
|
|
{
|
|
Init();
|
|
}
|
|
|
|
wxRichTextTabsPage::wxRichTextTabsPage( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
|
|
{
|
|
Init();
|
|
Create(parent, id, pos, size, style);
|
|
}
|
|
|
|
/*!
|
|
* Initialise members
|
|
*/
|
|
|
|
void wxRichTextTabsPage::Init()
|
|
{
|
|
m_tabsPresent = false;
|
|
|
|
////@begin wxRichTextTabsPage member initialisation
|
|
m_tabEditCtrl = NULL;
|
|
m_tabListCtrl = NULL;
|
|
////@end wxRichTextTabsPage member initialisation
|
|
}
|
|
|
|
/*!
|
|
* wxRichTextTabsPage creator
|
|
*/
|
|
|
|
bool wxRichTextTabsPage::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
|
|
{
|
|
////@begin wxRichTextTabsPage creation
|
|
wxRichTextDialogPage::Create( parent, id, pos, size, style );
|
|
|
|
CreateControls();
|
|
if (GetSizer())
|
|
{
|
|
GetSizer()->SetSizeHints(this);
|
|
}
|
|
Centre();
|
|
////@end wxRichTextTabsPage creation
|
|
return true;
|
|
}
|
|
|
|
/*!
|
|
* Control creation for wxRichTextTabsPage
|
|
*/
|
|
|
|
void wxRichTextTabsPage::CreateControls()
|
|
{
|
|
////@begin wxRichTextTabsPage content construction
|
|
wxRichTextTabsPage* itemRichTextDialogPage1 = this;
|
|
|
|
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
|
|
itemRichTextDialogPage1->SetSizer(itemBoxSizer2);
|
|
|
|
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
|
|
itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5);
|
|
|
|
wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
|
|
itemBoxSizer3->Add(itemBoxSizer4, 1, wxGROW, 5);
|
|
|
|
wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
|
|
itemBoxSizer4->Add(itemBoxSizer5, 0, wxGROW, 5);
|
|
|
|
wxStaticText* itemStaticText6 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Position (tenths of a mm):"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
|
|
|
|
m_tabEditCtrl = new wxTextCtrl( itemRichTextDialogPage1, ID_RICHTEXTTABSPAGE_TABEDIT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
|
m_tabEditCtrl->SetHelpText(_("The tab position."));
|
|
if (wxRichTextTabsPage::ShowToolTips())
|
|
m_tabEditCtrl->SetToolTip(_("The tab position."));
|
|
itemBoxSizer5->Add(m_tabEditCtrl, 0, wxGROW|wxALL, 5);
|
|
|
|
wxArrayString m_tabListCtrlStrings;
|
|
m_tabListCtrlStrings.Add(_("The tab positions."));
|
|
m_tabListCtrl = new wxListBox( itemRichTextDialogPage1, ID_RICHTEXTTABSPAGE_TABLIST, wxDefaultPosition, wxSize(80, 200), m_tabListCtrlStrings, wxLB_SINGLE );
|
|
itemBoxSizer5->Add(m_tabListCtrl, 1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
|
|
|
|
wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxVERTICAL);
|
|
itemBoxSizer4->Add(itemBoxSizer10, 0, wxGROW, 5);
|
|
|
|
wxStaticText* itemStaticText11 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemBoxSizer10->Add(itemStaticText11, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5);
|
|
|
|
wxButton* itemButton12 = new wxButton( itemRichTextDialogPage1, ID_RICHTEXTTABSPAGE_NEW_TAB, _("&New"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemButton12->SetHelpText(_("Click to create a new tab position."));
|
|
if (wxRichTextTabsPage::ShowToolTips())
|
|
itemButton12->SetToolTip(_("Click to create a new tab position."));
|
|
itemBoxSizer10->Add(itemButton12, 0, wxGROW|wxALL, 5);
|
|
|
|
wxButton* itemButton13 = new wxButton( itemRichTextDialogPage1, ID_RICHTEXTTABSPAGE_DELETE_TAB, _("&Delete"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemButton13->SetHelpText(_("Click to delete the selected tab position."));
|
|
if (wxRichTextTabsPage::ShowToolTips())
|
|
itemButton13->SetToolTip(_("Click to delete the selected tab position."));
|
|
itemBoxSizer10->Add(itemButton13, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
wxButton* itemButton14 = new wxButton( itemRichTextDialogPage1, ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS, _("Delete A&ll"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemButton14->SetHelpText(_("Click to delete all tab positions."));
|
|
if (wxRichTextTabsPage::ShowToolTips())
|
|
itemButton14->SetToolTip(_("Click to delete all tab positions."));
|
|
itemBoxSizer10->Add(itemButton14, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
////@end wxRichTextTabsPage content construction
|
|
}
|
|
|
|
/// Transfer data from/to window
|
|
bool wxRichTextTabsPage::TransferDataFromWindow()
|
|
{
|
|
wxPanel::TransferDataFromWindow();
|
|
|
|
wxRichTextAttr* attr = GetAttributes();
|
|
|
|
if (m_tabsPresent)
|
|
{
|
|
wxArrayInt tabs;
|
|
size_t i;
|
|
for (i = 0; i < m_tabListCtrl->GetCount(); i++)
|
|
{
|
|
tabs.Add(wxAtoi(m_tabListCtrl->GetString(i)));
|
|
}
|
|
attr->SetTabs(tabs);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool wxRichTextTabsPage::TransferDataToWindow()
|
|
{
|
|
wxPanel::TransferDataToWindow();
|
|
|
|
wxRichTextAttr* attr = GetAttributes();
|
|
|
|
m_tabListCtrl->Clear();
|
|
m_tabEditCtrl->SetValue(wxEmptyString);
|
|
|
|
if (attr->HasTabs())
|
|
{
|
|
m_tabsPresent = true;
|
|
size_t i;
|
|
for (i = 0; i < attr->GetTabs().GetCount(); i++)
|
|
{
|
|
wxString s(wxString::Format(wxT("%d"), attr->GetTabs()[i]));
|
|
m_tabListCtrl->Append(s);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
static int wxTabSortFunc(int* a, int* b)
|
|
{
|
|
if ((*a) < (*b))
|
|
return -1;
|
|
else if ((*b) < (*a))
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
/// Sorts the tab array
|
|
void wxRichTextTabsPage::SortTabs()
|
|
{
|
|
wxArrayInt tabs;
|
|
size_t i;
|
|
for (i = 0; i < m_tabListCtrl->GetCount(); i++)
|
|
{
|
|
tabs.Add(wxAtoi(m_tabListCtrl->GetString(i)));
|
|
}
|
|
tabs.Sort(& wxTabSortFunc);
|
|
|
|
m_tabListCtrl->Clear();
|
|
for (i = 0; i < tabs.GetCount(); i++)
|
|
{
|
|
wxString s(wxString::Format(wxT("%d"), tabs[i]));
|
|
m_tabListCtrl->Append(s);
|
|
}
|
|
}
|
|
|
|
wxRichTextAttr* wxRichTextTabsPage::GetAttributes()
|
|
{
|
|
return wxRichTextFormattingDialog::GetDialogAttributes(this);
|
|
}
|
|
|
|
/*!
|
|
* Should we show tooltips?
|
|
*/
|
|
|
|
bool wxRichTextTabsPage::ShowToolTips()
|
|
{
|
|
return wxRichTextFormattingDialog::ShowToolTips();
|
|
}
|
|
|
|
/*!
|
|
* Get bitmap resources
|
|
*/
|
|
|
|
wxBitmap wxRichTextTabsPage::GetBitmapResource( const wxString& name )
|
|
{
|
|
// Bitmap retrieval
|
|
////@begin wxRichTextTabsPage bitmap retrieval
|
|
wxUnusedVar(name);
|
|
return wxNullBitmap;
|
|
////@end wxRichTextTabsPage bitmap retrieval
|
|
}
|
|
|
|
/*!
|
|
* Get icon resources
|
|
*/
|
|
|
|
wxIcon wxRichTextTabsPage::GetIconResource( const wxString& name )
|
|
{
|
|
// Icon retrieval
|
|
////@begin wxRichTextTabsPage icon retrieval
|
|
wxUnusedVar(name);
|
|
return wxNullIcon;
|
|
////@end wxRichTextTabsPage icon retrieval
|
|
}
|
|
|
|
/*!
|
|
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_NEW_TAB
|
|
*/
|
|
|
|
void wxRichTextTabsPage::OnNewTabClick( wxCommandEvent& WXUNUSED(event) )
|
|
{
|
|
wxString str = m_tabEditCtrl->GetValue();
|
|
if (!str.empty() && str.IsNumber())
|
|
{
|
|
wxString s(wxString::Format(wxT("%d"), wxAtoi(str)));
|
|
|
|
m_tabListCtrl->Append(s);
|
|
m_tabsPresent = true;
|
|
|
|
SortTabs();
|
|
}
|
|
}
|
|
|
|
/*!
|
|
* wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_NEW_TAB
|
|
*/
|
|
|
|
void wxRichTextTabsPage::OnNewTabUpdate( wxUpdateUIEvent& event )
|
|
{
|
|
// This may be a bit expensive - consider updating New button when text
|
|
// changes in edit control
|
|
wxString str = m_tabEditCtrl->GetValue();
|
|
if (!str.empty() && str.IsNumber())
|
|
{
|
|
wxString s(wxString::Format(wxT("%d"), wxAtoi(str)));
|
|
event.Enable(m_tabListCtrl->FindString(s) == wxNOT_FOUND);
|
|
}
|
|
else
|
|
event.Enable(false);
|
|
}
|
|
|
|
|
|
/*!
|
|
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB
|
|
*/
|
|
|
|
void wxRichTextTabsPage::OnDeleteTabClick( wxCommandEvent& WXUNUSED(event) )
|
|
{
|
|
if (m_tabsPresent && m_tabListCtrl->GetCount() > 0 && m_tabListCtrl->GetSelection() != wxNOT_FOUND)
|
|
{
|
|
m_tabListCtrl->Delete(m_tabListCtrl->GetSelection());
|
|
}
|
|
}
|
|
|
|
/*!
|
|
* wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB
|
|
*/
|
|
|
|
void wxRichTextTabsPage::OnDeleteTabUpdate( wxUpdateUIEvent& event )
|
|
{
|
|
event.Enable( m_tabsPresent && m_tabListCtrl->GetCount() > 0 && m_tabListCtrl->GetSelection() != wxNOT_FOUND );
|
|
}
|
|
|
|
|
|
/*!
|
|
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS
|
|
*/
|
|
|
|
void wxRichTextTabsPage::OnDeleteAllTabsClick( wxCommandEvent& WXUNUSED(event) )
|
|
{
|
|
if (m_tabsPresent && m_tabListCtrl->GetCount() > 0)
|
|
{
|
|
m_tabListCtrl->Clear();
|
|
m_tabEditCtrl->SetValue(wxEmptyString);
|
|
}
|
|
}
|
|
|
|
/*!
|
|
* wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS
|
|
*/
|
|
|
|
void wxRichTextTabsPage::OnDeleteAllTabsUpdate( wxUpdateUIEvent& event )
|
|
{
|
|
event.Enable( m_tabsPresent && m_tabListCtrl->GetCount() > 0 );
|
|
}
|
|
|
|
|
|
/*!
|
|
* wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTTABSPAGE_TABLIST
|
|
*/
|
|
|
|
void wxRichTextTabsPage::OnTablistSelected( wxCommandEvent& WXUNUSED(event) )
|
|
{
|
|
wxString str = m_tabListCtrl->GetStringSelection();
|
|
if (!str.empty())
|
|
m_tabEditCtrl->SetValue(str);
|
|
}
|
|
|
|
#endif // wxUSE_RICHTEXT
|