×
Namespaces

Variants
Actions

Пример работы с Toolbar API - S60 Touch UI

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Пример кода
Исходный файл: Media:Toolbar.zip

Совместимость
Платформа(ы):
S60 5th Edition

Статья
Автор: A.A.M. (28 Jan 2009)
Последнее редактирование: hamishwillee (09 Dec 2011)
Статья базируется на материалах англоязычной части Wiki, все они перечислены в разделе ссылки.

Contents

Обзор

Toolbar API - это нововведение S60 5-го издания, позволяющее создавать панели управления с размещенными на них кнопками, адаптированными под использование сенсорного интерфейса. В данной статье мы рассмотрим пример работы с этим API.

Toolbar API

Toolbar.png

Как показано на скриншоте, панель инструментов (Toolbar) может служить для размещения элементов пользовательского интерфейса, например, кнопок. Панель может быть как фиксированной, так и плавающей.

Создание панели инструментов из ресурсов

ToolbarWith2Buttons.png

Определяем ресурсы

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 и реализовать его виртуальные функции:
  1. virtual void OfferToolbarEventL( TInt aCommand ) = 0;
  2. 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
}


Создание расширенной панели инструментов из ресурсов

ToolbarWithExtension.png

Определяем ресурсы

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

Демонстрационное приложение

Связанные ссылки



При подготовке статьи использованы следующие материалы:

Источники дополнительной информации

This page was last modified on 9 December 2011, at 03:34.
68 page views in the last 30 days.
×