|
|
|
// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8; -*-
|
|
|
|
/* This file is part of the KDE project
|
|
|
|
Copyright (C) 2000 by Carsten Pfeiffer <pfeiffer@kde.org>
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; see the file COPYING. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
#ifndef URLGRABBER_H
|
|
|
|
#define URLGRABBER_H
|
|
|
|
|
|
|
|
#include <tqptrlist.h>
|
|
|
|
#include <tqintdict.h>
|
|
|
|
#include <tqregexp.h>
|
|
|
|
#include <tqstring.h>
|
|
|
|
#include <tqstringlist.h>
|
|
|
|
|
|
|
|
#include <kprocess.h>
|
|
|
|
|
|
|
|
|
|
|
|
class TQTimer;
|
|
|
|
|
|
|
|
class TDEConfig;
|
|
|
|
class TDEPopupMenu;
|
|
|
|
|
|
|
|
class ClipAction;
|
|
|
|
struct ClipCommand;
|
|
|
|
typedef TQPtrList<ClipAction> ActionList;
|
|
|
|
typedef TQPtrListIterator<ClipAction> ActionListIterator;
|
|
|
|
|
|
|
|
class URLGrabber : public TQObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
URLGrabber( TDEConfig* config );
|
|
|
|
~URLGrabber();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks a given string whether it matches any of the user-defined criteria.
|
|
|
|
* If it does, the configured action will be executed.
|
|
|
|
* @returns false if the string should be put into the popupmenu or not,
|
|
|
|
* otherwise true.
|
|
|
|
*/
|
|
|
|
bool checkNewData( const TQString& clipData );
|
|
|
|
void invokeAction( const TQString& clip = TQString::null );
|
|
|
|
|
|
|
|
const ActionList * actionList() const { return myActions; }
|
|
|
|
void setActionList( ActionList * );
|
|
|
|
void readConfiguration( TDEConfig * );
|
|
|
|
void writeConfiguration( TDEConfig * );
|
|
|
|
|
|
|
|
int popupTimeout() const { return myPopupKillTimeout; }
|
|
|
|
void setPopupTimeout( int timeout ) { myPopupKillTimeout = timeout; }
|
|
|
|
|
|
|
|
const TQStringList& avoidWindows() const { return myAvoidWindows; }
|
|
|
|
void setAvoidWindows( const TQStringList& list ) { myAvoidWindows = list; }
|
|
|
|
|
|
|
|
bool stripWhiteSpace() const { return m_stripWhiteSpace; }
|
|
|
|
void setStripWhiteSpace( bool enable ) { m_stripWhiteSpace = enable; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
const ActionList& matchingActions( const TQString& );
|
|
|
|
void execute( const struct ClipCommand *command,
|
|
|
|
TQStringList *backrefs ) const;
|
|
|
|
void editData();
|
|
|
|
bool isAvoidedWindow() const;
|
|
|
|
void actionMenu( bool wm_class_check );
|
|
|
|
|
|
|
|
ActionList *myActions;
|
|
|
|
ActionList myMatches;
|
|
|
|
TQStringList myAvoidWindows;
|
|
|
|
TQString myClipData;
|
|
|
|
ClipAction *myCurrentAction;
|
|
|
|
TQIntDict<ClipCommand> myCommandMapper;
|
|
|
|
TQIntDict<TQStringList> myGroupingMapper;
|
|
|
|
TDEPopupMenu *myMenu;
|
|
|
|
TQTimer *myPopupKillTimer;
|
|
|
|
int myPopupKillTimeout;
|
|
|
|
bool m_stripWhiteSpace;
|
|
|
|
TDEConfig* m_config;
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void slotActionMenu() { actionMenu( true ); }
|
|
|
|
void slotItemSelected( int );
|
|
|
|
void slotKillPopupMenu();
|
|
|
|
|
|
|
|
|
|
|
|
signals:
|
|
|
|
void sigPopup( TQPopupMenu * );
|
|
|
|
void sigDisablePopup();
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct ClipCommand
|
|
|
|
{
|
|
|
|
ClipCommand( const TQString &, const TQString &, bool = true, const TQString & = "" );
|
|
|
|
TQString command;
|
|
|
|
TQString description;
|
|
|
|
bool isEnabled;
|
|
|
|
TQString pixmap;
|
|
|
|
// int id; // the index reflecting the position in the list of commands
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents one configured action. An action consists of one regular
|
|
|
|
* expression, an (optional) description and a list of ClipCommands
|
|
|
|
* (a command to be executed, a description and an enabled/disabled flag).
|
|
|
|
*/
|
|
|
|
class ClipAction
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ClipAction( const TQString& regExp, const TQString& description );
|
|
|
|
ClipAction( const ClipAction& );
|
|
|
|
ClipAction( TDEConfig *kc );
|
|
|
|
~ClipAction();
|
|
|
|
|
|
|
|
void setRegExp( const TQString& r) { myRegExp = TQRegExp( r ); }
|
|
|
|
TQString regExp() const { return myRegExp.pattern(); }
|
|
|
|
inline bool matches( const TQString& string ) {
|
|
|
|
int res = myRegExp.search( string ) ;
|
|
|
|
if ( res != -1 ) {
|
|
|
|
myCapturedTexts = myRegExp.capturedTexts();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setDescription( const TQString& d) { myDescription = d; }
|
|
|
|
const TQString& description() const { return myDescription; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes all ClipCommands associated with this ClipAction.
|
|
|
|
*/
|
|
|
|
void clearCommands() { myCommands.clear(); }
|
|
|
|
|
|
|
|
void addCommand( const TQString& command, const TQString& description, bool, const TQString& icon = "" );
|
|
|
|
const TQPtrList<ClipCommand>& commands() const { return myCommands; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Saves this action to a a given TDEConfig object
|
|
|
|
*/
|
|
|
|
void save( TDEConfig * ) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the most recent list of matched group backreferences.
|
|
|
|
* Note: you probably need to call matches() first.
|
|
|
|
*/
|
|
|
|
inline const TQStringList* capturedTexts() const { return &myCapturedTexts; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
TQRegExp myRegExp;
|
|
|
|
TQStringList myCapturedTexts;
|
|
|
|
TQString myDescription;
|
|
|
|
TQPtrList<ClipCommand> myCommands;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // URLGRABBER_H
|