JUCE类库PreferencesPanel详解

PreferencesPanel

图  PreferencesPanel 图标式选项卡

PreferencesPanel图标式选项卡、TabbedComponent常规选项卡和ToolBar工具栏这三者有异曲同工之妙:

  • TabbedComponent是无图标按钮,而PreferencesPanel则是带文本的图标式按钮。
  • TabbedComponent可以设置选项卡按钮出现在任意四个边处,PreferencesPanel的图标式按钮只能位于顶端,即典型的MAC机“参数设置”对话框的风格。
  • PreferencesPanel是抽象基类,派生类需实现纯虚函数createComponentForPage(),该函数负责创建每个图标所关联的子组件。TabbedComponent则没这么复杂,直接添加子组件即可,而子组件的创建与其无关,是内容组件的事。也就是:TabbedComponent与其所显示的子组件是平级的关系,共同隶属于内容组件,而PreferencesPanel与其所显示的子组件是包含关系,子组件由PreferencesPanel所创建。
  • ToolBar只有图标显示区,而没有额外的子组件显示区,即:该控件不是用来切换并显示子组件的。TabbedComponent和PreferencesPanel有子组件显示区,二者可切换显示任意Component的派生类。

使用PreferencesPanel的流程有2:

  1. 自定义图标式选项卡类,继承自PreferencesPanel。构造函数中addSettingsPage()添加所需的每个图标及其文本名称。在继承自基类的纯虚函数createComponentForPage()中,基于每个图标的文本名称创建所对应的子组件。所创建的子组件由本类托管
  2. 内容组件类中声明PreferencesPanel对象。需显示时,该对象调用showInDialogBox()函数。

示例代码

/** 自定义图标式选项卡类,继承自PreferencesPanel */
class PrefsTabComp : public PreferencesPanel
{
public:
    /** 构造函数中添加选项卡文本及其图标 */
    PrefsTabComp()
    {
        addSettingsPage (L"杂项", BinaryData::misc_png, 
                         BinaryData::misc_pngSize);
        addSettingsPage (L"快捷键", BinaryData::keys_png, 
                         BinaryData::keys_pngSize);
        addSettingsPage (L"关于", BinaryData::about_png, 
                         BinaryData::about_pngSize);
    }
    
/** 实现基类PreferencesPanel的纯虚函数。基于每个属性页的名称,设置所对应的组件。*/
    Component* createComponentForPage (const String& pageName)
    {
        if (pageName == L"杂项")
            // MiscPage类可以是组合了PropertyPanel属性面板的组件
            return new MiscPage();
	
        else if (pageName == L"快捷键")
            // 创建快捷键编辑组件类对象。
            // 该组件用于显示和允许用户自定义快捷键映射
            return new KeyMappingEditorComponent (cmdManager->
                       getKeyMappings(), true);

        else if (pageName == L"关于")
            return new AboutPage();
        else
        // 不应执行到此处,但该语句也不能少,防止编译器警告
            return new Component();	
    }
};

PreferencesPanel直接继承自Component,其新增的成员函数:
 createComponentForPage () 纯虚函数,基于选项卡文本创建所对应的每个子组件
 addSettingsPage () 添加选项卡文本及其图标
 setCurrentPage () 设置当前所显示的子组件
 setButtonSize () 设置选项卡图标按钮的大小
 getButtonSize () 返回选项卡图标按钮的大小
 showInDialogBox () 在DialogWindow中显示本组件