2013-03-15 13:11:33 +00:00
|
|
|
namespace phoenix {
|
|
|
|
|
2013-05-02 11:25:45 +00:00
|
|
|
static void TextEdit_change(TextEdit* self) {
|
2011-09-05 03:48:23 +00:00
|
|
|
self->state.text = self->text();
|
2011-02-24 09:27:21 +00:00
|
|
|
if(self->p.locked == false && self->onChange) self->onChange();
|
|
|
|
}
|
|
|
|
|
Update to higan v091r14 and ananke v00r03 releases.
byuu says:
higan changelog:
- generates title displayed in emulator window by asking the core
- core builds title solely from "information/title" ... if it's not
there, you don't get a title at all
- sub-system load menu is gone ... since there are multiple revisions of
the SGB, this never really worked well anyway
- to load an SGB, BS-X or ST cartridge, load the base cartridge first
- "File->Load Game" moved to "Load->Import Game" ... may cause a bit of
confusion to new users, but I don't like having a single-item menu,
we'll just have to explain it to new users
- browser window redone to look like ananke
- home button here goes to ~/Emulation rather than just ~ like ananke,
since this is the home of game folders
- game folder icon is now the executable icon for the Tango theme
(orange diamond), meant to represent a complete game rather than
a game file or archive
ananke changelog:
- outputs GBC games to "Game Boy Color/" instead of "Game Boy/"
- adds the file basename to "information/title"
Known issues:
- using ananke to load a GB game trips the Super Famicom SGB mode and
fails (need to make the full-path auto-detection ignore non-bootable
systems)
- need to dump and test some BS-X media before releasing
- ananke lacks BS-X Satellaview cartridge support
- v092 isn't going to let you retarget the ananke/higan game folder path
of ~/Emulation, you will have to wait for a future version if that
bothers you so greatly
[Later, after the v092 release, byuu posted this additional changelog:
- kill laevateinn
- add title()
- add bootable, remove load
- combine file, library
- combine [][][] paths
- fix SFC subtype handling XML->BML
- update file browser to use buttons
- update file browser keyboard handling
- update system XML->BML
- fix sufami turbo hashing
- remove Cartridge::manifest
]
2012-12-25 05:31:55 +00:00
|
|
|
bool pTextEdit::focused() {
|
|
|
|
return GTK_WIDGET_HAS_FOCUS(subWidget);
|
|
|
|
}
|
|
|
|
|
2011-02-24 09:27:21 +00:00
|
|
|
void pTextEdit::setCursorPosition(unsigned position) {
|
2013-05-02 11:25:45 +00:00
|
|
|
GtkTextMark* mark = gtk_text_buffer_get_mark(textBuffer, "insert");
|
2011-02-24 09:27:21 +00:00
|
|
|
GtkTextIter iter;
|
|
|
|
gtk_text_buffer_get_end_iter(textBuffer, &iter);
|
|
|
|
gtk_text_iter_set_offset(&iter, min(position, gtk_text_iter_get_offset(&iter)));
|
|
|
|
gtk_text_buffer_place_cursor(textBuffer, &iter);
|
|
|
|
gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(subWidget), mark);
|
|
|
|
}
|
|
|
|
|
|
|
|
void pTextEdit::setEditable(bool editable) {
|
|
|
|
gtk_text_view_set_editable(GTK_TEXT_VIEW(subWidget), editable);
|
|
|
|
}
|
|
|
|
|
2013-05-02 11:25:45 +00:00
|
|
|
void pTextEdit::setText(const string& text) {
|
2011-02-24 09:27:21 +00:00
|
|
|
locked = true;
|
|
|
|
gtk_text_buffer_set_text(textBuffer, text, -1);
|
|
|
|
locked = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void pTextEdit::setWordWrap(bool wordWrap) {
|
|
|
|
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(subWidget), wordWrap ? GTK_WRAP_WORD_CHAR : GTK_WRAP_NONE);
|
Update to v085r08 release.
byuu says:
Changelog:
- follow the Laevateinn topic to get most of it
- also added NMI, IRQ step buttons to CPU debugger
- also added trace masking + trace mask reset
- also added memory export
- cartridge loading is entirely folder-based now
FitzRoy, I'll go ahead and make a second compromise with you for v086:
I'll match the following:
/path/to/SNES.sfc/*.sfc
/path/to/NES.fc/*.prg, *.chr (split format)
/path/to/NES.fc/*.fc (merged format)
/path/to/GB.gb/*.gb
/path/to/GBC.gbc/*.gbc
Condition will be that there can only be one of each file. If there's
more than one, it'll abort. That lets me name my ROMs as
"Game.fc/Game.fc", and you can name yours as "Game.fc/cartridge.prg,
cartridge.chr". Or whatever you want.
We'll just go with that, see what fares out as the most popular, and
then restrict it back to that method.
The folder must have the .fc, etc extension though. That will be how we
avoid false-positive folder matches.
[Editor's note - the Laevateinn topic mentions these changes for
v085r08:
Added SMP/PPU breakpoints, SMP debugger, SMP stepping / tracing,
memory editing on APU-bus / VRAM / OAM / CGRAM, save state menu,
WRAM mirroring on breakpoints, protected MMIO memory regions
(otherwise, viewing $002100 could crash your game.)
Major missing components:
- trace mask
- trace mask clear / usage map clear
- window geometry caching / sizing improvements
- VRAM viewer
- properties viewer
- working memory export button
The rest will most likely appear after v086 is released.
]
2012-02-12 05:35:40 +00:00
|
|
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkWidget),
|
|
|
|
wordWrap ? GTK_POLICY_NEVER : GTK_POLICY_ALWAYS,
|
|
|
|
GTK_POLICY_ALWAYS);
|
2011-02-24 09:27:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
string pTextEdit::text() {
|
|
|
|
GtkTextIter start, end;
|
|
|
|
gtk_text_buffer_get_start_iter(textBuffer, &start);
|
|
|
|
gtk_text_buffer_get_end_iter(textBuffer, &end);
|
2013-05-02 11:25:45 +00:00
|
|
|
char* temp = gtk_text_buffer_get_text(textBuffer, &start, &end, true);
|
2011-02-24 09:27:21 +00:00
|
|
|
string text = temp;
|
|
|
|
g_free(temp);
|
|
|
|
return text;
|
|
|
|
}
|
|
|
|
|
|
|
|
void pTextEdit::constructor() {
|
|
|
|
gtkWidget = gtk_scrolled_window_new(0, 0);
|
|
|
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkWidget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
|
|
|
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(gtkWidget), GTK_SHADOW_ETCHED_IN);
|
|
|
|
subWidget = gtk_text_view_new();
|
|
|
|
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(subWidget), GTK_WRAP_WORD_CHAR);
|
|
|
|
gtk_container_add(GTK_CONTAINER(gtkWidget), subWidget);
|
|
|
|
textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(subWidget));
|
|
|
|
g_signal_connect_swapped(G_OBJECT(textBuffer), "changed", G_CALLBACK(TextEdit_change), (gpointer)&textEdit);
|
|
|
|
gtk_widget_show(subWidget);
|
2011-09-05 03:48:23 +00:00
|
|
|
|
|
|
|
setEditable(textEdit.state.editable);
|
|
|
|
setText(textEdit.state.text);
|
|
|
|
setWordWrap(textEdit.state.wordWrap);
|
|
|
|
}
|
|
|
|
|
|
|
|
void pTextEdit::destructor() {
|
|
|
|
gtk_widget_destroy(subWidget);
|
|
|
|
gtk_widget_destroy(gtkWidget);
|
|
|
|
}
|
|
|
|
|
|
|
|
void pTextEdit::orphan() {
|
|
|
|
destructor();
|
|
|
|
constructor();
|
2011-02-24 09:27:21 +00:00
|
|
|
}
|
2013-03-15 13:11:33 +00:00
|
|
|
|
|
|
|
}
|