| // |
| // 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 |