/* 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. */ /* Copyright (C) 2006 Dario Abatianni Copyright (C) 2006 John Tapsell */ #include "quickbuttons_preferences.h" #include "config/preferences.h" #include #include #include #include #include #include #include #include #include QuickButtons_Config::QuickButtons_Config(TQWidget* parent, const char* name) : QuickButtons_ConfigUI(parent, name) { // reset flag to defined state (used to block signals when just selecting a new item) m_newItemSelected=false; // populate listview loadSettings(); // make items react to drag & drop buttonListView->setSorting(-1,false); buttonListView->header()->setMovingEnabled(false); connect(buttonListView,TQT_SIGNAL (selectionChanged(TQListViewItem*)),this,TQT_SLOT (entrySelected(TQListViewItem*)) ); connect(buttonListView,TQT_SIGNAL (clicked(TQListViewItem*)),this,TQT_SLOT (entrySelected(TQListViewItem*)) ); connect(buttonListView,TQT_SIGNAL (moved()),this,TQT_SIGNAL (modified()) ); connect(nameInput,TQT_SIGNAL (textChanged(const TQString&)),this,TQT_SLOT (nameChanged(const TQString&)) ); connect(actionInput,TQT_SIGNAL (textChanged(const TQString&)),this,TQT_SLOT (actionChanged(const TQString&)) ); connect(newButton,TQT_SIGNAL (clicked()),this,TQT_SLOT (addEntry())); connect(removeButton,TQT_SIGNAL (clicked()),this,TQT_SLOT (removeEntry())); } QuickButtons_Config::~QuickButtons_Config() { } void QuickButtons_Config::loadSettings() { setButtonsListView(Preferences::quickButtonList()); // remember button list for hasChanged() m_oldButtonList=Preferences::quickButtonList(); } // fill listview with button definitions void QuickButtons_Config::setButtonsListView(const TQStringList &buttonList) { // clear listView buttonListView->clear(); // go through the list for(unsigned int index=buttonList.count();index!=0;index--) { // get button definition TQString definition=buttonList[index-1]; // cut definition apart in name and action, and create a new listview item new KListViewItem(buttonListView,definition.section(',',0,0),definition.section(',',1)); } // for buttonListView->setSelected(buttonListView->firstChild(), true); } // save quick buttons to configuration void QuickButtons_Config::saveSettings() { // get configuration object TDEConfig* config=kapp->config(); // delete all buttons config->deleteGroup("Button List"); // create new empty button group config->setGroup("Button List"); // create empty list TQStringList newList=currentButtonList(); // check if there are any quick buttons in the list view if(newList.count()) { // go through all buttons and save them into the configuration for(unsigned int index=0;indexwriteEntry(TQString("Button%1").arg(index),newList[index]); } // for } // if there were no buttons at all, write a dummy entry to prevent TDEConfigXT from "optimizing" // the group out, which would in turn make konvi restore the default buttons else config->writeEntry("Empty List",TQString()); // set internal button list Preferences::setQuickButtonList(newList); // remember button list for hasChanged() m_oldButtonList=newList; } void QuickButtons_Config::restorePageToDefaults() { setButtonsListView(Preferences::defaultQuickButtonList()); } TQStringList QuickButtons_Config::currentButtonList() { // get first item of the button listview TQListViewItem* item=buttonListView->firstChild(); // create empty list TQStringList newList; // go through all items and save them into the configuration while(item) { // remember button in internal list newList.append(item->text(0)+','+item->text(1)); // get next item in the listview item=item->itemBelow(); } // while // return list return newList; } bool QuickButtons_Config::hasChanged() { return(m_oldButtonList!=currentButtonList()); } // slots // what to do when the user selects an item void QuickButtons_Config::entrySelected(TQListViewItem* quickButtonEntry) { // play it safe, assume disabling all widgets first bool enabled=false; // check if there really was an item selected if(quickButtonEntry) { // remember to enable the editing widgets enabled=true; // tell the editing widgets not to emit modified() on signals now m_newItemSelected=true; // update editing widget contents nameInput->setText(quickButtonEntry->text(0)); actionInput->setText(quickButtonEntry->text(1)); // re-enable modified() signal on text changes in edit widgets m_newItemSelected=false; } // enable or disable editing widgets removeButton->setEnabled(enabled); nameLabel->setEnabled(enabled); nameInput->setEnabled(enabled); actionLabel->setEnabled(enabled); actionInput->setEnabled(enabled); } // what to do when the user change the name of a quick button void QuickButtons_Config::nameChanged(const TQString& newName) { // get possible first selected item TQListViewItem* item=buttonListView->selectedItem(); // sanity check if(item) { // rename item item->setText(0,newName); // tell the config system that something has changed if(!m_newItemSelected) emit modified(); } } // what to do when the user change the action definition of a quick button void QuickButtons_Config::actionChanged(const TQString& newAction) { // get possible first selected item TQListViewItem* item=buttonListView->selectedItem(); // sanity check if(item) { // rename item item->setText(1,newAction); // tell the config system that something has changed if(!m_newItemSelected) emit modified(); } } // add button pressed void QuickButtons_Config::addEntry() { // add new item at the bottom of list view KListViewItem* newItem=new KListViewItem(buttonListView,buttonListView->lastChild(),i18n("New"),TQString()); // if successful ... if(newItem) { // select new item and make it the current one buttonListView->setSelected(newItem,true); buttonListView->setCurrentItem(newItem); // set input focus on item name edit nameInput->setFocus(); // select all text to make overwriting easier nameInput->selectAll(); // tell the config system that something has changed emit modified(); } } // remove button pressed void QuickButtons_Config::removeEntry() { // get possible first selected item TQListViewItem* item=buttonListView->selectedItem(); // sanity check if(item) { // get item below the current one TQListViewItem* nextItem=item->itemBelow(); // if there was none, get the one above if(!nextItem) nextItem=item->itemAbove(); // remove the item from the list delete item; // check if we found the next item if(nextItem) { // select the item and make it the current ite, buttonListView->setSelected(nextItem,true); buttonListView->setCurrentItem(nextItem); } else { // no next item found, this means the list is empty entrySelected(0); } // tell the config system that somethig has changed emit modified(); } } #include "quickbuttons_preferences.moc"