diff options
Diffstat (limited to 'src/setupdialogprg.cpp')
| -rw-r--r-- | src/setupdialogprg.cpp | 702 |
1 files changed, 702 insertions, 0 deletions
diff --git a/src/setupdialogprg.cpp b/src/setupdialogprg.cpp new file mode 100644 index 0000000..e2b9c39 --- /dev/null +++ b/src/setupdialogprg.cpp @@ -0,0 +1,702 @@ +// +// C++ Implementation: setupdialogprg +// +// Description: +// +// +// Author: KoolDock team <radix@kde.cl>, (C) 2004 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include <kfiledialog.h> +#include <kimageio.h> +#include <kicondialog.h> +#include <klocale.h> +#include <ksimpleconfig.h> +#include <kmessagebox.h> +#include <kstandarddirs.h> +#include <kpushbutton.h> +#include <keditlistbox.h> +#include <klineedit.h> +#include <qlistbox.h> +#include <krun.h> + +#include <qiconview.h> +#include <qdir.h> +#include <qstringlist.h> +#include <qtabwidget.h> + +#include "setupdialog.h" +#include "setupdialogprg.h" +#include "apppropprg.h" +#include "appProp.h" +#include "kooldock.h" + +SetupDialogPrg::SetupDialogPrg(QWidget *parent, const char *name) + : SetupDialog(parent, name) +{ + //Ignore list handlers + grabbing=0; + gwm=new KWinModule(); + connect(gwm, SIGNAL(activeWindowChanged(WId)), SLOT(activeWindowChanged(WId))); + gwm->blockSignals(true); + in=ignoreBox->lineEdit(); + //Remove useless buttons from widget + up=ignoreBox->upButton(); + down=ignoreBox->downButton(); + up->hide(); + down->hide(); + //End ignore list handlers + + // some configuration variables + progPath = locateLocal("data", "kooldock"); + menuPath = progPath + QString("/menu/"); + + KConfig *config = KGlobal::config(); + config->setGroup("kooldock"); + + appdlg=new appPropPrg(); + appdlg->user->setEnabled(false); + appdlg->cuser->setChecked(false); + appdlg->terminal->setChecked(false); + appdlg->tclose->setChecked(false); + appdlg->tclose->setEnabled(false); + connect(appdlg, SIGNAL(apply()), SLOT(appRestart())); + + //Lets load the theme List + KStandardDirs sys; + QStringList bgPath = sys.findDirs("data", "kooldock/backgrounds"); + for(unsigned int i=0; i<bgPath.count();i++) + { + QDir tmpdir(bgPath[i]); + QStringList theme_tmp(tmpdir.entryList(QDir::Dirs, QDir::Name)); + //We do it like this to avoid showing "." and ".." instead of copying QDir::entryList directly into "theme" + for(unsigned int j=2; j<theme_tmp.count(); j++) theme->insertItem(theme_tmp[j]); + } +} + + +void SetupDialogPrg::appRestart() +{ + if(!appdlg) return; + iconsChanged(); + kdDebug(0) << "Refresh applist" << endl; + appClear(); + appFill(); +} + + +SetupDialogPrg::~SetupDialogPrg() +{ + if(appdlg) delete(appdlg); + if(in) delete(in); + kdDebug(0) << "Destroying..." << endl; +} + + +// Setup dialog implementation +void SetupDialogPrg::iconsChanged() +{ + toReloadIcons->setChecked(TRUE); +} +void SetupDialogPrg::configOK() +{ + this->hide(); + configApply(); +} + +void SetupDialogPrg::configApply() +{ + int fShowTaskbar=0; + int fMinimizedOnly=0; + int fShowNotification=0; + int fShowBorders=0; + int fShowKMenu=0; + int fUseKBFX=0; + int fHidden=0; + int showNames=0; + int fCleaner=0; + int fHideOnClick=0; + int fStayBelow = 0; + int fSteppy=0; + int xinerama=0; + int fhideTimer=5; + int fShowNav=0; + int fSystray=0; + int fCurrent=0; + int fPriority=0; + int fpercentPos=0; + int fOrientation=0; + int fClipping=0; + int fClipIcons=0; + int fSpeed=0; + + //Stop grabbing window + gwm->blockSignals(true); + grabbing=0; + grabWin->setText(i18n("Grab Window")); + + if (chk5->isChecked() == true) fShowTaskbar = 1; + if (cbMinimizedOnly->isChecked() == true) fMinimizedOnly = 1; + if (chk6->isChecked() == true) fShowNotification = 1; + if (chk4->isChecked() == true) fShowBorders = 1; + if (chk7->isChecked() == true) fShowKMenu = 1; + if (chkUseKBFX->isChecked() == true) fUseKBFX = 1; + if (chk1->isChecked() == true) + { + fHidden = 1; + } + fhideTimer = hideTimer->value(); + if (chk2->isChecked() == true) showNames = 1; + if (cbCleaner->isChecked() == true) fCleaner = 1; + if (hideOnClick->isChecked() == true) fHideOnClick = 1; + if (cbStayBelow->isChecked() == true) fStayBelow = 1; + if (Steppy->isChecked() == true) fSteppy = 1; + if (xrma->isChecked() == true) xinerama=1; + if (nav->isChecked()==true) fShowNav=1; + if (systray->isChecked()==true) fSystray=1; + if (currentDesk->isChecked()==true) fCurrent=1; + if (chClipping->isChecked()==true) fClipping=1; + if (chClipIcons->isChecked()==true) fClipIcons=1; + if (chkSpeed->isChecked()==true) fSpeed=1; + fPriority=Priority->value(); + fpercentPos=percentPos->value(); + + kdDebug(0) << "Saving preferences..." << endl; + KConfig *config = KGlobal::config(); + config->setGroup("kooldock"); + config->writeEntry("ShowTaskbar", fShowTaskbar); + config->writeEntry("MinimizedOnly", fMinimizedOnly); + config->writeEntry("ShowNotification", fShowNotification); + config->writeEntry("BorderColor", kColorCombo3->color().name()); + config->writeEntry("SmallIconSize", iwSmall->value()); + config->writeEntry("BigIconSize", iwBig->value()); + config->writeEntry("BigIconAmount", fAmount->value()); + config->writeEntry("iSpace", sbSpace->value()); + config->writeEntry("BackgroundColor", kColorCombo2->color().name()); + config->writeEntry("SeparatorColor", kColorCombo4->color().name()); + config->writeEntry("ShowKMenu", fShowKMenu); + config->writeEntry("KBFX", fUseKBFX); + config->writeEntry("Hidden", fHidden); + config->writeEntry("HideOnClick", fHideOnClick); + config->writeEntry("StayBelow", fStayBelow); + config->writeEntry("fSteppy", fSteppy); + config->writeEntry("Xinerama", xinerama); + config->writeEntry("nWideBg", nWideBg->isChecked()); + config->writeEntry("scaleMax", opScale2->isChecked()); + if(xinerama==1) {config->writeEntry("leftRes", SleftRes->value()); config->writeEntry("XinDesiredHeight", SHeight->value()); config->writeEntry("XinPreviousWidth", PWidth->value());} + config->writeEntry("hideTimer", fhideTimer); + config->writeEntry("Navigator", fShowNav); + config->writeEntry("Systray", fSystray); + config->writeEntry("currentDesktop", fCurrent); + + config->writeEntry("Priority", fPriority); + config->writeEntry("Clipping", fClipping); + config->writeEntry("ClipIconArea", fClipIcons); + config->writeEntry("percentPos", fpercentPos); + if (op1->isChecked()) fOrientation=1; + if (op2->isChecked()) fOrientation=2; + if (op3->isChecked()) fOrientation=3; + config->writeEntry("fOrientation", fOrientation); + config->writeEntry("zoomSpeed", zoomSpeed->value()); + config->writeEntry("speedControl", fSpeed); + + // kosd config + config->writeEntry("showNames", showNames); + config->writeEntry("Cleaner", fCleaner); + config->writeEntry("xosdFont", xosdFont->currentText()); + config->writeEntry("xosdColor", kColorCombo1->color().name()); + config->writeEntry("xosdShadowColor", kColorCombo_shadow->color().name()); + config->writeEntry("xosdShadowOffset", spinBox2->value()); + config->writeEntry("xosdSize", xosdSize->value()); + if (xosdBold->isChecked()) + { + config->writeEntry("xosdBold", 1); + } + else + { + config->writeEntry("xosdBold", 0); + } + if (xosdItalic->isChecked()) + { + config->writeEntry("xosdItalic", 1); + } + else + { + config->writeEntry("xosdItalic", 0); + } + + config->writeEntry("ShowSShot", chkSshot->isChecked()); + config->writeEntry("iconGrouping", chkGrouping->isChecked()); + + // save background configurations + if (chkImg->isChecked()) + { + //Lets find exactly where the selected theme is + KStandardDirs sys; + QString theme_dir="kooldock/backgrounds/"+theme->currentText(); + QStringList bgPath = sys.findDirs("data", theme_dir); + + //Lets set the images and write the config + QString LeftImg=(QString)bgPath[0]+"background-left.png"; + QString CenterImg=(QString)bgPath[0]+"background-center.png"; + QString RightImg=(QString)bgPath[0]+"background-right.png"; + + // background image enabled + config->writeEntry("Solid", 0); + config->writeEntry("Theme", theme->currentText()); + config->writeEntry("LeftImg", LeftImg); + config->writeEntry("RightImg", RightImg); + config->writeEntry("CenterImg", CenterImg); + config->writeEntry("ShowBorders", 0); + config->writeEntry("DockOpacity", 0); + } + else + { + // background image disabled + config->writeEntry("Solid", 1); + config->writeEntry("Theme", ""); + config->writeEntry("LeftImg", ""); + config->writeEntry("RightImg", ""); + config->writeEntry("CenterImg", ""); + config->writeEntry("ShowBorders", fShowBorders); + config->writeEntry("DockOpacity", spinBox1->value()); + } + + config->sync(); + + // write ignore list to file + QString progPath = locateLocal("data", "kooldock"); + QString menuPath = progPath + QString("/menu/"); + filepath = QString(progPath + "/ignorelist.conf"); + if(ignoreBox->count()>0) + { + QFile out(filepath); + if (out.open(IO_WriteOnly)) + { + QTextStream out_s(&out); + for(int i=0; i<ignoreBox->count(); i++) + { + out_s << ignoreBox->text(i) << "\n"; + } + out.close(); + } + } + else + { + QFile::remove(filepath); + } + emit apply(); +} + +void SetupDialogPrg::configCancel() +{ + //Stop grabbing Windows + gwm->blockSignals(true); + grabWin->setText(i18n("Grab Window")); + grabbing=0; + this->hide(); +} + +void SetupDialogPrg::closeEvent( QCloseEvent *e ) +{ + e->ignore(); + configCancel(); +} + +void SetupDialogPrg::chkFont() +{ + bool tmp; //just to save some code + + if(chk2->isChecked()) + { + tmp=true; + } + else + { + tmp=false; + } + xosdBold->setEnabled(tmp); + xosdItalic->setEnabled(tmp); + xosdSize->setEnabled(tmp); + spinBox2->setEnabled(tmp); + kColorCombo1->setEnabled(tmp); + kColorCombo_shadow->setEnabled(tmp); + xosdFont->setEnabled(tmp); + cbCleaner->setEnabled(tmp); +} + + +void SetupDialogPrg::xrma_clicked() +{ + if(xrma->isChecked()==true) {SleftRes->setEnabled(true); SHeight->setEnabled(true); PWidth->setEnabled(true);} + if(xrma->isChecked()==false) {SleftRes->setEnabled(false); SHeight->setEnabled(false); PWidth->setEnabled(false);} +} + +void SetupDialogPrg::chkTask() +{ + iconsChanged(); + bool tmp; + + if(chk5->isChecked()) + { + tmp=true; + } + else + { + tmp=false; + } + chk6->setEnabled(tmp); + currentDesk->setEnabled(tmp); + chkSshot->setEnabled(tmp); + chkGrouping->setEnabled(tmp); + cbMinimizedOnly->setEnabled(tmp); +} + +void SetupDialogPrg::chkHidden() +{ + bool tmp; + + if(chk1->isChecked()) + { + tmp=true; + } + else + { + tmp=false; + } + hideTimer->setEnabled(tmp); + hideOnClick->setEnabled(tmp); + cbStayBelow->setEnabled(!tmp); +} + +void SetupDialogPrg::applist_dropped(QDropEvent*e,const QValueList<QIconDragItem>&) +{ + KIconLoader icon_obj; + QStringList lst; + QString name; + int pos; + + QUriDrag::decodeLocalFiles(e, lst); + name=lst[0]; + + //Lets see if it is a desktop file + pos=name.findRev(".desktop", -1); + if(pos!=-1) + { + KSimpleConfig *desktopfile; + kdDebug(0) << "Desktop file dropped!" << endl; + desktopfile = new KSimpleConfig(lst[0], TRUE); + desktopfile->setGroup("Desktop Entry"); + appdlg->cmdname->setText(desktopfile->readEntry("Name")); + appdlg->cmdpath->setText(desktopfile->readEntry("Exec")); + appdlg->iconbutton->setIcon(desktopfile->readEntry("Icon")); + delete(desktopfile); + } + else + { + //It was not a dekstop file, so lets create a new entry + //Lets set a default name based on the program name + pos=name.findRev("/", -1); + if(pos!=-1) + { + name.remove(1, pos); + name.remove("/", TRUE); + } + + //Now we create and show the appProp dialog + //appdlg=new appPropPrg(); + appdlg->cmdname->setText(name); + appdlg->cmdpath->setText(lst[0]); + + //Based on the program name, lets try to set an icon; if it does + //not exists, the system will set the "default" icon + appdlg->iconbutton->setIcon(name); + } + appdlg->show(); +} + +void SetupDialogPrg::removeLauncher() +{ + if(fileName!=NULL) + { + QString question=i18n("Do you want to remove ") + fileName + QString("?"); + int remove = KMessageBox::questionYesNo(0, question, i18n("Remove Launcher")); + if(remove!=KMessageBox::Yes) return; + KSimpleConfig *desktopfile; + QDir homeDir = QDir::home(); + + if (homeDir.exists(progPath)) + { + QDir dir(menuPath); + QStringList fileListRemove; + fileListRemove = dir.entryList("*.desktop"); + for ( QStringList::Iterator it = fileListRemove.begin(); it != fileListRemove.end(); ++it ) + { + if ( ((*it) != ".") && ((*it) != "..") ) + { + desktopfile = new KSimpleConfig( menuPath + (*it), TRUE); + desktopfile->setGroup("Desktop Entry"); + if(desktopfile->readEntry("Name")==fileName) + { + kdDebug(0) << "Removing " << menuPath + (*it) << endl; + delete(desktopfile); + if(QFile::remove(menuPath+(*it))==TRUE) + { + kdDebug(0) << "Item removed!" << endl; + + //Lets update the launchers index + QString preffix; + fileListRemove.clear(); + fileListRemove=dir.entryList("*.desktop"); + QStringList fileListRemove2=fileListRemove; + + //Not really sure why I couldn't do this within the other for, something like fileListRemove[i].remove(0,2).prepend(preffix), but hell it works + for(unsigned int i=0; i<fileListRemove2.count(); i++) + { + fileListRemove2[i].remove(0,2); + } + + //Rename the files so they reflect their new position + for(unsigned int i=0; i<fileListRemove.count(); i++) + { + if(i<10) preffix=QString("0%1").arg(i); + if(i>=10) preffix=QString("%1").arg(i); + + dir.rename(fileListRemove[i], QString("%1%2").arg(preffix).arg(fileListRemove2[i])); + } + //End updating + + appClear(); + appFill(); + iconsChanged(); + } + else + { + kdDebug(0) << "Unable to remove file!" << endl; + } + return; + } + delete(desktopfile); + } + } + } + } +} + + +void SetupDialogPrg::grabWin_clicked() +{ + if(grabbing==0) + { + grabbing=1; + grabWin->setText(i18n("Grabbing...")); + gwm->blockSignals(false); + } + else + { + grabbing=0; + grabWin->setText(i18n("Grab Window")); + gwm->blockSignals(true); + } +} + + +void SetupDialogPrg::activeWindowChanged(WId id) +{ + KWin::WindowInfo winfo; + winfo=KWin::windowInfo(id); + QString ninfo=winfo.visibleName(); + + if(ninfo!=caption()) + { + in->setText(ninfo); + } +} + +void SetupDialogPrg::buttonadd_clicked() +{ + appdlg->cmdpath->setText(""); + appdlg->cmdname->setText(""); + appdlg->iconbutton->setIcon("unknown"); + appdlg->show(); +} + +void SetupDialogPrg::showEvent(QShowEvent *) +{ + //Here we fill the applist + appFill(); +} + +void SetupDialogPrg::appFill() +{ + // fill the application list. + KSimpleConfig *desktopfile; + + QDir homeDir = QDir::home(); + KIconLoader icon_obj; + QPixmap pixm; + + if(homeDir.exists(progPath)) + { + QDir dir(menuPath); + + fileList.clear(); + fileList = dir.entryList("*.desktop"); + for ( QStringList::Iterator it = fileList.begin(); it != fileList.end(); ++it ) + { + if ( ((*it) != ".") && ((*it) != "..") ) + { + desktopfile = new KSimpleConfig( menuPath + (*it), TRUE); + desktopfile->setGroup("Desktop Entry"); + QPixmap pixm=icon_obj.loadIcon(desktopfile->readEntry("Icon") ,KIcon::Desktop,0,KIcon::DefaultState,0L,false); + new KIconViewItem(applist, desktopfile->readEntry("Name"), pixm); + delete(desktopfile); + } + } + } +} + +void SetupDialogPrg::hideEvent ( QHideEvent * ) +{ + // the application list is erased here. + appClear(); +} + +void SetupDialogPrg::appClear() +{ + applist->clear(); +} + +void SetupDialogPrg::left() +{ + if (oldPos>0) {setnewpos(oldPos-1); oldPos--;iconsChanged();} +} + +void SetupDialogPrg::right() +{ + if (oldPos!=-1 && oldPos < (int)fileList.count()-1) {setnewpos(oldPos+1); oldPos++;iconsChanged();} +} + +void SetupDialogPrg::applist_clicked(QIconViewItem *e, const QPoint&) +{ + if(e!=NULL) + {oldPos=e->index();} + else + {oldPos=-1;} +} +void SetupDialogPrg::applist_contextMenuRequested(QIconViewItem *e,const QPoint&) +{ + if(e!=NULL) + { + KPopupMenu *popup=new KPopupMenu(); + KPopupMenu *setpos=new KPopupMenu(); + + fileName=e->text(); + oldPos=e->index(); + connect(setpos, SIGNAL(activated(int)), this, SLOT(setnewpos(int))); + + //Load desktop data + KSimpleConfig *desktopfile; + + QDir dir(menuPath); + fileList.clear(); + fileList = dir.entryList("*.desktop"); + int i=0; + for ( QStringList::Iterator it = fileList.begin(); it != fileList.end(); ++it ) + { + if ( ((*it) != ".") && ((*it) != "..") ) + { + desktopfile = new KSimpleConfig( menuPath + (*it), TRUE); + desktopfile->setGroup("Desktop Entry"); + int menustate=setpos->insertItem(QString("%1").arg(desktopfile->readEntry("Name")),i); + if(i==oldPos) {setpos->setItemEnabled(menustate, false);filepath=menuPath + (*it);} + delete(desktopfile); + i++; + } + } + //End Load + + popup->insertTitle(e->text()); + popup->insertItem(i18n("Swap with"), setpos); + popup->insertItem(i18n("&Edit item"), this, SLOT(editItem())); + popup->insertItem(i18n("Remove"), this, SLOT(removeLauncher())); + popup->exec(QCursor::pos()); + if(popup) delete(popup); + if(setpos) delete(setpos); + } + else + { + oldPos=-1; + } +} + +void SetupDialogPrg::editItem() +{ + KRun::runCommand("kfmclient openProperties " + filepath, "kfmclient", ""); +} + +void SetupDialogPrg::setnewpos(int newpos) +{ + kdDebug(0) << "New pos " << QString("0%1").arg(newpos) << "requested for: " << fileName<< endl; + if(newpos==oldPos) return; //Nothing to be done + computeNewPos(newpos); +} + +void SetupDialogPrg::computeNewPos(int pos) +{ + QString preffix, preffix2; + QDir dir(menuPath); + + fileList.clear(); + fileList = dir.entryList("*.desktop"); + + //Lets remove the preffix of the files from fileList + for(unsigned int i=0; i<fileList.count(); i++) + { + fileList[i]=fileList[i].remove(0,2); + } + + //Preffix for old position + if(oldPos<10) preffix=QString("0%1").arg(oldPos); + if(oldPos>=10) preffix=QString("%1").arg(oldPos); + + //Preffix for new position + if(pos<10) preffix2=QString("0%1").arg(pos); + if(pos>=10) preffix2=QString("%1").arg(pos); + + kdDebug(0) << "Old Position: " << oldPos << endl; + kdDebug(0) << "New Position: " << pos << endl; + + dir.rename(QString("%1%2").arg(preffix).arg(fileList[oldPos]), QString("%1%2").arg(preffix2).arg(fileList[oldPos])); + dir.rename(QString("%1%2").arg(preffix2).arg(fileList[pos]), QString("%1%2").arg(preffix).arg(fileList[pos])); + + appClear(); + appFill(); +} + +void SetupDialogPrg::chkImgSlot() +{ + if (chkImg->isChecked()) + { + chkSolid->setChecked(false); + } + else + { + chkSolid->setChecked(true); + } +} + +void SetupDialogPrg::chkSolidSlot() +{ + if (chkSolid->isChecked()) + { + chkImg->setChecked(false); + } + else + { + chkImg->setChecked(true); + }} + +#include "setupdialogprg.moc" |
