mirror of
https://github.com/cmosher01/Epple-II.git
synced 2024-11-03 14:04:53 +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
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
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
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all project spaces, and it also applies when
|
||||
an individual is representing the project or its community in public spaces.
|
||||
Examples of representing a project or community include using an official
|
||||
project e-mail address, posting via an official social media account, or acting
|
||||
as an appointed representative at an online or offline event. Representation of
|
||||
a project may be further defined and clarified by project maintainers.
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at <cmosher01@gmail.com>. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
reported to the community leaders responsible for enforcement at
|
||||
<cmosher01@gmail.com>.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## 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
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
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
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[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
|
||||
#endif
|
||||
#ifndef PROJECT_NAME
|
||||
#define PROJECT_NAME Epple-II
|
||||
#define PROJECT_NAME epple2
|
||||
#endif
|
||||
#ifndef PROJECT_DISPLAY_NAME
|
||||
#define PROJECT_DISPLAY_NAME PROJECT_NAME
|
||||
#endif
|
||||
|
||||
|
||||
@ -90,7 +93,6 @@ void EmuTimer::Notify() {
|
||||
|
||||
|
||||
E2wxApp::E2wxApp() :
|
||||
id(wxSTRINGIZE(PROJECT_VENDOR) "." wxSTRINGIZE(PROJECT_NAME)),
|
||||
version(wxSTRINGIZE(PROJECT_VERSION)),
|
||||
frame(nullptr),
|
||||
emu(nullptr),
|
||||
@ -121,7 +123,6 @@ static std::filesystem::path dirDocuments() {
|
||||
|
||||
|
||||
|
||||
|
||||
bool E2wxApp::OnInit() {
|
||||
if (!wxApp::OnInit()) {
|
||||
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();
|
||||
//stdpaths.SetInstallPrefix(".");
|
||||
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 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();
|
||||
|
||||
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);
|
||||
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;
|
||||
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;
|
||||
|
||||
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 r = false;
|
||||
@ -332,10 +314,6 @@ const std::filesystem::path E2wxApp::GetResDir() const {
|
||||
return this->resdir;
|
||||
}
|
||||
|
||||
const wxString E2wxApp::GetID() const {
|
||||
return this->id;
|
||||
}
|
||||
|
||||
const wxString E2wxApp::GetVersion() const {
|
||||
return this->version;
|
||||
}
|
||||
@ -355,9 +333,11 @@ const std::filesystem::path E2wxApp::GetDocumentsDir() const {
|
||||
|
||||
|
||||
const std::filesystem::path E2wxApp::BuildLogFilePath() const {
|
||||
const wxString id = GetVendorName() + "." + GetAppName();
|
||||
|
||||
std::filesystem::path logfile =
|
||||
dirCache() /
|
||||
path_from_string(GetID()) /
|
||||
path_from_string(id) /
|
||||
std::filesystem::path("log");
|
||||
|
||||
std::filesystem::create_directories(logfile);
|
||||
@ -462,9 +442,9 @@ void E2wxApp::ToggleBuffered() {
|
||||
}
|
||||
|
||||
void E2wxApp::ToggleFullScreen() {
|
||||
if (this->emu) {
|
||||
this->emu->toggleFullScreen();
|
||||
}
|
||||
// if (this->emu) {
|
||||
// this->emu->toggleFullScreen();
|
||||
// }
|
||||
}
|
||||
|
||||
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 <wx/defs.h>
|
||||
#include <wx/app.h>
|
||||
#include <wx/event.h>
|
||||
#include <wx/cmdline.h>
|
||||
#include <wx/timer.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 {
|
||||
Emulator *emu;
|
||||
|
||||
@ -55,7 +71,6 @@ public:
|
||||
|
||||
|
||||
class E2wxApp : public wxApp {
|
||||
const wxString id;
|
||||
const wxString version;
|
||||
std::filesystem::path logfile;
|
||||
std::filesystem::path resdir;
|
||||
@ -75,7 +90,6 @@ public:
|
||||
E2wxApp();
|
||||
virtual ~E2wxApp();
|
||||
|
||||
const wxString GetID() const;
|
||||
const wxString GetVersion() const;
|
||||
const std::filesystem::path GetLogFile() const;
|
||||
const std::filesystem::path GetResDir() const;
|
||||
@ -88,8 +102,6 @@ public:
|
||||
void StartEmulator();
|
||||
void StopEmulator();
|
||||
|
||||
void OnFnKeyPressed(const SDL_Keycode k);
|
||||
|
||||
bool CloseMainFrame();
|
||||
bool EnsureCanQuit();
|
||||
void Paste();
|
||||
|
@ -34,17 +34,6 @@
|
||||
#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)
|
||||
EVT_CLOSE(E2wxFrame::HandleUserQuitRequest)
|
||||
@ -136,7 +125,7 @@ void E2wxFrame::InitMenuBar() {
|
||||
|
||||
void E2wxFrame::InitStatusBar() {
|
||||
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) {
|
||||
wxString msg = "";
|
||||
|
||||
msg += wxGetApp().GetID()+"\n";
|
||||
msg += wxGetApp().GetVendorName();
|
||||
msg += ".";
|
||||
msg += wxGetApp().GetAppName();
|
||||
msg += "\n";
|
||||
|
||||
msg += "version: "+wxGetApp().GetVersion()+"\n";
|
||||
|
||||
msg += "Current log file:\n";
|
||||
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) {
|
||||
wxGetApp().ToggleFullScreen();
|
||||
// wxGetApp().ToggleFullScreen();
|
||||
}
|
||||
|
||||
void E2wxFrame::OnEmulatorCommand(wxCommandEvent& event) {
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
|
||||
Emulator::Emulator() :
|
||||
screenImage(keyEventHandler),
|
||||
screenImage(*this, keyEventHandler),
|
||||
display(screenImage),
|
||||
videoStatic(display),
|
||||
apple2(keypresses, paddleButtonStates, display, buffered, screenImage),
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "card.h"
|
||||
#include "gtkutil.h"
|
||||
#include "util.h"
|
||||
#include "emulator.h"
|
||||
|
||||
#include <wx/menu.h>
|
||||
#include <wx/panel.h>
|
||||
@ -66,8 +67,9 @@ static const int WIDTH = AppleNTSC::H - AppleNTSC::PIC_START - 2;
|
||||
class ScreenException {
|
||||
};
|
||||
|
||||
ScreenImage::ScreenImage(KeyEventHandler &k) :
|
||||
ScreenImage::ScreenImage(Emulator &emulator, KeyEventHandler &k) :
|
||||
wxFrame(nullptr, wxID_ANY, "Emulator"),
|
||||
emu(emulator),
|
||||
fullscreen(false),
|
||||
buffer(true),
|
||||
display(AnalogTV::TV_OLD_COLOR),
|
||||
@ -79,6 +81,7 @@ ScreenImage::ScreenImage(KeyEventHandler &k) :
|
||||
Center();
|
||||
Show();
|
||||
Bind(wxEVT_IDLE, &ScreenImage::OnIdle, this);
|
||||
Bind(wxEVT_CLOSE_WINDOW, &ScreenImage::HandleUserCloseWindowRequest, this);
|
||||
}
|
||||
|
||||
ScreenImage::~ScreenImage() {
|
||||
@ -87,12 +90,17 @@ ScreenImage::~ScreenImage() {
|
||||
|
||||
|
||||
|
||||
|
||||
void ScreenImage::OnIdle(wxIdleEvent &evt) {
|
||||
if (!this->FindFocus() || !this->sdl->HasFocus()) {
|
||||
this->sdl->SetFocus();
|
||||
}
|
||||
}
|
||||
|
||||
void ScreenImage::HandleUserCloseWindowRequest(wxCloseEvent& event) {
|
||||
wxGetApp().StopEmulator();
|
||||
}
|
||||
|
||||
void ScreenImage::exitFullScreen() {
|
||||
// if (this->fullscreen) {
|
||||
// toggleFullScreen();
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class Emulator;
|
||||
class Card;
|
||||
struct SDL_Texture;
|
||||
struct SDL_Renderer;
|
||||
@ -37,6 +38,7 @@ struct SDL_Window;
|
||||
|
||||
class ScreenImage : public wxFrame {
|
||||
private:
|
||||
Emulator &emu;
|
||||
wxPanel *sdl;
|
||||
SDL_Window* window;
|
||||
SDL_Renderer* renderer;
|
||||
@ -60,10 +62,11 @@ private:
|
||||
void OnIdle(wxIdleEvent &evt);
|
||||
void OnKeyDown(wxKeyEvent &evt);
|
||||
void OnKeyUp(wxKeyEvent &evt);
|
||||
void HandleUserCloseWindowRequest(wxCloseEvent& event);
|
||||
|
||||
// TODO some of these methods should be private
|
||||
public:
|
||||
ScreenImage(KeyEventHandler &keyEventHandler);
|
||||
ScreenImage(Emulator &emulator, KeyEventHandler &keyEventHandler);
|
||||
~ScreenImage();
|
||||
|
||||
void exitFullScreen();
|
||||
|
Loading…
Reference in New Issue
Block a user