1 #ifndef __BF_GUI_TEXTVIEWER__ 2 #define __BF_GUI_TEXTVIEWER__ 3 4 #include <InterfaceKit.h> 5 #include <List.h> 6 #include "BL_Tools.h" 7 #include "BF_GUI_Setup.h" 8 9 enum { 10 CP_UTF8 = 0, 11 CP_DOS, 12 CP_WIN, 13 CP_KOI, 14 CP_END, 15 }; 16 17 class BF_TextFile_Line:public BL_Object{ 18 public: 19 BF_TextFile_Line(const BL_String & s_Src,off_t i_Pos,int32 i_Bytes); 20 void SetBytesTo(int32 i_Bytes) {iBytes = i_Bytes;}; 21 int32 Bytes()const {return iBytes;}; 22 off_t Pos()const {return iPos;}; 23 24 const char* String()const {return s.String();}; 25 26 BL_String s; 27 private: 28 int32 iBytes; 29 off_t iPos; 30 }; 31 32 class BF_TextFile_Buffer:public BL_Object{ 33 public: 34 BF_TextFile_Buffer(); 35 36 void SetFileNameTo(const char *pc_FileName); 37 38 int32 LoadText(off_t i_StartPos,int32 i_LinesCount,BL_List & lo_Data,bool b_DeleteData=true,off_t i_LastPos=-1); 39 int32 LoadText_FromNextLine(off_t & i_StartPos,int32 i_LinesCount,BL_List & lo_Data,bool b_DeleteFirstLines=true); 40 int32 LoadText_BeforePos(off_t & i_LastPos,int32 i_LinesCount,BL_List & lo_Data); 41 42 off_t FileSize(); 43 private: 44 BL_String sFileName; 45 BL_File oFile; 46 off_t iFileSize; 47 48 status_t OpenFile(); 49 void CloseFile(); 50 }; 51 52 class BF_GUI_TextViewer_StatusBar : public BView{ 53 public: 54 BF_GUI_TextViewer_StatusBar(BRect & o_Rect,const char *pc_FileName); 55 void SetVarsTo(off_t i_FilePos,off_t i_PageSize,off_t i_FileSize,int32 i_CodePage,int32 i_StartColumn); 56 virtual void Draw(BRect o_Rect); 57 private: 58 off_t iFilePos,iPageSize,iFileSize; 59 BL_String sFileName; 60 int32 iCodePage,iStartColumn; 61 }; 62 63 64 class BF_GUI_TextViewer : public BView 65 { 66 public: 67 68 BF_GUI_TextViewer(BRect o_frame,const char *pcFileForView); 69 ~BF_GUI_TextViewer(); 70 71 72 73 virtual void Draw(BRect o_Rect); 74 virtual void MouseDown(BPoint point); 75 virtual void MakeFocus(bool b_Focused = true); 76 virtual void MessageReceived(BMessage* po_Message); 77 virtual void KeyDown(const char *bytes, int32 numBytes); 78 79 private: 80 BF_TextFile_Buffer oBuffer; 81 82 BView *poLastFocus; 83 BL_List loData; 84 BL_String sFileName; 85 int32 iCodePage,iLinesCount,iStartColumn; 86 off_t iFilePos,iFileSize; 87 float fFontHeight; 88 bool bWrapped,bShowSpec; 89 90 int32 iSearchPos,iSearchLine,iSearchPosInLine; 91 BL_String sSearchText; 92 93 char pcConvertBuffer[0x1000]; 94 95 void CalcVars(); 96 void UpdateStatusBar(); 97 98 status_t OpenFile(BL_File & o_File); 99 void LoadPage(); 100 101 void PrepareKeysMenu(); 102 void CloseViewer(); 103 104 bool Nav_LineUp(); 105 bool Nav_LineDown(); 106 bool Nav_PageDown(); 107 bool Nav_PageUp(); 108 bool Nav_End(); 109 void Nav_GoPos(off_t i_NewFilePos); 110 bool Nav_Right(); 111 bool Nav_Left(); 112 113 virtual void Search_Step0(); 114 virtual void Search_Step1(BMessage & o_Message); 115 virtual void Search_Run(); 116 117 void ChangeCodePage(); 118 virtual void ToUtf8(const char *pc_Source,char *pc_Dest); 119 virtual void FromUtf8(const char *pc_Source,char *pc_Dest); 120 virtual uint32 GetConversion( void ); 121 122 void DrawLine(BView *po_Render,int i_Line,bool b_InitRender,bool b_DrawBackground,BL_String & s); 123 124 }; 125 126 127 void BF_GUI_TextViewer_Run(const char *pc_File); 128 129 130 #endif