説明
プロパティのオプションセットなどで使用されている複数選択できるアイテムとそのポップアップダイアログの実装方法を紹介します。
ダイアログクラスを定義する
- 必要なヘッダーをインクルード
- DG::ModalDialogを継承したクラスを定義
- DG::ButtonItemObserverを継承
- MultipleChoiceDataObserverを継承
#include "APIEnvir.h"
#include "ACAPinc.h"
#include "APICommon.h"
#include "DG.h"
#include "DGModule.hpp"
#include "UDResources.hpp"
#include "MultipleChoiceData.hpp"
#include "MultipleChoicePopUpDialog.hpp"
class SampleDialog
: public DG::ModalDialog
, public DG::PanelObserver
, public DG::ButtonItemObserver
, public UD::MultipleChoiceDataObserver
{
public:
SampleDialog();
~SampleDialog();
void UpdateTextEdit(const GS::UniString& selectedItemStr);
virtual void ButtonClicked(const DG::ButtonClickEvent& ev) override;
virtual void SelectionChanged(const UD::MultipleChoiceData& source) override;
private:
DG::TextEdit textEdit;
DG::Button button;
DG::Button okButton;
};
ダイアログクラスを実装する
- コンストラクタでアイテムの詳細を指定
- buttonがクリックされた時に複数選択のダイアログを表示
- okbuttonがクリックされたと時にダイアログを閉じる
- 選択肢の選択状態が変更されたときに、文字列を更新する
#include "SampleDialog.h"
SampleDialog::SampleDialog()
: DG::ModalDialog(DG::NativePoint(), 400, 100, GS::Guid("9F1429AA-E3E9-4856-A7D2-DB5BF12D6946"))
, textEdit(GetReference(), DG::Rect(50, 30, 330, 50), 0, DG::EditControl::Frame, DG::EditControl::Update, DG::EditControl::ReadOnly)
, button(GetReference(), DG::Rect(330, 30, 350, 50))
, okButton(GetReference(), DG::Rect(300, 70, 350, 90))
{
SetTitle("Sample Dialog");
textEdit.Show();
button.SetIcon(UD::GetResourceIcon(UD::OpenPopupIcon));
button.Show();
button.Attach(*this);
okButton.SetText("OK");
okButton.Show();
okButton.Attach(*this);
}
SampleDialog::~SampleDialog()
{
}
void SampleDialog::ButtonClicked(const DG::ButtonClickEvent& ev)
{
if (ev.GetSource() == &button)
{
UD::MultipleChoiceData multipleChoiceData;
UD::MultipleChoiceItem multipleChoiceItem;
multipleChoiceItem.SetSelected(false);
multipleChoiceItem.SetText("Archicad");
multipleChoiceData.AddItem(multipleChoiceItem);
multipleChoiceItem.SetText("BIMcloud");
multipleChoiceData.AddItem(multipleChoiceItem);
multipleChoiceItem.SetText("BIMx");
multipleChoiceData.AddItem(multipleChoiceItem);
UD::MultipleChoicePopUpDialog dialog(multipleChoiceData, button);
multipleChoiceData.Attach(*this);
dialog.Invoke();
}
else if (ev.GetSource() == &okButton)
{
PostCloseRequest(DG::ModalDialog::Accept);
}
}
void SampleDialog::SelectionChanged(const UD::MultipleChoiceData& source)
{
GS::Array<UD::MultipleChoiceItem> items;
items = source.GetItems();
GS::UniString itemStr;
for (UD::MultipleChoiceItem item : items)
{
if (item.IsSelected()) {
itemStr += item.GetText() + ";";
}
}
UpdateTextEdit(itemStr);
}
void SampleDialog::UpdateTextEdit(const GS::UniString& selectedItemStr)
{
textEdit.SetText(selectedItemStr);
}
ダイアログを呼び出す
GSErrCode __ACENV_CALL MenuCommandHandler (const API_MenuParams *menuParams)
{
switch (menuParams->menuItemRef.menuResID) {
case ID_MENU_STRINGS:
switch (menuParams->menuItemRef.itemIndex) {
case 1:
{
SampleDialog sampleDlg;
sampleDlg.Invoke();
}
break;
}
return NoError;
}
MultipleChoicePopUpDialogを実装する
説明
プロパティのオプションセットなどで使用されている複数選択できるアイテムとそのポップアップダイアログの実装方法を紹介します。
ダイアログクラスを定義する
ダイアログクラスを実装する
ダイアログを呼び出す