void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    auto item = (ProjectItem*) Workspace::Instance.GetProjectsModel()->itemFromIndex(index);

    std::string name = item->GetName();

    if (item->IsDocument())
    {
        ProjectItem* parent = (ProjectItem*) item->parent();

        if (Workspace::Instance.GetCurrentProject()->GetName() == parent->GetName() &&
                Workspace::Instance.GetCurrentDocument()->GetName() == item->GetName())
            return;

        Workspace::Instance.SetCurrent(parent->GetName(), item->GetName());
    }
    else
    {
        if (Workspace::Instance.GetCurrentProject()->GetName() == name)
            return;

        Workspace::Instance.SetCurrent(item->GetName());
    }

    RefreshImage();
    on_actionFit_to_Window_triggered();
}
void MainWindow::on_actionClose_Project_triggered()
{
    if (Workspace::Instance.GetCurrentProject() == nullptr)
        return;

    bool cancel = false;

    if (!Workspace::Instance.IsCurrentProjectPersistent())
    {
        QMessageBox msgBox;
        msgBox.setWindowTitle(QString("Pitanje"));
        msgBox.setText(QString("Želite li da sačuvate promene?"));

        msgBox.setIcon(QMessageBox::Question);
        msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
        msgBox.setDefaultButton(QMessageBox::Yes);
        int ret = msgBox.exec();

        if (ret == QMessageBox::Yes)
        {
            Workspace::Instance.SaveCurrentProject();
        }
        else if (ret == QMessageBox::Cancel)
        {
            cancel = true;
        }
    }

    if (!cancel)
    {
        Workspace::Instance.CloseCurrentProject();

        QModelIndex index = ui->treeView->currentIndex();

        if (index.isValid())
        {
            ProjectItem* item = (ProjectItem*) Workspace::Instance.GetProjectsModel()->itemFromIndex(index);

            if (item->IsDocument())
            {
                ProjectItem* parent = (ProjectItem*) item->parent();
                Workspace::Instance.SetCurrent(parent->GetName(), item->GetName());
            }
            else
            {
                Workspace::Instance.SetCurrent(item->GetName());
            }
        }

        RefreshImage();
    }
}
void FilelistOrder::OnFileMvdn(wxCommandEvent& evt)
{
	int sel = fileList->GetSelection();
	if (sel == wxNOT_FOUND)
		return;

	ProjectItem *p = (ProjectItem *)fileList->GetClientData(sel);
	fileList->Delete(sel);
	sel++;
	fileList->Insert(p->GetName(), (unsigned int)sel, reinterpret_cast<void*>(p));
	fileList->SetSelection(sel);

	EnableUpDn();
}
void MainWindow::on_actionRemove_Image_triggered()
{
    Workspace::Instance.RemoveCurrentDocument();

    QModelIndex index = ui->treeView->currentIndex();

    if (index.isValid())
    {
        ProjectItem* item = (ProjectItem*) Workspace::Instance.GetProjectsModel()->itemFromIndex(index);

        if (item->IsDocument())
        {
            ProjectItem* parent = (ProjectItem*) item->parent();
            Workspace::Instance.SetCurrent(parent->GetName(), item->GetName());
        }
        else
        {
            Workspace::Instance.SetCurrent(item->GetName());
        }
    }

    RefreshImage();
}
void Workspace::SetCurrent(std::string projectName, std::string documentName)
{
    Project*     proj     = nullptr;
    ProjectItem* projItem = nullptr;
    Document*    doc      = nullptr;
    ProjectItem* docItem  = nullptr;

    // Get project;
    proj = m_Projects[projectName].get();

    // Get project view item.
    auto projRowItem = m_ProjectsModel.findItems(Utils::StringW2Q(projectName));
    projItem = (ProjectItem*) projRowItem.first();

    // If document is not specified, use first doc.
    auto docs = proj->GetDocuments();
    if (documentName.empty() && !docs.empty())
    {
        documentName = docs.front()->GetName();
    }

    // If there is document, get document and document view item.
    if (!documentName.empty())
    {
        // Get document.
        for (auto d : docs)
        {
            if (d->GetName().compare(documentName) == 0)
            {
                doc = d;
                break;
            }
        }

        // Get document view item.
        for (int i = 0; i < (int) docs.size(); i++)
        {
            ProjectItem* di = (ProjectItem*) projItem->child(i);
            if(di->GetName().compare(documentName) == 0)
            {
                docItem = di;
                break;
            }
        }
    }

    SetCurrent(proj, projItem, doc, docItem);
}
void ScoreErrorsDlg::Refresh()
{
	itmSel.ResetContent();

	ProjectItem *pi = prjTree->FirstChild(theProject->nlInfo);
	while (pi)
	{
		if (pi->GetType() == PRJNODE_NOTEFILE)
		{
			int ndx = itmSel.AddString(pi->GetName());
			itmSel.SetItemDataPtr(ndx, (void*)pi);
		}
		pi = prjTree->NextSibling(pi);
	}
	itmSel.SetCurSel(0);
	ShowErrors();
}
void FilelistOrder::OnInitDialog(wxInitDialogEvent& evt)
{
	CenterOnParent();

	if (pi)
	{
		ProjectItem *ch = prjTree->FirstChild(pi);
		while (ch)
		{
			fileList->Append(ch->GetName(), reinterpret_cast<void*>(ch));
			ch = prjTree->NextSibling(ch);
		}
	}

	if (fileList->GetCount() > 0)
		fileList->SetSelection(0);

	EnableUpDn();
}
void ProjectFrame::RemoveItem()
{
	ProjectItem *itm = prjTree->GetSelectedNode();
	if(itm)
	{
		bsString prompt;
		prompt = "Remove item '";
		prompt += itm->GetName();
		prompt += "'?";
		if (prjFrame->Verify(prompt, "Verify..."))
		{
			if (itm->RemoveItem())
			{
				CloseEditor(itm);
				prjTree->RemoveNode(itm);
				theProject->SetChange(1);
			}
		}
	}
}