1
0
mirror of git://projects.qi-hardware.com/gmenu2x.git synced 2024-06-28 12:39:50 +03:00

Removed "delegate.h"

The abstraction it provided was so thin that I think it is simpler to
just have the code use std::bind directly.
This commit is contained in:
Maarten ter Huurne 2014-08-16 07:07:41 +02:00
parent 7e308879c1
commit fe0db484ec
18 changed files with 76 additions and 60 deletions

View File

@ -6,6 +6,7 @@
#include "surface.h"
#include "utilities.h"
using std::bind;
using std::string;
using std::unique_ptr;
@ -23,22 +24,22 @@ BrowseDialog::BrowseDialog(
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/cancel.png",
gmenu2x->tr["Up one folder"],
BIND(&BrowseDialog::directoryUp))));
bind(&BrowseDialog::directoryUp, this))));
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/accept.png",
gmenu2x->tr["Select"],
BIND(&BrowseDialog::directoryEnter))));
bind(&BrowseDialog::directoryEnter, this))));
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/start.png",
gmenu2x->tr["Confirm"],
BIND(&BrowseDialog::confirm))));
bind(&BrowseDialog::confirm, this))));
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/select.png",
gmenu2x->tr["Exit"],
BIND(&BrowseDialog::quit))));
bind(&BrowseDialog::quit, this))));
iconGoUp = gmenu2x->sc.skinRes("imgs/go-up.png");
iconFolder = gmenu2x->sc.skinRes("imgs/folder.png");

View File

@ -3,20 +3,21 @@
#include "contextmenu.h"
#include "delegate.h"
#include "gmenu2x.h"
#include "linkapp.h"
#include "menu.h"
#include "utilities.h"
#include <algorithm>
#include <functional>
struct ContextMenu::MenuOption {
MenuOption(std::string text, function_t action)
typedef std::function<void(void)> Action;
MenuOption(std::string text, Action action)
: text(text), action(action) {}
std::string text;
function_t action;
Action action;
};
ContextMenu::ContextMenu(GMenu2X &gmenu2x, Menu &menu)

View File

@ -1,10 +0,0 @@
#ifndef __DELEGATE_H__
#define __DELEGATE_H__
#include <functional>
typedef std::function<void(void)> function_t;
#define BIND(function) std::bind(function, this)
#endif /* __DELEGATE_H__ */

View File

@ -381,17 +381,36 @@ void GMenu2X::initMenu() {
for (uint i=0; i<menu->getSections().size(); i++) {
//Add virtual links in the applications section
if (menu->getSections()[i]=="applications") {
menu->addActionLink(i,"Explorer", BIND(&GMenu2X::explorer),tr["Launch an application"],"skin:icons/explorer.png");
menu->addActionLink(i, "Explorer",
bind(&GMenu2X::explorer, this),
tr["Launch an application"],
"skin:icons/explorer.png");
}
//Add virtual links in the setting section
else if (menu->getSections()[i]=="settings") {
menu->addActionLink(i,"GMenu2X",BIND(&GMenu2X::showSettings),tr["Configure GMenu2X's options"],"skin:icons/configure.png");
menu->addActionLink(i,tr["Skin"],BIND(&GMenu2X::skinMenu),tr["Configure skin"],"skin:icons/skin.png");
menu->addActionLink(i,tr["Wallpaper"],BIND(&GMenu2X::changeWallpaper),tr["Change GMenu2X wallpaper"],"skin:icons/wallpaper.png");
if (fileExists(LOG_FILE))
menu->addActionLink(i,tr["Log Viewer"],BIND(&GMenu2X::viewLog),tr["Displays last launched program's output"],"skin:icons/ebook.png");
menu->addActionLink(i,tr["About"],BIND(&GMenu2X::about),tr["Info about GMenu2X"],"skin:icons/about.png");
menu->addActionLink(i, "GMenu2X",
bind(&GMenu2X::showSettings, this),
tr["Configure GMenu2X's options"],
"skin:icons/configure.png");
menu->addActionLink(i, tr["Skin"],
bind(&GMenu2X::skinMenu, this),
tr["Configure skin"],
"skin:icons/skin.png");
menu->addActionLink(i, tr["Wallpaper"],
bind(&GMenu2X::changeWallpaper, this),
tr["Change GMenu2X wallpaper"],
"skin:icons/wallpaper.png");
if (fileExists(LOG_FILE)) {
menu->addActionLink(i, tr["Log Viewer"],
bind(&GMenu2X::viewLog, this),
tr["Displays last launched program's output"],
"skin:icons/ebook.png");
}
menu->addActionLink(i, tr["About"],
bind(&GMenu2X::about, this),
tr["Info about GMenu2X"],
"skin:icons/about.png");
}
}

View File

@ -9,7 +9,7 @@ using namespace std;
IconButton::IconButton(
GMenu2X *gmenu2x, Touchscreen &ts,
const string &icon, const string &label, function_t action)
const string &icon, const string &label, Action action)
: gmenu2x(gmenu2x)
, ts(ts)
, icon(icon)

View File

@ -1,10 +1,11 @@
#ifndef ICONBUTTON_H
#define ICONBUTTON_H
#include "delegate.h"
#include "gmenu2x.h"
#include <SDL.h>
#include <functional>
#include <string>
class OffscreenSurface;
@ -14,9 +15,11 @@ class Touchscreen;
class IconButton {
public:
typedef std::function<void(void)> Action;
IconButton(GMenu2X *gmenu2x, Touchscreen &ts,
const std::string &icon, const std::string &label = "",
function_t action = nullptr);
Action action = nullptr);
SDL_Rect getRect() { return rect; }
void setPosition(int x, int y);
@ -31,7 +34,7 @@ private:
GMenu2X *gmenu2x;
Touchscreen &ts;
std::string icon, label;
function_t action;
Action action;
SDL_Rect rect, iconRect, labelRect;
OffscreenSurface *iconSurface;

View File

@ -21,7 +21,6 @@
#include "inputdialog.h"
#include "buttonbox.h"
#include "delegate.h"
#include "gmenu2x.h"
#include "iconbutton.h"
#include "surface.h"
@ -100,22 +99,22 @@ InputDialog::InputDialog(GMenu2X *gmenu2x, InputManager &inputMgr_,
buttonbox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/l.png",
gmenu2x->tr["Backspace"],
BIND(&InputDialog::backspace))));
bind(&InputDialog::backspace, this))));
buttonbox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/r.png",
gmenu2x->tr["Space"],
BIND(&InputDialog::space))));
bind(&InputDialog::space, this))));
buttonbox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/accept.png",
gmenu2x->tr["Confirm"],
BIND(&InputDialog::confirm))));
bind(&InputDialog::confirm, this))));
buttonbox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/cancel.png",
gmenu2x->tr["Change keys"],
BIND(&InputDialog::changeKeys))));
bind(&InputDialog::changeKeys, this))));
}
void InputDialog::setKeyboard(int kb) {

View File

@ -32,7 +32,7 @@
using namespace std;
Link::Link(GMenu2X *gmenu2x, function_t action)
Link::Link(GMenu2X *gmenu2x, Action action)
: gmenu2x(gmenu2x)
, ts(gmenu2x->getTouchscreen())
, action(action)

View File

@ -21,9 +21,9 @@
#ifndef LINK_H
#define LINK_H
#include "delegate.h"
#include <SDL.h>
#include <functional>
#include <string>
class GMenu2X;
@ -38,7 +38,9 @@ Base class that represents a link on screen.
*/
class Link {
public:
Link(GMenu2X *gmenu2x, function_t action);
typedef std::function<void(void)> Action;
Link(GMenu2X *gmenu2x, Action action);
virtual ~Link() {};
bool isPressed();
@ -78,7 +80,7 @@ private:
void recalcCoordinates();
Touchscreen &ts;
function_t action;
Action action;
SDL_Rect rect;
uint iconX, padding;

View File

@ -21,7 +21,6 @@
#include "linkapp.h"
#include "debug.h"
#include "delegate.h"
#include "gmenu2x.h"
#include "launcher.h"
#include "layer.h"
@ -87,7 +86,7 @@ LinkApp::LinkApp(GMenu2X *gmenu2x_, const char* linkfile,
#else
LinkApp::LinkApp(GMenu2X *gmenu2x_, const char* linkfile)
#endif
: Link(gmenu2x_, BIND(&LinkApp::start))
: Link(gmenu2x_, bind(&LinkApp::start, this))
{
manual = "";
file = linkfile;

View File

@ -387,7 +387,7 @@ void Menu::setSectionIndex(int i) {
/*====================================
LINKS MANAGEMENT
====================================*/
void Menu::addActionLink(uint section, const string &title, function_t action, const string &description, const string &icon) {
void Menu::addActionLink(uint section, const string &title, Action action, const string &description, const string &icon) {
assert(section < sections.size());
Link *link = new Link(gmenu2x, action);

View File

@ -21,11 +21,11 @@
#ifndef MENU_H
#define MENU_H
#include "delegate.h"
#include "iconbutton.h"
#include "layer.h"
#include "link.h"
#include <functional>
#include <memory>
#include <string>
#include <vector>
@ -99,6 +99,8 @@ private:
void linkDown();
public:
typedef std::function<void(void)> Action;
Menu(GMenu2X *gmenu2x, Touchscreen &ts);
virtual ~Menu();
@ -115,7 +117,7 @@ public:
void setSectionIndex(int i);
void addActionLink(uint section, const std::string &title,
function_t action, const std::string &description="",
Action action, const std::string &description="",
const std::string &icon="");
bool addLink(std::string path, std::string file, std::string section="");
bool addSection(const std::string &sectionName);

View File

@ -20,7 +20,6 @@
#include "menusettingbool.h"
#include "delegate.h"
#include "gmenu2x.h"
#include "iconbutton.h"
#include "surface.h"
@ -28,6 +27,7 @@
#include <sstream>
using std::bind;
using std::string;
using std::unique_ptr;
@ -62,7 +62,7 @@ void MenuSettingBool::initButton()
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/accept.png",
gmenu2x->tr["Switch"],
BIND(&MenuSettingBool::toggle))));
bind(&MenuSettingBool::toggle, this))));
}
void MenuSettingBool::draw(int valueX, int y, int h)

View File

@ -20,11 +20,11 @@
#include "menusettingdir.h"
#include "delegate.h"
#include "dirdialog.h"
#include "gmenu2x.h"
#include "iconbutton.h"
using std::bind;
using std::string;
using std::unique_ptr;
@ -37,12 +37,12 @@ MenuSettingDir::MenuSettingDir(
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/cancel.png",
gmenu2x->tr["Clear"],
BIND(&MenuSettingDir::clear))));
bind(&MenuSettingDir::clear, this))));
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/accept.png",
gmenu2x->tr["Select"],
BIND(&MenuSettingDir::edit))));
bind(&MenuSettingDir::edit, this))));
}
void MenuSettingDir::edit()

View File

@ -20,11 +20,11 @@
#include "menusettingfile.h"
#include "delegate.h"
#include "filedialog.h"
#include "gmenu2x.h"
#include "iconbutton.h"
using std::bind;
using std::string;
using std::unique_ptr;
@ -39,12 +39,12 @@ MenuSettingFile::MenuSettingFile(
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/cancel.png",
gmenu2x->tr["Clear"],
BIND(&MenuSettingFile::clear))));
bind(&MenuSettingFile::clear, this))));
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/accept.png",
gmenu2x->tr["Select"],
BIND(&MenuSettingFile::edit))));
bind(&MenuSettingFile::edit, this))));
}
void MenuSettingFile::edit()

View File

@ -20,7 +20,6 @@
#include "menusettingint.h"
#include "delegate.h"
#include "gmenu2x.h"
#include "iconbutton.h"
#include "surface.h"
@ -28,6 +27,7 @@
#include <sstream>
using std::bind;
using std::string;
using std::stringstream;
using std::unique_ptr;
@ -46,8 +46,8 @@ MenuSettingInt::MenuSettingInt(
setValue(this->value());
//Delegates
function_t actionInc = BIND(&MenuSettingInt::inc);
function_t actionDec = BIND(&MenuSettingInt::dec);
IconButton::Action actionInc = bind(&MenuSettingInt::inc, this);
IconButton::Action actionDec = bind(&MenuSettingInt::dec, this);
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/l.png",

View File

@ -18,13 +18,13 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "delegate.h"
#include "menusettingmultistring.h"
#include "gmenu2x.h"
#include "iconbutton.h"
#include <algorithm>
using std::bind;
using std::find;
using std::string;
using std::vector;
@ -41,11 +41,11 @@ MenuSettingMultiString::MenuSettingMultiString(
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/left.png", "",
BIND(&MenuSettingMultiString::decSel))));
bind(&MenuSettingMultiString::decSel, this))));
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/right.png",
gmenu2x->tr["Change value"],
BIND(&MenuSettingMultiString::incSel))));
bind(&MenuSettingMultiString::incSel, this))));
}
bool MenuSettingMultiString::handleButtonPress(InputManager::Button button)

View File

@ -20,11 +20,11 @@
#include "menusettingstring.h"
#include "delegate.h"
#include "gmenu2x.h"
#include "iconbutton.h"
#include "inputdialog.h"
using std::bind;
using std::string;
using std::unique_ptr;
@ -40,12 +40,12 @@ MenuSettingString::MenuSettingString(
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/cancel.png",
gmenu2x->tr["Clear"],
BIND(&MenuSettingString::clear))));
bind(&MenuSettingString::clear, this))));
buttonBox.add(unique_ptr<IconButton>(new IconButton(
gmenu2x, ts, "skin:imgs/buttons/accept.png",
gmenu2x->tr["Edit"],
BIND(&MenuSettingString::edit))));
bind(&MenuSettingString::edit, this))));
}
void MenuSettingString::edit()