diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-28 22:44:34 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-31 23:30:34 +0900 |
commit | f9abd9d505434c9244c03eac708e29a0ca042f6b (patch) | |
tree | 30a197ab4c413849188bc131ff859212e636c821 /src/app/ActionMan/addplaceholderpopup.cpp | |
parent | 14d42d284de233f9937becf3fc9ee0dabede3b21 (diff) | |
download | krusader-r14.1.x.tar.gz krusader-r14.1.x.zip |
Restructure source foldersr14.1.x
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 086012dcad8a976a0dabbb7cbc20c9cb612cdfa9)
Diffstat (limited to 'src/app/ActionMan/addplaceholderpopup.cpp')
-rw-r--r-- | src/app/ActionMan/addplaceholderpopup.cpp | 582 |
1 files changed, 582 insertions, 0 deletions
diff --git a/src/app/ActionMan/addplaceholderpopup.cpp b/src/app/ActionMan/addplaceholderpopup.cpp new file mode 100644 index 0000000..3fe7c29 --- /dev/null +++ b/src/app/ActionMan/addplaceholderpopup.cpp @@ -0,0 +1,582 @@ +// +// 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 <tdelocale.h> +#include <tdefiledialog.h> +#include <tdemessagebox.h> + +// for ParameterDialog +#include "../krusader.h" // for konfig-access +#include "../BookMan/krbookmarkbutton.h" +#include "../GUI/profilemanager.h" + +#include <tqlayout.h> +#include <tqhbox.h> +#include <tqlabel.h> +#include <tqtoolbutton.h> +#include <klineedit.h> +#include <tqcheckbox.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 0xFFFF + + +AddPlaceholderPopup::AddPlaceholderPopup( TQWidget *parent ) : TDEPopupMenu( parent ) { + + _activeSub = new TDEPopupMenu( this ); + _otherSub = new TDEPopupMenu( this ); + _leftSub = new TDEPopupMenu( this ); + _rightSub = new TDEPopupMenu( this ); + _independentSub = new TDEPopupMenu( 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 ) ); + } + } + +} + + +TQString AddPlaceholderPopup::getPlaceholder( const TQPoint& pos ) { + int res = exec( pos ); + if ( res == -1 ) + return TQString(); + + // add the selected flag to the command line + if ( res == EXECUTABLE_ID ) { // did the user need an executable ? + // select an executable + TQString filename = KFileDialog::getOpenFileName(TQString(), TQString(), this); + if (filename != TQString()) + 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 TQString(); +// } + ParameterDialog* parameterDialog = new ParameterDialog( currentPlaceholder, this ); + TQString 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 TQString(); +} + + +//////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////// ParameterDialog //////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////// + +ParameterDialog::ParameterDialog( const exp_placeholder* currentPlaceholder, TQWidget *parent ) : KDialogBase( Plain, i18n("User Action Parameter Dialog"), Default | Ok, Ok, parent ) { + _parameter.clear(); + _parameterCount = currentPlaceholder->parameterCount(); + + TQVBoxLayout* layout = new TQVBoxLayout( plainPage() ); + layout->setAutoAdd( true ); + layout->setSpacing( 11 ); + + new TQLabel( 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() ) ); + } + + TQFrame * line = new TQFrame( plainPage() ); + line->setFrameShape( TQFrame::HLine ); + line->setFrameShadow( TQFrame::Sunken ); + + connect( this, TQ_SIGNAL(defaultClicked()), this, TQ_SLOT(reset()) ); +} + +TQString ParameterDialog::getParameter() { + if ( _parameterCount == 0 ) // meaning no parameters + return TQString(); + + if ( exec() == -1 ) + return TQString(); + + 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 TQString(); + + TQString 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(); +} + +///////////// ParameterText +ParameterText::ParameterText( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + _lineEdit = new KLineEdit( parameter.preset(), this ); + _preset = parameter.preset(); +} + +TQString ParameterText::text() { + return _lineEdit->text(); +} +TQString ParameterText::preset() { + return _preset; +} +void ParameterText::reset() { + _lineEdit->setText( _preset ); +} +bool ParameterText::valid() { + if ( _lineEdit->text().isEmpty() ) + return false; + else + return true; +} + +///////////// ParameterPlaceholder +ParameterPlaceholder::ParameterPlaceholder( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + TQHBox * hbox = new TQHBox( this ); + hbox->setSpacing( 6 ); + _lineEdit = new KLineEdit( hbox ); + _button = new TQToolButton( hbox); + _button->setText( i18n("add") ); + connect( _button, TQ_SIGNAL(clicked()), this, TQ_SLOT(addPlaceholder()) ); +} + +TQString ParameterPlaceholder::text() { + return _lineEdit->text(); +} +TQString ParameterPlaceholder::preset() { + return TQString(); +} +void ParameterPlaceholder::reset() { + _lineEdit->setText( TQString() ); +} +bool ParameterPlaceholder::valid() { + if ( _lineEdit->text().isEmpty() ) + return false; + else + return true; +} +void ParameterPlaceholder::addPlaceholder() { + AddPlaceholderPopup* popup = new AddPlaceholderPopup( this ); + TQString exp = popup->getPlaceholder( mapToGlobal( TQPoint( _button->pos().x() + _button->width() + 6, _button->pos().y() + _button->height() / 2 ) ) ); + _lineEdit->insert( exp ); + delete popup; +} + +///////////// ParameterYes +ParameterYes::ParameterYes( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + _checkBox = new TQCheckBox( i18n( parameter.description().utf8() ), this ); + _checkBox->setChecked( true ); +} + +TQString ParameterYes::text() { + if ( _checkBox->isChecked() ) + return TQString(); + else + return "No"; +} +TQString ParameterYes::preset() { + return TQString(); +} +void ParameterYes::reset() { + _checkBox->setChecked( true ); +} +bool ParameterYes::valid() { + return true; +} + +///////////// ParameterNo +ParameterNo::ParameterNo( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + _checkBox = new TQCheckBox( i18n( parameter.description().utf8() ), this ); + _checkBox->setChecked( false ); +} + +TQString ParameterNo::text() { + if ( _checkBox->isChecked() ) + return "Yes"; + else + return TQString(); +} +TQString ParameterNo::preset() { + return TQString(); +} +void ParameterNo::reset() { + _checkBox->setChecked( false ); +} +bool ParameterNo::valid() { + return true; +} + +///////////// ParameterFile +ParameterFile::ParameterFile( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + TQHBox * hbox = new TQHBox( this ); + hbox->setSpacing( 6 ); + _lineEdit = new KLineEdit( hbox ); + _button = new TQToolButton( hbox); + TDEIconLoader *iconLoader = new TDEIconLoader(); + _button->setPixmap( iconLoader->loadIcon( "document-open", TDEIcon::Toolbar, 16 ) ); + connect( _button, TQ_SIGNAL(clicked()), this, TQ_SLOT(addFile()) ); +} + +TQString ParameterFile::text() { + return _lineEdit->text(); +} +TQString ParameterFile::preset() { + return TQString(); +} +void ParameterFile::reset() { + _lineEdit->setText( TQString() ); +} +bool ParameterFile::valid() { + if ( _lineEdit->text().isEmpty() ) + return false; + else + return true; +} +void ParameterFile::addFile() { + TQString filename = KFileDialog::getOpenFileName(TQString(), TQString(), this); + _lineEdit->insert( filename ); +} + +///////////// ParameterChoose +ParameterChoose::ParameterChoose( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + _combobox = new KComboBox( this ); + _combobox->insertStringList( TQStringList::split( ";", parameter.preset().section(":", 1) ) ); +} + +TQString ParameterChoose::text() { + return _combobox->currentText(); +} +TQString ParameterChoose::preset() { + return _combobox->text( 0 ); +} +void ParameterChoose::reset() { + _combobox->setCurrentItem( 0 ); +} +bool ParameterChoose::valid() { + return true; +} + +///////////// ParameterSelect +ParameterSelect::ParameterSelect( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + _combobox = new KComboBox( this ); + _combobox->setEditable( true ); + + krConfig->setGroup( "Private" ); + TQStrList lst; + int i = krConfig->readListEntry( "Predefined Selections", lst ); + if ( i > 0 ) + _combobox->insertStrList( lst ); + + _combobox->setCurrentText( "*" ); +} + +TQString ParameterSelect::text() { + return _combobox->currentText(); +} +TQString ParameterSelect::preset() { + return "*"; +} +void ParameterSelect::reset() { + _combobox->setCurrentText( "*" ); +} +bool ParameterSelect::valid() { + return true; +} + +///////////// ParameterGoto +ParameterGoto::ParameterGoto( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + TQHBox * hbox = new TQHBox( this ); + hbox->setSpacing( 6 ); + _lineEdit = new KLineEdit( hbox ); + _lineEdit->setCompletionObject( new KURLCompletion( KURLCompletion::DirCompletion ) ); + _dirButton = new TQToolButton( hbox ); + TDEIconLoader *iconLoader = new TDEIconLoader(); + _dirButton->setPixmap( iconLoader->loadIcon( "document-open", TDEIcon::Toolbar, 16 ) ); + connect( _dirButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(setDir()) ); + _placeholderButton = new TQToolButton( hbox); + _placeholderButton->setText( i18n("add") ); + connect( _placeholderButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(addPlaceholder()) ); +} + +TQString ParameterGoto::text() { + return _lineEdit->text(); +} +TQString ParameterGoto::preset() { + return TQString(); +} +void ParameterGoto::reset() { + _lineEdit->setText( TQString() ); +} +bool ParameterGoto::valid() { + if ( _lineEdit->text().isEmpty() ) + return false; + else + return true; +} +void ParameterGoto::setDir() { + TQString folder = KFileDialog::getExistingDirectory(TQString(), this); + _lineEdit->setText( folder ); +} +void ParameterGoto::addPlaceholder() { + AddPlaceholderPopup* popup = new AddPlaceholderPopup( this ); + TQString exp = popup->getPlaceholder( mapToGlobal( TQPoint( _placeholderButton->pos().x() + _placeholderButton->width() + 6, _placeholderButton->pos().y() + _placeholderButton->height() / 2 ) ) ); + _lineEdit->insert( exp ); + delete popup; +} + +///////////// ParameterSyncprofile +ParameterSyncprofile::ParameterSyncprofile( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + _combobox = new KComboBox( this ); + + _combobox->insertStringList( ProfileManager::availableProfiles("SynchronizerProfile") ); +} + +TQString ParameterSyncprofile::text() { + return _combobox->currentText(); +} +TQString ParameterSyncprofile::preset() { + return _combobox->text( 0 ); +} +void ParameterSyncprofile::reset() { + _combobox->setCurrentItem( 0 ); +} +bool ParameterSyncprofile::valid() { + return true; +} + +///////////// ParameterSearch +ParameterSearch::ParameterSearch( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + _combobox = new KComboBox( this ); + + _combobox->insertStringList( ProfileManager::availableProfiles("SearcherProfile") ); +} + +TQString ParameterSearch::text() { + return _combobox->currentText(); +} +TQString ParameterSearch::preset() { + return _combobox->text( 0 ); +} +void ParameterSearch::reset() { + _combobox->setCurrentItem( 0 ); +} +bool ParameterSearch::valid() { + return true; +} + +///////////// ParameterPanelprofile +ParameterPanelprofile::ParameterPanelprofile( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQVBoxLayout* layout = new TQVBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + _combobox = new KComboBox( this ); + + _combobox->insertStringList( ProfileManager::availableProfiles("Panel") ); +} + +TQString ParameterPanelprofile::text() { + return _combobox->currentText(); +} +TQString ParameterPanelprofile::preset() { + return _combobox->text( 0 ); +} +void ParameterPanelprofile::reset() { + _combobox->setCurrentItem( 0 ); +} +bool ParameterPanelprofile::valid() { + return true; +} + +///////////// ParameterInt +ParameterInt::ParameterInt( const exp_parameter& parameter, TQWidget* parent ) : ParameterBase( parameter, parent ) { + TQHBoxLayout* layout = new TQHBoxLayout( this ); + layout->setAutoAdd( true ); + layout->setSpacing( 6 ); + + new TQLabel( i18n( parameter.description().utf8() ), this ); + _spinbox = new KIntSpinBox( this ); + TQStringList para = TQStringList::split( ";", parameter.preset().section(":", 1) ); + + _spinbox->setMinValue( para[0].toInt() ); + _spinbox->setMaxValue( para[1].toInt() ); + _spinbox->setLineStep( para[2].toInt() ); + _spinbox->setValue( para[3].toInt() ); + + _default = _spinbox->value(); +} + +TQString ParameterInt::text() { + return _spinbox->text(); +} +TQString ParameterInt::preset() { + return TQString( "%1" ).arg( _default ); +} +void ParameterInt::reset() { + return _spinbox->setValue( _default ); +} +bool ParameterInt::valid() { + return true; +} + + +#include "addplaceholderpopup.moc" |