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