diff options
Diffstat (limited to 'khexedit/parts/kpart/khepart.cpp')
-rw-r--r-- | khexedit/parts/kpart/khepart.cpp | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/khexedit/parts/kpart/khepart.cpp b/khexedit/parts/kpart/khepart.cpp new file mode 100644 index 0000000..e9b9ed5 --- /dev/null +++ b/khexedit/parts/kpart/khepart.cpp @@ -0,0 +1,213 @@ +/*************************************************************************** + khepart.cpp - description + ------------------- + begin : Don Jun 19 2003 + copyright : (C) 2003 by Friedrich W. H. Kossebau + email : Friedrich.W.H@Kossebau.de + ***************************************************************************/ + +/*************************************************************************** + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License version 2 as published by the Free Software Foundation. * + * * + ***************************************************************************/ + + +// kde specific +#include <klocale.h> +//#include <kinstance.h> +#include <kaction.h> +#include <kstdaction.h> +//#include <kglobalsettings.h> +// app specific +#include "khexedit.h" +#include "kcharcodec.h" +#include "khepartfactory.h" +#include "khebrowserextension.h" +#include "khepart.h" + +using namespace KHE; + +static const char RCFileName[] = "khexedit2partui.rc"; + +KHexEditPart::KHexEditPart( QWidget *ParentWidget, const char *WidgetName, + QObject *Parent, const char *Name, + bool BrowserViewWanted ) + : KParts::ReadOnlyPart( Parent, Name ) +{ + setInstance( KHexEditPartFactory::instance() ); + + HexEdit = new KHexEdit( &Wrapping, ParentWidget, WidgetName ); + HexEdit->setNoOfBytesPerLine( 16 ); + HexEdit->setBufferSpacing( 3, 4, 10 ); + HexEdit->setShowUnprintable( false ); + + // notify the part that this is our internal widget + setWidget( HexEdit ); + + setupActions( BrowserViewWanted ); + + if( CopyAction ) + { + connect( HexEdit, SIGNAL(copyAvailable(bool)), CopyAction,SLOT(setEnabled(bool)) ); + connect( HexEdit, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()) ); + CopyAction->setEnabled( false ); + } + + // plugin to browsers + if( BrowserViewWanted ) + new KHexEditBrowserExtension( this ); +} + + +KHexEditPart::~KHexEditPart() +{ +} + +/* +void KHexEditPart::setupTools( bool BrowserViewWanted ) +{ + if( !BrowserViewWanted ) new KClipboardTool( this ); + + new KZoomToolet( this ); + new KSelectToolet( this ); + new KHEValueCodingToolet( this ); + new KHECharEncodingToolet( this ); + new KHEResizeStyleToolet( this ); + new KHEColumnToggleToolet( this ); +} +*/ +void KHexEditPart::setupActions( bool BrowserViewWanted ) +{ + KActionCollection *AC = actionCollection(); + // create our actions + CopyAction = BrowserViewWanted ? 0 : KStdAction::copy( HexEdit, SLOT(copy()), AC ); + + KStdAction::selectAll( this, SLOT(slotSelectAll()), AC ); + KStdAction::deselect( this, SLOT(slotUnselect()), AC ); + + // value encoding + CodingAction = new KSelectAction( i18n("&Value Coding"), 0, AC, "view_valuecoding" ); + QStringList List; + List.append( i18n("&Hexadecimal") ); + List.append( i18n("&Decimal") ); + List.append( i18n("&Octal") ); + List.append( i18n("&Binary") ); + CodingAction->setItems( List ); + connect( CodingAction, SIGNAL(activated(int)), this, SLOT(slotSetCoding(int)) ); + + // document encoding + EncodingAction = new KSelectAction( i18n("&Char Encoding"), 0, AC, "view_charencoding" ); + EncodingAction->setItems( KCharCodec::codecNames() ); + connect( EncodingAction, SIGNAL(activated(int)), this, SLOT(slotSetEncoding(int)) ); + + ShowUnprintableAction = new KToggleAction( i18n("Show &Unprintable Chars (<32)"), 0, this, SLOT(slotSetShowUnprintable()), actionCollection(), "view_showunprintable" ); + + KStdAction::zoomIn( HexEdit, SLOT(zoomIn()), actionCollection() ); + KStdAction::zoomOut( HexEdit, SLOT(zoomOut()), actionCollection() ); + + // resize style + ResizeStyleAction = new KSelectAction( i18n("&Resize Style"), 0, AC, "resizestyle" ); + List.clear(); + List.append( i18n("&No Resize") ); + List.append( i18n("&Lock Groups") ); + List.append( i18n("&Full Size Usage") ); + ResizeStyleAction->setItems( List ); + connect( ResizeStyleAction, SIGNAL(activated(int)), this, SLOT(slotSetResizeStyle(int)) ); + + ShowOffsetColumnAction = new KToggleAction( i18n("&Line Offset"), Key_F11, this, SLOT(slotToggleOffsetColumn()), AC, "view_lineoffset" ); + + // show buffer columns + ToggleColumnsAction = new KSelectAction( i18n("&Columns"), 0, AC, "togglecolumns" ); + List.clear(); + List.append( i18n("&Values Column") ); + List.append( i18n("&Chars Column") ); + List.append( i18n("&Both Columns") ); + ToggleColumnsAction->setItems( List ); + connect( ToggleColumnsAction, SIGNAL(activated(int)), this, SLOT(slotToggleValueCharColumns(int)) ); + + fitActionSettings(); + + // set our XML-UI resource file + setXMLFile( RCFileName ); +} + + +void KHexEditPart::fitActionSettings() +{ + ShowOffsetColumnAction->setChecked( HexEdit->offsetColumnVisible() ); + ShowUnprintableAction->setChecked( HexEdit->showUnprintable() ); + + CodingAction->setCurrentItem( (int)HexEdit->coding() ); + EncodingAction->setCurrentItem( KCharCodec::codecNames().findIndex(HexEdit->encodingName()) ); + + ResizeStyleAction->setCurrentItem( (int)HexEdit->resizeStyle() ); + + ToggleColumnsAction->setCurrentItem( (int)HexEdit->visibleBufferColumns()-1 ); +} + + +bool KHexEditPart::openFile() +{ + Wrapping.open( m_file ); + HexEdit->setDataBuffer( &Wrapping ); + HexEdit->setCursorPosition( 0 ); + HexEdit->selectAll( false ); + + return true; +} + + + +void KHexEditPart::slotSelectionChanged() +{ + bool State = HexEdit->hasSelectedData(); + CopyAction->setEnabled( State ); +} + + +void KHexEditPart::slotSelectAll() +{ + HexEdit->selectAll( true ); +} + + +void KHexEditPart::slotUnselect() +{ + HexEdit->selectAll( false ); +} + + +void KHexEditPart::slotSetCoding( int Coding ) +{ + HexEdit->setCoding( (KHexEdit::KCoding)Coding ); +} + +void KHexEditPart::slotSetShowUnprintable() +{ + HexEdit->setShowUnprintable( ShowUnprintableAction->isChecked() ); +} + +void KHexEditPart::slotToggleOffsetColumn() +{ + HexEdit->toggleOffsetColumn( ShowOffsetColumnAction->isChecked() ); +} + +void KHexEditPart::slotSetResizeStyle( int ResizeStyle ) +{ + HexEdit->setResizeStyle( (KHexEdit::KResizeStyle)ResizeStyle ); +} + +void KHexEditPart::slotSetEncoding( int Encoding ) +{ + HexEdit->setEncoding( KCharCodec::codecNames()[Encoding] ); +} + +void KHexEditPart::slotToggleValueCharColumns( int VisibleColumns) +{ + HexEdit->showBufferColumns( VisibleColumns+1 ); +} + +#include "khepart.moc" |