/* * khexedit - Versatile hex editor * Copyright (C) 1999-2000 Espen Sand, espensa@online.no * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef _TOPLEVEL_H_ #define _TOPLEVEL_H_ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "hexbuffer.h" #include "hexmanagerwidget.h" #include "statusbarprogress.h" class TQSignalMapper; class TDEAction; class TDERecentFilesAction; class TDERadioAction; class TDESelectAction; class TDEToggleAction; class TDEToolBarButton; class KURL; class CDragLabel; class KHexEdit : public TDEMainWindow { Q_OBJECT enum StatusBarId { status_WriteProtect = 0, status_Layout = 1, status_Offset = 2, status_Size = 3, status_Ovr = 4, status_Modified = 5, status_Selection = 6, status_Progress = 7 }; struct SActionList { TDEAction *insert; TDERecentFilesAction *openRecent; TDEAction *save; TDEAction *saveAs; TDEAction *revert; TDEAction *close; TDEAction *print; TDEAction *exportData; TDEAction *cancel; TDEToggleAction *readOnly; TDEToggleAction *resizeLock; TDEAction *newWindow; TDEAction *closeWindow; TDEAction *quit; TDEAction *undo; TDEAction *redo; TDEAction *cut; TDEAction *copy; TDEAction *paste; TDEAction *selectAll; TDEAction *unselect; TDEAction *find; TDEAction *findNext; TDEAction *findPrev; TDEAction *replace; TDEAction *gotoOffset; TDEAction *insertPattern; TDEAction *copyAsText; TDEAction *pasteToNewFile; TDEAction *pasteToNewWindow; TDERadioAction *hexadecimal; TDERadioAction *decimal; TDERadioAction *octal; TDERadioAction *binary; TDERadioAction *textOnly; TDEToggleAction *showOffsetColumn; TDEToggleAction *showTextColumn; TDEToggleAction *offsetAsDecimal; TDEToggleAction *dataUppercase; TDEToggleAction *offsetUppercase; TDERadioAction *defaultEncoding; TDERadioAction *usAsciiEncoding; TDERadioAction *ebcdicEncoding; // TDEAction *customEncoding; TDEAction *strings; // TDEAction *recordViewer; TDEAction *filter; TDEAction *characterTable; TDEAction *converter; TDEAction *statistics; TDEAction *addBookmark; TDEAction *replaceBookmark; TDEAction *removeBookmark; TDEAction *removeAllBookmark; TDEAction *nextBookmark; TDEAction *prevBookmark; TDEToggleAction *showFullPath; TDERadioAction *tabHide; TDERadioAction *tabShowBelowEditor; TDERadioAction *tabShowAboveEditor; TDERadioAction *conversionHide; TDERadioAction *conversionFloat; TDERadioAction *conversionEmbed; TDERadioAction *searchHide; TDERadioAction *searchShowAboveEditor; TDERadioAction *searchShowBelowEditor; // TDEAction *favorites; TQPtrList< TDEAction > bookmarkList; TQSignalMapper *bookmarkMapper; }; public: KHexEdit( void ); ~KHexEdit( void ); inline void addStartupFile( const TQString &fileName ); inline void setStartupOffset( uint offset ); public slots: KHexEdit *newWindow( void ); void pasteNewWindow( void ); void closeWindow( void ); void closeProgram( void ); void statusBarPressed( int id ); void operationChanged( bool state ); void cursorChanged( SCursorState &state ); void fileState( SFileState &state ); void layoutChanged( const SDisplayLayout &layout ); void inputModeChanged( const SDisplayInputMode &mode ); void bookmarkChanged( TQPtrList &list ); void removeRecentFile( const TQString &fileName ); void renameRecentFile( const TQString &curName, const TQString &newName ); void setupCaption( const TQString &url ); void fileActive( const TQString &url, bool onDisk ); void fileRename( const TQString &curName, const TQString &newName ); void fileClosed( const TQString &url ); void readConfiguration( void ); void writeConfiguration( void ); void editMode( CHexBuffer::EEditMode editMode ); void encodingChanged( const SEncodeState &state ); void textWidth( uint width ); void setDisplayMode( void ); void showFullPath( void ); void showDocumentTabs( void ); void showConversionField( void ); void showSearchBar( void ); void setEncoding( void ); void documentMenuCB( int id ); /** * Slot for opening a file among the recently opened files. */ void slotFileOpenRecent( const KURL & ); protected: virtual bool queryExit( void ); virtual bool queryClose( void ); private slots: void delayedStartupOpen( void ); void removeRecentFiles( void ); void conversionClosed( void ); void searchBarClosed( void ); void resizeTest(); private: void setupActions( void ); void setupStatusBar( void ); void open( TQStringList &fileList, TQStringList &offsetList ); void initialize( bool openFiles ); void addRecentFile( const TQString &fileName ); bool closeAllWindow( void ); void setUndoState( uint undoState ); void setSelectionState( uint selectionOffset, uint selectionSize ); void setSelectionText( uint selectionOffset, uint selectionSize ); void addDocument( const TQString &fileName ); void removeDocument( const TQString &fileName ); void renameDocument( const TQString &curName, const TQString &newName ); void setTickedDocument( const TQString &fileName ); void writeConfiguration( TDEConfig &config ); void readConfiguration( TDEConfig &config ); bool eventFilter( TQObject *obj, TQEvent *event ); int acceleratorNumKey( uint index ); inline CHexEditorWidget *editor( void ); inline CHexToolWidget *converter( void ); inline CHexViewWidget *hexView( void ); private: static TQPtrList mWindowList; CHexManagerWidget *mManager; TQStringList mDocumentList; TQStringList mStartupFileList; ///< Files to automatically open on startup TQStringList mStartupOffsetList; ///< Start offset for those files. uint mStartupOffset; ///< Value read from the command line SActionList mAction; CDragLabel *mDragLabel; TDEToolBarButton *mWriteProtectButton; bool mIsModified; bool mShowFullPath; bool mSelectionAsHexadecimal; uint mSelectionOffset; uint mSelectionSize; uint mUndoState; int mRecentFileId; }; inline void KHexEdit::addStartupFile( const TQString &fileName ) { mStartupFileList.prepend( fileName ); mStartupOffsetList.prepend( TQString("%1").arg(mStartupOffset,0,16) ); mStartupOffset = 0; } inline void KHexEdit::setStartupOffset( uint offset ) { mStartupOffset = offset; } inline CHexEditorWidget *KHexEdit::editor( void ) { return( mManager->editor() ); } inline CHexViewWidget *KHexEdit::hexView( void ) { return( mManager->editor()->view() ); } inline CHexToolWidget *KHexEdit::converter( void ) { return( mManager->converter() ); } #endif