21#include "kiviostencilsetaction.h"
23#include <tdepopupmenu.h>
24#include <kstandarddirs.h>
25#include <tdeapplication.h>
27#include <tdetoolbar.h>
28#include <tdetoolbarbutton.h>
29#include <kiconloader.h>
35#include <tqwhatsthis.h>
37#include <tqstringlist.h>
38#include <tqvaluelist.h>
40#include "kivio_stencil_spawner_set.h"
42static const char * default_plug_xpm[] = {
66KivioStencilSetAction::KivioStencilSetAction(
const TQString &text,
const TQString &pix,
67 TDEActionCollection *parent,
const char *name)
68 : TDEAction(text, pix, 0, parent, name)
70 setShortcutConfigurable(
false );
72 m_pathList.setAutoDelete(
true);
74 m_popup =
new TDEPopupMenu(0L,
"KivioStencilSetAction::popup");
78KivioStencilSetAction::~KivioStencilSetAction()
80 clearCollectionMenuList();
85TDEPopupMenu* KivioStencilSetAction::popupMenu()
const
90void KivioStencilSetAction::popup(
const TQPoint& global )
92 popupMenu()->popup(global);
95int KivioStencilSetAction::plug( TQWidget* widget,
int index)
98 if (kapp && !kapp->authorizeTDEAction(name()))
100 kdDebug(129) <<
"TDEAction::plug( " << widget <<
", " << index <<
" )" << endl;
101 if ( widget->inherits(
"TQPopupMenu") )
103 TQPopupMenu* menu =
static_cast<TQPopupMenu*
>( widget );
107 id = menu->insertItem( iconSet(), text(), popupMenu(), -1, index );
109 id = menu->insertItem( kapp->iconLoader()->loadIcon(icon(), TDEIcon::Small),
110 text(), popupMenu(), -1, index );
113 menu->setItemEnabled(
id,
false );
115 addContainer( menu,
id );
116 connect( menu, TQ_SIGNAL( destroyed() ),
this, TQ_SLOT( slotDestroyed() ) );
118 return containerCount() - 1;
120 else if ( widget->inherits(
"TDEToolBar" ) )
122 TDEToolBar *bar =
static_cast<TDEToolBar *
>( widget );
124 int id_ = TDEAction::getToolButtonID();
126 if ( icon().isEmpty() && !iconSet().isNull() )
127 bar->insertButton( iconSet().pixmap(), id_, TQ_SIGNAL( clicked() ),
this,
128 TQ_SLOT( slotActivated() ), isEnabled(), plainText(),
132 TDEInstance *instance;
134 if ( m_parentCollection )
135 instance = m_parentCollection->instance();
137 instance = TDEGlobal::instance();
139 bar->insertButton( icon(), id_, TQ_SIGNAL( clicked() ),
this,
140 TQ_SLOT( slotActivated() ), isEnabled(), plainText(),
144 addContainer( bar, id_ );
146 if (!whatsThis().isEmpty())
147 TQWhatsThis::add( bar->getButton(id_), whatsThis() );
149 connect( bar, TQ_SIGNAL( destroyed() ),
this, TQ_SLOT( slotDestroyed() ) );
151 bar->getButton(id_)->setPopup(popupMenu(),
true );
153 return containerCount() - 1;
155 else if ( widget->inherits(
"TQMenuBar" ) )
157 TQMenuBar *bar =
static_cast<TQMenuBar *
>( widget );
161 id = bar->insertItem( text(), popupMenu(), -1, index );
164 bar->setItemEnabled(
id,
false );
166 addContainer( bar,
id );
167 connect( bar, TQ_SIGNAL( destroyed() ),
this, TQ_SLOT( slotDestroyed() ) );
169 return containerCount() - 1;
175void KivioStencilSetAction::updateMenu()
180 m_popup->insertItem(i18n(
"Show Stencil Set Chooser"),
this, TQ_SIGNAL(showDialog()));
181 m_popup->insertSeparator();
184 m_collectionIdList.clear();
185 clearCollectionMenuList();
187 TDEStandardDirs *dirs = TDEGlobal::dirs();
188 TQStringList dirList = dirs->findDirs(
"data",
"kivio/stencils");
191 for( TQStringList::Iterator it = dirList.begin(); it != dirList.end(); ++it )
193 TQString dir = (*it);
194 loadCollections(dir);
198void KivioStencilSetAction::loadCollections(
const TQString& rootDirStr )
200 TQDir rootDir( rootDirStr );
202 rootDir.setFilter( TQDir::Dirs );
203 rootDir.setSorting( TQDir::Name );
205 const TQFileInfoList *colList = rootDir.entryInfoList();
206 TQFileInfoListIterator colIt( *colList );
207 TQFileInfo *colFInfo;
210 while((colFInfo = colIt.current()))
212 if(colFInfo->fileName() !=
".." && colFInfo->fileName() !=
".")
214 cId = KivioStencilSpawnerSet::readId(colFInfo->absFilePath());
216 int index = m_collectionIdList.findIndex(cId);
219 ch =
new TDEPopupMenu;
220 connect(ch,TQ_SIGNAL(activated(
int)),TQ_SLOT(slotActivated(
int)));
221 m_popup->insertItem(TQIconSet(dirtPixmap(colFInfo->absFilePath())),
222 KivioStencilSpawnerSet::readTitle(colFInfo->absFilePath()),ch);
223 m_collectionIdList.append(cId);
224 m_collectionMenuList.append(ch);
226 ch = m_collectionMenuList[index];
229 loadSet( ch, rootDirStr +
"/" + colFInfo->fileName() );
236void KivioStencilSetAction::loadSet( TDEPopupMenu* menu,
const TQString& rootDirStr )
238 TQDir rootDir( rootDirStr );
240 rootDir.setFilter( TQDir::Dirs );
241 rootDir.setSorting( TQDir::Name );
243 const TQFileInfoList *setList = rootDir.entryInfoList();
244 TQFileInfoListIterator setIt( *setList );
245 TQFileInfo *setFInfo;
247 while( (setFInfo = setIt.current()) )
249 if( setFInfo->fileName() !=
".." && setFInfo->fileName() !=
"." )
251 menu->insertItem(TQIconSet(dirtPixmap(setFInfo->absFilePath())),
252 KivioStencilSpawnerSet::readTitle(setFInfo->absFilePath()),m_ssId);
253 m_pathList.insert( m_ssId,
new TQString(rootDirStr +
"/" + setFInfo->fileName()) );
260TQPixmap KivioStencilSetAction::dirtPixmap(
const TQString& dir )
264 if( TQFile::exists(dir +
"/icon.xpm") ) {
265 fs = dir +
"/icon.xpm";
266 }
else if( TQFile::exists(dir +
"/icon.png") ) {
267 fs = dir +
"/icon.png";
269 return TQPixmap( (
const char **)default_plug_xpm );
273 TQFileInfo finfo( file );
274 return TQPixmap( finfo.absFilePath() );
277void KivioStencilSetAction::slotActivated(
int id)
279 if (
id < 0 || !m_pathList.at((uint)
id))
282 TQString path = *m_pathList.at((uint)
id);
284 emit activated(path);
287void KivioStencilSetAction::clearCollectionMenuList()
289 TQValueList<TDEPopupMenu*>::Iterator it;
291 for(it = m_collectionMenuList.begin(); it != m_collectionMenuList.end(); ++it) {
292 TDEPopupMenu* m = (*it);
296 m_collectionMenuList.clear();
299#include "kiviostencilsetaction.moc"