mirror of
https://github.com/aseprite/aseprite.git
synced 2025-01-30 15:32:38 +00:00
+ Added support to paste/copy text from/to Windows clipboard.
+ Added support to process Ctrl+C / Ctrl+V / Ctrl+P keys in all entry fields. + Fixed a bug where file names for new sprites are lower-case always (in Windows).
This commit is contained in:
parent
f283a862d0
commit
8b8f13edf9
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2009-08-09 David A. Capello <davidcapello@gmail.com>
|
||||||
|
|
||||||
|
* src/dialogs/filesel.cpp (ase_file_selector): Fixed a bug where
|
||||||
|
new sprites where saved with lower case file names in Windows.
|
||||||
|
|
||||||
|
* src/jinete/jentry.cpp (entry_msg_proc): Process Windows
|
||||||
|
shortcuts to cut/paste (Ctrl+X, Ctrl+C, Ctrl+V).
|
||||||
|
|
||||||
|
* src/jinete/jclipboard.cpp: Added support for Windows clipboard.
|
||||||
|
|
||||||
2009-08-04 David A. Capello <davidcapello@gmail.com>
|
2009-08-04 David A. Capello <davidcapello@gmail.com>
|
||||||
|
|
||||||
* Version 0.7 released.
|
* Version 0.7 released.
|
||||||
|
9
NEWS.txt
9
NEWS.txt
@ -2,6 +2,15 @@
|
|||||||
NEWS
|
NEWS
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
|
0.7.1
|
||||||
|
-----
|
||||||
|
|
||||||
|
+ Added support to paste/copy text from/to Windows clipboard.
|
||||||
|
+ Added support to process Ctrl+C / Ctrl+V / Ctrl+P keys in all
|
||||||
|
entry fields.
|
||||||
|
+ Fixed a bug where file names for new sprites are lower-case always
|
||||||
|
(in Windows).
|
||||||
|
|
||||||
0.7
|
0.7
|
||||||
---
|
---
|
||||||
|
|
||||||
|
2
config.h
2
config.h
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
/* general information */
|
/* general information */
|
||||||
#define PACKAGE "ASE"
|
#define PACKAGE "ASE"
|
||||||
#define VERSION "0.7"
|
#define VERSION "0.7.1"
|
||||||
#define WEBSITE "http://www.aseprite.org/"
|
#define WEBSITE "http://www.aseprite.org/"
|
||||||
#define COPYRIGHT "Copyright (C) 2001-2009 David Capello"
|
#define COPYRIGHT "Copyright (C) 2001-2009 David Capello"
|
||||||
|
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
ASE = aseprite$(EXE)
|
ASE = aseprite$(EXE)
|
||||||
|
|
||||||
COMMON_SOURCES = \
|
COMMON_SOURCES = \
|
||||||
src/ase/context.cpp \
|
|
||||||
src/ase/ui_context.cpp \
|
|
||||||
src/commands/cmd_about.cpp \
|
src/commands/cmd_about.cpp \
|
||||||
src/commands/cmd_advanced_mode.cpp \
|
src/commands/cmd_advanced_mode.cpp \
|
||||||
src/commands/cmd_background_from_layer.cpp \
|
src/commands/cmd_background_from_layer.cpp \
|
||||||
@ -235,7 +233,9 @@ COMMON_OBJS = $(addprefix $(OBJ_DIR)/, \
|
|||||||
$(notdir $(basename $(COMMON_SOURCES)))))
|
$(notdir $(basename $(COMMON_SOURCES)))))
|
||||||
|
|
||||||
ASE_SOURCES = \
|
ASE_SOURCES = \
|
||||||
|
src/context.cpp \
|
||||||
src/main.cpp \
|
src/main.cpp \
|
||||||
|
src/ui_context.cpp \
|
||||||
src/undoable.cpp \
|
src/undoable.cpp \
|
||||||
$(COMMON_SOURCES)
|
$(COMMON_SOURCES)
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include <allegro.h>
|
#include <allegro.h>
|
||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "core/cfg.h"
|
#include "core/cfg.h"
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "console/console.h"
|
#include "console/console.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "console/console.h"
|
#include "console/console.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "ase/context.h"
|
#include "context.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
Context::Context()
|
Context::Context()
|
@ -31,7 +31,7 @@
|
|||||||
#include "jinete/jintern.h"
|
#include "jinete/jintern.h"
|
||||||
|
|
||||||
#include "ase_exception.h"
|
#include "ase_exception.h"
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "console/console.h"
|
#include "console/console.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
@ -243,8 +243,9 @@ again:
|
|||||||
// check if the user specified in "fn" a item of "fileview"
|
// check if the user specified in "fn" a item of "fileview"
|
||||||
const FileItemList& children = fileview_get_filelist(fileview);
|
const FileItemList& children = fileview_get_filelist(fileview);
|
||||||
|
|
||||||
|
jstring fn2 = fn;
|
||||||
#ifdef ALLEGRO_WINDOWS
|
#ifdef ALLEGRO_WINDOWS
|
||||||
fn.tolower();
|
fn2.tolower();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (FileItemList::const_iterator
|
for (FileItemList::const_iterator
|
||||||
@ -255,7 +256,7 @@ again:
|
|||||||
#ifdef ALLEGRO_WINDOWS
|
#ifdef ALLEGRO_WINDOWS
|
||||||
child_name.tolower();
|
child_name.tolower();
|
||||||
#endif
|
#endif
|
||||||
if (child_name == fn) {
|
if (child_name == fn2) {
|
||||||
enter_folder = *it;
|
enter_folder = *it;
|
||||||
buf = fileitem_get_filename(enter_folder);
|
buf = fileitem_get_filename(enter_folder);
|
||||||
break;
|
break;
|
||||||
|
@ -31,19 +31,65 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef ALLEGRO_WINDOWS
|
||||||
|
#include <allegro.h>
|
||||||
|
#include <winalleg.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "jinete/jbase.h"
|
#include "jinete/jbase.h"
|
||||||
|
|
||||||
static char *clipboard_text = NULL;
|
static char *clipboard_text = NULL;
|
||||||
|
|
||||||
const char *jclipboard_get_text()
|
static void lowlevel_set_clipboard_text(const char *text)
|
||||||
{
|
|
||||||
return clipboard_text;
|
|
||||||
}
|
|
||||||
|
|
||||||
void jclipboard_set_text(const char *text)
|
|
||||||
{
|
{
|
||||||
if (clipboard_text)
|
if (clipboard_text)
|
||||||
jfree(clipboard_text);
|
jfree(clipboard_text);
|
||||||
|
|
||||||
clipboard_text = text ? jstrdup(text) : NULL;
|
clipboard_text = text ? jstrdup(text) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* jclipboard_get_text()
|
||||||
|
{
|
||||||
|
#ifdef ALLEGRO_WINDOWS
|
||||||
|
if (IsClipboardFormatAvailable(CF_TEXT)) {
|
||||||
|
if (OpenClipboard(win_get_window())) {
|
||||||
|
HGLOBAL hglobal = GetClipboardData(CF_TEXT);
|
||||||
|
if (hglobal != NULL) {
|
||||||
|
LPSTR lpstr = static_cast<LPSTR>(GlobalLock(hglobal));
|
||||||
|
if (lpstr != NULL) {
|
||||||
|
lowlevel_set_clipboard_text(lpstr);
|
||||||
|
GlobalUnlock(hglobal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CloseClipboard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return clipboard_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
void jclipboard_set_text(const char *text)
|
||||||
|
{
|
||||||
|
lowlevel_set_clipboard_text(text);
|
||||||
|
|
||||||
|
#ifdef ALLEGRO_WINDOWS
|
||||||
|
if (IsClipboardFormatAvailable(CF_TEXT)) {
|
||||||
|
if (OpenClipboard(win_get_window())) {
|
||||||
|
EmptyClipboard();
|
||||||
|
|
||||||
|
if (clipboard_text) {
|
||||||
|
int len = ustrlen(clipboard_text);
|
||||||
|
|
||||||
|
HGLOBAL hglobal = GlobalAlloc(GMEM_MOVEABLE, sizeof(char)*(len+1));
|
||||||
|
LPSTR lpstr = static_cast<LPSTR>(GlobalLock(hglobal));
|
||||||
|
memcpy(lpstr, clipboard_text, len);
|
||||||
|
GlobalUnlock(hglobal);
|
||||||
|
|
||||||
|
SetClipboardData(CF_TEXT, hglobal);
|
||||||
|
}
|
||||||
|
CloseClipboard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -29,12 +29,12 @@
|
|||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef JINETE_CLIPBRD_H
|
#ifndef ASE_JINETE_JCLIPBOARD_H
|
||||||
#define JINETE_CLIPBRD_H
|
#define ASE_JINETE_JCLIPBOARD_H
|
||||||
|
|
||||||
#include "jinete/jbase.h"
|
#include "jinete/jbase.h"
|
||||||
|
|
||||||
const char *jclipboard_get_text();
|
const char* jclipboard_get_text();
|
||||||
void jclipboard_set_text(const char *text);
|
void jclipboard_set_text(const char* text);
|
||||||
|
|
||||||
#endif /* JINETE_CLIPBRD_H */
|
#endif // ASE_JINETE_JCLIPBOARD_H
|
||||||
|
@ -42,11 +42,30 @@
|
|||||||
#include "jinete/jmessage.h"
|
#include "jinete/jmessage.h"
|
||||||
#include "jinete/jrect.h"
|
#include "jinete/jrect.h"
|
||||||
#include "jinete/jsystem.h"
|
#include "jinete/jsystem.h"
|
||||||
|
#include "jinete/jstring.h"
|
||||||
#include "jinete/jtheme.h"
|
#include "jinete/jtheme.h"
|
||||||
#include "jinete/jwidget.h"
|
#include "jinete/jwidget.h"
|
||||||
|
|
||||||
#define CHARACTER_LENGTH(f, c) ((f)->vtable->char_length((f), (c)))
|
#define CHARACTER_LENGTH(f, c) ((f)->vtable->char_length((f), (c)))
|
||||||
|
|
||||||
|
namespace EntryCmd {
|
||||||
|
enum Type {
|
||||||
|
NoOp,
|
||||||
|
InsertChar,
|
||||||
|
ForwardChar,
|
||||||
|
ForwardWord,
|
||||||
|
BackwardChar,
|
||||||
|
BackwardWord,
|
||||||
|
BeginningOfLine,
|
||||||
|
EndOfLine,
|
||||||
|
DeleteForward,
|
||||||
|
DeleteBackward,
|
||||||
|
Cut,
|
||||||
|
Copy,
|
||||||
|
Paste,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct Entry
|
typedef struct Entry
|
||||||
{
|
{
|
||||||
int maxsize;
|
int maxsize;
|
||||||
@ -66,6 +85,7 @@ static void entry_request_size(JWidget widget, int *w, int *h);
|
|||||||
|
|
||||||
static int entry_get_cursor_from_mouse(JWidget widget, JMessage msg);
|
static int entry_get_cursor_from_mouse(JWidget widget, JMessage msg);
|
||||||
|
|
||||||
|
static void entry_execute_cmd(JWidget widget, EntryCmd::Type cmd, int ascii, bool shift_pressed);
|
||||||
static void entry_forward_word(JWidget widget);
|
static void entry_forward_word(JWidget widget);
|
||||||
static void entry_backward_word(JWidget widget);
|
static void entry_backward_word(JWidget widget);
|
||||||
|
|
||||||
@ -273,175 +293,75 @@ static bool entry_msg_proc(JWidget widget, JMessage msg)
|
|||||||
|
|
||||||
case JM_KEYPRESSED:
|
case JM_KEYPRESSED:
|
||||||
if (jwidget_has_focus(widget) && !jentry_is_readonly(widget)) {
|
if (jwidget_has_focus(widget) && !jentry_is_readonly(widget)) {
|
||||||
std::string text = widget->text();
|
// Command to execute
|
||||||
int c, selbeg, selend;
|
EntryCmd::Type cmd = EntryCmd::NoOp;
|
||||||
|
|
||||||
jtheme_entry_info(widget, NULL, NULL, NULL, &selbeg, &selend);
|
|
||||||
|
|
||||||
switch (msg->key.scancode) {
|
switch (msg->key.scancode) {
|
||||||
|
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
/* selection */
|
|
||||||
if (msg->any.shifts & KB_SHIFT_FLAG) {
|
|
||||||
if (entry->select < 0)
|
|
||||||
entry->select = entry->cursor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
entry->select = -1;
|
|
||||||
|
|
||||||
/* backward word */
|
|
||||||
if (msg->any.shifts & KB_CTRL_FLAG)
|
if (msg->any.shifts & KB_CTRL_FLAG)
|
||||||
entry_backward_word(widget);
|
cmd = EntryCmd::BackwardWord;
|
||||||
/* backward char */
|
else
|
||||||
else if (entry->cursor > 0)
|
cmd = EntryCmd::BackwardChar;
|
||||||
entry->cursor--;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
/* selection */
|
|
||||||
if (msg->any.shifts & KB_SHIFT_FLAG) {
|
|
||||||
if (entry->select < 0)
|
|
||||||
entry->select = entry->cursor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
entry->select = -1;
|
|
||||||
|
|
||||||
/* forward word */
|
|
||||||
if (msg->any.shifts & KB_CTRL_FLAG)
|
if (msg->any.shifts & KB_CTRL_FLAG)
|
||||||
entry_forward_word(widget);
|
cmd = EntryCmd::ForwardWord;
|
||||||
/* forward char */
|
else
|
||||||
else if (entry->cursor < text.size())
|
cmd = EntryCmd::ForwardChar;
|
||||||
entry->cursor++;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_HOME:
|
case KEY_HOME:
|
||||||
/* selection */
|
cmd = EntryCmd::BeginningOfLine;
|
||||||
if (msg->any.shifts & KB_SHIFT_FLAG) {
|
|
||||||
if (entry->select < 0)
|
|
||||||
entry->select = entry->cursor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
entry->select = -1;
|
|
||||||
|
|
||||||
entry->cursor = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_END:
|
case KEY_END:
|
||||||
/* selection */
|
cmd = EntryCmd::EndOfLine;
|
||||||
if (msg->any.shifts & KB_SHIFT_FLAG) {
|
|
||||||
if (entry->select < 0)
|
|
||||||
entry->select = entry->cursor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
entry->select = -1;
|
|
||||||
|
|
||||||
entry->cursor = text.size();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_DEL:
|
case KEY_DEL:
|
||||||
// delete the entire selection
|
if (msg->any.shifts & KB_SHIFT_FLAG)
|
||||||
if (selbeg >= 0) {
|
cmd = EntryCmd::Cut;
|
||||||
// *cut* text!
|
else
|
||||||
if (msg->any.shifts & KB_SHIFT_FLAG) {
|
cmd = EntryCmd::DeleteForward;
|
||||||
char buf[1024];
|
|
||||||
ustrcpy(buf, empty_string);
|
|
||||||
for (c=selbeg; c<=selend; c++)
|
|
||||||
uinsert(buf, ustrlen(buf), text[c]);
|
|
||||||
jclipboard_set_text(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove text
|
|
||||||
text.erase(selbeg, selend-selbeg+1);
|
|
||||||
|
|
||||||
entry->cursor = selbeg;
|
|
||||||
}
|
|
||||||
/* delete the next character */
|
|
||||||
else {
|
|
||||||
if (entry->cursor < text.size())
|
|
||||||
text.erase(entry->cursor, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
entry->select = -1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_INSERT:
|
case KEY_INSERT:
|
||||||
/* *paste* text */
|
if (msg->any.shifts & KB_SHIFT_FLAG)
|
||||||
if (msg->any.shifts & KB_SHIFT_FLAG) {
|
cmd = EntryCmd::Paste;
|
||||||
const char *clipboard;
|
else if (msg->any.shifts & KB_CTRL_FLAG)
|
||||||
|
cmd = EntryCmd::Copy;
|
||||||
if ((clipboard = jclipboard_get_text())) {
|
|
||||||
/* delete the entire selection */
|
|
||||||
if (selbeg >= 0) {
|
|
||||||
text.erase(selbeg, selend-selbeg+1);
|
|
||||||
|
|
||||||
entry->cursor = selbeg;
|
|
||||||
entry->select = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* paste text */
|
|
||||||
for (c=0; c<ustrlen(clipboard); c++)
|
|
||||||
if (text.size() < entry->maxsize)
|
|
||||||
text.insert(entry->cursor+c, 1, ugetat(clipboard, c));
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
jentry_set_cursor_pos(widget, entry->cursor+c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* *copy* text */
|
|
||||||
else if ((selbeg >= 0) && (msg->any.shifts & KB_CTRL_FLAG)) {
|
|
||||||
char buf[1024];
|
|
||||||
ustrcpy(buf, empty_string);
|
|
||||||
for (c=selbeg; c<=selend; c++)
|
|
||||||
uinsert(buf, ustrlen(buf), text[c]);
|
|
||||||
jclipboard_set_text(buf);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_BACKSPACE:
|
case KEY_BACKSPACE:
|
||||||
/* delete the entire selection */
|
cmd = EntryCmd::DeleteBackward;
|
||||||
if (selbeg >= 0) {
|
|
||||||
text.erase(selbeg, selend-selbeg+1);
|
|
||||||
|
|
||||||
entry->cursor = selbeg;
|
|
||||||
}
|
|
||||||
/* delete the previous character */
|
|
||||||
else {
|
|
||||||
if (entry->cursor > 0)
|
|
||||||
text.erase(--entry->cursor, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
entry->select = -1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (msg->key.ascii >= 32) {
|
if (msg->key.ascii >= 32) {
|
||||||
/* delete the entire selection */
|
cmd = EntryCmd::InsertChar;
|
||||||
if (selbeg >= 0) {
|
|
||||||
text.erase(selbeg, selend-selbeg+1);
|
|
||||||
|
|
||||||
entry->cursor = selbeg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* put the character */
|
|
||||||
if (text.size() < entry->maxsize)
|
|
||||||
text.insert(entry->cursor++, 1, msg->key.ascii);
|
|
||||||
|
|
||||||
entry->select = -1;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
return false;
|
// map common Windows shortcuts for Cut/Copy/Paste
|
||||||
|
if ((msg->any.shifts & (KB_CTRL_FLAG | KB_SHIFT_FLAG | KB_ALT_FLAG)) == KB_CTRL_FLAG) {
|
||||||
|
switch (msg->key.scancode) {
|
||||||
|
case KEY_X: cmd = EntryCmd::Cut; break;
|
||||||
|
case KEY_C: cmd = EntryCmd::Copy; break;
|
||||||
|
case KEY_V: cmd = EntryCmd::Paste; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text != widget->text()) {
|
if (cmd == EntryCmd::NoOp)
|
||||||
widget->text(text.c_str());
|
return false;
|
||||||
jwidget_emit_signal(widget, JI_SIGNAL_ENTRY_CHANGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
jentry_set_cursor_pos(widget, entry->cursor);
|
entry_execute_cmd(widget, cmd,
|
||||||
widget->dirty();
|
msg->key.ascii,
|
||||||
return TRUE;
|
(msg->any.shifts & KB_SHIFT_FLAG) ? true: false);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -587,6 +507,177 @@ static int entry_get_cursor_from_mouse(JWidget widget, JMessage msg)
|
|||||||
return cursor;
|
return cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void entry_execute_cmd(JWidget widget, EntryCmd::Type cmd,
|
||||||
|
int ascii, bool shift_pressed)
|
||||||
|
{
|
||||||
|
Entry* entry = reinterpret_cast<Entry*>(jwidget_get_data(widget, JI_ENTRY));
|
||||||
|
std::string text = widget->text();
|
||||||
|
int c, selbeg, selend;
|
||||||
|
|
||||||
|
jtheme_entry_info(widget, NULL, NULL, NULL, &selbeg, &selend);
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
|
||||||
|
case EntryCmd::InsertChar:
|
||||||
|
// delete the entire selection
|
||||||
|
if (selbeg >= 0) {
|
||||||
|
text.erase(selbeg, selend-selbeg+1);
|
||||||
|
|
||||||
|
entry->cursor = selbeg;
|
||||||
|
}
|
||||||
|
|
||||||
|
// put the character
|
||||||
|
if (text.size() < entry->maxsize)
|
||||||
|
text.insert(entry->cursor++, 1, ascii);
|
||||||
|
|
||||||
|
entry->select = -1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntryCmd::BackwardChar:
|
||||||
|
case EntryCmd::BackwardWord:
|
||||||
|
// selection
|
||||||
|
if (shift_pressed) {
|
||||||
|
if (entry->select < 0)
|
||||||
|
entry->select = entry->cursor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
entry->select = -1;
|
||||||
|
|
||||||
|
// backward word
|
||||||
|
if (cmd == EntryCmd::BackwardWord) {
|
||||||
|
entry_backward_word(widget);
|
||||||
|
}
|
||||||
|
// backward char
|
||||||
|
else if (entry->cursor > 0) {
|
||||||
|
entry->cursor--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntryCmd::ForwardChar:
|
||||||
|
case EntryCmd::ForwardWord:
|
||||||
|
// selection
|
||||||
|
if (shift_pressed) {
|
||||||
|
if (entry->select < 0)
|
||||||
|
entry->select = entry->cursor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
entry->select = -1;
|
||||||
|
|
||||||
|
// forward word
|
||||||
|
if (cmd == EntryCmd::ForwardWord) {
|
||||||
|
entry_forward_word(widget);
|
||||||
|
}
|
||||||
|
// forward char
|
||||||
|
else if (entry->cursor < text.size()) {
|
||||||
|
entry->cursor++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntryCmd::BeginningOfLine:
|
||||||
|
// selection
|
||||||
|
if (shift_pressed) {
|
||||||
|
if (entry->select < 0)
|
||||||
|
entry->select = entry->cursor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
entry->select = -1;
|
||||||
|
|
||||||
|
entry->cursor = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntryCmd::EndOfLine:
|
||||||
|
// selection
|
||||||
|
if (shift_pressed) {
|
||||||
|
if (entry->select < 0)
|
||||||
|
entry->select = entry->cursor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
entry->select = -1;
|
||||||
|
|
||||||
|
entry->cursor = text.size();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntryCmd::DeleteForward:
|
||||||
|
case EntryCmd::Cut:
|
||||||
|
// delete the entire selection
|
||||||
|
if (selbeg >= 0) {
|
||||||
|
// *cut* text!
|
||||||
|
if (cmd == EntryCmd::Cut) {
|
||||||
|
jstring buf = text.substr(selbeg, selend - selbeg + 1);
|
||||||
|
jclipboard_set_text(buf.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove text
|
||||||
|
text.erase(selbeg, selend-selbeg+1);
|
||||||
|
|
||||||
|
entry->cursor = selbeg;
|
||||||
|
}
|
||||||
|
// delete the next character
|
||||||
|
else {
|
||||||
|
if (entry->cursor < text.size())
|
||||||
|
text.erase(entry->cursor, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
entry->select = -1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntryCmd::Paste: {
|
||||||
|
const char *clipboard;
|
||||||
|
|
||||||
|
if ((clipboard = jclipboard_get_text())) {
|
||||||
|
// delete the entire selection
|
||||||
|
if (selbeg >= 0) {
|
||||||
|
text.erase(selbeg, selend-selbeg+1);
|
||||||
|
|
||||||
|
entry->cursor = selbeg;
|
||||||
|
entry->select = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// paste text
|
||||||
|
for (c=0; c<ustrlen(clipboard); c++)
|
||||||
|
if (text.size() < entry->maxsize)
|
||||||
|
text.insert(entry->cursor+c, 1, ugetat(clipboard, c));
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
jentry_set_cursor_pos(widget, entry->cursor+c);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case EntryCmd::Copy:
|
||||||
|
if (selbeg >= 0) {
|
||||||
|
jstring buf = text.substr(selbeg, selend - selbeg + 1);
|
||||||
|
jclipboard_set_text(buf.c_str());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntryCmd::DeleteBackward:
|
||||||
|
// delete the entire selection
|
||||||
|
if (selbeg >= 0) {
|
||||||
|
text.erase(selbeg, selend-selbeg+1);
|
||||||
|
|
||||||
|
entry->cursor = selbeg;
|
||||||
|
}
|
||||||
|
// delete the previous character
|
||||||
|
else {
|
||||||
|
if (entry->cursor > 0)
|
||||||
|
text.erase(--entry->cursor, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
entry->select = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text != widget->text()) {
|
||||||
|
widget->text(text.c_str());
|
||||||
|
jwidget_emit_signal(widget, JI_SIGNAL_ENTRY_CHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
jentry_set_cursor_pos(widget, entry->cursor);
|
||||||
|
widget->dirty();
|
||||||
|
}
|
||||||
|
|
||||||
#define IS_WORD_CHAR(ch) \
|
#define IS_WORD_CHAR(ch) \
|
||||||
(!((!ch) || (uisspace(ch)) || \
|
(!((!ch) || (uisspace(ch)) || \
|
||||||
((ch) == '/') || ((ch) == OTHER_PATH_SEPARATOR)))
|
((ch) == '/') || ((ch) == OTHER_PATH_SEPARATOR)))
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "jinete/jbase.h"
|
#include "jinete/jbase.h"
|
||||||
|
#include "jinete/jtheme.h"
|
||||||
|
#include "jinete/jclipboard.h"
|
||||||
|
|
||||||
#ifdef MEMLEAK
|
#ifdef MEMLEAK
|
||||||
void _jmemleak_init();
|
void _jmemleak_init();
|
||||||
@ -68,6 +70,12 @@ Jinete::Jinete()
|
|||||||
|
|
||||||
Jinete::~Jinete()
|
Jinete::~Jinete()
|
||||||
{
|
{
|
||||||
|
// finish theme
|
||||||
|
ji_set_theme(NULL);
|
||||||
|
|
||||||
|
// destroy clipboard
|
||||||
|
jclipboard_set_text(NULL);
|
||||||
|
|
||||||
// shutdown system
|
// shutdown system
|
||||||
_ji_theme_exit();
|
_ji_theme_exit();
|
||||||
_ji_widgets_exit();
|
_ji_widgets_exit();
|
||||||
|
@ -221,12 +221,6 @@ void jmanager_free(JWidget widget)
|
|||||||
/* no more cursor */
|
/* no more cursor */
|
||||||
jmouse_set_cursor(JI_CURSOR_NULL);
|
jmouse_set_cursor(JI_CURSOR_NULL);
|
||||||
|
|
||||||
/* finish theme */
|
|
||||||
ji_set_theme(NULL);
|
|
||||||
|
|
||||||
/* destroy clipboard */
|
|
||||||
jclipboard_set_text(NULL);
|
|
||||||
|
|
||||||
/* destroy this widget */
|
/* destroy this widget */
|
||||||
jwidget_free(widget);
|
jwidget_free(widget);
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@
|
|||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef JINETE_STRING_H
|
#ifndef ASE_JINETE_STRING_H
|
||||||
#define JINETE_STRING_H
|
#define ASE_JINETE_STRING_H
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -126,4 +126,4 @@ inline jstring operator+(const char* _s1, const jstring& _s2)
|
|||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* JINETE_STRING_H */
|
#endif // ASE_JINETE_STRING_H
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "sprite_wrappers.h"
|
#include "sprite_wrappers.h"
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "modules/editors.h"
|
#include "modules/editors.h"
|
||||||
#include "modules/gui.h"
|
#include "modules/gui.h"
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
#include "jinete/jintern.h"
|
#include "jinete/jintern.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "console/console.h"
|
#include "console/console.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include "jinete/jlist.h"
|
#include "jinete/jlist.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "effect/effect.h"
|
#include "effect/effect.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
#include "raster/cel.h"
|
#include "raster/cel.h"
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SPRITE_WRAPPERS_H
|
#ifndef ASE_SPRITE_WRAPPERS_H
|
||||||
#define SPRITE_WRAPPERS_H
|
#define ASE_SPRITE_WRAPPERS_H
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include "ase_exception.h"
|
#include "ase_exception.h"
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
class Context;
|
class Context;
|
||||||
@ -245,4 +245,4 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SPRITE_WRAPPERS_H
|
#endif // ASE_SPRITE_WRAPPERS_H
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <allegro/file.h>
|
#include <allegro/file.h>
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "modules/editors.h"
|
#include "modules/editors.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
@ -19,7 +19,7 @@
|
|||||||
#ifndef ASE_UI_CONTEXT_H
|
#ifndef ASE_UI_CONTEXT_H
|
||||||
#define ASE_UI_CONTEXT_H
|
#define ASE_UI_CONTEXT_H
|
||||||
|
|
||||||
#include "ase/context.h"
|
#include "context.h"
|
||||||
|
|
||||||
class UIContext : public Context
|
class UIContext : public Context
|
||||||
{
|
{
|
@ -16,8 +16,8 @@
|
|||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef UNDOABLE_H
|
#ifndef ASE_UNDOABLE_H
|
||||||
#define UNDOABLE_H
|
#define ASE_UNDOABLE_H
|
||||||
|
|
||||||
class Cel;
|
class Cel;
|
||||||
class Layer;
|
class Layer;
|
||||||
@ -103,4 +103,4 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // UNDOABLE_H
|
#endif // ASE_UNDOABLE_H
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#include "jinete/jinete.h"
|
#include "jinete/jinete.h"
|
||||||
|
|
||||||
#include "ase/ui_context.h"
|
#include "ui_context.h"
|
||||||
#include "commands/commands.h"
|
#include "commands/commands.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "core/cfg.h"
|
#include "core/cfg.h"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user