28 #include <wx/cshelp.h>
29 #if defined __WXMSW__ || defined UNIX_SELF_CONTAINED_BUNDLE
30 #include <wx/stdpaths.h>
36 #if defined USE_GDKBACKEND_X11
40 #warning Using Hugin with hard coded GDK_BACKEND=x11
41 wxIMPLEMENT_WX_THEME_SUPPORT
44 int main(
int argc,
char **argv)
46 wxDISABLE_DEBUG_SUPPORT();
47 char backend[]=
"GDK_BACKEND=x11";
49 return wxEntry(argc, argv);
57 #if wxUSE_ON_FATAL_EXCEPTION
58 wxHandleFatalExceptions();
62 #if defined __WXMSW__ && wxCHECK_VERSION(3,3,0)
64 SetAppearance(Appearance::System);
67 CheckConfigFilename();
71 setlocale(LC_ALL,
"");
73 int localeID = wxConfigBase::Get()->Read(
"language", (
long) wxLANGUAGE_DEFAULT);
79 wxHelpControllerHelpProvider* provider =
new wxHelpControllerHelpProvider;
80 wxHelpProvider::Set(provider);
84 wxFileName exePath(wxStandardPaths::Get().GetExecutablePath());
85 exePath.RemoveLastDir();
86 const wxString huginRoot(exePath.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR));
90 m_locale.AddCatalogLookupPathPrefix(huginRoot +
"share\\locale");
91 #elif defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE
93 wxString exec_path = MacGetPathToBundledResourceFile(CFSTR(
"xrc"));
94 if(exec_path != wxEmptyString)
96 m_xrcPrefix = exec_path +
"/";
106 #elif defined UNIX_SELF_CONTAINED_BUNDLE
109 wxFileName exePath(wxStandardPaths::Get().GetExecutablePath());
110 exePath.RemoveLastDir();
111 const wxString huginRoot(exePath.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR));
112 m_xrcPrefix = huginRoot +
"share/hugin/xrc/";
115 m_locale.AddCatalogLookupPathPrefix(huginRoot +
"share/locale");
119 m_xrcPrefix = INSTALL_XRC_DIR;
120 m_locale.AddCatalogLookupPathPrefix(INSTALL_LOCALE_DIR);
126 const wxString name = wxString::Format(_T(
"PTBatcherGUI-%s"), wxGetUserId().c_str());
127 m_checker =
new wxSingleInstanceChecker(name+
".lock",wxFileName::GetTempDir());
128 bool IsFirstInstance=(!
m_checker->IsAnotherRunning());
132 if ( ! wxFile::Exists(m_xrcPrefix +
"/batch_frame.xrc") )
134 hugin_utils::HuginMessageBox(wxString::Format(_(
"xrc directory not found, hugin needs to be properly installed\nTried Path: %s"), m_xrcPrefix), _(
"PTBatcherGUI"), wxOK | wxICON_ERROR, wxGetActiveWindow());
138 wxInitAllImageHandlers();
141 wxXmlResource::Get()->InitAllHandlers();
144 wxXmlResource::Get()->Load(m_xrcPrefix +
"batch_frame.xrc");
145 wxXmlResource::Get()->Load(m_xrcPrefix +
"batch_toolbar.xrc");
146 wxXmlResource::Get()->Load(m_xrcPrefix +
"batch_menu.xrc");
147 wxXmlResource::Get()->Load(m_xrcPrefix +
"lensdb_dialogs.xrc");
148 wxXmlResource::Get()->Load(m_xrcPrefix +
"dlg_warning.xrc");
152 static const wxCmdLineEntryDesc cmdLineDesc[] =
155 wxCMD_LINE_SWITCH,
"h",
"help",
"show this help message",
156 wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP
158 { wxCMD_LINE_SWITCH,
"b",
"batch",
"run batch immediately" },
159 { wxCMD_LINE_SWITCH,
"o",
"overwrite",
"overwrite previous files without asking" },
160 { wxCMD_LINE_SWITCH,
"s",
"shutdown",
"shutdown computer after batch is complete" },
161 { wxCMD_LINE_SWITCH,
"v",
"verbose",
"show verbose output when processing projects" },
162 { wxCMD_LINE_SWITCH,
"a",
"assistant",
"run the assistant on the given projects" },
163 { wxCMD_LINE_OPTION,
"u",
"user-defined",
"use the given user defined sequence" },
165 wxCMD_LINE_PARAM, NULL, NULL,
"stitch_project.pto [output prefix]|assistant_project.pto",
166 wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL + wxCMD_LINE_PARAM_MULTIPLE
170 wxCmdLineParser parser(cmdLineDesc, argc, argv);
172 switch ( parser.Parse() )
180 wxLogError(_(
"Syntax error in parameters detected, aborting."));
186 wxConnectionBase* conn;
191 servername=wxFileName::GetTempDir()+wxFileName::GetPathSeparator()+name+
".ipc";
202 #if wxUSE_WXHTML_HELP
204 #if defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE
207 wxString strFile = MacGetPathToBundledResourceFile(CFSTR(
"help"));
208 if (!strFile.IsEmpty())
214 wxLogError(wxString::Format(
"Could not find help directory in the bundle", strFile.c_str()));
240 conn=client.MakeConnection(wxEmptyString, servername,
IPC_START);
248 if (parser.Found(
"a"))
251 wxString userDefined;
252 parser.Found(
"u", &userDefined);
253 while (parser.GetParamCount() > count)
255 wxString param = parser.GetParam(count);
257 wxFileName name(param);
259 if (name.FileExists())
262 if (name.GetExt().CmpNoCase(
"pto") == 0)
270 conn->Request(
"D " + name.GetFullPath());
271 if (!userDefined.IsEmpty())
273 conn->Request(
"U " + userDefined);
282 bool projectSpecified =
false;
283 wxString userDefined;
284 parser.Found(
"u", &userDefined);
286 while (parser.GetParamCount() > count)
288 wxString param = parser.GetParam(count);
290 if (!projectSpecified)
292 wxFileName name(param);
300 conn->Request(
"A " + name.GetFullPath());
301 if (!userDefined.IsEmpty())
303 conn->Request(
"U " + userDefined);
306 projectSpecified =
true;
310 wxFileName fn(param);
320 conn->Request(
"P " + fn.GetFullPath());
322 projectSpecified =
false;
326 wxString ext = fn.GetExt();
328 if (ext.CmpNoCase(
"jpg") == 0 || ext.CmpNoCase(
"jpeg") == 0 ||
329 ext.CmpNoCase(
"tif") == 0 || ext.CmpNoCase(
"tiff") == 0 ||
330 ext.CmpNoCase(
"png") == 0 || ext.CmpNoCase(
"exr") == 0 ||
331 ext.CmpNoCase(
"pnm") == 0 || ext.CmpNoCase(
"hdr") == 0)
340 conn->Request(
"P " + fn.GetFullPath());
342 projectSpecified =
false;
353 conn->Request(
"A " + fn.GetFullPath());
354 if (!userDefined.IsEmpty())
356 conn->Request(
"U " + userDefined);
359 projectSpecified =
true;
368 wxConfigBase* config=wxConfigBase::Get();
369 if (parser.Found(
"s"))
371 config->DeleteEntry(
"/BatchFrame/ShutdownCheck");
372 #if !defined __WXMAC__ && !defined __WXOSX_COCOA__
374 config->Write(
"/BatchFrame/AtEnd", static_cast<long>(
Batch::SHUTDOWN));
377 if (parser.Found(
"o"))
379 config->Write(
"/BatchFrame/OverwriteCheck", 1l);
381 if (parser.Found(
"v"))
383 config->Write(
"/BatchFrame/VerboseCheck", 1l);
389 if (parser.Found(
"s"))
391 #if !defined __WXMAC__ && !defined __WXOSX_COCOA__
393 conn->Request(
"SetShutdownCheck");
396 if (parser.Found(
"o"))
398 conn->Request(
"SetOverwriteCheck");
400 if (parser.Found(
"v"))
402 conn->Request(
"SetVerboseCheck");
404 conn->Request(
"BringWindowToTop");
405 if(parser.Found(
"b"))
407 conn->Request(
"RunBatch");
421 if (parser.Found(
"b") )
435 wxArrayString emptyFiles;
436 OSXStoreOpenFiles(emptyFiles);
447 delete wxHelpProvider::Set(NULL);
451 #if wxUSE_ON_FATAL_EXCEPTION
452 void PTBatcherGUI::OnFatalException()
454 GenerateReport(wxDebugReport::Context_Exception);
460 void PTBatcherGUI::MacOpenFiles(
const wxArrayString &fileNames)
464 for (
int i = 0; i < fileNames.GetCount(); ++i)
466 wxFileName fn(fileNames[i]);
476 BatchFrame* MyBatchFrame=wxGetApp().GetFrame();
477 if(item.Left(1)==
"A")
480 return wxEmptyString;
482 if(item.Left(1)==
"D")
485 return wxEmptyString;
487 if(item.Left(1)==
"P")
490 return wxEmptyString;
492 if (item.Left(1) ==
"U")
495 return wxEmptyString;
497 wxCommandEvent event;
499 #if !defined __WXMAC__ && !defined __WXOSX_COCOA__
501 if(item==
"SetShutdownCheck")
504 wxCommandEvent choiceEvent;
510 if(item==
"SetOverwriteCheck")
516 if(item==
"SetVerboseCheck")
522 if(item==
"BringWindowToTop")
524 MyBatchFrame->RequestUserAttention();
528 wxCommandEvent myEvent(wxEVT_COMMAND_TOOL_CLICKED ,XRCID(
"tool_start"));
529 MyBatchFrame->GetEventHandler()->AddPendingEvent(myEvent);
531 return wxEmptyString;
void ChangePrefix(int index, wxString newPrefix)
bool IsStartedMinimized()
returns true, if last session was finished minimized
wxIMPLEMENT_APP(huginApp)
bool OnInit() override
pseudo constructor.
Batch::EndTask GetEndTask()
return which task should be executed at end
virtual const void * OnRequest(const wxString &topic, const wxString &item, size_t *size=NULL, wxIPCFormat format=wxIPC_TEXT)
request handler for transfer
void AddToList(wxString aFile, Project::Target target=Project::STITCHING, wxString userDefined=wxEmptyString)
bool GetCheckOverwrite()
return if overwrite checkbox is checked
static void Clean()
cleanup the static LensDB instance, must be called at the end of the program
virtual wxConnectionBase * OnAcceptConnection(const wxString &topic)
accept connection handler (establish the connection)
Batch processor for Hugin with GUI.
class to access Hugins camera and lens database
const wxString IPC_START("BatchStart")
topic name for BatchIPCConnection and BatchIPCServer
server which implements the communication between different PTBatcherGUI instances (see BatchIPCConne...
The application class for hugin_stitch_project.
void ChangeUserDefined(int index, wxString newUserDefined)
void OnCheckVerbose(wxCommandEvent &event)
void OnCheckOverwrite(wxCommandEvent &event)
wxHelpController & GetHelpController()
return help controller for open help
void OnChoiceEnd(wxCommandEvent &event)
wxSingleInstanceChecker * m_checker
class for communication between different PTBatcherGUI instances
BatchIPCServer * m_server
bool GetCheckVerbose()
return if verbose checkbox is checked
void SetInternalVerbose(bool newVerbose)
sets the current verbose status, does not update the checkbox
int HuginMessageBox(const wxString &message, const wxString &caption, int style, wxWindow *parent)
int main(int argc, char *argv[])