Source Code (Use browser search to find items of interest.)
Class Index
kdesktop'Minicli (./kdebase/kdesktop/minicli.h:24)
class Minicli : public QDialog
{
Q_OBJECT
public:
Minicli( QWidget *parent=0, const char *name=0 );
virtual ~Minicli();
public slots:
bool setCWD( const QString& );
void cleanup();
signals:
void aboutToHide();
protected:
void loadConfig();
void saveConfig();
void loadStandardGUI();
void loadTraditionalGUI(){};
void keyPressEvent( QKeyEvent * );
void closeEvent( QCloseEvent* );
void hideEvent ( QHideEvent* );
private slots:
void slotCmdChanged( const QString& );
void slotReturnPressed( const QString& );
void slotTerminalToggled( bool );
void slotParseTimer();
void run_command();
private:
QLabel *m_runIcon;
QCheckBox* m_terminalBox;
QTimer* m_parseTimer;
QString m_strCWD;
uint m_iMaxHistory;
KComboBox* m_runCombo;
KCompletion* m_pCompletion;
};
kdesktop'Minicli::Minicli() (./kdebase/kdesktop/minicli.cpp:34)
Minicli::Minicli( QWidget *parent, const char *name)
:QDialog( parent, name )
{
m_pCompletion = new KCompletion();
m_strCWD = QString::null;
loadConfig();
// TODO: Should be invoked from the loadConfig. Need to
// make it a DCOP client as well so that GUI changes from
// control panel can be reflected immediately!!
loadStandardGUI();
}
kdesktop'Minicli::~Minicli() (./kdebase/kdesktop/minicli.cpp:46)
Minicli::~Minicli()
{
delete m_pCompletion;
m_pCompletion = 0; // Set it to proper NULL pointer! We play nice :))
}
kdesktop'Minicli::loadStandardGUI() (./kdebase/kdesktop/minicli.cpp:52)
void Minicli::loadStandardGUI()
{
QVBoxLayout* vbox = new QVBoxLayout( this );
setIcon(SmallIcon("exec"));
setCaption( i18n("Run Command") );
vbox->setResizeMode( QLayout::Fixed );
vbox->setSpacing( KDialog::spacingHint() );
vbox->setMargin( KDialog::marginHint() );
QHBox *hBox = new QHBox( this );
CHECK_PTR(hBox);
vbox->addWidget( hBox );
hBox->setSpacing( KDialog::marginHint() );
m_runIcon = new QLabel( hBox );
CHECK_PTR(m_runIcon);
m_runIcon->setPixmap(DesktopIcon("go"));
m_runIcon->setFixedSize(m_runIcon->pixmap()->size()); // avoid layout changes when only a non-medium sized icon is found
m_runIcon->setAlignment(AlignCenter);
QLabel *label = new QLabel( i18n("Enter the name of the program or the command you wish to execute.\n"
"Check the \"Run in Terminal\" box if program is not graphical."), hBox);
CHECK_PTR(label);
hBox = new QHBox( this );
vbox->addWidget( hBox );
CHECK_PTR(hBox);
hBox->setSpacing( KDialog::marginHint() );
label = new QLabel(i18n("&Command:"), hBox);
CHECK_PTR(label);
label->setFixedSize(label->sizeHint());
m_runCombo = new KComboBox( true, hBox );
CHECK_PTR(m_runCombo);
if( m_pCompletion )
{
m_runCombo->setCompletionObject( m_pCompletion );
m_runCombo->setCompletionMode( m_pCompletion->completionMode() ); //sync completion modes.
m_runCombo->insertStringList( m_pCompletion->items() ); // Also add it into completion object.
}
m_runCombo->setDuplicatesEnabled( false ); // Avoid duplicate entries.
m_runCombo->setInsertionPolicy( QComboBox::AtTop ); // Insert at the new enteries at the top.
m_runCombo->setMaxCount( m_iMaxHistory ); // Limit entry into box to defined max.
connect( m_runCombo, SIGNAL( textChanged( const QString& ) ), SLOT( slotCmdChanged( const QString& ) ) );
connect( m_runCombo, SIGNAL( returnPressed( const QString& ) ), SLOT( slotReturnPressed( const QString& ) ) );
connect( this, SIGNAL( aboutToHide() ), m_runCombo, SLOT( clearEdit() ) );
label->setBuddy(m_runCombo);
m_parseTimer = new QTimer(this);
CHECK_PTR(m_parseTimer);
connect(m_parseTimer, SIGNAL(timeout()), SLOT(slotParseTimer()));
hBox = new QHBox(this);
CHECK_PTR(hBox);
vbox->addWidget( hBox );
hBox->setSpacing( KDialog::marginHint() );
m_terminalBox = new QCheckBox(i18n("Run in &Terminal"), hBox);
CHECK_PTR(m_terminalBox);
connect(m_terminalBox, SIGNAL(toggled(bool)), SLOT(slotTerminalToggled(bool)));
KButtonBox *bbox = new KButtonBox(hBox);
CHECK_PTR(bbox);
bbox->addStretch();
QPushButton *runButton = bbox->addButton(i18n("&Run"), false);
CHECK_PTR(runButton);
runButton->setDefault(true);
connect(runButton, SIGNAL(clicked()), this, SLOT(run_command()));
QPushButton *cancelButton = bbox->addButton(i18n("Cancel"), false);
CHECK_PTR(cancelButton);
connect(cancelButton, SIGNAL(clicked()), this, SLOT(cleanup()));
connect(cancelButton, SIGNAL(clicked()), m_runCombo, SLOT(clearEdit()));
m_runCombo->clearEdit();
m_runCombo->setFocus();
bbox->layout();
move( QApplication::desktop()->width()/2 - width()/2,
QApplication::desktop()->height()/2 - height()/2);
}
kdesktop'Minicli::loadConfig() (./kdebase/kdesktop/minicli.cpp:135)
void Minicli::loadConfig()
{
KConfig *config = KGlobal::config();
config->setGroup("MiniCli");
QStringList hist = config->readListEntry("History");
m_iMaxHistory = config->readNumEntry("HistoryLength", 50);
if ( hist.count() > m_iMaxHistory )
for ( QStringList::Iterator it = hist.at( m_iMaxHistory ); it != hist.end(); it = hist.remove(it) );
m_pCompletion->setItems( hist ); // load the list into the completion object.
KGlobalSettings::Completion comp = ( KGlobalSettings::Completion) config->readNumEntry("CompletionMode", KGlobalSettings::completionMode());
m_pCompletion->setCompletionMode( comp );
}
kdesktop'Minicli::saveConfig() (./kdebase/kdesktop/minicli.cpp:148)
void Minicli::saveConfig()
{
if( m_pCompletion )
{
// save history list (M.H.)
KConfig *config = KGlobal::config();
config->setGroup("MiniCli");
config->writeEntry( "History", m_pCompletion->items() );
config->writeEntry( "CompletionMode", m_pCompletion->completionMode() );
config->sync();
}
}
kdesktop'Minicli::hideEvent() (./kdebase/kdesktop/minicli.cpp:161)
void Minicli::hideEvent( QHideEvent* ev )
{
emit aboutToHide();
QWidget::hideEvent( ev );
}
kdesktop'Minicli::setCWD() (./kdebase/kdesktop/minicli.cpp:167)
bool Minicli::setCWD( const QString& cwd )
{
QDir d( cwd );
if( d.exists() )
{
m_strCWD = cwd;
if( m_strCWD.left(1) != '/' ) m_strCWD += '/';
return true;
}
return false;
}
kdesktop'Minicli::keyPressEvent() (./kdebase/kdesktop/minicli.cpp:180)
void Minicli::keyPressEvent(QKeyEvent *kev)
{
int a = ((QKeyEvent*)kev)->ascii();
// ^C, EOF, ESC
if (a == 3 || a == 4 || a == 27)
{
cleanup();
kev->accept();
return;
}
if (kev->key() == Key_Return || kev->key() == Key_Enter)
{
kev->accept();
run_command();
return;
}
kev->ignore();
}
kdesktop'Minicli::run_command() (./kdebase/kdesktop/minicli.cpp:199)
void Minicli::run_command()
{
kapp->propagateSessionManager();
QString s;
if( m_strCWD.isNull() ) s = m_runCombo->currentText().simplifyWhiteSpace();
else s = m_strCWD + m_runCombo->currentText().simplifyWhiteSpace();
// TODO: krun, klauncher, whatever will implement launching feedback
if (s == "logout")
{
bool shutdown = kapp->requestShutDown();
if( !shutdown )
KMessageBox::error( 0, i18n("Could not logout properly. The sesion manager cannot\n"
"be contacted. You can try to force a shutdown by pressing\n"
"the CTRL, SHIFT and BACKSPACE keys at the same time. Note\n"
"however that your current session will not be saved with a\n"
"forced shutdown." ) );
}
else if ( !s.isEmpty() )
{
KShellProcess proc;
if (m_terminalBox->isChecked()) proc << "konsole -e \"" + s + '"';
else
{
KURIFilterData data ( s );
KURIFilter::self()->filterURI( data, "ShortURIFilter" );
debug( "Original url : %s\nFiltered url : %s", s.latin1(), data.uri().url().latin1() );
switch( data.uriType() )
{
case KURIFilterData::LOCAL_FILE:
case KURIFilterData::LOCAL_DIR:
case KURIFilterData::NET_PROTOCOL:
proc << "kfmclient exec \"" + data.uri().url() + '"';
break;
case KURIFilterData::EXECUTABLE:
proc << data.uri().url();
break;
case KURIFilterData::SHELL:
proc << data.uri().url();
break;
case KURIFilterData::HELP:
// FIXME parent should be this but somehow that screws our layout (malte)
KMessageBox::sorry( 0, i18n("This is currently not supported") );
return;
case KURIFilterData::ERROR:
KMessageBox::error( 0, data.uri().url() );
return;
default:
KMessageBox::sorry( 0, i18n("The program name or command: %1\ncannot be found.").arg( data.uri().url() ) );
return;
}
}
proc.start(KShellProcess::DontCare);
}
cleanup();
}
kdesktop'Minicli::cleanup() (./kdebase/kdesktop/minicli.cpp:256)
void Minicli::cleanup()
{
hide();
saveConfig();
if( m_runCombo )
{
m_terminalBox->setChecked( false );
m_runIcon->setPixmap( DesktopIcon("go") );
m_runCombo->setFocus();
}
}
kdesktop'Minicli::closeEvent() (./kdebase/kdesktop/minicli.cpp:268)
void Minicli::closeEvent ( QCloseEvent* e )
{
e->accept();
cleanup();
}
kdesktop'Minicli::slotCmdChanged() (./kdebase/kdesktop/minicli.cpp:274)
void Minicli::slotCmdChanged( const QString& )
{
m_parseTimer->stop();
m_parseTimer->start(250, true);
}
kdesktop'Minicli::slotTerminalToggled() (./kdebase/kdesktop/minicli.cpp:280)
void Minicli::slotTerminalToggled( bool )
{
slotParseTimer();
}
kdesktop'Minicli::slotReturnPressed() (./kdebase/kdesktop/minicli.cpp:285)
void Minicli::slotReturnPressed( const QString& text )
{
if( m_pCompletion )
{
uint count = m_pCompletion->items().count();
if( count < m_iMaxHistory )
m_pCompletion->addItem( text );
}
}
kdesktop'Minicli::slotParseTimer() (./kdebase/kdesktop/minicli.cpp:295)
void Minicli::slotParseTimer()
{
// Change the icon according to the command type
QPixmap icon;
if (m_terminalBox->isChecked()) icon = DesktopIcon("konsole");
else
{
QString cmd = m_runCombo->currentText().simplifyWhiteSpace();
if ( !cmd.isEmpty() )
{
KURIFilterData data( cmd );
KURIFilter::self()->filterURI( data, "ShortURIFilter" );
debug( "Original url : %s\nFiltered url : %s", cmd.latin1(), data.uri().url().latin1() );
if( data.hasBeenFiltered() ) cmd = data.uri().url(); // get the new URL
switch ( data.uriType() )
{
case KURIFilterData::LOCAL_FILE:
case KURIFilterData::LOCAL_DIR:
case KURIFilterData::NET_PROTOCOL:
icon = KMimeType::pixmapForURL(cmd, 0, KIcon::SizeMedium);
break;
case KURIFilterData::EXECUTABLE:
{
KService::Ptr service = KService::serviceByDesktopName(cmd);
if( service ) icon = service->pixmap(KIcon::SizeMedium);
else icon = DesktopIcon("exec");
break;
}
case KURIFilterData::HELP:
icon = DesktopIcon("khelpcenter");
break;
case KURIFilterData::ERROR:
icon = DesktopIcon("error");
default:
break;
}
}
}
m_runIcon->setPixmap(icon.isNull() ? DesktopIcon("go") : icon);
}