Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

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

From 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 00:34.
184 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×