diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bd8a19..abb9496 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,164 +1,164 @@ project(kolf) cmake_minimum_required (VERSION 3.5 FATAL_ERROR) set (QT_MIN_VERSION "5.11.0") set (KF5_MIN_VERSION "5.30.0") find_package(ECM ${KF5_MIN_VERSION} REQUIRED CONFIG) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Gui Widgets) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Completion Config ConfigWidgets CoreAddons Crash DBusAddons DocTools I18n KIO TextWidgets WidgetsAddons XmlGui ) find_package(KF5KDEGames 4.9.0 REQUIRED) include(FeatureSummary) include(ECMAddAppIcon) include(ECMInstallIcons) include(KDEInstallDirs) include(KDECompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) if (EXISTS "${CMAKE_SOURCE_DIR}/.git") add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000) endif() set(LIBKOLF_VERSION "5.0.0") add_subdirectory(sounds) add_subdirectory(courses) add_subdirectory(pics) add_subdirectory(graphics) add_subdirectory(doc) # we have a static copy of Box2D in our source tree include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external) ########### next target ############### set(box2d_SRCS external/Box2D/Common/b2StackAllocator.cpp external/Box2D/Common/b2Settings.cpp external/Box2D/Common/b2Math.cpp external/Box2D/Common/b2BlockAllocator.cpp external/Box2D/Dynamics/b2Island.cpp external/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp external/Box2D/Dynamics/Contacts/b2LoopAndCircleContact.cpp external/Box2D/Dynamics/Contacts/b2CircleContact.cpp external/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp external/Box2D/Dynamics/Contacts/b2Contact.cpp external/Box2D/Dynamics/Contacts/b2LoopAndPolygonContact.cpp external/Box2D/Dynamics/Contacts/b2PolygonContact.cpp external/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp external/Box2D/Dynamics/Contacts/b2ContactSolver.cpp external/Box2D/Dynamics/b2WorldCallbacks.cpp external/Box2D/Dynamics/b2Body.cpp external/Box2D/Dynamics/b2ContactManager.cpp external/Box2D/Dynamics/Joints/b2MouseJoint.cpp external/Box2D/Dynamics/Joints/b2PulleyJoint.cpp external/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp external/Box2D/Dynamics/Joints/b2WeldJoint.cpp external/Box2D/Dynamics/Joints/b2Joint.cpp external/Box2D/Dynamics/Joints/b2FrictionJoint.cpp external/Box2D/Dynamics/Joints/b2LineJoint.cpp external/Box2D/Dynamics/Joints/b2RopeJoint.cpp external/Box2D/Dynamics/Joints/b2GearJoint.cpp external/Box2D/Dynamics/Joints/b2DistanceJoint.cpp external/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp external/Box2D/Dynamics/b2World.cpp external/Box2D/Dynamics/b2Fixture.cpp external/Box2D/Collision/b2DynamicTree.cpp external/Box2D/Collision/b2Distance.cpp external/Box2D/Collision/b2CollideCircle.cpp external/Box2D/Collision/Shapes/b2CircleShape.cpp external/Box2D/Collision/Shapes/b2EdgeShape.cpp external/Box2D/Collision/Shapes/b2PolygonShape.cpp external/Box2D/Collision/Shapes/b2LoopShape.cpp external/Box2D/Collision/b2BroadPhase.cpp external/Box2D/Collision/b2Collision.cpp external/Box2D/Collision/b2TimeOfImpact.cpp external/Box2D/Collision/b2CollidePolygon.cpp external/Box2D/Collision/b2CollideEdge.cpp ) set(kolf_LIB_SRCS game.cpp kolf.cpp kolfNumInput.cpp newgame.cpp canvasitem.cpp ball.cpp config.cpp scoreboard.cpp editor.cpp kcomboboxdialog.cpp itemfactory.cpp landscape.cpp objects.cpp obstacles.cpp overlay.cpp shape.cpp utils-animateditem.cpp tagaro/board.cpp tagaro/scene.cpp tagaro/spriteobjectitem.cpp ${box2d_SRCS} ) -add_library(kolfprivate SHARED ${kolf_LIB_SRCS}) +add_library(kolfprivate STATIC ${kolf_LIB_SRCS}) target_link_libraries(kolfprivate Qt5::Gui Qt5::Widgets KF5::Crash KF5::Completion KF5::ConfigCore KF5::DBusAddons KF5::I18n KF5::JobWidgets KF5::KIOCore KF5::TextWidgets KF5::XmlGui KF5KDEGames ) set_target_properties(kolfprivate PROPERTIES VERSION ${LIBKOLF_VERSION} SOVERSION ${LIBKOLF_VERSION}) install(TARGETS kolfprivate ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY NAMELINK_SKIP) ########### next target ############### set(kolf_SRCS main.cpp) file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/*-apps-kolf.png") ecm_add_app_icon(kolf_SRCS ICONS ${ICONS_SRCS}) add_executable(kolf ${kolf_SRCS}) target_link_libraries( kolf kolfprivate) install(TARGETS kolf ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### install(PROGRAMS org.kde.kolf.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES kolfui.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/kolf) install(FILES intro tutorial.kolf tutorial.kolfgame DESTINATION ${KDE_INSTALL_DATADIR}/kolf) #install(FILES ball.h game.h statedb.h config.h canvasitem.h object.h rtti.h vector.h floater.h slope.h DESTINATION ${KDE_INSTALL_INCLUDEDIR}/kolf COMPONENT Devel) install(FILES org.kde.kolf.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/game.h b/game.h index c6315d3..68de9c2 100644 --- a/game.h +++ b/game.h @@ -1,471 +1,470 @@ /* Copyright (C) 2002-2005, Jason Katz-Brown Copyright 2010 Stefan Majewsky 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; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef GAME_H #define GAME_H -#include #include "ball.h" #include "tagaro/scene.h" #include #include #include class KolfGame; class KGameRenderer; namespace Kolf { class Wall; } namespace Tagaro { class Board; } namespace Kolf { class ItemFactory; KGameRenderer* renderer(); Tagaro::Board* findBoard(QGraphicsItem* item); //TODO: temporary HACK b2World* world(); //TODO: temporary HACK (should be inside KolfGame, but various places outside the game need to create CanvasItems) } enum Direction { D_Left, D_Right, Forwards, Backwards }; enum Amount { Amount_Less, Amount_Normal, Amount_More }; enum class Sound { BlackHole, BlackHoleEject, BlackHolePutIn, Bumper, Hit, Holed, HoleINone, Puddle, Wall, WooHoo }; class BallStateInfo { public: void saveState(KConfigGroup *cfgGroup); void loadState(KConfigGroup *cfgGroup); int id; QPoint spot; BallState state; bool beginningOfHole; int score; }; class BallStateList : public QList { public: int hole; int player; bool canUndo; Vector vector; }; class Player { public: Player() : m_ball(new Ball(0, Kolf::world())) {} Ball *ball() const { return m_ball; } void setBall(Ball *ball) { m_ball = ball; } BallStateInfo stateInfo(int hole) const { BallStateInfo ret; ret.spot = m_ball->pos().toPoint(); ret.state = m_ball->curState(); ret.score = score(hole); ret.beginningOfHole = m_ball->beginningOfHole(); ret.id = m_id; return ret; } QList scores() const { return m_scores; } void setScores(const QList &newScores) { m_scores = newScores; } int score(int hole) const { return m_scores.at(hole - 1); } int lastScore() const { return m_scores.last(); } int firstScore() const { return m_scores.first(); } void addStrokeToHole(int hole) { (*(m_scores.begin() + (hole -1)))++; } void setScoreForHole(int score, int hole) { (*(m_scores.begin() + (hole - 1))) = score; } void subtractStrokeFromHole(int hole) { (*(m_scores.begin() + (hole -1))--); } void resetScore(int hole) { (*(m_scores.begin() + (hole - 1))) = 0; } void addHole() { m_scores.append(0); } unsigned int numHoles() const { return m_scores.count(); } QString name() const { return m_name; } void setName(const QString &name) { m_name = name; m_ball->setName(name); } void setId(int id) { m_id = id; } int id() const { return m_id; } private: Ball *m_ball; QList m_scores; QString m_name; int m_id; }; typedef QList PlayerList; class Putter : public QGraphicsLineItem, public CanvasItem { public: Putter(QGraphicsItem* parent, b2World* world); void go(Direction, Amount amount = Amount_Normal); void setOrigin(double x, double y); double curLen() const { return guideLineLength; } double curAngle() const { return angle; } int curDeg() const { return rad2deg(angle); } virtual void showInfo(); virtual void hideInfo(); void setAngle(double news) { angle = news; finishMe(); } void setDeg(int news) { angle = deg2rad(news); finishMe(); } double curMaxAngle() const { return maxAngle; } virtual void setVisible(bool yes); void saveAngle(Ball *ball) { angleMap[ball] = angle; } void setAngle(Ball *ball); void resetAngles() { angleMap.clear(); setZValue(999999); } void moveBy(double dx, double dy) Q_DECL_OVERRIDE; void setShowGuideLine(bool yes); QPointF getPosition() const Q_DECL_OVERRIDE { return QGraphicsItem::pos(); } private: QPointF midPoint; double maxAngle; double angle; double oneDegree; QMap angleMap; double guideLineLength, putterWidth; void finishMe(); QGraphicsLineItem *guideLine; bool m_showGuideLine; }; class HoleInfo; class HoleConfig : public Config { Q_OBJECT public: HoleConfig(HoleInfo *holeInfo, QWidget *); private slots: void authorChanged(const QString &); void parChanged(int); void maxStrokesChanged(int); void nameChanged(const QString &); void borderWallsChanged(bool); private: HoleInfo *holeInfo; }; class HoleInfo : public CanvasItem { public: explicit HoleInfo(b2World* world) : CanvasItem(world) { setSimulationType(CanvasItem::NoSimulation); m_lowestMaxStrokes = 4; } virtual ~HoleInfo() {} void setPar(int newpar) { m_par = newpar; } int par() const { return m_par; } void setMaxStrokes(int newMaxStrokes) { m_maxStrokes = newMaxStrokes; } int lowestMaxStrokes() const { return m_lowestMaxStrokes; } int maxStrokes() const { return m_maxStrokes; } bool hasMaxStrokes() const { return m_maxStrokes != m_lowestMaxStrokes; } void setAuthor(const QString &newauthor) { m_author = newauthor; } QString author() const { return m_author; } void setName(const QString &newname) { m_name = newname; } void setUntranslatedName(const QString &newname) { m_untranslatedName = newname; } QString name() const { return m_name; } QString untranslatedName() const { return m_untranslatedName; } Config *config(QWidget *parent) Q_DECL_OVERRIDE { return new HoleConfig(this, parent); } void borderWallsChanged(bool yes); bool borderWalls() const { return m_borderWalls; } QPointF getPosition() const Q_DECL_OVERRIDE { return QPointF(); } private: QString m_author; QString m_name; QString m_untranslatedName; bool m_borderWalls; int m_par; int m_maxStrokes; int m_lowestMaxStrokes; }; class StrokeCircle : public QGraphicsItem { public: explicit StrokeCircle(QGraphicsItem *parent); void setValue(double v); double value(); void setMaxValue(double m); void setSize(const QSizeF& size); void setThickness(double t); double thickness() const; double width() const; double height() const; void paint (QPainter *, const QStyleOptionGraphicsItem *, QWidget *) Q_DECL_OVERRIDE; QRectF boundingRect() const Q_DECL_OVERRIDE; bool collidesWithItem(const QGraphicsItem*, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const Q_DECL_OVERRIDE; private: double dvalue, dmax; double ithickness, iwidth, iheight; }; -struct KOLFLIB_EXPORT CourseInfo +struct CourseInfo { CourseInfo(const QString &_name, const QString &_untranslatedName, const QString &_author, unsigned int _holes, unsigned int _par) { name = _name; untranslatedName = _untranslatedName, author = _author; holes = _holes; par = _par; } CourseInfo(); QString name; QString untranslatedName; QString author; unsigned int holes; unsigned int par; }; -class KOLFLIB_EXPORT KolfGame : public QGraphicsView +class KolfGame : public QGraphicsView { Q_OBJECT public: KolfGame(const Kolf::ItemFactory& factory, PlayerList *players, const QString &filename, QWidget *parent=0); ~KolfGame(); void setFilename(const QString &filename); QString curFilename() const { return filename; } void emitLargestHole() { emit largestHole(highestHole); } QGraphicsScene *scene() const { return course; } void removeItem(QGraphicsItem *item) { m_topLevelQItems.removeAll(item); } bool askSave(bool); bool isEditing() const { return editing; } int currentHole() { return curHole; } void setStrict(bool yes) { strict = yes; } // returns true when you shouldn't do anything bool isPaused() const { return paused; } Ball *curBall() const { return (*curPlayer).ball(); } void updateMouse(); void ballMoved(); void setBorderWalls(bool); void setInPlay(bool yes) { inPlay = yes; } bool isInPlay() { return inPlay; } bool isInfoShowing() { return m_showInfo; } void stoppedBall(); QString courseName() const { return holeInfo.name(); } void hidePutter() { putter->setVisible(false); } void ignoreEvents(bool ignore) { m_ignoreEvents = ignore; } void setSelectedItem(CanvasItem* citem); static void scoresFromSaved(KConfig*, PlayerList &players); static void courseInfo(CourseInfo &info, const QString &filename); void playSound(Sound soundType); public slots: void pause(); void unPause(); void save(); void toggleEditMode(); void setModified(bool mod = true); void addNewObject(const QString& identifier); void addNewHole(); void switchHole(int); void switchHole(const QString &); void nextHole(); void prevHole(); void firstHole(); void lastHole(); void randHole(); void showInfoDlg(bool = false); void resetHole(); void clearHole(); void setShowInfo(bool yes); void toggleShowInfo(); void updateShowInfo(); void setUseMouse(bool yes) { m_useMouse = yes; } void setUseAdvancedPutting(bool yes); void setShowGuideLine(bool yes); void setSound(bool yes); void undoShot(); void timeout(); void saveScores(KConfig *); void startFirstHole(int hole); void sayWhosGoing(); signals: void holesDone(); void newHole(int); void parChanged(int, int); void titleChanged(const QString &); void largestHole(int); void scoreChanged(int, int, int); void newPlayersTurn(Player *); void newSelectedItem(CanvasItem *); void checkEditing(); void editingStarted(); void editingEnded(); void inPlayStart(); void inPlayEnd(); void maxStrokesReached(const QString &); void currentHole(int); void modifiedChanged(bool); void newStatusText(const QString &); private slots: void shotDone(); void holeDone(); void startNextHole(); void fastTimeout(); void putterTimeout(); void autoSaveTimeout(); void emitMax(); protected: void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void handleMousePressEvent(QMouseEvent *e); void handleMouseDoubleClickEvent(QMouseEvent *e); void handleMouseMoveEvent(QMouseEvent *e); void handleMouseReleaseEvent(QMouseEvent *e); void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE; //resizes view to make sure it is square and calls resizeAllItems void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE; QPoint viewportToViewport(const QPoint &p); private: Tagaro::Scene *course; Tagaro::Board *courseBoard; Putter *putter; PlayerList *players; PlayerList::Iterator curPlayer; Ball *whiteBall; StrokeCircle *strokeCircle; QTimer *timer; QTimer *autoSaveTimer; QTimer *fastTimer; QTimer *putterTimer; bool regAdv; const Kolf::ItemFactory& m_factory; QList m_topLevelQItems; //includes balls, but not putter QList m_moveableQItems; QList borderWalls; int timerMsec; int autoSaveMsec; int fastTimerMsec; int putterTimerMsec; void puttPress(); void puttRelease(); bool inPlay; bool putting; bool stroking; bool finishStroking; double strength; double maxStrength; int puttCount; bool puttReverse; int curHole; int highestHole; int curPar; int wallWidth; int height; int width; int margin; int advancePeriod; int lastDelId; bool paused; QString filename; bool recalcHighestHole; void openFile(); bool strict; bool editing; QGraphicsItem *selectedItem; //For intro banner Tagaro::SpriteObjectItem *banner; KgSound m_soundBlackHole; KgSound m_soundBlackHoleEject; KgSound m_soundBlackHolePutIn; KgSound m_soundBumper; KgSound m_soundHit; KgSound m_soundHoled; KgSound m_soundHoleINone; KgSound m_soundPuddle; KgSound m_soundWall; KgSound m_soundWooHoo; bool m_sound; bool m_ignoreEvents; HoleInfo holeInfo; QMap savedState; BallStateList ballStateList; void loadStateList(); void recreateStateList(); void addHoleInfo(BallStateList &list); bool dontAddStroke; bool addingNewHole; int scoreboardHoles; inline void resetHoleScores(); bool m_showInfo; bool infoShown; KConfig *cfg; KConfigGroup cfgGroup; inline void addBorderWall(const QPoint &start, const QPoint &end); void shotStart(); void startBall(const Vector &vector); bool modified; inline bool allPlayersDone(); bool m_useMouse; bool m_useAdvancedPutting; QString playerWhoMaxed; }; #endif diff --git a/kolf.h b/kolf.h index 34fb515..cff0add 100644 --- a/kolf.h +++ b/kolf.h @@ -1,150 +1,149 @@ /* Copyright (C) 2002-2005, Jason Katz-Brown Copyright 2010 Stefan Majewsky 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; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef KOLF_H #define KOLF_H -#include #include #include "game.h" #include "itemfactory.h" #include class QGridLayout; class QAction; class KSelectAction; class KToggleAction; class Editor; class ScoreBoard; -class KOLFLIB_EXPORT KolfWindow : public KXmlGuiWindow +class KolfWindow : public KXmlGuiWindow { Q_OBJECT public: KolfWindow(); ~KolfWindow(); void openUrl(const QUrl &url); public slots: void closeGame(); void updateModified(bool); protected: bool queryClose() Q_DECL_OVERRIDE; protected slots: void startNewGame(); void loadGame(); void tutorial(); void newGame(); void save(); void saveAs(); void saveGame(); void saveGameAs(); void newPlayersTurn(Player *); void gameOver(); void editingStarted(); void editingEnded(); void checkEditing(); void setHoleFocus() { game->setFocus(); } void inPlayStart(); void inPlayEnd(); void maxStrokesReached(const QString &); void updateHoleMenu(int); void titleChanged(const QString &); void newStatusText(const QString &); void showInfoChanged(bool); void useMouseChanged(bool); void useAdvancedPuttingChanged(bool); void showGuideLineChanged(bool); void soundChanged(bool); void showHighScores(); void enableAllMessages(); void createSpacer(); void emptySlot() {} void setCurrentHole(int); private: QWidget *dummy; KolfGame *game; Editor *editor; KolfGame *spacer; void setupActions(); QString filename; PlayerList players; PlayerList spacerPlayers; QGridLayout *layout; ScoreBoard *scoreboard; KToggleAction *editingAction; QAction *newHoleAction; QAction *resetHoleAction; QAction *undoShotAction; //QAction *replayShotAction; QAction *clearHoleAction; QAction *tutorialAction; QAction *newAction; QAction *endAction; QAction *saveAction; QAction *saveAsAction; QAction *saveGameAction; QAction *saveGameAsAction; QAction *loadGameAction; QAction *aboutAction; KSelectAction *holeAction; QAction *highScoreAction; QAction *nextAction; QAction *prevAction; QAction *firstAction; QAction *lastAction; QAction *randAction; KToggleAction *showInfoAction; KToggleAction *useMouseAction; KToggleAction *useAdvancedPuttingAction; KToggleAction *showGuideLineAction; KToggleAction *soundAction; void setHoleMovementEnabled(bool); void setHoleOtherEnabled(bool); inline void setEditingEnabled(bool); bool competition; Kolf::ItemFactory m_itemFactory; QString loadedGame; bool isTutorial; bool courseModified; QString title; QString tempStatusBarText; }; struct HighScore { HighScore() {} HighScore(const QString &name, int score) { this->name = name; this->score = score; } QString name; int score; }; typedef QList HighScoreList; #endif diff --git a/kolflib_export.h b/kolflib_export.h deleted file mode 100644 index b17b810..0000000 --- a/kolflib_export.h +++ /dev/null @@ -1,37 +0,0 @@ -/* This file is part of the KDE project - Copyright (C) 2007 David Faure - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KOLFLIB_EXPORT_H -#define KOLFLIB_EXPORT_H - -#ifndef KOLFLIB_EXPORT -# if defined(MAKE_KOLFPRIVATE_LIB) - /* We are building this library */ -# define KOLFLIB_EXPORT Q_DECL_EXPORT -# else - /* We are using this library */ -# define KOLFLIB_EXPORT Q_DECL_IMPORT -# endif -#endif - -# ifndef KOLFLIB_EXPORT_DEPRECATED -# define KOLFLIB_EXPORT_DEPRECATED KDE_DEPRECATED KOLFLIB_EXPORT -# endif - -#endif