diff options
Diffstat (limited to 'src/queryresultsmenu.cpp')
-rw-r--r-- | src/queryresultsmenu.cpp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/src/queryresultsmenu.cpp b/src/queryresultsmenu.cpp new file mode 100644 index 0000000..74bcdb4 --- /dev/null +++ b/src/queryresultsmenu.cpp @@ -0,0 +1,170 @@ +/*************************************************************************** + * + * Copyright (C) 2005 Elad Lahav (elad_lahav@users.sourceforge.net) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ***************************************************************************/ + +#include <klocale.h> +#include "queryresultsmenu.h" + +/** + * Class constructor. + * @param pParent Parent widget + * @param szName Optional object name + */ +QueryResultsMenu::QueryResultsMenu(QWidget* pParent, const char* szName) : + QPopupMenu(pParent, szName), + m_pItem(NULL) +{ + // Create the menu + insertItem(i18n("&View Source"), this, SLOT(slotViewSource()), 0, + ViewSource); + insertItem(i18n("Find &Definition"), this, SLOT(slotFindDef()), 0, + FindDef); + insertSeparator(); + insertItem(i18n("&Copy"), this, SLOT(slotCopy()), 0, Copy); + insertSeparator(); + insertItem(i18n("&Filter..."), this, SLOT(slotFilter()), 0, Filter); + insertItem(i18n("&Show All"), this, SIGNAL(showAll()), 0, ShowAll); + insertSeparator(); + insertItem(i18n("&Remove Item"), this, SLOT(slotRemove()), 0, Remove); +} + +/** + * Class destructor. + */ +QueryResultsMenu::~QueryResultsMenu() +{ +} + +/** + * Displays the popup-menu at the requested coordinates. + * @param pItem The item on which the menu was requested + * @param ptPos The requested position for the menu + * @param nCol The column over which the menu was requested, -1 if no + * column is associated with the request + */ +void QueryResultsMenu::slotShow(QListViewItem* pItem, const QPoint& ptPos, + int nCol) +{ + // Save the requested item and column number to use in signals + m_pItem = pItem; + m_nCol = nCol; + + if (m_pItem == NULL) { + // No item selected, disable everything but the "Filter" and "Show All" + // items + setItemEnabled(ViewSource, false); + setItemEnabled(FindDef, false); + setItemEnabled(Copy, false); + setItemEnabled(Remove, false); + } + else { + // Item selected, enable record-specific actions + setItemEnabled(ViewSource, true); + setItemEnabled(Copy, true); + setItemEnabled(Remove, true); + + // The "Find Definition" item should only be enabled if the mouse + // was clicked over a valid function name + setItemEnabled(FindDef, (m_nCol == 0) && + (m_pItem->text(0) != "<global>")); + + // Set menu contents according to the column number + switch (m_nCol) { + case 0: + changeItem(Copy, "&Copy Function"); + break; + + case 1: + changeItem(Copy, "&Copy File"); + break; + + case 2: + changeItem(Copy, "&Copy Line Number"); + break; + + case 3: + changeItem(Copy, "&Copy Text"); + break; + + default: + m_nCol = 0; + } + } + + // Show the menu + popup(ptPos); +} + +/** + * Emits the viewSource() signal. + * This slot is activated when the "View Source" item is selected. + */ +void QueryResultsMenu::slotViewSource() +{ + if (m_pItem != NULL) + emit viewSource(m_pItem); +} + +/** + * Emits the findDef() signal. + * This slot is activated when the "Find Definition" item is selected. + */ +void QueryResultsMenu::slotFindDef() +{ + if (m_pItem != NULL) + emit findDef(m_pItem->text(0)); +} + +/** + * Emits the copy() signal. + * This slot is activated when the "Copy [Column]" item is selected. + */ +void QueryResultsMenu::slotCopy() +{ + if (m_pItem != NULL) + emit copy(m_pItem, m_nCol); +} + +/** + * Emits the filter() signal. + * This slot is activated when the "Filter..." item is selected. + */ +void QueryResultsMenu::slotFilter() +{ + emit filter(m_nCol); +} + +/** + * Emits the remove() signal. + * This slot is activated when the "Remove" item is selected. + */ +void QueryResultsMenu::slotRemove() +{ + if (m_pItem != NULL) + emit remove(m_pItem); +} + +#include "queryresultsmenu.moc" |