/*
GNU General Public License
CacheWolf is a software for PocketPC, Win and Linux that
enables paperless caching.
It supports the sites geocaching.com and opencaching.de
Copyright (C) 2006 CacheWolf development team
See http://www.cachewolf.de/ for more information.
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; version 2 of the License.
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 St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package CacheWolf.view.ewe;
import CacheWolf.MainForm;
import CacheWolf.Preferences;
import CacheWolf.TravelbugPickup;
import CacheWolf.database.Travelbug;
import CacheWolf.database.TravelbugJourney;
import CacheWolf.database.TravelbugList;
import CacheWolf.imp.GCImporter;
import CacheWolf.model.TravelBugJourneyScreenModel;
import CacheWolf.utils.CWWrapper;
import CacheWolf.utils.MyLocale;
import ewe.fx.Rect;
import ewe.sys.Vm;
import ewe.ui.Event;
import ewe.ui.Menu;
import ewe.ui.MenuBar;
import ewe.ui.MenuEvent;
import ewe.ui.MenuItem;
import ewe.ui.PullDownMenu;
/**
* Controller for the {@link TravelbugList}. Preferrably used by {@link TravelbugJourneyScreen}
*
* @author andi
*
*/
public class TravelbugMenu extends MenuBar {
private MenuItem mnuNewTB;
private MenuItem mnuDeleteTB;
private MenuItem mnuGetMission;
private MenuItem mnuOpenOnline;
private MenuItem mnuDropTB;
private MenuItem mnuPickupTB;
private MenuItem mnuDeleteTBs;
/**
* The model controlled by this
*/
/**
* The View displaying the model for this
*/
public TravelbugJourneyScreen view;
private TravelBugJourneyScreenModel model;
public TravelbugMenu(TravelBugJourneyScreenModel model) {
this.model = model;
MenuItem[] TBMenuItems = new MenuItem[9];
TBMenuItems[0] = mnuPickupTB = new MenuItem(MyLocale.getMsg(6040, "Pick up TB from current cache"));
TBMenuItems[1] = mnuDropTB = new MenuItem(MyLocale.getMsg(6041, "Drop TB in cache"));
TBMenuItems[2] = new MenuItem("-");
TBMenuItems[3] = mnuNewTB = new MenuItem(MyLocale.getMsg(6042, "New Travelbug"));
TBMenuItems[4] = mnuDeleteTB = new MenuItem(MyLocale.getMsg(6043, "Delete Travelbug"));
TBMenuItems[5] = new MenuItem("-");
TBMenuItems[6] = mnuGetMission = new MenuItem(MyLocale.getMsg(6044, "Get Mission"));
TBMenuItems[7] = mnuOpenOnline = new MenuItem(MyLocale.getMsg(6045, "Open on-line"));
TBMenuItems[8] = new MenuItem("-");
// A second pop-up menu with only one entry, if a range of rows is
// selected
MenuItem[] TBMenuItemsDel = new MenuItem[1];
TBMenuItemsDel[0] = mnuDeleteTBs = new MenuItem(MyLocale.getMsg(6047, "Delete selected Travelbugs"));
// mnuDropTB.modifiers |= MenuItem.Disabled;
// mnuDeleteTB.modifiers |= MenuItem.Disabled;
// mnuGetMission.modifiers |= MenuItem.Disabled;
// mnuOpenOnline.modifiers |= MenuItem.Disabled;
this.addMenu(new PullDownMenu(MyLocale.getMsg(120, "Application"), new Menu(TBMenuItems, null)));
}
public void onEvent(Event event) {
if (event instanceof MenuEvent) {
MenuEvent mev = (MenuEvent) event;
if (mev.selectedItem == mnuPickupTB) {
Travelbug tb = TravelbugPickup.pickupTravelbug(view.tblSrcCache);
if (tb != null) {
view.chDmodified = true;
model.allTravelbugJourneys.addTbPickup(tb, MainForm.profile.name, view.waypoint);
view.modTbJourneyList.numRows = model.allTravelbugJourneys.size();
view.repaint();
}
} else if (mev.selectedItem == mnuDropTB) {
if (view.selectedRow >= 0 && view.selectedRow < view.modTbJourneyList.numRows) {
Travelbug tb = model.allTravelbugJourneys.getTBJourney(view.selectedRow).getTb();
view.chD.Travelbugs.add(tb);
model.allTravelbugJourneys.addTbDrop(tb, MainForm.profile.name, view.waypoint);
view.chDmodified = true;
view.ch.hasBugs(true);
}
view.repaint();
} else if (mev.selectedItem == mnuNewTB) {
TravelbugJourney tbj = new TravelbugJourney("New");
tbj.setFromProfile(MainForm.profile.name);
tbj.setFromWaypoint(view.waypoint);
model.allTravelbugJourneys.add(tbj);
view.modTbJourneyList.numRows = model.allTravelbugJourneys.size();
// view.cursorTo(view.tblMyTravelbugJourneys.size()-1,1,true);
view.repaint();
} else if (mev.selectedItem == mnuDeleteTB && view.selectedRow >= 0) {
model.allTravelbugJourneys.remove(view.selectedRow);
view.modTbJourneyList.numRows = model.allTravelbugJourneys.size();
if (view.selectedRow > 0) {
// cursorTo(view.selectedRow-1,0,true);
} else {
// view.modTbJourneyList.showFields(new
// TravelbugJourney(""));
}
view.repaint();
}
/*
* Delete a group of travelbugs which have been marked with
* Shift-Click
*/
if (mev.selectedItem == mnuDeleteTBs) {
Rect sel = view.tcTbJourneyList.getSelection(null);
for (int i = 0; i < sel.height; i++)
model.allTravelbugJourneys.remove(sel.y);
view.modTbJourneyList.numRows = model.allTravelbugJourneys.size();
if (sel.y < view.modTbJourneyList.numRows) {
// cursorTo(sel.y,0,true);
} else {
view.modTbJourneyList.showFields(new TravelbugJourney(""));
}
view.repaint();
} else if (mev.selectedItem == mnuGetMission && view.selectedRow > -1) {
TravelbugJourney tbj = model.allTravelbugJourneys.getTBJourney(view.selectedRow);
GCImporter spider = new GCImporter();
Vm.showWait(true);
// if we have an ID, get mission by ID
if (tbj.getTb().getGuid().length() != 0) {
tbj.getTb().setMission(spider.getBugMissionByGuid(tbj.getTb().getGuid()));
} else {
// try to get mission and name by tracking number
boolean suceeded = false;
if (tbj.getTb().getTrackingNo().length() != 0) {
suceeded = spider.getBugMissionAndNameByTrackNr(tbj.getTb());
}
// if this has't worked, try to get ID by name
if (!suceeded) {
tbj.getTb().setGuid(spider.getBugId(tbj.getTb().getName().trim()));
// if we have an ID now, get mission by ID
if (tbj.getTb().getGuid().length() != 0) {
tbj.getTb().setMission(spider.getBugMissionByGuid(tbj.getTb().getGuid()));
}
}
}
spider.setOldGCLanguage();
} else if (mev.selectedItem == mnuOpenOnline && view.selectedRow >= 0) {
TravelbugJourney tbj = model.allTravelbugJourneys.getTBJourney(view.selectedRow);
GCImporter spider = new GCImporter();
Vm.showWait(true);
// First check whether ID is set, if not get it
if (tbj.getTb().getGuid().length() == 0)
tbj.getTb().setGuid(spider.getBugId(tbj.getTb().getName()));
if (tbj.getTb().getGuid().length() != 0) {
Vm.showWait(false);
try {
String s;
if (tbj.getTb().getGuid().length() > 10)
s = "http://www.geocaching.com/track/details.aspx?guid=" + tbj.getTb().getGuid();
else
s = "http://www.geocaching.com/track/details.aspx?id=" + tbj.getTb().getGuid();
CWWrapper.exec(Preferences.itself().browser, s);
Preferences.itself().log("Executed: \"" + Preferences.itself().browser + "\" \"" + s + "\"");
} catch (Exception ioex) {
Preferences.itself().log("Ignored Exception", ioex, true);
}
}
spider.setOldGCLanguage();
}
}
}
}