Files
wxWidgets/utils/configtool/src/propeditor.h
2003-06-12 20:43:55 +00:00

276 lines
7.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: propeditor.cpp
// Purpose: Property editor for wxWindows configuration tool
// Author: Julian Smart
// Modified by:
// Created: 2003-06-03
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence:
/////////////////////////////////////////////////////////////////////////////
#ifndef _CT_PROPEDITOR_H_
#define _CT_PROPEDITOR_H_
#ifdef __GNUG__
#pragma interface "propeditor.cpp"
#endif
#include "wx/splitter.h"
#include "wx/grid.h"
#include "configitem.h"
#include "property.h"
class WXDLLEXPORT wxHtmlWindow;
class ctPropertyEditorGrid;
/*!
* A container window for the property editor.
*/
class ctPropertyEditor: public wxPanel
{
DECLARE_CLASS(ctPropertyEditor)
public:
ctPropertyEditor(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style);
~ctPropertyEditor();
// Event handlers
/// Handles detailed editing event.
void OnEditDetails(wxCommandEvent& event);
/// Handles detailed editing update event.
void OnUpdateEditDetails(wxUpdateUIEvent& event);
/// Intercept selection event.
void OnSelectCell(wxGridEvent& event);
/// Intercept cell data change event.
void OnChangeCell(wxGridEvent& event);
/// Double-click to show specialised editor.
void OnDClickCell(wxGridEvent& event);
// Operations
/// Creates the controls
void CreateControls(wxWindow* parent);
/// Clear grid editor
void ClearEditor();
/// Can we edit the details of the selected property?
bool CanEditDetails();
/// Edit the details of this cell appropriately.
bool EditDetails(wxWindow* parent);
/// Shows the given config item
void ShowItem(ctConfigItem* configItem);
/// Updates the proxy display, assuming it was already displayed.
void UpdateItem();
/// Display attribute at given row
bool DisplayProperty(int row, ctProperty* prop, bool valueOnly = FALSE);
/// Display attribute value
bool DisplayProperty(ctProperty* prop);
/// Edit the default property
bool EditDefaultProperty(ctConfigItem* proxy);
/// Select the default property
bool DisplayDefaultProperty();
/// Determine background colour for this property.
void DeterminePropertyColour(ctProperty* prop, wxColour& colour);
/// Update the title at the top of the property editor
void UpdateTitle();
/// Update the description
void UpdateDescription(int row = -1);
/// Wraps a description string in HTML
wxString WrapDescription(const wxString& str);
/// Find the selected property
ctProperty* FindSelectedProperty(int& row);
/// Find the nth property
ctProperty* FindProperty(int row);
/// Apply the cell value to the property, and notify the
/// proxy object.
void ApplyCellValueToProperty(int row, int col);
/// Apply the cell value to the property, and notify the
/// proxy object. This will be undoable.
void ApplyPropertyValue(ctConfigItem* item, ctProperty* property, const wxVariant& variant);
/// Show/hide the description control
void ShowDescriptionWindow(bool show);
// Accessors
//// Returns the grid used as the attribute editor
ctPropertyEditorGrid* GetAttributeEditorGrid() const { return m_attributeEditorGrid; }
/// Returns the title text control
wxTextCtrl* GetElementTitleTextCtrl() const { return m_elementTitleTextCtrl; }
/// Returns the splitter window between the property grid and
/// the description window.
wxSplitterWindow* GetSplitterWindow() const { return m_splitterWindow; }
/// Returns the HTML description window
wxHtmlWindow* GetDescriptionWindow() const { return m_propertyDescriptionWindow; }
/// Returns the config item
ctConfigItem* GetItem() const { return m_item; }
/// Sets the proxy
void SetItem(ctConfigItem* configItem) { m_item = configItem; }
DECLARE_EVENT_TABLE()
protected:
ctPropertyEditorGrid* m_attributeEditorGrid;
wxHtmlWindow* m_propertyDescriptionWindow;
wxSplitterWindow* m_splitterWindow;
// Displays the title of the element being edited
wxTextCtrl* m_elementTitleTextCtrl;
// The config item object being edited
ctConfigItem* m_item;
};
#define ctID_ATTRIBUTE_EDITOR_INSERT 2001
#define ctID_ATTRIBUTE_EDITOR_GRID 2002
#define ctID_ATTRIBUTE_EDITOR_DESCRIPTION 2003
#define ctID_ATTRIBUTE_EDITOR_EDIT_DETAILS 2004
/*!
* Attribute editor grid
*/
class ctPropertyEditorGrid: public wxGrid
{
DECLARE_CLASS(ctPropertyEditorGrid)
public:
ctPropertyEditorGrid(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition,
const wxSize& sz = wxDefaultSize, long style = wxWANTS_CHARS);
/// Intercept size event.
void OnSize(wxSizeEvent& event);
void SetStretchableColumn(int which) { m_stretchableColumn = which; }
int GetStretchableColumn() const { return m_stretchableColumn; }
/// An array denoting which columns to display,
/// and in what order.
void SetColumnsToDisplay(wxArrayString& columns) { m_columnsToDisplay = columns; }
wxArrayString& GetColumnsToDisplay() { return m_columnsToDisplay; }
/// Use m_columnsToDisplay to set the label strings
void DisplayLabels();
/// Clear attributes
bool ClearAttributes();
DECLARE_EVENT_TABLE()
private:
int m_stretchableColumn;
wxArrayString m_columnsToDisplay;
};
// Utility functions
/// Translate the value to one which can be edited in a single-line
/// text control
wxString ctConvertToSingleText(const wxString& value);
/// Translate back to 'real' characters, i.e. newlines are real
/// newlines.
wxString ctConvertToMultilineText(const wxString& value);
//----------------------------------------------------------------------------
// ctMultiLineTextEditor
//----------------------------------------------------------------------------
class ctMultiLineTextEditor: public wxDialog
{
public:
// constructors and destructors
ctMultiLineTextEditor( wxWindow *parent, wxWindowID id, const wxString &title,
const wxString& msg,
const wxString& value,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
bool AddControls(wxWindow* parent, const wxString& msg);
wxString GetText() const { return m_text; }
void SetText(const wxString& text) { m_text = text; }
private:
DECLARE_EVENT_TABLE()
wxString m_text;
};
/*
* Special-purpose splitter window for changing sash look and
* also saving sash width
*/
class ctSplitterWindow: public wxSplitterWindow
{
public:
ctSplitterWindow(wxWindow* parent, wxWindowID id,
const wxPoint& pos, const wxSize& size, long style);
// Draws the sash
//virtual void DrawSash(wxDC& dc);
void OnChangeSash(wxSplitterEvent& event);
void UpdateSettings(bool updateSettings) { m_updateSettings = updateSettings; }
int GetLastPosition() const { return m_position; }
void SetLastPosition(int pos) { m_position = pos; }
protected:
// Don't update settings if the window is still being created,
// since it could override the saved settings
bool m_updateSettings;
int m_position;
DECLARE_EVENT_TABLE()
};
/*!
* Use a single-line text control.
*/
class ctGridCellTextEditor: public wxGridCellTextEditor
{
public:
virtual void Create(wxWindow* parent, wxWindowID id,
wxEvtHandler* evtHandler);
};
#define ctGRID_VALUE_STRING wxT("singlelinestring")
#define ctID_PROPERTY_EDITOR_SPLITTER 1600
#endif
// _WB_PROPEDITOR_H_