mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-29 08:21:12 +02:00
274 lines
8.4 KiB
C++
274 lines
8.4 KiB
C++
/*
|
|
$Id: personalize.h,v 1.19 2011/04/25 19:32:46 tuxbox-cvs Exp $
|
|
|
|
Customization Menu - Neutrino-GUI
|
|
|
|
Copyright (C) 2007 Speed2206
|
|
and some other guys
|
|
|
|
Reworked by dbt (Thilo Graf)
|
|
Copyright (C) 2010, 2011 dbt
|
|
|
|
Comment:
|
|
|
|
This is the customization menu, as originally showcased in
|
|
Oxygen. It is a more advanced version of the 'user levels'
|
|
patch currently available.
|
|
|
|
The reworked version >1.24 works more dynamicly with input objects
|
|
and their parameters and it's more code reduced. It's also independent
|
|
from #ifdefs of items.
|
|
The personalize-object collects all incomming forwarder item objects.
|
|
These will be handled here and will be shown after evaluation.
|
|
|
|
|
|
License: GPL
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public
|
|
License along with this program; if not, write to the
|
|
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
|
|
NOTE for ignorant distributors:
|
|
It's not allowed to distribute any compiled parts of this code, if you don't accept the terms of GPL.
|
|
Please read it and understand it right!
|
|
This means for you: Hold it, if not, leave it! You could face legal action!
|
|
Otherwise ask the copyright owners, anything else would be theft!
|
|
*/
|
|
|
|
|
|
#ifndef __personalize__
|
|
#define __personalize__
|
|
|
|
#include <gui/widget/menue.h>
|
|
#include <gui/user_menue_setup.h>
|
|
#include "widget/stringinput.h"
|
|
#include "widget/stringinput_ext.h"
|
|
#include <string>
|
|
#include <vector>
|
|
#include <configfile.h>
|
|
#include <system/setting_helpers.h>
|
|
|
|
class CPlugins;
|
|
extern CPlugins * g_Plugins; /* neutrino.cpp */
|
|
|
|
//helper class to enable/disable some items in usermenu setup
|
|
class CUserMenuNotifier : public CChangeObserver
|
|
{
|
|
private:
|
|
|
|
CMenuItem* toDisable[USERMENU_ITEMS_COUNT];
|
|
|
|
public:
|
|
CUserMenuNotifier( CMenuItem*, CMenuItem*, CMenuItem*, CMenuItem*);
|
|
|
|
bool changeNotify(const neutrino_locale_t = NONEXISTANT_LOCALE, void *data = NULL);
|
|
};
|
|
|
|
//helper class to enable/disable pin setup
|
|
class CPinSetupNotifier : public CChangeObserver
|
|
{
|
|
private:
|
|
CMenuItem* toDisable;
|
|
public:
|
|
CPinSetupNotifier( CMenuItem*);
|
|
bool changeNotify(const neutrino_locale_t = NONEXISTANT_LOCALE, void *data = NULL);
|
|
};
|
|
|
|
|
|
//some required typedefs
|
|
typedef struct mn_widget_t
|
|
{
|
|
const neutrino_locale_t locale_text;
|
|
const std::string icon;
|
|
const int width;
|
|
} mn_widget_struct_t;
|
|
|
|
typedef struct settings_int_t
|
|
{
|
|
int old_val;
|
|
int *p_val;
|
|
}settings_int_struct_t;
|
|
|
|
typedef struct menu_item_t
|
|
{
|
|
CMenuWidget *widget;
|
|
CMenuItem* menuItem;
|
|
bool default_selected;
|
|
neutrino_locale_t locale_name;
|
|
int* personalize_mode;
|
|
int item_mode;
|
|
CMenuItem *observer_Item;
|
|
int condition;
|
|
}menu_item_struct_t;
|
|
|
|
typedef struct observ_menu_item_t
|
|
{
|
|
CMenuWidget *widget;
|
|
neutrino_locale_t observer_locale;
|
|
neutrino_locale_t to_observ_locale;
|
|
}observ_menu_item_struct_t;
|
|
|
|
typedef struct raw_item_t
|
|
{
|
|
CMenuItem* menuItem;
|
|
bool default_selected;
|
|
int* personalize_mode;
|
|
int item_mode;
|
|
}raw_item_struct_t;
|
|
|
|
typedef struct personalize_settings_t
|
|
{
|
|
const char* personalize_settings_name;
|
|
int personalize_default_val;
|
|
} personalize_settings_struct_t;
|
|
|
|
|
|
class CPersonalizeGui : public CMenuTarget, public CChangeObserver, public CPINProtection
|
|
{
|
|
protected:
|
|
virtual CMenuTarget* getParent() { return( NULL);};
|
|
|
|
private:
|
|
CUserMenuNotifier *user_menu_notifier;
|
|
CPinSetupNotifier *pin_setup_notifier;
|
|
CMenuWidget* tmpW;
|
|
CMenuWidget* uMenu;
|
|
|
|
int width, widget_count, shortcut, options_count;
|
|
bool show_usermenu, show_pin_setup;
|
|
bool show_pluginmenu;
|
|
|
|
int customkey_offset;
|
|
|
|
//stuff for settings handlers
|
|
void handleSetting(int *setting);
|
|
void restoreSettings();
|
|
bool haveChangedSettings();
|
|
|
|
std::vector<settings_int_t> v_int_settings;
|
|
|
|
std::vector<menu_item_t> v_item;
|
|
std::vector<CMenuWidget *> v_widget;
|
|
std::vector<observ_menu_item_t> v_observ;
|
|
|
|
int ShowPersonalizationMenu();
|
|
int ShowMenuOptions(const int& menu);
|
|
void ShowHelpPersonalize();
|
|
void ShowPinSetup(CMenuWidget* p_widget, CPINChangeWidget * &pin_widget);
|
|
void ShowUserMenu();
|
|
void ShowPluginMenu(CMenuWidget* p_widget, std::string da[], int ia[]);
|
|
void SaveAndExit();
|
|
void ApplySettings();
|
|
|
|
bool hasPinItems();
|
|
|
|
neutrino_msg_t getShortcut(const int & shortcut_num, neutrino_msg_t alternate_rc_key = CRCInput::RC_nokey);
|
|
void addObservedItem(CMenuWidget *widget, CMenuItem *observer_Item, CMenuItem *to_observ_Item);
|
|
bool changeNotify(const neutrino_locale_t locale= NONEXISTANT_LOCALE, void *data = NULL);
|
|
bool isObserver(CMenuWidget* widget, CMenuItem * item);
|
|
public:
|
|
//general options for personalized items
|
|
enum PERSONALIZE_MODE
|
|
{
|
|
PERSONALIZE_MODE_NOTVISIBLE = 0,
|
|
PERSONALIZE_MODE_VISIBLE = 1,
|
|
PERSONALIZE_MODE_PIN = 2,
|
|
|
|
PERSONALIZE_MODE_MAX
|
|
};
|
|
|
|
//options for personalized items with pin protection
|
|
enum PERSONALIZE_PROTECT_MODE
|
|
{
|
|
PERSONALIZE_PROTECT_MODE_NOT_PROTECTED = 0,
|
|
PERSONALIZE_PROTECT_MODE_PIN_PROTECTED = 2,
|
|
|
|
PERSONALIZE_PROTECT_MODE_MAX = 2
|
|
};
|
|
|
|
//options for show_epg_feat options
|
|
enum PERSONALIZE_ACTIVE_MODE
|
|
{
|
|
PERSONALIZE_ACTIVE_MODE_DISABLED = 0,
|
|
PERSONALIZE_ACTIVE_MODE_ENABLED = 1,
|
|
|
|
PERSONALIZE_ACTIVE_MODE_MAX
|
|
};
|
|
|
|
//internal display modes for items in personalize settings menue
|
|
enum PERSONALIZE_ITEM_MODE
|
|
{
|
|
PERSONALIZE_SHOW_NO = 0,
|
|
PERSONALIZE_SHOW_AS_ITEM_OPTION = 1,
|
|
PERSONALIZE_SHOW_AS_ACCESS_OPTION = 2,
|
|
PERSONALIZE_SHOW_ONLY_IN_PERSONALIZE_MENU = 3 //usefull to hide separators in menu, but visible only in personalizing menu
|
|
};
|
|
|
|
//options for features key
|
|
enum PERSONALIZE_FEAT_KEY
|
|
{
|
|
PERSONALIZE_FEAT_KEY_RED,
|
|
PERSONALIZE_FEAT_KEY_GREEN,
|
|
PERSONALIZE_FEAT_KEY_YELLOW,
|
|
PERSONALIZE_FEAT_KEY_BLUE,
|
|
PERSONALIZE_FEAT_KEY_AUTO,
|
|
|
|
PERSONALIZE_FEAT_KEY_MAX
|
|
};
|
|
|
|
CPersonalizeGui();
|
|
~CPersonalizeGui();
|
|
|
|
int exec(CMenuTarget* parent, const std::string & actionKey);
|
|
|
|
CMenuWidget& getWidget(const int& id);
|
|
|
|
void addWidget(CMenuWidget *widget);
|
|
void addWidgets(const struct mn_widget_t * const widget, const int& widget_count);
|
|
int getWidgetCount() {return widget_count;};
|
|
int getWidgetId(CMenuWidget *widget);
|
|
int getItemsCount(CMenuWidget *widget);
|
|
int getItemsCount(const int& widget_id);
|
|
void setShortcut(const int& short_cut = 1) {shortcut = short_cut;};
|
|
void addItem(CMenuWidget *widget, CMenuItem *menu_Item, const int *personalize_mode = NULL, const bool defaultselected = false, const int& item_mode = PERSONALIZE_SHOW_AS_ITEM_OPTION, CMenuItem *observer_Item = NULL, const menu_item_disable_cond_t& disable_condition = DCOND_MODE_NONE );
|
|
void addItem(const int& widget_id, CMenuItem *menu_Item, const int *personalize_mode = NULL, const bool defaultselected = false, const int& item_mode = PERSONALIZE_SHOW_AS_ITEM_OPTION, CMenuItem *observer_Item = NULL, const menu_item_disable_cond_t& disable_condition = DCOND_MODE_NONE );
|
|
void addIntroItems(CMenuWidget *widget);
|
|
void addIntroItems(const int& widget_id);
|
|
void addSeparator(CMenuWidget &menu, const neutrino_locale_t locale_text = NONEXISTANT_LOCALE, const int& item_mode = PERSONALIZE_SHOW_AS_ITEM_OPTION);
|
|
void addSeparator(const int& widget_id, const neutrino_locale_t locale_text = NONEXISTANT_LOCALE, const int& item_mode = PERSONALIZE_SHOW_AS_ITEM_OPTION);
|
|
void addPersonalizedItems();
|
|
void enableUsermenu(bool show = true){show_usermenu = show;};
|
|
void enablePluginMenu(bool show = true){show_pluginmenu = show;};
|
|
void enablePinSetup(bool show = true){show_pin_setup = show;};
|
|
};
|
|
|
|
typedef struct feat_keys_t
|
|
{
|
|
neutrino_locale_t locale_name;
|
|
neutrino_msg_t key;
|
|
}feat_keys_struct_t;
|
|
|
|
const struct feat_keys_t feat_key[CPersonalizeGui::PERSONALIZE_FEAT_KEY_MAX] =
|
|
{
|
|
{LOCALE_PERSONALIZE_BUTTON_RED , CRCInput::RC_red },
|
|
{LOCALE_PERSONALIZE_BUTTON_GREEN , CRCInput::RC_green },
|
|
{LOCALE_PERSONALIZE_BUTTON_YELLOW , CRCInput::RC_yellow },
|
|
{LOCALE_PERSONALIZE_BUTTON_BLUE , CRCInput::RC_blue },
|
|
{LOCALE_PERSONALIZE_BUTTON_AUTO , CRCInput::RC_nokey }
|
|
};
|
|
|
|
#endif
|
|
|