kcustommenueditor.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <qhbox.h>
00021 #include <qregexp.h>
00022 #include <qimage.h>
00023 #include <qpushbutton.h>
00024
00025 #include <kbuttonbox.h>
00026 #include <klocale.h>
00027 #include <kglobal.h>
00028 #include <kiconloader.h>
00029 #include <klistview.h>
00030 #include <kservice.h>
00031 #include <kstandarddirs.h>
00032 #include <kconfigbase.h>
00033 #include <kopenwith.h>
00034
00035 #include "kcustommenueditor.h"
00036
00037 class KCustomMenuEditor::Item : public QListViewItem
00038 {
00039 public:
00040 Item(QListView *parent, KService::Ptr service)
00041 : QListViewItem(parent),
00042 s(service)
00043 {
00044 init();
00045 }
00046
00047 Item(QListViewItem *parent, KService::Ptr service)
00048 : QListViewItem(parent),
00049 s(service)
00050 {
00051 init();
00052 }
00053
00054 void init()
00055 {
00056 QString serviceName = s->name();
00057
00058
00059
00060 serviceName.replace("&", "&&");
00061
00062 QPixmap normal = KGlobal::instance()->iconLoader()->loadIcon(s->icon(), KIcon::Small,
00063 0, KIcon::DefaultState, 0L, true);
00064
00065
00066 if (normal.width() > 16 || normal.height() > 16) {
00067 QImage tmp = normal.convertToImage();
00068 tmp = tmp.smoothScale(16, 16);
00069 normal.convertFromImage(tmp);
00070 }
00071 setText(0, serviceName);
00072 setPixmap(0, normal);
00073 }
00074
00075 KService::Ptr s;
00076 };
00077
00078 class KCustomMenuEditor::KCustomMenuEditorPrivate
00079 {
00080 public:
00081 QPushButton * pbRemove;
00082 QPushButton * pbMoveUp;
00083 QPushButton * pbMoveDown;
00084 };
00085
00086 KCustomMenuEditor::KCustomMenuEditor(QWidget *parent)
00087 : KDialogBase(parent, "custommenueditor", true, i18n("Menu Editor"), Ok|Cancel, Ok, true),
00088 m_listView(0)
00089 {
00090 d = new KCustomMenuEditorPrivate;
00091 QHBox *page = makeHBoxMainWidget();
00092 m_listView = new KListView(page);
00093 m_listView->addColumn(i18n("Menu"));
00094 m_listView->setFullWidth(true);
00095 m_listView->setSorting(-1);
00096 KButtonBox *buttonBox = new KButtonBox(page, Vertical);
00097 buttonBox->addButton(i18n("New..."), this, SLOT(slotNewItem()));
00098 d->pbRemove=buttonBox->addButton(i18n("Remove"), this, SLOT(slotRemoveItem()));
00099 d->pbMoveUp=buttonBox->addButton(i18n("Move Up"), this, SLOT(slotMoveUp()));
00100 d->pbMoveDown=buttonBox->addButton(i18n("Move Down"), this, SLOT(slotMoveDown()));
00101 buttonBox->layout();
00102 connect( m_listView, SIGNAL( selectionChanged () ), this, SLOT( refreshButton() ) );
00103 refreshButton();
00104 }
00105
00106 KCustomMenuEditor::~KCustomMenuEditor()
00107 {
00108 delete d;
00109 d=0;
00110 }
00111
00112 void KCustomMenuEditor::refreshButton()
00113 {
00114 QListViewItem *item = m_listView->currentItem();
00115 bool selected = ( item!= 0 );
00116 int pos = m_listView->itemPos( item );
00117 d->pbRemove->setEnabled( selected );
00118 d->pbMoveUp->setEnabled( selected && pos>0);
00119 d->pbMoveDown->setEnabled( selected && pos < ( m_listView->childCount() ));
00120 }
00121
00122 void
00123 KCustomMenuEditor::load(KConfigBase *cfg)
00124 {
00125 cfg->setGroup(QString::null);
00126 int count = cfg->readNumEntry("NrOfItems");
00127 QListViewItem *last = 0;
00128 for(int i = 0; i < count; i++)
00129 {
00130 QString entry = cfg->readPathEntry(QString("Item%1").arg(i+1));
00131 if (entry.isEmpty())
00132 continue;
00133
00134
00135 KService::Ptr menuItem = KService::serviceByDesktopPath( entry );
00136 if (!menuItem)
00137 menuItem = KService::serviceByDesktopName( entry );
00138 if (!menuItem)
00139 menuItem = new KService( entry );
00140
00141 if (!menuItem->isValid())
00142 continue;
00143
00144 QListViewItem *item = new Item(m_listView, menuItem);
00145 item->moveItem(last);
00146 last = item;
00147 }
00148 }
00149
00150 void
00151 KCustomMenuEditor::save(KConfigBase *cfg)
00152 {
00153
00154 QStringList groups = cfg->groupList();
00155 for(QStringList::ConstIterator it = groups.begin();
00156 it != groups.end(); ++it)
00157 {
00158 cfg->deleteGroup(*it);
00159 }
00160
00161 cfg->setGroup(QString::null);
00162 Item * item = (Item *) m_listView->firstChild();
00163 int i = 0;
00164 while(item)
00165 {
00166 i++;
00167 QString path = item->s->desktopEntryPath();
00168 if (!path.startsWith("/") || !KGlobal::dirs()->relativeLocation("xdgdata-apps", path).startsWith("/"))
00169 path = item->s->desktopEntryName();
00170 cfg->writePathEntry(QString("Item%1").arg(i), path);
00171 item = (Item *) item->nextSibling();
00172 }
00173 cfg->writeEntry("NrOfItems", i);
00174 }
00175
00176 void
00177 KCustomMenuEditor::slotNewItem()
00178 {
00179 QListViewItem *item = m_listView->currentItem();
00180
00181 KOpenWithDlg dlg(this);
00182 dlg.setSaveNewApplications(true);
00183
00184 if (dlg.exec())
00185 {
00186 KService::Ptr s = dlg.service();
00187 if (s && s->isValid())
00188 {
00189 Item *newItem = new Item(m_listView, s);
00190 newItem->moveItem(item);
00191 }
00192 refreshButton();
00193 }
00194 }
00195
00196 void
00197 KCustomMenuEditor::slotRemoveItem()
00198 {
00199 QListViewItem *item = m_listView->currentItem();
00200 if (!item)
00201 return;
00202
00203 delete item;
00204 refreshButton();
00205 }
00206
00207 void
00208 KCustomMenuEditor::slotMoveUp()
00209 {
00210 QListViewItem *item = m_listView->currentItem();
00211 if (!item)
00212 return;
00213
00214 QListViewItem *searchItem = m_listView->firstChild();
00215 while(searchItem)
00216 {
00217 QListViewItem *next = searchItem->nextSibling();
00218 if (next == item)
00219 {
00220 searchItem->moveItem(item);
00221 break;
00222 }
00223 searchItem = next;
00224 }
00225 refreshButton();
00226 }
00227
00228 void
00229 KCustomMenuEditor::slotMoveDown()
00230 {
00231 QListViewItem *item = m_listView->currentItem();
00232 if (!item)
00233 return;
00234
00235 QListViewItem *after = item->nextSibling();
00236 if (!after)
00237 return;
00238
00239 item->moveItem( after );
00240 refreshButton();
00241 }
00242
00243 #include "kcustommenueditor.moc"
This file is part of the documentation for kio Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Apr 21 18:43:44 2004 by
doxygen 1.3.6-20040222 written by
Dimitri van Heesch, © 1997-2003