Пример работы с Toolbar API - S60 Touch UI
Метаданные
Пример кода
Исходный файл: Media:Toolbar.zip
Статья
Автор:
A.A.M.
(28 Jan 2009)
Последнее редактирование: hamishwillee
(09 Dec 2011)
Contents |
Обзор
Toolbar API - это нововведение S60 5-го издания, позволяющее создавать панели управления с размещенными на них кнопками, адаптированными под использование сенсорного интерфейса. В данной статье мы рассмотрим пример работы с этим API.
Toolbar API
Как показано на скриншоте, панель инструментов (Toolbar) может служить для размещения элементов пользовательского интерфейса, например, кнопок. Панель может быть как фиксированной, так и плавающей.
Создание панели инструментов из ресурсов
Определяем ресурсы
RESOURCE EIK_APP_INFO
{
menubar = r_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
custom_app_info_extension = r_toolbar_ext; // Включаем показ панели инструментов
}
// Добавляем описание ресурсов панели инструментов, объявленной в EIK_APP_INFO
RESOURCE EIK_APP_INFO_EXT r_toolbar_ext
{
popup_toolbar = r_test_toolbar;
}
RESOURCE AVKON_TOOLBAR r_test_toolbar
{
flags = KAknToolbarFixed;
items =
{
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand1; // В данном примере мы используем ту же команду, что и в AppUi::HandleCommandL
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "button1";
helptxt = "help text1";
}
};
};
},
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand2; // В данном примере мы используем ту же команду, что и в AppUi::HandleCommandL
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "button2";
helptxt = "help text2";
}
};
};
}
};
}
Реализация Toolbar API
- Для получения событий от панели инструментов нам нужно унаследовать класс от MAknToolbarObserver и реализовать его виртуальные функции:
- virtual void OfferToolbarEventL( TInt aCommand ) = 0;
- virtual void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar );
ToolbarAppUi.h
#include <akntoolbarobserver.h> // Подключаем заголовочный файл для MAknToolbarObserver, в mmp добавляем eikcoctl.lib
.....
.....
class CToolbarAppUi : public CAknAppUi, public MAknToolbarObserver
{
....
....
//From MAknToolbarObserver
void OfferToolbarEventL(TInt aCommand);
....
....
};
ToolbarAppUi.cpp
void CToolbarAppUi::ConstructL()
{
......
if(CurrentFixedToolbar())
{
CurrentFixedToolbar()->SetToolbarObserver(this);
}
.......
.......
}
//From MAknToolbarObserver
void CToolbarAppUi::OfferToolbarEventL(TInt aCommand)
{
HandleCommandL(aCommand); // В данном примере просто переадресуем полученную команду в функцию HandleCommandL
}
Создание расширенной панели инструментов из ресурсов
Определяем ресурсы
RESOURCE EIK_APP_INFO
{
menubar = r_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
custom_app_info_extension = r_toolbar_ext; // Включаем показ панели инструментов
}
// Добавляем описание ресурсов панели инструментов, объявленной в EIK_APP_INFO
RESOURCE EIK_APP_INFO_EXT r_toolbar_ext
{
popup_toolbar = r_test_toolbar;
}
RESOURCE AVKON_TOOLBAR r_test_toolbar
{
flags = KAknToolbarFixed;
items =
{
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand1; // В данном примере мы используем ту же команду, что и в AppUi::HandleCommandL
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "button1";
helptxt = "help text1";
}
};
};
},
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand2;
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "button2";
helptxt = "help text2";
}
};
};
},
TBAR_CTRL
{
type = EAknCtToolbarExtension; // Создаем расширение панели инструментов с дополнительным набором кнопок
control = AVKON_TOOLBAR_EXTENSION
{
flags = KAknTbExtensionTransparent;
items =
{
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand2;
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "b2";
helptxt = "help text2";
}
};
};
},
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand2;
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "b2";
helptxt = "help text2";
}
};
};
},
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand2;
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "b2";
helptxt = "help text2";
}
};
};
},
TBAR_CTRL
{
type = EAknCtButton;
id = ECommand2;
control = AVKON_BUTTON
{
flags = KAknButtonTextInsideFrame;
states =
{
AVKON_BUTTON_STATE
{
txt = "b2";
helptxt = "help text2";
}
};
};
}
};
};
}
};
}
ToolbarAppUi.cpp
- Здесь мы обрабатываем команды, полученные от панели инструментов
- Мы должны скрыть расширенную панель после того, как получили команду от одного из ее элементов
//From MAknToolbarObserver
void CToolbarAppUi::OfferToolbarEventL(TInt aCommand)
{
// Проверяем видимость расширенной панели...
if(CurrentFixedToolbar()->ToolbarExtension()->IsShown())
{ // ...и скрываем ее
CurrentFixedToolbar()->ToolbarExtension()->SetShown(EFalse);
}
HandleCommandL(aCommand);
}
Ограничения Toolbar API
- Максимальное количество элементов на основной панели, с учетом кнопки показа панели расширения - 3.
- Максимальное количество элементов на расширенной панели - 12.
Полезные функции
CAknToolbar
- AddItemL()
- RemoveItemL()
- SetToolbarVisibility()
- IsShown()
- DisableToolbarL()
- IsToolbarDisabled()
CAknToolbarExtension
- AddItemL()
- RemoveItemL()
- IsShown()
- SetShown()
MAknToolbarObserver
- DynInitToolbarL()
- OfferToolbarEventL()
Ключевые моменты
Заголовочные файлы
- #include <AknToolbarObserver.h>
- #include <AknToolbar.h>
Классы
- CAknToolbar
- MAknToolbarObserver
Библиотеки
- eikcoctl.lib
Демонстрационное приложение
Связанные ссылки
- Примеры работы с S60 Touch UI
- Пример работы с LongTapDetector API - S60 Touch UI
- Пример работы с Stylus Pop-up Menu API - S60 Touch UI
- Пример работы с Tactile Feedback Client API - S60 Touch UI
- Пример работы с Adaptive Search - S60 Touch UI
- Пример работы с ChoiceList API - S60 Touch UI
- Пример работы с Generic Button API - S60 Touch UI
- Пример работы с Hierarchical Lists API (SingleStyleTreeList) - S60 Touch UI
- Пример работы с Hierarchical Lists API (SingleColumnStyleTreeList) - S60 Touch UI
При подготовке статьи использованы следующие материалы:
Источники дополнительной информации
- S60 5th edition SDK help
- S60 5th Edition C++ Developer's Library v1.0





(no comments yet)