1 /***************************************************************************
2 inven.cpp - Inventory widget
3 -------------------
4 begin : Sat May 3 2003
5 copyright : (C) 2003 by Gabor Torok
6 email : cctorok@yahoo.com
7 ***************************************************************************/
8
9 /***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17 #include "common/constants.h"
18 #include "inven.h"
19 #include "render/renderlib.h"
20 #include "rpg/rpglib.h"
21 #include "sound.h"
22 #include "sdlhandler.h"
23 #include "sdleventhandler.h"
24 #include "sdlscreenview.h"
25 #include "scourge.h"
26 #include "item.h"
27 #include "creature.h"
28 #include "sqbinding/sqbinding.h"
29 #include "characterinfo.h"
30 #include "shapepalette.h"
31 #include "skillsview.h"
32 #include "gui/confirmdialog.h"
33 #include "pcui.h"
34 #include "storable.h"
35
36 /**
37 *@author Gabor Torok
38 */
39
40 using namespace std;
41
42 #define OFFSET_X 5
43 #define OFFSET_Y 5
44
Inven(PcUi * pcUi,int x,int y,int w,int h)45 Inven::Inven( PcUi *pcUi, int x, int y, int w, int h ) {
46 this->pcUi = pcUi;
47 this->creature = NULL;
48 this->backgroundTexture = pcUi->getScourge()->getShapePalette()->getNamedTexture( "inven" );
49 this->currentHole = -1;
50 this->x = x;
51 this->y = y;
52 this->w = w;
53 this->h = h;
54 this->lastItem = NULL;
55 this->storable = NULL;
56
57 view = new ContainerView( pcUi->getScourge(), pcUi->getScourge()->getSession()->getParty()->getPlayer()->getBackpack(), pcUi->getWindow(), x, y );
58 view->setItem( pcUi->getScourge()->getSession()->getParty()->getPlayer()->getBackpack(), pcUi->getScourge()->getSession()->getParty()->getPlayer() );
59 }
60
~Inven()61 Inven::~Inven() {
62 }
63
handleEvent(SDL_Event * event)64 bool Inven::handleEvent( SDL_Event *event ) {
65 return view->handleEvent( event );
66 }
67
handleEvent(Widget * widget,SDL_Event * event)68 bool Inven::handleEvent( Widget *widget, SDL_Event *event ) {
69 if ( pcUi->getScourge()->getSDLHandler()->mouseButton == SDL_BUTTON_LEFT && view->getSelectedItem() ) {
70 Item *item = view->getSelectedItem();
71 if ( creature && item ) {
72 if ( pcUi->isEnchantSelected() ) {
73 pcUi->getScourge()->enchantItem( creature, item );
74 view->cancelDrag();
75 } else if ( pcUi->isInfoSelected() ) {
76 view->showInfo( item );
77 view->cancelDrag();
78 } else if ( pcUi->isStoreSelected() ) {
79 storeItem( item );
80 view->cancelDrag();
81 } else if ( pcUi->isTranscribeSelected() ) {
82 pcUi->getScourge()->transcribeItem( creature, item );
83 view->cancelDrag();
84 } else if ( pcUi->isUseSelected() ) {
85 pcUi->getScourge()->useItem( creature, item );
86 view->cancelDrag();
87 }
88 pcUi->unselectButtons();
89 }
90 }
91 return view->handleEvent( widget, event );
92 }
93
94 /// Which creature's inventory will we display?
95
setCreature(Creature * creature)96 void Inven::setCreature( Creature *creature ) {
97 this->creature = creature;
98 view->setItem( creature->getBackpack(), creature );
99 }
100
101 /// Initiates "store in quickspell slot" mode.
102
storeItem(Item * item)103 void Inven::storeItem( Item *item ) {
104 this->storable = NULL;
105 Storable *s = ( Storable* )item;
106 const char *p = s->isStorable();
107 if ( p ) {
108 pcUi->getScourge()->showMessageDialog( p );
109 } else {
110 this->storable = s;
111 pcUi->getScourge()->showMessageDialog( _( "Click a quickspell slot to store this item." ) );
112 pcUi->hide();
113 }
114 }
115
116 /// Receive an item other than drag + drop
117
receive(Item * item,bool atCursor)118 bool Inven::receive( Item *item, bool atCursor ) {
119 return view->receiveItem( item, atCursor );
120 }
121
receive(Widget * widget)122 void Inven::receive( Widget *widget ) {
123 view->receive( widget );
124 }
125