19 #include <kedittoolbar.h> 26 #include <tqcombobox.h> 27 #include <tqdragobject.h> 28 #include <tqtoolbutton.h> 30 #include <tqvaluelist.h> 31 #include <tqapplication.h> 32 #include <tqtextstream.h> 34 #include <tdeaction.h> 35 #include <kstandarddirs.h> 37 #include <kicontheme.h> 38 #include <kiconloader.h> 39 #include <kinstance.h> 40 #include <tdemessagebox.h> 41 #include <kxmlguifactory.h> 42 #include <kseparator.h> 43 #include <tdeconfig.h> 44 #include <tdelistview.h> 46 #include <kpushbutton.h> 49 static const char *
const lineseparatorstring =
I18N_NOOP(
"--- line separator ---");
50 static const char *
const separatorstring =
I18N_NOOP(
"--- separator ---");
52 #define LINESEPARATORSTRING i18n(lineseparatorstring) 53 #define SEPARATORSTRING i18n(separatorstring) 55 static void dump_xml(
const TQDomDocument& doc)
58 TQTextStream ts(&str, IO_WriteOnly);
63 typedef TQValueList<TQDomElement> ToolbarList;
70 enum XmlType { Shell = 0, Part, Local, Merged };
74 m_actionCollection = 0;
78 TQDomDocument m_document;
83 ToolbarList m_barList;
86 typedef TQValueList<XmlData> XmlDataList;
88 class ToolbarItem :
public TQListViewItem
91 ToolbarItem(
TDEListView *parent,
const TQString& tag = TQString::null,
const TQString& name = TQString::null,
const TQString& statusText = TQString::null)
92 : TQListViewItem(parent),
95 m_statusText(statusText)
99 ToolbarItem(
TDEListView *parent, TQListViewItem *item,
const TQString &tag = TQString::null,
const TQString& name = TQString::null,
const TQString& statusText = TQString::null)
100 : TQListViewItem(parent, item),
103 m_statusText(statusText)
107 virtual TQString
key(
int column,
bool)
const 109 TQString s = text( column );
110 if ( s == LINESEPARATORSTRING )
112 if ( s == SEPARATORSTRING )
117 void setInternalTag(
const TQString &tag) { m_tag = tag; }
118 void setInternalName(
const TQString &name) { m_name = name; }
119 void setStatusText(
const TQString &text) { m_statusText = text; }
120 TQString internalTag()
const {
return m_tag; }
121 TQString internalName()
const {
return m_name; }
122 TQString statusText()
const {
return m_statusText; }
126 TQString m_statusText;
129 #define TOOLBARITEMMIMETYPE "data/x-kde.toolbar.item" 130 class ToolbarItemDrag :
public TQStoredDrag
133 ToolbarItemDrag(ToolbarItem *toolbarItem,
134 TQWidget *dragSource = 0,
const char *name = 0)
135 : TQStoredDrag( TOOLBARITEMMIMETYPE, dragSource,
name )
139 TQDataStream out(data, IO_WriteOnly);
140 out << toolbarItem->internalTag();
141 out << toolbarItem->internalName();
142 out << toolbarItem->statusText();
143 out << toolbarItem->text(1);
144 setEncodedData(data);
148 static bool canDecode(TQMimeSource* e)
150 return e->provides(TOOLBARITEMMIMETYPE);
153 static bool decode(
const TQMimeSource* e, KEditToolbarInternal::ToolbarItem& item )
158 TQByteArray data = e->encodedData(TOOLBARITEMMIMETYPE);
159 if ( data.isEmpty() )
162 TQString internalTag, internalName, statusText, text;
163 TQDataStream in(data, IO_ReadOnly);
169 item.setInternalTag( internalTag );
170 item.setInternalName( internalName );
171 item.setStatusText( statusText );
172 item.setText(1, text);
181 ToolbarListView(TQWidget *parent=0,
const char *name=0)
186 virtual TQDragObject *dragObject()
188 KEditToolbarInternal::ToolbarItem *item =
dynamic_cast<KEditToolbarInternal::ToolbarItem*
>(selectedItem());
190 KEditToolbarInternal::ToolbarItemDrag *obj =
new KEditToolbarInternal::ToolbarItemDrag(item,
191 this,
"ToolbarAction drag item");
192 const TQPixmap *pm = item->pixmap(0);
194 obj->setPixmap( *pm );
200 virtual bool acceptDrag(TQDropEvent *event)
const 202 return KEditToolbarInternal::ToolbarItemDrag::canDecode( event );
207 class KEditToolbarWidgetPrivate
218 : m_collection( collection )
220 m_instance = instance;
223 m_kdialogProcess = 0;
225 ~KEditToolbarWidgetPrivate()
229 TQString xmlFile(
const TQString& xml_file)
231 return xml_file.isNull() ? TQString(m_instance->instanceName()) +
"ui.rc" :
238 TQString loadXMLFile(
const TQString& _xml_file)
241 TQString xml_file = xmlFile(_xml_file);
244 if ( !TQDir::isRelativePath(xml_file) )
245 raw_xml = KXMLGUIFactory::readConfigFile(xml_file);
247 raw_xml = KXMLGUIFactory::readConfigFile(xml_file, m_instance);
255 ToolbarList findToolbars(TQDomNode n)
261 for( ; !n.isNull(); n = n.nextSibling() )
263 TQDomElement elem = n.toElement();
267 if (elem.tagName() == tagToolbar && elem.attribute( attrNoEdit ) !=
"true" )
270 list += findToolbars(elem.firstChild());
279 TQString toolbarName(
const KEditToolbarInternal::XmlData& xmlData,
const TQDomElement& it )
const 286 TQCString txt( it.namedItem( tagText ).toElement().text().utf8() );
288 txt = it.namedItem( tagText2 ).toElement().text().utf8();
290 name = it.attribute( attrName );
296 if ( ( xmlData.m_type == KEditToolbarInternal::XmlData::Shell ) ||
297 ( xmlData.m_type == KEditToolbarInternal::XmlData::Part ) )
299 TQString doc_name(xmlData.m_document.documentElement().attribute( attrName ));
300 name +=
" <" + doc_name +
">";
307 TQDomElement findElementForToolbarItem(
const KEditToolbarInternal::ToolbarItem* item )
const 310 for(TQDomNode n = m_currentToolbarElem.firstChild(); !n.isNull(); n = n.nextSibling())
312 TQDomElement elem = n.toElement();
313 if ((elem.attribute(attrName) == item->internalName()) &&
314 (elem.tagName() == item->internalTag()))
317 return TQDomElement();
323 static const char* s_XmlTypeToString[] = {
"Shell",
"Part",
"Local",
"Merged" };
324 KEditToolbarInternal::XmlDataList::Iterator xit = m_xmlFiles.begin();
325 for ( ; xit != m_xmlFiles.end(); ++xit )
327 kdDebug(240) <<
"KEditToolbarInternal::XmlData type " << s_XmlTypeToString[(*xit).m_type] <<
" xmlFile: " << (*xit).m_xmlFile <<
endl;
328 for( TQValueList<TQDomElement>::Iterator it = (*xit).m_barList.begin();
329 it != (*xit).m_barList.end(); ++it ) {
330 kdDebug(240) <<
" Toolbar: " << toolbarName( *xit, *it ) <<
endl;
332 if ( (*xit).m_actionCollection )
333 kdDebug(240) <<
" " << (*xit).m_actionCollection->count() <<
" actions in the collection." <<
endl;
344 KEditToolbarInternal::XmlData* m_currentXmlData;
345 TQDomElement m_currentToolbarElem;
348 TQString m_globalFile;
350 TQDomDocument m_localDoc;
353 ToolbarList m_barList;
355 KEditToolbarInternal::XmlDataList m_xmlFiles;
357 TQLabel *m_comboLabel;
359 TQLabel * m_helpArea;
365 class KEditToolbarPrivate {
376 const char *KEditToolbar::s_defaultToolbar = 0L;
379 bool global, TQWidget* parent,
const char* name)
380 :
KDialogBase(Swallow, i18n(
"Configure Toolbars"), Default|Ok|Apply|Cancel, Ok, parent, name),
381 m_widget(new
KEditToolbarWidget(TQString::fromLatin1(s_defaultToolbar), collection, file, global, this))
384 d->m_global = global;
385 d->m_collection = collection;
390 const TQString& file,
bool global,
391 TQWidget* parent,
const char* name)
396 d->m_global = global;
397 d->m_collection = collection;
403 m_widget(new
KEditToolbarWidget(TQString::fromLatin1(s_defaultToolbar), factory, this))
406 d->m_factory = factory;
410 TQWidget* parent,
const char* name)
415 d->m_factory = factory;
418 void KEditToolbar::init()
420 d =
new KEditToolbarPrivate();
426 connect(m_widget, TQT_SIGNAL(enableOk(
bool)), TQT_SLOT(
acceptOK(
bool)));
427 connect(m_widget, TQT_SIGNAL(enableOk(
bool)), TQT_SLOT(
enableButtonApply(
bool)));
430 setMinimumSize(sizeHint());
431 s_defaultToolbar = 0L;
447 if (
KMessageBox::warningContinueCancel(
this, i18n(
"Do you really want to reset all toolbars of this application to their default? The changes will be applied immediately."), i18n(
"Reset Toolbars"),i18n(
"Reset"))!=KMessageBox::Continue )
455 const TQString localPrefix =
locateLocal(
"data",
"");
456 TQPtrList<KXMLGUIClient> clients(d->m_factory->clients());
457 TQPtrListIterator<KXMLGUIClient> it( clients );
459 for( ; it.current(); ++it)
462 TQString file = client->
xmlFile();
467 if (TQDir::isRelativePath(file))
474 if (!file.startsWith(localPrefix))
478 if ( TQFile::exists( file ) )
479 if ( !TQFile::remove( file ) )
488 int slash = d->m_file.findRev(
'/')+1;
490 d->m_file = d->m_file.mid(slash);
493 if ( TQFile::exists( xml_file ) )
494 if ( !TQFile::remove( xml_file ) )
497 m_widget =
new KEditToolbarWidget(TQString::null, d->m_collection, d->m_file, d->m_global,
this);
503 connect(m_widget, TQT_SIGNAL(enableOk(
bool)), TQT_SLOT(
acceptOK(
bool)));
504 connect(m_widget, TQT_SIGNAL(enableOk(
bool)), TQT_SLOT(
enableButtonApply(
bool)));
517 if (!m_widget->
save())
530 (void)m_widget->
save();
537 s_defaultToolbar = toolbarName;
541 const TQString& file,
542 bool global, TQWidget *parent)
544 d(new KEditToolbarWidgetPrivate(instance(), collection))
546 initNonKPart(collection, file, global);
550 setMinimumSize(sizeHint());
555 const TQString& file,
bool global,
558 d(
new KEditToolbarWidgetPrivate(
instance(), collection))
560 initNonKPart(collection, file, global);
562 loadToolbarCombo(defaultToolbar);
564 setMinimumSize(sizeHint());
576 setMinimumSize(sizeHint());
587 loadToolbarCombo(defaultToolbar);
589 setMinimumSize(sizeHint());
598 const TQString& file,
bool global)
605 TQString localXML = d->loadXMLFile(file);
612 KEditToolbarInternal::XmlData local;
613 local.m_xmlFile = d->xmlFile(file);
614 local.m_type = KEditToolbarInternal::XmlData::Local;
615 local.m_document.setContent(localXML);
616 elem = local.m_document.documentElement().toElement();
617 local.m_barList = d->findToolbars(elem);
618 local.m_actionCollection = collection;
619 d->m_xmlFiles.append(local);
622 KEditToolbarInternal::XmlData merge;
623 merge.m_xmlFile = TQString::null;
624 merge.m_type = KEditToolbarInternal::XmlData::Merged;
626 elem = merge.m_document.documentElement().toElement();
627 merge.m_barList = d->findToolbars(elem);
628 merge.m_actionCollection = collection;
629 d->m_xmlFiles.append(merge);
648 TQPtrList<KXMLGUIClient> clients(factory->
clients());
649 TQPtrListIterator<KXMLGUIClient> it( clients );
650 for( ; it.current(); ++it)
654 if (client->
xmlFile().isNull())
657 KEditToolbarInternal::XmlData data;
658 data.m_xmlFile = client->localXMLFile();
660 data.m_type = KEditToolbarInternal::XmlData::Shell;
662 data.m_type = KEditToolbarInternal::XmlData::Part;
663 data.m_document.setContent( KXMLGUIFactory::readConfigFile( client->
xmlFile(), client->
instance() ) );
664 elem = data.m_document.documentElement().toElement();
665 data.m_barList = d->findToolbars(elem);
667 d->m_xmlFiles.append(data);
683 KEditToolbarInternal::XmlDataList::Iterator it = d->m_xmlFiles.begin();
684 for ( ; it != d->m_xmlFiles.end(); ++it)
687 if ( !((*it).m_isModified) )
691 if ( (*it).m_type == KEditToolbarInternal::XmlData::Merged )
694 dump_xml((*it).m_document);
696 kdDebug(240) <<
"Saving " << (*it).m_xmlFile <<
endl;
698 KXMLGUIFactory::saveConfigFile((*it).m_document, (*it).m_xmlFile);
714 TQPtrList<KXMLGUIClient> clients(
factory()->clients());
723 client = clients.prev();
730 TQPtrListIterator<KXMLGUIClient> cit( clients );
731 for( ; cit.current(); ++cit)
735 TQString file( client->
xmlFile() );
736 if ( !file.isEmpty() )
742 if ( client == firstClient )
746 client->
setXMLFile( file, client == firstClient );
754 for( ; cit.current(); ++cit)
758 void KEditToolbarWidget::setupLayout()
761 d->m_comboLabel =
new TQLabel(i18n(
"&Toolbar:"),
this);
762 m_toolbarCombo =
new TQComboBox(
this);
763 m_toolbarCombo->setEnabled(
false);
764 d->m_comboLabel->setBuddy(m_toolbarCombo);
766 connect(m_toolbarCombo, TQT_SIGNAL(activated(
const TQString&)),
767 this, TQT_SLOT(slotToolbarSelected(
const TQString&)));
777 TQLabel *inactive_label =
new TQLabel(i18n(
"A&vailable actions:"),
this);
778 m_inactiveList =
new KEditToolbarInternal::ToolbarListView(
this);
779 m_inactiveList->setDragEnabled(
true);
780 m_inactiveList->setAcceptDrops(
true);
781 m_inactiveList->setDropVisualizer(
false);
782 m_inactiveList->setAllColumnsShowFocus(
true);
783 m_inactiveList->setMinimumSize(180, 250);
784 m_inactiveList->header()->hide();
785 m_inactiveList->addColumn(
"");
786 int column2 = m_inactiveList->addColumn(
"");
787 m_inactiveList->setSorting( column2 );
788 inactive_label->setBuddy(m_inactiveList);
789 connect(m_inactiveList, TQT_SIGNAL(selectionChanged(TQListViewItem *)),
790 this, TQT_SLOT(slotInactiveSelected(TQListViewItem *)));
791 connect(m_inactiveList, TQT_SIGNAL( doubleClicked( TQListViewItem *,
const TQPoint &,
int )),
792 this, TQT_SLOT(slotInsertButton()));
795 TQLabel *active_label =
new TQLabel(i18n(
"Curr&ent actions:"),
this);
796 m_activeList =
new KEditToolbarInternal::ToolbarListView(
this);
797 m_activeList->setDragEnabled(
true);
798 m_activeList->setAcceptDrops(
true);
799 m_activeList->setDropVisualizer(
true);
800 m_activeList->setAllColumnsShowFocus(
true);
801 m_activeList->setMinimumWidth(m_inactiveList->minimumWidth());
802 m_activeList->header()->hide();
803 m_activeList->addColumn(
"");
804 m_activeList->addColumn(
"");
805 m_activeList->setSorting(-1);
806 active_label->setBuddy(m_activeList);
808 connect(m_inactiveList, TQT_SIGNAL(dropped(
TDEListView*,TQDropEvent*,TQListViewItem*)),
809 this, TQT_SLOT(slotDropped(
TDEListView*,TQDropEvent*,TQListViewItem*)));
810 connect(m_activeList, TQT_SIGNAL(dropped(
TDEListView*,TQDropEvent*,TQListViewItem*)),
811 this, TQT_SLOT(slotDropped(
TDEListView*,TQDropEvent*,TQListViewItem*)));
812 connect(m_activeList, TQT_SIGNAL(selectionChanged(TQListViewItem *)),
813 this, TQT_SLOT(slotActiveSelected(TQListViewItem *)));
814 connect(m_activeList, TQT_SIGNAL( doubleClicked( TQListViewItem *,
const TQPoint &,
int )),
815 this, TQT_SLOT(slotRemoveButton()));
818 d->m_changeIcon =
new KPushButton( i18n(
"Change &Icon..." ),
this );
820 d->m_hasKDialog = !kdialogExe.isEmpty();
821 d->m_changeIcon->setEnabled( d->m_hasKDialog );
823 connect( d->m_changeIcon, TQT_SIGNAL( clicked() ),
824 this, TQT_SLOT( slotChangeIcon() ) );
829 m_upAction =
new TQToolButton(
this);
830 iconSet = SmallIconSet(
"go-up" );
831 m_upAction->setIconSet( iconSet );
832 m_upAction->setEnabled(
false);
833 m_upAction->setAutoRepeat(
true);
834 connect(m_upAction, TQT_SIGNAL(clicked()), TQT_SLOT(slotUpButton()));
836 m_insertAction =
new TQToolButton(
this);
837 iconSet = TQApplication::reverseLayout() ? SmallIconSet(
"back" ) : SmallIconSet(
"forward" );
838 m_insertAction->setIconSet( iconSet );
839 m_insertAction->setEnabled(
false);
840 connect(m_insertAction, TQT_SIGNAL(clicked()), TQT_SLOT(slotInsertButton()));
842 m_removeAction =
new TQToolButton(
this);
843 iconSet = TQApplication::reverseLayout() ? SmallIconSet(
"forward" ) : SmallIconSet(
"back" );
844 m_removeAction->setIconSet( iconSet );
845 m_removeAction->setEnabled(
false);
846 connect(m_removeAction, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemoveButton()));
848 m_downAction =
new TQToolButton(
this);
849 iconSet = SmallIconSet(
"go-down" );
850 m_downAction->setIconSet( iconSet );
851 m_downAction->setEnabled(
false);
852 m_downAction->setAutoRepeat(
true);
853 connect(m_downAction, TQT_SIGNAL(clicked()), TQT_SLOT(slotDownButton()));
855 d->m_helpArea =
new TQLabel(
this);
856 d->m_helpArea->setAlignment( TQt::WordBreak );
868 TQGridLayout *button_layout =
new TQGridLayout(5, 3, 0);
870 name_layout->addWidget(d->m_comboLabel);
871 name_layout->addWidget(m_toolbarCombo);
875 button_layout->setRowStretch( 0, 10 );
876 button_layout->addWidget(m_upAction, 1, 1);
877 button_layout->addWidget(m_removeAction, 2, 0);
878 button_layout->addWidget(m_insertAction, 2, 2);
879 button_layout->addWidget(m_downAction, 3, 1);
880 button_layout->setRowStretch( 4, 10 );
882 inactive_layout->addWidget(inactive_label);
883 inactive_layout->addWidget(m_inactiveList, 1);
885 active_layout->addWidget(active_label);
886 active_layout->addWidget(m_activeList, 1);
887 active_layout->addLayout(changeIcon_layout);
889 changeIcon_layout->addStretch( 1 );
890 changeIcon_layout->addWidget( d->m_changeIcon );
891 changeIcon_layout->addStretch( 1 );
893 list_layout->addLayout(inactive_layout);
894 list_layout->addLayout(TQT_TQLAYOUT(button_layout));
895 list_layout->addLayout(active_layout);
897 top_layout->addLayout(name_layout);
898 top_layout->addWidget(d->m_comboSeparator);
899 top_layout->addLayout(list_layout,10);
900 top_layout->addWidget(d->m_helpArea);
904 void KEditToolbarWidget::loadToolbarCombo(
const TQString& defaultToolbar)
908 m_toolbarCombo->clear();
910 int defaultToolbarId = -1;
913 KEditToolbarInternal::XmlDataList::Iterator xit = d->m_xmlFiles.begin();
914 for ( ; xit != d->m_xmlFiles.end(); ++xit)
917 if ( (*xit).m_type == KEditToolbarInternal::XmlData::Local )
921 ToolbarList::Iterator it = (*xit).m_barList.begin();
922 for ( ; it != (*xit).m_barList.end(); ++it)
924 TQString name = d->toolbarName( *xit, *it );
925 m_toolbarCombo->setEnabled(
true );
926 m_toolbarCombo->insertItem( name );
927 if (defaultToolbarId == -1 && (name == defaultToolbar || defaultToolbar == (*it).attribute( attrName )))
928 defaultToolbarId = count;
932 bool showCombo = (count > 1);
933 d->m_comboLabel->setShown(showCombo);
934 d->m_comboSeparator->setShown(showCombo);
935 m_toolbarCombo->setShown(showCombo);
936 if (defaultToolbarId == -1)
937 defaultToolbarId = 0;
939 m_toolbarCombo->setCurrentItem(defaultToolbarId);
940 slotToolbarSelected(m_toolbarCombo->currentText());
943 void KEditToolbarWidget::loadActionList(TQDomElement& elem)
952 TQString sep_name(
"separator_%1");
955 m_inactiveList->clear();
956 m_activeList->clear();
957 m_insertAction->setEnabled(
false);
958 m_removeAction->setEnabled(
false);
959 m_upAction->setEnabled(
false);
960 m_downAction->setEnabled(
false);
966 TQMap<TQString, bool> active_list;
970 TQDomNode n = elem.lastChild();
971 for( ; !n.isNull(); n = n.previousSibling() )
973 TQDomElement it = n.toElement();
974 if (it.isNull())
continue;
975 if (it.tagName() == tagSeparator)
977 KEditToolbarInternal::ToolbarItem *act =
new KEditToolbarInternal::ToolbarItem(m_activeList, tagSeparator, sep_name.arg(sep_num++), TQString::null);
978 bool isLineSep = ( it.attribute(attrLineSeparator,
"true").lower() == TQString::fromLatin1(
"true") );
980 act->setText(1, LINESEPARATORSTRING);
982 act->setText(1, SEPARATORSTRING);
983 it.setAttribute( attrName, act->internalName() );
987 if (it.tagName() == tagMerge)
990 TQString name = it.attribute( attrName );
991 KEditToolbarInternal::ToolbarItem *act =
new KEditToolbarInternal::ToolbarItem(m_activeList, tagMerge, name, i18n(
"This element will be replaced with all the elements of an embedded component."));
992 if ( name.isEmpty() )
993 act->setText(1, i18n(
"<Merge>"));
995 act->setText(1, i18n(
"<Merge %1>").arg(name));
999 if (it.tagName() == tagActionList)
1001 KEditToolbarInternal::ToolbarItem *act =
new KEditToolbarInternal::ToolbarItem(m_activeList, tagActionList, it.attribute(attrName), i18n(
"This is a dynamic list of actions. You can move it, but if you remove it you won't be able to re-add it.") );
1002 act->setText(1, i18n(
"ActionList: %1").arg(it.attribute(attrName)));
1009 for (
unsigned int i = 0; i < actionCollection->
count(); i++)
1014 if (it.attribute( attrName ) == action->name())
1017 KEditToolbarInternal::ToolbarItem *act =
new KEditToolbarInternal::ToolbarItem(m_activeList, it.tagName(), action->name(), action->
toolTip());
1018 act->
setText(1, action->plainText());
1019 if (action->hasIcon()) {
1020 if (!action->icon().isEmpty()) {
1028 active_list.insert(action->name(),
true);
1035 for (
int i = actionCollection->
count() - 1; i > -1; --i)
1040 if (active_list.contains(action->name())) {
1044 KEditToolbarInternal::ToolbarItem *act =
new KEditToolbarInternal::ToolbarItem(m_inactiveList, tagActionList, action->name(), action->
toolTip());
1045 act->
setText(1, action->plainText());
1046 if (action->hasIcon()) {
1047 if (!action->icon().isEmpty()) {
1057 KEditToolbarInternal::ToolbarItem *act =
new KEditToolbarInternal::ToolbarItem(m_inactiveList, tagSeparator, sep_name.arg(sep_num++), TQString::null);
1058 act->setText(1, LINESEPARATORSTRING);
1059 act =
new KEditToolbarInternal::ToolbarItem(m_inactiveList, tagSeparator, sep_name.arg(sep_num++), TQString::null);
1060 act->setText(1, SEPARATORSTRING);
1065 return d->m_collection;
1068 void KEditToolbarWidget::slotToolbarSelected(
const TQString& _text)
1071 KEditToolbarInternal::XmlDataList::Iterator xit = d->m_xmlFiles.begin();
1072 for ( ; xit != d->m_xmlFiles.end(); ++xit)
1075 ToolbarList::Iterator it = (*xit).m_barList.begin();
1076 for ( ; it != (*xit).m_barList.end(); ++it)
1078 TQString name = d->toolbarName( *xit, *it );
1080 if ( name == _text )
1083 d->m_currentXmlData = & (*xit);
1084 d->m_currentToolbarElem = (*it);
1087 loadActionList(d->m_currentToolbarElem);
1089 if ((*xit).m_type == KEditToolbarInternal::XmlData::Part || (*xit).m_type == KEditToolbarInternal::XmlData::Shell)
1097 void KEditToolbarWidget::slotInactiveSelected(TQListViewItem *item)
1099 KEditToolbarInternal::ToolbarItem* toolitem =
static_cast<KEditToolbarInternal::ToolbarItem *
>(item);
1102 m_insertAction->setEnabled(
true);
1103 TQString statusText = toolitem->statusText();
1104 d->m_helpArea->setText( statusText );
1108 m_insertAction->setEnabled(
false);
1109 d->m_helpArea->setText( TQString::null );
1113 void KEditToolbarWidget::slotActiveSelected(TQListViewItem *item)
1115 KEditToolbarInternal::ToolbarItem* toolitem =
static_cast<KEditToolbarInternal::ToolbarItem *
>(item);
1116 m_removeAction->setEnabled( item );
1119 d->m_changeIcon->setEnabled( item &&
1121 toolitem->internalTag() == tagAction );
1125 if (item->itemAbove())
1126 m_upAction->setEnabled(
true);
1128 m_upAction->setEnabled(
false);
1130 if (item->itemBelow())
1131 m_downAction->setEnabled(
true);
1133 m_downAction->setEnabled(
false);
1134 TQString statusText = toolitem->statusText();
1135 d->m_helpArea->setText( statusText );
1139 m_upAction->setEnabled(
false);
1140 m_downAction->setEnabled(
false);
1141 d->m_helpArea->setText( TQString::null );
1145 void KEditToolbarWidget::slotDropped(
TDEListView *list, TQDropEvent *e, TQListViewItem *after)
1147 KEditToolbarInternal::ToolbarItem *item =
new KEditToolbarInternal::ToolbarItem(m_inactiveList);
1148 if(!KEditToolbarInternal::ToolbarItemDrag::decode(e, *item)) {
1153 if (list == m_activeList) {
1154 if (e->source() == m_activeList) {
1156 moveActive(item, after);
1159 insertActive(item, after,
true);
1160 }
else if (list == m_inactiveList) {
1165 delete item; item = 0;
1170 slotToolbarSelected( m_toolbarCombo->currentText() );
1173 void KEditToolbarWidget::slotInsertButton()
1175 KEditToolbarInternal::ToolbarItem *item = (KEditToolbarInternal::ToolbarItem*)m_inactiveList->currentItem();
1176 insertActive(item, m_activeList->currentItem(),
false);
1183 slotToolbarSelected( m_toolbarCombo->currentText() );
1186 void KEditToolbarWidget::slotRemoveButton()
1188 removeActive( dynamic_cast<KEditToolbarInternal::ToolbarItem*>(m_activeList->currentItem()) );
1193 slotToolbarSelected( m_toolbarCombo->currentText() );
1196 void KEditToolbarWidget::insertActive(KEditToolbarInternal::ToolbarItem *item, TQListViewItem *before,
bool prepend)
1207 TQDomElement new_item;
1209 if (item->text(1) == LINESEPARATORSTRING) {
1210 new_item =
domDocument().createElement(tagSeparator);
1211 }
else if (item->text(1) == SEPARATORSTRING) {
1212 new_item =
domDocument().createElement(tagSeparator);
1213 new_item.setAttribute(attrLineSeparator,
"false");
1215 new_item =
domDocument().createElement(tagAction);
1216 new_item.setAttribute(attrName, item->internalName());
1222 KEditToolbarInternal::ToolbarItem *act_item = (KEditToolbarInternal::ToolbarItem*)before;
1223 TQDomElement elem = d->findElementForToolbarItem( act_item );
1224 Q_ASSERT( !elem.isNull() );
1225 d->m_currentToolbarElem.insertAfter(new_item, elem);
1231 d->m_currentToolbarElem.insertBefore(new_item, d->m_currentToolbarElem.firstChild());
1233 d->m_currentToolbarElem.appendChild(new_item);
1237 d->m_currentToolbarElem.setAttribute( attrNoMerge,
"1");
1240 updateLocal(d->m_currentToolbarElem);
1243 void KEditToolbarWidget::removeActive(KEditToolbarInternal::ToolbarItem *item)
1254 TQDomElement elem = d->findElementForToolbarItem( item );
1255 if ( !elem.isNull() )
1258 d->m_currentToolbarElem.removeChild(elem);
1261 d->m_currentToolbarElem.setAttribute( attrNoMerge,
"1");
1264 updateLocal(d->m_currentToolbarElem);
1268 void KEditToolbarWidget::slotUpButton()
1270 KEditToolbarInternal::ToolbarItem *item = (KEditToolbarInternal::ToolbarItem*)m_activeList->currentItem();
1273 if (!item->itemAbove())
1279 moveActive( item, item->itemAbove()->itemAbove() );
1283 void KEditToolbarWidget::moveActive( KEditToolbarInternal::ToolbarItem* item, TQListViewItem* before )
1285 TQDomElement e = d->findElementForToolbarItem( item );
1291 KEditToolbarInternal::ToolbarItem *clone =
new KEditToolbarInternal::ToolbarItem(m_activeList,
1293 item->internalTag(),
1294 item->internalName(),
1295 item->statusText());
1297 clone->setText(1, item->text(1));
1300 if( item->pixmap(0) )
1301 clone->setPixmap(0, *item->pixmap(0));
1304 m_activeList->setSelected(clone,
true);
1307 m_activeList->ensureItemVisible(clone);
1311 d->m_currentToolbarElem.insertBefore(e, d->m_currentToolbarElem.firstChild() );
1313 d->m_currentToolbarElem.insertAfter(e, d->findElementForToolbarItem( (KEditToolbarInternal::ToolbarItem*)before ));
1317 d->m_currentToolbarElem.setAttribute( attrNoMerge,
"1");
1320 updateLocal(d->m_currentToolbarElem);
1323 void KEditToolbarWidget::slotDownButton()
1325 KEditToolbarInternal::ToolbarItem *item = (KEditToolbarInternal::ToolbarItem*)m_activeList->currentItem();
1328 if (!item->itemBelow())
1334 moveActive( item, item->itemBelow() );
1338 void KEditToolbarWidget::updateLocal(TQDomElement& elem)
1342 KEditToolbarInternal::XmlDataList::Iterator xit = d->m_xmlFiles.begin();
1343 for ( ; xit != d->m_xmlFiles.end(); ++xit)
1345 if ( (*xit).m_type == KEditToolbarInternal::XmlData::Merged )
1348 if ( (*xit).m_type == KEditToolbarInternal::XmlData::Shell ||
1349 (*xit).m_type == KEditToolbarInternal::XmlData::Part )
1351 if ( d->m_currentXmlData->m_xmlFile == (*xit).m_xmlFile )
1353 (*xit).m_isModified =
true;
1360 (*xit).m_isModified =
true;
1362 ToolbarList::Iterator it = (*xit).m_barList.begin();
1363 for ( ; it != (*xit).m_barList.end(); ++it)
1365 TQString name( (*it).attribute( attrName ) );
1366 TQString tag( (*it).tagName() );
1367 if ( (tag != elem.tagName()) || (name != elem.attribute(attrName)) )
1370 TQDomElement toolbar = (*xit).m_document.documentElement().toElement();
1371 toolbar.replaceChild(elem, (*it));
1376 TQDomElement toolbar = (*xit).m_document.documentElement().toElement();
1377 toolbar.appendChild(elem);
1381 void KEditToolbarWidget::slotChangeIcon()
1388 if ( d->m_kdialogProcess && d->m_kdialogProcess->isRunning() )
1391 d->m_kdialogProcess =
new KProcIO;
1393 (*d->m_kdialogProcess) << kdialogExe;
1394 (*d->m_kdialogProcess) <<
"--embed";
1395 (*d->m_kdialogProcess) << TQString::number( (ulong)topLevelWidget()->winId() );
1396 (*d->m_kdialogProcess) <<
"--geticon";
1397 (*d->m_kdialogProcess) <<
"Toolbar";
1398 (*d->m_kdialogProcess) <<
"Actions";
1400 kdError(240) <<
"Can't run " << kdialogExe <<
endl;
1401 delete d->m_kdialogProcess;
1402 d->m_kdialogProcess = 0;
1406 m_activeList->setEnabled(
false );
1407 m_toolbarCombo->setEnabled(
false );
1409 connect( d->m_kdialogProcess, TQT_SIGNAL( processExited(
TDEProcess* ) ),
1410 this, TQT_SLOT( slotProcessExited(
TDEProcess* ) ) );
1413 void KEditToolbarWidget::slotProcessExited(
TDEProcess* )
1415 m_activeList->setEnabled(
true );
1416 m_toolbarCombo->setEnabled(
true );
1420 if (!d->m_kdialogProcess) {
1421 kdError(240) <<
"Something is wrong here! m_kdialogProcess is zero!" <<
endl;
1425 if ( !d->m_kdialogProcess->normalExit() ||
1426 d->m_kdialogProcess->exitStatus() ||
1427 d->m_kdialogProcess->readln(icon,
true) <= 0 ) {
1428 delete d->m_kdialogProcess;
1429 d->m_kdialogProcess = 0;
1433 KEditToolbarInternal::ToolbarItem *item = (KEditToolbarInternal::ToolbarItem*)m_activeList->currentItem();
1435 item->setPixmap(0, BarIcon(icon, 16));
1437 Q_ASSERT( d->m_currentXmlData->m_type != KEditToolbarInternal::XmlData::Merged );
1439 d->m_currentXmlData->m_isModified =
true;
1445 Q_ASSERT( !act_elem.isNull() );
1446 act_elem.setAttribute(
"icon", icon );
1452 delete d->m_kdialogProcess;
1453 d->m_kdialogProcess = 0;
1456 void KEditToolbar::virtual_hook(
int id,
void* data )
1457 { KDialogBase::virtual_hook(
id, data ); }
1459 void KEditToolbarWidget::virtual_hook(
int id,
void* data )
1460 { KXMLGUIClient::virtual_hook(
id, data ); }
1462 #include "kedittoolbar.moc"
virtual void setXML(const TQString &document, bool merge=false)
Sets the XML for the part.
virtual void setXMLFile(const TQString &file, bool merge=false, bool setXMLDoc=true)
Sets the name of the rc file containing the XML for the part.
A KXMLGUIClient can be used with KXMLGUIFactory to create a GUI from actions and an XML document...
TQString locateLocal(const char *type, const TQString &filename, const TDEInstance *instance=TDEGlobal::instance())
void setXMLGUIBuildDocument(const TQDomDocument &doc)
void removeClient(KXMLGUIClient *client)
Removes the GUI described by the client, by unplugging all provided actions and removing all owned co...
int key(StdAccel) KDE_DEPRECATED
void enableButtonOK(bool state)
Enable or disable (gray out) the OK button.
void addClient(KXMLGUIClient *client)
Creates the GUI described by the TQDomDocument of the client, using the client's actions, and merges it with the previously created GUI.
kdbgstream kdError(int area=0)
virtual void setDOMDocument(const TQDomDocument &document, bool merge=false)
Sets the Document for the part, describing the layout of the GUI.
TQCString instanceName() const
virtual TDEActionCollection * actionCollection() const
Retrieves the entire action collection for the GUI client.
KDialogBase(TQWidget *parent=0, const char *name=0, bool modal=true, const TQString &caption=TQString::null, int buttonMask=Ok|Apply|Cancel, ButtonCode defaultButton=Ok, bool separator=false, const KGuiItem &user1=KGuiItem(), const KGuiItem &user2=KGuiItem(), const KGuiItem &user3=KGuiItem())
Constructor for the standard mode where you must specify the main widget with setMainWidget() ...
kdbgstream kdDebug(int area=0)
virtual void setWidget(TQWidget *widget)
This sets the widget to which the keyboard shortcuts should be attached.
A managed set of TDEAction objects.
Class to encapsulate user-driven action or event.
A dialog base class with standard buttons and predefined layouts.
void setFactory(KXMLGUIFactory *factory)
This method is called by the KXMLGUIFactory as soon as the client is added to the KXMLGUIFactory's GU...
Standard horizontal or vertical separator.
static TQDomElement findActionByName(TQDomElement &elem, const TQString &sName, bool create)
TQPtrList< KXMLGUIClient > clients() const
Returns a list of all clients currently added to this factory.
static int spacingHint()
Return the number of pixels you shall use between widgets inside a dialog according to the KDE standa...
static TDEInstance * instance()
kdbgstream kdWarning(int area=0)
void setMainWidget(TQWidget *widget)
Sets the main user definable widget.
static TQString findExe(const TQString &appname, const TQString &pathstr=TQString::null, bool ignoreExecBit=false)
virtual TDEAction * action(int index) const
Return the TDEAction* at position "index" in the action collection.
static TQDomElement actionPropertiesElement(TQDomDocument &doc)
virtual void setText(const TQString &text)
Sets the text associated with this action.
virtual TDEInstance * instance() const
This Widget extends the functionality of TQListView to honor the system wide settings for Single Clic...
static int warningContinueCancel(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const KGuiItem &buttonContinue=KStdGuiItem::cont(), const TQString &dontAskAgainName=TQString::null, int options=Notify)
Display a "warning" dialog.
static const TQString & staticQString(const char *str)
KXMLGUIFactory * factory() const
Retrieves a pointer to the KXMLGUIFactory this client is associated with (will return 0L if the clien...
KXMLGUIFactory, together with KXMLGUIClient objects, can be used to create a GUI of container widgets...
virtual TQString xmlFile() const
This will return the name of the XML file as set by setXMLFile().
virtual TQDomDocument domDocument() const
void enableButtonApply(bool state)
Enable or disable (gray out) the Apply button.
TDEAction * action(const char *name) const
Retrieves an action of the client by name.
virtual uint count() const
Returns the TDEAccel object associated with widget #.
TDEIconLoader * iconLoader() const
kndbgstream & endl(kndbgstream &s)
TQString locate(const char *type, const TQString &filename, const TDEInstance *instance=TDEGlobal::instance())
TQPixmap loadIcon(const TQString &name, TDEIcon::Group group, int size=0, int state=TDEIcon::DefaultState, TQString *path_store=0L, bool canReturnNull=false) const
TQString name(StdAccel id)
virtual TQString toolTip() const
Get the tooltip text for the action.
virtual TQIconSet iconSet(TDEIcon::Group group, int size=0) const
Get the TQIconSet from which the icons used to display this action will be chosen.