128 lines
3.8 KiB
C++
128 lines
3.8 KiB
C++
//
|
|
// Copyright 2005 The Android Open Source Project
|
|
//
|
|
// Window with log output.
|
|
//
|
|
#ifndef _SIM_LOG_WINDOW_H
|
|
#define _SIM_LOG_WINDOW_H
|
|
|
|
#include "PhoneData.h"
|
|
#include "UserEvent.h"
|
|
#include "LogMessage.h"
|
|
#include "LogPool.h"
|
|
#include "LogPrefsDialog.h"
|
|
|
|
|
|
/*
|
|
* Display log output from runtime process.
|
|
*
|
|
* We receive the messages broken into components (date, log level, tag,
|
|
* function name, etc.) and do the formatting ourselves. We receive all
|
|
* messages regardless of log level, and provide filter controls in the
|
|
* window.
|
|
*
|
|
* Messages are stored in a "log pool", which has a fixed memory footprint.
|
|
* The messages that are currently visible in the log output window are
|
|
* also pointed at from a fixed-size display array. Changes to output
|
|
* format cause us to clear the display and re-show everything in the
|
|
* display array, while changes to the output filter cause us to
|
|
* re-evaluate the contents of the display pool.
|
|
*/
|
|
class LogWindow : public wxDialog {
|
|
public:
|
|
LogWindow(wxWindow* parent);
|
|
virtual ~LogWindow(void);
|
|
|
|
/* we override this, to cope with annoying GTK behavior */
|
|
virtual bool Show(bool show = true);
|
|
|
|
/* return preferred size and position */
|
|
static wxRect GetPrefWindowRect(void);
|
|
|
|
/* handle a log message "user event" */
|
|
void AddLogMessage(LogMessage* pLogMessage);
|
|
|
|
/* resize the display messages array */
|
|
void SetMaxDisplayMsgs(int max);
|
|
|
|
/* post a message to the log; may be called from non-main thread */
|
|
static void PostLogMsg(const android_LogBundle* pBundle);
|
|
static void PostLogMsg(const wxString& msg);
|
|
static void PostLogMsg(const char* msg);
|
|
|
|
private:
|
|
void OnMove(wxMoveEvent& event);
|
|
void OnClose(wxCloseEvent& event);
|
|
void OnLogLevel(wxCommandEvent& event);
|
|
void OnLogClear(wxCommandEvent& event);
|
|
void OnLogPause(wxCommandEvent& event);
|
|
void OnLogPrefs(wxCommandEvent& event);
|
|
|
|
/* handle incoming log message */
|
|
void OnUserEvent(UserEvent& event);
|
|
|
|
void SaveWindowPrefs(void);
|
|
void ConstructControls(void);
|
|
|
|
void AddToDisplay(LogMessage* pLogMessage);
|
|
void ClearDisplay(void);
|
|
void Redisplay(void);
|
|
void SetTextStyle(void);
|
|
|
|
bool FilterMatches(const LogMessage* pLogMessage);
|
|
|
|
void FormatMessage(const LogMessage* pLogMessage,
|
|
wxTextCtrl* pTextCtrl);
|
|
|
|
void LogToFile(const LogMessage* pLogMessage);
|
|
void PrepareLogFile(void);
|
|
static void SendToWindow(LogMessage* pMessage);
|
|
|
|
/*
|
|
* Message pool.
|
|
*/
|
|
LogPool mPool;
|
|
|
|
/*
|
|
* Display array. This is a fixed-size circular array that holds
|
|
* pointers to the log messages currently displayed on screen.
|
|
*/
|
|
LogMessage** mDisplayArray; // ptrs to messages currently displayed
|
|
int mMaxDisplayMsgs; // max #of messages
|
|
int mTopPtr; // index of top message
|
|
int mNextPtr; // index of next empty slot
|
|
|
|
bool mPaused; // is output paused for review?
|
|
|
|
/*
|
|
* Current filter.
|
|
*/
|
|
android_LogPriority mMinPriority; // messages at or above are shown
|
|
|
|
/* format options */
|
|
LogPrefsDialog::HeaderFormat mHeaderFormat;
|
|
bool mSingleLine; // put whole message on one line?
|
|
int mExtraSpacing; // double/triple-space messages?
|
|
int mPointSize; // text point size;
|
|
bool mUseColor; // colorful messages?
|
|
bool mFontMonospace; // use monospace font?
|
|
|
|
/* log file options */
|
|
bool mWriteFile;
|
|
wxString mFileName;
|
|
bool mTruncateOld;
|
|
|
|
FILE* mLogFp;
|
|
|
|
/*
|
|
* Window position stuff.
|
|
*/
|
|
bool mNewlyShown;
|
|
wxPoint mLastPosition;
|
|
bool mVisible;
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
};
|
|
|
|
#endif // _SIM_LOG_WINDOW_H
|