/* * newsscroller.h * * Copyright (c) 2000, 2001 Frerich Raabe * Copyright (c) 2001 Malte Starostik * * 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. For licensing and distribution details, check the * accompanying file 'COPYING'. */ #ifndef NEWSSCROLLER_H #define NEWSSCROLLER_H #ifdef HAVE_CONFIG_H #include #endif #include "configaccess.h" #include "newsengine.h" #include #include #include class TQTimer; class Headline; template class TQPtrList; typedef TQPtrList HeadlineList; class NewsScroller : public TQFrame { TQ_OBJECT public: NewsScroller(TQWidget *, ConfigAccess *, const char * = 0); virtual TQSize sizeHint() const; virtual TQSizePolicy sizePolicy() const; // Convenience stuff. Somehow ugly, no? inline bool horizontal() const { return m_cfg->horizontal(static_cast(m_cfg->scrollingDirection())); } inline bool vertical() const { return m_cfg->vertical(static_cast(m_cfg->scrollingDirection())); } inline bool rotated() const { return m_cfg->rotated(static_cast(m_cfg->scrollingDirection())); } public slots: void clear(); void addHeadline(Article::Ptr); void reset(bool bSeparatorOnly = false); signals: void contextMenu(); protected: virtual void enterEvent(TQEvent *); virtual void mousePressEvent(TQMouseEvent *); virtual void mouseReleaseEvent(TQMouseEvent *); virtual void mouseMoveEvent(TQMouseEvent *); virtual void wheelEvent(TQWheelEvent *); virtual void leaveEvent(TQEvent *); virtual void drawContents(TQPainter *); virtual void dragEnterEvent( TQDragEnterEvent *); virtual void dropEvent(TQDropEvent *); protected slots: void scroll(int = 1, bool = true); void slotTimeout(); private: int scrollWidth() const; int scrollHeight() const; bool updateActive(const TQPoint &); bool isHeadline(const TQString &) const; int speedAsInterval( int speed ); private: friend class Headline; ConfigAccess *m_cfg; TQTimer *m_scrollTimer; mutable HeadlineList m_headlines; Headline *m_activeHeadline; TQPixmap m_separator; int m_offset; TQPoint m_dragPos; bool m_mouseDrag; TQString m_tempHeadline; float m_totalStepping; float m_stepping; }; #endif // NEWSSCROLLER_H