?? addplaceholderpopup.cpp
字號(hào):
//// C++ Implementation: addplaceholderpopup//// Description: ////// Author: Shie Erlich and Rafi Yanai <>, (C) 2004//// Copyright: See COPYING file that comes with this distribution////#include "addplaceholderpopup.h"#include "../UserAction/expander.h"#include <klocale.h>#include <kfiledialog.h>#include <kmessagebox.h>// for ParameterDialog#include "../krusader.h" // for konfig-access#include "../BookMan/krbookmarkbutton.h"#include "../GUI/profilemanager.h"#include <qlayout.h>#include <qhbox.h>#include <qlabel.h>#include <qtoolbutton.h>#include <klineedit.h>#include <qcheckbox.h>#include <kiconloader.h>#include <kcombobox.h>#include <kurlcompletion.h> #include <knuminput.h>#include <kdebug.h>#define ACTIVE_MASK 0x0100#define OTHER_MASK 0x0200#define LEFT_MASK 0x0400#define RIGHT_MASK 0x0800#define INDEPENDENT_MASK 0x1000#define EXECUTABLE_ID 0xFFFFAddPlaceholderPopup::AddPlaceholderPopup( QWidget *parent ) : KPopupMenu( parent ) { _activeSub = new KPopupMenu( this ); _otherSub = new KPopupMenu( this ); _leftSub = new KPopupMenu( this ); _rightSub = new KPopupMenu( this ); _independentSub = new KPopupMenu( this ); insertItem( i18n( "Active panel" ), _activeSub ); insertItem( i18n( "Other panel" ), _otherSub ); insertItem( i18n( "Left panel" ), _leftSub ); insertItem( i18n( "Right panel" ), _rightSub ); insertItem( i18n( "Panel independent" ), _independentSub ); _independentSub->insertItem( i18n( "Choose executable..." ), EXECUTABLE_ID ); _independentSub->insertSeparator(); // read the expressions array from the user menu and populate menus Expander expander; for ( int i = 0; i < expander.placeholderCount(); ++i ) { if ( expander.placeholder( i )->expression().isEmpty() ) { if ( expander.placeholder( i )->needPanel() ) { _activeSub->insertSeparator(); _otherSub->insertSeparator(); _leftSub->insertSeparator(); _rightSub->insertSeparator(); } else _independentSub->insertSeparator(); } else { if ( expander.placeholder( i )->needPanel() ) { _activeSub->insertItem( i18n( expander.placeholder( i )->description().utf8() ), ( i | ACTIVE_MASK ) ); _otherSub->insertItem( i18n( expander.placeholder( i )->description().utf8() ), ( i | OTHER_MASK ) ); _leftSub->insertItem( i18n( expander.placeholder( i )->description().utf8() ), ( i | LEFT_MASK ) ); _rightSub->insertItem( i18n( expander.placeholder( i )->description().utf8() ), ( i | RIGHT_MASK ) ); } else _independentSub->insertItem( i18n( expander.placeholder( i )->description().utf8() ), ( i | INDEPENDENT_MASK ) ); } }}QString AddPlaceholderPopup::getPlaceholder( const QPoint& pos ) { int res = exec( pos ); if ( res == -1 ) return QString::null; // add the selected flag to the command line if ( res == EXECUTABLE_ID ) { // did the user need an executable ? // select an executable QString filename = KFileDialog::getOpenFileName(QString::null, QString::null, this); if (filename != QString::null) return filename + " "; // with extra space //return filename; // without extra space } else { // user selected something from the menus Expander expander; const exp_placeholder* currentPlaceholder = expander.placeholder( res & ~( ACTIVE_MASK | OTHER_MASK | LEFT_MASK | RIGHT_MASK | INDEPENDENT_MASK ) );// if ( ¤tPlaceholder->expFunc == 0 ) {// KMessageBox::sorry( this, "BOFH Excuse #93:\nFeature not yet implemented" );// return QString::null;// } ParameterDialog* parameterDialog = new ParameterDialog( currentPlaceholder, this ); QString panel, parameter = parameterDialog->getParameter(); delete parameterDialog; // indicate the panel with 'a' 'o', 'l', 'r' or '_'. if ( res & ACTIVE_MASK ) panel = "a"; else if ( res & OTHER_MASK ) panel = "o"; else if ( res & LEFT_MASK ) panel = "l"; else if ( res & RIGHT_MASK ) panel = "r"; else if ( res & INDEPENDENT_MASK ) panel = "_"; //return "%" + panel + currentPlaceholder->expression() + parameter + "% "; // with extra space return "%" + panel + currentPlaceholder->expression() + parameter + "%"; // without extra space } return QString::null;}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ParameterDialog ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ParameterDialog::ParameterDialog( const exp_placeholder* currentPlaceholder, QWidget *parent ) : KDialogBase( Plain, i18n("User Action Parameter Dialog"), Default | Ok, Ok, parent ) { _parameter.clear(); _parameterCount = currentPlaceholder->parameterCount(); QVBoxLayout* layout = new QVBoxLayout( plainPage() ); layout->setAutoAdd( true ); layout->setSpacing( 11 ); new QLabel( i18n("This placeholder allows some parameter:"), plainPage(), "intro" ); for (int i = 0; i < _parameterCount; ++i ) { if ( currentPlaceholder->parameter( i ).preset() == "__placeholder" ) _parameter.append( new ParameterPlaceholder( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__yes" ) _parameter.append( new ParameterYes( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__no" ) _parameter.append( new ParameterNo( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__file" ) _parameter.append( new ParameterFile( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset().find( "__choose" ) != -1 ) _parameter.append( new ParameterChoose( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__select" ) _parameter.append( new ParameterSelect( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__goto" ) _parameter.append( new ParameterGoto( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__syncprofile" ) _parameter.append( new ParameterSyncprofile( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__searchprofile" ) _parameter.append( new ParameterSearch( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset() == "__panelprofile" ) _parameter.append( new ParameterPanelprofile( currentPlaceholder->parameter( i ), plainPage() ) ); else if ( currentPlaceholder->parameter( i ).preset().find( "__int" ) != -1 ) _parameter.append( new ParameterInt( currentPlaceholder->parameter( i ), plainPage() ) ); else _parameter.append( new ParameterText( currentPlaceholder->parameter( i ), plainPage() ) ); } QFrame * line = new QFrame( plainPage() ); line->setFrameShape( QFrame::HLine ); line->setFrameShadow( QFrame::Sunken ); connect( this, SIGNAL(defaultClicked()), this, SLOT(reset()) );}QString ParameterDialog::getParameter() { if ( _parameterCount == 0 ) // meaning no parameters return QString::null; if ( exec() == -1 ) return QString::null; int lastParameter = _parameterCount; while ( --lastParameter > -1 ) { if ( _parameter[ lastParameter ]->text() != _parameter[ lastParameter ]->preset() || _parameter[ lastParameter ]->nessesary() ) break; } if ( lastParameter < 0) // all parameters have default-values return QString::null; QString parameter = "("; for ( int i = 0; i <= lastParameter; ++i ) { if ( i > 0 ) parameter += ", "; parameter += "\"" + _parameter[ i ]->text().replace( "\"", "\\\"" ) + "\""; } parameter += ")"; return parameter;}void ParameterDialog::reset() { for ( int i = 0; i < _parameterCount; ++i ) _parameter[ i ]->reset();}void ParameterDialog::slotOk() { bool valid = true; for (int i = 0; i < _parameterCount; ++i ) { if ( _parameter[ i ]->nessesary() && ! _parameter[ i ]->valid() ) valid = false; } if ( valid ) accept();}///////////// ParameterTextParameterText::ParameterText( const exp_parameter& parameter, QWidget* parent ) : ParameterBase( parameter, parent ) { QVBoxLayout* layout = new QVBoxLayout( this ); layout->setAutoAdd( true ); layout->setSpacing( 6 ); new QLabel( i18n( parameter.description().utf8() ), this ); _lineEdit = new KLineEdit( parameter.preset(), this ); _preset = parameter.preset();}QString ParameterText::text() { return _lineEdit->text();} QString ParameterText::preset() { return _preset;} void ParameterText::reset() { _lineEdit->setText( _preset );} bool ParameterText::valid() { if ( _lineEdit->text().isEmpty() ) return false; else return true;} ///////////// ParameterPlaceholderParameterPlaceholder::ParameterPlaceholder( const exp_parameter& parameter, QWidget* parent ) : ParameterBase( parameter, parent ) { QVBoxLayout* layout = new QVBoxLayout( this ); layout->setAutoAdd( true ); layout->setSpacing( 6 ); new QLabel( i18n( parameter.description().utf8() ), this ); QHBox * hbox = new QHBox( this ); hbox->setSpacing( 6 ); _lineEdit = new KLineEdit( hbox ); _button = new QToolButton( hbox); _button->setText( i18n("add") ); connect( _button, SIGNAL(clicked()), this, SLOT(addPlaceholder()) );}QString ParameterPlaceholder::text() { return _lineEdit->text();}QString ParameterPlaceholder::preset() { return QString::null;} void ParameterPlaceholder::reset() { _lineEdit->setText( QString::null );} bool ParameterPlaceholder::valid() { if ( _lineEdit->text().isEmpty() ) return false; else return true;} void ParameterPlaceholder::addPlaceholder() { AddPlaceholderPopup* popup = new AddPlaceholderPopup( this ); QString exp = popup->getPlaceholder( mapToGlobal( QPoint( _button->pos().x() + _button->width() + 6, _button->pos().y() + _button->height() / 2 ) ) ); _lineEdit->insert( exp ); delete popup;}///////////// ParameterYesParameterYes::ParameterYes( const exp_parameter& parameter, QWidget* parent ) : ParameterBase( parameter, parent ) { QVBoxLayout* layout = new QVBoxLayout( this ); layout->setAutoAdd( true ); layout->setSpacing( 6 ); _checkBox = new QCheckBox( i18n( parameter.description().utf8() ), this ); _checkBox->setChecked( true );
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -