You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-style-baghira/starter/menu.h

321 lines
8.1 KiB

#ifndef STARTMENU_H
#define STARTMENU_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <qpoint.h>
#include <qwidget.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qscrollview.h>
#include <qmap.h>
#include <qpixmap.h>
#include <qsortedlist.h>
#include <qptrlist.h>
#include <klineedit.h>
#include <kservicegroup.h>
#include "mykey.h"
class KIconLoader;
class QPaintEvent;
class QMouseEvent;
class QEvent;
class QPixmap;
class QVBoxLayout;
class QComboBox;
class StartMenuButton;
class KConfig;
class LinkConfig;
class Panel : public QWidget//QScrollView
{
friend class StartMenu;
friend class StartMenuButton;
Q_OBJECT
public:
Panel(int size = 32, QWidget * parent = 0, const char * name = 0);
Orientation orientation(){ return _orientation; }
void setOrientation ( Orientation o );
// void addItem ( QWidget *w );
StartMenuButton* addIcon ( QString icon, QString title, QString command, QPoint pt = QPoint(-1,-1) );
void save(KConfig* config);
void repositionIcon ( StartMenuButton* bt, QPoint pt );
void ensureVisible(QRect & rect);
void reloadIcons(int size);
void poof();
public slots:
void updateSize(int);
protected:
void wheelEvent ( QWheelEvent * );
void dragEnterEvent ( QDragEnterEvent * );
void dropEvent ( QDropEvent * );
void mouseReleaseEvent ( QMouseEvent * e );
void resizeEvent ( QResizeEvent * );
LinkConfig *linkConfigDialog;
int _size;
private:
int _count;
Orientation _orientation;
bool _draggedMe;
int _poofIndex;
QPoint iconAddPosition;
QPixmap *_poofPix;
QPixmap *_poofAnimPix;
QWidget *_poof;
private slots:
void addIcon();
void runPoof();
signals:
void message(const QString&);
void clearStatus();
};
class QTextDrag;
class StartMenuButton : public QWidget
{
friend class Panel;
Q_OBJECT
public:
enum Orientation { Horizontal = 0, Vertical, Status };
StartMenuButton ( int size, QString icon, QString title, QString command, Orientation orientation, QWidget* parent = 0, const char * name = 0);
void smartMove(QPoint & pt); // prevents collisions with other childs of parentWidget()
void smartMove(int x, int y);
void reloadIcon(int size);
public slots:
void edit();
protected:
QString & command(){return m_command;}
QString & title(){return m_title;}
QString & icon(){return m_icon;}
void mouseReleaseEvent ( QMouseEvent * e );
void mouseMoveEvent ( QMouseEvent * e );
void enterEvent( QEvent * );
void leaveEvent( QEvent * );
bool isMoving() {return _moving;}
private:
Orientation m_orientation;
bool _moving;
QTextDrag *myDrag;
QString m_command;
QString m_title;
QString m_icon;
QLabel* m_titleLabel;
QLabel* m_pixmapLabel;
QPixmap m_pix;
QPixmap m_hoverPix;
signals:
void pressed(const QString &);
void hovered(const QString &);
void unhovered();
void updateSize(int);
};
class KService;
class QDate;
class AppList;
class StartMenuEntry : public QWidget
{
friend class AppList;
Q_OBJECT
public:
StartMenuEntry(KService * service, QString relPath, int size = 32, bool neewbie = false, QWidget * parent = 0);
~StartMenuEntry();
void reloadIcon(int size);
bool display;
QString title();
void saveStats();
int rank;
bool forNewbie;
//--- operators to allow use of qHeapSort()
bool operator==( const StartMenuEntry& se ) const;
bool operator!=( const StartMenuEntry& se ) const;
bool operator<( const StartMenuEntry& se ) const;
bool operator>( const StartMenuEntry& se ) const;
bool operator==( const double& d ) const;
bool operator!=( const double& d ) const;
bool operator<( const double& d ) const;
bool operator>( const double& d ) const;
protected:
void focusInEvent ( QFocusEvent * );
void focusOutEvent ( QFocusEvent * );
void mouseReleaseEvent ( QMouseEvent * e );
void mouseMoveEvent ( QMouseEvent * mme );
void keyPressEvent ( QKeyEvent * e );
void enterEvent( QEvent * );
void leaveEvent( QEvent * );
KService* m_service;
QString groupPath;
QDate lastUse;
uint usage;
private:
void execute();
QString exec;
bool isCurrent;
QLabel* m_titleLabel;
QLabel* m_commentLabel;
QLabel* m_pixmapLabel;
QPixmap m_pix;
QPixmap m_hoverPix;
signals:
void closeMenu();
void pressed();
void appDown();
void appUp();
void appLeft();
void hovered(const QString &);
void sayText(const QString&);
void unhovered();
void popup(StartMenuEntry*);
void executed();
};
class KPopupMenu;
class ConfigDialog;
class HelpDialog;
class AppList : public QScrollView
{
friend class StartMenu;
Q_OBJECT
public:
AppList(int size = 32, QWidget * parent = 0);
StartMenuEntry* addApp(KService * service, QStringList & captions, QString relPath);
void finish();
StartMenuEntry* handledEntry; // for rightclick menu action
void writeEntry(QString path, bool hidden = false); // for add/edit
void reloadIcons(int size);
public slots:
void addEntry();
void addDialog();
void removeEntry();
void editEntry();
void editDialog();
void clear();
void reset();
void search(const QString & string);
void appDown();
void appUp();
void appLeft();
void sort();
void showCategory(const QString & string);
void unblockPopup(){popupBlocked_ = false;}
protected:
QStringList categories;
int favItemAmount;
void save(KConfig* config);
void mouseReleaseEvent ( QMouseEvent * e );
void windowActivationChange ( bool oldActive );
private:
void init();
void insertGroup(KServiceGroup *g, QStringList & captions, QStringList & paths);
KServiceGroup::Ptr m_root;
KIconLoader *m_iconLoader;
QLabel *infoLabel;
QVBoxLayout * infoLayout;
QVBoxLayout * m_VLayout;
QFrame * m_widget;
bool newbie;
QStringList neewbieApps;
KPopupMenu *m_popup;
bool popupBlocked_;
int _size;
typedef QSortedList<StartMenuEntry> StartMenuEntryList;
typedef QMap<QString,StartMenuEntryList> KeyWordList;
StartMenuEntryList entryList;
KeyWordList m_keywordList;
KeyWordList m_groupList;
ConfigDialog* configDialog_;
HelpDialog* helpDialog_;
private slots:
void popup(StartMenuEntry*);
signals:
void looseKey();
void message(const QString&);
void sayText(const QString&);
void clearStatus();
};
class QStringList;
class SearchLine : public KLineEdit
{
Q_OBJECT
public:
SearchLine( QWidget * parent );
bool blocked;
protected slots:
void makeCompletion (const QString &);
void block(){blocked = true;}
signals:
void typedTextChanged(const QString & string);
};
class KURIFilterData;
class StarterConfig;
class QSignalMapper;
class KSqueezedTextLabel;
class StartMenu : public QWidget
{
friend class starter; // to allow setting the shortcutlis directly
Q_OBJECT
public:
enum PanelPosition { North = 0, South, West, East, Nowhere };
StartMenu ( int size = 32, QWidget * parent = 0, WFlags f = 0 );
~StartMenu();
void show();
void hide();
void reloadIcons(int size);
QStringList & categories(){return appList->categories;};
typedef QMap<MyKey,QString> ShortcutList;
void updateShortcuts(ShortcutList &);
void setFavItemAmount(int i) {if (appList) appList->favItemAmount = i;}
void setPanelPosition(PanelPosition p);
public slots:
void sayText(const QString &text);
void toggleKTTS(bool);
void setCategory(const QString & category);
void save();
protected:
bool eventFilter ( QObject * o, QEvent * e );
ShortcutList shortcutList;
private slots:
void message(const QString &text);
void centerMessage(const QString &text);
void clearStatus();
void execute(const QString & command);
void search(const QString & string);
void endHistory();
// void slotLock();
private:
bool inMove;
uint m_spokenText;
int _size;
QWidget *header;
QPoint movePoint;
KURIFilterData *_filterData;
AppList *appList;
QComboBox *categoryCombo;
SearchLine *searchLine;
KSqueezedTextLabel *statusBar;
Panel *m_panel;
QStringList history;
QStringList::Iterator currentHistoryItem;
PanelPosition m_panelPos;
StartMenuButton *userButton;
QGridLayout *panelLayout;
signals:
void aboutToHide();
};
#endif