Опубликован: 13.07.2012 | Доступ: свободный | Студентов: 460 / 8 | Оценка: 5.00 / 5.00 | Длительность: 18:06:00
Специальности: Программист
Лекция 10:

Компоненты ввода и отображения текстовой, цифровой и иерархической информации. Компоненты отображения иерархических данных

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

Объявим в качестве члена нашего класса функцию, добавляющую новый элемент в списокvoid TCentralComponent::AddNewItem() ( пример 10.3).

Для удобства сделаем размеры программы неизменяемыми, что позволит задать размеры входящих в состав компонента содержимого виджетов в абсолютных цифрах ( пример 10.4).

Древовидный список при первом запуске программы будет содержать только один элемент — корневой узел с заданным текстом "Жанры" ( пример 10.3). Корневой узел мы добавляем с помощью метода void TreeView::setRootItem(TreeViewItem* newRootItem).

Древовидный список может иметь один и только один корень, содержащий любое количество дочерних элементов. В случае, если вы хотите включить в состав программы дерево с несколькими корневыми элементами, то имитировать это можно, добавив дочерние элементы в корневой узел, а затем скрыв его вызовом метода void TreeView::setRootItemVisible(bool shouldBeVisible); при этом параметр должен принимать значение false.

Найти корневой элемент древовидного списка позволяет функция TreeViewItem* TreeView::getRootItem() const. Воспользуемся им для того, чтобы выделить корень дерева вызовом метода void TreeViewItem::setSelected(bool shouldBeSelected, bool deselectOtherItemsFirst), где первый параметр показывает, должен ли быть элемент выбран, а второй — должно ли быть снято выделение ранее выбранного узла ( пример 10.4).

Перед завершением работы программы в деструкторе класса TCentralComponent мы очищаем древовидный список, удаляя корневой узел и все его дочерние элементы вызовом метода void TreeView::deleteRootItem().

#include "TCentralComponent.h"
#include "TTreeViewItem.h"
//-------------------------------------------------------
#define tr(s) String::fromUTF8(s)
//-------------------------------------------------------
TCentralComponent::TCentralComponent() : Component ("Central Component"),
            pItemsGroup(0),
            pGenreTreeView(0),
            pNewItemButton(0),
            pNewSubItemButton(0),
            pDeleteItemButton(0),
            pPropertiesGroup(0),
            pTextLabel(0),
            pTextEdit(0),
            pEditPropertiesCheckBox(0),
            pApplyButton(0)
{
  pItemsGroup = new GroupComponent("ItemsGroup", tr("Элементы"));
  addAndMakeVisible(pItemsGroup);

  pGenreTreeView = new TreeView("GenreTreeView");
  pGenreTreeView->addMouseListener(this, true);
  // Устанавливаем корневой элемент (узел) списка...
  pGenreTreeView->setRootItem(new TTreeViewItem(tr("Жанры")));
  // и выделяем его
  pGenreTreeView->getRootItem()->setSelected(true, false);
  addAndMakeVisible(pGenreTreeView);

  pNewItemButton = new TextButton("NewItemButton");
  pNewItemButton->setButtonText(tr("Новый элемент"));
  pNewItemButton->addListener(this);
  addAndMakeVisible(pNewItemButton);

  pNewSubItemButton = new TextButton("NewSubItem");
  pNewSubItemButton->setButtonText(tr("Новый субэлемент"));
  pNewSubItemButton->addListener(this);
  addAndMakeVisible(pNewSubItemButton);

  pDeleteItemButton = new TextButton("pDeleteItem");
  pDeleteItemButton->setButtonText(tr("Удалить элемент"));
  pDeleteItemButton->addListener(this);
  addAndMakeVisible(pDeleteItemButton);

  pPropertiesGroup = new GroupComponent("pPropertiesGroup", 
           tr("Свойства элемента"));
    addAndMakeVisible(pPropertiesGroup);

  pTextLabel = new Label("pTextLabel", tr("Жанр:"));
  pTextLabel->setFont(Font(15.0000f, Font::plain));
  pTextLabel->setJustificationType(Justification::centredLeft);
  pTextLabel->setEditable(false, false, false);
  pTextLabel->setColour(Label::textColourId, Colours::black);
  pTextLabel->setColour(Label::backgroundColourId, Colours::azure);
  addAndMakeVisible(pTextLabel);

  pTextEdit = new TextEditor("TextEdit");   
  pTextEdit->setMultiLine(false);
  pTextEdit->setReturnKeyStartsNewLine(false);
  pTextEdit->addKeyListener(this);
  pTextEdit->setReadOnly(false);
  pTextEdit->setScrollbarsShown(true);
  pTextEdit->setCaretVisible(true);
  pTextEdit->setPopupMenuEnabled(true);
  pTextEdit->setTextToShowWhenEmpty(tr("Введите название"), Colours::grey);
  addAndMakeVisible(pTextEdit);

  pEditPropertiesCheckBox = new ToggleButton(tr("Редактировать свойства"));
  pEditPropertiesCheckBox->addListener(this);
  addAndMakeVisible(pEditPropertiesCheckBox);
  
  pApplyButton = new TextButton("ApplyButton");
  pApplyButton->setButtonText(tr("Применить"));
  pApplyButton->setEnabled(false);
  pApplyButton->addListener(this);
  addAndMakeVisible(pApplyButton);

  setSize(710, 430);
}
//---------------------------------------------------------
TCentralComponent::~TCentralComponent()
{
  // Удаляем корневой узел и все дочерние элементы
  pGenreTreeView->deleteRootItem();
  // Удаляем дочерние виджеты
  // и обнуляем их указатели
  deleteAllChildren();
}
//-------------------------------------------------------
void TCentralComponent::resized()
{
  pItemsGroup->setBounds(10, 10, 350, 400);
  pGenreTreeView->setBounds(25, 35, 200, 355);
  pNewItemButton->setBounds(240, 35, 100, 25);
  pNewSubItemButton->setBounds(240, 75, 100, 25);
  pDeleteItemButton->setBounds(240, 115, 100, 25);
  pPropertiesGroup->setBounds(370, 10, 330, 400);
  pTextLabel->setBounds(385, 35, 70, 25);
  pTextEdit->setBounds(465, 35, 222, 25);
  pEditPropertiesCheckBox->setBounds(385, 65, 150, 25);
  pApplyButton->setBounds(585, 65, 100, 25);
}
//-------------------------------------------------------
Листинг 10.4. Реализация конструктора класса TCentralComponent и метода resized (файл TCentralComponent.cpp)
< Лекция 9 || Лекция 10: 1234 || Лекция 11 >