Initial release

This commit is contained in:
civ
2026-08-16 18:24:52 +07:00
commit 876886a39a
13244 changed files with 2353959 additions and 0 deletions
@@ -0,0 +1,207 @@
// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
#pragma once
#include "../uidescription.h"
#if VSTGUI_LIVE_EDITING
#include "../iviewcreator.h"
#include "../icontroller.h"
#include "../uidescriptionlistener.h"
#include "iaction.h"
#include "uiundomanager.h"
#include "uitemplatecontroller.h"
#include "../../lib/csplitview.h"
#include "../../lib/cframe.h"
#include "../../lib/controls/icommandmenuitemtarget.h"
#include <vector>
namespace VSTGUI {
class UIEditView;
class UISelection;
class UITemplateController;
class UIEditMenuController;
class UIGridController;
class UIZoomSettingController;
class GenericStringListDataBrowserSource;
class CCommandMenuItem;
//----------------------------------------------------------------------------------------------------
class UIEditController : public CBaseObject,
public IController,
public IContextMenuController2,
public ISplitViewController,
public ISplitViewSeparatorDrawer,
public IActionPerformer,
public IKeyboardHook,
public CommandMenuItemTargetAdapter,
public UIDescriptionListenerAdapter,
public IUIUndoManagerListener,
public IUITemplateControllerListener
{
public:
UIEditController (UIDescription* description);
void setDarkTheme (bool state); // must be called before createEditView
bool usesDarkTheme () const;
CView* createEditView ();
UIEditMenuController* getMenuController () const { return menuController; }
UIUndoManager* getUndoManager () const { return undoManager; }
const std::string& getEditTemplateName () const { return editTemplateName; }
SharedPointer<UIAttributes> getSettings ();
int32_t getSaveOptions ();
void onZoomChanged (double zoom);
void addSelectionToCurrentView (UISelection* selection);
static SharedPointer<UIDescription> getEditorDescription ();
static void setupDataSource (GenericStringListDataBrowserSource* source);
static bool std__stringCompare (const std::string* lhs, const std::string* rhs);
static const UTF8StringPtr kEncodeBitmapsSettingsKey;
static const UTF8StringPtr kWriteWindowsRCFileSettingsKey;
protected:
~UIEditController () override;
static void resetScrollViewOffsets (CViewContainer* view);
int32_t getSplitViewIndex (CSplitView* splitView);
void setDirty (bool state);
void valueChanged (CControl* pControl) override;
CView* createView (const UIAttributes& attributes, const IUIDescription* description) override;
CView* verifyView (CView* view, const UIAttributes& attributes, const IUIDescription* description) override;
IController* createSubController (UTF8StringPtr name, const IUIDescription* description) override;
CMessageResult notify (CBaseObject* sender, IdStringPtr message) override;
// IUITemplateControllerListener
void onTemplateSelectionChanged () override;
// IUIUndoManagerListener
void onUndoManagerChange () override;
// IContextMenuController2
void appendContextMenuItems (COptionMenu& contextMenu, CView* view, const CPoint& where) override;
// ISplitViewController
bool getSplitViewSizeConstraint (int32_t index, CCoord& minSize, CCoord& maxSize, CSplitView* splitView) override;
ISplitViewSeparatorDrawer* getSplitViewSeparatorDrawer (CSplitView* splitView) override;
bool storeViewSize (int32_t index, const CCoord& size, CSplitView* splitView) override;
bool restoreViewSize (int32_t index, CCoord& size, CSplitView* splitView) override;
// ISplitViewSeparatorDrawer
void drawSplitViewSeparator (CDrawContext* context, const CRect& size, int32_t flags, int32_t index, CSplitView* splitView) override;
// IActionPerformer
void performAction (IAction* action) override;
void performColorChange (UTF8StringPtr colorName, const CColor& newColor, bool remove = false) override;
void performTagChange (UTF8StringPtr tagName, UTF8StringPtr tagString, bool remove = false) override;
void performBitmapChange (UTF8StringPtr bitmapName, UTF8StringPtr bitmapPath, bool remove = false) override;
void performGradientChange (UTF8StringPtr gradientName, CGradient* newGradient, bool remove = false) override;
void performFontChange (UTF8StringPtr fontName, CFontRef newFont, bool remove = false) override;
void performColorNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
void performTagNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
void performFontNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
void performGradientNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
void performBitmapNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
void performBitmapMultiFrameChange (UTF8StringPtr bitmapName,
const CMultiFrameBitmapDescription* desc) override;
void performBitmapNinePartTiledChange (UTF8StringPtr bitmapName, const CRect* offsets) override;
void performBitmapFiltersChange (UTF8StringPtr bitmapName, const std::list<SharedPointer<UIAttributes> >& filterDescription) override;
void performAlternativeFontChange (UTF8StringPtr fontName, UTF8StringPtr newAlternativeFonts) override;
void beginLiveColorChange (UTF8StringPtr colorName) override;
void performLiveColorChange (UTF8StringPtr colorName, const CColor& newColor) override;
void endLiveColorChange (UTF8StringPtr colorName) override;
void performTemplateNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
void performTemplateMinMaxSizeChange (UTF8StringPtr templateName, CPoint minSize, CPoint maxSize) override;
void performCreateNewTemplate (UTF8StringPtr name, UTF8StringPtr baseViewClassName) override;
void performDeleteTemplate (UTF8StringPtr name) override;
void performDuplicateTemplate (UTF8StringPtr name, UTF8StringPtr dupName) override;
void onTemplateCreation (UTF8StringPtr name, CView* view) override;
void onTemplateNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
void performChangeFocusDrawingSettings (const FocusDrawingSettings& newSettings) override;
void beginGroupAction (UTF8StringPtr name) override;
void finishGroupAction () override;
// IKeyboardHook
void onKeyboardEvent (KeyboardEvent& event, CFrame* frame) override;
// CommandMenuItemTargetAdapter
bool validateCommandMenuItem (CCommandMenuItem* item) override;
bool onCommandMenuItemSelected (CCommandMenuItem* item) override;
SharedPointer<UIDescription> editDescription;
SharedPointer<UIDescription> editorDesc;
SharedPointer<UISelection> selection;
SharedPointer<UIUndoManager> undoManager;
SharedPointer<UIGridController> gridController;
CView* baseView {nullptr};
UIEditView* editView {nullptr};
SharedPointer<UITemplateController> templateController;
SharedPointer<UIEditMenuController> menuController;
SharedPointer<UIZoomSettingController> zoomSettingController;
SharedPointer<CControl> enableEditingControl;
SharedPointer<CControl> notSavedControl;
SharedPointer<CControl> tabSwitchControl;
std::string editTemplateName;
std::list<SharedPointer<CSplitView> > splitViews;
bool dirty;
struct Template {
std::string name;
SharedPointer<CView> view;
Template (const std::string& n, CView* v) : name (n), view (v) {}
Template (const Template& c) : name (c.name), view (c.view) {}
bool operator==(const Template& t) { return name == t.name && view == t.view; }
bool operator==(const std::string& n) { return name == n; }
Template& operator=(const Template& t) { name = t.name; view = t.view; return *this; }
Template (Template&& t) noexcept { *this = std::move (t); }
Template& operator=(Template&& t) noexcept { name = std::move (t.name); view = std::move (t.view); return *this; }
};
void updateTemplate (UTF8StringPtr name);
void updateTemplate (const std::vector<Template>::const_iterator& it);
void onTemplatesChanged ();
void getTemplateViews (std::list<CView*>& views) const;
std::vector<Template> templates;
private:
void beforeUIDescSave (UIDescription* desc) override;
void onUIDescTemplateChanged (UIDescription* desc) override;
bool doUIDescTemplateUpdate (UIDescription* desc, UTF8StringPtr name) override;
void beforeSave ();
CMessageResult validateMenuItem (CCommandMenuItem* item);
CMessageResult onMenuItemSelection (CCommandMenuItem* item);
void doCopy (bool cut = false);
void doPaste ();
void showTemplateSettings ();
void showFocusSettings ();
bool doSelectionMove (const UTF8String& commandName, bool useGrid) const;
bool doSelectionSize (const UTF8String& commandName, bool useGrid) const;
bool doZOrderAction (bool lower);
void doSelectAllChildren ();
void doSelectParents ();
void doSelectViewInHierarchyBrowser (CView* view);
void doChangeTheme (bool dark);
void onUndoManagerChanged ();
template<typename NameChangeAction, IViewCreator::AttrType attrType> void performNameChange (UTF8StringPtr oldName, UTF8StringPtr newName, IdStringPtr groupActionName);
std::string onlyTemplateToUpdateName;
};
} // VSTGUI
#endif // VSTGUI_LIVE_EDITING