Browse Source

Add headers/disabled items to menus

v1
Adam PIppin 3 years ago
parent
commit
95be88b14e
  1. 61
      watchos/Module_Menu.cpp
  2. 2
      watchos/Module_Menu.h
  3. 6
      watchos/Task_Menu.cpp
  4. 2
      watchos/__vm/Compile.vmps.xml
  5. 2
      watchos/__vm/Upload.vmps.xml

61
watchos/Module_Menu.cpp

@ -9,7 +9,7 @@
// How many menu items to show on screen at once
#define MODULE_MENU_SHOW_OPTIONS 8
// How long menu labels can be
#define MODULE_MENU_MAX_OPTION_LENGTH 15
#define MODULE_MENU_MAX_OPTION_LENGTH 14
#define MODULE_MENU_EAT_OFFSET 3
#define MODULE_MENU_EAT_ENTRY_LENGTH 16 // MODULE_MENU_MAX_OPTION_LENGTH + 1
@ -22,6 +22,7 @@ struct MenuItem
{
byte id;
char label[MODULE_MENU_MAX_OPTION_LENGTH];
bool disabled = false;
};
void menu_draw(int hwnd, int x, int y, int width, int height)
@ -82,22 +83,45 @@ void Module_Menu::tick()
if ((e->param1 & MODULE_INPUT_BUTTON_UP) == MODULE_INPUT_BUTTON_UP)
{
if (m_selected > 0)
for (;;)
{
m_selected -= 1;
scroll_up = true;
Kernel::debug("Scroll up!");
if (m_selected > 0)
{
m_selected -= 1;
scroll_up = true;
Kernel::debug("Scroll up!");
if (!m_item[m_selected]->disabled)
break;
}
if ((m_selected == 0 && m_item[m_selected]->disabled) || (m_selected > 0 && m_item[m_selected - 1]->disabled))
{
Kernel::debug("Cancelled!");
m_selected = prev_selected;
scroll_up = false;
break;
}
}
}
if ((e->param1 & MODULE_INPUT_BUTTON_DOWN) == MODULE_INPUT_BUTTON_DOWN)
{
if (m_selected < MODULE_MENU_MAX_OPTIONS && m_item[m_selected + 1] != nullptr)
for (;;)
{
m_selected += 1;
scroll_down = true;
Kernel::debug("Scroll down!");
if (m_selected < MODULE_MENU_MAX_OPTIONS && m_item[m_selected + 1] != nullptr)
{
m_selected += 1;
scroll_down = true;
Kernel::debug("Scroll down!");
}
if (!m_item[m_selected]->disabled)
break;
if (m_item[m_selected]->disabled && (m_selected == MODULE_MENU_MAX_OPTIONS - 1 || m_item[m_selected + 1] == nullptr))
{
Kernel::debug("Cancelled!");
m_selected = prev_selected;
scroll_down = false;
break;
}
}
}
@ -160,9 +184,10 @@ void Module_Menu::read()
{
m_item[i] = new MenuItem();
m_item[i]->id = id;
m_item[i]->disabled = eat->read(MODULE_MENU, MODULE_MENU_EAT_OFFSET + (i * MODULE_MENU_EAT_ENTRY_LENGTH) + 1) != 0;
for (int j = 0; j < MODULE_MENU_MAX_OPTION_LENGTH; j++)
{
m_item[i]->label[j] = (char)eat->read(MODULE_MENU, MODULE_MENU_EAT_OFFSET + (i * MODULE_MENU_EAT_ENTRY_LENGTH) + j + 1);
m_item[i]->label[j] = (char)eat->read(MODULE_MENU, MODULE_MENU_EAT_OFFSET + (i * MODULE_MENU_EAT_ENTRY_LENGTH) + j + 2);
if (m_item[i]->label[j] == '\0')
{
break;
@ -191,15 +216,16 @@ void Module_Menu::commit()
else
{
eat->write(MODULE_MENU, MODULE_MENU_EAT_OFFSET + (i * MODULE_MENU_EAT_ENTRY_LENGTH), m_item[i]->id);
eat->write(MODULE_MENU, MODULE_MENU_EAT_OFFSET + (i * MODULE_MENU_EAT_ENTRY_LENGTH) + 1, m_item[i]->disabled ? 0xFF : 0x00);
for (int j = 0; j < MODULE_MENU_MAX_OPTION_LENGTH; j++)
{
eat->write(MODULE_MENU, MODULE_MENU_EAT_OFFSET + (i * MODULE_MENU_EAT_ENTRY_LENGTH) + j + 1, (byte)(m_item[i]->label[j]));
eat->write(MODULE_MENU, MODULE_MENU_EAT_OFFSET + (i * MODULE_MENU_EAT_ENTRY_LENGTH) + j + 2, (byte)(m_item[i]->label[j]));
}
}
}
}
void Module_Menu::addItem(byte id, char* label)
void Module_Menu::addItem(byte id, char* label, bool disabled)
{
for (int i = 0; i < MODULE_MENU_MAX_OPTIONS; i++)
{
@ -207,7 +233,14 @@ void Module_Menu::addItem(byte id, char* label)
{
m_item[i] = new MenuItem();
m_item[i]->id = id;
m_item[i]->disabled = disabled;
strcpy(m_item[i]->label, label);
// todo: this will break if you _only_ add disabled options
if (m_selected == i && disabled)
{
m_selected++;
}
return;
}
}
@ -264,7 +297,7 @@ void Module_Menu::draw(int hwnd, int x, int y, int width, int height)
if (m_item[idx] != nullptr)
{
ui->getGfx()->setFont(&FreeMono12pt7b);
if (idx == m_selected)
if (idx == m_selected || m_item[idx]->disabled)
{
ui->getGfx()->fillRect(x, y, width, height, COLOUR_PRIMARY);
ui->getGfx()->setTextColor(COLOUR_SECONDARY);

2
watchos/Module_Menu.h

@ -34,7 +34,7 @@ public:
void draw(int hwnd, int x, int y, int width, int height);
void event(Event* e);
void addItem(byte id, char* label);
void addItem(byte id, char* label, bool disabled = false);
void reset();
void show();

6
watchos/Task_Menu.cpp

@ -47,7 +47,6 @@ public:
// Hacky, but it'll work for now
else if (ui->getRootWindow() == 0 && (e->param1 & MODULE_INPUT_BUTTON_OK) == MODULE_INPUT_BUTTON_OK)
{
Kernel::debug("show menu");
show();
m_waiting_for_menu = true;
}
@ -66,9 +65,14 @@ public:
{
Kernel::debug("Task_Menu::show");
menu->reset();
menu->addItem(0, "watchos", true);
menu->addItem(1, "Option 1");
menu->addItem(2, "Option Two");
menu->addItem(3, "Option Tres");
menu->addItem(0, "config", true);
menu->addItem(4, "Option 1");
menu->addItem(5, "Option Two");
menu->addItem(6, "Option Tres");
menu->show();
}

2
watchos/__vm/Compile.vmps.xml

File diff suppressed because one or more lines are too long

2
watchos/__vm/Upload.vmps.xml

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save