diff options
Diffstat (limited to 'src/app/Dialogs/krspecialwidgets.cpp')
-rw-r--r-- | src/app/Dialogs/krspecialwidgets.cpp | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/src/app/Dialogs/krspecialwidgets.cpp b/src/app/Dialogs/krspecialwidgets.cpp new file mode 100644 index 0000000..ecc5e28 --- /dev/null +++ b/src/app/Dialogs/krspecialwidgets.cpp @@ -0,0 +1,239 @@ +/*************************************************************************** + krspecialwidgets.cpp + ------------------- +copyright : (C) 2000 by Shie Erlich & Rafi Yanai +e-mail : krusader@users.sourceforge.net +web site : http://krusader.sourceforge.net +--------------------------------------------------------------------------- +Description +*************************************************************************** + +A + + db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b. + 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D + 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY' + 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b + 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88. + YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD + + S o u r c e F i l e + +*************************************************************************** +* * +* 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. * +* * +***************************************************************************/ + + + +#include "krspecialwidgets.h" +#include "krmaskchoice.h" +#include "newftpgui.h" +#include "../krusader.h" +#include "../MountMan/kmountman.h" +#include <math.h> +#include <tdefileitem.h> +#include <tdelocale.h> +#include <klineedit.h> +#include <kdebug.h> + +///////////////////////////////////////////////////////////////////////////// +/////////////////////// Pie related widgets ///////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// The pie-related widgets use hard-coded coordinates to create the look. +// This is ok since the whole widget is fitted into an existing view and thus +// no re-alignments are needed. + +#define LEFT 10 +#define BOTTOM 150 +#define WIDTH 120 +#define HEIGHT 40 +#define Z_HEIGHT 10 +#define STARTANGLE 0 +#define DEG(x) (16*(x)) + +TQColor KRPie::colors[ 12 ] = {TQt::red, TQt::blue, TQt::green, TQt::cyan, TQt::magenta, TQt::gray, + TQt::black, TQt::white, TQt::darkRed, TQt::darkBlue, TQt::darkMagenta, + TQt::darkCyan}; + +////////////////////////////////////////////////////////////////////////////// +/////////////// KRFSDisplay - Filesystem / Freespace Display ///////////////// +////////////////////////////////////////////////////////////////////////////// +// This is the full constructor: use it for a mounted filesystem +KRFSDisplay::KRFSDisplay( TQWidget *parent, TQString _alias, TQString _realName, + TDEIO::filesize_t _total, TDEIO::filesize_t _free ) : TQWidget( parent ), totalSpace( _total ), + freeSpace( _free ), alias( _alias ), realName( _realName ), mounted( true ), +empty( false ), supermount( false ) { + resize( 150, 200 ); + show(); +} + +// Use this one for an unmounted filesystem +KRFSDisplay::KRFSDisplay( TQWidget *parent, TQString _alias, TQString _realName, bool sm ) : + TQWidget( parent ), alias( _alias ), realName( _realName ), mounted( false ), +empty( false ), supermount( sm ) { + resize( 150, 200 ); + show(); +} + +// This is used only when an empty widget needs to be displayed (for example: +// when filesystem statistics haven't been calculated yet) +KRFSDisplay::KRFSDisplay( TQWidget *parent ) : TQWidget( parent ), empty( true ) { + resize( 150, 200 ); + show(); +} + + +// The main painter! +void KRFSDisplay::paintEvent( TQPaintEvent * ) { + TQPainter paint( this ); + if ( !empty ) { + // create the text + // first, name and location + paint.setFont( TQFont( "helvetica", 12, TQFont::Bold ) ); + paint.drawText( 10, 20, alias ); + paint.setFont( TQFont( "helvetica", 12, TQFont::Normal ) ); + paint.drawText( 10, 37, "(" + realName + ")" ); + if ( mounted ) { // incase the filesystem is already mounted + // second, the capacity + paint.drawText( 10, 70, i18n( "Capacity: " ) + TDEIO::convertSizeFromKB( totalSpace ) ); + // third, the 2 boxes (used, free) + TQPen systemPen = paint.pen(); + paint.setPen( TQt::black ); + paint.drawRect( 10, 90, 10, 10 ); + paint.fillRect( 11, 91, 8, 8, TQBrush( TQt::gray ) ); + paint.drawRect( 10, 110, 10, 10 ); + paint.fillRect( 11, 111, 8, 8, TQBrush( TQt::white ) ); + // now, the text for the boxes + paint.setPen( systemPen ); + paint.drawText( 25, 100, i18n( "Used: " ) + TDEIO::convertSizeFromKB( totalSpace - freeSpace ) ); + paint.drawText( 25, 120, i18n( "Free: " ) + TDEIO::convertSizeFromKB( freeSpace ) ); + // first, create the empty pie + // bottom... + paint.setPen( TQt::black ); + paint.setBrush( TQt::white ); + paint.drawPie( LEFT, BOTTOM, WIDTH, HEIGHT, STARTANGLE, DEG( 360 ) ); + // body... + paint.setPen( TQt::lightGray ); + for ( int i = 1; i < Z_HEIGHT; ++i ) + paint.drawPie( LEFT, BOTTOM - i, WIDTH, HEIGHT, STARTANGLE, DEG( 360 ) ); + // side lines... + paint.setPen( TQt::black ); + paint.drawLine( LEFT, BOTTOM + HEIGHT / 2, LEFT, BOTTOM + HEIGHT / 2 - Z_HEIGHT ); + paint.drawLine( LEFT + WIDTH, BOTTOM + HEIGHT / 2, LEFT + WIDTH, BOTTOM + HEIGHT / 2 - Z_HEIGHT ); + // top of the pie + paint.drawPie( LEFT, BOTTOM - Z_HEIGHT, WIDTH, HEIGHT, STARTANGLE, DEG( 360 ) ); + // the "used space" slice + float i = ( ( float ) ( totalSpace - freeSpace ) / ( totalSpace ) ) * 360.0; + paint.setBrush( TQt::gray ); + paint.drawPie( LEFT, BOTTOM - Z_HEIGHT, WIDTH, HEIGHT, STARTANGLE, ( int ) DEG( i ) ); + // if we need to draw a 3d stripe ... + if ( i > 180.0 ) { + for ( int j = 1; j < Z_HEIGHT; ++j ) + paint.drawArc( LEFT, BOTTOM - j, WIDTH, HEIGHT, STARTANGLE - 16 * 180, ( int ) ( DEG( i - 180.0 ) ) ); + } + } else { // if the filesystem is unmounted... + paint.setFont( TQFont( "helvetica", 12, TQFont::Bold ) ); + paint.drawText( 10, 60, i18n( "Not mounted." ) ); + } + } else { // if the widget is in empty situation... + + } +} + +//////////////////////////////////////////////////////////////////////////////// +KRPie::KRPie( TDEIO::filesize_t _totalSize, TQWidget *parent ) : TQWidget( parent, 0 ), totalSize( _totalSize ) { + slices.setAutoDelete( true ); // kill items when they are removed + slices.append( new KRPieSlice( 100, TQt::yellow, "DEFAULT" ) ); + sizeLeft = totalSize; + resize( 300, 300 ); +} + +void KRPie::paintEvent( TQPaintEvent * ) { + TQPainter paint( this ); + // now create the slices + KRPieSlice *slice; + float sAngle = STARTANGLE; + for ( slice = slices.first(); slice != 0; slice = slices.next() ) { + paint.setBrush( slice->getColor() ); + paint.setPen( slice->getColor() ); + // angles are negative to create a clock-wise drawing of slices + float angle = -( slice->getPerct() / 100 * 360 ) * 16; + for ( int i = 1; i < Z_HEIGHT; ++i ) + paint.drawPie( LEFT, BOTTOM + i, WIDTH, HEIGHT, ( int ) sAngle, ( int ) angle ); + sAngle += angle; + } + paint.setPen( TQt::yellow ); // pen + paint.setBrush( TQt::yellow ); // fill + // for (int i=1; i<Z_HEIGHT; ++i) + // paint.drawPie(LEFT,BOTTOM+i,WIDTH,HEIGHT,sAngle,360*16-(STARTANGLE-sAngle)); + sAngle = STARTANGLE; + for ( slice = slices.first(); slice != 0; slice = slices.next() ) { + paint.setBrush( slice->getColor() ); + paint.setPen( slice->getColor() ); + // angles are negative to create a clock-wise drawing of slices + float angle = -( slice->getPerct() / 100 * 360 ) * 16; + paint.drawPie( LEFT, BOTTOM, WIDTH, HEIGHT, ( int ) sAngle, ( int ) angle ); + sAngle += angle; + } + + + paint.setPen( TQt::black ); + // the pie + // paint.drawPie(LEFT,BOTTOM,WIDTH,HEIGHT,STARTANGLE,360*16); + ///////////////////////// end of empty pie ///////////////////////// + // now, the pie is ready to draw slices on... + // to make a good look on the perimiter, draw another black circle + paint.setPen( TQt::black ); + paint.drawArc( LEFT, BOTTOM, WIDTH, HEIGHT, STARTANGLE, 360 * 16 ); + +} + +void KRPie::addSlice( TDEIO::filesize_t size, TQString label ) { + int i = ( slices.count() % 12 ); + slices.removeLast(); + slices.append( new KRPieSlice( size * 100 / totalSize, colors[ i ], label ) ); + sizeLeft -= size; + slices.append( new KRPieSlice( sizeLeft * 100 / totalSize, TQt::yellow, "DEFAULT" ) ); +} + +//////////////////////////////////////////////////// +/////////////////// KrQuickSearch ///////////////// +//////////////////////////////////////////////////// +KrQuickSearch::KrQuickSearch( TQWidget *parent, const char * name ) : KLineEdit( parent, name ) {} + +void KrQuickSearch::myKeyPressEvent( TQKeyEvent *e ) { + switch ( e->key() ) { + case Key_Escape: + emit stop( 0 ); + break; + case Key_Return: + case Key_Enter: + case Key_Tab: + case Key_Right: + case Key_Left: + emit stop( e ); + break; + case Key_Down: + otherMatching( text(), 1 ); + break; + case Key_Up: + otherMatching( text(), -1 ); + break; + case Key_Insert: + case Key_Home: + case Key_End: + process( e ); + break; + default: + keyPressEvent( e ); + } +} + + + +#include "krspecialwidgets.moc" |