git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31699 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
286 lines
7.2 KiB
C++
286 lines
7.2 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: configtooldoc.h
|
|
// Purpose: Document class
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 2003-06-04
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Julian Smart
|
|
// Licence:
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _CT_CONFIGTOOLDOC_H_
|
|
#define _CT_CONFIGTOOLDOC_H_
|
|
|
|
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
|
#pragma interface "configtooldoc.cpp"
|
|
#endif
|
|
|
|
#include "wx/docview.h"
|
|
#include "wx/cmdproc.h"
|
|
|
|
#include "configitem.h"
|
|
|
|
class wxSimpleHtmlTag;
|
|
class ctConfiguration;
|
|
|
|
/*!
|
|
* ctConfigToolDoc
|
|
*/
|
|
|
|
class ctConfigToolDoc: public wxDocument
|
|
{
|
|
DECLARE_DYNAMIC_CLASS(ctConfigToolDoc)
|
|
public:
|
|
ctConfigToolDoc();
|
|
~ctConfigToolDoc();
|
|
|
|
//// Overrides
|
|
virtual bool OnCreate(const wxString& path, long flags);
|
|
virtual bool OnOpenDocument(const wxString& filename);
|
|
virtual bool OnSaveDocument(const wxString& filename);
|
|
virtual bool OnNewDocument() { return true; }
|
|
virtual bool OnCloseDocument() ;
|
|
virtual bool Save(); // Overridden only to correct bug in wxWidgets, docview.cpp
|
|
|
|
//// Accessors
|
|
|
|
/// Returns the top item.
|
|
ctConfigItem* GetTopItem() const { return m_topItem; }
|
|
|
|
/// Sets the top item.
|
|
void SetTopItem(ctConfigItem* item) { m_topItem = item; }
|
|
|
|
/// Returns the clipboard item.
|
|
ctConfigItem* GetClipboardItem() const { return m_clipboardItem; }
|
|
|
|
/// Sets the clipboard item.
|
|
void SetClipboardItem(ctConfigItem* item) ;
|
|
|
|
/// Clears the clipboard item.
|
|
void ClearClipboard() ;
|
|
|
|
/// Gets the current framework directory
|
|
wxString GetFrameworkDir(bool makeUnix);
|
|
|
|
//// Operations
|
|
|
|
/// Add items
|
|
void AddItems();
|
|
|
|
/// Delete items
|
|
void DeleteItems();
|
|
|
|
/// Save the settings file
|
|
bool DoSave(const wxString& filename);
|
|
|
|
/// Recursive helper function for file saving
|
|
bool DoSave(ctConfigItem* item, wxOutputStream& stream, int indent);
|
|
|
|
/// Open the settings file
|
|
bool DoOpen(const wxString& filename);
|
|
|
|
/// Helper for file opening.
|
|
bool DoOpen(wxSimpleHtmlTag* tag, ctConfigItem* parent);
|
|
|
|
/// Refresh dependencies
|
|
void RefreshDependencies();
|
|
void RefreshDependencies(ctConfigItem* item);
|
|
|
|
/// Clear dependencies
|
|
void ClearDependencies(ctConfigItem* item);
|
|
|
|
/// Generate the text of a setup.h
|
|
wxString GenerateSetup();
|
|
|
|
/// Helper function
|
|
void GenerateSetup(ctConfigItem* item, wxString& str);
|
|
|
|
/// Generate a configure command
|
|
wxString GenerateConfigureCommand();
|
|
|
|
/// Helper function
|
|
void GenerateConfigureCommand(ctConfigItem* item, wxString& str);
|
|
|
|
/// Finds the next item in the tree
|
|
ctConfigItem* FindNextItem(ctConfigItem* item, bool wrap);
|
|
|
|
/// Finds the next sibling in the tree
|
|
ctConfigItem* FindNextSibling(ctConfigItem* item);
|
|
|
|
protected:
|
|
ctConfigItem* m_topItem;
|
|
ctConfigItem* m_clipboardItem;
|
|
};
|
|
|
|
/*!
|
|
* ctConfiguration is a configuration or a place-holder node within the
|
|
* hierarchy of configurations.
|
|
*/
|
|
|
|
class ctConfiguration: public wxObject
|
|
{
|
|
public:
|
|
/// Ctor and dtor
|
|
ctConfiguration(ctConfiguration* parent, const wxString& name);
|
|
ctConfiguration();
|
|
~ctConfiguration();
|
|
|
|
/// Copy constructor.
|
|
ctConfiguration(const ctConfiguration& configuration) : wxObject()
|
|
{
|
|
(*this) = configuration;
|
|
}
|
|
|
|
/// Operations
|
|
|
|
/// Assignment operator.
|
|
void operator= (const ctConfiguration& configuration);
|
|
|
|
/// Create a clone
|
|
ctConfiguration* Clone()
|
|
{
|
|
ctConfiguration* configuration = new ctConfiguration;
|
|
*configuration = *this;
|
|
return configuration;
|
|
}
|
|
|
|
/// Create a clone of this and children
|
|
ctConfiguration* DeepClone();
|
|
|
|
/// Clear children
|
|
void Clear();
|
|
|
|
/// Add a child
|
|
void AddChild(ctConfiguration* config);
|
|
|
|
/// Remove (but don't delete) a child
|
|
void RemoveChild(ctConfiguration* config);
|
|
|
|
/// Find an item in this hierarchy
|
|
ctConfiguration* FindConfiguration(const wxString& name);
|
|
|
|
/// Find the next sibling
|
|
ctConfiguration* FindNextSibling();
|
|
|
|
/// Find the previous sibling
|
|
ctConfiguration* FindPreviousSibling();
|
|
|
|
/// Detach: remove from parent, and remove tree items
|
|
void Detach();
|
|
|
|
/// Attach: insert before the given position
|
|
void Attach(ctConfiguration* parent, ctConfiguration* insertbefore);
|
|
|
|
void DetachFromTree();
|
|
|
|
/// Accessors
|
|
|
|
/// Returns the top-level item.
|
|
ctConfigItem* GetTopItem() const { return m_topItem; }
|
|
|
|
/// Sets the top-level item.
|
|
void SetTopItem(ctConfigItem* item) { m_topItem = item; }
|
|
|
|
/// Returns the name.
|
|
wxString GetName() const { return m_name; }
|
|
|
|
/// Sets the name.
|
|
void SetName(const wxString& name ) { m_name = name; }
|
|
|
|
/// Get description.
|
|
wxString GetDescription() const { return m_description; }
|
|
|
|
/// Set description.
|
|
void SetDescription(const wxString& descr) { m_description = descr; }
|
|
|
|
/// Set the tree item id
|
|
void SetTreeItem(wxTreeItemId id) { m_treeItemId = id; }
|
|
|
|
// Get the type
|
|
wxTreeItemId GetTreeItemId() const { return m_treeItemId ; }
|
|
|
|
/// Get the list of children
|
|
wxList& GetChildren() { return m_children; }
|
|
|
|
/// Get the nth child
|
|
ctConfiguration* GetChild(int n) const;
|
|
|
|
/// Get the child count
|
|
int GetChildCount() const;
|
|
|
|
/// Get the parent
|
|
ctConfiguration* GetParent() const { return m_parent; }
|
|
|
|
/// Set the parent
|
|
void SetParent(ctConfiguration* parent) { m_parent = parent; }
|
|
|
|
/// Get the associated document (currently, assumes
|
|
/// there's only ever one document active)
|
|
ctConfigToolDoc* GetDocument() ;
|
|
|
|
protected:
|
|
|
|
/// The corresponding tree item
|
|
wxTreeItemId m_treeItemId;
|
|
|
|
/// The list of children.
|
|
wxList m_children;
|
|
|
|
/// The parent config item
|
|
ctConfiguration* m_parent;
|
|
|
|
/// The name
|
|
wxString m_name;
|
|
|
|
/// The description
|
|
wxString m_description;
|
|
|
|
/// The top-level item of this description, if any
|
|
ctConfigItem* m_topItem;
|
|
|
|
DECLARE_CLASS(ctConfiguration)
|
|
};
|
|
|
|
|
|
/*!
|
|
* Implements a document editing command.
|
|
* We only need to store one state at a time,
|
|
* since we don't have (or need) multiple selection.
|
|
*/
|
|
|
|
#define ctCMD_NEW_ELEMENT 1
|
|
#define ctCMD_PASTE 2
|
|
#define ctCMD_CUT 3
|
|
#define ctCMD_APPLY_PROPERTY 4
|
|
|
|
class ctConfigCommand: public wxCommand
|
|
{
|
|
public:
|
|
ctConfigCommand(const wxString& name, int cmdId,
|
|
ctConfigItem* activeState, ctConfigItem* savedState,
|
|
ctConfigItem* parent = NULL, ctConfigItem* insertBefore = NULL,
|
|
bool ignoreFirstTime = false);
|
|
ctConfigCommand(const wxString& name, int cmdId,
|
|
ctConfigItem* activeState, ctProperties* properties,
|
|
bool ignoreFirstTime = false);
|
|
~ctConfigCommand();
|
|
|
|
bool Do();
|
|
bool Undo();
|
|
bool DoAndUndo(bool doCmd); // Combine Do and Undo into one
|
|
|
|
protected:
|
|
ctConfigItem* m_activeState;
|
|
ctConfigItem* m_savedState;
|
|
ctProperties* m_properties;
|
|
bool m_ignoreThis; // Ignore 1st Do because we already did it
|
|
int m_cmdId;
|
|
ctConfigItem* m_parent;
|
|
ctConfigItem* m_insertBefore;
|
|
};
|
|
|
|
|
|
#endif
|
|
// _CT_CONFIGTOOLDOC_H_
|