diff options
Diffstat (limited to 'main/pinentry-tqt/fltk/pinwindow.h')
| -rw-r--r-- | main/pinentry-tqt/fltk/pinwindow.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/main/pinentry-tqt/fltk/pinwindow.h b/main/pinentry-tqt/fltk/pinwindow.h new file mode 100644 index 00000000..e1548dae --- /dev/null +++ b/main/pinentry-tqt/fltk/pinwindow.h @@ -0,0 +1,109 @@ +/* + pinwindow.h - PinWindow is a simple fltk dialog for entring password + with timeout. if needed description (long text), error message, qualitybar + and etc should used PassWindow. + + Copyright (C) 2016 Anatoly madRat L. Berenblit + + Written by Anatoly madRat L. Berenblit <madrat-@users.noreply.github.com>. + + 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 + 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. + SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef __PINWINDOW_H__ +#define __PINWINDOW_H__ + +#include "config.h" + +class Fl_Window; +class Fl_Box; +class Fl_Input; +class Fl_Button; +class Fl_Widget; + +#include <assert.h> +#include <string> + +class PinWindow +{ +protected: + static const char *TITLE; + static const char *BUTTON_OK; + static const char *BUTTON_CANCEL; + static const char *PROMPT; + +protected: + PinWindow(const PinWindow&); + PinWindow& operator=(const PinWindow&); + + Fl_Window *window_; + Fl_Box *icon_; + + Fl_Box *message_; + Fl_Input *input_; + + Fl_Button *ok_, *cancel_; + + std::string cancel_name_; + char *passwd_; // SECURE_MEMORY + unsigned int timeout_; // click cancel if timeout + +public: + virtual ~PinWindow(); + + static PinWindow* create(); + + inline const char* passwd() const { return passwd_; } + + virtual void timeout(unsigned int time); // 0 - infinity, seconds + virtual void title(const char *title); + virtual void ok(const char* ok); + virtual void cancel(const char* cancel); + virtual void prompt(const char *message); + + virtual void showModal(); + virtual void showModal(const int argc, char* argv[]); + +protected: + PinWindow(); + + void wipe(); // clear UI memory + void release(); // clear secure memory + void update_cancel_label(); + + virtual int init(const int cx, const int cy); + + //callbacks + static void cancel_cb(Fl_Widget *button, void *val); + static void ok_cb(Fl_Widget *button, void *val); + static void timeout_cb(void*); + + // ISSUE: Fl_Window component in tinycore works only as Fl_Window::label(...); not Fl_Widget + template <class TWidget> void set_label(TWidget* widget, const char *label, const char *def) + { + assert(NULL != widget); // widget must be created + + if (NULL != widget) + { + if (NULL != label && 0 != *label) + widget->copy_label(label); + else + widget->label(def); + } + }; +}; + +#endif //#ifndef __PINWINDOW_H__ |
