Note: example code, implementation only. Add your slots with right-clicking on the class item KEnvEdit in KDevelop and select "Add slot". The field "modified" needs to be added as a bool value with selecting "Add variable" in the same manner.
/***************************************************************************
kenvedit.cpp - description
-------------------
begin : Mon Mai 14 18:14:30 CEST 2001
copyright : (C) 2001 by Ralf Nolden
email : nolden@kde.org
***************************************************************************/
/***************************************************************************
* *
* 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 "kenvedit.h"
#include "kenvadddlg.h"
#include
#include
#include
#include
#include
#include
/** the constructor. Brings up the user interface, opens the .bashrc file and inserts the export lines
* as QListViewItems with variable in column 0 and value in column 1
*/
KEnvEdit::KEnvEdit(QWidget *parent, const char *name) : KEnvEditDlg(parent, name)
{
modified=false;
QFile f(QDir::homeDirPath()+"/.bashrc");
if ( f.open(IO_ReadOnly) ) { // file opened successfully
QTextStream t( &f ); // use a text stream
QString s;
while ( !t.eof() ) { // until end of file...
s = t.readLine(); // line of text excluding '\n'
if (s.contains("export"))
{
// remove the export keyword
s.replace( s.find("export"), 6, "" );
// get the left value
QListViewItem * item = new QListViewItem( lv_envar, 0 );
item->setText( 0, s.left( s.find('=' ) ) );
item->setText( 1, s.right( s.length()-(s.find('=')+1) ) );
}
}
f.close();
}
}
KEnvEdit::~KEnvEdit()
{
}
/** quits the application */
void KEnvEdit::slotQuit(){
// TODO: add messagebox to warn the user if the value list is modified. See the modified flag :-)
// if(modified)
kapp->quit();
}
/** Invokes the KDE help system to dislay the manual */
void KEnvEdit::slotHelp(){
kapp->invokeHelp();
}
/** calls KEnvAddDlg to add a new variable (kenvadddlg.ui) */
void KEnvEdit::slotNewVar(){
KEnvAddDlg addDlg(this,0,true);
if(addDlg.exec() && !(addDlg.le_var->text().isEmpty() || addDlg.le_value->text().isEmpty()) )
{
QListViewItem * item = new QListViewItem( lv_envar, 0 );
item->setText( 0, addDlg.le_var->text() );
item->setText( 1, addDlg.le_value->text() );
modified=true;
}
}
/** pops up the KEnvAddDlg, this is the second dialog designed (kenvadddlg.ui) */
void KEnvEdit::slotEditVar(){
KEnvAddDlg addDlg(this,0,true);
QListViewItem * item = lv_envar->currentItem();
addDlg.le_var->setText( item->text(0) );
addDlg.le_value->setText( item->text(1) );
if(addDlg.exec() && !(addDlg.le_var->text().isEmpty() || addDlg.le_value->text().isEmpty()) )
{
item->setText( 0, addDlg.le_var->text() );
item->setText( 1, addDlg.le_value->text() );
modified=true;
}
}
/** removes the hash, uncomments the variable, */
void KEnvEdit::slotEnableVar(){
QListViewItem* item=lv_envar->currentItem();
// remove the first letter, which is a # hash to comment out the variable,
// so it becomes active again.
item->setText(0, item->text(0).remove(0,1) );
slotSelected(item);
modified=true;
}
/** puts a hash in front of the variable. This marks it as commented out,
therefore the writing code in slotSave
has to put a hash in front of the export line. */
void KEnvEdit::slotDisableVar(){
QListViewItem* item=lv_envar->currentItem();
item->setText(0, item->text(0).prepend('#') );
slotSelected(item);
modified=true;
}
/** deletes the variable from the list */
void KEnvEdit::slotRemoveVar(){
lv_envar->takeItem( lv_envar->currentItem() );
modified=true;
}
/** saves the changes to .bashrc */
void KEnvEdit::slotSave(){
// TODO: Add saving code here
modified=false;
}
/** on a select, enable or disable the according buttons for enabling/ disabling the variable */
void KEnvEdit::slotSelected(QListViewItem* item){
if(item->text(0).contains('#'))
{
pb_enable->setEnabled(true);
pb_disable->setEnabled(false);
}
else
{
pb_enable->setEnabled(false);
pb_disable->setEnabled(true);
}
}