void frmDatabaseDesigner::OnDeleteTable(wxCommandEvent &event) { if (diagrams->GetPageCount() > 0) { hdDrawingView *view = (hdDrawingView *) diagrams->GetPage(diagrams->GetSelection()); view->getDrawing()->deleteSelectedFigures(); setModelChanged(true); setExtendedTitle(); } }
void frmDatabaseDesigner::OnDeleteDiagram(wxCommandEvent &event) { hdDrawingView *view = (hdDrawingView *) diagrams->GetPage(diagrams->GetSelection()); int diagramIndex = view->getIdx(); diagrams->RemovePage(diagrams->GetSelection()); design->deleteDiagram(diagramIndex); setModelChanged(true); UpdateToolbar(); }
void frmDatabaseDesigner::OnAddDiagram(wxCommandEvent &event) { wxString newName = wxGetTextFromUser(_("New Diagram Name"), _("Diagram Name"), _("unnamed"), this); if (!newName.IsEmpty()) { diagrams->AddPage(design->createDiagram(diagrams, newName, false)->getView(), newName); setModelChanged(true); } UpdateToolbar(); }
void frmDatabaseDesigner::OnRenameDiagram(wxCommandEvent &event) { hdDrawingView *view = (hdDrawingView *) diagrams->GetPage(diagrams->GetSelection()); int diagramIndex = view->getIdx(); wxString name = wxGetTextFromUser(_("Rename diagram ") + diagrams->GetPageText(diagramIndex) + _(" to:"), _("Rename diagram..."), diagrams->GetPageText(diagramIndex), this); if(!name.IsEmpty() && !name.IsSameAs(diagrams->GetPageText(diagramIndex), false)) { view->getDrawing()->setName(name); diagrams->SetPageText(diagramIndex, name); setModelChanged(true); } }
void frmDatabaseDesigner::OnModelSave(wxCommandEvent &event) { if (lastFile != wxEmptyString) { design->writeXmlModel(lastFile); setModelChanged(false); setExtendedTitle(); } else { OnModelSaveAs(event); } }
void frmDatabaseDesigner::OnAddColumn(wxCommandEvent &event) { if (diagrams->GetPageCount() > 0) { hdDrawingView *view = (hdDrawingView *) diagrams->GetPage(diagrams->GetSelection()); ddTableFigure *table = design->getSelectedTable(view->getIdx()); wxTextEntryDialog nameDialog (this, wxT("New column name"), wxT("Add a column"), wxT("NewColumn")); int answer; wxString tmpString; if (table) { bool again; do { again = false; answer = nameDialog.ShowModal(); if (answer == wxID_OK) { tmpString = nameDialog.GetValue(); if(table->getColByName(tmpString) == NULL) { table->addColumn(view->getIdx(), new ddColumnFigure(tmpString, table)); setModelChanged(true); setExtendedTitle(); } else { wxString msg(wxT("Error trying to add new column '")); msg.Append(tmpString); msg.Append(wxT("' column name already in use")); wxMessageDialog info( this, msg , wxT("Column name already in use"), wxNO_DEFAULT | wxOK | wxICON_EXCLAMATION); again = true; info.ShowModal(); } } } while(again); } view->Refresh(); } else { wxMessageBox(_("Warning about adding a column to a table without a diagram"), _("Please create a model diagram first"), wxICON_EXCLAMATION | wxOK); } }
void frmDatabaseDesigner::OnModelLoad(wxCommandEvent &event) { if(changed) { // Ask what to do with old model int answer = wxMessageBox(_("Save model changes?"), _("Confirm"), wxYES_NO | wxCANCEL); if (answer == wxYES) { if (lastFile != wxEmptyString) OnModelSave(event); else OnModelSaveAs(event); } if(answer == wxCANCEL) return; } //Open Model wxFileDialog openFileDialog(this, _("Open model"), wxT(""), wxT(""), wxT("*.pgd"), wxFD_OPEN | wxFD_FILE_MUST_EXIST, wxDefaultPosition); if (openFileDialog.ShowModal() == wxID_OK) { wxString path; path.append(openFileDialog.GetDirectory()); path.append(wxFileName::GetPathSeparator()); path.append(openFileDialog.GetFilename()); if(!path.Lower().Matches(wxT("*.pgd"))) path.append(wxT(".pgd")); lastFile = path; // Clean treeview, notebook, and sql pane design->emptyModel(); while(diagrams->GetPageCount() > 0) { diagrams->RemovePage(0); design->deleteDiagram(0); } sqltext->SetText(wxEmptyString); // Read model from xml file design->readXmlModel(path, diagrams); setModelChanged(false); setExtendedTitle(); } }
void frmDatabaseDesigner::OnClose(wxCloseEvent &event) { closing = true; // Ask what to do with old model if (changed) { int answer = wxMessageBox(_("Save model changes?"), _("Confirm"), wxYES_NO | wxCANCEL); if (answer == wxYES) { if (lastFile.IsEmpty()) { wxFileDialog openFileDialog( this, _("Save model"), wxT(""), wxT(""), wxT("*.pgd"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT, wxDefaultPosition); if (openFileDialog.ShowModal() == wxID_OK) { wxString path; path.append(openFileDialog.GetDirectory()); path.append(wxFileName::GetPathSeparator()); path.append(openFileDialog.GetFilename()); if(!path.Lower().Matches(wxT("*.pgd"))) path.append(wxT(".pgd")); lastFile = path; } } if (!lastFile.IsEmpty()) { design->writeXmlModel(lastFile); setModelChanged(false); setExtendedTitle(); } } else if (answer == wxCANCEL) { event.Veto(); return; } } Hide(); Destroy(); }
void frmDatabaseDesigner::OnAddTable(wxCommandEvent &event) { if (diagrams->GetPageCount() > 0) { hdDrawingView *view = (hdDrawingView *) diagrams->GetPage(diagrams->GetSelection()); ddTableNameDialog *newTableDialog = new ddTableNameDialog( this, design->getNewTableName(), wxEmptyString, NULL ); bool done = false, existsTable; int answer; do { answer = newTableDialog->ShowModal(); existsTable = design->getTable(newTableDialog->GetValue1()) != NULL; if (answer == wxID_OK && !newTableDialog->GetValue1().IsEmpty() && !existsTable) { ddTableFigure *newTable = new ddTableFigure(newTableDialog->GetValue1(), view->getIdx(), rand() % 90 + 200, rand() % 90 + 140, newTableDialog->GetValue2() ); design->addTableToView(view->getIdx(), newTable); design->refreshDraw(view->getIdx()); setModelChanged(true); setExtendedTitle(); done = true; } else if(existsTable && answer == wxID_OK) { wxMessageBox(_("You have to change the table name because there is already a table with that name in this model."), _("Table already existing"), wxICON_EXCLAMATION); } } while (answer != wxID_CANCEL && !done); delete newTableDialog; } }
void frmDatabaseDesigner::OnModelSaveAs(wxCommandEvent &event) { wxFileDialog openFileDialog( this, _("Save model"), wxT(""), wxT(""), wxT("*.pgd"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT, wxDefaultPosition); if (openFileDialog.ShowModal() == wxID_OK) { wxString path; path.append( openFileDialog.GetDirectory() ); path.append( wxFileName::GetPathSeparator() ); path.append( openFileDialog.GetFilename() ); if(!path.Lower().Matches(wxT("*.pgd"))) path.append(wxT(".pgd")); lastFile = path; setModelChanged(false); setExtendedTitle(); design->writeXmlModel(path); } }
void frmDatabaseDesigner::OnDeleteDiagramTab(wxAuiNotebookEvent &event) { deletedTab = event.GetSelection(); wxAuiNotebook *ctrl = (wxAuiNotebook *)event.GetEventObject(); hdDrawingView *view = (hdDrawingView *) ctrl->GetPage(event.GetSelection()); int res = wxMessageBox(wxT("Are you sure you want to delete diagram \"") + view->getDrawing()->getName() + _("\" from model?"), wxT("Delete diagram?"), wxYES_NO | wxNO_DEFAULT, this); if (res != wxYES) { event.Veto(); } else { setModelChanged(true); } UpdateToolbar(); }
void frmDatabaseDesigner::OnNewModel(wxCommandEvent &event) { hdDrawingView *view = (hdDrawingView *) diagrams->GetPage(diagrams->GetSelection()); if (changed) { // Ask what to do with old model int answer = wxMessageBox(_("Save model changes?"), _("Confirm"), wxYES_NO | wxCANCEL); if (answer == wxYES) { if (!lastFile.IsEmpty()) OnModelSave(event); else OnModelSaveAs(event); } else if (answer == wxCANCEL) return; } // Clean treeview, notebook, and sql pane design->emptyModel(); while (diagrams->GetPageCount() > 0) { diagrams->RemovePage(0); design->deleteDiagram(0); } sqltext->SetText(wxEmptyString); // Add new diagram diagrams->AddPage(design->createDiagram(diagrams, _("unnamed"), false)->getView(), _("unnamed")); // Misc lastFile = wxEmptyString; setModelChanged(false); setExtendedTitle(); UpdateToolbar(); }
frmDatabaseDesigner::frmDatabaseDesigner(frmMain *form, const wxString &_title, pgConn *conn) : pgFrame(NULL, _title) { mainForm = form; SetTitle(wxT("Database Designer")); SetIcon(wxIcon(*ddmodel_32_png_ico)); loading = true; closing = false; RestorePosition(100, 100, 600, 500, 450, 300); SetMinSize(wxSize(450, 300)); // connection connection = conn; // notify wxAUI which frame to use manager.SetManagedWindow(this); manager.SetFlags(wxAUI_MGR_DEFAULT | wxAUI_MGR_TRANSPARENT_DRAG); wxWindowBase::SetFont(settings->GetSystemFont()); // Set File menu fileMenu = new wxMenu(); fileMenu->Append(MNU_NEW, _("&New database design\tCtrl-N"), _("Create a new database design")); fileMenu->AppendSeparator(); fileMenu->Append(MNU_LOADMODEL, _("&Open Model..."), _("Open an existing database design from a file")); fileMenu->Append(MNU_SAVEMODEL, _("&Save Model"), _("Save changes at database design")); fileMenu->Append(MNU_SAVEMODELAS, _("&Save Model As..."), _("Save database design at new file")); fileMenu->AppendSeparator(); fileMenu->Append(CTL_IMPSCHEMA, _("&Import Tables..."), _("Import tables from database schema to database designer model")); fileMenu->AppendSeparator(); fileMenu->Append(MNU_EXIT, _("E&xit\tCtrl-W"), _("Exit database designer window")); // Set Diagram menu diagramMenu = new wxMenu(); diagramMenu->Append(MNU_NEWDIAGRAM, _("&New model diagram"), _("Create a new diagram")); diagramMenu->Append(MNU_DELDIAGRAM, _("&Delete selected model diagram..."), _("Delete selected diagram")); diagramMenu->Append(MNU_RENDIAGRAM, _("&Rename selected model diagram..."), _("Rename selected diagram")); // Set View menu viewMenu = new wxMenu(); viewMenu->AppendCheckItem(MNU_TOGGLEMBROWSER, _("&Model Browser"), _("Show / Hide Model Browser Window")); viewMenu->AppendCheckItem(MNU_TOGGLEDDSQL, _("&SQL Window"), _("Show / Hide SQL Window")); viewMenu->Check(MNU_TOGGLEDDSQL, true); viewMenu->Check(MNU_TOGGLEMBROWSER, true); // Set Help menu helpMenu = new wxMenu(); helpMenu->Append(MNU_CONTENTS, _("&Help"), _("Open the helpfile.")); helpMenu->Append(MNU_HELP, _("&SQL Help\tF1"), _("Display help on SQL commands.")); // Set menu bar menuBar = new wxMenuBar(); menuBar->Append(fileMenu, _("&File")); menuBar->Append(diagramMenu, _("&Diagram")); menuBar->Append(viewMenu, _("&View")); menuBar->Append(helpMenu, _("&Help")); SetMenuBar(menuBar); // Set status bar int iWidths[6] = {0, -1, 40, 150, 80, 80}; CreateStatusBar(6); SetStatusBarPane(-1); SetStatusWidths(6, iWidths); // Set toolbar toolBar = new ctlMenuToolbar(this, -1, wxDefaultPosition, wxDefaultSize, wxTB_FLAT | wxTB_NODIVIDER); toolBar->SetToolBitmapSize(wxSize(16, 16)); toolBar->AddTool(MNU_NEW, _("New Model"), *file_new_png_bmp, _("Create new model"), wxITEM_NORMAL); toolBar->AddTool(MNU_NEWDIAGRAM, _("New Diagram"), *ddnewdiagram_png_bmp, _("Add new diagram"), wxITEM_NORMAL); toolBar->AddSeparator(); toolBar->AddTool(MNU_LOADMODEL, _("Open Model"), *file_open_png_bmp, _("Open existing model"), wxITEM_NORMAL); toolBar->AddTool(MNU_SAVEMODEL, _("Save Model"), *file_save_png_bmp, _("Save current model"), wxITEM_NORMAL); toolBar->AddSeparator(); toolBar->AddTool(MNU_ADDTABLE, _("Add Table"), *table_png_bmp, _("Add empty table to the current model"), wxITEM_NORMAL); toolBar->AddTool(MNU_DELETETABLE, _("Delete Table"), wxBitmap(*ddRemoveTable2_png_img), _("Delete selected table"), wxITEM_NORMAL); toolBar->AddTool(MNU_ADDCOLUMN, _("Add Column"), *table_png_bmp, _("Add new column to the selected table"), wxITEM_NORMAL); toolBar->AddSeparator(); toolBar->AddTool(MNU_GENERATEMODEL, _("Generate Model"), *continue_png_bmp, _("Generate SQL for the current model"), wxITEM_NORMAL); toolBar->AddTool(MNU_GENERATEDIAGRAM, _("Generate Diagram"), *ddgendiagram_png_bmp, _("Generate SQL for the current diagram"), wxITEM_NORMAL); toolBar->AddSeparator(); toolBar->AddTool(CTL_IMPSCHEMA, _("Import Tables from database..."), *conversion_png_ico, _("Import tables from database schema to database designer model"), wxITEM_NORMAL); toolBar->AddSeparator(); toolBar->AddTool(MNU_HELP, _("Help"), *help_png_bmp, _("Display help"), wxITEM_NORMAL); toolBar->Realize(); // Create notebook for diagrams diagrams = new ctlAuiNotebook(this, CTL_DDNOTEBOOK, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TOP | wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS | wxAUI_NB_WINDOWLIST_BUTTON | wxAUI_NB_CLOSE_ON_ALL_TABS); // Now, the scratchpad sqltext = new ctlSQLBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxSIMPLE_BORDER | wxTE_RICH2); //Now, the Objects Browser wxSizer *browserSizer = new wxBoxSizer(wxHORIZONTAL); browserPanel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); // Add the database designer design = new ddDatabaseDesign(diagrams, this); // Create database model browser modelBrowser = new ddModelBrowser(browserPanel, DD_BROWSER, wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS | wxSIMPLE_BORDER, design); design->registerBrowser(modelBrowser); // Set browser Sizers browserSizer->Add(modelBrowser, 1, wxEXPAND); browserPanel->SetSizer(browserSizer); browserSizer->SetSizeHints(browserPanel); // Add view to notebook diagrams->AddPage(design->createDiagram(diagrams, _("unnamed"), false)->getView(), _("unnamed")); // Add the database selection bar and schema selector wxSizer *connectionSizer = new wxBoxSizer(wxHORIZONTAL); connectionPanel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, -1)); cbConnection = new wxBitmapComboBox(connectionPanel, CTL_DDCONNECTION, wxEmptyString, wxDefaultPosition, wxSize(-1, -1), wxArrayString(), wxCB_READONLY | wxCB_DROPDOWN); if(conn) cbConnection->Append(conn->GetName(), CreateBitmap(GetServerColour(conn)), (void *)conn); cbConnection->Append(_("<new connection>"), wxNullBitmap, (void *) NULL); connectionSizer->Add(cbConnection, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 1); connectionSizer->AddSpacer(5); connectionPanel->SetSizer(connectionSizer); connectionSizer->SetSizeHints(connectionPanel); // Add the panes manager.AddPane(diagrams, wxAuiPaneInfo().Center(). Name(wxT("sqlQuery")).Caption(_("Database Designer")). CaptionVisible(true).CloseButton(false).MaximizeButton(true). Dockable(true).Movable(true)); manager.AddPane(browserPanel, wxAuiPaneInfo().Left(). Name(wxT("ModelBrowser")).Caption(_("Model Browser")). CaptionVisible(true).CloseButton(true).MinimizeButton(true). MinSize(wxSize(140, 100)).BestSize(wxSize(200, 200))); manager.AddPane(sqltext, wxAuiPaneInfo().Bottom(). Name(wxT("sqlText")).Caption(_("SQL query")). CaptionVisible(true).CloseButton(true).MaximizeButton(true).MinimizeButton(true). MinSize(wxSize(200, 100)).BestSize(wxSize(350, 150))); manager.AddPane(toolBar, wxAuiPaneInfo().Top(). Name(wxT("toolBar")).Caption(_("Tool bar")). ToolbarPane(). LeftDockable(false).RightDockable(false)); manager.AddPane(connectionPanel, wxAuiPaneInfo().Name(wxT("databaseBar")) .Caption(_("Connection bar")).ToolbarPane().Top(). LeftDockable(false).RightDockable(false)); // Update the AUI manager manager.Update(); //Update browser info modelBrowser->SetSize(browserPanel->GetSize()); previousChanged = true; setModelChanged(false); SetStatusText(wxString(wxT("Ready")), 1); }
void EqCurve::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget ) { painter->setRenderHint( QPainter::Antialiasing, true ); if( m_modelChanged ) { setModelChanged( false ); //counts the active bands int activeHandles=0; for ( int thatHandle = 0; thatHandle<m_handle->count(); thatHandle++ ) { if ( m_handle->at(thatHandle)->isActiveHandle() == true ) { activeHandles++; } } //Computes the main curve //if a band is active the curve will be computed by averaging the curves of each band QMap<float,float> mainCurve; for ( int thatHandle = 0; thatHandle<m_handle->count(); thatHandle++ ) { if ( m_handle->at(thatHandle)->isActiveHandle() == true ) { for ( int x = 0; x < m_width ; x=x+1 ) { if ( m_handle->at( thatHandle )->getType() == highpass ) { mainCurve[x]= ( mainCurve[x] + ( m_handle->at( thatHandle )->getLowCutCurve( x ) * ( activeHandles ) ) - ( ( activeHandles * ( m_heigth/2 ) ) - m_heigth ) ); } if ( m_handle->at(thatHandle)->getType() == lowshelf ) { mainCurve[x]= ( mainCurve[x] + ( m_handle->at( thatHandle )->getLowShelfCurve( x ) * ( activeHandles ) ) - ( ( activeHandles * ( m_heigth/2 ) ) - m_heigth ) ); } if ( m_handle->at( thatHandle )->getType() == para ) { mainCurve[x]= ( mainCurve[x] + ( m_handle->at( thatHandle )->getPeakCurve( x ) * ( activeHandles ) ) - ( ( activeHandles * ( m_heigth/2 ) ) - m_heigth ) ); } if ( m_handle->at( thatHandle )->getType() == highshelf ) { mainCurve[x]= ( mainCurve[x] + ( m_handle->at( thatHandle )->getHighShelfCurve( x ) * ( activeHandles ) ) - ( ( activeHandles * ( m_heigth/2 ) ) - m_heigth ) ); } if ( m_handle->at(thatHandle)->getType() == lowpass ) { mainCurve[x]= ( mainCurve[x] + ( m_handle->at( thatHandle )->getHighCutCurve( x ) * ( activeHandles ) ) - ( ( activeHandles * ( m_heigth/2 ) ) - m_heigth ) ); } } } } //compute a QPainterPath m_curve = QPainterPath(); for ( int x = 0; x < m_width ; x++ ) { mainCurve[x] = ( ( mainCurve[x] / activeHandles ) ) - ( m_heigth/2 ); if ( x==0 ) { m_curve.moveTo( x, mainCurve[x] ); } m_curve.lineTo( x, mainCurve[x] ); } //we cache the curve painting in a pixmap for saving cpu QPixmap cacheMap( boundingRect().size().toSize() ); cacheMap.fill( QColor( 0, 0, 0, 0 ) ); QPainter cachePainter( &cacheMap ); cachePainter.setRenderHint( QPainter::Antialiasing, true ); QPen pen; pen.setWidth( 2 ); pen.setColor( Qt::white ); cachePainter.setPen( pen ); cachePainter.drawPath( m_curve ); cachePainter.end(); m_curvePixmapCache.fill( QColor( 0, 0, 0, 0 ) ); m_curvePixmapCache.swap( cacheMap ); } //we paint our cached curve pixmap painter->drawPixmap( 0, 0, m_width, m_heigth, m_curvePixmapCache ); // if mouse hover a handle, m_alpha counts up slow for blend in the filled EQ curve // todo: a smarter way of this "if-monster" QColor curveColor; if( m_handle->at( 0 )->isMouseHover() || m_handle->at( 1 )->isMouseHover() || m_handle->at( 2 )->isMouseHover() || m_handle->at( 3 )->isMouseHover() || m_handle->at( 4 )->isMouseHover() || m_handle->at( 5 )->isMouseHover() || m_handle->at( 6 )->isMouseHover() || m_handle->at( 7 )->isMouseHover() ) { if ( m_alpha < 40 ) { m_alpha = m_alpha + 10; } } else { if ( m_alpha > 0 ) { m_alpha = m_alpha - 10; } } //draw on mouse hover the curve of hovered filter in different colors for ( int i = 0; i < m_handle->count(); i++ ) { if ( m_handle->at(i)->isMouseHover() ) { switch ( i+1 ) { case 1: curveColor = QColor( 163, 23, 23, 10*m_alpha/4 ); break; case 2: curveColor = QColor( 229,108,0, 10*m_alpha/4 ); break; case 3: curveColor = QColor( 255,240,0, 10*m_alpha/4 ); break; case 4: curveColor = QColor( 12, 255, 0, 10*m_alpha/4 ); break; case 5: curveColor = QColor( 0, 252, 255, 10*m_alpha/4 ); break; case 6: curveColor = QColor( 59, 96, 235, 10*m_alpha/4 ); break; case 7: curveColor = QColor( 112, 73, 255, 10*m_alpha/4 ); break; case 8: curveColor = QColor( 255, 71, 227, 10*m_alpha/4 ); } QPen pen ( curveColor); pen.setWidth( 2 ); painter->setPen( pen ); painter->drawPath( m_handle->at( i )->getCurvePath() ); } } //draw on mouse hover the EQ curve filled. with m_alpha it blends in and out smooth QPainterPath cPath; cPath.addPath( m_curve ); cPath.lineTo( cPath.currentPosition().x(), m_heigth ); cPath.lineTo( cPath.elementAt( 0 ).x , m_heigth ); painter->fillPath( cPath, QBrush ( QColor( 255,255,255, m_alpha ) ) ); }