1
0
mirror of https://github.com/RPCS3/rpcs3.git synced 2024-11-23 11:13:19 +01:00

Give Log Console (ConLogFrame) a Context Menu with Copy and Clear actions.

This commit is contained in:
luxsie 2014-08-17 00:03:31 +08:00
parent bf8b066d97
commit e360746265
2 changed files with 51 additions and 0 deletions

View File

@ -1,6 +1,7 @@
#include "stdafx.h" #include "stdafx.h"
#include <wx/listctrl.h> #include <wx/listctrl.h>
#include <wx/clipbrd.h>
#include <fstream> #include <fstream>
#include <vector> #include <vector>
#include <mutex> #include <mutex>
@ -24,6 +25,12 @@ const int BUFFER_MAX_SIZE = 1024 * 1024;
//amount of characters in the TextCtrl text-buffer for the emulation log //amount of characters in the TextCtrl text-buffer for the emulation log
const int GUI_BUFFER_MAX_SIZE = 1024 * 1024; const int GUI_BUFFER_MAX_SIZE = 1024 * 1024;
enum
{
id_log_copy, //Copy log to ClipBoard
id_log_clear //Clear log
};
struct wxWriter : Log::LogListener struct wxWriter : Log::LogListener
{ {
wxTextCtrl *m_log; wxTextCtrl *m_log;
@ -146,6 +153,10 @@ LogFrame::LogFrame(wxWindow* parent)
SetSizer(s_main); SetSizer(s_main);
Layout(); Layout();
m_log->Bind(wxEVT_RIGHT_DOWN, &LogFrame::OnRightClick, this);
Bind(wxEVT_MENU, &LogFrame::OnContextMenu, this, id_log_clear);
Bind(wxEVT_MENU, &LogFrame::OnContextMenu, this, id_log_copy);
Show(); Show();
} }
@ -163,3 +174,39 @@ void LogFrame::OnQuit(wxCloseEvent& event)
{ {
event.Skip(); event.Skip();
} }
//Deals with the RightClick on Log Console, shows up the Context Menu.
void LogFrame::OnRightClick(wxMouseEvent& event)
{
wxMenu* menu = new wxMenu();
menu->Append(id_log_copy, "&Copy Ctrl+C");
menu->AppendSeparator();
menu->Append(id_log_clear, "C&lear");
PopupMenu(menu);
}
//Well you can bind more than one control to a single handler.
void LogFrame::OnContextMenu(wxCommandEvent& event)
{
int id = event.GetId();
switch (id)
{
case id_log_clear:
m_log->Clear();
break;
case id_log_copy:
if (wxTheClipboard->Open())
{
m_tdo = new wxTextDataObject(m_log->GetStringSelection());
if (m_tdo->GetTextLength() > 0)
{
wxTheClipboard->SetData(new wxTextDataObject(m_log->GetStringSelection()));
}
wxTheClipboard->Close();
}
break;
default:
event.Skip();
}
}

View File

@ -9,6 +9,8 @@ class LogFrame
wxAuiNotebook m_tabs; wxAuiNotebook m_tabs;
wxTextCtrl *m_log; wxTextCtrl *m_log;
wxTextCtrl *m_tty; wxTextCtrl *m_tty;
//Copy Action in Context Menu
wxTextDataObject* m_tdo;
public: public:
LogFrame(wxWindow* parent); LogFrame(wxWindow* parent);
@ -21,6 +23,8 @@ private:
virtual void Task(){}; virtual void Task(){};
void OnQuit(wxCloseEvent& event); void OnQuit(wxCloseEvent& event);
void OnRightClick(wxMouseEvent& event); //Show context menu
void OnContextMenu(wxCommandEvent& event); //After select
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
}; };