mirror of
https://github.com/cmosher01/Epple-II.git
synced 2025-01-17 15:30:13 +00:00
work on shutdown process; refactor
This commit is contained in:
parent
2f60950f0c
commit
bd4ded69d8
@ -1,77 +1,133 @@
|
|||||||
|
|
||||||
# Contributor Covenant Code of Conduct
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
|
|
||||||
In the interest of fostering an open and welcoming environment, we as
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
contributors and maintainers pledge to making participation in our project and
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
our community a harassment-free experience for everyone, regardless of age, body
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
level of experience, education, socio-economic status, nationality, personal
|
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||||
appearance, race, religion, or sexual identity and orientation.
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
## Our Standards
|
## Our Standards
|
||||||
|
|
||||||
Examples of behavior that contributes to creating a positive environment
|
Examples of behavior that contributes to a positive environment for our
|
||||||
include:
|
community include:
|
||||||
|
|
||||||
* Using welcoming and inclusive language
|
* Demonstrating empathy and kindness toward other people
|
||||||
* Being respectful of differing viewpoints and experiences
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
* Gracefully accepting constructive criticism
|
* Giving and gracefully accepting constructive feedback
|
||||||
* Focusing on what is best for the community
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
* Showing empathy towards other community members
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the overall
|
||||||
|
community
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||||
advances
|
any kind
|
||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
* Public or private harassment
|
* Public or private harassment
|
||||||
* Publishing others' private information, such as a physical or electronic
|
* Publishing others' private information, such as a physical or email address,
|
||||||
address, without explicit permission
|
without their explicit permission
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
professional setting
|
professional setting
|
||||||
|
|
||||||
## Our Responsibilities
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
Project maintainers are responsible for clarifying the standards of acceptable
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
behavior and are expected to take appropriate and fair corrective action in
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
response to any instances of unacceptable behavior.
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
permanently any contributor for other behaviors that they deem inappropriate,
|
decisions when appropriate.
|
||||||
threatening, offensive, or harmful.
|
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
This Code of Conduct applies within all project spaces, and it also applies when
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
an individual is representing the project or its community in public spaces.
|
an individual is officially representing the community in public spaces.
|
||||||
Examples of representing a project or community include using an official
|
Examples of representing our community include using an official e-mail address,
|
||||||
project e-mail address, posting via an official social media account, or acting
|
posting via an official social media account, or acting as an appointed
|
||||||
as an appointed representative at an online or offline event. Representation of
|
representative at an online or offline event.
|
||||||
a project may be further defined and clarified by project maintainers.
|
|
||||||
|
|
||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
reported by contacting the project team at <cmosher01@gmail.com>. All
|
reported to the community leaders responsible for enforcement at
|
||||||
complaints will be reviewed and investigated and will result in a response that
|
<cmosher01@gmail.com>.
|
||||||
is deemed necessary and appropriate to the circumstances. The project team is
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
|
||||||
Further details of specific enforcement policies may be posted separately.
|
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
faith may face temporary or permanent repercussions as determined by other
|
reporter of any incident.
|
||||||
members of the project's leadership.
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of
|
||||||
|
actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or permanent
|
||||||
|
ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||||
|
community.
|
||||||
|
|
||||||
## Attribution
|
## Attribution
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
version 2.1, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||||
|
[https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
[homepage]: https://www.contributor-covenant.org
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||||
For answers to common questions about this code of conduct, see
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
https://www.contributor-covenant.org/faq
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
||||||
|
@ -64,7 +64,10 @@ wxIMPLEMENT_APP_NO_MAIN(E2wxApp);
|
|||||||
#define PROJECT_VENDOR nu.mine.mosher
|
#define PROJECT_VENDOR nu.mine.mosher
|
||||||
#endif
|
#endif
|
||||||
#ifndef PROJECT_NAME
|
#ifndef PROJECT_NAME
|
||||||
#define PROJECT_NAME Epple-II
|
#define PROJECT_NAME epple2
|
||||||
|
#endif
|
||||||
|
#ifndef PROJECT_DISPLAY_NAME
|
||||||
|
#define PROJECT_DISPLAY_NAME PROJECT_NAME
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -90,7 +93,6 @@ void EmuTimer::Notify() {
|
|||||||
|
|
||||||
|
|
||||||
E2wxApp::E2wxApp() :
|
E2wxApp::E2wxApp() :
|
||||||
id(wxSTRINGIZE(PROJECT_VENDOR) "." wxSTRINGIZE(PROJECT_NAME)),
|
|
||||||
version(wxSTRINGIZE(PROJECT_VERSION)),
|
version(wxSTRINGIZE(PROJECT_VERSION)),
|
||||||
frame(nullptr),
|
frame(nullptr),
|
||||||
emu(nullptr),
|
emu(nullptr),
|
||||||
@ -121,7 +123,6 @@ static std::filesystem::path dirDocuments() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool E2wxApp::OnInit() {
|
bool E2wxApp::OnInit() {
|
||||||
if (!wxApp::OnInit()) {
|
if (!wxApp::OnInit()) {
|
||||||
return false;
|
return false;
|
||||||
@ -135,6 +136,12 @@ bool E2wxApp::OnInit() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SetVendorName(wxSTRINGIZE(PROJECT_VENDOR));
|
||||||
|
SetAppName(wxSTRINGIZE(PROJECT_NAME));
|
||||||
|
SetAppDisplayName(wxSTRINGIZE(PROJECT_DISPLAY_NAME));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxStandardPaths& stdpaths = wxStandardPaths::Get();
|
wxStandardPaths& stdpaths = wxStandardPaths::Get();
|
||||||
//stdpaths.SetInstallPrefix(".");
|
//stdpaths.SetInstallPrefix(".");
|
||||||
stdpaths.SetFileLayout(wxStandardPaths::FileLayout_XDG);
|
stdpaths.SetFileLayout(wxStandardPaths::FileLayout_XDG);
|
||||||
@ -156,19 +163,21 @@ bool E2wxApp::OnInit() {
|
|||||||
// TODO define components to turn on/off for trace level logging (disk, cassette, woz, keyboard, ram, lss, audio, etc.)
|
// TODO define components to turn on/off for trace level logging (disk, cassette, woz, keyboard, ram, lss, audio, etc.)
|
||||||
// TODO why are log messages getting buffered? (It ruins the timestamp.)
|
// TODO why are log messages getting buffered? (It ruins the timestamp.)
|
||||||
|
|
||||||
BOOST_LOG_TRIVIAL(info) << "Application ID: " << this->GetID();
|
BOOST_LOG_TRIVIAL(info) << "Vendor name: " << this->GetVendorName();
|
||||||
|
BOOST_LOG_TRIVIAL(info) << "Application name: " << this->GetAppName();
|
||||||
BOOST_LOG_TRIVIAL(info) << "Application version: " << this->GetVersion();
|
BOOST_LOG_TRIVIAL(info) << "Application version: " << this->GetVersion();
|
||||||
|
|
||||||
|
const wxString id = GetVendorName() + "." + GetAppName();
|
||||||
|
|
||||||
this->confdir = dirConfig() / path_from_string(GetID()+".d");
|
this->confdir = dirConfig() / path_from_string(id+".d");
|
||||||
std::filesystem::create_directories(this->confdir);
|
std::filesystem::create_directories(this->confdir);
|
||||||
BOOST_LOG_TRIVIAL(info) << "Configuration directory path: " << this->confdir;
|
BOOST_LOG_TRIVIAL(info) << "Configuration directory path: " << this->confdir;
|
||||||
|
|
||||||
this->conffile = dirConfig() / path_from_string(GetID());
|
this->conffile = dirConfig() / path_from_string(id);
|
||||||
BOOST_LOG_TRIVIAL(info) << "Configuration file path: " << this->conffile;
|
BOOST_LOG_TRIVIAL(info) << "Configuration file path: " << this->conffile;
|
||||||
wxConfigBase::Set(new wxFileConfig("", "", GetID()));
|
wxConfigBase::Set(new wxFileConfig("", "", id));
|
||||||
|
|
||||||
this->docsdir = dirDocuments() / path_from_string(GetID());
|
this->docsdir = dirDocuments() / path_from_string(id);
|
||||||
BOOST_LOG_TRIVIAL(info) << "User document directory path: " << this->docsdir;
|
BOOST_LOG_TRIVIAL(info) << "User document directory path: " << this->docsdir;
|
||||||
|
|
||||||
const std::filesystem::path exe = path_from_string(stdpaths.GetExecutablePath());
|
const std::filesystem::path exe = path_from_string(stdpaths.GetExecutablePath());
|
||||||
@ -207,33 +216,6 @@ bool E2wxApp::OnInit() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void E2wxApp::OnFnKeyPressed(const SDL_Keycode k) {
|
|
||||||
if (k == SDLK_F1) {
|
|
||||||
this->TogglePower();
|
|
||||||
} else if (k == SDLK_F2) {
|
|
||||||
this->CycleMonitor();
|
|
||||||
} else if (k == SDLK_F3) {
|
|
||||||
this->ToggleFullScreen();
|
|
||||||
} else if (k == SDLK_F4) {
|
|
||||||
//
|
|
||||||
} else if (k == SDLK_F5) {
|
|
||||||
this->EmulatorCommand();
|
|
||||||
} else if (k == SDLK_F6) {
|
|
||||||
this->Reset();
|
|
||||||
} else if (k == SDLK_F7) {
|
|
||||||
this->Paste();
|
|
||||||
} else if (k == SDLK_F8) {
|
|
||||||
this->ScreenShot();
|
|
||||||
} else if (k == SDLK_F9) {
|
|
||||||
this->CloseMainFrame();
|
|
||||||
} else if (k == SDLK_F10) {
|
|
||||||
//
|
|
||||||
} else if (k == SDLK_F11) {
|
|
||||||
//
|
|
||||||
} else if (k == SDLK_F12) {
|
|
||||||
this->ToggleBuffered();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool E2wxApp::CloseMainFrame() {
|
bool E2wxApp::CloseMainFrame() {
|
||||||
bool r = false;
|
bool r = false;
|
||||||
@ -332,10 +314,6 @@ const std::filesystem::path E2wxApp::GetResDir() const {
|
|||||||
return this->resdir;
|
return this->resdir;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxString E2wxApp::GetID() const {
|
|
||||||
return this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
const wxString E2wxApp::GetVersion() const {
|
const wxString E2wxApp::GetVersion() const {
|
||||||
return this->version;
|
return this->version;
|
||||||
}
|
}
|
||||||
@ -355,9 +333,11 @@ const std::filesystem::path E2wxApp::GetDocumentsDir() const {
|
|||||||
|
|
||||||
|
|
||||||
const std::filesystem::path E2wxApp::BuildLogFilePath() const {
|
const std::filesystem::path E2wxApp::BuildLogFilePath() const {
|
||||||
|
const wxString id = GetVendorName() + "." + GetAppName();
|
||||||
|
|
||||||
std::filesystem::path logfile =
|
std::filesystem::path logfile =
|
||||||
dirCache() /
|
dirCache() /
|
||||||
path_from_string(GetID()) /
|
path_from_string(id) /
|
||||||
std::filesystem::path("log");
|
std::filesystem::path("log");
|
||||||
|
|
||||||
std::filesystem::create_directories(logfile);
|
std::filesystem::create_directories(logfile);
|
||||||
@ -462,9 +442,9 @@ void E2wxApp::ToggleBuffered() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void E2wxApp::ToggleFullScreen() {
|
void E2wxApp::ToggleFullScreen() {
|
||||||
if (this->emu) {
|
// if (this->emu) {
|
||||||
this->emu->toggleFullScreen();
|
// this->emu->toggleFullScreen();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
static const wxString message = "Enter a command for the emulator. See https://cmosher01.github.io/Epple-II/usermanual.html";
|
static const wxString message = "Enter a command for the emulator. See https://cmosher01.github.io/Epple-II/usermanual.html";
|
||||||
|
@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
#include <SDL_keycode.h>
|
#include <SDL_keycode.h>
|
||||||
|
|
||||||
|
#include <wx/defs.h>
|
||||||
#include <wx/app.h>
|
#include <wx/app.h>
|
||||||
|
#include <wx/event.h>
|
||||||
#include <wx/cmdline.h>
|
#include <wx/cmdline.h>
|
||||||
#include <wx/timer.h>
|
#include <wx/timer.h>
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
@ -40,6 +42,20 @@ class Emulator;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum E2MenuID {
|
||||||
|
ID_MENUITEM_POWER = wxID_HIGHEST+1,
|
||||||
|
ID_MENUITEM_CYCLE_MONITOR,
|
||||||
|
ID_MENUITEM_TOGGLE_FULL_SCREEN,
|
||||||
|
ID_MENUITEM_EMULATOR_COMMAND,
|
||||||
|
ID_MENUITEM_RESET,
|
||||||
|
ID_MENUITEM_SCREEN_SHOT,
|
||||||
|
ID_MENUITEM_TOGGLE_BUFFERED,
|
||||||
|
ID_MENUITEM_START_EMULATOR,
|
||||||
|
ID_MENUITEM_STOP_EMULATOR,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EmuTimer : public wxTimer {
|
class EmuTimer : public wxTimer {
|
||||||
Emulator *emu;
|
Emulator *emu;
|
||||||
|
|
||||||
@ -55,7 +71,6 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
class E2wxApp : public wxApp {
|
class E2wxApp : public wxApp {
|
||||||
const wxString id;
|
|
||||||
const wxString version;
|
const wxString version;
|
||||||
std::filesystem::path logfile;
|
std::filesystem::path logfile;
|
||||||
std::filesystem::path resdir;
|
std::filesystem::path resdir;
|
||||||
@ -75,7 +90,6 @@ public:
|
|||||||
E2wxApp();
|
E2wxApp();
|
||||||
virtual ~E2wxApp();
|
virtual ~E2wxApp();
|
||||||
|
|
||||||
const wxString GetID() const;
|
|
||||||
const wxString GetVersion() const;
|
const wxString GetVersion() const;
|
||||||
const std::filesystem::path GetLogFile() const;
|
const std::filesystem::path GetLogFile() const;
|
||||||
const std::filesystem::path GetResDir() const;
|
const std::filesystem::path GetResDir() const;
|
||||||
@ -88,8 +102,6 @@ public:
|
|||||||
void StartEmulator();
|
void StartEmulator();
|
||||||
void StopEmulator();
|
void StopEmulator();
|
||||||
|
|
||||||
void OnFnKeyPressed(const SDL_Keycode k);
|
|
||||||
|
|
||||||
bool CloseMainFrame();
|
bool CloseMainFrame();
|
||||||
bool EnsureCanQuit();
|
bool EnsureCanQuit();
|
||||||
void Paste();
|
void Paste();
|
||||||
|
@ -34,17 +34,6 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
enum E2MenuID {
|
|
||||||
ID_MENUITEM_POWER = wxID_HIGHEST+1,
|
|
||||||
ID_MENUITEM_CYCLE_MONITOR,
|
|
||||||
ID_MENUITEM_TOGGLE_FULL_SCREEN,
|
|
||||||
ID_MENUITEM_EMULATOR_COMMAND,
|
|
||||||
ID_MENUITEM_RESET,
|
|
||||||
ID_MENUITEM_SCREEN_SHOT,
|
|
||||||
ID_MENUITEM_TOGGLE_BUFFERED,
|
|
||||||
ID_MENUITEM_START_EMULATOR,
|
|
||||||
ID_MENUITEM_STOP_EMULATOR,
|
|
||||||
};
|
|
||||||
|
|
||||||
wxBEGIN_EVENT_TABLE(E2wxFrame, wxFrame)
|
wxBEGIN_EVENT_TABLE(E2wxFrame, wxFrame)
|
||||||
EVT_CLOSE(E2wxFrame::HandleUserQuitRequest)
|
EVT_CLOSE(E2wxFrame::HandleUserQuitRequest)
|
||||||
@ -136,7 +125,7 @@ void E2wxFrame::InitMenuBar() {
|
|||||||
|
|
||||||
void E2wxFrame::InitStatusBar() {
|
void E2wxFrame::InitStatusBar() {
|
||||||
CreateStatusBar();
|
CreateStatusBar();
|
||||||
SetStatusText("Welcome to "+wxGetApp().GetID());
|
SetStatusText("Welcome to "+wxGetApp().GetAppDisplayName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -175,14 +164,17 @@ void E2wxFrame::OnPreferences(wxCommandEvent& event) {
|
|||||||
void E2wxFrame::OnAbout(wxCommandEvent& event) {
|
void E2wxFrame::OnAbout(wxCommandEvent& event) {
|
||||||
wxString msg = "";
|
wxString msg = "";
|
||||||
|
|
||||||
msg += wxGetApp().GetID()+"\n";
|
msg += wxGetApp().GetVendorName();
|
||||||
|
msg += ".";
|
||||||
|
msg += wxGetApp().GetAppName();
|
||||||
|
msg += "\n";
|
||||||
|
|
||||||
msg += "version: "+wxGetApp().GetVersion()+"\n";
|
msg += "version: "+wxGetApp().GetVersion()+"\n";
|
||||||
|
|
||||||
msg += "Current log file:\n";
|
msg += "Current log file:\n";
|
||||||
msg += wxGetApp().GetLogFile().c_str();
|
msg += wxGetApp().GetLogFile().c_str();
|
||||||
|
|
||||||
wxMessageBox(msg, "About "+wxGetApp().GetID(), wxOK | wxICON_INFORMATION);
|
wxMessageBox(msg, "About "+wxGetApp().GetAppDisplayName(), wxOK | wxICON_INFORMATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -196,7 +188,7 @@ void E2wxFrame::OnCycleMonitor(wxCommandEvent& event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void E2wxFrame::OnToggleFullScreen(wxCommandEvent& event) {
|
void E2wxFrame::OnToggleFullScreen(wxCommandEvent& event) {
|
||||||
wxGetApp().ToggleFullScreen();
|
// wxGetApp().ToggleFullScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void E2wxFrame::OnEmulatorCommand(wxCommandEvent& event) {
|
void E2wxFrame::OnEmulatorCommand(wxCommandEvent& event) {
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Emulator::Emulator() :
|
Emulator::Emulator() :
|
||||||
screenImage(keyEventHandler),
|
screenImage(*this, keyEventHandler),
|
||||||
display(screenImage),
|
display(screenImage),
|
||||||
videoStatic(display),
|
videoStatic(display),
|
||||||
apple2(keypresses, paddleButtonStates, display, buffered, screenImage),
|
apple2(keypresses, paddleButtonStates, display, buffered, screenImage),
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "card.h"
|
#include "card.h"
|
||||||
#include "gtkutil.h"
|
#include "gtkutil.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
#include "emulator.h"
|
||||||
|
|
||||||
#include <wx/menu.h>
|
#include <wx/menu.h>
|
||||||
#include <wx/panel.h>
|
#include <wx/panel.h>
|
||||||
@ -66,8 +67,9 @@ static const int WIDTH = AppleNTSC::H - AppleNTSC::PIC_START - 2;
|
|||||||
class ScreenException {
|
class ScreenException {
|
||||||
};
|
};
|
||||||
|
|
||||||
ScreenImage::ScreenImage(KeyEventHandler &k) :
|
ScreenImage::ScreenImage(Emulator &emulator, KeyEventHandler &k) :
|
||||||
wxFrame(nullptr, wxID_ANY, "Emulator"),
|
wxFrame(nullptr, wxID_ANY, "Emulator"),
|
||||||
|
emu(emulator),
|
||||||
fullscreen(false),
|
fullscreen(false),
|
||||||
buffer(true),
|
buffer(true),
|
||||||
display(AnalogTV::TV_OLD_COLOR),
|
display(AnalogTV::TV_OLD_COLOR),
|
||||||
@ -79,6 +81,7 @@ ScreenImage::ScreenImage(KeyEventHandler &k) :
|
|||||||
Center();
|
Center();
|
||||||
Show();
|
Show();
|
||||||
Bind(wxEVT_IDLE, &ScreenImage::OnIdle, this);
|
Bind(wxEVT_IDLE, &ScreenImage::OnIdle, this);
|
||||||
|
Bind(wxEVT_CLOSE_WINDOW, &ScreenImage::HandleUserCloseWindowRequest, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenImage::~ScreenImage() {
|
ScreenImage::~ScreenImage() {
|
||||||
@ -87,12 +90,17 @@ ScreenImage::~ScreenImage() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ScreenImage::OnIdle(wxIdleEvent &evt) {
|
void ScreenImage::OnIdle(wxIdleEvent &evt) {
|
||||||
if (!this->FindFocus() || !this->sdl->HasFocus()) {
|
if (!this->FindFocus() || !this->sdl->HasFocus()) {
|
||||||
this->sdl->SetFocus();
|
this->sdl->SetFocus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenImage::HandleUserCloseWindowRequest(wxCloseEvent& event) {
|
||||||
|
wxGetApp().StopEmulator();
|
||||||
|
}
|
||||||
|
|
||||||
void ScreenImage::exitFullScreen() {
|
void ScreenImage::exitFullScreen() {
|
||||||
// if (this->fullscreen) {
|
// if (this->fullscreen) {
|
||||||
// toggleFullScreen();
|
// toggleFullScreen();
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
class Emulator;
|
||||||
class Card;
|
class Card;
|
||||||
struct SDL_Texture;
|
struct SDL_Texture;
|
||||||
struct SDL_Renderer;
|
struct SDL_Renderer;
|
||||||
@ -37,6 +38,7 @@ struct SDL_Window;
|
|||||||
|
|
||||||
class ScreenImage : public wxFrame {
|
class ScreenImage : public wxFrame {
|
||||||
private:
|
private:
|
||||||
|
Emulator &emu;
|
||||||
wxPanel *sdl;
|
wxPanel *sdl;
|
||||||
SDL_Window* window;
|
SDL_Window* window;
|
||||||
SDL_Renderer* renderer;
|
SDL_Renderer* renderer;
|
||||||
@ -60,10 +62,11 @@ private:
|
|||||||
void OnIdle(wxIdleEvent &evt);
|
void OnIdle(wxIdleEvent &evt);
|
||||||
void OnKeyDown(wxKeyEvent &evt);
|
void OnKeyDown(wxKeyEvent &evt);
|
||||||
void OnKeyUp(wxKeyEvent &evt);
|
void OnKeyUp(wxKeyEvent &evt);
|
||||||
|
void HandleUserCloseWindowRequest(wxCloseEvent& event);
|
||||||
|
|
||||||
// TODO some of these methods should be private
|
// TODO some of these methods should be private
|
||||||
public:
|
public:
|
||||||
ScreenImage(KeyEventHandler &keyEventHandler);
|
ScreenImage(Emulator &emulator, KeyEventHandler &keyEventHandler);
|
||||||
~ScreenImage();
|
~ScreenImage();
|
||||||
|
|
||||||
void exitFullScreen();
|
void exitFullScreen();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user