| |
| |
| #include "appmainshell.h" |
| #include "application.h" |
| #include "tfarmcontroller.h" |
| #include "tw/colors.h" |
| #include "tw/menubar.h" |
| #include "tw/event.h" |
| #include "tw/action.h" |
| |
| #include "traster.h" |
| #include "tsystem.h" |
| #include "tenv.h" |
| |
| #include "tgrid.h" |
| #include "tw/tabbedwindow.h" |
| |
| #include "taskstatuspage.h" |
| #include "serverstatuspage.h" |
| #include "casmsubmitpage.h" |
| #include "submitpage.h" |
| |
| #include "filebrowserpopup.h" |
| |
| #include "tw/message.h" |
| |
| using namespace TwConsts; |
| |
| |
| |
| class MyTabbedWindow : public TTabbedWindow { |
| public: |
| MyTabbedWindow(TWidget *parent) : TTabbedWindow(parent) {} |
| |
| void leftButtonDown(const TMouseEvent &e) { |
| TabPage *page1 = dynamic_cast<TabPage *>(getCurrentPanel()); |
| TTabbedWindow::leftButtonDown(e); |
| TabPage *page2 = dynamic_cast<TabPage *>(getCurrentPanel()); |
| |
| if (page1 != page2) |
| if (page1) page1->onDeactivate(); |
| if (page2) page2->onActivate(); |
| } |
| }; |
| |
| |
| |
| class AppMainshell::Data { |
| public: |
| Data() |
| : m_tabbedWindow(0) |
| , m_menubar(0) |
| , m_updatePeriod(3000) |
| , m_retryCount(0) |
| , m_retryPeriod(15000) {} |
| |
| MyTabbedWindow *m_tabbedWindow; |
| TMenubar *m_menubar; |
| |
| int m_updatePeriod; |
| int m_retryCount; |
| int m_retryPeriod; |
| }; |
| |
| |
| |
| namespace { |
| |
| |
| |
| TEnv::RootSystemVar systemVar( |
| TFilePath("SOFTWARE\\Digital Video\\ToonzFarm\\1.0\\LOCALROOT")); |
| |
| inline void errorMessage(const string &msg) { TMessage::error(msg); } |
| |
| const int menuBarLy = 21; |
| |
| } |
| |
| |
| |
| AppMainshell::AppMainshell() : TMainshell("mainshell") { |
| m_name = "TFarmClient, v1.0 alfa - " + TSystem::getUserName() + "@" + |
| TSystem::getHostName(); |
| |
| m_data = new Data; |
| m_data->m_tabbedWindow = new MyTabbedWindow(this); |
| m_data->m_tabbedWindow->addPanel(new TaskStatusPage(m_data->m_tabbedWindow)); |
| m_data->m_tabbedWindow->addPanel( |
| new ServerStatusPage(m_data->m_tabbedWindow)); |
| |
| |
| m_data->m_tabbedWindow->addPanel(new SubmitPage(m_data->m_tabbedWindow)); |
| |
| m_data->m_menubar = new TMenubar(this); |
| |
| TMenubarItem *menu = new TMenubarItem(m_data->m_menubar, "File"); |
| menu->addItem("Quit"); |
| TGuiCommand("Quit").setAction(new TCommandAction<AppMainshell>(this, close)); |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| } |
| |
| |
| |
| AppMainshell::~AppMainshell() {} |
| |
| |
| |
| HANDLE HFile; |
| |
| void AppMainshell::init() { |
| TSystem::loadStandardPlugins(); |
| |
| try { |
| Application::instance()->init(); |
| } catch (TException &e) { |
| TMessage::error(toString(e.getMessage())); |
| return; |
| } |
| } |
| |
| |
| |
| bool AppMainshell::beforeShow() { |
| if (!Application::instance()->testControllerConnection()) { |
| string hostName, addr; |
| int port; |
| Application::instance()->getControllerData(hostName, addr, port); |
| |
| string msg("Unable to connect to the ToonzFarm Controller\n"); |
| msg += "The Controller should run on " + hostName + " at port "; |
| msg += toString(port) + "\n"; |
| msg += "Please start the Controller before running this application"; |
| |
| TMessage::error(msg); |
| return false; |
| } |
| |
| TWidget *w = m_data->m_tabbedWindow->getCurrentPanel(); |
| TabPage *page = dynamic_cast<TabPage *>(w); |
| if (page) page->onActivate(); |
| |
| startTimer(m_data->m_updatePeriod); |
| return true; |
| } |
| |
| |
| |
| void AppMainshell::configureNotify(const TDimension &size) { |
| TMainshell::configureNotify(size); |
| |
| m_data->m_tabbedWindow->setGeometry(0, 0, size.lx - 1, |
| size.ly - menuBarLy - 1); |
| |
| m_data->m_menubar->setGeometry(0, size.ly - menuBarLy, size.lx - 1, |
| size.ly - 1); |
| m_data->m_menubar->invalidate(); |
| } |
| |
| |
| |
| void AppMainshell::close() { |
| if (TMessage::question("Are you sure?") == TMessage::YES) { |
| TMainshell::close(); |
| } |
| } |
| |
| |
| |
| void AppMainshell::repaint() { |
| TDimension size = getSize(); |
| |
| int y = size.ly - 1; |
| int x = 20; |
| setColor(White); |
| fillRect(x, 0, size.lx - 1, y); |
| |
| setColor(Gray60); |
| fillRect(0, 0, x - 1, y); |
| |
| y -= 21; |
| drawLine(x, y, x, y - 3); |
| drawLine(x + 1, y, x + 1, y - 1); |
| drawLine(x + 2, y, x + 3, y); |
| } |
| |
| |
| |
| TDimension AppMainshell::getPreferredSize() { return TDimension(1200, 500); } |
| |
| |
| |
| int AppMainshell::getMainIconId() { return 101 ; } |
| |
| |
| |
| void AppMainshell::onTimer(int) { |
| if (false && !Application::instance()->testControllerConnection()) { |
| if (m_data->m_retryCount == 0) { |
| stopTimer(); |
| startTimer(m_data->m_retryPeriod); |
| } |
| |
| ++m_data->m_retryCount; |
| |
| if (m_data->m_retryCount == 3) { |
| stopTimer(); |
| startTimer(4 * m_data->m_retryPeriod); |
| |
| string hostName, addr; |
| int port; |
| Application::instance()->getControllerData(hostName, addr, port); |
| |
| string msg("The connection to the ToonzFarm Controller has been lost\n"); |
| msg += "The Controller should run on " + hostName + " at port "; |
| msg += toString(port) + "\n"; |
| msg += "Please check the Controller state"; |
| |
| TMessage::error(msg); |
| } |
| } else { |
| if (m_data->m_retryCount > 0) { |
| m_data->m_retryCount = 0; |
| string msg("Reconnected to the ToonzFarm Controller\n"); |
| TMessage::error(msg); |
| |
| stopTimer(); |
| startTimer(m_data->m_updatePeriod); |
| } |
| |
| TWidget *w = m_data->m_tabbedWindow->getCurrentPanel(); |
| TabPage *page = dynamic_cast<TabPage *>(w); |
| if (page) page->update(); |
| } |
| } |
| |
| |
| |
| |
| AppMainshell mainshell; |
| |