/* * 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 KAction; class KRecentFilesAction; class KRadioAction; class KSelectAction; class KToggleAction; class KToolBarButton; class KURL; class CDragLabel; class KHexEdit : public KMainWindow { 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 { KAction *insert; KRecentFilesAction *openRecent; KAction *save; KAction *saveAs; KAction *revert; KAction *close; KAction *print; KAction *exportData; KAction *cancel; KToggleAction *readOnly; KToggleAction *resizeLock; KAction *newWindow; KAction *closeWindow; KAction *quit; KAction *undo; KAction *redo; KAction *cut; KAction *copy; KAction *paste; KAction *selectAll; KAction *unselect; KAction *find; KAction *findNext; KAction *findPrev; KAction *replace; KAction *gotoOffset; KAction *insertPattern; KAction *copyAsText; KAction *pasteToNewFile; KAction *pasteToNewWindow; KRadioAction *hexadecimal; KRadioAction *decimal; KRadioAction *octal; KRadioAction *binary; KRadioAction *textOnly; KToggleAction *showOffsetColumn; KToggleAction *showTextColumn; KToggleAction *offsetAsDecimal; KToggleAction *dataUppercase; KToggleAction *offsetUppercase; KRadioAction *defaultEncoding; KRadioAction *usAsciiEncoding; KRadioAction *ebcdicEncoding; // KAction *customEncoding; KAction *strings; // KAction *recordViewer; KAction *filter; KAction *characterTable; KAction *converter; KAction *statistics; KAction *addBookmark; KAction *replaceBookmark; KAction *removeBookmark; KAction *removeAllBookmark; KAction *nextBookmark; KAction *prevBookmark; KToggleAction *showFullPath; KRadioAction *tabHide; KRadioAction *tabShowBelowEditor; KRadioAction *tabShowAboveEditor; KRadioAction *conversionHide; KRadioAction *conversionFloat; KRadioAction *conversionEmbed; KRadioAction *searchHide; KRadioAction *searchShowAboveEditor; KRadioAction *searchShowBelowEditor; // KAction *favorites; TQPtrList< KAction > 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( KConfig &config ); void readConfiguration( KConfig &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; KToolBarButton *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