void update();
void updateIndex(int itemsCount);
void updateNoContents(int itemsCount);
+ TaskListViewItem *createItem(const AppInfo &appInfo);
private:
TaskListView *m_pTaskListView;
IndexView *m_pIndexView;
+ bool m_SkipHighlightCurrentPage;
};
}
Evas_Object *createPadding();
void freezeScrollPush();
void freezeScrollPop();
+ void updateHighlights();
void onDelRequest(TaskListViewItem &item);
void onAppClicked(TaskListViewItem &item);
void playKillUpAnim();
void playKillDownAnim();
const AppInfo &getAppInfo() const;
+ void highlightIcon();
private:
void onMove(Evas *e, Evas_Object *obj, void *event_info);
double m_MoveDistance; // 0..1;
bool m_IsKillAnimPlaying;
bool m_IgnoreAppClick;
+ Atspi m_AoIcon;
+ Atspi m_AoDelButton;
};
}
: MainLayout(parent)
, m_pTaskListView(nullptr)
, m_pIndexView(nullptr)
+ , m_SkipHighlightCurrentPage(true)
{
m_pTaskListView = new TaskListView(getEo());
m_pTaskListView->setListener(this);
{
}
+TaskListViewItem *MainController::createItem(const AppInfo &appInfo)
+{
+ auto item = new TaskListViewItem(*m_pTaskListView, appInfo);
+ return item;
+}
+
void MainController::update()
{
m_pTaskListView->clear();
auto list = App::getInst().getTaskMngr().getAppInfo();
for (const AppInfo &appInfo : list) {
- m_pTaskListView->appendItem(*new TaskListViewItem(*m_pTaskListView, appInfo));
+ auto item = createItem(appInfo);
+ if (item) {
+ m_pTaskListView->appendItem(*item);
+ }
}
//TODO: only for test will be removed.
void MainController::onListChanged(TaskListView &obj, int itemsCount)
{
LOG("", itemsCount);
- if (itemsCount <= 0)
+ if (itemsCount <= 0) {
App::getInst().exit();
- updateIndex(itemsCount);
- updateNoContents(itemsCount);
+ } else {
+ updateIndex(itemsCount);
+ updateNoContents(itemsCount);
+ TaskListViewItem *item = obj.getCurrentPage();
+ if (!m_SkipHighlightCurrentPage && item)
+ item->highlightIcon();
+ }
+ m_SkipHighlightCurrentPage = false;
}
void MainController::onCurrentPageChanged(TaskListView &obj)
{
LOG("");
+ TaskListViewItem *item = obj.getCurrentPage();
+ if (item) {
+ item->highlightIcon();
+ }
updateIndex(m_pTaskListView->getItemsCount());
}
Eina_List *list = elm_box_children_get(m_pBox);
if (list) {
- int currentIndex = getCurrentPageIndex();
- int count = eina_list_count(list);
- if (currentIndex >=0 && currentIndex < count)
- res = staticCast<TaskListViewItem*>(eina_list_nth(list, currentIndex));
+ int i = getCurrentPageIndex() + 1; // left padding
+ int count = eina_list_count(list) - 1; // right padding
+ if (i >=0 && i < count)
+ res = staticCast<TaskListViewItem*>(eina_list_nth(list, i));
}
return res;
elm_object_scroll_freeze_pop(m_pScroller);
}
+void TaskListView::updateHighlights()
+{
+ auto items = getItems();
+ TaskListViewItem *current = getCurrentPage();
+ for (TaskListViewItem *item : items) {
+ item->getAtspi().canHighlight(current == item);
+ }
+}
+
void TaskListView::onDelRequest(TaskListViewItem &item)
{
LOG("");
void TaskListView::onPageChanged(Evas_Object *obj, void *event_info)
{
LOG("");
+ updateHighlights();
if (m_pListener)
m_pListener->onCurrentPageChanged(*this);
}
int lastItemsCount = getItemsCount();
if (lastItemsCount != m_LastItemsCount) {
m_LastItemsCount = lastItemsCount;
+ updateHighlights();
if (m_pListener)
m_pListener->onListChanged(*this, m_LastItemsCount);
}
m_pDelButton = new DelButton(m_pTaskLayout);
m_pDelButton->addSmartCb("clicked", makeCbFirst(&TaskListViewItem::onDelButtonClicked), this);
elm_object_part_content_set(m_pTaskLayout, "swl.delete_button", *m_pDelButton);
+
}
TaskListViewItem::~TaskListViewItem()
return m_AppInfo;
}
+void TaskListViewItem::highlightIcon()
+{
+ elm_atspi_component_highlight_grab(m_AoIcon);
+}
+
void TaskListViewItem::setIcon(const std::string &path)
{
if (path.empty())
evas_object_image_filled_set(icon, true);
elm_object_part_content_set(m_pTaskLayout, "img.app_image", icon);
- Atspi aoAppIcon(elm_access_object_register(icon, m_pTaskLayout));
- aoAppIcon.setName(m_AppInfo.name);
- aoAppIcon.setDescriptionCb(makeCbFirst(&TaskListViewItem::onChangeDescription), this);
- aoAppIcon.setReadingInfo(ELM_ACCESSIBLE_READING_INFO_TYPE_NAME | ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION);
+ m_AoIcon = elm_access_object_register(icon, m_pTaskLayout);
+ m_AoIcon.setName(m_AppInfo.name);
+ m_AoIcon.setDescriptionCb(makeCbFirst(&TaskListViewItem::onChangeDescription), this);
+ m_AoIcon.setReadingInfo(ELM_ACCESSIBLE_READING_INFO_TYPE_NAME | ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION);
}
void TaskListViewItem::setText(const std::string &text)
* limitations under the License.
*/
-#ifndef AtspiAccessibleInterface_h_
-#define AtspiAccessibleInterface_h_
+#ifndef Atspi_h_
+#define Atspi_h_
#include "LangUtils.h"
#include "Config.h"
/**
* @brief Wrapper for Elm_Interface_Atspi_Accessible interface (Screen reader)
*/
- class AtspiAccessibleInterface {
+ class Atspi {
public:
- AtspiAccessibleInterface();
- AtspiAccessibleInterface(Elm_Interface_Atspi_Accessible *obj);
+ Atspi();
+ Atspi(Elm_Interface_Atspi_Accessible *obj);
void wrap(Elm_Interface_Atspi_Accessible *obj);
Elm_Interface_Atspi_Accessible *getEo() const;
operator Elm_Interface_Atspi_Accessible *() const;
Elm_Interface_Atspi_Accessible *m_pEo;
};
- typedef AtspiAccessibleInterface Atspi;
-
- inline AtspiAccessibleInterface::AtspiAccessibleInterface()
+ inline Atspi::Atspi()
: m_pEo(nullptr)
{
}
- inline AtspiAccessibleInterface::AtspiAccessibleInterface(Elm_Interface_Atspi_Accessible *obj)
+ inline Atspi::Atspi(Elm_Interface_Atspi_Accessible *obj)
: m_pEo(obj)
{
}
- inline void AtspiAccessibleInterface::wrap(Elm_Interface_Atspi_Accessible *obj)
+ inline void Atspi::wrap(Elm_Interface_Atspi_Accessible *obj)
{
m_pEo = obj;
}
- inline Elm_Interface_Atspi_Accessible *AtspiAccessibleInterface::getEo() const
+ inline Elm_Interface_Atspi_Accessible *Atspi::getEo() const
{
return m_pEo;
}
- inline AtspiAccessibleInterface::operator Elm_Interface_Atspi_Accessible *() const
+ inline Atspi::operator Elm_Interface_Atspi_Accessible *() const
{
return getEo();
}
- inline void AtspiAccessibleInterface::setDescription(const char *text)
+ inline void Atspi::setDescription(const char *text)
{
elm_atspi_accessible_description_set(m_pEo, text);
elm_atspi_accessible_translation_domain_set(m_pEo, PACKAGE_NAME);
}
- inline void AtspiAccessibleInterface::setDescription(const std::string &text)
+ inline void Atspi::setDescription(const std::string &text)
{
setDescription(text.c_str());
}
- inline void AtspiAccessibleInterface::setName(const char *text)
+ inline void Atspi::setName(const char *text)
{
elm_atspi_accessible_name_set(m_pEo, (char*)text);
}
- inline void AtspiAccessibleInterface::setName(const std::string &text)
+ inline void Atspi::setName(const std::string &text)
{
setName(text.c_str());
}
- inline void AtspiAccessibleInterface::setRole(Elm_Atspi_Role role)
+ inline void Atspi::setRole(Elm_Atspi_Role role)
{
elm_atspi_accessible_role_set(m_pEo, role);
}
- inline void AtspiAccessibleInterface::setReadingInfo(int type)
+ inline void Atspi::setReadingInfo(int type)
{
elm_atspi_accessible_reading_info_type_set(m_pEo, (Elm_Accessible_Reading_Info_Type)type);
}
- inline void AtspiAccessibleInterface::appendRelationship(Elm_Atspi_Relation_Type type, const Elm_Interface_Atspi_Accessible *obj)
+ inline void Atspi::appendRelationship(Elm_Atspi_Relation_Type type, const Elm_Interface_Atspi_Accessible *obj)
{
elm_atspi_accessible_relationship_append(m_pEo, type, obj);
}
- inline void AtspiAccessibleInterface::removeRelationship(Elm_Atspi_Relation_Type type, const Elm_Interface_Atspi_Accessible *obj)
+ inline void Atspi::removeRelationship(Elm_Atspi_Relation_Type type, const Elm_Interface_Atspi_Accessible *obj)
{
elm_atspi_accessible_relationship_remove(m_pEo, type, obj);
}
- inline void AtspiAccessibleInterface::canHighlight(bool canHighlight)
+ inline void Atspi::canHighlight(bool canHighlight)
{
elm_atspi_accessible_can_highlight_set(m_pEo, canHighlight);
}
- inline void AtspiAccessibleInterface::setDescriptionCb(Elm_Atspi_Reading_Info_Cb descriptionCb, const void *data)
+ inline void Atspi::setDescriptionCb(Elm_Atspi_Reading_Info_Cb descriptionCb, const void *data)
{
elm_atspi_accessible_description_cb_set(m_pEo, descriptionCb, data);
}
}
-#endif /* AtspiAccessibleInterface_h_ */
+#endif /* Atspi_h_ */
/**
* @brief Gets AtspiAccessibleInterface wrapper
- * @return wrapper to AtspiAccessibleInterface
+ * @return wrapper to Atspi
*/
- AtspiAccessibleInterface getAtspi() const;
+ Atspi getAtspi() const;
protected:
void setEo(Eo *eo);
{
}
- inline AtspiAccessibleInterface BaseView::getAtspi() const
+ inline Atspi BaseView::getAtspi() const
{
- return AtspiAccessibleInterface(m_pEo);
+ return Atspi(m_pEo);
}
inline BaseView::operator Eo *() const