Interacting with DocumentWindow from ContentComponent


#1

What's the best way to talk to the DocumentWindow that's holding a MainContentComponent from within the main content?    

I have a document window object "mainWindow" with a content component that has 3 child components in it.  I'm trying to figure out the best way to convert the 3 child components into separate windows (they're subclassing DocumentWindow) and resize/rename the mainWindow.  I'm using a MenuBar to hold the commands, as done in the JuceDemo.  The MenuBar is inside the content component.  When I select the command to switch to separate windows, I need to rename the mainWindow's title as well as resize the window.   

right now I'm doing something like this, but I get errors when I exit the app:

 

class MainWindow: public DocumentWindow
{
public:  
MainWindow(String name) : DocumentWindow (name, Colours::lightgrey, DocumentWindow::allButtons) {
  centreWithSize( getWidth(), getHeight() );
  setUsingNativeTitleBar (true);
  mcc = new MainContentComponent( this );
  mcc->setVisible(true);
  setVisible(true);
} 

void closeButtonPressed() override { 
  JUCEApplication::getInstance()->systemRequestedQuit(); 
}

private: 
 MainContentComponent* mcc; 
};  

class MainContentComponent : public Component, private MenuBarModel, private MenuBarModel::Listener 
{
public:
MainContentComponent( DocumentWindow* dw ) {
  mainWindow = dw;
  addAndMakeVisible( menuBar = new MenuBarComponent( this ) );
  menuBar->setBounds( 0, 0, getWidth(), 20 );
}

~MainContentComponent() {
  mainWindow = 0; 
}

StringArray getMenuBarNames() {
  const char* const names[] = { "Options", nullptr };
  return StringArray( names );
} 

PopupMenu getMenuForIndex (int topLevelMenuIndex, const String &menuName) {
  PopupMenu menu;
  if( topLevelMenuIndex == 0 ) {
     //Options
     PopupMenu subMenu;
     subMenu.addItem(1, "Use Single Window", true, singleViewMode );
     subMenu.addItem(2, "Use Separate Windows", true, !singleViewMode );
     menu.addSubMenu("View", subMenu );
  }
  return menu; 
}

void menuItemSelected (int menuItemID, int topLevelMenuIndex) { 
  if( menuItemID == 1 ) {  //use Single Window
    mainWindow->setSize(1310, 654);
    //can't resize in single view mode
    mainWindow->setResizable(false, false); 
    singleViewMode = true; 
  } else if( menuItemID == 2 ) {            
    mainWindow->setResizable(true, true);
    mainWindow->setResizeLimits(300,
                                300,
                                Desktop::getInstance().getDisplays().getMainDisplay().userArea.getWidth(),
                                Desktop::getInstance().getDisplays().getMainDisplay().userArea.getHeight() );
    mainWindow->setSize( 300, 300 ); 
    singleViewMode = false; 
  }   
  menuItemsChanged(); //update tick marks 
} 
private: 
  DocumentWindow* mainWindow; 
  ScopedPointer<MenuBarComponent> menuBar; 
  bool singleViewMode = true;
}; //end