Class: MainWindow

Inherits:
Qt::MainWindow
  • Object
show all
Defined in:
lib/tmis/interface/mainwindow.rb

Defined Under Namespace

Classes: EntityItemModel

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent = nil) ⇒ MainWindow

Returns a new instance of MainWindow.



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/tmis/interface/mainwindow.rb', line 149

def initialize(parent = nil)
  super(parent)
  @ui = Ui::MainWindow.new
  @ui.setup_ui self
  @ui.exportMenu.enabled = false
  @study_table_views = [@ui.studiesTableView, @ui.studiesTableView2, @ui.studiesTableView3,
                        @ui.studiesTableView4, @ui.studiesTableView5, @ui.studiesTableView6]
  @table_views = [[Cabinet, CabinetTableModel, @ui.cabinetsTableView], [Course, CourseTableModel, @ui.coursesTableView],
                  [Group, GroupTableModel, @ui.groupsTableView], [Lecturer, LecturerTableModel, @ui.lecturersTableView],
                  [Semester, SemesterTableModel, @ui.semestersTableView], [Speciality, SpecialityTableModel, @ui.specialitiesTableView],
                  [SpecialitySubject, SpecialitySubjectTableModel, @ui.specialitySubjectsTableView],
                  [Subgroup, SubgroupTableModel, @ui.subgroupsTableView], [Subject, SubjectTableModel, @ui.subjectsTableView]]
  # Следующие два атрибута используются для обхода бага связанного с работой GC
  # http://stackoverflow.com/questions/9715548/cant-display-more-than-one-table-model-inheriting-from-the-same-class-on-differ
  @table_models = @study_table_models = []
  @tables_views_to_hide = @study_table_views + [@ui.cabinetsTableView, @ui.coursesTableView, @ui.groupsTableView,
                   @ui.lecturersTableView, @ui.semestersTableView, @ui.specialitySubjectsTableView,
                   @ui.specialitiesTableView, @ui.subgroupsTableView, @ui.subjectsTableView, @ui.dateDateEdit,
                   @ui.dayLabel, @ui.dayLabel2, @ui.dayLabel3, @ui.dayLabel4, @ui.dayLabel5, @ui.dayLabel6,
                   @ui.subjectsListView, @ui.lecturersListView, @ui.cabinetsListView, @ui.tarificationCheckBox,
                   @ui.addCabinetPushButton, @ui.addCoursePushButton, @ui.addGroupPushButton,
                   @ui.addSubgroupPushButton, @ui.addLecturerPushButton, @ui.addSemesterPushButton,
                   @ui.addSpecialityPushButton, @ui.addSpecialitySubjectPushButton, @ui.addSubjectPushButton,
                   @ui.removeCabinetPushButton, @ui.removeCoursePushButton, @ui.removeGroupPushButton,
                   @ui.removeSubgroupPushButton, @ui.removeLecturerPushButton, @ui.removeSemesterPushButton,
                   @ui.removeSpecialityPushButton, @ui.removeSpecialitySubjectPushButton, @ui.removeSubjectPushButton]
  @widgets_to_disable = [@ui.findMenu, @ui.exportMenu, @ui.verifyMenu, @ui.saveAsAction, @ui.expandChangesAction]
  @tables_views_to_hide.each(&:hide)
  @widgets_to_disable.each{ |x| x.enabled = false }
  modeActionGroup = Qt::ActionGroup.new(self)
  modeActionGroup.setExclusive(true)
  modeActionGroup.addAction(@ui.weeklyViewAction)
  modeActionGroup.addAction(@ui.dailyViewAction)
  @temp = ->(){ "#{Dir.mktmpdir('tmis')}/temp.sqlite" }
  connect(@ui.aboutQtAction, SIGNAL('triggered()')){ Qt::Application.aboutQt }
  connect(@ui.aboutProgramAction, SIGNAL('triggered()')){ AboutDialog.new.exec }
  connect(@ui.exportGeneralAction, SIGNAL('triggered()')) do
    ExportGeneralTimetableDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))).exec
  end
  connect(@ui.exportForLecturersAction, SIGNAL('triggered()')) do
    ExportLecturerTimetableDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))).exec
  end
  connect(@ui.exportForGroupsAction, SIGNAL('triggered()')) do
    ExportGroupTimetableDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))).exec
  end
  connect(@ui.settingsAction, SIGNAL('triggered()')){ SettingsDialog.new.exec }
  connect(@ui.expandChangesAction, SIGNAL('triggered()')){ ExpandChangesDialog.new(self).exec }
  @clear_recent_action = Qt::Action.new('Очистить', self)
  @clear_recent_action.setData Qt::Variant.new('clear')
  connect(@clear_recent_action, SIGNAL('triggered()'), self, SLOT('clear_recent_files()'))
  @ui.dateDateEdit.setDate(Qt::Date.fromString(Date.today.to_s, Qt::ISODate))
  setup_dateEdit(Date.today)
  @ui.recentMenu.clear
  @ui.recentMenu.addActions([@clear_recent_action] + Settings[:recent, :files].split.map{ |path| create_recent_action(path) })
  #Settings[:app, :first_run] = ''
  Settings.set_defaults_if_first_run
  @console = ConsoleDialog.new self
  connect(@console, SIGNAL('dialogClosed()')){ @study_table_models.each(&:cancelColoring) }
  $TARIFICATION_MODE = false
end

Instance Attribute Details

#study_table_modelsObject (readonly)

Returns the value of attribute study_table_models.



147
148
149
# File 'lib/tmis/interface/mainwindow.rb', line 147

def study_table_models
  @study_table_models
end

#uiObject (readonly)

Returns the value of attribute ui.



146
147
148
# File 'lib/tmis/interface/mainwindow.rb', line 146

def ui
  @ui
end

Instance Method Details

#clear_recent_filesObject



793
794
795
796
# File 'lib/tmis/interface/mainwindow.rb', line 793

def clear_recent_files
  @ui.recentMenu.clear
  @ui.recentMenu.addAction @clear_recent_action
end

#create_recent_action(path) ⇒ Object

Contract String => Qt::Action



776
777
778
779
780
# File 'lib/tmis/interface/mainwindow.rb', line 776

def create_recent_action(path)
  action = Qt::Action.new(path[path.size-10..path.size], self)
  connect(action, SIGNAL('triggered()'), self, SLOT('open_file()'))
  action.setData Qt::Variant.new(path); action
end

#create_stubsObject



217
218
219
220
221
# File 'lib/tmis/interface/mainwindow.rb', line 217

def create_stubs
  Lecturer.create(surname: Settings[:stubs, :lecturer], stub: true)
  Cabinet.create(title: Settings[:stubs, :cabinet], stub: true)
  Subject.create(title: Settings[:stubs, :subject], stub: true)
end

#filterListViews(study64) ⇒ Object



705
706
707
708
709
710
711
712
# File 'lib/tmis/interface/mainwindow.rb', line 705

def filterListViews(study64)
  if study.subject

  end
  if study.lecturer

  end
end

#on_addCabinetPushButton_clickedObject



827
828
829
# File 'lib/tmis/interface/mainwindow.rb', line 827

def on_addCabinetPushButton_clicked
  @ui.cabinetsTableView.model.insert_new
end

#on_addCoursePushButton_clickedObject



835
836
837
# File 'lib/tmis/interface/mainwindow.rb', line 835

def on_addCoursePushButton_clicked
  @ui.coursesTableView.model.insert_new
end

#on_addGroupPushButton_clickedObject



843
844
845
# File 'lib/tmis/interface/mainwindow.rb', line 843

def on_addGroupPushButton_clicked
  @ui.groupsTableView.model.insert_new
end

#on_addLecturerPushButton_clickedObject



851
852
853
# File 'lib/tmis/interface/mainwindow.rb', line 851

def on_addLecturerPushButton_clicked
  @ui.lecturersTableView.model.insert_new
end

#on_addSemesterPushButton_clickedObject



859
860
861
# File 'lib/tmis/interface/mainwindow.rb', line 859

def on_addSemesterPushButton_clicked
  @ui.semestersTableView.model.insert_new
end

#on_addSpecialityPushButton_clickedObject



875
876
877
# File 'lib/tmis/interface/mainwindow.rb', line 875

def on_addSpecialityPushButton_clicked
  @ui.specialitiesTableView.model.insert_new
end

#on_addSpecialitySubjectPushButton_clickedObject



867
868
869
# File 'lib/tmis/interface/mainwindow.rb', line 867

def on_addSpecialitySubjectPushButton_clicked
  @ui.specialitySubjectsTableView.model.insert_new
end

#on_addSubgroupPushButton_clickedObject



883
884
885
# File 'lib/tmis/interface/mainwindow.rb', line 883

def on_addSubgroupPushButton_clicked
  @ui.subgroupsTableView.model.insert_new
end

#on_addSubjectPushButton_clickedObject



891
892
893
# File 'lib/tmis/interface/mainwindow.rb', line 891

def on_addSubjectPushButton_clicked
  @ui.subjectsTableView.model.insert_new
end

#on_allAction_triggeredObject



295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
# File 'lib/tmis/interface/mainwindow.rb', line 295

def on_allAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyLecturers
    @console.browser.append verifyCabinets
    @console.browser.append showComputerCabinets
    @console.browser.append showLecturerStubs
    @console.browser.append showCabinetStubs
    @console.browser.append showSubjectsStubs
    @console.browser.append showPreferredDays
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_allCoincidenceAction_triggeredObject



311
312
313
314
315
316
317
318
319
320
# File 'lib/tmis/interface/mainwindow.rb', line 311

def on_allCoincidenceAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyLecturers
    @console.browser.append verifyCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_allNotAssignedAction_triggeredObject



322
323
324
325
326
327
328
329
330
331
332
# File 'lib/tmis/interface/mainwindow.rb', line 322

def on_allNotAssignedAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showLecturerStubs
    @console.browser.append showCabinetStubs
    @console.browser.append showSubjectsStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_closeAction_triggeredObject



281
282
283
284
285
# File 'lib/tmis/interface/mainwindow.rb', line 281

def on_closeAction_triggered
  @tables_views_to_hide.each(&:hide)
  @widgets_to_disable.each{ |x| x.enabled = false }
  Database.instance.disconnect unless $TESTING
end

#on_dataTabWidget_currentChanged(index) ⇒ Object



899
900
901
902
903
904
905
906
907
908
# File 'lib/tmis/interface/mainwindow.rb', line 899

def on_dataTabWidget_currentChanged(index)
  if Database.instance.connected?
    @table_views.each do |c, m, view|
      model = view.model
      model.refresh
      proxy_model = model
      view.model = proxy_model
    end
  end
end

#on_dateDateEdit_dateChangedObject



798
799
800
801
# File 'lib/tmis/interface/mainwindow.rb', line 798

def on_dateDateEdit_dateChanged
  setup_dateEdit(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)))
  setup_study_table_views if Database.instance.connected?
end

#on_debugConsoleAction_triggeredObject



931
932
933
# File 'lib/tmis/interface/mainwindow.rb', line 931

def on_debugConsoleAction_triggered
  DebugConsoleDialog.new(self).show
end

#on_findByCabinetAction_triggeredObject



927
928
929
# File 'lib/tmis/interface/mainwindow.rb', line 927

def on_findByCabinetAction_triggered
  FindDialog.new(:cabinet, self).show
end

#on_findByLecturerAction_triggeredObject



919
920
921
# File 'lib/tmis/interface/mainwindow.rb', line 919

def on_findByLecturerAction_triggered
  FindDialog.new(:lecturer, self).show
end

#on_findBySubjectAction_triggeredObject



923
924
925
# File 'lib/tmis/interface/mainwindow.rb', line 923

def on_findBySubjectAction_triggered
  FindDialog.new(:subject, self).show
end

#on_importAction_triggeredObject



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# File 'lib/tmis/interface/mainwindow.rb', line 245

def on_importAction_triggered
  please_wait do
    if (filename = Qt::FileDialog::getOpenFileName(self, 'Open File', Dir.home, 'Spreadsheets(*.xls *.xlsx *.ods *.csv)'))
      filename = filename.force_encoding('UTF-8')
      if Database.instance.connected?
        (id = ImportDialog.new(Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)))).exec
      else
        (id = ImportDialog.new(Date.today)).exec
      end
      unless id.params.empty?
        begin
          sheet = SpreadsheetCreater.create filename
          reader = TimetableReader.new(sheet, id.params[:sheet])
          monday = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)).monday
          if Database.instance.connected?
            Database.instance.transaction do Study.where(date: (monday..(monday + 6))).each(&:delete) end
          else
            Database.instance.connect_to(@temp.())
            create_stubs
          end
          TimetableManager.new(reader, id.params[:date]).save_to_db
          show_tables
        rescue => e
          show_message "При импорте произошли ошибки,\nтаблица не была импортирована.\nПроверьте структуру таблицы."
        end
      end
    end
  end
end

#on_newAction_triggeredObject



210
211
212
213
214
215
# File 'lib/tmis/interface/mainwindow.rb', line 210

def on_newAction_triggered
  Database.instance.connect_to(@temp.())
  create_stubs
  Group.create(title: 'New')
  show_tables
end

#on_openAction_triggeredObject



223
224
225
226
227
228
229
230
# File 'lib/tmis/interface/mainwindow.rb', line 223

def on_openAction_triggered
  if (filename = Qt::FileDialog::getOpenFileName(self, 'Open File', Dir.home, 'TMIS databases (SQLite3)(*.sqlite)'))
    filename = filename.force_encoding("UTF-8")
    Database.instance.connect_to filename
    update_recent filename
    show_tables
  end
end

#on_quitAction_triggeredObject



287
288
289
290
291
292
293
# File 'lib/tmis/interface/mainwindow.rb', line 287

def on_quitAction_triggered
  on_closeAction_triggered
  recent = @ui.recentMenu.actions
  Settings[:recent, :files] = recent[1..recent.size-1].map{ |a| a.data.value.to_s }.join(' ')
  puts 'Sayonara!'
  Qt::Application.quit
end

#on_removeCabinetPushButton_clickedObject



831
832
833
# File 'lib/tmis/interface/mainwindow.rb', line 831

def on_removeCabinetPushButton_clicked
  @ui.cabinetsTableView.model.remove_current
end

#on_removeCoursePushButton_clickedObject



839
840
841
# File 'lib/tmis/interface/mainwindow.rb', line 839

def on_removeCoursePushButton_clicked
  @ui.coursesTableView.model.remove_current
end

#on_removeGroupPushButton_clickedObject



847
848
849
# File 'lib/tmis/interface/mainwindow.rb', line 847

def on_removeGroupPushButton_clicked
  @ui.groupsTableView.model.remove_current
end

#on_removeLecturerPushButton_clickedObject



855
856
857
# File 'lib/tmis/interface/mainwindow.rb', line 855

def on_removeLecturerPushButton_clicked
  @ui.lecturersTableView.model.remove_current
end

#on_removeSemesterPushButton_clickedObject



863
864
865
# File 'lib/tmis/interface/mainwindow.rb', line 863

def on_removeSemesterPushButton_clicked
  @ui.semestersTableView.model.remove_current
end

#on_removeSpecialityPushButton_clickedObject



879
880
881
# File 'lib/tmis/interface/mainwindow.rb', line 879

def on_removeSpecialityPushButton_clicked
  @ui.specialitiesTableView.model.remove_current
end

#on_removeSpecialitySubjectPushButton_clickedObject



871
872
873
# File 'lib/tmis/interface/mainwindow.rb', line 871

def on_removeSpecialitySubjectPushButton_clicked
  @ui.specialitySubjectsTableView.model.remove_current
end

#on_removeSubgroupPushButton_clickedObject



887
888
889
# File 'lib/tmis/interface/mainwindow.rb', line 887

def on_removeSubgroupPushButton_clicked
  @ui.subgroupsTableView.model.remove_current
end

#on_removeSubjectPushButton_clickedObject



895
896
897
# File 'lib/tmis/interface/mainwindow.rb', line 895

def on_removeSubjectPushButton_clicked
  @ui.subjectsTableView.model.remove_current
end

#on_saveAction_triggeredObject



232
233
# File 'lib/tmis/interface/mainwindow.rb', line 232

def on_saveAction_triggered
end

#on_saveAsAction_triggeredObject



235
236
237
238
239
240
241
242
243
# File 'lib/tmis/interface/mainwindow.rb', line 235

def on_saveAsAction_triggered
  if (filename = Qt::FileDialog::getSaveFileName(self, 'Save File', "#{Dir.home}/NewTimetable.sqlite", 'TMIS databases (SQLite3)(*.sqlite)'))
    filename.force_encoding('UTF-8')
    FileUtils.cp(Database.instance.path, filename) unless Database.instance.path == filename
    Database.instance.connect_to filename
    update_recent filename
    show_tables
  end
end

#on_showCabinetStubsAction_triggeredObject



429
430
431
432
433
434
435
436
437
# File 'lib/tmis/interface/mainwindow.rb', line 429

def on_showCabinetStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showCabinetStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_showLecturerStubsAction_triggeredObject



406
407
408
409
410
411
412
413
414
# File 'lib/tmis/interface/mainwindow.rb', line 406

def on_showLecturerStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showLecturerStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_showManualAction_triggeredObject



814
815
816
817
818
819
820
821
822
823
824
825
# File 'lib/tmis/interface/mainwindow.rb', line 814

def on_showManualAction_triggered
  # binding doesn't include QHelpEngine
  #helpEngine Qt::HelpEngineCore('test.qhc')
  #links = helpEngine.linksForIdentifier('MyDialog::ChangeButton')
  #if links.count
  #  helpData = helpEngine.fileData links.constBegin.value
  #  if !helpData.isEmpty
  #    displayHelp helpData
  #  end
  #end
  Qt::DesktopServices::openUrl(Qt::Url.new('https://github.com/Noein/TMIS/wiki'))
end

#on_showSubjectsStubsAction_triggeredObject



452
453
454
455
456
457
458
459
460
# File 'lib/tmis/interface/mainwindow.rb', line 452

def on_showSubjectsStubsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showSubjectsStubs
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_tabWidget_currentChanged(index) ⇒ Object



910
911
912
913
914
915
916
917
# File 'lib/tmis/interface/mainwindow.rb', line 910

def on_tabWidget_currentChanged(index)
  if Database.instance.connected?
    if index == 0
      @study_table_models.each(&:refresh)
      [@ui.subjectsListView, @ui.lecturersListView, @ui.cabinetsListView].each{|view| view.model.refresh }
    end
  end
end

#on_tarificationCheckBox_toggled(checked) ⇒ Object



610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
# File 'lib/tmis/interface/mainwindow.rb', line 610

def on_tarificationCheckBox_toggled(checked)
  if checked
    $TARIFICATION_MODE = true
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.subjectsListView.setModel model
    @ui.subjectsListView.show
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.lecturersListView.setModel model
    @ui.lecturersListView.show
  else
    $TARIFICATION_MODE = false
    model =  EntityItemModel.new(->(){ Subject.all }, self)
    @ui.subjectsListView.setModel model
    @ui.subjectsListView.show
    model =  EntityItemModel.new(->(){ Lecturer.all }, self)
    @ui.lecturersListView.setModel model
    @ui.lecturersListView.show
  end
end

#on_verifyCabinetsAction_triggeredObject



383
384
385
386
387
388
389
390
391
# File 'lib/tmis/interface/mainwindow.rb', line 383

def on_verifyCabinetsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_verifyComputerCabinetsAction_triggeredObject



475
476
477
478
479
480
481
482
483
# File 'lib/tmis/interface/mainwindow.rb', line 475

def on_verifyComputerCabinetsAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showComputerCabinets
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_verifyLecturersAction_triggeredObject



355
356
357
358
359
360
361
362
363
# File 'lib/tmis/interface/mainwindow.rb', line 355

def on_verifyLecturersAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append verifyLecturers
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#on_verifyPreferredDaysAction_triggeredObject



498
499
500
501
502
503
504
505
506
# File 'lib/tmis/interface/mainwindow.rb', line 498

def on_verifyPreferredDaysAction_triggered
  begin
    @console.browser.clear
    @console.show
    @console.browser.append showPreferredDays
  rescue
    show_message "При проверке произошли ошибки.\nПроверьте таблицы данных и расписание"
  end
end

#open_fileObject



766
767
768
769
770
771
772
773
# File 'lib/tmis/interface/mainwindow.rb', line 766

def open_file
  filename = sender.data.value.to_s
  if File.exist? filename
    Database.instance.connect_to filename
    update_recent filename
    show_tables
  end
end

#please_wait {|block| ... } ⇒ Object

Yields:

  • (block)


808
809
810
811
812
# File 'lib/tmis/interface/mainwindow.rb', line 808

def please_wait(&block)
  @ui.statusbar.showMessage 'Please, wait...'
  yield block
  @ui.statusbar.clearMessage
end

#refreshTableViewModel(date_variant) ⇒ Object



737
738
739
# File 'lib/tmis/interface/mainwindow.rb', line 737

def refreshTableViewModel(date_variant)
  @study_table_models[date_variant.value.dayOfWeek - 1].refresh
end

#setup_dateEdit(date) ⇒ Object



803
804
805
806
# File 'lib/tmis/interface/mainwindow.rb', line 803

def setup_dateEdit(date)
  type = date.cweek.even? ? "Чётная" : "Нечётная"
  @ui.dateDateEdit.displayFormat = "Неделя №#{date.cweek} (#{type}) dddd - d MMMM yy"
end

#setup_study_table_view(view, date) ⇒ Object



741
742
743
744
745
746
747
# File 'lib/tmis/interface/mainwindow.rb', line 741

def setup_study_table_view(view, date)
  model = StudyTableModel.new(date, view)
  view = setup_table_view2(view, model, Qt::HeaderView::Interactive)
  model.columnCount.times{ |i| i.odd? ? view.setColumnWidth(i, 50) : view.setColumnWidth(i, 150) }
  model.rowCount.times{ |i| view.setRowHeight(i, 50) }
  model
end

#setup_study_table_viewsObject



714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
# File 'lib/tmis/interface/mainwindow.rb', line 714

def setup_study_table_views
  @ui.deleteAction.disconnect(SIGNAL('triggered()'))
  monday = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate)).monday
  @study_table_models = @study_table_views.each_with_index.map do |view, index|
    model = setup_study_table_view(view, monday + index)
    model.disconnect(SIGNAL('studySaved(QVariant)'))
    view.disconnect(SIGNAL('doubleClicked(QModelIndex)'))
    view.disconnect(SIGNAL('customContextMenuRequested(QPoint)'))
    view.disconnect(SIGNAL('clicked(QModelIndex)'))
    model.disconnect(SIGNAL('refreshTarification(QModelIndex)'))
    connect(view, SIGNAL('customContextMenuRequested(QPoint)'), model, SLOT('displayMenu(QPoint)'))
    connect(view, SIGNAL('clicked(QModelIndex)')){ |index| setupListViews(index) }
    connect(model, SIGNAL('refreshTarification(QModelIndex)')){ |index| setupListViews(index) }
    connect(view, SIGNAL('doubleClicked(QModelIndex)'), model, SLOT('editStudy(QModelIndex)'))
    #connect(model, SIGNAL('studySaved(QString)')){|study64| filterListViews(study64) }
    connect(model, SIGNAL('studySaved(QVariant)'), self, SLOT('refreshTableViewModel(QVariant)'))
    connect(@ui.deleteAction, SIGNAL('triggered()'), model, SLOT('removeData()'))
    connect(@ui.cancelVerifyingAction, SIGNAL('triggered()'), model, SLOT('cancelColoring()'))
    view.setContextMenuPolicy(Qt::CustomContextMenu)
    model
  end
end

#setup_table_view(table_view, table_model, resize_mode) ⇒ Object

Contract IsA, IsA, IsA => IsA



758
759
760
761
762
763
764
# File 'lib/tmis/interface/mainwindow.rb', line 758

def setup_table_view(table_view, table_model, resize_mode)
  table_view.setModel(table_model)
  table_view.horizontalHeader.setResizeMode(resize_mode)
  table_view.verticalHeader.setResizeMode(Qt::HeaderView::ResizeToContents)
  table_view.show
  table_view
end

#setup_table_view2(table_view, table_model, resize_mode) ⇒ Object



749
750
751
752
753
754
755
# File 'lib/tmis/interface/mainwindow.rb', line 749

def setup_table_view2(table_view, table_model, resize_mode)
  table_view.setModel(table_model)
  table_view.horizontalHeader.setResizeMode(resize_mode)
  table_view.verticalHeader.setResizeMode(resize_mode)
  table_view.show
  table_view
end

#setupListViews(index) ⇒ Object



630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
# File 'lib/tmis/interface/mainwindow.rb', line 630

def setupListViews(index)
  return false unless $TARIFICATION_MODE
  string = index.model.data(index, Qt::UserRole).toString
  if string.nil? || string.empty?
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.subjectsListView.setModel model
    @ui.subjectsListView.show
    model =  EntityItemModel.new(->(){ [] }, self)
    @ui.lecturersListView.setModel model
    @ui.lecturersListView.show
  else
    entity = Marshal.load(Base64.decode64(string))
    p entity
    if entity.class == Study
      group = entity.groupable.get_group
      course = group.course
      if course.nil?
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      else
        semester = course.current_semester
        get_subjects = ->() do
          if entity.lecturer && entity.subject.stub
            SpecialitySubject.where(lecturer_id: entity.lecturer, speciality_id: group.speciality, semester_id: semester).map(&:subject)
          else
            SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:subject)
          end
        end
        get_lecturers = ->() do
          if entity.subject && entity.lecturer.stub
            SpecialitySubject.where(subject_id: entity.subject, speciality_id: group.speciality, semester_id: semester).map(&:lecturer)
          else
            SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:lecturer)
          end
        end
        model =  EntityItemModel.new(get_subjects, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(get_lecturers, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      end
    elsif entity.class == Group
      group = entity
      course = group.course
      if course.nil?
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(->(){ [] }, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      else
        semester = course.current_semester
        get_subjects = ->() do
          SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:subject)
        end
        get_lecturers = ->() do
          SpecialitySubject.where(speciality_id: group.speciality, semester_id: semester).map(&:lecturer)
        end
        model =  EntityItemModel.new(get_subjects, self)
        @ui.subjectsListView.setModel model
        @ui.subjectsListView.show
        model =  EntityItemModel.new(get_lecturers, self)
        @ui.lecturersListView.setModel model
        @ui.lecturersListView.show
      end
    end
  end
end

#show_message(text) ⇒ Object



275
276
277
278
279
# File 'lib/tmis/interface/mainwindow.rb', line 275

def show_message(text)
  box = Qt::MessageBox.new
  box.setText text
  box.exec
end

#show_tablesObject



587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
# File 'lib/tmis/interface/mainwindow.rb', line 587

def show_tables
  @table_models = @table_views.map do |entity, table_model, table_view|
    model = table_model.new(entity.all, table_view)
    proxy_model = model
    setup_table_view(table_view, proxy_model, Qt::HeaderView::Stretch)
    model
  end
  setup_study_table_views
  @ui.dateDateEdit.show
  @tables_views_to_hide.each(&:show)
  @widgets_to_disable.each{ |x| x.enabled = true }
  #@ui.studiesTableView.setSpan(0, 0, 1, 3)
  model =  EntityItemModel.new(->(){ Subject.all }, self)
  @ui.subjectsListView.setModel model
  @ui.subjectsListView.show
  model =  EntityItemModel.new(->(){ Lecturer.all }, self)
  @ui.lecturersListView.setModel model
  @ui.lecturersListView.show
  model =  EntityItemModel.new(->(){ Cabinet.all }, self)
  @ui.cabinetsListView.setModel model
  @ui.cabinetsListView.show
end

#showCabinetStubsObject



416
417
418
419
420
421
422
423
424
425
426
427
# File 'lib/tmis/interface/mainwindow.rb', line 416

def showCabinetStubs
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:cabinet_stubs).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::green)
      "#{date} | Не назначен кабинет! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end

#showComputerCabinetsObject



462
463
464
465
466
467
468
469
470
471
472
473
# File 'lib/tmis/interface/mainwindow.rb', line 462

def showComputerCabinets
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:computer_cabinets).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::yellow)
      "#{date} | Занятие подгруппы проходит не в компьютерном кабинете! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end

#showLecturerStubsObject



393
394
395
396
397
398
399
400
401
402
403
404
# File 'lib/tmis/interface/mainwindow.rb', line 393

def showLecturerStubs
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:lecturer_stubs).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColor(study.id, Qt::green)
      "#{date} | Не назначен преподаватель! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end

#showPreferredDaysObject



485
486
487
488
489
490
491
492
493
494
495
496
# File 'lib/tmis/interface/mainwindow.rb', line 485

def showPreferredDays
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:preferred_days).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::yellow)
      "#{date} | #{study.lecturer.to_s} предпочитает вести занятия в другой день! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end

#showSubjectsStubsObject



439
440
441
442
443
444
445
446
447
448
449
450
# File 'lib/tmis/interface/mainwindow.rb', line 439

def showSubjectsStubs
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:subject_stubs).map do |date, studies|
    studies.map do |study|
      @study_table_models[date.cwday - 1].setColor(study.id, Qt::green)
      "#{date} | Не назначен предмет! Группа: #{study.get_group.title} Номер пары: #{study.number}"
    end.join("\n")
  end
  res = res.compact.join("\n")
end

#update_recent(filename) ⇒ Object

Contract String => Any



783
784
785
786
787
788
789
790
791
# File 'lib/tmis/interface/mainwindow.rb', line 783

def update_recent(filename)
  actions = @ui.recentMenu.actions
  if actions.size > 5
    @ui.recentMenu.clear
    @ui.recentMenu.addActions([@clear_recent_action] + actions[1..actions.size-1])
  else
    @ui.recentMenu.addAction create_recent_action(filename)
  end
end

#verifyCabinetsObject



365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
# File 'lib/tmis/interface/mainwindow.rb', line 365

def verifyCabinets
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:cabinet_studies).map do |k, v|
    date = k[0]
    cabinet= Cabinet.where(id: k[1]).first
    number = k[2]
    if cabinet.stub
      nil
    else
      v.each{ |study| @study_table_models[date.cwday - 1].setColorCabinet(study.id, Qt::blue) }
      "#{date} | В #{cabinet.title} проходит несколько пар одновременно! Номер пары: #{number}"
    end
  end
  res = res.compact.join("\n")
end

#verifyLecturersObject



334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
# File 'lib/tmis/interface/mainwindow.rb', line 334

def verifyLecturers
  date = Date.parse(@ui.dateDateEdit.date.toString(Qt::ISODate))
  dates = date.monday..date.monday + 6
  v = Verificator.new(dates)
  res = v.verify(:lecturer_studies).map do |k, v|
    date = k[0]
    lecturer = Lecturer.where(id: k[1]).first
    number = k[2]
    if lecturer.stub
      nil
    else
      v.each do |study|
        tst = @study_table_models[date.cwday - 1]
        tst.setColor(study.id, Qt::red)
      end
      "#{date} | #{lecturer} ведёт несколько пар одновременно! Номер пары: #{number}"
    end
  end
  res = res.compact.join("\n")
end