scummvm/gui/console.h

159 lines
3.6 KiB
C
Raw Normal View History

/* ScummVM - Scumm Interpreter
2006-01-18 17:39:49 +00:00
* Copyright (C) 2002-2006 The ScummVM project
*
* 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.
*
* $URL$
* $Id$
*/
#ifndef CONSOLE_DIALOG_H
#define CONSOLE_DIALOG_H
#include "gui/dialog.h"
#include "gui/newgui.h"
2002-12-14 15:45:45 +00:00
#include <stdarg.h>
2003-11-10 23:40:48 +00:00
namespace GUI {
enum {
kBufferSize = 32768,
kLineWidth = 128,
kLineBufferSize = 256,
kHistorySize = 20
};
class ScrollBarWidget;
class ConsoleDialog : public Dialog {
public:
typedef bool (*InputCallbackProc)(ConsoleDialog *console, const char *input, void *refCon);
typedef bool (*CompletionCallbackProc)(ConsoleDialog* console, const char *input, char*& completion, void *refCon);
protected:
2005-10-08 19:40:47 +00:00
const Graphics::Font *_font;
char _buffer[kBufferSize];
int _linesInBuffer;
int _pageWidth;
int _linesPerPage;
int _currentPos;
int _scrollLine;
int _firstLineInBuffer;
int _promptStartPos;
int _promptEndPos;
bool _caretVisible;
uint32 _caretTime;
2004-12-12 21:23:21 +00:00
enum SlideMode {
kNoSlideMode,
kUpSlideMode,
kDownSlideMode
};
2004-12-12 21:23:21 +00:00
SlideMode _slideMode;
uint32 _slideTime;
ScrollBarWidget *_scrollBar;
// The _callbackProc is called whenver a data line is entered
//
InputCallbackProc _callbackProc;
void *_callbackRefCon;
// _completionCallbackProc is called when tab is pressed
CompletionCallbackProc _completionCallbackProc;
void *_completionCallbackRefCon;
char _history[kHistorySize][kLineBufferSize];
int _historySize;
int _historyIndex;
int _historyLine;
2003-11-08 23:22:16 +00:00
float _widthPercent, _heightPercent;
2003-11-08 23:22:16 +00:00
int _leftPadding;
int _rightPadding;
int _topPadding;
int _bottomPadding;
void slideUpAndClose();
public:
ConsoleDialog(float widthPercent, float heightPercent);
void open();
void close();
void drawDialog();
void handleTickle();
void handleScreenChanged();
void handleMouseWheel(int x, int y, int direction);
void handleKeyDown(uint16 ascii, int keycode, int modifiers);
void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
2002-12-14 15:45:45 +00:00
int printf(const char *format, ...);
int vprintf(const char *format, va_list argptr);
#undef putchar
void putchar(int c);
2003-10-26 19:16:59 +00:00
void setInputCallback(InputCallbackProc proc, void *refCon) {
_callbackProc = proc;
_callbackRefCon = refCon;
}
void setCompletionCallback(CompletionCallbackProc proc, void *refCon) {
_completionCallbackProc = proc;
_completionCallbackRefCon = refCon;
}
protected:
inline char &buffer(int idx) {
return _buffer[idx % kBufferSize];
}
void init();
int pos2line(int pos) { return (pos - (_scrollLine - _linesPerPage + 1) * kLineWidth) / kLineWidth; }
void drawLine(int line, bool restoreBg = true);
void drawCaret(bool erase);
2002-12-14 21:57:30 +00:00
void putcharIntern(int c);
void insertIntoPrompt(const char *str);
2002-12-14 15:45:45 +00:00
void print(const char *str);
void updateScrollBuffer();
void scrollToCurrent();
// Line editing
void specialKeys(int keycode);
2003-11-28 22:08:52 +00:00
void nextLine();
void killChar();
void killLine();
void killLastWord();
// History
void addToHistory(const char *str);
void historyScroll(int direction);
};
2003-11-10 23:40:48 +00:00
} // End of namespace GUI
#endif